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.

CampaignRepository.cs 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.EntityFrameworkCore;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Threading.Tasks;
  9. using UnivateProperties_API.Containers.Campaigns;
  10. using UnivateProperties_API.Context;
  11. using UnivateProperties_API.Helpers;
  12. using UnivateProperties_API.Model.Campaigns;
  13. using UnivateProperties_API.Model.Properties;
  14. using UnivateProperties_API.Model.Timeshare;
  15. namespace UnivateProperties_API.Repository.Campaigns
  16. {
  17. public interface ICampaignRepository : IRepository<Campaign>
  18. {
  19. CampaignDTO GetDTO(Func<Campaign, bool> where);
  20. int InsertFromDTO(CampaignDTO campaign);
  21. string GetCampaignHTML(int CampaignId);
  22. List<CampaignItem> GetCampaignItems(int CampaignId);
  23. List<CampaignPlaceHolder> GetCampaignPlaceHolders(int CampaignId);
  24. void addUploadCampaign(UploadCampaign campaignName);
  25. List<UploadCampaign> GetUploadedCampaigns();
  26. void RemoveUploadedAtId(int id);
  27. }
  28. public class CampaignRepository : ICampaignRepository
  29. {
  30. private readonly DataContext _dbContext;
  31. public CampaignRepository(DataContext dbContext)
  32. {
  33. _dbContext = dbContext;
  34. }
  35. public List<Campaign> Get(Func<Campaign, bool> where)
  36. {
  37. return _dbContext.Campaigns.Where(where).ToList();
  38. }
  39. public List<Campaign> GetAll()
  40. {
  41. return _dbContext.Campaigns.OrderByDescending(c => c.Created).ToList();
  42. }
  43. public string GetCampaignHTML(int CampaignId)
  44. {
  45. var campaign = _dbContext.Campaigns.Where(c => c.Id == CampaignId).Include("PlaceHolders").Include("Items").FirstOrDefault();
  46. string html = "";
  47. string tableItems = "<table align=center>";
  48. int rows;
  49. if (campaign.ItemsPerRow == 0)
  50. campaign.ItemsPerRow = 1;
  51. if (campaign.Items.Count % campaign.ItemsPerRow == 0)
  52. {
  53. rows = campaign.Items.Count / campaign.ItemsPerRow;
  54. }
  55. else
  56. {
  57. int remainder = campaign.Items.Count % campaign.ItemsPerRow;
  58. int evenItems = campaign.Items.Count - remainder;
  59. rows = evenItems / campaign.ItemsPerRow;
  60. rows += remainder;
  61. }
  62. int itemCounter = 0;
  63. for (int r = 0; r < rows; r++)
  64. {
  65. tableItems += "<tr>";
  66. for(int c = 0; c < campaign.ItemsPerRow; c++)
  67. {
  68. itemCounter++;
  69. if (itemCounter > campaign.Items.Count)
  70. tableItems += "<td></td>";
  71. else
  72. tableItems += string.Format("<td>[ITEM{0}]</td>", itemCounter);
  73. }
  74. tableItems += "</tr>";
  75. }
  76. tableItems += "</table>";
  77. if(campaign != null)
  78. {
  79. var url = _dbContext.Defaults.Where(d => d.Id == "URL").FirstOrDefault();
  80. html = campaign.Body;
  81. string temp = campaign.ItemBody;
  82. TimeshareWeek week = new TimeshareWeek();
  83. Property property = new Property();
  84. itemCounter = 0;
  85. foreach (var item in campaign.Items)
  86. {
  87. itemCounter++;
  88. if (item.WeekId != 0)
  89. {
  90. week = _dbContext.Weeks.Where(w => w.Id == item.WeekId).FirstOrDefault();
  91. }
  92. else
  93. {
  94. property = _dbContext.Properties.Where(p => p.Id == item.PropertyId).FirstOrDefault();
  95. }
  96. string curItem = temp;
  97. foreach(var place in campaign.PlaceHolders)
  98. {
  99. //var value = property[place.BoundTo];
  100. var value = week.Id == 0 ? property[place.BoundTo] : week[place.BoundTo];
  101. if (!string.IsNullOrEmpty(place.Format))
  102. {
  103. string format = place.Format;
  104. if (format.Contains("|"))
  105. {
  106. string special = format.Substring(format.IndexOf('|'), format.Length - format.IndexOf('|')).Replace("|", "");
  107. format = format.Substring(0, format.IndexOf('|'));
  108. if (special == "DaySuffix")
  109. {
  110. if (DateTime.TryParse(value.ToString(), out DateTime dateValue))
  111. {
  112. string suffix = MyCommon.DateSuffixed(dateValue);
  113. string[] formatParts = format.Split(" ");
  114. string replaceValue = "";
  115. foreach(var s in formatParts)
  116. {
  117. string tempFormat = "{0:" + s + "}";
  118. replaceValue += string.Format(tempFormat, dateValue);
  119. if (s.ToLower().Contains("d"))
  120. replaceValue += "<sup>" + suffix + "</sup> ";
  121. else
  122. replaceValue += " ";
  123. }
  124. curItem = curItem.Replace(place.Name.ToString(), replaceValue.Trim());
  125. }
  126. else
  127. {
  128. curItem = curItem.Replace(place.Name.ToString(), "ERROR-Date format on non date field");
  129. }
  130. }
  131. }
  132. else
  133. curItem = curItem.Replace(place.Name.ToString(), string.Format("{0:" + format + "}", value));
  134. }
  135. else
  136. curItem = curItem.Replace(place.Name.ToString(), value != null ? value.ToString() : place.Name.ToString() + " (NO DATA)");
  137. }
  138. var cutsomPlaceHolders = _dbContext.CampaignItemPlaceHolders.Where(c => c.CampaignItemId == item.Id).ToList();
  139. foreach (var custom in cutsomPlaceHolders)
  140. {
  141. curItem = curItem.Replace(custom.PlaceHolder, custom.Value);
  142. }
  143. curItem = curItem.Replace("[image]", item.Image);
  144. if (item.Week != null)
  145. {
  146. curItem = curItem.Replace("[link]", string.Format("{0}resort/{1}/{2}", url?.Value ?? "http://localhost:8080/#/", item.Week.ResortCode, item.Week.UnitNumber));
  147. }
  148. else
  149. {
  150. if (_dbContext.PropertyTypes.Where(x => x.Id == item.Property.PropertyTypeId).FirstOrDefault().UsageType == PropertyUsageType.Commercial)
  151. {
  152. curItem = curItem.Replace("[link]", string.Format("{0}property/commercial/property/{1}", url?.Value ?? "http://localhost:8080/#/", item.Property.Id));
  153. }
  154. else
  155. {
  156. curItem = curItem.Replace("[link]", string.Format("{0}property/residential/property/{1}", url?.Value ?? "http://localhost:8080/#/", item.Property.Id));
  157. }
  158. }
  159. tableItems = tableItems.Replace(string.Format("[ITEM{0}]", itemCounter), curItem);
  160. }
  161. html = html.Replace("[items]", tableItems);
  162. }
  163. return html;
  164. }
  165. public List<CampaignItem> GetCampaignItems(int CampaignId)
  166. {
  167. return _dbContext.CampaignItems.Where(c => c.CampaignId == CampaignId).ToList();
  168. }
  169. public List<CampaignPlaceHolder> GetCampaignPlaceHolders(int CampaignId)
  170. {
  171. return _dbContext.CampaignPlaceHolders.Where(c => c.CampaignId == CampaignId).ToList();
  172. }
  173. public Campaign GetDetailed(Func<Campaign, bool> first)
  174. {
  175. var item = _dbContext.Campaigns.FirstOrDefault(first);
  176. if (item == null)
  177. {
  178. item = new Campaign
  179. {
  180. Items = new List<CampaignItem>(),
  181. PlaceHolders = new List<CampaignPlaceHolder>()
  182. };
  183. }
  184. else
  185. {
  186. item.Items = (from i in _dbContext.CampaignItems
  187. where i.CampaignId == item.Id && i.WeekId != 0
  188. select new CampaignItem() { Id = i.Id, CampaignId = i.CampaignId, Image = i.Image, WeekId = i.WeekId, Week = i.Week, CampaignItemPlaceHolder = new List<CampaignItemPlaceHolder>()}).ToList();
  189. item.Items = (from i in _dbContext.CampaignItems
  190. where i.CampaignId == item.Id && i.WeekId == 0
  191. select new CampaignItem() { Id = i.Id, CampaignId = i.CampaignId, Image = i.Image, PropertyId = i.PropertyId, Property = i.Property, CampaignItemPlaceHolder = new List<CampaignItemPlaceHolder>() }).ToList();
  192. item.PlaceHolders = (from i in _dbContext.CampaignPlaceHolders
  193. where i.CampaignId == item.Id
  194. select new CampaignPlaceHolder(){Id = i.Id, CampaignId = i.CampaignId, Name = i.Name, BoundTo = i.BoundTo, BoundToClass = i.BoundToClass, BoundToClassDisplay = i.BoundToClassDisplay }).ToList();
  195. foreach(var week in item.Items)
  196. {
  197. var placeholders = (from p in _dbContext.CampaignItemPlaceHolders
  198. where p.CampaignItemId == week.Id
  199. select new CampaignItemPlaceHolder() { Id = p.Id, PlaceHolder = p.PlaceHolder, Value = p.Value, CampaignItemId = p.CampaignItemId }).ToList();
  200. week.CampaignItemPlaceHolder = placeholders;
  201. }
  202. }
  203. var sItem = JsonConvert.SerializeObject(item, Formatting.None);
  204. return item;
  205. }
  206. public List<Campaign> GetDetailedAll()
  207. {
  208. return GetAll();
  209. }
  210. public CampaignDTO GetDTO(Func<Campaign, bool> where)
  211. {
  212. var item = _dbContext.Campaigns.Include("Items").Include("PlaceHolders").Where(where).FirstOrDefault();
  213. var dto = new CampaignDTO
  214. {
  215. PlaceHolders = new List<CampaignPlaceholderDTO>(),
  216. Weeks = new List<CampaignWeeksDTO>(),
  217. WeekPlaceHolders = new List<CampaignWeeksPlaceHolderDTO>()
  218. };
  219. if (item != null)
  220. {
  221. dto.Name = item.Name;
  222. dto.StartDate = item.StartDate;
  223. dto.EndDate = item.EndDate;
  224. dto.Subject = item.Subject;
  225. dto.Body = item.Body;
  226. dto.ItemBody = item.ItemBody;
  227. foreach (var p in item.PlaceHolders)
  228. {
  229. dto.PlaceHolders.Add(new CampaignPlaceholderDTO()
  230. {
  231. Name = p.Name,
  232. BoundTo = p.BoundTo,
  233. BoundToClass = p.BoundToClass,
  234. BoundToClassDisplay = p.BoundToClassDisplay
  235. });
  236. }
  237. foreach (var i in item.Items)
  238. {
  239. dto.Weeks.Add(new CampaignWeeksDTO()
  240. {
  241. Image = i.Image,
  242. WeekId = i.WeekId
  243. });
  244. }
  245. }
  246. return dto;
  247. }
  248. public void Insert(Campaign item)
  249. {
  250. if (item.PlaceHolders.Count > 0)
  251. {
  252. foreach (var ph in item.PlaceHolders)
  253. {
  254. ph.CampaignId = item.Id;
  255. }
  256. }
  257. if (item.Items.Count > 0)
  258. {
  259. foreach (var i in item.Items)
  260. {
  261. i.CampaignId = item.Id;
  262. }
  263. }
  264. _dbContext.Add(item);
  265. Save();
  266. }
  267. public void Insert(IEnumerable<Campaign> items)
  268. {
  269. foreach (var item in items)
  270. {
  271. _dbContext.Add(item);
  272. }
  273. Save();
  274. }
  275. public int InsertFromDTO(CampaignDTO campaign)
  276. {
  277. var cam = new Campaign
  278. {
  279. Name = campaign.Name,
  280. StartDate = campaign.StartDate,
  281. EndDate = campaign.EndDate,
  282. Subject = campaign.Subject,
  283. Body = campaign.Body,
  284. ItemBody = campaign.ItemBody,
  285. ItemsPerRow = campaign.ItemsPerRow
  286. };
  287. if (campaign.PlaceHolders.Count > 0)
  288. {
  289. cam.PlaceHolders = new List<CampaignPlaceHolder>();
  290. foreach (var place in campaign.PlaceHolders)
  291. {
  292. cam.PlaceHolders.Add(new CampaignPlaceHolder()
  293. {
  294. CampaignId = cam.Id,
  295. Name = place.Name,
  296. BoundTo = place.BoundTo,
  297. BoundToClass = place.BoundToClass,
  298. BoundToClassDisplay = place.BoundToClassDisplay
  299. });
  300. }
  301. }
  302. if (campaign.Weeks.Count > 0)
  303. {
  304. cam.Items = new List<CampaignItem>();
  305. foreach (var week in campaign.Weeks)
  306. {
  307. cam.Items.Add(new CampaignItem()
  308. {
  309. CampaignId = cam.Id,
  310. WeekId = week.WeekId,
  311. Image = week.Image
  312. });
  313. }
  314. }
  315. if (campaign.WeekPlaceHolders.Count > 0)
  316. {
  317. foreach (var wph in campaign.WeekPlaceHolders)
  318. {
  319. var week = cam.Items.Where(w => w.WeekId == wph.WeekId).FirstOrDefault();
  320. if (week.CampaignItemPlaceHolder == null)
  321. week.CampaignItemPlaceHolder = new List<CampaignItemPlaceHolder>();
  322. CampaignItemPlaceHolder campaignItemPlaceHolder = new CampaignItemPlaceHolder
  323. {
  324. CampaignItemId = week.Id,
  325. PlaceHolder = wph.Name,
  326. Value = wph.Value
  327. };
  328. week.CampaignItemPlaceHolder.Add(campaignItemPlaceHolder);
  329. }
  330. }
  331. _dbContext.Add(cam);
  332. Save();
  333. return cam.Id;
  334. }
  335. public int NewId()
  336. {
  337. throw new NotImplementedException();
  338. }
  339. public void Remove(Campaign item)
  340. {
  341. var i = _dbContext.Campaigns.Find(item);
  342. _dbContext.Campaigns.Remove(i);
  343. Save();
  344. }
  345. public void Remove(IEnumerable<Campaign> items)
  346. {
  347. foreach (var item in items)
  348. {
  349. var i = _dbContext.Campaigns.Find(item);
  350. _dbContext.Campaigns.Remove(i);
  351. }
  352. Save();
  353. }
  354. public void RemoveAtId(int item)
  355. {
  356. var i = _dbContext.Campaigns.Where(c => c.Id == item).FirstOrDefault();
  357. if (i != null)
  358. {
  359. _dbContext.Campaigns.Remove(i);
  360. }
  361. Save();
  362. }
  363. public void Save()
  364. {
  365. _dbContext.SaveChanges();
  366. }
  367. public List<UploadCampaign> GetUploadedCampaigns()
  368. {
  369. return _dbContext.CampaignUploads.Where(x => x.IsDeleted == false).ToList();
  370. }
  371. public void addUploadCampaign(UploadCampaign campaign)
  372. {
  373. var camp = _dbContext.CampaignUploads.Where(x => x.FileName == campaign.FileName).FirstOrDefault();
  374. if (camp == null)
  375. {
  376. _dbContext.CampaignUploads.Add(campaign);
  377. Save();
  378. }
  379. }
  380. public void RemoveUploadedAtId(int id)
  381. {
  382. var camp = _dbContext.CampaignUploads.Where(x => x.Id == id).FirstOrDefault();
  383. _dbContext.CampaignUploads.Remove(camp);
  384. Save();
  385. }
  386. public void Update(Campaign item)
  387. {
  388. //var savedItem = _dbContext.Campaigns.Where(x => x.Id == item.Id).FirstOrDefault();
  389. //if (savedItem != null)
  390. //{
  391. // if (savedItem.Name != item.Name)
  392. // {
  393. // savedItem.Name = item.Name;
  394. // }
  395. // if (savedItem.StartDate != item.StartDate)
  396. // {
  397. // savedItem.StartDate = item.StartDate;
  398. // }
  399. // if (savedItem.EndDate != item.EndDate)
  400. // {
  401. // savedItem.EndDate = item.EndDate;
  402. // }
  403. // if (savedItem.Subject != item.Subject)
  404. // {
  405. // savedItem.Subject = item.Subject;
  406. // }
  407. // if (savedItem.ItemsPerRow != item.ItemsPerRow)
  408. // {
  409. // savedItem.ItemsPerRow = item.ItemsPerRow;
  410. // }
  411. // if (savedItem.Body != item.Body)
  412. // {
  413. // savedItem.Body = item.Body;
  414. // }
  415. // if (savedItem.ItemBody != item.ItemBody)
  416. // {
  417. // savedItem.ItemBody = item.ItemBody;
  418. // }
  419. // if (_dbContext.CampaignPlaceHolders.Where(x => x.CampaignId == savedItem.Id).ToList().Count > 0)
  420. // {
  421. // if (_dbContext.CampaignPlaceHolders.Where(x => x.CampaignId == savedItem.Id).ToList().Count < item.PlaceHolders.Count)
  422. // {
  423. // var holders = _dbContext.CampaignPlaceHolders.Where(x => x.CampaignId == item.Id).ToList();
  424. // foreach (var savedPhItem in holders)
  425. // {
  426. // _dbContext.Remove(savedPhItem);
  427. // }
  428. // Save();
  429. // foreach (CampaignPlaceHolder ph in item.PlaceHolders)
  430. // {
  431. // ph.CampaignId = item.Id;
  432. // _dbContext.Add(ph);
  433. // }
  434. // Save();
  435. // }
  436. // }
  437. // else
  438. // {
  439. // foreach (CampaignPlaceHolder ph in item.PlaceHolders)
  440. // {
  441. // ph.CampaignId = item.Id;
  442. // _dbContext.Add(ph);
  443. // }
  444. // Save();
  445. // }
  446. // if (savedItem.Items != null)
  447. // {
  448. // if (savedItem.Items.Count < item.Items.Count)
  449. // {
  450. // var savedItems = _dbContext.CampaignItems.Where(x => x.CampaignId == item.Id).ToList();
  451. // foreach (var savedCamItem in savedItems)
  452. // {
  453. // _dbContext.Remove(savedCamItem);
  454. // }
  455. // Save();
  456. // foreach (CampaignItem ci in item.Items)
  457. // {
  458. // ci.CampaignId = item.Id;
  459. // _dbContext.Add(ci);
  460. // }
  461. // Save();
  462. // }
  463. // }
  464. // else
  465. // {
  466. // foreach (CampaignItem ci in item.Items)
  467. // {
  468. // ci.CampaignId = item.Id;
  469. // _dbContext.Add(ci);
  470. // }
  471. // Save();
  472. // }
  473. //}
  474. //_dbContext.Update(savedItem);
  475. _dbContext.Entry(item).State = EntityState.Modified;
  476. Save();
  477. }
  478. }
  479. }