Exemplo n.º 1
0
        public RedirectToRouteResult DiscardSelBackorders(string[] itemCodes, string[] formIds)
        {
            using (SSISdbEntities e = new SSISdbEntities())
            {
                DAL.StaffRequisitionDetailsRepositoryImpl dal       = new DAL.StaffRequisitionDetailsRepositoryImpl(e);
                DAL.StaffRequisitionRepositoryImpl        dalHeader = new DAL.StaffRequisitionRepositoryImpl(e);

                int index = 0;

                foreach (string i in itemCodes)
                {
                    string formId = formIds[index];

                    //update SRD
                    StaffRequisitionDetail srd = new StaffRequisitionDetail();
                    srd = dal.GetStaffRequisitionDetailById(formId, itemCodes[index]);
                    srd.CancelledBackOrdered = srd.QuantityBackOrdered;
                    srd.QuantityBackOrdered  = 0;
                    dal.UpdateStaffRequisitionDetail(srd);

                    //update SRH
                    StaffRequisitionHeader srh = new StaffRequisitionHeader();
                    srh = dalHeader.GetStaffRequisitionHeaderById(formId);
                    string stockRetrievalId = e.StockRetrievalReqForms.Where(x => x.ReqFormID == formId).Select(x => x.StockRetrievalID).FirstOrDefault();
                    byte?  disbursedStatus  = e.StockRetrievalHeaders.Where(x => x.ID == stockRetrievalId).Select(x => x.Disbursed).FirstOrDefault();
                    bool   backOrderStatus  = false;
                    List <StaffRequisitionDetail> reqDetailsList = e.StaffRequisitionDetails.Where(x => x.FormID == formId).ToList();
                    foreach (StaffRequisitionDetail detail in reqDetailsList)
                    {
                        if (detail.QuantityBackOrdered > 0)
                        {
                            backOrderStatus = true;
                        }
                    }

                    switch (backOrderStatus)
                    {
                    case true:     //backorder exists for current SR
                        break;

                    case false:
                        srh.Status = "Cancelled";
                        break;
                    }

                    dalHeader.UpdateStaffRequisitionHeader(srh);

                    index++;
                    e.SaveChanges();
                }
            }

            Session["DeptReqTabIndex"] = "2";
            return(RedirectToAction("Requisition", "Dept"));
        }
        public RedirectToRouteResult ExitEditExistingOrderQty(object[] arr, string[] arr1)
        {
            if (arr.Count() == 0 || arr1.Count() == 0)
            {
                return(null);
            }
            else
            {
                try
                {
                    string formId = Session["id"].ToString();

                    Session["existingReqEditMode"] = false;

                    //update details of current req history
                    using (SSISdbEntities m = new SSISdbEntities())
                    {
                        m.Configuration.ProxyCreationEnabled = false;
                        List <RequisitionHistoryDetail>           reqDetailsList = m.RequisitionHistoryDetails.Where(x => x.FormID == formId).ToList <RequisitionHistoryDetail>();
                        DAL.StaffRequisitionDetailsRepositoryImpl dal            = new DAL.StaffRequisitionDetailsRepositoryImpl(m);
                        StaffRequisitionDetail srd = new StaffRequisitionDetail();

                        foreach (RequisitionHistoryDetail rhd in reqDetailsList)
                        {
                            string itemCode = m.Items.Where(x => x.Description == rhd.Description).Select(x => x.ItemCode).FirstOrDefault();
                            srd = m.StaffRequisitionDetails.Where(x => x.FormID == formId && x.ItemCode == itemCode).FirstOrDefault();

                            int index = reqDetailsList.IndexOf(rhd);
                            srd.QuantityOrdered = Int32.Parse(arr1[index]);

                            dal.UpdateStaffRequisitionDetail(srd);
                        }

                        m.SaveChanges();
                    }

                    Session["ReqHistoryPage"] = "2";
                }
                catch (FormatException)
                {
                    TempData["ErrorMsg"] = "Invalid Quantity!";
                    return(null);
                }
                catch (Exception)
                {
                    TempData["ErrorMsg"] = "An unexpected error has occured. Please try again.";
                    return(null);
                }
            }


            return(RedirectToAction("RequisitionHistory", "Dept"));
        }
