using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using UnivateProperties_API.Containers.ProcessFlow; using UnivateProperties_API.Context; using UnivateProperties_API.Helpers; using UnivateProperties_API.Model; using UnivateProperties_API.Model.ProcessFlow; using UnivateProperties_API.Repository.Communication; using UnivateProperties_API.Repository.Timeshare; namespace UnivateProperties_API.Repository.ProccessFlow { public class BidRepository : IBidRepository { private readonly DataContext _dbContext; public BidRepository(DataContext dbContext) { _dbContext = dbContext; } public List Get(Func where) { return _dbContext.BidItems.Where(where).ToList(); } public List GetAll() { return _dbContext.BidItems.ToList(); } public BidItem GetDetailed(Func first) { var item = _dbContext.BidItems.FirstOrDefault(first); return item; } public List GetDetailedAll() { return GetAll(); } public List GetAllBid() { List bids = _dbContext.BidItems .Include("Property") .Include("TimeshareWeek") .Include("BidMaker") .Include("Status") .Include("Property.Owner") .Include("Property.Agent") .ToList(); return LoadDisplay(bids); } public List GetMyBid(Func where) { List bids = _dbContext.BidItems .Include("Property") .Include("TimeshareWeek") .Include("BidMaker") .Include("Status") .Where(where) .ToList(); return LoadDisplay(bids); } private List LoadDisplay(List bids) { List list = new List(); foreach (BidItem item in bids) { BidItemDisplay bid = BidItemDisplay(item); list.Add(bid); } return list; } public void Insert(BidItem item) { var week = _dbContext.Weeks.Find(item.TimeshareWeekId); if (!(item.TimeshareWeek == null && week == null)) { if (week == null && item.TimeshareWeek != null) { MyCommon.PostToConsoft(item.TimeshareWeek); WeekRepository weekRepository = new WeekRepository(_dbContext); weekRepository.Insert(item.TimeshareWeek); } var status = _dbContext.Status.Where(x => x.Code == "E1").FirstOrDefault(); if (status != null) { List list = new List() { item, week, week.Owner }; item.StatusId = status.Id; if (item.TimeshareWeekId != null) { if (week != null) { TemplateRepository templateRepository = new TemplateRepository(_dbContext); var template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekOfferMade-Owner"); if (template != null) { templateRepository.SendEmailTemplate(template, week.Owner, list); } template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekOfferMade-User"); if (template != null) { var bidMaker = _dbContext.Individuals.FirstOrDefault(x => x.Id == item.BidMakerId); if (bidMaker != null) { templateRepository.SendEmailTemplate(template, bidMaker, list); } } } } } _dbContext.Add(item); Save(); } } public void InsertNew(BidItemNew item) { var week = _dbContext.Weeks.Include("Owner").Where(x => x.Id == item.TimeshareWeekId).FirstOrDefault(); var property = _dbContext.Properties.Include("Owner").Where(x => x.Id == item.PropertyId).FirstOrDefault(); BidItem bid = new BidItem(); foreach (string prop in bid.GetAllProperties()) { if (prop != "Item" && prop != "Display") bid[prop] = item[prop]; } var status = _dbContext.Status.Where(x => x.Code == "E1").FirstOrDefault(); if (status != null) bid.StatusId = status.Id; var individual = _dbContext.Individuals.Where(i => i.UserId == item.UserId).FirstOrDefault(); if (individual != null) bid.BidMakerId = individual.Id; if (!(bid.TimeshareWeek == null && week == null)) { if (week == null && bid.TimeshareWeek != null) { MyCommon.PostToConsoft(bid.TimeshareWeek); WeekRepository weekRepository = new WeekRepository(_dbContext); weekRepository.Insert(bid.TimeshareWeek); } List list = new List() { bid, week, week.Owner }; if (bid.TimeshareWeekId != null) { if (week != null) { TemplateRepository templateRepository = new TemplateRepository(_dbContext); var template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekOfferMade-Owner"); if (template != null) { templateRepository.SendEmailTemplate(template, week.Owner, list); } template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekOfferMade-User"); if (template != null) { var bidMaker = _dbContext.Individuals.FirstOrDefault(x => x.Id == bid.BidMakerId); if (bidMaker != null) { templateRepository.SendEmailTemplate(template, bidMaker, list); } } } } _dbContext.Add(bid); Save(); } else { List list = new List() { bid, property, property.Owner }; if (bid.PropertyId != null) { if (property != null) { TemplateRepository templateRepository = new TemplateRepository(_dbContext); var template = _dbContext.Templates.FirstOrDefault(x => x.Name == "PropertyOfferMade-Owner"); if (template != null) { templateRepository.SendEmailTemplate(template, property.Owner, list); } template = _dbContext.Templates.FirstOrDefault(x => x.Name == "PropertyOfferMade-User"); if (template != null) { if (individual != null) { templateRepository.SendEmailTemplate(template, individual, list); } } } } _dbContext.Add(bid); Save(); } } public void Insert(IEnumerable items) { foreach (var item in items) { _dbContext.Add(item); } Save(); } public void Remove(BidItem item) { var i = _dbContext.BidItems.Find(item); _dbContext.BidItems.Remove(i); Save(); } public void Remove(IEnumerable items) { foreach (var item in items) { var i = _dbContext.BidItems.Find(item); _dbContext.BidItems.Remove(i); } Save(); } public void RemoveAtId(int item) { var i = _dbContext.BidItems.Find(item); _dbContext.BidItems.Remove(i); Save(); } public void Save() { _dbContext.SaveChanges(); } public void Update(BidItem item) { _dbContext.Entry(item).State = EntityState.Modified; Save(); } public BidItemDisplay AcceptBid(int id) { var item = _dbContext.BidItems .Include("Property") .Include("TimeshareWeek") .Include("BidMaker") .Include("Status") .Where(x => x.Id == id).FirstOrDefault(); var status = (from s in _dbContext.Status where s.Code == "E2" select s).FirstOrDefault(); if (status != null) { item.StatusId = status.Id; } _dbContext.Entry(item).State = EntityState.Modified; Save(); List bids = new List() { item }; return LoadDisplay(bids).Find(x => x.Id == item.Id); } public BidItemDisplay DecineBid(BitItemDecline item) { var bid = _dbContext.BidItems .Include("Property") .Include("TimeshareWeek") .Include("BidMaker") .Include("Status") .Where(x => x.Id == item.Id).FirstOrDefault(); var status = (from s in _dbContext.Status where s.Code == "E3" select s).FirstOrDefault(); if (status != null) { bid.StatusId = status.Id; } bid.DeclinedReason = item.Comment; _dbContext.Entry(bid).State = EntityState.Modified; Save(); List bids = new List() { bid }; return LoadDisplay(bids).Find(x => x.Id == bid.Id); } public int NewId() { // Not sure if properties need it return 0; } public BidItemDisplay GetDispaly(int id) { var bid = _dbContext.BidItems .Include("Property") .Include("TimeshareWeek") .Include("BidMaker") .Include("Status") .Where(x => x.Id == id).FirstOrDefault(); return BidItemDisplay(bid); } private BidItemDisplay BidItemDisplay(BidItem item) { if (item == null) return null; BidItemDisplay bid = new BidItemDisplay() { Id = item.Id, Offer = (decimal)item.Amount, Comment = item.Comment, DeclineReason = item.DeclinedReason }; if (item.PropertyId != null) { bid.Type = "Property"; bid.ShortDescription = item.Property.ShortDescription; bid.Description = item.Property.Description; bid.Price = item.Property.Price; } if (item.TimeshareWeekId != null) { bid.Type = "Timeshare"; bid.ShortDescription = string.Format("{0} {1} {2}", item.TimeshareWeek.ResortCode, item.TimeshareWeek.WeekNumber, item.TimeshareWeek.UnitNumber); bid.SellPrice = (decimal)item.TimeshareWeek.SellPrice; bid.Resort = item.TimeshareWeek.ResortName; bid.UnitNumber = item.TimeshareWeek.UnitNumber; bid.WeekNumber = item.TimeshareWeek.Module; } if (item.Status != null) { bid.StatusCode = item.Status.Code; bid.Status = string.Format("{0} - {1}", item.Status.Code, item.Status.Description); } if (item.BidMaker != null) bid.MadeBy = (item.BidMaker.Name + " " + item.BidMaker.Surname).Trim(); bid.Date = item.Created; return bid; } } }