Exemple #1
0
        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);
        }
Exemple #2
0
        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();
        }