コード例 #1
0
        public void updateRequsitionRetrievalStatusBasedOnTotalDisbursed(int disDutyId)
        {
            DisbursementDuty disbursementDuty = getDisbursementDutyById(disDutyId);

            // update retrieval status of each requisition within disbursement duty
            foreach (Disbursement disbursement in disbursementDuty.Disbursements)
            {
                bool fullyRetrieved = true;
                foreach (RequisitionDetail reqDetail in disbursement.Requisition.RequisitionDetails.Where(r => r.Requisition.ApprovalStatusID == 3).ToList())
                {
                    int qtyDisbursed = getTotalCountOfItemDisbursedForReqDetailId(reqDetail.RequisitionDetailsID);
                    if (qtyDisbursed < reqDetail.Quantity)
                    {
                        fullyRetrieved = false;
                        break;
                    }
                }

                int reqId = disbursement.Requisition.RequisitionID;
                if (fullyRetrieved)
                {
                    context.Requisitions.First(r => r.RequisitionID == reqId).RetrievalStatusID = 4;
                }
                else
                {
                    context.Requisitions.First(r => r.RequisitionID == reqId).RetrievalStatusID = 3;
                }
            }
            context.SaveChanges();
        }
コード例 #2
0
        // Create
        public int addDisbursementDuty(string empId)
        {
            DisbursementDuty disbursementDuty = new DisbursementDuty();

            disbursementDuty.DisbursementDate = DateTime.Now;
            disbursementDuty.isRetrieved      = false;
            disbursementDuty.StoreClerkID     = empId;

            context.DisbursementDuties.Add(disbursementDuty);
            context.SaveChanges();

            return(disbursementDuty.DisbursementDutyID);
        }
コード例 #3
0
        // Retrieve
        public RetrievalFormPayload getRetrievalForm(string empId)
        {
            bool outstandingRetrievalForm = context.DisbursementDuties
                                            .Count(d => d.StoreClerkID == empId && d.isRetrieved == false) > 0;

            if (outstandingRetrievalForm)
            {
                DisbursementDuty disDuty = context.DisbursementDuties
                                           .First(d => d.StoreClerkID == empId && d.isRetrieved == false);

                return(generateRetrievalFormFromDisbursementDuty(disDuty.DisbursementDutyID));
            }
            else
            {
                return(generateNewRetrievalForm(empId));
            }
        }
コード例 #4
0
        // Update
        // Store clerk presses submit on the stationery retrieval form screen
        public void submitRetrievalForm(int disDutyId, Dictionary <string, int> itemsAndQtys)
        {
            DisbursementDuty disbursementDuty = getDisbursementDutyById(disDutyId);

            // Allocate the retrieved items into respective Disbursements. Priority is on a first-come-first-serve basis.
            foreach (KeyValuePair <string, int> item in itemsAndQtys)
            {
                int qty = Math.Min(item.Value, stockManagementService.getStockCountOfItem(item.Key));
                stockManagementService.addStockTransaction(item.Key, "Retrieval", disbursementDuty.StoreClerkID, -qty);

                // Get all requisition details served by disbursement duty
                List <Disbursement>      disbursements      = disbursementDuty.Disbursements.ToList();
                List <RequisitionDetail> requisitionDetails = new List <RequisitionDetail>();
                disbursements.ForEach(d => requisitionDetails
                                      .AddRange(d.Requisition.RequisitionDetails.Where(rd => rd.ItemID == item.Key).ToList()));

                allocateRetrievalToDisbursementDetails(requisitionDetails, disbursementDuty, qty);
            }

            // update retrieval status of each requisition within disbursement duty to retrieved
            disbursementDuty.Disbursements.ToList().ForEach(d => d.Requisition.RetrievalStatusID = 4);
            disbursementDuty.isRetrieved = true;
            context.SaveChanges();
        }
コード例 #5
0
        // Allocate retrieved quantities
        public void allocateRetrievalToDisbursementDetails(List <RequisitionDetail> requisitionDetails, DisbursementDuty disDuty, int qty)
        {
            List <int> requisitionDetailsId = requisitionDetails
                                              .Select(rd => rd.RequisitionDetailsID)
                                              .ToList();

            List <DisbursementDetail> disbursementDetails = context.DisbursementDetails
                                                            .Where(d => requisitionDetailsId.Contains(d.RequisitionDetailsID) && d.Disbursement.DisbursementDutyID == disDuty.DisbursementDutyID)
                                                            .OrderBy(d => d.Disbursement.Requisition.RequestedDate)
                                                            .ToList();

            foreach (DisbursementDetail dd in disbursementDetails)
            {
                if (qty > dd.Quantity)
                {
                    qty -= dd.Quantity;
                }
                else if (qty > 0)
                {
                    dd.Quantity = qty;
                }
                else
                {
                    context.DisbursementDetails.Remove(dd);
                }
            }
            context.SaveChanges();
        }
コード例 #6
0
        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();
        }