public async Task <IActionResult> Update([FromBody] IOStockViewModel value) { if (ModelState.IsValid) { if (!string.IsNullOrEmpty(value.PurchaseOrderCode)) { //check purchaseOrder var results = this._unitOfWork.PurchaseOrders.GetPurchaseOrderListDetail( ObjectHelper.GetDateMin, ObjectHelper.GetDateNow, value.PurchaseOrderId.ToString(), this._unitOfWork.Branches.GetAllBranchOfUserString(userId), value.ID.HasValue ? value.ID.Value.ToString() : string.Empty, 0, 0 ); var iods = value.IODetails; foreach (var item in results) { var itemExist = iods.FirstOrDefault(p => p.PurchaseOrderDetailId == item.PurchaseOrderDetailId); if (itemExist != null) { if ((item.PurchaseQuantity - item.IOQuantity) >= itemExist.Quantity) { continue; } else { throw new Exception("Đã hết đơn đặt hàng"); } } else { throw new Exception("Not exist purchase order"); } } } var ioId = Guid.NewGuid(); var io = new IOStock { IOStockId = ioId, IONumber = value.Code, SupplierId = value.SupplierId, CreatedBy = userId, CreatedDate = value.CreateDate, UpdatedBy = userId, UpdatedDate = DateTime.Now, IOTypeId = value.IOTypeId, BranchId = ioId, StudentId = value.StudentId, Note = value.Note, PurchaseOrderCode = value.PurchaseOrderCode, PurchaseOrderId = value.PurchaseOrderId }; var ioDetails = value.IODetails.Select(p => new IOStockDetail { IOStockDetailId = p.ID == null ? Guid.NewGuid() : p.ID.Value, IOStockId = ioId, MaterialId = p.MaterialId, MaterialCode = p.MaterialCode, PriceBeforeVAT = p.SellPrice, PriceAfterVAT = p.SellPrice, VAT = 0, InputQuantity = p.Quantity, TotalPrice = p.SellPrice * p.Quantity, TotalPriceBeforeVAT = p.SellPrice * p.Quantity, CreatedBy = userId, CreatedDate = value.CreateDate, UpdatedBy = userId, UpdatedDate = DateTime.Now, PurchaseOrderDetailId = p.PurchaseOrderDetailId, PurchaseOrderId = p.PurchaseOrderId }); io.TotalPrice = ioDetails.Sum(p => p.TotalPrice); io.TotalPriceBeforeVAT = ioDetails.Sum(p => p.TotalPriceBeforeVAT); var ret = await this._unitOfWork.IOStocks.Save(io, ioDetails.ToArray(), value.ID); var bodyHtml = EmailTemplates.GetTestEmail("MINHMH", DateTime.Now); var configStmp = _serviceSmtpConfig.Value; var result = await EmailSender.SendEmailAsync( "MINHMH", "*****@*****.**", "test send", bodyHtml, configStmp ); return(await GetIOStock(ret.IOStockId)); } return(BadRequest(ModelState)); }
private async Task <IOStock> SaveIOStock(IOStockViewModel value) { if (ModelState.IsValid) { if (!string.IsNullOrEmpty(value.PurchaseOrderCode)) { //check purchaseOrder var results = this._unitOfWork.PurchaseOrders.GetPurchaseOrderListDetail( ObjectHelper.GetDateMin, ObjectHelper.GetDateNow, value.PurchaseOrderId.ToString(), this._unitOfWork.Branches.GetAllBranchOfUserString(userId), value.ID.HasValue ? value.ID.Value.ToString() : string.Empty, 0, 0 ); var iods = value.IODetails; foreach (var item in results) { var itemExist = iods.FirstOrDefault(p => p.PurchaseOrderDetailId == item.PurchaseOrderDetailId); if (itemExist != null) { if ((item.PurchaseQuantity - item.IOQuantity) >= itemExist.Quantity) { continue; } else { throw new Exception("Đã hết đơn đặt hàng"); } } else { throw new Exception("Not exist purchase order"); } } } var ioId = Guid.NewGuid(); var io = new IOStock { IOStockId = ioId, IONumber = value.Code, SupplierId = value.SupplierId, CreatedBy = userId, CreatedDate = value.CreateDate, UpdatedBy = userId, UpdatedDate = DateTime.Now, IOTypeId = value.IOTypeId, BranchId = ioId, StudentId = value.StudentId, Note = value.Note, PurchaseOrderCode = value.PurchaseOrderCode, PurchaseOrderId = value.PurchaseOrderId }; var ioDetails = new List <IOStockDetail>(); foreach (var p in value.IODetails) { var ioDetailId = p.ID == null || !value.ID.HasValue ? Guid.NewGuid() : p.ID.Value; var itemNew = new IOStockDetail { IOStockDetailId = ioDetailId, IOStockId = ioId, MaterialId = p.MaterialId, MaterialCode = p.MaterialCode, PriceBeforeVAT = p.SellPrice, PriceAfterVAT = p.SellPrice, VAT = 0, InputQuantity = p.Quantity, DisCountMoney = p.DisCountMoney, TotalPrice = p.SellPrice * p.Quantity - (p.DisCountMoney ?? 0), TotalPriceBeforeVAT = p.SellPrice * p.Quantity - (p.DisCountMoney ?? 0), CreatedBy = userId, CreatedDate = value.CreateDate, UpdatedBy = userId, UpdatedDate = DateTime.Now, PurchaseOrderDetailId = p.PurchaseOrderDetailId, PurchaseOrderId = p.PurchaseOrderId, IOPros = p.Pros.Select(c => new IOStockDetailPro { IOStockDetailId = ioDetailId, IOStockId = ioId, PromotionId = c.PromotionId, PromotionDetailId = c.PromotionDetailId, PercentDiscount = c.PercentDiscount, MoneyDiscount = c.MoneyDiscount, IOStockDetailProId = Guid.NewGuid(), CreatedBy = userId, CreatedDate = value.CreateDate, UpdatedBy = userId, UpdatedDate = DateTime.Now, }).ToArray() }; ioDetails.Add(itemNew); } io.TotalPrice = ioDetails.Sum(p => p.TotalPrice) - ioDetails.Sum(p => p.DisCountMoney); io.TotalPriceBeforeVAT = ioDetails.Sum(p => p.TotalPriceBeforeVAT) - ioDetails.Sum(p => p.DisCountMoney); var ret = await this._unitOfWork.IOStocks.Save(io, ioDetails.ToArray(), value.ID); value.UpdatedByName = ret.UpdatedByName; // send email var bodyHtml = EmailTemplates.SendEmail_IOStock(_serviceSmtpConfig, value); ret.Html = EmailTemplates.GetTempalteEmail(_serviceSmtpConfig, value); return(ret); } return(null); }