API
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

BidRepository.cs 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. using Microsoft.EntityFrameworkCore;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using UnivateProperties_API.Containers.ProcessFlow;
  6. using UnivateProperties_API.Context;
  7. using UnivateProperties_API.Helpers;
  8. using UnivateProperties_API.Model;
  9. using UnivateProperties_API.Model.ProcessFlow;
  10. using UnivateProperties_API.Repository.Communication;
  11. using UnivateProperties_API.Repository.Timeshare;
  12. namespace UnivateProperties_API.Repository.ProccessFlow
  13. {
  14. public class BidRepository : IBidRepository
  15. {
  16. private readonly DataContext _dbContext;
  17. public BidRepository(DataContext dbContext)
  18. {
  19. _dbContext = dbContext;
  20. }
  21. public List<BidItem> Get(Func<BidItem, bool> where)
  22. {
  23. return _dbContext.BidItems.Where(where).ToList();
  24. }
  25. public List<BidItem> GetAll()
  26. {
  27. return _dbContext.BidItems.ToList();
  28. }
  29. public BidItem GetDetailed(Func<BidItem, bool> first)
  30. {
  31. var item = _dbContext.BidItems.FirstOrDefault(first);
  32. if (item == null)
  33. {
  34. item = new BidItem();
  35. }
  36. return item;
  37. }
  38. public List<BidItem> GetDetailedAll()
  39. {
  40. return GetAll();
  41. }
  42. public List<BidItemDisplay> GetAllBid()
  43. {
  44. List<BidItem> bids = _dbContext.BidItems
  45. .Include("Property")
  46. .Include("TimeshareWeek")
  47. .Include("BidMaker")
  48. .Include("Status")
  49. .Include("Property.Owner")
  50. .Include("Property.Agent")
  51. .ToList();
  52. return LoadDisplay(bids);
  53. }
  54. public List<BidItemDisplay> GetMyBid(Func<BidItem, bool> where)
  55. {
  56. List<BidItem> bids = _dbContext.BidItems
  57. .Include("Property")
  58. .Include("TimeshareWeek")
  59. .Include("BidMaker")
  60. .Include("Status")
  61. .Where(where)
  62. .ToList();
  63. return LoadDisplay(bids);
  64. }
  65. public List<BidItemDisplay> GetAllBidBy(string name)
  66. {
  67. /*
  68. * Agency - can see all its agents' listings
  69. * Agent - only see own listings
  70. * Private User - only see own listings
  71. * Super Admin - can see all
  72. */
  73. var user = _dbContext.Users.Where(u => u.Username == name).FirstOrDefault();
  74. if (user != null)
  75. {
  76. if (user.Role.ToUpper() == "AGENCY" || user.Role.ToUpper() == "AGENT")
  77. {
  78. var agent = _dbContext.Agents.Where(a => a.UserId == user.Id).FirstOrDefault();
  79. if (user.Role.ToUpper() == "AGENCY")
  80. {
  81. List<BidItem> bids = _dbContext.BidItems
  82. .Include("Property")
  83. .Include("TimeshareWeek")
  84. .Include("BidMaker")
  85. .Include("Status")
  86. .Where(x => x.TimeshareWeek.AgencyId == agent.AgencyId || x.Property.AgencyId == agent.AgencyId)
  87. .ToList();
  88. return LoadDisplay(bids);
  89. }
  90. else
  91. {
  92. List<BidItem> bids = _dbContext.BidItems
  93. .Include("Property")
  94. .Include("TimeshareWeek")
  95. .Include("BidMaker")
  96. .Include("Status")
  97. .Where(x => x.TimeshareWeek.AgentId == agent.Id || x.Property.AgentId == agent.Id)
  98. .ToList();
  99. return LoadDisplay(bids);
  100. }
  101. }
  102. if (user.Role.ToUpper() == "PRIVATE USER")
  103. {
  104. var individual = _dbContext.Individuals.Where(i => i.UserId == user.Id).FirstOrDefault();
  105. List<BidItem> bids = _dbContext.BidItems
  106. .Include("Property")
  107. .Include("TimeshareWeek")
  108. .Include("BidMaker")
  109. .Include("Status")
  110. .Where(x => x.TimeshareWeek.OwnerId == individual.Id || x.Property.OwnerId == individual.Id)
  111. .ToList();
  112. return LoadDisplay(bids);
  113. }
  114. if (user.Role.ToUpper() == "SUPER ADMIN")
  115. return GetAllBid();
  116. }
  117. return null;
  118. }
  119. private List<BidItemDisplay> LoadDisplay(List<BidItem> bids)
  120. {
  121. List<BidItemDisplay> list = new List<BidItemDisplay>();
  122. foreach (BidItem item in bids)
  123. {
  124. BidItemDisplay bid = BidItemDisplay(item);
  125. if (bid != null)
  126. list.Add(bid);
  127. }
  128. return list;
  129. }
  130. public void Insert(BidItem item)
  131. {
  132. var week = _dbContext.Weeks.Find(item.TimeshareWeekId);
  133. if (!(item.TimeshareWeek == null && week == null))
  134. {
  135. if (week == null && item.TimeshareWeek != null)
  136. {
  137. MyCommon.PostToConsoft(item.TimeshareWeek);
  138. WeekRepository weekRepository = new WeekRepository(_dbContext);
  139. weekRepository.Insert(item.TimeshareWeek);
  140. }
  141. var status = _dbContext.Status.Where(x => x.Code == "E1").FirstOrDefault();
  142. if (status != null)
  143. {
  144. List<BaseEntity> list = new List<BaseEntity>() { item, week, week.Owner };
  145. item.StatusId = status.Id;
  146. if (item.TimeshareWeekId != null)
  147. {
  148. if (week != null)
  149. {
  150. TemplateRepository templateRepository = new TemplateRepository(_dbContext);
  151. var template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekOfferMade-Owner");
  152. if (template != null)
  153. {
  154. templateRepository.SendEmailTemplate(template, week.Owner, list);
  155. }
  156. template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekOfferMade-User");
  157. if (template != null)
  158. {
  159. var bidMaker = _dbContext.Individuals.FirstOrDefault(x => x.Id == item.BidMakerId);
  160. if (bidMaker != null)
  161. {
  162. templateRepository.SendEmailTemplate(template, bidMaker, list);
  163. }
  164. }
  165. }
  166. }
  167. }
  168. _dbContext.Add(item);
  169. Save();
  170. }
  171. }
  172. public void InsertNew(BidItemNew item)
  173. {
  174. var status = _dbContext.Status.Where(x => x.Code == "E1").FirstOrDefault();
  175. var week = _dbContext.Weeks.Include("Owner").Where(x => x.Id == item.TimeshareWeekId).FirstOrDefault();
  176. if (item.TenderWeek != null)
  177. {
  178. //owner is set to UniVate2018 user - will need to check who the owner of a tender week will be.
  179. var owner = _dbContext.Individuals.Where(o => o.UserId == 14).FirstOrDefault();
  180. var region = _dbContext.Provinces.Where(p => p.Id == item.TenderWeek.Region.Id).FirstOrDefault();
  181. week = new Model.Timeshare.TimeshareWeek();
  182. week.Owner = owner;
  183. week.OwnerId = owner.Id;
  184. week.ResortCode = item.TenderWeek.Resort.ResortCode;
  185. week.ResortName = item.TenderWeek.Resort.ResortName;
  186. week.Region = region;
  187. week.RegionId = region.Id;
  188. week.Module = item.TenderWeek.WeekNumber;
  189. week.Season = item.TenderWeek.Season;
  190. week.Bedrooms = item.TenderWeek.Bedrooms;
  191. week.MaxSleep = item.TenderWeek.MaxSleeps;
  192. week.UnitNumber = item.TenderWeek.UnitNumber;
  193. week.WeekNumber = item.TenderWeek.WeekNumber;
  194. week.LevyAmount = (double)item.TenderWeek.LevyAmount;
  195. week.CurrentYearBanked = false;
  196. week.BankedWith = "";
  197. week.LeviesPaidInFull = false;
  198. week.WeekPlacedForRental = false;
  199. week.OriginalPurchasePrice = (double)item.TenderWeek.SellingPrice;
  200. week.OriginalPurchaseDate = DateTime.Now;
  201. week.ArrivalDate = item.TenderWeek.ArrivalDate;
  202. week.DepartureDate = item.TenderWeek.DepartureDate;
  203. week.SellPrice = (double)item.TenderWeek.SellingPrice;
  204. week.AgentCommision = 0;
  205. week.Status = status;
  206. week.StatusId = status.Id;
  207. _dbContext.Weeks.Add(week);
  208. Save();
  209. item.TimeshareWeek = week;
  210. }
  211. var property = _dbContext.Properties.Include("Owner").Where(x => x.Id == item.PropertyId).FirstOrDefault();
  212. BidItem bid = new BidItem();
  213. foreach (string prop in bid.GetAllProperties())
  214. {
  215. if (prop != "Item" && prop != "Display")
  216. bid[prop] = item[prop];
  217. }
  218. if (status != null)
  219. bid.StatusId = status.Id;
  220. var individual = _dbContext.Individuals.Where(i => i.UserId == item.UserId).FirstOrDefault();
  221. if (individual != null)
  222. {
  223. bid.BidMakerId = individual.Id;
  224. bid.BidMaker = individual;
  225. }
  226. if (!(bid.TimeshareWeek == null && week == null))
  227. {
  228. if (week == null && bid.TimeshareWeek != null)
  229. {
  230. MyCommon.PostToConsoft(bid.TimeshareWeek);
  231. WeekRepository weekRepository = new WeekRepository(_dbContext);
  232. weekRepository.Insert(bid.TimeshareWeek);
  233. }
  234. List<BaseEntity> list = new List<BaseEntity>() { bid, week, week.Owner };
  235. if (bid.TimeshareWeekId != null)
  236. {
  237. if (week != null)
  238. {
  239. TemplateRepository templateRepository = new TemplateRepository(_dbContext);
  240. MailRepository mailRepository = new MailRepository(_dbContext);
  241. var template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekOfferMade-Owner");
  242. if (template != null)
  243. {
  244. mailRepository.WeekOfferMadeOwner(week, bid);
  245. //templateRepository.SendEmailTemplate(template, week.Owner, list);
  246. }
  247. template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekOfferMade-User");
  248. if (template != null)
  249. {
  250. var bidMaker = _dbContext.Individuals.FirstOrDefault(x => x.Id == bid.BidMakerId);
  251. if (bidMaker != null)
  252. {
  253. mailRepository.WeekOfferMadeUser(week, bid);
  254. //templateRepository.SendEmailTemplate(template, bidMaker, list);
  255. }
  256. }
  257. }
  258. }
  259. _dbContext.Add(bid);
  260. Save();
  261. }
  262. else
  263. {
  264. List<BaseEntity> list = new List<BaseEntity>() { bid, property, property.Owner };
  265. if (bid.PropertyId != null)
  266. {
  267. if (property != null)
  268. {
  269. var propertyStatus = _dbContext.Status.Where(s => s.Code == "P4").FirstOrDefault();
  270. if (propertyStatus != null)
  271. {
  272. property.StatusId = propertyStatus.Id;
  273. _dbContext.Update(property);
  274. }
  275. TemplateRepository templateRepository = new TemplateRepository(_dbContext);
  276. var template = _dbContext.Templates.FirstOrDefault(x => x.Name == "PropertyOfferMade-Owner");
  277. if (template != null)
  278. {
  279. templateRepository.SendEmailTemplate(template, property.Owner, list);
  280. }
  281. template = _dbContext.Templates.FirstOrDefault(x => x.Name == "PropertyOfferMade-User");
  282. if (template != null)
  283. {
  284. if (individual != null)
  285. {
  286. templateRepository.SendEmailTemplate(template, individual, list);
  287. }
  288. }
  289. }
  290. }
  291. _dbContext.Add(bid);
  292. Save();
  293. }
  294. item.Id = bid.Id;
  295. }
  296. public void Insert(IEnumerable<BidItem> items)
  297. {
  298. foreach (var item in items)
  299. {
  300. _dbContext.Add(item);
  301. }
  302. Save();
  303. }
  304. public void Remove(BidItem item)
  305. {
  306. var i = _dbContext.BidItems.Find(item);
  307. _dbContext.BidItems.Remove(i);
  308. Save();
  309. }
  310. public void Remove(IEnumerable<BidItem> items)
  311. {
  312. foreach (var item in items)
  313. {
  314. var i = _dbContext.BidItems.Find(item);
  315. _dbContext.BidItems.Remove(i);
  316. }
  317. Save();
  318. }
  319. public void RemoveAtId(int item)
  320. {
  321. var i = _dbContext.BidItems.Find(item);
  322. _dbContext.BidItems.Remove(i);
  323. Save();
  324. }
  325. public void Save()
  326. {
  327. _dbContext.SaveChanges();
  328. }
  329. public void Update(BidItem item)
  330. {
  331. _dbContext.Entry(item).State = EntityState.Modified;
  332. Save();
  333. }
  334. public BidItemDisplay AcceptBid(int id)
  335. {
  336. var item = _dbContext.BidItems
  337. .Include("Property")
  338. .Include("TimeshareWeek")
  339. .Include("BidMaker")
  340. .Include("Status")
  341. .Where(x => x.Id == id).FirstOrDefault();
  342. var status = (from s in _dbContext.Status
  343. where s.Code == "E2"
  344. select s).FirstOrDefault();
  345. if (status != null)
  346. {
  347. item.StatusId = status.Id;
  348. }
  349. if (item.Property != null)
  350. {
  351. var propertyStatus = _dbContext.Status.Where(p => p.Code == "P5").FirstOrDefault();
  352. if (propertyStatus != null)
  353. {
  354. item.Property.StatusId = propertyStatus.Id;
  355. item.Property.Published = false;
  356. }
  357. }
  358. _dbContext.Entry(item).State = EntityState.Modified;
  359. Save();
  360. List<BidItem> bids = new List<BidItem>() { item };
  361. return LoadDisplay(bids).Find(x => x.Id == item.Id);
  362. }
  363. public BidItemDisplay DecineBid(BitItemDecline item)
  364. {
  365. var bid = _dbContext.BidItems
  366. .Include("Property")
  367. .Include("TimeshareWeek")
  368. .Include("BidMaker")
  369. .Include("Status")
  370. .Where(x => x.Id == item.Id).FirstOrDefault();
  371. var status = (from s in _dbContext.Status
  372. where s.Code == "E3"
  373. select s).FirstOrDefault();
  374. if (status != null)
  375. {
  376. bid.StatusId = status.Id;
  377. }
  378. bid.DeclinedReason = item.Comment;
  379. if (bid.Property != null)
  380. {
  381. var propertyStatus = _dbContext.Status.Where(p => p.Code == "P3").FirstOrDefault();
  382. if (propertyStatus != null)
  383. {
  384. bid.Property.StatusId = propertyStatus.Id;
  385. }
  386. }
  387. _dbContext.Entry(bid).State = EntityState.Modified;
  388. Save();
  389. List<BidItem> bids = new List<BidItem>() { bid };
  390. return LoadDisplay(bids).Find(x => x.Id == bid.Id);
  391. }
  392. public int NewId()
  393. {
  394. // Not sure if properties need it
  395. return 0;
  396. }
  397. public BidItemDisplay GetDispaly(int id)
  398. {
  399. var bid = _dbContext.BidItems
  400. .Include("Property")
  401. .Include("TimeshareWeek")
  402. .Include("BidMaker")
  403. .Include("Status")
  404. .Where(x => x.Id == id).FirstOrDefault();
  405. return BidItemDisplay(bid);
  406. }
  407. private BidItemDisplay BidItemDisplay(BidItem item)
  408. {
  409. if (item == null)
  410. return null;
  411. BidItemDisplay bid = new BidItemDisplay()
  412. {
  413. Id = item.Id,
  414. Offer = (decimal)item.Amount,
  415. Comment = item.Comment,
  416. DeclineReason = item.DeclinedReason
  417. };
  418. if (item.PropertyId != null)
  419. {
  420. if (item.Property == null)
  421. return null;
  422. bid.Type = "Property";
  423. bid.ShortDescription = item.Property.ShortDescription;
  424. bid.Description = item.Property.Description;
  425. bid.Price = item.Property.Price;
  426. }
  427. if (item.TimeshareWeekId != null)
  428. {
  429. if (item.TimeshareWeek == null)
  430. return null;
  431. bid.Type = "Timeshare";
  432. bid.ShortDescription = string.Format("{0} {1} {2}", item.TimeshareWeek.ResortCode, item.TimeshareWeek.WeekNumber, item.TimeshareWeek.UnitNumber);
  433. bid.SellPrice = (decimal)item.TimeshareWeek.SellPrice;
  434. bid.Resort = item.TimeshareWeek.ResortName;
  435. bid.UnitNumber = item.TimeshareWeek.UnitNumber;
  436. bid.WeekNumber = item.TimeshareWeek.Module;
  437. }
  438. if (item.Status != null)
  439. {
  440. bid.StatusCode = item.Status.Code;
  441. bid.Status = string.Format("{0} - {1}", item.Status.Code, item.Status.Description);
  442. }
  443. if (item.BidMaker != null)
  444. bid.MadeBy = (item.BidMaker.Name + " " + item.BidMaker.Surname).Trim();
  445. bid.Date = item.Created;
  446. return bid;
  447. }
  448. public BidItemNew NewBidTemplate()
  449. {
  450. return new BidItemNew();
  451. }
  452. }
  453. }