Example #1
0
        public RedirectToRouteResult AdjustItem(StockRetrievalDetail item1, Item item2)
        {
            string itemCode;

            using (SSISdbEntities m = new SSISdbEntities())
            {
                m.Configuration.ProxyCreationEnabled = false;

                itemCode = m.Items.Where(x => x.Description == item2.Description).FirstOrDefault().ItemCode;
                int qtyOnHand            = m.Items.Where(x => x.ItemCode == itemCode).Select(x => x.Quantity).FirstOrDefault();
                StockRetrievalDetail srd = m.StockRetrievalDetails.Where(x => x.ItemCode == itemCode && x.Id == item1.Id).FirstOrDefault();

                int qtyAdjusted = item1.QuantityAdjusted;

                if (qtyOnHand < qtyAdjusted)
                {
                    TempData["ErrorMsg"] = "Quantity adjusted cannot be more than quantity on hand. Please check the value.";
                }
                else
                {
                    srd.QuantityAdjusted  = srd.QuantityAdjusted + qtyAdjusted;
                    srd.QuantityRetrieved = srd.QuantityRetrieved - qtyAdjusted;

                    srd.Remarks = item1.Remarks;

                    m.SaveChanges();
                }
            }

            return(RedirectToAction("Disbursements", "Store"));
        }
