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 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. using Microsoft.EntityFrameworkCore;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using UnivateProperties_API.Containers.Campaigns;
  8. using UnivateProperties_API.Context;
  9. using UnivateProperties_API.Helpers;
  10. using UnivateProperties_API.Model.Campaigns;
  11. namespace UnivateProperties_API.Repository.Campaigns
  12. {
  13. public interface ICampaignRepository : IRepository<Campaign>
  14. {
  15. CampaignDTO GetDTO(Func<Campaign, bool> where);
  16. int InsertFromDTO(CampaignDTO campaign);
  17. string GetCampaignHTML(int CampaignId);
  18. List<CampaignItem> GetCampaignItems(int CampaignId);
  19. List<CampaignPlaceHolder> GetCampaignPlaceHolders(int CampaignId);
  20. }
  21. public class CampaignRepository : ICampaignRepository
  22. {
  23. private readonly DataContext _dbContext;
  24. public CampaignRepository(DataContext dbContext)
  25. {
  26. _dbContext = dbContext;
  27. }
  28. public List<Campaign> Get(Func<Campaign, bool> where)
  29. {
  30. return _dbContext.Campaigns.Where(where).ToList();
  31. }
  32. public List<Campaign> GetAll()
  33. {
  34. return _dbContext.Campaigns.OrderByDescending(c => c.Created).ToList();
  35. }
  36. public string GetCampaignHTML(int CampaignId)
  37. {
  38. var campaign = _dbContext.Campaigns.Where(c => c.Id == CampaignId).Include("PlaceHolders").Include("Items").FirstOrDefault();
  39. string html = "";
  40. string tableItems = "<table align=center>";
  41. int rows;
  42. if (campaign.Items.Count % campaign.ItemsPerRow == 0)
  43. {
  44. rows = campaign.Items.Count / campaign.ItemsPerRow;
  45. }
  46. else
  47. {
  48. int remainder = campaign.Items.Count % campaign.ItemsPerRow;
  49. int evenItems = campaign.Items.Count - remainder;
  50. rows = evenItems / campaign.ItemsPerRow;
  51. rows += remainder;
  52. }
  53. int itemCounter = 0;
  54. for (int r = 0; r < rows; r++)
  55. {
  56. tableItems += "<tr>";
  57. for(int c = 0; c < campaign.ItemsPerRow; c++)
  58. {
  59. itemCounter++;
  60. if (itemCounter > campaign.Items.Count)
  61. tableItems += "<td></td>";
  62. else
  63. tableItems += string.Format("<td>[ITEM{0}]</td>", itemCounter);
  64. }
  65. tableItems += "</tr>";
  66. }
  67. tableItems += "</table>";
  68. if(campaign != null)
  69. {
  70. var url = _dbContext.Defaults.Where(d => d.Id == "URL").FirstOrDefault();
  71. html = campaign.Body;
  72. string temp = campaign.ItemBody;
  73. itemCounter = 0;
  74. foreach (var item in campaign.Items)
  75. {
  76. itemCounter++;
  77. var week = _dbContext.Weeks.Where(w => w.Id == item.WeekId).FirstOrDefault();
  78. string curItem = temp;
  79. foreach(var place in campaign.PlaceHolders)
  80. {
  81. var value = week[place.BoundTo];
  82. if (!string.IsNullOrEmpty(place.Format))
  83. {
  84. string format = place.Format;
  85. if (format.Contains("|"))
  86. {
  87. string special = format.Substring(format.IndexOf('|'), format.Length - format.IndexOf('|')).Replace("|", "");
  88. format = format.Substring(0, format.IndexOf('|'));
  89. if (special == "DaySuffix")
  90. {
  91. if (DateTime.TryParse(value.ToString(), out DateTime dateValue))
  92. {
  93. string suffix = MyCommon.DateSuffixed(dateValue);
  94. string[] formatParts = format.Split(" ");
  95. string replaceValue = "";
  96. foreach(var s in formatParts)
  97. {
  98. string tempFormat = "{0:" + s + "}";
  99. replaceValue += string.Format(tempFormat, dateValue);
  100. if (s.ToLower().Contains("d"))
  101. replaceValue += "<sup>" + suffix + "</sup> ";
  102. else
  103. replaceValue += " ";
  104. }
  105. curItem = curItem.Replace(place.Name.ToString(), replaceValue.Trim());
  106. }
  107. else
  108. {
  109. curItem = curItem.Replace(place.Name.ToString(), "ERROR-Date format on non date field");
  110. }
  111. }
  112. }
  113. else
  114. curItem = curItem.Replace(place.Name.ToString(), string.Format("{0:" + format + "}", value));
  115. }
  116. else
  117. curItem = curItem.Replace(place.Name.ToString(), value.ToString());
  118. }
  119. var cutsomPlaceHolders = _dbContext.CampaignItemPlaceHolders.Where(c => c.CampaignItemId == item.Id).ToList();
  120. foreach (var custom in cutsomPlaceHolders)
  121. {
  122. curItem = curItem.Replace(custom.PlaceHolder, custom.Value);
  123. }
  124. curItem = curItem.Replace("[image]", item.Image);
  125. curItem = curItem.Replace("[link]", string.Format("{0}resort/{1}/{2}", url?.Value ?? "http://localhost:8080/#/", item.Week.ResortCode, item.Week.UnitNumber));
  126. tableItems = tableItems.Replace(string.Format("[ITEM{0}]", itemCounter), curItem);
  127. }
  128. html = html.Replace("[items]", tableItems);
  129. }
  130. return html;
  131. }
  132. public List<CampaignItem> GetCampaignItems(int CampaignId)
  133. {
  134. return _dbContext.CampaignItems.Where(c => c.CampaignId == CampaignId).ToList();
  135. }
  136. public List<CampaignPlaceHolder> GetCampaignPlaceHolders(int CampaignId)
  137. {
  138. return _dbContext.CampaignPlaceHolders.Where(c => c.CampaignId == CampaignId).ToList();
  139. }
  140. public Campaign GetDetailed(Func<Campaign, bool> first)
  141. {
  142. var item = _dbContext.Campaigns.FirstOrDefault(first);
  143. if (item == null)
  144. {
  145. item = new Campaign
  146. {
  147. Items = new List<CampaignItem>(),
  148. PlaceHolders = new List<CampaignPlaceHolder>()
  149. };
  150. }
  151. else
  152. {
  153. item.Items = (from i in _dbContext.CampaignItems
  154. where i.CampaignId == item.Id
  155. select new CampaignItem() { Id = i.Id, CampaignId = i.CampaignId, Image = i.Image, WeekId = i.WeekId, Week = i.Week, CampaignItemPlaceHolder = new List<CampaignItemPlaceHolder>()}).ToList();
  156. item.PlaceHolders = (from i in _dbContext.CampaignPlaceHolders
  157. where i.CampaignId == item.Id
  158. select new CampaignPlaceHolder(){Id = i.Id, CampaignId = i.CampaignId, Name = i.Name, BoundTo = i.BoundTo, BoundToClass = i.BoundToClass, BoundToClassDisplay = i.BoundToClassDisplay }).ToList();
  159. foreach(var week in item.Items)
  160. {
  161. var placeholders = (from p in _dbContext.CampaignItemPlaceHolders
  162. where p.CampaignItemId == week.Id
  163. select new CampaignItemPlaceHolder() { Id = p.Id, PlaceHolder = p.PlaceHolder, Value = p.Value, CampaignItemId = p.CampaignItemId }).ToList();
  164. week.CampaignItemPlaceHolder = placeholders;
  165. }
  166. }
  167. var sItem = JsonConvert.SerializeObject(item, Formatting.None);
  168. return item;
  169. }
  170. public List<Campaign> GetDetailedAll()
  171. {
  172. return GetAll();
  173. }
  174. public CampaignDTO GetDTO(Func<Campaign, bool> where)
  175. {
  176. var item = _dbContext.Campaigns.Include("Items").Include("PlaceHolders").Where(where).FirstOrDefault();
  177. var dto = new CampaignDTO
  178. {
  179. PlaceHolders = new List<CampaignPlaceholderDTO>(),
  180. Weeks = new List<CampaignWeeksDTO>(),
  181. WeekPlaceHolders = new List<CampaignWeeksPlaceHolderDTO>()
  182. };
  183. if (item != null)
  184. {
  185. dto.Name = item.Name;
  186. dto.StartDate = item.StartDate;
  187. dto.EndDate = item.EndDate;
  188. dto.Subject = item.Subject;
  189. dto.Body = item.Body;
  190. dto.ItemBody = item.ItemBody;
  191. foreach (var p in item.PlaceHolders)
  192. {
  193. dto.PlaceHolders.Add(new CampaignPlaceholderDTO()
  194. {
  195. Name = p.Name,
  196. BoundTo = p.BoundTo,
  197. BoundToClass = p.BoundToClass,
  198. BoundToClassDisplay = p.BoundToClassDisplay
  199. });
  200. }
  201. foreach (var i in item.Items)
  202. {
  203. dto.Weeks.Add(new CampaignWeeksDTO()
  204. {
  205. Image = i.Image,
  206. WeekId = i.WeekId
  207. });
  208. }
  209. }
  210. return dto;
  211. }
  212. public void Insert(Campaign item)
  213. {
  214. item.Id = NewId();
  215. int last = _dbContext.GetMaxID("CampaignPlaceHolders") + 1;
  216. if (item.PlaceHolders.Count > 0)
  217. {
  218. foreach (var ph in item.PlaceHolders)
  219. {
  220. ph.CampaignId = item.Id;
  221. ph.Id = last;
  222. last++;
  223. }
  224. }
  225. last = _dbContext.GetMaxID("CampaignItems") + 1;
  226. int lastCustom = _dbContext.GetMaxID("CampaignItemPlaceHolders") + 1;
  227. if (item.Items.Count > 0)
  228. {
  229. foreach (var i in item.Items)
  230. {
  231. i.CampaignId = item.Id;
  232. i.Id = last;
  233. last++;
  234. if (i.CampaignItemPlaceHolder != null)
  235. {
  236. foreach (var c in i.CampaignItemPlaceHolder)
  237. {
  238. c.Id = lastCustom;
  239. lastCustom++;
  240. }
  241. }
  242. }
  243. }
  244. _dbContext.Add(item);
  245. Save();
  246. }
  247. public void Insert(IEnumerable<Campaign> items)
  248. {
  249. foreach (var item in items)
  250. {
  251. _dbContext.Add(item);
  252. }
  253. Save();
  254. }
  255. public int InsertFromDTO(CampaignDTO campaign)
  256. {
  257. var cam = new Campaign
  258. {
  259. Id = NewId(),
  260. Name = campaign.Name,
  261. StartDate = campaign.StartDate,
  262. EndDate = campaign.EndDate,
  263. Subject = campaign.Subject,
  264. Body = campaign.Body,
  265. ItemBody = campaign.ItemBody,
  266. ItemsPerRow = campaign.ItemsPerRow
  267. };
  268. int lastID = _dbContext.GetMaxID("CampaignPlaceHolders") + 1;
  269. if (campaign.PlaceHolders.Count > 0)
  270. {
  271. cam.PlaceHolders = new List<CampaignPlaceHolder>();
  272. foreach (var place in campaign.PlaceHolders)
  273. {
  274. lastID++;
  275. cam.PlaceHolders.Add(new CampaignPlaceHolder()
  276. {
  277. Id = lastID,
  278. CampaignId = cam.Id,
  279. Name = place.Name,
  280. BoundTo = place.BoundTo,
  281. BoundToClass = place.BoundToClass,
  282. BoundToClassDisplay = place.BoundToClassDisplay
  283. });
  284. }
  285. }
  286. if (campaign.Weeks.Count > 0)
  287. {
  288. lastID = _dbContext.GetMaxID("CampaignItems") + 1;
  289. cam.Items = new List<CampaignItem>();
  290. foreach (var week in campaign.Weeks)
  291. {
  292. lastID++;
  293. cam.Items.Add(new CampaignItem()
  294. {
  295. CampaignId = cam.Id,
  296. Id = lastID,
  297. WeekId = week.WeekId,
  298. Image = week.Image
  299. });
  300. }
  301. }
  302. if (campaign.WeekPlaceHolders.Count > 0)
  303. {
  304. lastID = _dbContext.GetMaxID("CampaignItemPlaceHolders") + 1;
  305. foreach (var wph in campaign.WeekPlaceHolders)
  306. {
  307. var week = cam.Items.Where(w => w.WeekId == wph.WeekId).FirstOrDefault();
  308. if (week.CampaignItemPlaceHolder == null)
  309. week.CampaignItemPlaceHolder = new List<CampaignItemPlaceHolder>();
  310. CampaignItemPlaceHolder campaignItemPlaceHolder = new CampaignItemPlaceHolder
  311. {
  312. CampaignItemId = week.Id,
  313. PlaceHolder = wph.Name,
  314. Value = wph.Value
  315. };
  316. week.CampaignItemPlaceHolder.Add(campaignItemPlaceHolder);
  317. }
  318. }
  319. _dbContext.Add(cam);
  320. Save();
  321. return cam.Id;
  322. }
  323. public int NewId()
  324. {
  325. return _dbContext.GetMaxID("Campaigns") + 1;
  326. }
  327. public void Remove(Campaign item)
  328. {
  329. var i = _dbContext.Campaigns.Find(item);
  330. _dbContext.Campaigns.Remove(i);
  331. Save();
  332. }
  333. public void Remove(IEnumerable<Campaign> items)
  334. {
  335. foreach (var item in items)
  336. {
  337. var i = _dbContext.Campaigns.Find(item);
  338. _dbContext.Campaigns.Remove(i);
  339. }
  340. Save();
  341. }
  342. public void RemoveAtId(int item)
  343. {
  344. var i = _dbContext.Campaigns.Where(c => c.Id == item).FirstOrDefault();
  345. if (i != null)
  346. {
  347. _dbContext.Campaigns.Remove(i);
  348. }
  349. Save();
  350. }
  351. public void Save()
  352. {
  353. _dbContext.SaveChanges();
  354. }
  355. public void Update(Campaign item)
  356. {
  357. _dbContext.Entry(item).State = EntityState.Modified;
  358. Save();
  359. }
  360. }
  361. }