public static PurchaseOrderHeader FromDto(PurchaseOrderHeaderDto dto) => new PurchaseOrderHeader(new Code(dto.Code) , new Name(dto.SupplierName) , dto.SupplierId , dto.Rnc , new GeneralText(dto.Address) , dto.DeliverDate , new Name(dto.PaymentTermName) , dto.PaymentTermId , new Name(dto.WarehouseName) , dto.WarehouseId , new GeneralText(dto.Notes) , dto.SubTotal , dto.TaxTotal , dto.DiscountTotal , dto.Total , dto.PurcharseOrderDetail.Map(c => FromDto(c)).ToImmutableList() , dto.Created , dto.Status);
public async Task <ActionResult> EditPurchaseOrder(PurchaseOrderHeaderDto dto) { foreach (var dtoItem in dto.PurchaseOrderDetails) { var check = await _stockService.CheckIfExist(dtoItem.ProductId); var old = await _purchaseOrderDetailsService.GetDetailsAsync(dtoItem.Id); if (old != null) { if (dtoItem.TotalPieces > old.TotalPieces) { var change = dtoItem.TotalPieces - old.TotalPieces; var tAmount = dtoItem.PricePerPiece * change; check.TotalPieces += change; check.Amount += tAmount; await _stockService.UpdateAsync(check); } else if (dtoItem.TotalPieces < old.TotalPieces) { var change = old.TotalPieces - dtoItem.TotalPieces; var tAmount = dtoItem.PricePerPiece * change; check.TotalPieces -= change; check.Amount -= tAmount; await _stockService.UpdateAsync(check); } } else { check.TotalPieces += dtoItem.TotalPieces; check.Amount += dtoItem.Amount; await _stockService.UpdateAsync(check); } } var updated = await _purchaseOderService.UpdateAsync(dto); foreach (var items in dto.PurchaseOrderDetails) { var getCheck = await _purchaseOrderDetailsService.GetAsync(new EntityDto <int>(items.Id)); if (getCheck == null) { var toCreate = new PurchaseOrderDetailDto { PurchaseOrderHeaderId = dto.PurchaseOrderId, ProductId = items.ProductId, Case = items.Case, ProdCase = items.ProdCase, Box = items.Box, ProdPiece = items.ProdPiece, Piece = items.Piece, Gross = items.Gross, Discount = items.Discount, Net = items.Net, TotalProductPrice = items.TotalProductPrice, }; await _purchaseOrderDetailsService.CreateAsync(toCreate); } else if (getCheck != null) { var toUpdate = new PurchaseOrderDetailDto { Id = items.Id, CreationTime = items.CreationTime, CreatorUserId = items.CreatorUserId, TenantId = items.TenantId, PurchaseOrderHeaderId = items.PurchaseOrderHeaderId, ProductId = items.ProductId, Case = items.Case, ProdCase = items.ProdCase, Box = items.Box, ProdPiece = items.ProdPiece, Piece = items.Piece, Gross = items.Gross, Discount = items.Discount, Net = items.Net, TotalProductPrice = items.TotalProductPrice, }; await _purchaseOrderDetailsService.UpdateAsync(toUpdate); } } return(Ok(updated)); }