internal void Commit(DateTime ethiopianDate, BackgroundWorker backgroundWorker = null) { InventoryCommitMemberInstance.Transaction.BeginTransaction(); //TODO: Create the order detail, pass the order id above this inventory object int count = 0; if (backgroundWorker != null) { backgroundWorker.ReportProgress(0, "Detail"); } //Add the System Damaged quantity, System Sound Quantity and System Expired Quantity to generate this. decimal endingSoundBalance, endingDamagedBalance, endExpiredBalance; endingSoundBalance = !IsColumnNull("SystemSoundQuantity") ? SystemSoundQuantity : 0; endingDamagedBalance = !IsColumnNull("SystemDamagedQuantity") ? SystemDamagedQuantity : 0; endExpiredBalance = !IsColumnNull("SystemExpiredQuantity") ? SystemExpiredQuantity : 0; decimal endingTotalBalance = endingSoundBalance + endingDamagedBalance + endExpiredBalance; ItemUnit itemUnit = new ItemUnit(); itemUnit.LoadByPrimaryKey(UnitID); if (IsColumnNull("ReceiveDocID") && IsColumnNull("DamagedReceiveDocID")) // This has been recently added to { if (endingTotalBalance > 0) { OrderDetail.GenerateOrderDetail(UnitID, ActivityID, endingTotalBalance, InventoryCommitMemberInstance.Order.ID, itemUnit.QtyPerUnit, ItemID); //TODO: Get the receive doc details for this inventory object ReceivePallet receivePallet = new ReceivePallet(); receivePallet.LoadForInventory(this); receivePallet.Rewind(); while (!receivePallet.EOF) { //Review: New Code PickListDetail pickListDetail = PickListDetail.GeneratePickListDetail(receivePallet, InventoryCommitMemberInstance .PickList.ID, Convert.ToDecimal( receivePallet.Balance)); //TODO: Create the issueDoc, pass the picklistdetail, orderid and picklist above IssueService issueService = new IssueService(); IssueDoc issueDoc = issueService.CreateIssueFromPicklist(pickListDetail, InventoryCommitMemberInstance.Order, ethiopianDate, InventoryCommitMemberInstance.Issue, InventoryCommitMemberInstance.User); //Link IssueDoc to InventoryTable // Could have put it on the issueService method but it would have decrease the useablity IssueDocInventory issueDocInventory = new IssueDocInventory(); issueDocInventory.AddNew(); issueDocInventory.InventoryID = ID; issueDocInventory.IssueDocID = issueDoc.ID; issueDocInventory.Save(); receivePallet.MoveNext(); count++; if (backgroundWorker != null) { backgroundWorker.ReportProgress( Convert.ToInt32((Convert.ToDecimal(count) / Convert.ToDecimal(receivePallet.RowCount)) * 100), "Detail"); } } } //TODO: Create the receive (use the inventory object itself) ReceiveService receiveService = new ReceiveService(); if (!IsColumnNull("InventorySoundQuantity") && InventorySoundQuantity > 0) { ReceiveDoc receiveDoc = receiveService.CreateInventoryReceive(this, InventoryCommitMemberInstance.Receipt. ID, QuantityType.Sound, ethiopianDate, InventoryCommitMemberInstance.User); ReceiveDocID = receiveDoc.ID; } if (!IsColumnNull("InventoryExpiredQuantity") && InventoryExpiredQuantity > 0) { ReceiveDoc receiveDoc = receiveService.CreateInventoryReceive(this, InventoryCommitMemberInstance.Receipt. ID, QuantityType.Expired, ethiopianDate, InventoryCommitMemberInstance.User); ReceiveDocID = receiveDoc.ID; } if (!IsColumnNull("InventoryDamagedQuantity") && InventoryDamagedQuantity > 0) { ReceiveDoc receiveDoc = receiveService.CreateInventoryReceive(this, InventoryCommitMemberInstance.Receipt. ID, QuantityType.Damaged, ethiopianDate, InventoryCommitMemberInstance.User); DamagedReceiveDocID = receiveDoc.ID; } if (backgroundWorker != null) { backgroundWorker.ReportProgress(100, "Detail"); } } else { if (!IsColumnNull("ReceiveDocID")) { ReceiveDoc receiveDoc = new ReceiveDoc(); receiveDoc.LoadByPrimaryKey(ReceiveDocID); receiveDoc.ChangeQuantity(!IsColumnNull("InventorySoundQuantity") ? InventorySoundQuantity : !IsColumnNull("InventoryExpiredQuantity") ? InventoryExpiredQuantity : 0); } if (!IsColumnNull("DamagedReceiveDocID")) { ReceiveDoc receiveDoc = new ReceiveDoc(); receiveDoc.LoadByPrimaryKey(DamagedReceiveDocID); receiveDoc.ChangeQuantity(InventoryDamagedQuantity); } } IsDraft = false; Save(); InventoryCommitMemberInstance.Transaction.CommitTransaction(); }