public RetrievalFormPayload generateRetrievalFormFromDisbursementDuty(int disDutyId) { List <DisbursementDetail> disbursementDetails = context.DisbursementDetails .Where(d => d.Disbursement.DisbursementDutyID == disDutyId) .ToList(); List <string> itemIds = disbursementDetails .Select(d => d.RequisitionDetail.ItemID) .Distinct() .ToList(); List <Item> items = context.Items.Where(i => itemIds.Contains(i.ItemID)).ToList(); List <RetrievalItemPayload> retrievalItems = new List <RetrievalItemPayload>(); RetrievalItemPayload retrievalItem; foreach (Item item in items) { retrievalItem = new RetrievalItemPayload(); retrievalItem.ItemID = item.ItemID; retrievalItem.QtyToRetrieve = disbursementDetails .Where(d => d.RequisitionDetail.ItemID == item.ItemID) .Sum(d => d.Quantity); retrievalItem.QtyInStock = stockManagementService.getStockCountOfItem(item.ItemID); retrievalItem.ItemName = item.ItemName; retrievalItem.UnitOfMeasure = item.UnitOfMeasure; retrievalItems.Add(retrievalItem); } RetrievalFormPayload retrievalFormPayload = new RetrievalFormPayload(); retrievalFormPayload.disDutyId = disDutyId; retrievalFormPayload.retrievalItemPayloads = retrievalItems; return(retrievalFormPayload); }
public RetrievalFormPayload generateNewRetrievalForm(string empId) { // Get list of items to retrieve List <RequisitionDetail> requisitionDetails = context.RequisitionDetails .Where(rd => rd.Requisition.ApprovalStatusID == 3) // approved requisitions .Where(rd => (rd.Requisition.RetrievalStatusID == 1 || rd.Requisition.RetrievalStatusID == 3)) // incomplete requisitions .ToList(); List <string> itemIds = requisitionDetails.Select(rd => rd.ItemID).Distinct().ToList(); List <Item> itemsToRetrieve = context.Items.Where(i => itemIds.Contains(i.ItemID)).ToList(); List <RetrievalItemPayload> retrievalItems = new List <RetrievalItemPayload>(); foreach (Item item in itemsToRetrieve) { RetrievalItemPayload retrievalItem = new RetrievalItemPayload(); retrievalItem.ItemID = item.ItemID; retrievalItem.QtyInStock = stockManagementService.getStockCountOfItem(item.ItemID); int qtyRequested = requisitionDetails .Where(rd => rd.ItemID == item.ItemID) .Select(rd => rd.Quantity) .Sum(); int qtyCollected = requisitionDetails .Where(rd => rd.ItemID == item.ItemID) .Select(rd => (int)rd.DisbursementDetails.Select(dd => dd.CollectedQty).Sum()) .Sum(); retrievalItem.ItemName = item.ItemName; retrievalItem.UnitOfMeasure = item.UnitOfMeasure; retrievalItem.QtyToRetrieve = qtyRequested - qtyCollected; retrievalItems.Add(retrievalItem); } int disDutyId = 0; if (retrievalItems.Count > 0) { // Change status of requsitions to retrieveing so that they won't be // doubly selected for retrieval List <Requisition> requisitions = context.Requisitions .Where(r => r.ApprovalStatusID == 3) .Where(r => r.RetrievalStatusID == 1 || r.RetrievalStatusID == 3) .ToList(); requisitions.ForEach(r => r.RetrievalStatusID = 2); context.SaveChanges(); // Assign duty to employee disDutyId = addDisbursementDuty(empId); foreach (Requisition req in requisitions) { // Record requisitions into disbursements int disId = addDisbursementFromRequisition(req.RequisitionID, disDutyId); // Record requisition details into disbursement details req.RequisitionDetails.ToList().ForEach(r => addDisbursementDetailFromRequsitionDetail(r.RequisitionDetailsID, disId, r.Quantity)); } } RetrievalFormPayload retrievalFormPayload = new RetrievalFormPayload(); retrievalFormPayload.disDutyId = disDutyId; retrievalFormPayload.retrievalItemPayloads = retrievalItems; return(retrievalFormPayload); }
static void Main(string[] args) { clearTables(); Console.WriteLine("-- Test Retrieval to disbursement process--"); Console.WriteLine("Scenario 1 : Shortage in store, 2 disbursements made to complete the whole requisition"); Console.WriteLine("Part 1: Newly approved requisition"); Requisition req = setupRequisition(10); checkStock(); RetrievalFormPayload retrievalPayload = disbursementService.getRetrievalForm("E015"); List <RetrievalItemPayload> retrievalItems = retrievalPayload.retrievalItemPayloads; Console.WriteLine("1.1 Retrieval item count should be 3 : {0}", retrievalItems.Count()); Console.WriteLine("1.2 Qty to retrieve for each item should be 10"); retrievalItems.ForEach(r => Console.WriteLine(r.ItemID + "\t" + r.QtyToRetrieve + "\t" + r.QtyInStock)); Console.WriteLine(); Console.WriteLine("Part 2: Partially disbursed requisition"); DisbursementDuty disDuty = disbursementService.getDisbursementDutyByStoreClerkEmpId("E015"); Dictionary <string, int> itemsAndQtys = generateItemAndQtys(5); disbursementService.submitRetrievalForm(disDuty.DisbursementDutyID, itemsAndQtys); List <Department> departments = disbursementService.getDepartmentsWithDisbursements(); Console.WriteLine("count of departments with disbursement should be 1 : {0}", departments.Count); //Console.WriteLine("Department should be CHEM : {0}", departments[0].DepartmentID); List <DisbursementDetailPayload> disbursementDetailPayloads = disbursementService.getUncollectedDisbursementDetailsByDep("chem"); disbursementDetailPayloads.ForEach(d => Console.WriteLine(d.ItemName + "\t" + d.DisbursedQuantity + "\t" + d.CollectedQuantity)); disbursementService.submitDisbursementOfDep("CHEM", disbursementDetailPayloads, "E015"); retrievalPayload = disbursementService.getRetrievalForm("E015"); retrievalItems = retrievalPayload.retrievalItemPayloads; Console.WriteLine("2.1 Retrieval item count should be 3 : {0}", retrievalItems.Count()); Console.WriteLine("2.2 Qty to retrieve for each item should be 5, and stock count should decrease by 5"); retrievalItems.ForEach(r => Console.WriteLine(r.ItemID + "\t" + r.QtyToRetrieve + "\t" + r.QtyInStock)); Console.WriteLine(); Console.WriteLine("Part 3: fully disbursed requisition"); disDuty = disbursementService.getDisbursementDutyByStoreClerkEmpId("E015"); disbursementService.submitRetrievalForm(disDuty.DisbursementDutyID, itemsAndQtys); disbursementDetailPayloads = disbursementService.getUncollectedDisbursementDetailsByDep("chem"); disbursementDetailPayloads.ForEach(d => Console.WriteLine(d.ItemName + "\t" + d.DisbursedQuantity + "\t" + d.CollectedQuantity)); disbursementService.submitDisbursementOfDep("CHEM", disbursementDetailPayloads, "E015"); retrievalPayload = disbursementService.getRetrievalForm("E015"); retrievalItems = retrievalPayload.retrievalItemPayloads; Console.WriteLine("3.1 Retrieval item count should be 0 : {0}", retrievalItems.Count()); Console.WriteLine("3.2 Stock count should decrease by 5"); retrievalItems.ForEach(r => Console.WriteLine(r.ItemID + "\t" + r.QtyToRetrieve + "\t" + r.QtyInStock)); checkStock(); Console.WriteLine(); clearTables(); Console.WriteLine("Scenario 2 : Dsbursement partially rejected at collection"); Console.WriteLine("Part 1: Goods retrieved from store"); req = setupRequisition(10); retrievalPayload = disbursementService.getRetrievalForm("E015"); retrievalItems = retrievalPayload.retrievalItemPayloads; Console.WriteLine("1.1 Retrieval item count should be 3 : {0}", retrievalItems.Count()); Console.WriteLine("1.2 Qty to retrieve for each item should be 10"); retrievalItems.ForEach(r => Console.WriteLine(r.ItemID + "\t" + r.QtyToRetrieve + "\t" + r.QtyInStock)); Console.WriteLine(); Console.WriteLine("Part 2: Goods rejected at collection"); disDuty = disbursementService.getDisbursementDutyByStoreClerkEmpId("E015"); disbursementService.submitRetrievalForm(disDuty.DisbursementDutyID, itemsAndQtys); checkStock(); disbursementDetailPayloads = disbursementService.getUncollectedDisbursementDetailsByDep("chem"); disbursementDetailPayloads.ForEach(d => Console.WriteLine(d.ItemName + "\t" + d.DisbursedQuantity + "\t" + d.CollectedQuantity)); disbursementService.submitDisbursementOfDep("CHEM", disbursementDetailPayloads, "E015"); Console.WriteLine("2.1 Retrieval item count should be 3 : {0}", retrievalItems.Count()); Console.WriteLine("2.2 Stock count should increase by 5"); retrievalPayload = disbursementService.getRetrievalForm("E015"); retrievalItems = retrievalPayload.retrievalItemPayloads; retrievalItems.ForEach(r => Console.WriteLine(r.ItemID + "\t" + r.QtyToRetrieve + "\t" + r.QtyInStock)); checkStock(); Console.WriteLine(); clearTables(); Console.WriteLine("Scenario 3 : shortage in store"); Console.WriteLine("Part 1: Goods retrieved from store"); req = setupRequisition(10000); retrievalPayload = disbursementService.getRetrievalForm("E015"); retrievalItems = retrievalPayload.retrievalItemPayloads; Console.WriteLine("1.1 Retrieval item count should be 3 : {0}", retrievalItems.Count()); Console.WriteLine("1.2 Qty to retrieve for each item should be 10000"); retrievalItems.ForEach(r => Console.WriteLine(r.ItemID + "\t" + r.QtyToRetrieve + "\t" + r.QtyInStock)); Console.WriteLine(); Console.WriteLine("Part 2: Goods at collection"); disDuty = disbursementService.getDisbursementDutyByStoreClerkEmpId("E015"); itemsAndQtys["C001"] = stockManagementService.getStockCountOfItem("C001"); itemsAndQtys["C002"] = stockManagementService.getStockCountOfItem("C002"); itemsAndQtys["C003"] = stockManagementService.getStockCountOfItem("C003"); disbursementService.submitRetrievalForm(disDuty.DisbursementDutyID, itemsAndQtys); checkStock(); disbursementDetailPayloads = disbursementService.getUncollectedDisbursementDetailsByDep("chem"); disbursementDetailPayloads.ForEach(d => Console.WriteLine(d.ItemName + "\t" + d.DisbursedQuantity + "\t" + d.CollectedQuantity)); disbursementService.submitDisbursementOfDep("CHEM", disbursementDetailPayloads, "E015"); Console.WriteLine("2.1 Retrieval item count should be 3 : {0}", retrievalItems.Count()); Console.WriteLine("2.2 Stock count should increase by 5"); retrievalPayload = disbursementService.getRetrievalForm("E015"); retrievalItems = retrievalPayload.retrievalItemPayloads; retrievalItems.ForEach(r => Console.WriteLine(r.ItemID + "\t" + r.QtyToRetrieve + "\t" + r.QtyInStock)); checkStock(); Console.WriteLine(); }