private async Task <int> AddFulfillmentAsync(DeliveryOrder model, string username) { var internalPOFacade = serviceProvider.GetService <InternalPurchaseOrderFacade>(); int count = 0; foreach (var item in model.Items) { foreach (var detail in item.Details) { var fulfillment = new InternalPurchaseOrderFulFillment() { DeliveryOrderDate = model.ArrivalDate, DeliveryOrderDeliveredQuantity = detail.DOQuantity, DeliveryOrderDetailId = detail.Id, DeliveryOrderId = model.Id, DeliveryOrderItemId = item.Id, DeliveryOrderNo = model.DONo, SupplierDODate = model.DODate, POItemId = detail.POItemId }; count += await internalPOFacade.CreateFulfillmentAsync(fulfillment, username); } } return(count); }
private async Task <int> EditFulfillmentAsync(DeliveryOrder model, string username) { int count = 0; var internalPOFacade = serviceProvider.GetService <InternalPurchaseOrderFacade>(); var dbFulfillments = dbContext.InternalPurchaseOrderFulfillments.AsNoTracking().Where(x => x.DeliveryOrderId == model.Id); var localFulfilments = model.Items.SelectMany(x => x.Details); var addedFulfillments = localFulfilments.Where(x => !dbFulfillments.Any(y => y.DeliveryOrderItemId == x.DOItemId && y.DeliveryOrderDetailId == x.Id && y.POItemId == x.POItemId)); var updatedFulfillments = localFulfilments.Where(x => dbFulfillments.Any(y => y.DeliveryOrderItemId == x.DOItemId && y.DeliveryOrderDetailId == x.Id && y.POItemId == x.POItemId)); var deletedFulfillments = dbFulfillments.Where(x => !localFulfilments.Any(y => y.DOItemId == x.DeliveryOrderItemId && y.Id == x.DeliveryOrderDetailId && y.POItemId == x.POItemId)); foreach (var item in updatedFulfillments) { var dbItem = dbContext.InternalPurchaseOrderFulfillments.AsNoTracking() .FirstOrDefault(x => x.DeliveryOrderId == model.Id && x.DeliveryOrderItemId == item.DOItemId && x.DeliveryOrderDetailId == item.Id && item.POItemId == x.POItemId); dbItem.DeliveryOrderDate = model.ArrivalDate; dbItem.SupplierDODate = model.DODate; dbItem.DeliveryOrderDeliveredQuantity = item.DOQuantity; dbItem.DeliveryOrderNo = model.DONo; dbItem.POItemId = item.POItemId; count += await internalPOFacade.UpdateFulfillmentAsync(dbItem.Id, dbItem, username); } foreach (var item in addedFulfillments) { var fulfillment = new InternalPurchaseOrderFulFillment() { DeliveryOrderDate = model.ArrivalDate, DeliveryOrderDeliveredQuantity = item.DOQuantity, DeliveryOrderDetailId = item.Id, DeliveryOrderId = model.Id, DeliveryOrderItemId = item.DOItemId, DeliveryOrderNo = model.DONo, SupplierDODate = model.DODate, POItemId = item.POItemId }; count += await internalPOFacade.CreateFulfillmentAsync(fulfillment, username); } foreach (var item in deletedFulfillments) { count += internalPOFacade.DeleteFulfillment(item.Id, username); } return(count); }