Exemplo n.º 1
0
        public string ProcessRequisitions(List <Requisition> requestList)
        {
            if (requestList.Count == 0)
            {
                throw new Exception("List of Requisitions cannot be null");
            }

            // create one Retrieval
            Retrieval r = new Retrieval();

            r.RetrievalId     = IdService.GetNewRetrievalId(context);
            r.CreatedDateTime = DateTime.Now;
            r.Status          = statusRepository.FindById(19);
            if (HttpContext.Current != null)
            {
                r.CreatedBy = userRepository.FindById(HttpContext.Current.User.Identity.GetUserId());
            }

            // save the Retrieval
            retrievalService.Save(r);

            // Map each requisition to each retrieval
            foreach (Requisition req in requestList)
            {
                req.Retrieval = r;
            }

            // create Disbursements, one for each department
            List <Disbursement> emptyDisbursements = CreateDisbursementForEachDepartment(requestList);

            // create DisbursementDetails, one for each item by department
            List <Disbursement> filledDisbursements = AddDisbursementDetailsForEachDisbursement(emptyDisbursements, requestList);

            foreach (Disbursement d in filledDisbursements)
            {
                var newDisbursementDetails = new List <DisbursementDetail>();

                // if disbursement details has plan quantity = 0, ignore
                for (int i = 0; i < d.DisbursementDetails.Count(); i++)
                {
                    if (d.DisbursementDetails[i].PlanQuantity == 0)
                    {
                        // Change Requisition Detail Status to Unable to fulfill when no quantity is disbursed
                        d.Retrieval.Requisitions.SelectMany(requisition => requisition.RequisitionDetails.Where(detail => detail.ItemCode == d.DisbursementDetails[i].ItemCode)).ToList().ForEach(detail =>
                        {
                            detail.Status = statusRepository.FindById(21);
                        });

                        continue;
                    }

                    // Add only DisbursementDetails that have plan quantity
                    newDisbursementDetails.Add(d.DisbursementDetails[i]);
                }

                // Replace DisbursementDetails with filtered list
                d.DisbursementDetails = newDisbursementDetails;

                // if disbursement has no disbursement details, skip to next disbursement
                if (d.DisbursementDetails.Count() == 0)
                {
                    // Change Requisition Status to Unable to fulfill when no items are disbursed
                    d.Retrieval.Requisitions.Where(requisition => requisition.Department.DepartmentCode == d.Department.DepartmentCode).ToList().ForEach(requisition =>
                    {
                        requisition.Status = statusRepository.FindById(21);
                        requisitionRepository.Save(requisition);
                    });
                    continue;
                }


                d.DisbursementId = IdService.GetNewDisbursementId(context);
                d.Retrieval      = r;
                d.Status         = statusRepository.FindById(17);
                if (HttpContext.Current != null)
                {
                    d.CreatedBy = userRepository.FindById(HttpContext.Current.User.Identity.GetUserId());
                }
                disbursementService.Save(d);
            }

            // update the status of the requisitions
            foreach (Requisition req in requestList)
            {
                req.Status = statusRepository.FindById(7);
                requisitionRepository.Save(req);
            }

            return(r.RetrievalId);
        }