| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 | using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using UnivateProperties_API.Containers.Communication;
using UnivateProperties_API.Containers.Timeshare;
using UnivateProperties_API.Context;
using UnivateProperties_API.Model;
using UnivateProperties_API.Model.Communication;
using UnivateProperties_API.Model.Timeshare;
using UnivateProperties_API.Model.Users;
namespace UnivateProperties_API.Repository.Communication
{
    public class TemplateRepository : IRepository<Template>
    {
        private readonly DataContext _dbContext;
        public TemplateRepository(DataContext dbContext)
        {
            _dbContext = dbContext;
        }
        public List<Template> Get(Func<Template, bool> where)
        {
            return _dbContext.Templates.Where(where).ToList();
        }
        public List<Template> GetAll()
        {
            return _dbContext.Templates.ToList();
        }
        public Template GetDetailed(Func<Template, bool> first)
        {
            var item = _dbContext.Templates.FirstOrDefault(first);
            return item;
        }
        public List<Template> GetDetailedAll()
        {
            var list = GetAll();
            return list;
        }
        public void Insert(Template item)
        {                            
            _dbContext.Add(item);
            Save();
        }
        public void Insert(IEnumerable<Template> items)
        {            
            foreach (var item in items)
            {                
                _dbContext.Add(item);
            }
            Save();
        }
        public void Remove(Template item)
        {
            var i = _dbContext.Templates.Find(item);
            _dbContext.Templates.Remove(i);
            Save();
        }
        public void Remove(IEnumerable<Template> items)
        {
            foreach (var item in items)
            {
                Template i = _dbContext.Templates.Find(item);
                _dbContext.Templates.Remove(i);
            }
            Save();
        }
        public void RemoveAtId(int item)
        {
            var i = _dbContext.Templates.Find(item);
            _dbContext.Templates.Remove(i);
            Save();
        }
        public void Update(Template item)
        {
            var itemList = _dbContext.PlaceHolders.Where(x => x.TemplateId == item.Id).ToList();
            CheckListChange(itemList, item.PlaceHolders.ToList());
            _dbContext.Entry(item).State = EntityState.Modified;
            Save();
        }
        private void CheckListChange(List<PlaceHolder> holderOld, List<PlaceHolder> holderNew)
        {
            foreach (var item in holderOld)
            {
                if (!holderNew.Any(x => x.Id == item.Id))
                {
                    var i = _dbContext.PlaceHolders.FirstOrDefault(x => x.Id == item.Id);
                    if (item != null)
                    {
                        _dbContext.PlaceHolders.Remove(i);
                    }
                }
            }
            foreach (var item in holderNew.Where(x => x.Id == 0))
            {
                _dbContext.Add(item);
            }
        }
        public void Save()
        {
            _dbContext.SaveChanges();
        }        
        public List<TemplateDto> GetSimpleAll()
        {
            List<TemplateDto> list = new List<TemplateDto>();
            foreach (var item in GetAll())
            {
                list.Add(new TemplateDto()
                {
                    Id = item.Id,
                    Name = item.Name,
                    Subject = item.Subject,
                    Body = item.Body,
                    PlaceHolders = GetPlaceHolders(item.Id)
                });
            }
            return list;
        }
        private List<PlaceHolderDto> GetPlaceHolders(int id)
        {
            List<PlaceHolderDto> list = new List<PlaceHolderDto>();
            foreach (var item in _dbContext.PlaceHolders.Where(x => x.TemplateId == id).ToList())
            {
                list.Add(new PlaceHolderDto()
                {
                    Id = item.Id,
                    Name = item.Name,
                    BoundTo = item.BoundTo,
                    BoundToClass = item.BoundToClass,
                    BoundToClassDisplay = item.BoundToClassDisplay
                });
            }
            return list;
        }
        public void SendEmailTemplate(Template template, Person sendTo, List<BaseEntity> args)
        {
            if (template != null)
            {
                if (template.SenderId == null)
                {
                    var acc = _dbContext.Accounts.FirstOrDefault(x => x.Default);
                    if (acc != null)
                    {
                        template.SenderId = acc.Id;
                        template.Sender = acc;
                    }
                }
                else template.Sender = _dbContext.Accounts.FirstOrDefault(x => x.Id == template.SenderId);
                template.PlaceHolders = _dbContext.PlaceHolders.Where(x => x.TemplateId == template.Id).ToList();
                if (sendTo != null)
                {
                    try
                    {
                        /*Email email = new Email(template, sendTo, args);
                        EmailRepository emailRepo = new EmailRepository(_dbContext);
                        
                        emailRepo.Insert(email);*/
                    }
                    catch (Exception)
                    {
                    }
                }
            }
        }
        public void SendEmailTemplateWeek(Template template, Person sendTo, TimeshareWeekDto sellItem)
        {
            if (template != null)
            {
                if (template.SenderId == null)
                {
                    var acc = _dbContext.Accounts.FirstOrDefault(x => x.Default);
                    if (acc != null)
                    {
                        template.SenderId = acc.Id;
                        template.Sender = acc;
                    }
                }
                else template.Sender = _dbContext.Accounts.FirstOrDefault(x => x.Id == template.SenderId);
                template.PlaceHolders = _dbContext.PlaceHolders.Where(x => x.TemplateId == template.Id).ToList();
                if (sendTo != null)
                {
                    try
                    {
                        Email email = new Email(template, sendTo, sellItem, _dbContext);
                        EmailRepository emailRepo = new EmailRepository(_dbContext);
                        emailRepo.Insert(email);
                    }
                    catch (Exception)
                    {
                    }
                }
            }
        }
        public int NewId()
        {
            throw new NotImplementedException();
        }
    }
}
 |