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);
     }
 }
示例#2
0
        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)));
        }