public RedirectToRouteResult Approve(string requestid, string itemcode)
        {
            StockAdjustmentDetail stockadjdet = repo.GetStockAdjustmentDetailById(requestid, itemcode);

            stockadjdet.Status             = "Approved";
            stockadjdet.NotificationStatus = "Unread";
            stockadjdet.StockAdjustmentHeader.DateProcessed = DateTime.Now;
            repo.UpdateStockAdjustmentDetail(stockadjdet);
            repo.Save();


            using (SSISdbEntities m = new SSISdbEntities())
            {
                StockAdjustmentHeader sjh = m.StockAdjustmentHeaders.Where(x => x.RequestId == requestid).FirstOrDefault();
                Employee emp = m.Employees.Where(x => x.EmployeeID == sjh.Requestor).FirstOrDefault();

                string title   = "[LogicUniversity] Stock Adjustment Approved: " + requestid;
                string message = "Item Code: " + itemcode + " has been approved.";

                // Send to Employee
                CommonLogic.Email.sendEmail("*****@*****.**", emp.EmployeeEmail, title, message);
            }

            Session["StockAdjPage"]           = 2;
            Session["StoreInventoryTabIndex"] = "1";

            return(RedirectToAction("Inventory", "Store"));
        }
        public RedirectToRouteResult Reject(string requestid, string itemcode)
        {
            StockAdjustmentDetail stockadjdet = repo.GetStockAdjustmentDetailById(requestid, itemcode);

            using (IItemTransactionRepository itemRepo = new ItemTransactionRepositoryImpl(new SSISdbEntities()))
            {
                ItemTransaction itemTrans = new ItemTransaction
                {
                    DocumentRefNo   = requestid,
                    TransDateTime   = DateTime.Now,
                    ItemCode        = itemcode,
                    TransactionType = "Reject Stock Adjustment",
                    Quantity        = stockadjdet.ItemQuantity,
                    Amount          = stockadjdet.Amount,
                    UnitCost        = stockadjdet.Amount / stockadjdet.ItemQuantity
                };
                itemRepo.InsertItemTransaction(itemTrans);
                itemRepo.Save();
            }
            stockadjdet.Status             = "Rejected";
            stockadjdet.NotificationStatus = "Unread";
            repo.UpdateStockAdjustmentDetail(stockadjdet);
            repo.Save();

            using (SSISdbEntities m = new SSISdbEntities())
            {
                StockAdjustmentHeader sjh = m.StockAdjustmentHeaders.Where(x => x.RequestId == requestid).FirstOrDefault();
                Employee emp = m.Employees.Where(x => x.EmployeeID == sjh.Requestor).FirstOrDefault();

                // Send to Employee
                string title   = "[LogicUniversity] Stock Adjustment Rejected: " + requestid;
                string message = "Item Code: " + itemcode + " has been rejected.";

                // Send to Employee
                CommonLogic.Email.sendEmail("*****@*****.**", emp.EmployeeEmail, title, message);
            }



            Session["StoreInventoryTabIndex"] = "1";
            Session["StockAdjPage"]           = 2;
            return(RedirectToAction("Inventory", "Store", new { area = "" }));
        }
        public RedirectToRouteResult SubmitNewAdj()
        {
            using (SSISdbEntities e = new SSISdbEntities())
            {
                //data is item desc, index is list index
                int    adjCount       = e.StockAdjustmentHeaders.ToList().Count() + 1;
                string newAdjHeaderId = CommonLogic.SerialNo(adjCount, "SA");
                bool   mgrEmail       = false;
                bool   supEmail       = false;

                StockAdjustmentHeader sah = new StockAdjustmentHeader();
                sah.RequestId       = newAdjHeaderId;
                sah.DateRequested   = DateTime.Now;
                sah.Requestor       = Session["LoginEmployeeID"].ToString();
                sah.DateProcessed   = null;
                sah.TransactionType = "Stock Adjustment";

                DAL.StockAdjustmentRepositoryImpl dal = new DAL.StockAdjustmentRepositoryImpl(e);
                dal.InsertStockAdjustmentHeader(sah);

                DAL.StockAdjustmentDetailsRepositoryImpl dalDetails = new DAL.StockAdjustmentDetailsRepositoryImpl(e);

                //insert SAH details
                foreach (StockAdjItemModel detail in (List <StockAdjItemModel>)Session["NewAdjList"])
                {
                    StockAdjustmentDetail sad = new StockAdjustmentDetail();
                    sad.RequestId          = newAdjHeaderId;
                    sad.ItemCode           = detail.ItemCode;
                    sad.Amount             = float.Parse(detail.AdjCost.ToString());
                    sad.ItemQuantity       = detail.AdjQty;
                    sad.Remarks            = detail.Reason;
                    sad.Status             = "Pending";
                    sad.NotificationStatus = "Unread";

                    dalDetails.InsertStockAdjustmentDetail(sad);
                    if (sad.Amount < 250)
                    {
                        supEmail = true;
                    }
                    else
                    {
                        mgrEmail = true;
                    }

                    //Create new Item Transaction
                    ItemTransaction itemTransaction = new ItemTransaction();
                    itemTransaction.TransDateTime   = DateTime.Now;
                    itemTransaction.DocumentRefNo   = sad.RequestId;
                    itemTransaction.ItemCode        = sad.ItemCode;
                    itemTransaction.TransactionType = "Stock Adjustment";
                    itemTransaction.Quantity        = sad.ItemQuantity;

                    float itemUnitCost = e.Items.Where(x => x.ItemCode == sad.ItemCode).Select(x => x.AvgUnitCost).FirstOrDefault();

                    itemTransaction.UnitCost = itemUnitCost;
                    itemTransaction.Amount   = itemTransaction.Quantity * itemTransaction.UnitCost;
                    e.ItemTransactions.Add(itemTransaction);

                    //Update Item Quantity
                    Item item = e.Items.Where(x => x.ItemCode == sad.ItemCode).FirstOrDefault();
                    item.Quantity = item.Quantity - sad.ItemQuantity;
                }

                Employee current = e.Employees.Where(x => x.EmployeeID == Session["LoginEmployeeID"].ToString()).FirstOrDefault();
                Employee sup     = e.Employees.Where(x => x.EmployeeID == current.ReportsTo).FirstOrDefault();
                Employee mgr     = e.Employees.Where(x => x.EmployeeID == sup.ReportsTo).FirstOrDefault();

                string title   = "[LogicUniversity] Stock Adjustment Request: " + newAdjHeaderId;
                string message = "There are stock adjustment items pending for your approval.";

                if (mgrEmail == true)
                {
                    CommonLogic.Email.sendEmail("*****@*****.**", mgr.EmployeeEmail, title, message);
                }

                if (supEmail == true)
                {
                    CommonLogic.Email.sendEmail("*****@*****.**", sup.EmployeeEmail, title, message);
                }

                e.SaveChanges();
                List <String> tempList = (List <String>)Session["tempList"];
                tempList.Clear();
                Session["tempList"]   = tempList;
                Session["NewAdjList"] = new List <StockAdjItemModel>();

                return(RedirectToAction("Inventory", "Store"));
            }
        }
        public void DeleteStockAdjustmentHeader(int requestid)
        {
            StockAdjustmentHeader stockAdjustment = context.StockAdjustmentHeaders.Find(requestid);

            context.StockAdjustmentHeaders.Remove(stockAdjustment);
        }
 public void UpdateStockAdjustmentHeader(StockAdjustmentHeader stockAdjustmentHeader)
 {
     context.Entry(stockAdjustmentHeader).State = EntityState.Modified;
 }
 public void InsertStockAdjustmentHeader(StockAdjustmentHeader stockAdjustmentHeader)
 {
     context.StockAdjustmentHeaders.Add(stockAdjustmentHeader);
 }
示例#7
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"));
        }
示例#8
0
 public StockAdjustmentHeader GetStockInHeader(StockAdjustmentHeader item)
 {
     return((StockAdjustmentHeader)stockadjustmentheaderDAL.GetItem <StockAdjustmentHeader>(item));
 }
示例#9
0
 public bool DeleteStockInHeader(StockAdjustmentHeader item)
 {
     return(stockadjustmentheaderDAL.Delete(item));
 }
示例#10
0
 public bool SaveStockInHeader(StockAdjustmentHeader newItem)
 {
     return(stockadjustmentheaderDAL.Save(newItem));
 }