public CampaignEditModel()
 {
     CampaignModel  = new CampaignModel();
     DocumentsList  = new List <DocumentModel>();
     Document       = new DocumentModel();
     AdsCreateModel = new AdvertisementSupplierCreateModel();
 }
        public IActionResult InsertAdvertisement(AdvertisementSupplierCreateModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var Campaignmodel = campaignBLObject.GetById(model.CampaignId);
                    if (Campaignmodel != null)
                    {
                        var advertisementModel = Campaignmodel.Advertisements;


                        var SameChannelSameSupplier = advertisementModel.Where(t => t.ChannelId == model.ChannelId && t.SupplierId == model.SuppplierId);


                        double AllBudgte = advertisementModel.Sum(x => x.Budget);
                        AllBudgte += model.Budget;
                        if (model.Budget > Campaignmodel.Budget)
                        {
                            return(Json(new { success = false, title = "Budget can't be greater than campaign budget" }));
                        }
                        else if (model.StartDateTime < Campaignmodel.StartDateTime || model.EndDateTime > Campaignmodel.EndDateTime)
                        {
                            return(Json(new { success = false, title = "Start and end date must be within campaing date range." }));
                        }
                        else if (AllBudgte > Campaignmodel.Budget)
                        {
                            return(Json(new { success = false, title = "Budget can't be greater than campaign budget" }));
                        }
                        else
                        {
                            foreach (var item in SameChannelSameSupplier)
                            {
                                if (model.StartDateTime <= item.StartDateTime || model.EndDateTime >= item.EndDateTime)
                                {
                                    return(Json(new { success = false, title = "Start and end date should not be within range for same advertisement." }));
                                }
                            }
                        }
                    }



                    model.AddedBy = User.Identity.Name;
                    var response = advObj.Insert(model);
                    return(Json(new { success = true, adv = response.Name }));
                }
                return(Json(new { success = false }));
            }
            catch (Exception)
            {
                return(Json(new { success = false }));
            }
        }
        public IActionResult AddSupplier(long id)
        {
            try
            {
                var suppliers = dropdownObj.GetSuppliersById(id);

                var model = new AdvertisementSupplierCreateModel()
                {
                    SupplierList = suppliers
                };
                return(PartialView("AddSupplier", model));
            }
            catch (Exception)
            {
                throw;
            }
        }
        public AdvertisementSupplierCreateModel Insert(AdvertisementSupplierCreateModel entity)
        {
            using (UnitOfWork.BeginTransasction())
            {
                try
                {
                    var adv = new AdvertisementSupplier();
                    adv.StartDateTime = entity.StartDateTime;
                    adv.EndDateTime   = entity.EndDateTime;
                    adv.Budget        = entity.Budget;
                    adv.Name          = entity.Name;
                    adv.ChannelId     = entity.ChannelId;
                    adv.SupplierId    = entity.SuppplierId;
                    adv.CampaignId    = entity.CampaignId;
                    var obj = _adsRepository.Insert(adv);

                    long nextId  = 0;
                    var  records = _campaignChannelRepository.GetTable().OrderByDescending(t => t.Id);
                    if (records.Count() > 0)
                    {
                        nextId = records.FirstOrDefault().Id + 1;
                    }
                    _campaignChannelRepository.Insert(new CampaignChannel()
                    {
                        ChannelId  = entity.ChannelId,
                        CampaignId = entity.CampaignId,
                        AddedBy    = entity.AddedBy,
                        Id         = nextId
                    });


                    UnitOfWork.Commit();
                    return(entity);
                }
                catch (Exception ex)
                {
                    UnitOfWork.Rollback();
                    return(entity);
                }
            }
        }
        public List <AdvertisementSupplierCreateModel> GetAdvertisementsByCampaignId(long CampaignId)
        {
            var Adds = new List <AdvertisementSupplierCreateModel>();

            try
            {
                var entity = _adsRepository.GetTable().Where(t => t.CampaignId == CampaignId);
                foreach (var add in entity)
                {
                    AdvertisementSupplierCreateModel model = new AdvertisementSupplierCreateModel
                    {
                        Budget        = add.Budget,
                        StartDateTime = add.StartDateTime,
                        EndDateTime   = add.EndDateTime
                    };
                    Adds.Add(model);
                }
                return(Adds);
            }
            catch (Exception ex)
            {
                return(Adds);
            }
        }