Example #2
0
        public RedirectToRouteResult UpdateItemCollection(int bin, string collectionPointDescription)
        {
            try
            {
                string retId = (String)Session["RetrievalId"];

                using (SSISdbEntities m = new SSISdbEntities())
                {
                    m.Configuration.ProxyCreationEnabled = false;

                    string collectionPointId = m.CollectionPoints.Where(x => x.CollectionPointDescription == collectionPointDescription).Select(x => x.CollectionPointID).FirstOrDefault();

                    StockRetrievalDetail stockRetrievalDetail = m.StockRetrievalDetails.Where(x => x.Id == retId && x.Bin == bin && x.CollectionPointID == collectionPointId).FirstOrDefault();

                    if (stockRetrievalDetail.Collected == 0)
                    {
                        stockRetrievalDetail.Collected = 1;
                    }
                    else
                    {
                        stockRetrievalDetail.Collected = 0;
                    }

                    m.SaveChanges();
                }
            }
            catch (FormatException fe)
            {
                Debug.WriteLine(fe.Message);
            }catch (Exception e)
            {
                Debug.WriteLine(e.Message);
            }

            return(RedirectToAction("Disbursements", "Store"));
        }
        public Task Execute(IJobExecutionContext context)
        {
            using (SSISdbEntities m = new SSISdbEntities())
            {
                #region Variables
                // List of StaffReq with Open & Approved
                List <StaffRequisitionHeader> staffReqHeadList = m.StaffRequisitionHeaders
                                                                 .Where(x => x.Status == "Open" && x.ApprovalStatus == "Approved").ToList();
                // List of StaffReq with Outstanding
                List <StaffRequisitionHeader> srhWithBO = m.StaffRequisitionHeaders.Where(x => x.Status == "Outstanding").ToList();

                Dictionary <Item, int>            itemAndQty             = new Dictionary <Item, int>();
                List <StaffRequisitionDetail>     srdList                = new List <StaffRequisitionDetail>();
                List <StaffRequisitionDetail>     srdWithBackOrders      = new List <StaffRequisitionDetail>();
                Dictionary <Item, List <string> > listOfItemsAndColAdded = new Dictionary <Item, List <string> >();
                List <string> colpt = new List <string>();
                List <StaffRequisitionDetail> allsrd = new List <StaffRequisitionDetail>();
                #endregion

                #region Prepare new StaffRequisitionDetails to add
                // Search for all Outstanding StaffReqDetails
                foreach (StaffRequisitionHeader srhBO in srhWithBO)
                {
                    List <StaffRequisitionDetail> SRD = m.StaffRequisitionDetails
                                                        .Where(x => x.FormID == srhBO.FormID && x.QuantityBackOrdered > 0).ToList();
                    if (SRD != null)
                    {
                        foreach (StaffRequisitionDetail sr in SRD)
                        {
                            srdWithBackOrders.Add(sr);
                        }
                    }
                }

                // Search for all Open && Approved StaffReqDetails
                foreach (StaffRequisitionHeader srhInWeek in staffReqHeadList)
                {
                    srhInWeek.Status = "Outstanding";
                    m.SaveChanges();

                    // Find List of StaffReqDetails based on Header ID
                    List <StaffRequisitionDetail> SRD = m.StaffRequisitionDetails
                                                        .Where(x => x.FormID == srhInWeek.FormID).ToList();
                    if (SRD != null)
                    {
                        foreach (StaffRequisitionDetail sr in SRD)
                        {
                            srdList.Add(sr);
                        }
                    }
                }
                #endregion

                // Check if there's any entries to collate
                if (srdList.Count() > 0 || srdWithBackOrders.Count() > 0)
                {
                    #region Create StockRetrievalHeader
                    // Create StockRetrievalHeader
                    StockRetrievalHeader newsrh = new StockRetrievalHeader();
                    int    newSRH = m.StockRetrievalHeaders.Count() + 1;
                    string srhId  = CommonLogic.SerialNo(newSRH, "StoR");
                    newsrh.ID                = srhId;
                    newsrh.Date              = DateTime.Now;
                    newsrh.Disbursed         = 0;
                    newsrh.AllItemsRetrieved = 0;
                    m.StockRetrievalHeaders.Add(newsrh);
                    //m.SaveChanges();
                    #endregion

                    #region Confirming how many Items & quantity to collate
                    // Collate items based on Backorder SRDs (Total up items and its quantity to collect)
                    if (srdWithBackOrders.Count() > 0)
                    {
                        foreach (StaffRequisitionDetail srdlist in srdWithBackOrders)
                        {
                            Item item = m.Items.Where(x => x.ItemCode == srdlist.ItemCode).FirstOrDefault();
                            if (!itemAndQty.ContainsKey(item))
                            {
                                itemAndQty.Add(item, srdlist.QuantityBackOrdered);
                            }
                            else
                            {
                                itemAndQty[item] += srdlist.QuantityBackOrdered;
                            }
                        }
                    }

                    // Collate items based on new SRD (Total up items and its quantity to collect)
                    if (srdList.Count() > 0)
                    {
                        foreach (StaffRequisitionDetail srdlist in srdList)
                        {
                            Item item = m.Items.Where(x => x.ItemCode == srdlist.ItemCode).FirstOrDefault();
                            if (!itemAndQty.ContainsKey(item))
                            {
                                itemAndQty.Add(item, srdlist.QuantityOrdered);
                            }
                            else
                            {
                                itemAndQty[item] += srdlist.QuantityOrdered;
                            }
                        }
                    }

                    // Check if quantity is sufficient (If insufficient, can only collect based on Quantity on Hand)
                    foreach (Item itemToCollate in itemAndQty.Keys.ToList())
                    {
                        if (itemToCollate.Quantity < itemAndQty[itemToCollate])
                        {
                            itemAndQty[itemToCollate] = itemToCollate.Quantity;
                        }
                    }
                    #endregion

                    #region Fulfill Backorders
                    // Fulfill all backorders first
                    if (srdWithBackOrders.Count() > 0)
                    {
                        foreach (StaffRequisitionDetail retrievalListWithBO in srdWithBackOrders)
                        {
                            Item itemRetrieved = m.Items.Where(x => x.ItemCode == retrievalListWithBO.ItemCode).FirstOrDefault();
                            Bin  bin           = m.Bins.Where(x => x.ItemCode == retrievalListWithBO.ItemCode).FirstOrDefault();
                            StaffRequisitionHeader srhDeptCode = m.StaffRequisitionHeaders.Where(x => x.FormID == retrievalListWithBO.FormID).FirstOrDefault();
                            DepartmentDetail       dd          = m.DepartmentDetails.Where(x => x.DepartmentCode == srhDeptCode.DepartmentCode).FirstOrDefault();
                            StockRetrievalDetail   newsrd      = new StockRetrievalDetail();
                            int qtyAvailable = itemAndQty[itemRetrieved];

                            // Only create entries with qty available
                            if (qtyAvailable > 0)
                            {
                                // Create quantity requested that is really available for that item
                                int qtyToAdd = 0;
                                if (qtyAvailable > retrievalListWithBO.QuantityBackOrdered)
                                {
                                    qtyToAdd = retrievalListWithBO.QuantityBackOrdered;
                                }
                                else
                                {
                                    qtyToAdd = qtyAvailable;
                                }

                                if (listOfItemsAndColAdded.ContainsKey(itemRetrieved))
                                {
                                    if (!listOfItemsAndColAdded[itemRetrieved].Contains(dd.CollectionPointID))
                                    {
                                        // If its an entirely new Item for the collection point of the SRD, create a new entry
                                        newsrd.Id                = srhId;
                                        newsrd.Bin               = bin.Number;
                                        newsrd.ItemCode          = retrievalListWithBO.ItemCode;
                                        newsrd.QuantityRetrieved = qtyToAdd;
                                        newsrd.CollectionPointID = dd.CollectionPointID;
                                        newsrd.QuantityAdjusted  = 0;
                                        newsrd.Remarks           = "";
                                        newsrd.Collected         = 0;
                                        m.StockRetrievalDetails.Add(newsrd);
                                        allsrd.Add(retrievalListWithBO);

                                        // Prepare list for iteration of repeated entries (Indicate that there's exisiting record of Item & Collection point)
                                        List <string> existingColpt = listOfItemsAndColAdded[itemRetrieved];
                                        existingColpt.Add(dd.CollectionPointID);
                                        listOfItemsAndColAdded[itemRetrieved] = existingColpt;
                                    }
                                    else
                                    {
                                        // If there's existing entry (Based on previous collection point / back orders created), add to entry
                                        StockRetrievalDetail existingSRD = m.StockRetrievalDetails
                                                                           .Where(x => x.Id == srhId && x.ItemCode == itemRetrieved.ItemCode &&
                                                                                  x.CollectionPointID == dd.CollectionPointID).FirstOrDefault();
                                        existingSRD.QuantityRetrieved += qtyToAdd;
                                        allsrd.Add(retrievalListWithBO);
                                    }
                                }
                                else
                                {
                                    // If its an entirely new Item for the collection point of the SRD, create a new entry
                                    newsrd.Id                = srhId;
                                    newsrd.Bin               = bin.Number;
                                    newsrd.ItemCode          = retrievalListWithBO.ItemCode;
                                    newsrd.QuantityRetrieved = qtyToAdd;
                                    newsrd.CollectionPointID = dd.CollectionPointID;
                                    newsrd.QuantityAdjusted  = 0;
                                    newsrd.Remarks           = "";
                                    newsrd.Collected         = 0;
                                    m.StockRetrievalDetails.Add(newsrd);
                                    allsrd.Add(retrievalListWithBO);
                                    colpt = new List <string>();
                                    colpt.Add(dd.CollectionPointID);
                                    listOfItemsAndColAdded.Add(itemRetrieved, colpt);
                                }

                                //Remove quantity added from dictionary
                                itemAndQty[itemRetrieved] -= qtyToAdd;
                                m.SaveChanges();
                            }
                        }
                    }
                    #endregion

                    #region Fulfill new entries
                    // Create StockRetrievalDetails
                    if (srdList.Count() > 0)
                    {
                        foreach (StaffRequisitionDetail retrievalList in srdList)
                        {
                            Item itemRetrieved = m.Items.Where(x => x.ItemCode == retrievalList.ItemCode).FirstOrDefault();
                            Bin  bin           = m.Bins.Where(x => x.ItemCode == retrievalList.ItemCode).FirstOrDefault();
                            StaffRequisitionHeader srhDeptCode = m.StaffRequisitionHeaders
                                                                 .Where(x => x.FormID == retrievalList.FormID).FirstOrDefault();
                            DepartmentDetail dd = m.DepartmentDetails
                                                  .Where(x => x.DepartmentCode == srhDeptCode.DepartmentCode).FirstOrDefault();
                            StockRetrievalDetail newsrd = new StockRetrievalDetail();
                            int qtyAvailable            = itemAndQty[itemRetrieved];

                            // Only create entries with qty available
                            if (qtyAvailable > 0)
                            {
                                // Create quantity requested that is really available for that item
                                int qtyToAdd = 0;
                                if (qtyAvailable > retrievalList.QuantityOrdered)
                                {
                                    qtyToAdd = retrievalList.QuantityOrdered;
                                }
                                else
                                {
                                    qtyToAdd = qtyAvailable;
                                }

                                if (listOfItemsAndColAdded.ContainsKey(itemRetrieved))
                                {
                                    if (!listOfItemsAndColAdded[itemRetrieved].Contains(dd.CollectionPointID))
                                    {
                                        // If its an entirely new Item for the collection point of the SRD, create a new entry
                                        newsrd.Id                = srhId;
                                        newsrd.Bin               = bin.Number;
                                        newsrd.ItemCode          = retrievalList.ItemCode;
                                        newsrd.QuantityRetrieved = qtyToAdd;
                                        newsrd.CollectionPointID = dd.CollectionPointID;
                                        newsrd.QuantityAdjusted  = 0;
                                        newsrd.Remarks           = "";
                                        newsrd.Collected         = 0;
                                        m.StockRetrievalDetails.Add(newsrd);
                                        allsrd.Add(retrievalList);

                                        // Prepare list for iteration of repeated entries (Indicate that there's exisiting record of Item & Collection point)
                                        List <string> existingColpt = listOfItemsAndColAdded[itemRetrieved];
                                        existingColpt.Add(dd.CollectionPointID);
                                        listOfItemsAndColAdded[itemRetrieved] = existingColpt;
                                    }
                                    else
                                    {
                                        // If there's existing entry (Based on previous collection point / back orders created), add to entry
                                        StockRetrievalDetail existingSRD = m.StockRetrievalDetails
                                                                           .Where(x => x.Id == srhId && x.ItemCode == itemRetrieved.ItemCode &&
                                                                                  x.CollectionPointID == dd.CollectionPointID).FirstOrDefault();
                                        existingSRD.QuantityRetrieved += qtyToAdd;
                                        allsrd.Add(retrievalList);
                                    }
                                }
                                else
                                {
                                    // If its an entirely new Item for the collection point of the SRD, create a new entry
                                    newsrd.Id                = srhId;
                                    newsrd.Bin               = bin.Number;
                                    newsrd.ItemCode          = retrievalList.ItemCode;
                                    newsrd.QuantityRetrieved = qtyToAdd;
                                    newsrd.CollectionPointID = dd.CollectionPointID;
                                    newsrd.QuantityAdjusted  = 0;
                                    newsrd.Remarks           = "";
                                    newsrd.Collected         = 0;
                                    m.StockRetrievalDetails.Add(newsrd);
                                    allsrd.Add(retrievalList);

                                    colpt = new List <string>();
                                    colpt.Add(dd.CollectionPointID);
                                    listOfItemsAndColAdded.Add(itemRetrieved, colpt);
                                }

                                // Remove qty that is added
                                itemAndQty[itemRetrieved] -= qtyToAdd;
                                m.SaveChanges();
                            }
                        }
                    }
                    #endregion

                    #region Create StockRetrievalReqForm
                    List <String> allNewlyCreatedReqFormId = new List <String>();

                    foreach (StaffRequisitionDetail allNewlyCreated in allsrd)
                    {
                        allNewlyCreatedReqFormId.Add(allNewlyCreated.FormID);
                    }

                    //To remove duplicate req form id
                    allNewlyCreatedReqFormId = allNewlyCreatedReqFormId.Distinct().ToList();

                    foreach (String newReqFormId in allNewlyCreatedReqFormId)
                    {
                        // New StockRetrievalReqForm
                        StockRetrievalReqForm srrf = new StockRetrievalReqForm();
                        //srrf.ReqFormID = allNewlyCreated.FormID;
                        srrf.ReqFormID        = newReqFormId;
                        srrf.StockRetrievalID = srhId;
                        m.StockRetrievalReqForms.Add(srrf);
                        m.SaveChanges();
                    }
                    #endregion
                }
            }
            return(null);
        }
Example #4
0
 public void UpdateStockRetrievalDetail(StockRetrievalDetail stockRetrievalDetail)
 {
     context.Entry(stockRetrievalDetail).State = EntityState.Modified;
 }
Example #5
0
        public void DeleteStockRetrievalDetail(string id, int binid)
        {
            StockRetrievalDetail stockRetrievalDetail = context.StockRetrievalDetails.Where(x => x.Id == id && x.Bin == binid).First();

            context.StockRetrievalDetails.Remove(stockRetrievalDetail);
        }
Example #6
0
 public void InsertStockRetrievalDetail(StockRetrievalDetail stockRetrievalDetail)
 {
     context.StockRetrievalDetails.Add(stockRetrievalDetail);
 }