public void ConfirmRetrievalList(List <RetrievalListModel> retrievalListModels, string clerkID) { DateTime dateTime = DateTime.Now; Requisition retCheckReq = db.Requisitions.Find(retrievalListModels.First().requisitionID); string originalRet = retCheckReq != null ? retCheckReq.retrievalId : null; Retrieval retrieval = new Retrieval(); if (originalRet == null) { //Create retrieval and edit params accordingly; retrieval.clerkId = clerkID; retrieval.retrievalCreationDate = dateTime; retrieval.retrievalId = "RET-" + clerkID + "-" + dateTime.ToString("yyMMddhhmmssffff"); retrieval.status = "Confirmed"; db.Retrievals.Add(retrieval); } else { //change retrieval status for existing retrieval; RetrievalListModel rlm = retrievalListModels.Where(x => !x.requisitionID.Contains("Special")).FirstOrDefault(); string reqID = rlm == null ? null : rlm.requisitionID; string retID = reqID == null ? null : db.Requisitions.Find(reqID).retrievalId; if (retID != null) { retrieval = db.Retrievals.Find(retID); retrieval.status = "Confirmed"; } } //Find reqs for each line and change status + remarks + assign ID foreach (RetrievalListModel x in retrievalListModels) { Requisition requisition = db.Requisitions.Find(x.requisitionID); //creates retrievalID in req if (requisition.status == "Retrieval Pending") { requisition.retrievalId = retrieval.retrievalId; requisition.status = "Retrieval Confirmed"; requisition.remark = requisition.remark + " , Retrieval confirmed on" + dateTime; } else { requisition.retrievalId = retrieval.retrievalId; requisition.status = "Retrieval Confirmed"; requisition.remark = "Retrieval confirmed on" + dateTime; } foreach (RequisitionDetail y in requisition.RequisitionDetails) { if (y.remark != null) { if (y.remark.Contains("Special")) { //itemID is unique in EACH Requistion, break once found to save iteration time if (y.itemId == x.itemID) { y.retrieveQty = x.allocateQty; //only do something if User amends qty if (x.adjQty != null || x.adjQty == 0) { y.adjustQty = x.adjQty; y.retrieveQty = x.adjQty; y.remark = "Adjusted"; } else { y.adjustQty = null; y.remark = null; } break; } } } else { //itemID is unique in EACH Requistion, break once found to save iteration time if (y.itemId == x.itemID) { y.retrieveQty = x.allocateQty; //only do something if User amends qty if (x.adjQty != null || x.adjQty == 0) { y.adjustQty = x.adjQty; y.retrieveQty = x.adjQty; y.remark = "Adjusted"; } else { y.adjustQty = null; y.remark = null; } break; } } } } db.SaveChanges(); }
// [Retrieval Generation ViewModel Creation Step 2] // The method will create the RetrievalListModel (which creates detail lines of Retrieval List items on the View) public List <RetrievalListModel> RetrievalListModelGeneration(List <Requisition> reqList) { if (!reqList.Any()) { return(null); } List <RetrievalListModel> retrievalListModels = new List <RetrievalListModel>(); foreach (Requisition req in reqList) { //revisits if (req.RequisitionDetails.Count == 0) { foreach (RequisitionDetail prereqdet in db.RequisitionDetails) { if (prereqdet.requisitionId == req.requisitionId) { req.RequisitionDetails.Add(prereqdet); } } } foreach (RequisitionDetail reqdet in req.RequisitionDetails) { RetrievalListModel tempRetModel = new RetrievalListModel(); tempRetModel.requisitionID = req.requisitionId; tempRetModel.approvalDate = (DateTime)req.approvalDate; tempRetModel.department = req.departmentId; if (reqdet.remark != null) { //Specials are treated differently - And must always be fulfilled first if (reqdet.remark == "Special") { tempRetModel.allocateQty = reqdet.requestQty; tempRetModel.reqQty = reqdet.requestQty; tempRetModel.adjQty = reqdet.requestQty; tempRetModel.IsAdjusted = true; tempRetModel.remark = "Special Requisition"; } //Remark will contain "Adjusted" (due to Adjustment made to adjqty) once they are saved else if (reqdet.remark.Contains("Adjusted")) { tempRetModel.allocateQty = (int)reqdet.retrieveQty; tempRetModel.reqQty = reqdet.requestQty; tempRetModel.adjQty = reqdet.adjustQty; tempRetModel.IsAdjusted = true; tempRetModel.remark = "Adjusted"; } else if (reqdet.remark.Contains("Fulfilled")) { tempRetModel.allocateQty = (int)reqdet.retrieveQty; tempRetModel.reqQty = reqdet.requestQty; tempRetModel.adjQty = reqdet.adjustQty; tempRetModel.IsAdjusted = true; tempRetModel.remark = "Final"; } } // By design, remark is null if not the above two status. Disbursed/fulfilled requisitions do not come here else { tempRetModel.IsAdjusted = false; tempRetModel.allocateQty = reqdet.requestQty; tempRetModel.reqQty = reqdet.requestQty; tempRetModel.remark = null; } Inventory tempInv = db.Inventories.Where(x => x.itemId == reqdet.itemId).First(); tempRetModel.stockQty = tempInv.storeQuantity; tempRetModel.itemID = reqdet.itemId; tempRetModel.itemName = db.Catalogues.Where(x => x.itemId == reqdet.itemId).First().description; tempRetModel.itemBin = db.Catalogues.Where(x => x.itemId == reqdet.itemId).First().bin; retrievalListModels.Add(tempRetModel); } } return(retrievalListModels); }