public ActionResult EditSave(PromotionUi model) { if (model.Id == 0) { SaveNewPromotion(model); SuccessMessage("Промо акция добавлена и отправлен запрос на её подтверждение"); return(RedirectToAction("Index")); } else { ChangePromotion(model); SuccessMessage("Промо акция изменена и отправлен запрос на её подтверждение"); return(RedirectToAction("Index")); } }
public void Find(producerinterface_Entities db, Context db2, long producerId) { var promoList = db2.Promotions.Where(x => x.ProducerId == producerId).OrderByDescending(x => x.Begin) .ThenByDescending(x => x.Id).ToList(); var suppliers = db.suppliernames.ToDictionary(x => x.SupplierId, x => x.SupplierName); var assortment = db.assortment.Where(x => x.ProducerId == producerId).ToDictionary(x => x.CatalogId, x => x.CatalogName); foreach (var item in promoList) { unchecked { if (item.RegionMask == 0) { item.RegionMask = (long)ulong.MaxValue; } } var supplierIds = item.PromotionsToSupplier.Select(x => x.SupplierId).ToList(); var drugsIds = item.PromotionToDrug.Select(x => x.DrugId).ToList(); var status = item.GetStatus(); if (Status != null && Status != status) { continue; } var itemUi = new PromotionUi() { Id = item.Id, Name = item.Name, Annotation = item.Annotation, Begin = item.Begin.ToString("dd.MM.yyyy"), End = item.End.ToString("dd.MM.yyyy"), PromotionFileId = item.MediaFile?.Id, PromotionFileName = item.MediaFile?.ImageName, AllSuppliers = item.AllSuppliers, ActualStatus = status, DrugList = assortment.Where(x => drugsIds.Contains(x.Key)).Select(x => x.Value).ToList(), RegionList = db.Regions((ulong)item.RegionMask).Select(x => x.Name).ToList(), SuppierRegions = suppliers.Where(x => supplierIds.Contains(x.Key)).Select(x => x.Value).ToList(), RowStyle = item.RowStyle }; Items.Add(itemUi); } }
private JsonResult ToJson(Promotion model) { var viewModel = new PromotionUi(); viewModel.DrugCatalogList = h.GetCatalogList().Select(x => new TextValue { Text = x.Text, Value = x.Value }).ToList(); viewModel.RegionGlobalList = DB.Regions().Select(x => new TextValue(x)).ToList(); viewModel.Id = model.Id; viewModel.Name = model.Name; viewModel.Annotation = model.Annotation; if (model.MediaFile != null) { viewModel.PromotionFileId = model.MediaFile.Id; viewModel.PromotionFileName = model.MediaFile.ImageName; viewModel.PromotionFileUrl = Url.Action("GetFile", "MediaFiles", new { model.MediaFile.Id }); } if (model.Id == 0) { viewModel.Title = "Новая промоакция"; } else { viewModel.Title = "Редактирование промоакции: " + model.Name; } viewModel.PromotionFileId = model.MediaFile?.Id; if (model.Begin < DateTime.Now) { viewModel.Begin = DateTime.Now.ToString("dd.MM.yyyy"); } else { viewModel.Begin = model.Begin.ToString("dd.MM.yyyy"); } if (model.End < DateTime.Now) { viewModel.End = DateTime.Now.ToString("dd.MM.yyyy"); } else { viewModel.End = model.End.ToString("dd.MM.yyyy"); } viewModel.DrugList = model.PromotionToDrug.ToList().Select(x => x.DrugId.ToString()).ToList(); var regions = DB.Regions((ulong)model.RegionMask); viewModel.RegionList = regions.Select(x => x.Id.ToString()).ToList(); if (model.AllSuppliers) { viewModel.SuppierRegions = new List <string>() { "0" } } ; else { viewModel.SuppierRegions = model.PromotionsToSupplier.Select(x => x.SupplierId.ToString()).ToList(); } viewModel.SuppierRegionsList = h.GetSupplierList(regions.Select(x => x.Id).ToList()) .Select(x => new TextValue { Text = x.Text, Value = x.Value }) .ToList(); viewModel.SuppierRegionsList.Add(new TextValue() { Text = "Все поставщики из выбранных регионов", Value = "0" }); return(Json(viewModel, JsonRequestBehavior.AllowGet)); }
private long SaveNewPromotion(PromotionUi model) { var file = SaveFile(model.File); var regionMask = model.RegionList.Select(x => (ulong)Convert.ToInt64(x)).Aggregate((y, z) => y | z); if (file == null) { if (model.PromotionFileId != null) { file = DB2.MediaFiles.Find(model.PromotionFileId.Value); } } var promotion = new Promotion(CurrentUser) { Name = model.Name, Annotation = model.Annotation, Begin = Convert.ToDateTime(model.Begin), End = Convert.ToDateTime(model.End), Author = DB2.Users.Find(CurrentUser.Id), MediaFile = file, RegionMask = (long)regionMask, }; DB2.Promotions.Add(promotion); DB2.SaveChanges(); foreach (var item in model.DrugList) { var promotionToDrug = new PromotionToDrug() { DrugId = Convert.ToInt64(item), PromotionId = promotion.Id }; DB2.PromotionToDrugs.Add(promotionToDrug); } if (model.SuppierRegions.Contains("0")) { model.SuppierRegions = h.GetSupplierList(model.SuppierRegions.ToList().Select(x => (ulong)Convert.ToInt64(x)).ToList()).ToList().Select(x => x.Value).ToList(); promotion.AllSuppliers = true; } else { promotion.AllSuppliers = false; } foreach (var item in model.SuppierRegions) { var X = new PromotionsToSupplier() { PromotionId = promotion.Id, SupplierId = Convert.ToInt64(item) }; DB2.PromotionsToSuppliers.Add(X); } DB2.PromotionHistory.Add(new PromotionSnapshot(CurrentUser, promotion, DB, DB2) { SnapshotName = "Добавление промоакции", }); DB2.SaveChanges(); Mails.PromotionNotification(MailType.CreatePromotion, promotion); return(promotion.Id); }
private long ChangePromotion(PromotionUi model) { var promotion = DB2.Promotions.Find(model.Id); var promotionToDrug = promotion.PromotionToDrug.ToList(); foreach (var item in promotionToDrug) { var drugExsist = model.DrugList.Any(x => Convert.ToInt64(x) == item.DrugId); if (!drugExsist) { DB2.PromotionToDrugs.Remove(item); } } foreach (var item in model.DrugList) { var drugExsist = promotion.PromotionToDrug.Any(x => x.DrugId == Convert.ToInt64(item)); if (!drugExsist) { PromotionToDrug newAddDrug = new PromotionToDrug() { DrugId = Convert.ToInt64(item), PromotionId = promotion.Id }; DB2.PromotionToDrugs.Add(newAddDrug); } } var promoPromotionsToSupplier = promotion.PromotionsToSupplier.ToList(); foreach (var item in promoPromotionsToSupplier) { var supllierExsist = model.SuppierRegions.Any(x => (ulong)Convert.ToInt64(x) == (ulong)item.SupplierId); if (!supllierExsist) { DB2.PromotionsToSuppliers.Remove(item); } } if (model.SuppierRegions.Contains("0")) { model.SuppierRegions = h.GetSupplierList(model.SuppierRegions.ToList().Select(x => (ulong)Convert.ToInt64(x)).ToList()).ToList().Select(x => x.Value).ToList(); promotion.AllSuppliers = true; } else { promotion.AllSuppliers = false; } foreach (var item in model.SuppierRegions) { var supllierExsist = promotion.PromotionsToSupplier.Any(x => (ulong)x.SupplierId == (ulong)Convert.ToInt64(item)); if (!supllierExsist) { var addNew = new PromotionsToSupplier() { SupplierId = Convert.ToInt64(item), PromotionId = promotion.Id }; promotion.PromotionsToSupplier.Add(addNew); } } ulong regionMask = 0; if (model.RegionList.Count() == 1) { regionMask = (ulong)Convert.ToInt64(model.RegionList.First()); } else { regionMask = model.RegionList.Select(x => (ulong)Convert.ToInt64(x)).Aggregate((y, z) => y | z); } promotion.RegionMask = (long)regionMask; promotion.Name = model.Name; promotion.Annotation = model.Annotation; promotion.Begin = Convert.ToDateTime(model.Begin); promotion.End = Convert.ToDateTime(model.End); promotion.Enabled = true; promotion.Status = PromotionStatus.New; promotion.Author = DB2.Users.Find(CurrentUser.Id); var file = SaveFile(model.File); if (file != null) { promotion.MediaFile = file; } else if (model.PromotionFileId != null) { promotion.MediaFile = DB2.MediaFiles.Find(model.PromotionFileId.Value); } DB2.PromotionHistory.Add(new PromotionSnapshot(CurrentUser, promotion, DB, DB2)); DB2.SaveChanges(); Mails.PromotionNotification(MailType.EditPromotion, promotion); return(promotion.Id); }