API
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

WeekRepository.cs 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. using Microsoft.EntityFrameworkCore;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using UnivateProperties_API.Containers.Timeshare;
  6. using UnivateProperties_API.Context;
  7. using UnivateProperties_API.Model.Timeshare;
  8. using UnivateProperties_API.Repository.Region;
  9. using UnivateProperties_API.Repository.Users;
  10. namespace UnivateProperties_API.Repository.Timeshare
  11. {
  12. public class WeekRepository : IRepository<TimeshareWeek>
  13. {
  14. private readonly DataContext _dbContext;
  15. public WeekRepository(DataContext dbContext)
  16. {
  17. _dbContext = dbContext;
  18. }
  19. public List<TimeshareWeek> Get(Func<TimeshareWeek, bool> where)
  20. {
  21. return _dbContext.Weeks.Where(where).ToList();
  22. }
  23. public List<TimeshareWeek> GetAll()
  24. {
  25. return _dbContext.Weeks.ToList();
  26. }
  27. public TimeshareWeek GetDetailed(Func<TimeshareWeek, bool> first)
  28. {
  29. var item = _dbContext.Weeks.FirstOrDefault(first);
  30. item = GetDetailedWeek(item);
  31. return item;
  32. }
  33. public List<WeekDto> GetDtoListAll()
  34. {
  35. List<WeekDto> list = new List<WeekDto>();
  36. foreach(var item in GetDetailedAll())
  37. {
  38. list.Add(new WeekDto(item));
  39. }
  40. return list;
  41. }
  42. public List<RegionDto> GetAvailResort()
  43. {
  44. List<RegionDto> list = new List<RegionDto>();
  45. foreach (var item in GetDetailedAll())
  46. {
  47. if (item.Region != null)
  48. {
  49. if (!list.Any(x => x.RegionCode == item.Region.Code))
  50. {
  51. list.Add(new RegionDto(item.Region.Code, item.Region.Description));
  52. }
  53. foreach (var i in list.Where(x => x.RegionCode == item.Region.Code))
  54. {
  55. i.TryAddResort(item.ResortCode, item.ResortName);
  56. }
  57. }
  58. }
  59. list = list.OrderBy(x => x.RegionName).ToList();
  60. list.ForEach(x => x.OrderResorts());
  61. return list;
  62. }
  63. public List<TimeshareWeek> GetDetailedAll()
  64. {
  65. var list = GetAll();
  66. List<TimeshareWeek> weeklist = new List<TimeshareWeek>();
  67. foreach(var item in list)
  68. {
  69. weeklist.Add(GetDetailedWeek(item));
  70. }
  71. return weeklist;
  72. }
  73. private TimeshareWeek GetDetailedWeek(TimeshareWeek week)
  74. {
  75. if(week.AgencyId != null)
  76. {
  77. AgencyRepository agency = new AgencyRepository(_dbContext);
  78. week.Agency = agency.Get(x => x.Id == week.AgencyId).FirstOrDefault();
  79. }
  80. if(week.AgentId != null)
  81. {
  82. AgentRepository agent = new AgentRepository(_dbContext);
  83. week.Agent = agent.Get(x => x.Id == week.AgentId).FirstOrDefault();
  84. }
  85. if (week.StatusId != 0)
  86. {
  87. StatusRepository status = new StatusRepository(_dbContext);
  88. week.Status = status.Get(x => x.Id == week.StatusId).FirstOrDefault();
  89. }
  90. else
  91. {
  92. StatusRepository repo = new StatusRepository(_dbContext);
  93. week.Status = repo.GetDetailed(s => s.Code == "A1");
  94. }
  95. if (week.RegionId != 0)
  96. {
  97. ProvinceRepository province = new ProvinceRepository(_dbContext);
  98. week.Region = province.Get(x => x.Id == week.RegionId).FirstOrDefault();
  99. }
  100. if (week.OwnerId != 0)
  101. {
  102. IndividualRepository individual = new IndividualRepository(_dbContext);
  103. week.Owner = individual.Get(x => x.Id == week.OwnerId).FirstOrDefault();
  104. }
  105. return week;
  106. }
  107. public void Insert(TimeshareWeek item)
  108. {
  109. item = GetDetailedWeek(item);
  110. item.Id = _dbContext.Weeks.Max(x => x.Id) + 1;
  111. if (item.Owner != null && item.Owner.Id == 0)
  112. {
  113. item.Owner.Id = _dbContext.Individuals.Max(x => x.Id) + 1;
  114. }
  115. // Set starting Status of A1
  116. StatusRepository repo = new StatusRepository(_dbContext);
  117. item.Status = repo.GetDetailed(s => s.Code == "A1");
  118. if(item.Status != null)
  119. {
  120. //Create initial
  121. item.Status = new Status()
  122. {
  123. Code = "A1",
  124. Description = "Pending verification",
  125. StatusType = StatusType.Timeshare,
  126. ModifiedBy = "KobusB"
  127. };
  128. }
  129. item.Id = NewId();
  130. _dbContext.Add(item);
  131. Save();
  132. }
  133. public void Insert(IEnumerable<TimeshareWeek> items)
  134. {
  135. int id = NewId();
  136. foreach (var item in items)
  137. {
  138. item.Id = id;
  139. _dbContext.Add(item);
  140. id += 1;
  141. }
  142. Save();
  143. }
  144. public void Remove(TimeshareWeek item)
  145. {
  146. var i = _dbContext.Weeks.Find(item);
  147. _dbContext.Weeks.Remove(i);
  148. Save();
  149. }
  150. public void Remove(IEnumerable<TimeshareWeek> items)
  151. {
  152. foreach (var item in items)
  153. {
  154. var i = _dbContext.Weeks.Find(item);
  155. _dbContext.Weeks.Remove(i);
  156. }
  157. Save();
  158. }
  159. public void RemoveAtId(int item)
  160. {
  161. var i = _dbContext.Weeks.Find(item);
  162. _dbContext.Weeks.Remove(i);
  163. Save();
  164. }
  165. public void Save()
  166. {
  167. _dbContext.SaveChanges();
  168. }
  169. public void Update(TimeshareWeek item)
  170. {
  171. _dbContext.Entry(item).State = EntityState.Modified;
  172. Save();
  173. }
  174. public List<TimeshareWeek> GetBy(WeekFilterDto week)
  175. {
  176. List<TimeshareWeek> item = GetDetailedAll();
  177. if (!string.IsNullOrEmpty(week.RegionCode))
  178. {
  179. item = item.Where(x => x.Region != null && x.Region.Code?.ToLower() == week.RegionCode.ToLower()).ToList();
  180. }
  181. if (!string.IsNullOrEmpty(week.ResortCode))
  182. {
  183. item = item.Where(x => x.ResortCode?.ToLower() == week.ResortCode).ToList();
  184. }
  185. if (week.Date != null)
  186. {
  187. item = item.Where(x =>
  188. x.ArrivalDate >= week.Date.Value.AddDays(-7)
  189. && x.DepartureDate <= week.Date.Value.AddDays(7)).ToList();
  190. }
  191. if (week.MinAmount != null && week.MinAmount != 0)
  192. {
  193. item = item.Where(x => x.SellPrice >= week.MinAmount).ToList();
  194. }
  195. if (week.MaxAmount != null && week.MaxAmount != 0)
  196. {
  197. item.Where(x => x.SellPrice <= week.MaxAmount).ToList();
  198. }
  199. return item;
  200. }
  201. public int NewId()
  202. {
  203. int id = 0;
  204. if (_dbContext.Weeks.Count() > 0)
  205. {
  206. id = _dbContext.Weeks.Max(x => x.Id);
  207. }
  208. id += 1;
  209. return id;
  210. }
  211. }
  212. }