Exemplo n.º 3
0
        public RedirectToRouteResult ExitEditNewOrderQty(object[] arr, string[] arr1)
        {
            if (arr.Count() == 0 || arr1.Count() == 0)
            {
                TempData["ErrorMsg"] = "Fields cannot be empty!";
                return(null);
            }
            else
            {
                try
                {
                    using (SSISdbEntities e = new SSISdbEntities())
                    {
                        //update temp list
                        List <StaffRequisitionDetail> list = (List <StaffRequisitionDetail>)Session["newReqList"];
                        foreach (StaffRequisitionDetail srd in list.ToList())
                        {
                            StaffRequisitionDetail srdTemp = srd;
                            srdTemp.QuantityOrdered = Int32.Parse(arr1[list.IndexOf(srd)]);
                            list[list.IndexOf(srd)] = srd;
                        }

                        Session["newReqList"]     = list;
                        Session["newReqEditMode"] = false;
                    }
                }
                catch (FormatException)
                {
                    TempData["ErrorMsg"] = "Invalid Quantity!";
                    return(null);
                }
                catch (Exception)
                {
                    TempData["ErrorMsg"] = "An unexpected error has occured. Please try again.";
                    return(null);
                }
            }
            return(RedirectToAction("Requisition", "Dept"));
        }
Exemplo n.º 4
0
        public RedirectToRouteResult AddNewReqItem(Item item1, StaffRequisitionDetail item2)
        {
            Item itemToAdd = new Item();

            using (SSISdbEntities e = new SSISdbEntities())
            {
                string itemCode = Request.Form["SelectItemDesc"].ToString();
                itemToAdd = e.Items.Where(x => x.ItemCode == itemCode).FirstOrDefault();

                List <StaffRequisitionDetail> list = new List <StaffRequisitionDetail>();
                list = (List <StaffRequisitionDetail>)Session["newReqList"];
                StaffRequisitionDetail srd = new StaffRequisitionDetail();
                srd.ItemCode             = itemToAdd.ItemCode;
                srd.FormID               = Session["currentFormId"].ToString();
                srd.QuantityOrdered      = item2.QuantityOrdered;
                srd.QuantityDelivered    = 0;
                srd.QuantityBackOrdered  = item2.QuantityOrdered;
                srd.CancelledBackOrdered = 0;

                srd.Item = e.Items.Where(x => x.ItemCode == itemToAdd.ItemCode).FirstOrDefault();

                srd.Item.Description = itemToAdd.Description;
                srd.Item.UoM         = itemToAdd.UoM;

                list.Add(srd);
                Session["newReqList"] = list;

                //add to list meant for already added items
                List <String> tempList = (List <String>)Session["tempList"];
                tempList.Add(itemToAdd.ItemCode);
                Session["tempList"] = tempList;

                List <Item> newItemList = new List <Item>();

                return(RedirectToAction("Requisition", "Dept"));
            }
        }
 public void UpdateStaffRequisitionDetail(StaffRequisitionDetail staffRequisitionDetail)
 {
     context.Entry(staffRequisitionDetail).State = EntityState.Modified;
 }
        public void DeleteStaffRequisitionDetail(string formId, string itemCode)
        {
            StaffRequisitionDetail staffRequisitionDetail = context.StaffRequisitionDetails.Where(x => x.FormID == formId && x.ItemCode == itemCode).First();

            context.StaffRequisitionDetails.Remove(staffRequisitionDetail);
        }
 public void InsertStaffRequisitionDetail(StaffRequisitionDetail staffRequisitionDetail)
 {
     context.StaffRequisitionDetails.Add(staffRequisitionDetail);
 }
