API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

WeekRepository.cs 45KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212
  1. using Abp.Domain.Entities;
  2. using Abp.Extensions;
  3. using Microsoft.CodeAnalysis;
  4. using Microsoft.EntityFrameworkCore;
  5. using Newtonsoft.Json;
  6. using RestSharp;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Configuration;
  10. using System.Dynamic;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Net;
  14. using System.Text;
  15. using UnivateProperties_API.Containers.Timeshare;
  16. using UnivateProperties_API.Containers.Timeshare.Detailed;
  17. using UnivateProperties_API.Containers.Users;
  18. using UnivateProperties_API.Context;
  19. using UnivateProperties_API.Helpers;
  20. using UnivateProperties_API.Helpers.Communication;
  21. using UnivateProperties_API.Model;
  22. using UnivateProperties_API.Model.Communication;
  23. using UnivateProperties_API.Model.Region;
  24. using UnivateProperties_API.Model.Timeshare;
  25. using UnivateProperties_API.Model.Users;
  26. using UnivateProperties_API.Repository.Communication;
  27. using UnivateProperties_API.Repository.Region;
  28. using UnivateProperties_API.Repository.Users;
  29. namespace UnivateProperties_API.Repository.Timeshare
  30. {
  31. public interface IWeekRepository : IRepository<TimeshareWeek>
  32. {
  33. int SaveNewWeek(TimeshareWeekDto sellItem);
  34. void PublishOnly(WeekDto week);
  35. int IndivWeekCount(int id);
  36. List<WeekDto> GetAllByResortCode(string resortCode);
  37. List<dynamic> GetLatest();
  38. void PublishWeek(int WeekId);
  39. void UnpublishWeek(int WeekId);
  40. }
  41. public class WeekRepository : IWeekRepository
  42. {
  43. private readonly DataContext _dbContext;
  44. public WeekRepository(DataContext dbContext)
  45. {
  46. _dbContext = dbContext;
  47. }
  48. public List<TimeshareWeek> Get(Func<TimeshareWeek, bool> where)
  49. {
  50. return _dbContext.Weeks.Where(where).ToList();
  51. }
  52. public List<TimeshareWeek> GetAll()
  53. {
  54. return _dbContext.Weeks.Include("Owner").ToList();
  55. }
  56. public TimeshareWeek GetDetailed(Func<TimeshareWeek, bool> first)
  57. {
  58. var item = _dbContext.Weeks.FirstOrDefault(first);
  59. item = GetDetailedWeek(item);
  60. return item;
  61. }
  62. public DetailedWeekDto GetMyDetailed(Func<TimeshareWeek, bool> first)
  63. {
  64. var item = GetDetailed(first);
  65. if(item != null)
  66. {
  67. return new DetailedWeekDto(item);
  68. }
  69. return null;
  70. }
  71. public List<WeekDto> GetAllByResortCode(string resortCode)
  72. {
  73. List<WeekDto> list = new List<WeekDto>();
  74. string resort;
  75. resort = TenderWeeksHelper.GetResortCodeById(int.Parse(resortCode));
  76. foreach (var item in GetDetailedByResortCode(resort))
  77. {
  78. list.Add(new WeekDto(item));
  79. }
  80. var listIds = list.Select(x => x.WeekUni).ToList();
  81. foreach (var item in GetTenderWeeksByResortCode(resort))
  82. {
  83. if (!listIds.Contains(item.WeekUni))
  84. list.Add(item);
  85. }
  86. return list;
  87. }
  88. private List<TimeshareWeek> GetDetailedByResortCode(string resortCode)
  89. {
  90. var list = GetAllUsingResortCode(resortCode);
  91. List<TimeshareWeek> weeklist = new List<TimeshareWeek>();
  92. foreach (var item in list)
  93. {
  94. weeklist.Add(GetDetailedWeek(item));
  95. }
  96. return weeklist;
  97. }
  98. private List<TimeshareWeek> GetAllUsingResortCode(string resortCode)
  99. {
  100. return _dbContext.Weeks.Where(x => x.ResortCode == resortCode).ToList();
  101. }
  102. public List<WeekDto> GetDtoListAll()
  103. {
  104. List<WeekDto> list = new List<WeekDto>();
  105. foreach (var item in GetDetailedAll())
  106. {
  107. list.Add(new WeekDto(item));
  108. }
  109. var listIds = list.Select(x => x.WeekUni).ToList();
  110. foreach (var item in GetTenderWeeks())
  111. {
  112. if (!listIds.Contains(item.WeekUni))
  113. list.Add(item);
  114. }
  115. return list;
  116. }
  117. public List<dynamic> GetLatest()
  118. {
  119. //List<WeekDto> list = new List<WeekDto>();
  120. var weeks = _dbContext.Weeks.Where(x => x.Publish == true).OrderByDescending(x => x.Id).Take(4).ToList();
  121. var client = new RestClient();
  122. var request = new RestRequest(Method.GET);
  123. IRestResponse response = client.Execute(request);
  124. var img = "";
  125. List<dynamic> myWeekList = new List<dynamic>();
  126. foreach (var week in weeks)
  127. {
  128. client = new RestClient(string.Format("https://www.tradeunipoint.com/unibackend/seam/resource/rest/products/{0}/image/{1}", week.ResortCode, 0))
  129. {
  130. Timeout = -1
  131. };
  132. response = client.Execute(request);
  133. dynamic myDynamicWeek = new ExpandoObject();
  134. myDynamicWeek.resortName = week.ResortName;
  135. myDynamicWeek.module = week.Module;
  136. myDynamicWeek.season = week.Season;
  137. myDynamicWeek.levyAmount = week.LevyAmount;
  138. myDynamicWeek.id = week.Id;
  139. myDynamicWeek.sellPrice = week.SellPrice;
  140. myDynamicWeek.resortCode = week.ResortCode;
  141. myDynamicWeek.image = string.Format("data:image/jpeg;base64,{0}", response.Content);
  142. myWeekList.Add(myDynamicWeek);
  143. }
  144. return myWeekList;
  145. /*foreach (var week in weeks)
  146. {
  147. list.Add(new WeekDto(week));
  148. }
  149. return list;*/
  150. }
  151. public int IndivWeekCount(int id)
  152. {
  153. var agent = _dbContext.Agents.Where(x => x.UserId == id).Where(y => y.IsDeleted == false).FirstOrDefault();
  154. var indiv = _dbContext.Individuals.Where(x => x.UserId == id).Where(y => y.IsDeleted == false).FirstOrDefault();
  155. int count = 0;
  156. if (agent != null)
  157. {
  158. count = _dbContext.Weeks.Where(x => x.AgentId == agent.Id).Count();
  159. }
  160. else
  161. {
  162. count = _dbContext.Weeks.Where(x => x.OwnerId == indiv.Id).Count();
  163. }
  164. return count;
  165. }
  166. public List<WeekDto> GetMyWeeks(int userId)
  167. {
  168. List<WeekDto> list = new List<WeekDto>();
  169. UserRepository userRepository = new UserRepository(_dbContext);
  170. var user = userRepository.Get(x => x.Id == userId).FirstOrDefault();
  171. if (userId == 0)
  172. {
  173. foreach (var item in GetDetailedAll())
  174. {
  175. if (item.Publish)
  176. {
  177. list.Add(new WeekDto(item));
  178. }
  179. }
  180. }
  181. else
  182. {
  183. if (user.IsUserInRole(Role.SuperAdmin))
  184. {
  185. foreach (var item in GetDetailedAll())
  186. {
  187. list.Add(new WeekDto(item));
  188. }
  189. }
  190. else if (user.IsUserInRole(Role.Agency))
  191. {
  192. var agent = _dbContext.Agents.FirstOrDefault(x => x.UserId == userId);
  193. if (agent != null)
  194. {
  195. foreach (var item in GetDetailedAll().Where(x => x.AgencyId == agent.AgencyId))
  196. {
  197. list.Add(new WeekDto(item));
  198. }
  199. }
  200. }
  201. else if (user.IsUserInRole(Role.Agent) || user.IsUserInRole(Role.ManagingAgent))
  202. {
  203. var agent = _dbContext.Agents.FirstOrDefault(x => x.UserId == userId);
  204. if (agent != null)
  205. {
  206. foreach (var item in GetDetailedAll().Where(x => x.AgentId == agent.Id))
  207. {
  208. list.Add(new WeekDto(item));
  209. }
  210. }
  211. }
  212. else if (user.IsUserInRole(Role.Designer) || user.IsUserInRole(Role.ManagingAgent))
  213. {
  214. var _user = _dbContext.Individuals.FirstOrDefault(x => x.UserId == userId);
  215. if (_user != null)
  216. {
  217. foreach (var item in GetDetailedAll())
  218. {
  219. list.Add(new WeekDto(item));
  220. }
  221. }
  222. }
  223. else
  224. {
  225. var individual = _dbContext.Individuals.FirstOrDefault(x => x.UserId == userId);
  226. if (individual != null)
  227. {
  228. foreach (var item in GetDetailedAll().Where(x => x.OwnerId == individual.Id))
  229. {
  230. list.Add(new WeekDto(item));
  231. }
  232. }
  233. }
  234. }
  235. return list;
  236. }
  237. public List<RegionDto> GetAvailResort()
  238. {
  239. List<RegionDto> list = new List<RegionDto>();
  240. var allItems = GetDtoListAll();
  241. foreach (var item in allItems)
  242. {
  243. if (item.Region != null)
  244. {
  245. if (!list.Any(x => x.RegionCode == item.Region.RegionCode))
  246. {
  247. list.Add(new RegionDto(item.Region.RegionCode, item.Region.RegionName));
  248. }
  249. foreach (var i in list.Where(x => x.RegionCode == item.Region.RegionCode))
  250. {
  251. i.TryAddResort(item.Resort.ResortCode, item.Resort.ResortName);
  252. }
  253. }
  254. }
  255. list = list.OrderBy(x => x.RegionName).ToList();
  256. foreach (var region in list)
  257. {
  258. region.OrderResorts();
  259. foreach (var resort in region.Resorts)
  260. {
  261. resort.Available = allItems.Count(x => x.Resort.ResortCode == resort.ResortCode);
  262. //resort.ResortId = int.Parse(TenderWeeksHelper.GetResortId(resort.ResortName));
  263. }
  264. }
  265. return list;
  266. }
  267. public List<TimeshareWeek> GetDetailedAll()
  268. {
  269. var list = GetAll();
  270. List<TimeshareWeek> weeklist = new List<TimeshareWeek>();
  271. foreach (var item in list)
  272. {
  273. weeklist.Add(GetDetailedWeek(item));
  274. }
  275. return weeklist;
  276. }
  277. private TimeshareWeek GetDetailedWeek(TimeshareWeek week)
  278. {
  279. if (week.AgencyId != null)
  280. {
  281. AgencyRepository agency = new AgencyRepository(_dbContext);
  282. week.Agency = agency.Get(x => x.Id == week.AgencyId).FirstOrDefault();
  283. }
  284. if (week.AgentId != null)
  285. {
  286. AgentRepository agent = new AgentRepository(_dbContext);
  287. week.Agent = agent.Get(x => x.Id == week.AgentId).FirstOrDefault();
  288. }
  289. if (week.StatusId != 0)
  290. {
  291. StatusRepository status = new StatusRepository(_dbContext);
  292. week.Status = status.Get(x => x.Id == week.StatusId).FirstOrDefault();
  293. }
  294. else
  295. {
  296. StatusRepository repo = new StatusRepository(_dbContext);
  297. week.Status = repo.GetDetailed(s => s.Code == "A1");
  298. }
  299. if (week.RegionId != 0)
  300. {
  301. ProvinceRepository province = new ProvinceRepository(_dbContext);
  302. week.Region = province.Get(x => x.Id == week.RegionId).FirstOrDefault();
  303. }
  304. if (week.OwnerId != 0)
  305. {
  306. IndividualRepository individual = new IndividualRepository(_dbContext);
  307. week.Owner = individual.Get(x => x.Id == week.OwnerId).FirstOrDefault();
  308. /*week.DisplayOwner = week.Owner.Name + " " + week.Owner.Surname;
  309. _dbContext.Weeks.Update(week);
  310. _dbContext.SaveChanges();*/
  311. }
  312. return week;
  313. }
  314. public void Insert(TimeshareWeek item)
  315. {
  316. item = GetDetailedWeek(item);
  317. StatusRepository repo = new StatusRepository(_dbContext);
  318. var stat = repo.Get(x => x.Code == "A1" && x.StatusType == StatusType.Timeshare).FirstOrDefault();
  319. if (stat == null)
  320. {
  321. //Create initial
  322. stat = new Status()
  323. {
  324. Code = "A1",
  325. Description = "Pending verification",
  326. StatusType = StatusType.Timeshare,
  327. ModifiedBy = "KobusB"
  328. };
  329. repo.Insert(stat);
  330. }
  331. //item.Id = NewId();
  332. item.ProcessFlows.Add(new Model.ProcessFlow.ProcessFlow()
  333. {
  334. Status = item.Status,
  335. Timeshare = item
  336. });
  337. TemplateRepository templateRepository = new TemplateRepository(_dbContext);
  338. if(item.Owner != null)
  339. {
  340. var template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekLoaded-Owner");
  341. if(template != null)
  342. {
  343. templateRepository.SendEmailTemplate(template, item.Owner, new List<BaseEntity>() { item, item.Owner });
  344. }
  345. template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekLoaded-UV");
  346. if(template != null)
  347. {
  348. templateRepository.SendEmailTemplate(template, item.Owner, new List<BaseEntity>() { item, item.Owner });
  349. }
  350. }
  351. _dbContext.Add(item);
  352. Save();
  353. }
  354. public void Insert(IEnumerable<TimeshareWeek> items)
  355. {
  356. //int id = NewId();
  357. foreach (var item in items)
  358. {
  359. //item.Id = id;
  360. _dbContext.Add(item);
  361. //id += 1;
  362. }
  363. Save();
  364. }
  365. public void Remove(TimeshareWeek item)
  366. {
  367. var i = _dbContext.Weeks.Find(item);
  368. _dbContext.Weeks.Remove(i);
  369. Save();
  370. }
  371. public void Remove(IEnumerable<TimeshareWeek> items)
  372. {
  373. foreach (var item in items)
  374. {
  375. var i = _dbContext.Weeks.Find(item);
  376. _dbContext.Weeks.Remove(i);
  377. }
  378. Save();
  379. }
  380. public void RemoveAtId(int item)
  381. {
  382. var i = _dbContext.Weeks.Find(item);
  383. _dbContext.Weeks.Remove(i);
  384. Save();
  385. }
  386. public void Save()
  387. {
  388. _dbContext.SaveChanges();
  389. }
  390. public void PublishOnly(WeekDto week)
  391. {
  392. var saved = _dbContext.Weeks.Where(w => w.Id == week.Id).FirstOrDefault();
  393. if(saved.StatusId != week.Status.Id)
  394. {
  395. saved.StatusId = week.Status.Id;
  396. }
  397. if (saved.Publish != week.Publish)
  398. {
  399. saved.Publish = week.Publish;
  400. }
  401. _dbContext.Update(saved);
  402. Save();
  403. }
  404. public void Update(TimeshareWeek item)
  405. {
  406. var saved = _dbContext.Weeks.Where(w => w.Id == item.Id).FirstOrDefault();
  407. if (saved.RegionId != item.RegionId)
  408. {
  409. saved.RegionId = item.RegionId;
  410. }
  411. if (saved.ResortCode != item.ResortCode)
  412. {
  413. saved.ResortCode = item.ResortCode;
  414. }
  415. if (saved.ResortName != item.ResortName)
  416. {
  417. saved.ResortName = item.ResortName;
  418. }
  419. if (saved.UnitNumber != item.UnitNumber)
  420. {
  421. saved.UnitNumber = item.UnitNumber;
  422. }
  423. if (saved.Module != item.Module)
  424. {
  425. saved.Module = item.Module;
  426. }
  427. if (saved.Season != item.Season)
  428. {
  429. saved.Season = item.Season;
  430. }
  431. if (saved.Bedrooms != item.Bedrooms)
  432. {
  433. saved.Bedrooms = item.Bedrooms;
  434. }
  435. if (saved.MaxSleep != item.MaxSleep)
  436. {
  437. saved.MaxSleep = item.MaxSleep;
  438. }
  439. if (saved.LevyAmount != item.LevyAmount)
  440. {
  441. saved.LevyAmount = item.LevyAmount;
  442. }
  443. if (saved.WeekType != item.WeekType)
  444. {
  445. saved.WeekType = item.WeekType;
  446. }
  447. if (saved.ArrivalDate != item.ArrivalDate)
  448. {
  449. saved.ArrivalDate = item.ArrivalDate;
  450. }
  451. if (saved.DepartureDate != item.DepartureDate)
  452. {
  453. saved.DepartureDate = item.DepartureDate;
  454. }
  455. if (saved.AskingPrice != item.AskingPrice)
  456. {
  457. saved.AskingPrice = item.AskingPrice;
  458. }
  459. if (saved.SellPrice != item.SellPrice)
  460. {
  461. saved.SellPrice = item.SellPrice;
  462. }
  463. if (saved.CurrentYearBanked != item.CurrentYearBanked)
  464. {
  465. saved.CurrentYearBanked = item.CurrentYearBanked;
  466. }
  467. if (saved.BankedWith != item.BankedWith)
  468. {
  469. saved.BankedWith = item.BankedWith;
  470. }
  471. if (saved.OwnerId != item.OwnerId)
  472. {
  473. saved.OwnerId = item.OwnerId;
  474. }
  475. if (saved.AgencyId != item.AgencyId)
  476. {
  477. saved.AgencyId = item.AgencyId;
  478. }
  479. if (saved.AgentId != item.AgentId)
  480. {
  481. saved.AgentId = item.AgentId;
  482. }
  483. if (saved.CustomOwner != item.CustomOwner)
  484. {
  485. saved.CustomOwner = item.CustomOwner;
  486. }
  487. if (item.CustomOwner)
  488. {
  489. var customOwner = _dbContext.NonRegIndividuals.Where(x => x.WeekId == item.Id).FirstOrDefault();
  490. if (customOwner != null)
  491. {
  492. if (item.Owner.Name != customOwner.Name)
  493. {
  494. customOwner.Name = item.Owner.Name;
  495. }
  496. if (item.Owner.Surname != customOwner.Surname)
  497. {
  498. customOwner.Surname = item.Owner.Surname;
  499. }
  500. if (item.Owner.IdNumber != customOwner.IDNumber)
  501. {
  502. customOwner.IDNumber = item.Owner.IdNumber;
  503. }
  504. if (item.Owner.CompanyRegNumber != customOwner.CompanyRegNumber)
  505. {
  506. customOwner.CompanyRegNumber = item.Owner.CompanyRegNumber;
  507. }
  508. if (item.Owner.Email != customOwner.EmailAddress)
  509. {
  510. customOwner.EmailAddress = item.Owner.Email;
  511. }
  512. if (item.Owner.CellNumber != customOwner.CellNumber)
  513. {
  514. customOwner.CellNumber = item.Owner.CellNumber;
  515. }
  516. if (item.Owner.Telephone != customOwner.TelephoneNumber)
  517. {
  518. customOwner.TelephoneNumber = item.Owner.Telephone;
  519. }
  520. saved.DisplayOwner = item.Owner.Name + " " + item.Owner.Surname;
  521. _dbContext.NonRegIndividuals.Update(customOwner);
  522. _dbContext.SaveChanges();
  523. }
  524. else
  525. {
  526. var nonRegUserObj = new NonRegIndividual
  527. {
  528. Name = item.Owner.Name,
  529. Surname = item.Owner.Surname,
  530. IDNumber = item.Owner.IdNumber,
  531. CompanyRegNumber = item.Owner.CompanyRegNumber,
  532. EmailAddress = item.Owner.Email,
  533. CellNumber = item.Owner.CellNumber,
  534. TelephoneNumber = item.Owner.Telephone,
  535. WeekId = item.Id
  536. };
  537. _dbContext.NonRegIndividuals.Add(nonRegUserObj);
  538. _dbContext.SaveChanges();
  539. saved.DisplayOwner = item.Owner.Name + " " + item.Owner.Surname;
  540. }
  541. }
  542. else
  543. {
  544. if (saved.DisplayOwner != item.Owner.Name + " " + item.Owner.Surname)
  545. {
  546. saved.DisplayOwner = item.Owner.Name + " " + item.Owner.Surname;
  547. }
  548. }
  549. /*var owner = _dbContext.Individuals.Where(x => x.Id == item.OwnerId).FirstOrDefault();
  550. if (owner.Name != item.Owner.Name)
  551. {
  552. owner.Name = item.Owner.Name;
  553. }
  554. if (owner.Surname != item.Owner.Surname)
  555. {
  556. owner.Surname = item.Owner.Surname;
  557. }
  558. if (owner.IdNumber != item.Owner.IdNumber)
  559. {
  560. owner.IdNumber = item.Owner.IdNumber;
  561. }
  562. if (owner.CompanyRegNumber != item.Owner.CompanyRegNumber)
  563. {
  564. owner.CompanyRegNumber = item.Owner.CompanyRegNumber;
  565. }
  566. if (owner.Email != item.Owner.Email)
  567. {
  568. owner.Email = item.Owner.Email;
  569. }
  570. if (owner.CellNumber != item.Owner.CellNumber)
  571. {
  572. owner.CellNumber = item.Owner.CellNumber;
  573. }
  574. if (owner.Telephone != item.Owner.Telephone)
  575. {
  576. owner.Telephone = item.Owner.Telephone;
  577. }*/
  578. if (saved.Mandate != item.Mandate)
  579. {
  580. if (item.Mandate)
  581. saved.DateMandated = DateTime.Now;
  582. }
  583. if (item.Status != null)
  584. {
  585. if (saved.StatusId != item.Status.Id)
  586. {
  587. saved.StatusId = item.Status.Id;
  588. }
  589. }
  590. else
  591. {
  592. var status = _dbContext.Status.Where(x => x.Id == item.StatusId).FirstOrDefault();
  593. saved.Status = status;
  594. saved.StatusId = item.StatusId;
  595. }
  596. if (saved.Publish != item.Publish)
  597. {
  598. saved.Publish = item.Publish;
  599. }
  600. if (saved.PulbishedDate != item.PulbishedDate)
  601. {
  602. saved.PulbishedDate = item.PulbishedDate;
  603. }
  604. _dbContext.Entry(saved).State = EntityState.Modified;
  605. Save();
  606. }
  607. public List<TimeshareWeek> GetBy(WeekFilterDto week)
  608. {
  609. List<TimeshareWeek> item = GetDetailedAll();
  610. if (!string.IsNullOrEmpty(week.RegionCode))
  611. {
  612. item = item.Where(x => x.Region != null && x.Region.Code?.ToLower() == week.RegionCode.ToLower()).ToList();
  613. }
  614. if (!string.IsNullOrEmpty(week.ResortCode))
  615. {
  616. item = item.Where(x => x.ResortCode?.ToLower() == week.ResortCode).ToList();
  617. }
  618. if (week.Date != null)
  619. {
  620. item = item.Where(x =>
  621. x.ArrivalDate >= week.Date.Value.AddDays(-7)
  622. && x.DepartureDate <= week.Date.Value.AddDays(7)).ToList();
  623. }
  624. if (week.MinAmount != null && week.MinAmount != 0)
  625. {
  626. item = item.Where(x => x.SellPrice >= week.MinAmount).ToList();
  627. }
  628. if (week.MaxAmount != null && week.MaxAmount != 0)
  629. {
  630. item.Where(x => x.SellPrice <= week.MaxAmount).ToList();
  631. }
  632. return item;
  633. }
  634. //public int NewId()
  635. //{
  636. // int id = 0;
  637. // if (_dbContext.Weeks.Count() > 0)
  638. // {
  639. // id = _dbContext.Weeks.Max(x => x.Id);
  640. // }
  641. // id += 1;
  642. // return id;
  643. //}
  644. private int _TenderId = 10000;
  645. private int GetTenderId()
  646. {
  647. return _TenderId++;
  648. }
  649. public List<WeekDto> GetTenderWeeks()
  650. {
  651. List<WeekDto> list = new List<WeekDto>();
  652. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(MyCommon.TenderUrl);
  653. request.Method = "GET";
  654. WebResponse response = request.GetResponse();
  655. using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
  656. {
  657. string result = reader.ReadToEnd();
  658. result = result.Replace("\n", "").Trim();
  659. if (result != "Resort Error")
  660. {
  661. if (result.Length > 0)
  662. {
  663. string cleanLine;
  664. string[] lines = result.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
  665. foreach (string line in lines)
  666. {
  667. cleanLine = line.Replace("<br>", "");
  668. cleanLine = cleanLine.Replace("<br >", "");
  669. cleanLine = cleanLine.Replace("<br/>", "");
  670. cleanLine = cleanLine.Replace("<br />", "");
  671. list.Add(new WeekDto(GetTenderId(), cleanLine));
  672. }
  673. }
  674. }
  675. }
  676. // Check that all regions are same as other
  677. list
  678. .Where(x => x.Region != null && x.Region.RegionCode == "FN")
  679. .ToList()
  680. .ForEach(x => x.Region.RegionCode = ChangeRegion(x.Region.RegionCode));
  681. list = GetRegion(list);
  682. return list;
  683. }
  684. public List<WeekDto> GetTenderWeeksByResortCode(string resortCode)
  685. {
  686. List<WeekDto> list = new List<WeekDto>();
  687. string conString = string.Format("http://www.unipoint-consoft.co.za/nph-srep.exe?cluvavail.sch&CLUB=LPA&RESORT={0}&SUMMARY=N&HEAD=N", resortCode);
  688. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(conString);
  689. request.Method = "GET";
  690. WebResponse response = request.GetResponse();
  691. using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
  692. {
  693. string result = reader.ReadToEnd();
  694. result = result.Replace("\n", "").Trim();
  695. if (result != "Resort Error")
  696. {
  697. if (result.Length > 0)
  698. {
  699. string cleanLine;
  700. string[] lines = result.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
  701. if (lines[0].Trim() != "none")
  702. {
  703. foreach (string line in lines)
  704. {
  705. cleanLine = line.Replace("<br>", "");
  706. cleanLine = cleanLine.Replace("<br >", "");
  707. cleanLine = cleanLine.Replace("<br/>", "");
  708. cleanLine = cleanLine.Replace("<br />", "");
  709. list.Add(new WeekDto(GetTenderId(), cleanLine));
  710. }
  711. }
  712. }
  713. }
  714. }
  715. // Check that all regions are same as other
  716. list
  717. .Where(x => x.Region != null && x.Region.RegionCode == "FN")
  718. .ToList()
  719. .ForEach(x => x.Region.RegionCode = ChangeRegion(x.Region.RegionCode));
  720. list = GetRegion(list);
  721. return list;
  722. }
  723. private List<WeekDto> GetRegion(List<WeekDto> list)
  724. {
  725. ProvinceRepository province = new ProvinceRepository(_dbContext);
  726. Province prov = null;
  727. foreach(var item in list)
  728. {
  729. prov = province.GetDetailed(x => x.Code == item.Region.RegionCode);
  730. if(prov != null)
  731. {
  732. item.Region = new RegionDto(prov.Id, prov.Code, prov.Description);
  733. }
  734. }
  735. return list;
  736. }
  737. private string ChangeRegion(string value)
  738. {
  739. switch(value)
  740. {
  741. case "FN":
  742. return "KZN";
  743. case "L":
  744. return "LI";
  745. default:
  746. return value;
  747. }
  748. }
  749. public List<DetailedWeekDto> GetNeedApproval()
  750. {
  751. List<DetailedWeekDto> detList = new List<DetailedWeekDto>();
  752. var status = _dbContext.Status.FirstOrDefault(x => x.Code == "A1" && x.StatusType == StatusType.Timeshare);
  753. if(status != null)
  754. {
  755. var list = GetDetailedAll().Where(x => x.Status != null && x.Status.Id == status.Id).ToList();
  756. list.ForEach(x => detList.Add(new DetailedWeekDto(x)));
  757. }
  758. return detList;
  759. }
  760. public void VerifyWeek(int id)
  761. {
  762. var week = _dbContext.Weeks.FirstOrDefault(x => x.Id == id);
  763. var newStatus = _dbContext.Status.FirstOrDefault(x => x.Code.ToLower() == "a2" && x.StatusType == StatusType.Timeshare);
  764. if(week != null && newStatus != null)
  765. {
  766. week = GetDetailedWeek(week);
  767. week.Status = newStatus;
  768. Update(week);
  769. var template = _dbContext.Templates.Where(x => x.Name == "WeekAuthorized").FirstOrDefault();
  770. if(template != null)
  771. {
  772. TemplateRepository tempRepo = new TemplateRepository(_dbContext);
  773. tempRepo.SendEmailTemplate(template, week.Owner, new List<BaseEntity>() { week, week.Owner, week.Owner.User});
  774. }
  775. }
  776. }
  777. public void PublishWeek(int id)
  778. {
  779. var week = _dbContext.Weeks.FirstOrDefault(x => x.Id == id);
  780. if (week != null)
  781. {
  782. week.Publish = true;
  783. week.PulbishedDate = DateTime.Now;
  784. _dbContext.Entry(week).State = EntityState.Modified;
  785. Save();
  786. }
  787. }
  788. public int SaveNewWeek(TimeshareWeekDto sellItem)
  789. {
  790. //var banking = _dbContext.BankAccounts.Where(b => b.Id == sellItem.OwnerObject.BankingDetails.Id).FirstOrDefault();
  791. var status = _dbContext.Status.Where(s => s.Id == sellItem.StatusId && s.StatusType == StatusType.Timeshare).FirstOrDefault();
  792. if (sellItem.AgentId != null)
  793. {
  794. var agent = _dbContext.Agents.Where(ag => ag.Id == sellItem.AgentId).FirstOrDefault();
  795. }
  796. #region Address - Check if the user has an address, if not and a new address has been posted it can be updated
  797. var address = new Model.Misc.Address();
  798. if (sellItem.OwnerObject.Address != null)
  799. {
  800. address = _dbContext.Addresses.Where(a => a.Id == sellItem.OwnerObject.Address.Id).FirstOrDefault();
  801. }
  802. if (sellItem.OwnerObject.Address.PostalCode != "")
  803. {
  804. if (address == null)
  805. {
  806. address = new Model.Misc.Address();
  807. }
  808. address.StreetNumber = sellItem.OwnerObject.Address.StreetNumber;
  809. address.Street = sellItem.OwnerObject.Address.Street;
  810. address.Suburb = sellItem.OwnerObject.Address.Suburb;
  811. address.City = sellItem.OwnerObject.Address.City;
  812. address.Province = sellItem.OwnerObject.Address.Province;
  813. address.PostalCode = sellItem.OwnerObject.Address.PostalCode;
  814. if (address.Id == 0)
  815. {
  816. _dbContext.Add(address);
  817. Save();
  818. }
  819. else
  820. {
  821. _dbContext.Entry(address).State = EntityState.Modified;
  822. Save();
  823. }
  824. }
  825. #endregion
  826. //#region Banking
  827. //if (sellItem.OwnerObject.BankingDetails.AccountHolder != "")
  828. //{
  829. // if (banking == null)
  830. // {
  831. // banking = new Model.Banks.BankAccount();
  832. // }
  833. // banking.AccountHolder = sellItem.OwnerObject.BankingDetails.AccountHolder;
  834. // banking.AccountNumber = sellItem.OwnerObject.BankingDetails.AccountNumber;
  835. // banking.BankId = sellItem.OwnerObject.BankingDetails.Bank.Id;
  836. // if (banking.Id == 0)
  837. // {
  838. // _dbContext.Add(banking);
  839. // Save();
  840. // }
  841. // else
  842. // {
  843. // _dbContext.Entry(banking).State = EntityState.Modified;
  844. // Save();
  845. // }
  846. //}
  847. //#endregion
  848. #region Owner
  849. //Check if an agent has listed the week.
  850. var agentWeek = _dbContext.Agents.Where(x => x.UserId == sellItem.OwnerId && !x.IsDeleted).FirstOrDefault();
  851. var owner = new Model.Users.Individual();
  852. var indiv = new NonRegIndividual();
  853. //Check if agentWeek is null. If null get an owner that listed the week
  854. if (agentWeek == null)
  855. {
  856. owner = _dbContext.Individuals.Where(x => x.UserId == sellItem.OwnerId).FirstOrDefault();
  857. }
  858. if (sellItem.CustomOwner)
  859. {
  860. sellItem.DisplayOwner = sellItem.OwnerObject.Name + " " + sellItem.OwnerObject.Surname;
  861. indiv = new NonRegIndividual()
  862. {
  863. Name = sellItem.OwnerObject.Name,
  864. Surname = sellItem.OwnerObject.Surname,
  865. IDNumber = sellItem.OwnerObject.IdNumber,
  866. CompanyRegNumber = sellItem.OwnerObject.CompanyRegNumber,
  867. EmailAddress = sellItem.OwnerObject.EmailAddress,
  868. CellNumber = sellItem.OwnerObject.CellNumber,
  869. TelephoneNumber = sellItem.OwnerObject.LandlineNumber,
  870. SpouseCellnumber = sellItem.OwnerObject.SpouseCellnumber,
  871. SpouseEmail = sellItem.OwnerObject.SpouseEmail,
  872. SpouseName = sellItem.OwnerObject.SpouseName,
  873. SpouseSurname = sellItem.OwnerObject.SpouseSurname,
  874. SpouseTelephone = sellItem.OwnerObject.SpouseSurname,
  875. };
  876. switch (sellItem.OwnerObject.MaritalStatus?.ToUpper())
  877. {
  878. case "":
  879. indiv.HowMarried = MarriedType.NotApplicable;
  880. break;
  881. case "N/A":
  882. indiv.HowMarried = MarriedType.NotApplicable;
  883. break;
  884. case "IN COMMUNITY OF PROPERTY":
  885. indiv.HowMarried = MarriedType.ICOP;
  886. break;
  887. case "OUT OF COMMUNITY OF PROPERTY":
  888. indiv.HowMarried = MarriedType.OCOP;
  889. break;
  890. case "OTHER":
  891. indiv.HowMarried = MarriedType.Other;
  892. break;
  893. case "TRADITIONAL WEDDING":
  894. indiv.HowMarried = MarriedType.Traditional;
  895. break;
  896. case "SINGLE":
  897. indiv.HowMarried = MarriedType.Single;
  898. break;
  899. case "DIVORCED":
  900. indiv.HowMarried = MarriedType.Divorced;
  901. break;
  902. case "WIDOW":
  903. indiv.HowMarried = MarriedType.Widow;
  904. break;
  905. case "COMMITTED RELATIONSHIP":
  906. indiv.HowMarried = MarriedType.CommittedRelationship;
  907. break;
  908. case "PARTNER":
  909. indiv.HowMarried = MarriedType.Partner;
  910. break;
  911. default:
  912. indiv.HowMarried = MarriedType.NotApplicable;
  913. break;
  914. }
  915. _dbContext.NonRegIndividuals.Add(indiv);
  916. _dbContext.SaveChanges();
  917. }
  918. else
  919. {
  920. if (owner == null)
  921. {
  922. owner = new Model.Users.Individual();
  923. }
  924. if (address != null)
  925. {
  926. owner.AddressId = address.Id;
  927. owner.Address = address;
  928. }
  929. if (agentWeek == null)
  930. {
  931. owner.Name = sellItem.OwnerObject.Name;
  932. owner.Surname = sellItem.OwnerObject.Surname;
  933. owner.IdNumber = sellItem.OwnerObject.IdNumber;
  934. owner.CompanyRegNumber = sellItem.OwnerObject.CompanyRegNumber;
  935. owner.Email = sellItem.OwnerObject.EmailAddress;
  936. owner.CellNumber = sellItem.OwnerObject.CellNumber;
  937. owner.Telephone = sellItem.OwnerObject.LandlineNumber;
  938. sellItem.DisplayOwner = owner.Name + " " + owner.Surname;
  939. switch (sellItem.OwnerObject.MaritalStatus?.ToUpper())
  940. {
  941. case "N/A":
  942. owner.HowMarried = MarriedType.NotApplicable;
  943. break;
  944. case "IN COMMUNITY OF PROPERTY":
  945. owner.HowMarried = MarriedType.ICOP;
  946. break;
  947. case "OUT OF COMMUNITY OF PROPERTY":
  948. owner.HowMarried = MarriedType.OCOP;
  949. break;
  950. case "OTHER":
  951. owner.HowMarried = MarriedType.Other;
  952. break;
  953. case "TRADITIONAL WEDDING":
  954. owner.HowMarried = MarriedType.Traditional;
  955. break;
  956. case "SINGLE":
  957. owner.HowMarried = MarriedType.Single;
  958. break;
  959. case "DIVORCED":
  960. owner.HowMarried = MarriedType.Divorced;
  961. break;
  962. case "WIDOW":
  963. owner.HowMarried = MarriedType.Widow;
  964. break;
  965. case "COMMITTED RELATIONSHIP":
  966. owner.HowMarried = MarriedType.CommittedRelationship;
  967. break;
  968. case "PARTNER":
  969. owner.HowMarried = MarriedType.Partner;
  970. break;
  971. default:
  972. owner.HowMarried = MarriedType.NotApplicable;
  973. break;
  974. }
  975. owner.SpouseCellnumber = sellItem.OwnerObject.SpouseCellnumber;
  976. owner.SpouseEmail = sellItem.OwnerObject.SpouseEmail;
  977. owner.SpouseName = sellItem.OwnerObject.SpouseName;
  978. owner.SpouseSurname = sellItem.OwnerObject.SpouseSurname;
  979. owner.SpouseTelephone = sellItem.OwnerObject.SpouseSurname;
  980. if (owner.Id == 0)
  981. {
  982. _dbContext.Add(owner);
  983. Save();
  984. }
  985. else
  986. {
  987. _dbContext.Entry(owner).State = EntityState.Modified;
  988. Save();
  989. }
  990. }
  991. else
  992. {
  993. agentWeek.Name = sellItem.OwnerObject.Name;
  994. agentWeek.Surname = sellItem.OwnerObject.Surname;
  995. agentWeek.Email = sellItem.OwnerObject.EmailAddress;
  996. agentWeek.CellNumber = sellItem.OwnerObject.CellNumber;
  997. agentWeek.Telephone = sellItem.OwnerObject.LandlineNumber;
  998. sellItem.DisplayOwner = agentWeek.Name + " " + agentWeek.Surname;
  999. if (agentWeek.Id == 0)
  1000. {
  1001. _dbContext.Add(agentWeek);
  1002. Save();
  1003. }
  1004. else
  1005. {
  1006. _dbContext.Entry(agentWeek).State = EntityState.Modified;
  1007. Save();
  1008. }
  1009. }
  1010. }
  1011. #endregion
  1012. var week = new TimeshareWeek();
  1013. try
  1014. {
  1015. foreach (string prop in week.GetAllProperties())
  1016. {
  1017. if (prop != "Item" && prop != "Display")
  1018. week[prop] = sellItem[prop];
  1019. }
  1020. week.Region = null;
  1021. week.RegionId = sellItem.Region.Id;
  1022. //if agentWeek then set week owner equal to agentWeek.id else
  1023. if (agentWeek != null)
  1024. {
  1025. week.OwnerId = agentWeek.Id;
  1026. }
  1027. else
  1028. {
  1029. week.OwnerId = owner.Id;
  1030. }
  1031. if (week.Mandate)
  1032. week.DateMandated = DateTime.Now;
  1033. TemplateRepository templateRepository = new TemplateRepository(_dbContext);
  1034. MailRepository mailRepository = new MailRepository(_dbContext);
  1035. var template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekLoaded-Owner");
  1036. try
  1037. {
  1038. if (agentWeek != null)
  1039. {
  1040. template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekLoaded-Agent");
  1041. if (template != null)
  1042. {
  1043. mailRepository.WeekLoadedAgent(sellItem);
  1044. //templateRepository.SendEmailTemplateWeek(template, agent, sellItem);
  1045. }
  1046. }
  1047. else
  1048. {
  1049. if (template != null)
  1050. {
  1051. mailRepository.WeekLoadedOwner(sellItem);
  1052. //templateRepository.SendEmailTemplateWeek(template, owner, sellItem);
  1053. }
  1054. /*template = _dbContext.Templates.FirstOrDefault(x => x.Name == "WeekLoaded-UV");
  1055. if (template != null)
  1056. {
  1057. templateRepository.SendEmailTemplate(template, sellItem.Owner, new List<BaseEntity>() { sellItem, sellItem.Owner });
  1058. }*/
  1059. }
  1060. }
  1061. catch (Exception ex)
  1062. {
  1063. MailModel mm = new MailModel();
  1064. mm.ComType = "WeekLoad";
  1065. mm.Error = ex.ToString();
  1066. _dbContext.CommunicationLog.Add(mm);
  1067. }
  1068. if (sellItem.StatusId == 0)
  1069. {
  1070. var statuses = _dbContext.Status.ToList();
  1071. foreach (var statusItem in statuses)
  1072. {
  1073. if (statusItem.Code == "AP")
  1074. {
  1075. week.StatusId = statusItem.Id;
  1076. }
  1077. }
  1078. }
  1079. _dbContext.Add(week);
  1080. Save();
  1081. if (sellItem.CustomOwner)
  1082. {
  1083. indiv.WeekId = week.Id;
  1084. _dbContext.NonRegIndividuals.Update(indiv);
  1085. Save();
  1086. }
  1087. }
  1088. catch (Exception ex)
  1089. {
  1090. throw (ex);
  1091. }
  1092. return week.Id;
  1093. }
  1094. public void UnpublishWeek(int WeekId)
  1095. {
  1096. var week = _dbContext.Weeks.FirstOrDefault(x => x.Id == WeekId);
  1097. if (week != null)
  1098. {
  1099. week.Publish = false;
  1100. week.PulbishedDate = DateTime.MinValue;
  1101. _dbContext.Entry(week).State = EntityState.Modified;
  1102. Save();
  1103. }
  1104. }
  1105. }
  1106. }