public override async Task <int> DeleteModel(int Id) { int Deleted = 0; using (var Transaction = this.DbContext.Database.BeginTransaction()) { try { //ExternalTransferOrder externalTransferOrder = await this.ReadModelById(Id); TransferDeliveryOrderItemService transferDeliveryOrderItemService = ServiceProvider.GetService <TransferDeliveryOrderItemService>(); transferDeliveryOrderItemService.Username = this.Username; TransferDeliveryOrderDetailService transferDeliveryOrderDetailService = ServiceProvider.GetService <TransferDeliveryOrderDetailService>(); transferDeliveryOrderDetailService.Username = this.Username; HashSet <int> TransferDeliveryOrderItemIds = new HashSet <int>( this.DbContext.TransferDeliveryOrderItems .Where(p => p.DOId.Equals(Id)) .Select(p => p.Id) ); foreach (int itemId in TransferDeliveryOrderItemIds) { HashSet <int> TransferDeliveryOrderDetailIds = new HashSet <int>( this.DbContext.TransferDeliveryOrderDetails .Where(p => p.DOItemId.Equals(itemId)) .Select(p => p.Id) ); foreach (int detailId in TransferDeliveryOrderDetailIds) { await transferDeliveryOrderDetailService.DeleteModel(detailId); TransferDeliveryOrderItem item = this.DbContext.TransferDeliveryOrderItems .Include(d => d.transferDeliveryOrderDetail) .FirstOrDefault(p => p.Id.Equals(itemId)); if (item != null) { foreach (var detail in item.transferDeliveryOrderDetail) { ExternalTransferOrderDetail externalTransferOrderDetail = this.DbContext.ExternalTransferOrderDetails.FirstOrDefault(s => s.Id == detail.ETODetailId); externalTransferOrderDetail.DOQuantity = (externalTransferOrderDetail.DOQuantity) - (detail.DOQuantity); externalTransferOrderDetail.RemainingQuantity = (externalTransferOrderDetail.RemainingQuantity) + (detail.DOQuantity); externalTransferOrderDetail._LastModifiedUtc = DateTime.UtcNow; externalTransferOrderDetail._LastModifiedAgent = "Service"; externalTransferOrderDetail._LastModifiedBy = this.Username; if (externalTransferOrderDetail.DealQuantity == detail.RemainingQuantity) { TransferRequestDetail transRequestDetail = this.DbContext.TransferRequestDetails.FirstOrDefault(s => s.Id == detail.TRDetailId); transRequestDetail.Status = "Sudah diorder ke Penjualan"; transRequestDetail._LastModifiedUtc = DateTime.UtcNow; transRequestDetail._LastModifiedAgent = "Service"; transRequestDetail._LastModifiedBy = this.Username; InternalTransferOrderDetail internTransferOrderDetail = this.DbContext.InternalTransferOrderDetails.FirstOrDefault(s => s.Id == detail.ITODetailId); transRequestDetail.Status = "Sudah diorder ke Penjualan"; transRequestDetail._LastModifiedUtc = DateTime.UtcNow; transRequestDetail._LastModifiedAgent = "Service"; transRequestDetail._LastModifiedBy = this.Username; } else if (externalTransferOrderDetail.RemainingQuantity <= 0) { TransferRequestDetail transRequestDetail = this.DbContext.TransferRequestDetails.FirstOrDefault(s => s.Id == detail.TRDetailId); transRequestDetail.Status = "Sudah diorder semua ke Unit Pengirim"; transRequestDetail._LastModifiedUtc = DateTime.UtcNow; transRequestDetail._LastModifiedAgent = "Service"; transRequestDetail._LastModifiedBy = this.Username; InternalTransferOrderDetail internTransferOrderDetail = this.DbContext.InternalTransferOrderDetails.FirstOrDefault(s => s.Id == detail.ITODetailId); transRequestDetail.Status = "Sudah diorder semua ke Unit Pengirim"; transRequestDetail._LastModifiedUtc = DateTime.UtcNow; transRequestDetail._LastModifiedAgent = "Service"; transRequestDetail._LastModifiedBy = this.Username; } else if (externalTransferOrderDetail.RemainingQuantity > 0) { TransferRequestDetail transRequestDetail = this.DbContext.TransferRequestDetails.FirstOrDefault(s => s.Id == detail.TRDetailId); transRequestDetail.Status = "Sudah diorder sebagian ke Unit Pengirim"; transRequestDetail._LastModifiedUtc = DateTime.UtcNow; transRequestDetail._LastModifiedAgent = "Service"; transRequestDetail._LastModifiedBy = this.Username; InternalTransferOrderDetail internTransferOrderDetail = this.DbContext.InternalTransferOrderDetails.FirstOrDefault(s => s.Id == detail.ITODetailId); transRequestDetail.Status = "Sudah diorder sebagian ke Unit Pengirim"; transRequestDetail._LastModifiedUtc = DateTime.UtcNow; transRequestDetail._LastModifiedAgent = "Service"; transRequestDetail._LastModifiedBy = this.Username; } } } } await transferDeliveryOrderItemService.DeleteModel(itemId); } Deleted = await this.DeleteAsync(Id); this.DbContext.SaveChanges(); Transaction.Commit(); } catch (Exception) { Transaction.Rollback(); } } return(Deleted); }
public TransferDeliveryOrder MapToModel(TransferDeliveryOrderViewModel viewModel) { TransferDeliveryOrder model = new TransferDeliveryOrder(); PropertyCopier <TransferDeliveryOrderViewModel, TransferDeliveryOrder> .Copy(viewModel, model); model.DONo = viewModel.DONo; model.DOdate = (DateTime)viewModel.DODate; model.SupplierId = viewModel.Supplier._id ?? ""; model.SupplierCode = viewModel.Supplier.code; model.SupplierName = viewModel.Supplier.name; model.OrderDivisionId = viewModel.Division._id; model.OrderDivisionCode = viewModel.Division.code; model.OrderDivisionName = viewModel.Division.name; model.Remark = viewModel.Remark; model.IsPosted = viewModel.IsPosted; model.TransferDeliveryOrderItem = new List <TransferDeliveryOrderItem>(); foreach (TransferDeliveryOrderItemViewModel transferDeliveryOrderItemViewModel in viewModel.items) { TransferDeliveryOrderItem transferDeliveryOrderItem = new TransferDeliveryOrderItem(); PropertyCopier <TransferDeliveryOrderItemViewModel, TransferDeliveryOrderItem> .Copy(transferDeliveryOrderItemViewModel, transferDeliveryOrderItem); transferDeliveryOrderItem.DOId = transferDeliveryOrderItemViewModel.DOId; transferDeliveryOrderItem.ETOId = transferDeliveryOrderItemViewModel.ETOId; transferDeliveryOrderItem.ETONo = transferDeliveryOrderItemViewModel.ETONo; transferDeliveryOrderItem.ITOId = transferDeliveryOrderItemViewModel.ITOId; transferDeliveryOrderItem.ITONo = transferDeliveryOrderItemViewModel.ITONo; transferDeliveryOrderItem.transferDeliveryOrderDetail = new List <TransferDeliveryOrderDetail>(); foreach (TransferDeliveryOrderDetailViewModel transferDeliveryOrderDetailViewModel in transferDeliveryOrderItemViewModel.details) { TransferDeliveryOrderDetail transferDeliveryOrderDetail = new TransferDeliveryOrderDetail(); PropertyCopier <TransferDeliveryOrderDetailViewModel, TransferDeliveryOrderDetail> .Copy(transferDeliveryOrderDetailViewModel, transferDeliveryOrderDetail); transferDeliveryOrderDetail.DOItemId = transferDeliveryOrderDetailViewModel.DOItemId; transferDeliveryOrderDetail.ETODetailId = transferDeliveryOrderDetailViewModel.ETODetailId; transferDeliveryOrderDetail.ITODetailId = transferDeliveryOrderDetailViewModel.ITODetailId; transferDeliveryOrderDetail.TRDetailId = transferDeliveryOrderDetailViewModel.TRDetailId; transferDeliveryOrderDetail.TRId = transferDeliveryOrderDetailViewModel.TRId; transferDeliveryOrderDetail.TRNo = transferDeliveryOrderDetailViewModel.TRNo; transferDeliveryOrderDetail.UnitId = transferDeliveryOrderDetailViewModel.UnitId; transferDeliveryOrderDetail.UnitCode = transferDeliveryOrderDetailViewModel.UnitCode; transferDeliveryOrderDetail.UnitName = transferDeliveryOrderDetailViewModel.UnitName; transferDeliveryOrderDetail.ProductId = transferDeliveryOrderDetailViewModel.ProductId; transferDeliveryOrderDetail.ProductCode = transferDeliveryOrderDetailViewModel.ProductCode; transferDeliveryOrderDetail.ProductName = transferDeliveryOrderDetailViewModel.ProductName; transferDeliveryOrderDetail.Grade = transferDeliveryOrderDetailViewModel.Grade; transferDeliveryOrderDetail.ProductRemark = transferDeliveryOrderDetailViewModel.ProductRemark; transferDeliveryOrderDetail.RequestedQuantity = transferDeliveryOrderDetailViewModel.RequestedQuantity; transferDeliveryOrderDetail.UomId = transferDeliveryOrderDetailViewModel.UomId; transferDeliveryOrderDetail.UomUnit = transferDeliveryOrderDetailViewModel.UomUnit; transferDeliveryOrderDetail.DOQuantity = transferDeliveryOrderDetailViewModel.DOQuantity; transferDeliveryOrderDetail.ShippingOrderQuantity = transferDeliveryOrderDetailViewModel.ShippingOrderQuantity; transferDeliveryOrderDetail.RemainingQuantity = transferDeliveryOrderDetailViewModel.RemainingQuantity; transferDeliveryOrderItem.transferDeliveryOrderDetail.Add(transferDeliveryOrderDetail); } model.TransferDeliveryOrderItem.Add(transferDeliveryOrderItem); } return(model); }