Exemplo n.º 8
0
        public RedirectToRouteResult DisburseItems()
        {
            using (SSISdbEntities m = new SSISdbEntities())
            {
                m.Configuration.ProxyCreationEnabled = false;
                string id = (string)Session["RetrievalId"];
                StockRetrievalHeader srh = m.StockRetrievalHeaders.Where(x => x.ID == id).First();
                srh.Disbursed = 1;

                List <StockRetrievalDetail> itemsRetrieved = m.StockRetrievalDetails.Where(x => x.Id == id).ToList();

                bool stockAdjustmentHeaderCreated = false;

                foreach (StockRetrievalDetail srd in itemsRetrieved)
                {
                    DateTime localDate = DateTime.Now;

                    if (srd.QuantityAdjusted > 0)
                    {
                        //To check whether there is stock adjustment header for the item
                        if (!stockAdjustmentHeaderCreated)
                        {
                            //To Create Stock Adjustment Header
                            stockAdjustmentHeaderCreated = true;

                            StockAdjustmentHeader sah   = new StockAdjustmentHeader();
                            int stockAdjustmentHeaderId = m.StockAdjustmentHeaders.Count() + 1;
                            sah.RequestId       = CommonLogic.SerialNo(stockAdjustmentHeaderId, "SA");
                            sah.DateRequested   = localDate;
                            sah.Requestor       = (string)Session["LoginEmployeeID"];
                            sah.TransactionType = "Stock Adjustment";

                            m.StockAdjustmentHeaders.Add(sah);
                            m.SaveChanges();
                        }

                        //To Create Stock Adjustment Details
                        int stockAdjustmentDetailId = m.StockAdjustmentHeaders.Count();
                        StockAdjustmentDetail sad   = new StockAdjustmentDetail();
                        sad.RequestId    = CommonLogic.SerialNo(stockAdjustmentDetailId, "SA");
                        sad.ItemCode     = srd.ItemCode;
                        sad.ItemQuantity = srd.QuantityAdjusted;

                        float itemUnitCost = m.Items.Where(x => x.ItemCode == sad.ItemCode).Select(x => x.AvgUnitCost).FirstOrDefault();
                        sad.Amount = itemUnitCost * sad.ItemQuantity;

                        sad.Remarks = srd.Remarks;
                        sad.Status  = "Pending";

                        m.StockAdjustmentDetails.Add(sad);

                        //To add the item transactions
                        ItemTransaction itemTransaction = new ItemTransaction();
                        itemTransaction.TransDateTime   = localDate;
                        itemTransaction.DocumentRefNo   = sad.RequestId;
                        itemTransaction.ItemCode        = sad.ItemCode;
                        itemTransaction.TransactionType = "Stock Adjustment";
                        itemTransaction.Quantity        = sad.ItemQuantity;
                        itemTransaction.UnitCost        = itemUnitCost;
                        itemTransaction.Amount          = sad.Amount;

                        m.ItemTransactions.Add(itemTransaction);

                        //To update the quantity of the item table
                        Item itemAdjusted = m.Items.Where(x => x.ItemCode == itemTransaction.ItemCode).FirstOrDefault();
                        itemAdjusted.Quantity -= itemTransaction.Quantity;


                        m.SaveChanges();
                    }
                }

                //Creating list of new disbursements
                //To order by id so the earlier id will mean that the req form was submitted earlier
                List <String> reqFormIDList = m.StockRetrievalReqForms.OrderBy(x => x.Id).Where(x => x.StockRetrievalID == id).Select(x => x.ReqFormID).ToList <String>();

                //Create distinct disbursement headers
                List <String> disbHeaderDeptCodes = new List <String>();

                //Take from stock retrieval details
                List <StockRetrievalDetail> stockRetrievalDetails = m.StockRetrievalDetails.Where(x => x.Id == id).ToList <StockRetrievalDetail>();

                foreach (StockRetrievalDetail srd in stockRetrievalDetails)
                {
                    //To take care that in case stock adjustment makes the quantity retrieved to be 0
                    if (srd.QuantityRetrieved > 0)
                    {
                        String deptCode = m.DepartmentDetails.Where(x => x.CollectionPointID == srd.CollectionPointID).FirstOrDefault().DepartmentCode;
                        disbHeaderDeptCodes.Add(deptCode);
                    }
                }

                //Make it distinct so that only one disbursement header is created
                disbHeaderDeptCodes = disbHeaderDeptCodes.Distinct().ToList();

                foreach (String deptCode in disbHeaderDeptCodes)
                {
                    DisbursementHeader newDH = new DisbursementHeader();

                    int    count = m.DisbursementHeaders.Count() + 1;
                    string disId = CommonLogic.SerialNo(count, "DH");
                    newDH.Id                = disId;
                    newDH.Status            = "Open";
                    newDH.Date              = DateTime.Now;
                    newDH.Amount            = 0; //Put 0 first and then to be calculated after all the disbursement details is done
                    newDH.StockRetrievalId  = id;
                    newDH.DepartmentCode    = deptCode;
                    newDH.CollectionPointID = m.DepartmentDetails.Where(x => x.DepartmentCode == deptCode).FirstOrDefault().CollectionPointID;
                    newDH.RepresentativeID  = m.DepartmentDetails.Where(x => x.DepartmentCode == newDH.DepartmentCode).FirstOrDefault().RepresentativeID;

                    float totalAmount = 0f;

                    //Create disbursement details, since one collection point is for one dept, then the entire stock retrieved would be assigned to that dept
                    foreach (StockRetrievalDetail srd in stockRetrievalDetails)
                    {
                        String deptCodeDH = m.DepartmentDetails.Where(x => x.CollectionPointID == srd.CollectionPointID).Select(x => x.DepartmentCode).FirstOrDefault();

                        //Only disbursed if quantity retrieved is more than 0
                        if (srd.QuantityRetrieved > 0 && deptCodeDH.Equals(newDH.DepartmentCode))
                        {
                            DisbursementDetail newDD = new DisbursementDetail();
                            newDD.Id       = disId;
                            newDD.ItemCode = srd.ItemCode;

                            int quantityOrdered = 0;

                            foreach (String reqF in reqFormIDList)
                            {
                                StaffRequisitionDetail staffReqDet    = m.StaffRequisitionDetails.Where(x => x.FormID == reqF && x.ItemCode == newDD.ItemCode).FirstOrDefault();
                                StaffRequisitionHeader staffReqHeader = m.StaffRequisitionHeaders.Where(x => x.FormID == reqF).FirstOrDefault();

                                int reqQtyOrdered = 0;

                                if (staffReqDet != null && staffReqHeader != null)
                                {
                                    if (staffReqHeader.DepartmentCode.Equals(newDH.DepartmentCode))
                                    {
                                        reqQtyOrdered = staffReqDet.QuantityOrdered;
                                    }
                                }

                                quantityOrdered = quantityOrdered + reqQtyOrdered;
                            }


                            newDD.QuantityOrdered  = quantityOrdered;
                            newDD.QuantityReceived = srd.QuantityRetrieved;

                            float itemUnitCost = m.Items.Where(x => x.ItemCode == newDD.ItemCode).Select(x => x.AvgUnitCost).FirstOrDefault();
                            newDD.UnitCost = itemUnitCost;

                            newDD.UoM = m.Items.Where(x => x.ItemCode == newDD.ItemCode).Select(x => x.UoM).FirstOrDefault();
                            newDD.QuantityAdjusted = 0;
                            newDD.TransactionType  = "Disbursement";

                            float amount = itemUnitCost * newDD.QuantityReceived;
                            totalAmount += amount;

                            m.DisbursementDetails.Add(newDD);

                            //To add the item transactions
                            DateTime localDate = DateTime.Now;

                            ItemTransaction itemTransaction = new ItemTransaction();
                            itemTransaction.TransDateTime   = localDate;
                            itemTransaction.DocumentRefNo   = newDD.Id;
                            itemTransaction.ItemCode        = newDD.ItemCode;
                            itemTransaction.TransactionType = "Disbursement";
                            itemTransaction.Quantity        = newDD.QuantityReceived;
                            itemTransaction.UnitCost        = itemUnitCost;
                            itemTransaction.Amount          = newDD.QuantityReceived * itemUnitCost;

                            m.ItemTransactions.Add(itemTransaction);

                            //To update the quantity of the item table
                            Item itemDisbursed = m.Items.Where(x => x.ItemCode == itemTransaction.ItemCode).FirstOrDefault();
                            itemDisbursed.Quantity -= itemTransaction.Quantity;
                        }
                    }

                    newDH.Amount = totalAmount;
                    m.DisbursementHeaders.Add(newDH);

                    m.SaveChanges();
                }
            }

            return(RedirectToAction("Disbursements", "Store"));
        }