123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 |
- using Microsoft.AspNetCore.Http;
- using Microsoft.EntityFrameworkCore;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- using UnivateProperties_API.Containers.Campaigns;
- using UnivateProperties_API.Context;
- using UnivateProperties_API.Helpers;
- using UnivateProperties_API.Model.Campaigns;
- using UnivateProperties_API.Model.Properties;
- using UnivateProperties_API.Model.Timeshare;
-
- namespace UnivateProperties_API.Repository.Campaigns
- {
- public interface ICampaignRepository : IRepository<Campaign>
- {
- CampaignDTO GetDTO(Func<Campaign, bool> where);
- int InsertFromDTO(CampaignDTO campaign);
- string GetCampaignHTML(int CampaignId);
- List<CampaignItem> GetCampaignItems(int CampaignId);
- List<CampaignPlaceHolder> GetCampaignPlaceHolders(int CampaignId);
- void addUploadCampaign(UploadCampaign campaignName);
- List<UploadCampaign> GetUploadedCampaigns();
- void RemoveUploadedAtId(int id);
- }
-
- public class CampaignRepository : ICampaignRepository
- {
- private readonly DataContext _dbContext;
-
- public CampaignRepository(DataContext dbContext)
- {
- _dbContext = dbContext;
- }
-
- public List<Campaign> Get(Func<Campaign, bool> where)
- {
- return _dbContext.Campaigns.Where(where).ToList();
- }
-
- public List<Campaign> GetAll()
- {
- return _dbContext.Campaigns.OrderByDescending(c => c.Created).ToList();
- }
-
- public string GetCampaignHTML(int CampaignId)
- {
- var campaign = _dbContext.Campaigns.Where(c => c.Id == CampaignId).Include("PlaceHolders").Include("Items").FirstOrDefault();
- string html = "";
-
- string tableItems = "<table align=center>";
- int rows;
- if (campaign.ItemsPerRow == 0)
- campaign.ItemsPerRow = 1;
- if (campaign.Items.Count % campaign.ItemsPerRow == 0)
- {
- rows = campaign.Items.Count / campaign.ItemsPerRow;
- }
- else
- {
- int remainder = campaign.Items.Count % campaign.ItemsPerRow;
- int evenItems = campaign.Items.Count - remainder;
- rows = evenItems / campaign.ItemsPerRow;
- rows += remainder;
- }
-
- int itemCounter = 0;
- for (int r = 0; r < rows; r++)
- {
- tableItems += "<tr>";
- for(int c = 0; c < campaign.ItemsPerRow; c++)
- {
- itemCounter++;
-
- if (itemCounter > campaign.Items.Count)
- tableItems += "<td></td>";
- else
- tableItems += string.Format("<td>[ITEM{0}]</td>", itemCounter);
-
- }
- tableItems += "</tr>";
- }
-
- tableItems += "</table>";
-
- if(campaign != null)
- {
- var url = _dbContext.Defaults.Where(d => d.Id == "URL").FirstOrDefault();
- html = campaign.Body;
- string temp = campaign.ItemBody;
- TimeshareWeek week = new TimeshareWeek();
- Property property = new Property();
- itemCounter = 0;
- foreach (var item in campaign.Items)
- {
- itemCounter++;
- if (item.WeekId != 0)
- {
- week = _dbContext.Weeks.Where(w => w.Id == item.WeekId).FirstOrDefault();
- }
- else
- {
- property = _dbContext.Properties.Where(p => p.Id == item.PropertyId).FirstOrDefault();
- }
-
- string curItem = temp;
- foreach(var place in campaign.PlaceHolders)
- {
- //var value = property[place.BoundTo];
- var value = week.Id == 0 ? property[place.BoundTo] : week[place.BoundTo];
-
- if (!string.IsNullOrEmpty(place.Format))
- {
- string format = place.Format;
- if (format.Contains("|"))
- {
- string special = format.Substring(format.IndexOf('|'), format.Length - format.IndexOf('|')).Replace("|", "");
- format = format.Substring(0, format.IndexOf('|'));
-
- if (special == "DaySuffix")
- {
- if (DateTime.TryParse(value.ToString(), out DateTime dateValue))
- {
- string suffix = MyCommon.DateSuffixed(dateValue);
- string[] formatParts = format.Split(" ");
- string replaceValue = "";
-
- foreach(var s in formatParts)
- {
- string tempFormat = "{0:" + s + "}";
- replaceValue += string.Format(tempFormat, dateValue);
- if (s.ToLower().Contains("d"))
- replaceValue += "<sup>" + suffix + "</sup> ";
- else
- replaceValue += " ";
- }
-
- curItem = curItem.Replace(place.Name.ToString(), replaceValue.Trim());
- }
- else
- {
- curItem = curItem.Replace(place.Name.ToString(), "ERROR-Date format on non date field");
- }
- }
- }
- else
- curItem = curItem.Replace(place.Name.ToString(), string.Format("{0:" + format + "}", value));
- }
- else
- curItem = curItem.Replace(place.Name.ToString(), value != null ? value.ToString() : place.Name.ToString() + " (NO DATA)");
- }
-
- var cutsomPlaceHolders = _dbContext.CampaignItemPlaceHolders.Where(c => c.CampaignItemId == item.Id).ToList();
- foreach (var custom in cutsomPlaceHolders)
- {
- curItem = curItem.Replace(custom.PlaceHolder, custom.Value);
- }
-
- curItem = curItem.Replace("[image]", item.Image);
- if (item.Week != null)
- {
- curItem = curItem.Replace("[link]", string.Format("{0}resort/{1}/{2}", url?.Value ?? "http://localhost:8080/#/", item.Week.ResortCode, item.Week.UnitNumber));
- }
- else
- {
- if (_dbContext.PropertyTypes.Where(x => x.Id == item.Property.PropertyTypeId).FirstOrDefault().UsageType == PropertyUsageType.Commercial)
- {
- curItem = curItem.Replace("[link]", string.Format("{0}property/commercial/property/{1}", url?.Value ?? "http://localhost:8080/#/", item.Property.Id));
- }
- else
- {
- curItem = curItem.Replace("[link]", string.Format("{0}property/residential/property/{1}", url?.Value ?? "http://localhost:8080/#/", item.Property.Id));
- }
- }
-
-
- tableItems = tableItems.Replace(string.Format("[ITEM{0}]", itemCounter), curItem);
- }
-
- html = html.Replace("[items]", tableItems);
- }
-
- return html;
- }
-
- public List<CampaignItem> GetCampaignItems(int CampaignId)
- {
- return _dbContext.CampaignItems.Where(c => c.CampaignId == CampaignId).ToList();
- }
-
- public List<CampaignPlaceHolder> GetCampaignPlaceHolders(int CampaignId)
- {
- return _dbContext.CampaignPlaceHolders.Where(c => c.CampaignId == CampaignId).ToList();
- }
-
- public Campaign GetDetailed(Func<Campaign, bool> first)
- {
- var item = _dbContext.Campaigns.FirstOrDefault(first);
-
- if (item == null)
- {
- item = new Campaign
- {
- Items = new List<CampaignItem>(),
- PlaceHolders = new List<CampaignPlaceHolder>()
- };
- }
- else
- {
-
- item.Items = (from i in _dbContext.CampaignItems
- where i.CampaignId == item.Id && i.WeekId != 0
- select new CampaignItem() { Id = i.Id, CampaignId = i.CampaignId, Image = i.Image, WeekId = i.WeekId, Week = i.Week, CampaignItemPlaceHolder = new List<CampaignItemPlaceHolder>()}).ToList();
-
- item.Items = (from i in _dbContext.CampaignItems
- where i.CampaignId == item.Id && i.WeekId == 0
- select new CampaignItem() { Id = i.Id, CampaignId = i.CampaignId, Image = i.Image, PropertyId = i.PropertyId, Property = i.Property, CampaignItemPlaceHolder = new List<CampaignItemPlaceHolder>() }).ToList();
-
-
- item.PlaceHolders = (from i in _dbContext.CampaignPlaceHolders
- where i.CampaignId == item.Id
- select new CampaignPlaceHolder(){Id = i.Id, CampaignId = i.CampaignId, Name = i.Name, BoundTo = i.BoundTo, BoundToClass = i.BoundToClass, BoundToClassDisplay = i.BoundToClassDisplay }).ToList();
-
- foreach(var week in item.Items)
- {
- var placeholders = (from p in _dbContext.CampaignItemPlaceHolders
- where p.CampaignItemId == week.Id
- select new CampaignItemPlaceHolder() { Id = p.Id, PlaceHolder = p.PlaceHolder, Value = p.Value, CampaignItemId = p.CampaignItemId }).ToList();
- week.CampaignItemPlaceHolder = placeholders;
- }
-
- }
-
- var sItem = JsonConvert.SerializeObject(item, Formatting.None);
-
- return item;
- }
-
- public List<Campaign> GetDetailedAll()
- {
- return GetAll();
- }
-
- public CampaignDTO GetDTO(Func<Campaign, bool> where)
- {
- var item = _dbContext.Campaigns.Include("Items").Include("PlaceHolders").Where(where).FirstOrDefault();
- var dto = new CampaignDTO
- {
- PlaceHolders = new List<CampaignPlaceholderDTO>(),
- Weeks = new List<CampaignWeeksDTO>(),
- WeekPlaceHolders = new List<CampaignWeeksPlaceHolderDTO>()
- };
-
- if (item != null)
- {
- dto.Name = item.Name;
- dto.StartDate = item.StartDate;
- dto.EndDate = item.EndDate;
- dto.Subject = item.Subject;
- dto.Body = item.Body;
- dto.ItemBody = item.ItemBody;
-
- foreach (var p in item.PlaceHolders)
- {
- dto.PlaceHolders.Add(new CampaignPlaceholderDTO()
- {
- Name = p.Name,
- BoundTo = p.BoundTo,
- BoundToClass = p.BoundToClass,
- BoundToClassDisplay = p.BoundToClassDisplay
- });
- }
-
- foreach (var i in item.Items)
- {
- dto.Weeks.Add(new CampaignWeeksDTO()
- {
- Image = i.Image,
- WeekId = i.WeekId
- });
- }
- }
-
- return dto;
- }
-
- public void Insert(Campaign item)
- {
- if (item.PlaceHolders.Count > 0)
- {
- foreach (var ph in item.PlaceHolders)
- {
- ph.CampaignId = item.Id;
- }
- }
- if (item.Items.Count > 0)
- {
- foreach (var i in item.Items)
- {
- i.CampaignId = item.Id;
- }
- }
-
- _dbContext.Add(item);
- Save();
- }
-
- public void Insert(IEnumerable<Campaign> items)
- {
- foreach (var item in items)
- {
- _dbContext.Add(item);
- }
- Save();
- }
-
- public int InsertFromDTO(CampaignDTO campaign)
- {
- var cam = new Campaign
- {
- Name = campaign.Name,
- StartDate = campaign.StartDate,
- EndDate = campaign.EndDate,
- Subject = campaign.Subject,
- Body = campaign.Body,
- ItemBody = campaign.ItemBody,
- ItemsPerRow = campaign.ItemsPerRow
- };
-
- if (campaign.PlaceHolders.Count > 0)
- {
- cam.PlaceHolders = new List<CampaignPlaceHolder>();
- foreach (var place in campaign.PlaceHolders)
- {
- cam.PlaceHolders.Add(new CampaignPlaceHolder()
- {
- CampaignId = cam.Id,
- Name = place.Name,
- BoundTo = place.BoundTo,
- BoundToClass = place.BoundToClass,
- BoundToClassDisplay = place.BoundToClassDisplay
- });
- }
- }
-
- if (campaign.Weeks.Count > 0)
- {
- cam.Items = new List<CampaignItem>();
- foreach (var week in campaign.Weeks)
- {
- cam.Items.Add(new CampaignItem()
- {
- CampaignId = cam.Id,
- WeekId = week.WeekId,
- Image = week.Image
- });
- }
- }
-
- if (campaign.WeekPlaceHolders.Count > 0)
- {
- foreach (var wph in campaign.WeekPlaceHolders)
- {
- var week = cam.Items.Where(w => w.WeekId == wph.WeekId).FirstOrDefault();
-
- if (week.CampaignItemPlaceHolder == null)
- week.CampaignItemPlaceHolder = new List<CampaignItemPlaceHolder>();
-
- CampaignItemPlaceHolder campaignItemPlaceHolder = new CampaignItemPlaceHolder
- {
- CampaignItemId = week.Id,
- PlaceHolder = wph.Name,
- Value = wph.Value
- };
- week.CampaignItemPlaceHolder.Add(campaignItemPlaceHolder);
- }
- }
-
- _dbContext.Add(cam);
- Save();
- return cam.Id;
- }
-
- public int NewId()
- {
- throw new NotImplementedException();
- }
-
- public void Remove(Campaign item)
- {
- var i = _dbContext.Campaigns.Find(item);
- _dbContext.Campaigns.Remove(i);
- Save();
- }
-
- public void Remove(IEnumerable<Campaign> items)
- {
- foreach (var item in items)
- {
- var i = _dbContext.Campaigns.Find(item);
- _dbContext.Campaigns.Remove(i);
- }
- Save();
- }
-
- public void RemoveAtId(int item)
- {
- var i = _dbContext.Campaigns.Where(c => c.Id == item).FirstOrDefault();
- if (i != null)
- {
- _dbContext.Campaigns.Remove(i);
- }
- Save();
- }
-
- public void Save()
- {
- _dbContext.SaveChanges();
- }
-
- public List<UploadCampaign> GetUploadedCampaigns()
- {
- return _dbContext.CampaignUploads.Where(x => x.IsDeleted == false).ToList();
- }
-
- public void addUploadCampaign(UploadCampaign campaign)
- {
- var camp = _dbContext.CampaignUploads.Where(x => x.FileName == campaign.FileName).FirstOrDefault();
-
- if (camp == null)
- {
- _dbContext.CampaignUploads.Add(campaign);
- Save();
- }
-
- }
-
- public void RemoveUploadedAtId(int id)
- {
- var camp = _dbContext.CampaignUploads.Where(x => x.Id == id).FirstOrDefault();
-
- _dbContext.CampaignUploads.Remove(camp);
- Save();
- }
-
- public void Update(Campaign item)
- {
- //var savedItem = _dbContext.Campaigns.Where(x => x.Id == item.Id).FirstOrDefault();
-
- //if (savedItem != null)
- //{
-
- // if (savedItem.Name != item.Name)
- // {
- // savedItem.Name = item.Name;
- // }
-
- // if (savedItem.StartDate != item.StartDate)
- // {
- // savedItem.StartDate = item.StartDate;
- // }
-
- // if (savedItem.EndDate != item.EndDate)
- // {
- // savedItem.EndDate = item.EndDate;
- // }
-
- // if (savedItem.Subject != item.Subject)
- // {
- // savedItem.Subject = item.Subject;
- // }
-
- // if (savedItem.ItemsPerRow != item.ItemsPerRow)
- // {
- // savedItem.ItemsPerRow = item.ItemsPerRow;
- // }
-
- // if (savedItem.Body != item.Body)
- // {
- // savedItem.Body = item.Body;
- // }
-
- // if (savedItem.ItemBody != item.ItemBody)
- // {
- // savedItem.ItemBody = item.ItemBody;
- // }
-
- // if (_dbContext.CampaignPlaceHolders.Where(x => x.CampaignId == savedItem.Id).ToList().Count > 0)
- // {
- // if (_dbContext.CampaignPlaceHolders.Where(x => x.CampaignId == savedItem.Id).ToList().Count < item.PlaceHolders.Count)
- // {
- // var holders = _dbContext.CampaignPlaceHolders.Where(x => x.CampaignId == item.Id).ToList();
- // foreach (var savedPhItem in holders)
- // {
- // _dbContext.Remove(savedPhItem);
- // }
- // Save();
- // foreach (CampaignPlaceHolder ph in item.PlaceHolders)
- // {
- // ph.CampaignId = item.Id;
- // _dbContext.Add(ph);
- // }
- // Save();
- // }
- // }
- // else
- // {
- // foreach (CampaignPlaceHolder ph in item.PlaceHolders)
- // {
- // ph.CampaignId = item.Id;
- // _dbContext.Add(ph);
- // }
- // Save();
- // }
-
- // if (savedItem.Items != null)
- // {
- // if (savedItem.Items.Count < item.Items.Count)
- // {
- // var savedItems = _dbContext.CampaignItems.Where(x => x.CampaignId == item.Id).ToList();
- // foreach (var savedCamItem in savedItems)
- // {
- // _dbContext.Remove(savedCamItem);
- // }
- // Save();
- // foreach (CampaignItem ci in item.Items)
- // {
- // ci.CampaignId = item.Id;
- // _dbContext.Add(ci);
- // }
- // Save();
- // }
- // }
- // else
- // {
- // foreach (CampaignItem ci in item.Items)
- // {
- // ci.CampaignId = item.Id;
- // _dbContext.Add(ci);
- // }
- // Save();
- // }
-
- //}
- //_dbContext.Update(savedItem);
- _dbContext.Entry(item).State = EntityState.Modified;
- Save();
- }
- }
- }
|