public void SaveCollectionTimeAndDateToDisbursement(int requisitionId, string collectionPoint, DateTime date, string time) { EFBroker_Disbursement.UpdateRetrievalStatus(requisitionId, "Closed"); List <Disbursement> disbursementList = EFBroker_Disbursement.GetDisbursmentListbyRetrievalID(requisitionId); Random r = new Random(); foreach (Disbursement d in disbursementList) { string depCode = d.Department.DeptCode; if (EFBroker_DeptEmployee.GetCollectionPointbyDeptCode(depCode).CollectionPoint1 == collectionPoint)////////////////The ObjectContext instance has been disposed and can no longer be used for operations that require a connection."} { d.CollectionDate = date; d.CollectionTime = time; int value = r.Next(1000, 9999); d.AccessCode = value.ToString(); d.Status = "Ready"; EFBroker_Disbursement.UpdateDisbursement(d); //Thread,asynctask for email Thread emailThread = new Thread(() => SendEmailToDepartmentRepresentative(depCode, d, collectionPoint)); emailThread.Start(); // } } }
// need to reset ActualQty To Zero before += rsub.ActualQty;, because same item code from different department has same ActualQty now public void SaveActualQtyBreakdownByDepartment(int requisitionId, List <RetrievalShortfallItemSub> retrievalShortfallItemSubListOfList) { List <Disbursement> disbursementList = EFBroker_Disbursement.GetDisbursmentListbyRetrievalID(requisitionId); resetActualQtyToZero(retrievalShortfallItemSubListOfList, disbursementList); foreach (RetrievalShortfallItemSub rsub in retrievalShortfallItemSubListOfList) { foreach (Disbursement d in disbursementList) { if (rsub.DeptCode == d.DeptCode) { foreach (Disbursement_Item di in d.Disbursement_Item) { if (rsub.ItemCode == di.ItemCode) { //find the correct Disbursement_Item to save di.ActualQty += rsub.ActualQty; // di.ActualQty = rsub.ActualQty; EFBroker_Disbursement.UpdateDisbursementItem(di); } } } } } return; }
//populate shortfall data for sub gridview public List <RetrievalShortfallItemSub> DisplayRetrievalShortfallSubGridView(int requisitionId, string shortfallItemCode) { List <RetrievalShortfallItemSub> RetrievalShortfallItemSubGridViewList = new List <RetrievalShortfallItemSub>(); List <Disbursement> disbursementList = EFBroker_Disbursement.GetDisbursmentListbyRetrievalID(requisitionId); int i = 0; foreach (Disbursement d in disbursementList) { foreach (Requisition r in EFBroker_Requisition.GetRequisitionListByDisbursementID(d.DisbursementID)) { //if only one departmentName string departmentName = d.Department.DeptName.ToString(); string departmentCode = d.Department.DeptCode.ToString(); try { int requestedQty = EFBroker_Requisition.FindReqItemsByReqIDItemID(r.RequisitionID, shortfallItemCode).RequestedQty ?? 0; //if RequestedQty is null, assign to 0 //actualQty(0) bind with avialableQty(retrievedQty) RetrievalShortfallItemSub rsfs = new RetrievalShortfallItemSub((DateTime)r.RequestDate, departmentName, departmentCode, requestedQty, 0, shortfallItemCode); RetrievalShortfallItemSubGridViewList.Add(rsfs); i++; } catch (Exception e) { continue; } } } return(RetrievalShortfallItemSubGridViewList); }
//in android //update actual qty for non-shortfall disbursement items when generate disbursement button clicked in RetrievalListDetail page at werehouse public List <RetrievalShortfallItem> UpdateRetrieval(int requisitionId, Dictionary <string, int> retrievedData) { //update retrieval status EFBroker_Disbursement.UpdateRetrievalStatus(requisitionId, "InProgress"); List <Disbursement> disbursementList = EFBroker_Disbursement.GetDisbursmentListbyRetrievalID(requisitionId); foreach (KeyValuePair <string, int> kvp in retrievedData) { string itemCode = kvp.Key; foreach (Disbursement d in disbursementList) { foreach (Disbursement_Item dI in d.Disbursement_Item) { if (dI.ItemCode.Equals(itemCode)) { dI.ActualQty = kvp.Value; EFBroker_Disbursement.UpdateDisbursementItem(dI); } } } } //call CheckShortfall method after button generate disbursement clicked in RetrievalListDetail page at werehouse return(CheckShortfall(requisitionId, retrievedData)); }
//discard invalid disbursement and set requisitioin status to PRORITY if all qty zero public bool CheckInvalidDisbursement(int rId) { List <Disbursement> disbList = EFBroker_Disbursement.GetDisbursmentListbyRetrievalID(rId); Dictionary <Disbursement, bool> chkDisbStatus = new Dictionary <Disbursement, bool>(); bool valid = false; foreach (Disbursement d in disbList) { foreach (Disbursement_Item di in d.Disbursement_Item) { if (di.ActualQty != 0) { valid = true; } } chkDisbStatus.Add(d, valid); } if (!valid) { List <Requisition> reqList = new List <Requisition>(); foreach (Disbursement d in disbList) { Requisition r = EFBroker_Requisition.GetRequisitionByDisbID(d.DisbursementID); r.Status = "Priority"; r.DisbursementID = null; EFBroker_Requisition.UpdateRequisition(r); d.Status = "Invalid"; EFBroker_Disbursement.UpdateDisbursement(d); } } valid = false; foreach (KeyValuePair <Disbursement, bool> kvp in chkDisbStatus) { //if 1 of the disbursement is true => valid is true if (kvp.Value) { valid = true; } } if (!valid) // valid = false; { EFBroker_Disbursement.UpdateRetrievalStatus(rId, "Invalid"); } return(valid); }
//udpate acuatal quantity if no shortfall public void UpdateAllActaulQty(int requisitionId) { List <Disbursement> disbursementList = EFBroker_Disbursement.GetDisbursmentListbyRetrievalID(requisitionId); foreach (Disbursement d in disbursementList) { foreach (Disbursement_Item dI in d.Disbursement_Item) { dI.ActualQty = dI.TotalRequestedQty; EFBroker_Disbursement.UpdateDisbursementItem(dI); } } }
// filter out different Department which has same collect point public List <CollectionPointItem> DisplayCollectionPoint(int requisitionId) { List <Disbursement> disbursementList = EFBroker_Disbursement.GetDisbursmentListbyRetrievalID(requisitionId); List <CollectionPointItem> collectionPointItemList = new List <CollectionPointItem>(); List <int> CollectionLocationIDList = new List <int>(); foreach (Disbursement d in disbursementList) { if (CollectionLocationIDList.Count != 0) { bool add = true; foreach (int cID in CollectionLocationIDList) { if (d.Department.CollectionLocationID == cID) { add = false; } } if (add) { CollectionLocationIDList.Add((int)d.Department.CollectionLocationID); CollectionPointItem c1 = CreateCollectionPointItemList(d); collectionPointItemList.Add(c1); } } else { CollectionLocationIDList.Add((int)d.Department.CollectionLocationID); CollectionPointItem c2 = CreateCollectionPointItemList(d); collectionPointItemList.Add(c2); } } return(collectionPointItemList); }
public List <RetrievalListDetailItem> DisplayRetrievalListDetail(int requisitionId) { List <RetrievalListDetailItem> retrievalListDetailItemDisplayList = new List <RetrievalListDetailItem>(); //get retrievalStatus by requisitionId string retrievalStatus = EFBroker_Disbursement.GetRetrievalStatusByRequisitionId(requisitionId); // dictionary with itemcode + totalrequestedQty Dictionary <string, int> itemcodeAndTotalRequestedQtyDictionary = new Dictionary <string, int>(); HashSet <String> uniqueItemcodeHashSet = new HashSet <string>(); List <Disbursement> disbursementList = EFBroker_Disbursement.GetDisbursmentListbyRetrievalID(requisitionId); // remove repeated itemcode in disbursementList foreach (Disbursement d in disbursementList) { foreach (Disbursement_Item dI in d.Disbursement_Item) { uniqueItemcodeHashSet.Add(dI.ItemCode); } } // accumulate totalRequestedQty if there is same itemCode in Disbursement, then foreach (string i in uniqueItemcodeHashSet) { string itemCode = i; int totalRequestedQty = 0; foreach (Disbursement d in disbursementList) { foreach (Disbursement_Item dI in d.Disbursement_Item) { if (dI.ItemCode == itemCode) { totalRequestedQty += (int)dI.TotalRequestedQty; } } } itemcodeAndTotalRequestedQtyDictionary.Add(itemCode, totalRequestedQty); } //create RetrievalListDetailItem to display in DisplayRetrievalListDetail base on retrievalStatus foreach (KeyValuePair <string, int> kvp in itemcodeAndTotalRequestedQtyDictionary) { int retrievedQty = 0; if (retrievalStatus == "Pending") { //default retrievedQty is same as totalRequestedQty retrievedQty = kvp.Value; } if (retrievalStatus == "InProgress") { //retrievedQty is same as value which inputted in warehouse retrievedQty = EFBroker_Disbursement.GetRetrievedQtyByRequisitionIdNItemCode(requisitionId, kvp.Key); } Item item = EFBroker_Item.GetItembyItemCode(kvp.Key); string bin = item.Bin; string description = item.Description; RetrievalListDetailItem retDetail = new RetrievalListDetailItem(bin, description, kvp.Value, kvp.Key, retrievedQty); retrievalListDetailItemDisplayList.Add(retDetail); } return(retrievalListDetailItemDisplayList); }