public void CreatedDocumentProducts(DocumentDto documentDto, AfTestAppContext context) { foreach (var product in documentDto.Products) { var docProduct = new DocumentProduct(); docProduct.MapFromObjectWithSameNames(product); docProduct.DocumentId = documentDto.DocumentId; context.DocumentProduct.Add(docProduct); } }
public async Task <IActionResult> Edit(DocumentViewModel model, string returnUrl = null) { if (!ModelState.IsValid) { await BindControlsAsync(model); Title = await Uow.DocumentTemplates.Where(t => t.Id == model.TemplateId).Select(t => t.Name).SingleOrDefaultAsync(); ReturnUrl = returnUrl; return(View(model)); } var template = await Uow.DocumentTemplates.Where(t => t.Id == model.TemplateId && !t.IsDeleted).Select(t => new { t.Name }).SingleOrDefaultAsync(); if (template == null) { return(BadRequest()); } var query = Uow.Documents.Where(t => t.Id == model.Id && !t.IsDeleted); if (User.IsInAnyRole()) { query = query.Where(t => t.CreatorId == UserId); } var document = await query.SingleOrDefaultAsync(); if (document == null) { return(NotFound()); } await UpdateEmployeeInfoAsync(document); document.ModifierId = UserId; document.ModifiedDate = DateTime.Now; var templateProductIds = new HashSet <int>(await Uow.DocumentTemplateProducts.Where(t => t.DocumentTemplateId == model.TemplateId && !t.Product.IsDeleted).Select(t => t.ProductId).ToListAsync()); var dbProducts = await Uow.DocumentProducts.Where(t => t.DocumentId == model.Id).ToListAsync(); var checkedProducts = model.Products.Where(t => t.Quantity > 0 && templateProductIds.Contains(t.Id)).ToList(); var checkedIds = new HashSet <int>(checkedProducts.Select(t => t.Id)); var toBeDeletedProducts = dbProducts.Where(t => !checkedIds.Contains(t.ProductId)).ToList(); Uow.DocumentProducts.RemoveRange(toBeDeletedProducts); foreach (var checkedProduct in checkedProducts) { var product = dbProducts.SingleOrDefault(p => p.ProductId == checkedProduct.Id); if (product == null) { product = new DocumentProduct { DocumentId = model.Id.GetValueOrDefault(), ProductId = checkedProduct.Id, Quantity = checkedProduct.Quantity.GetValueOrDefault() }; Uow.DocumentProducts.Add(product); } else { product.Quantity = checkedProduct.Quantity.GetValueOrDefault(); } } await Uow.SaveAsync(); return(!string.IsNullOrEmpty(returnUrl) ? RedirectToLocal(returnUrl) : RedirectToAction(nameof(Index))); }