using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using UnivateProperties_API.Containers.ProcessFlow; using UnivateProperties_API.Context; using UnivateProperties_API.Model.ProcessFlow; 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 = 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.Price = (decimal)item.TimeshareWeek.SellPrice; bid.Resort = item.TimeshareWeek.ResortName; bid.Unit = item.TimeshareWeek.UnitNumber; bid.Module = 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; bid.MadeBy = "Bob"; list.Add(bid); } return list; } public void Insert(BidItem item) { var status = _dbContext.Status.Where(x => x.Code == "E1").FirstOrDefault(); if (status != null) item.StatusId = status.Id; _dbContext.Add(item); 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; } } }