protected void BtnSubmit_Click(object sender, EventArgs e) { List <Discrepency> dList = new List <Discrepency>(); bool complete = true; bool monthly = false; foreach (GridViewRow row in gvDiscrepancies.Rows) { string itemCode = (row.FindControl("lblItemCode") as Label).Text; string stock = (row.FindControl("lblStock") as Label).Text; string actual = (row.FindControl("lblActual") as Label).Text; int adj = Int32.Parse(actual) - Int32.Parse(stock); string remarks = (row.FindControl("txtRemarks") as TextBox).Text; if (!ValidatorUtil.isEmpty(remarks)) { if (remarks.Length <= maxChars) { //update item table if any adjustment at disubrsement point if (Session["ItemToUpdate"] != null) { if ((bool)Session["ItemToUpdate"]) { Item i = EFBroker_Item.GetItembyItemCode(itemCode); i.BalanceQty = (adj * -1) + i.BalanceQty; EFBroker_Item.UpdateItem(i); } } List <PriceList> plHistory = EFBroker_PriceList.GetPriceListByItemCode(itemCode); List <PriceList> itemPrices = new List <PriceList>(); foreach (PriceList pl in plHistory) { //Get only currently active suppliers for an item if (pl.TenderYear == DateTime.Now.Year.ToString()) { itemPrices.Add(pl); } } decimal totalPrice = 0; foreach (PriceList pl in itemPrices) { totalPrice += (decimal)pl.Price; } decimal averageUnitPrice = totalPrice / itemPrices.Count; Discrepency d = new Discrepency(); d.ItemCode = itemCode; if (Session["empID"] != null) { int empID = (int)Session["empID"]; d.RequestedBy = empID; } else { Utility.logout(); } d.AdjustmentQty = adj; d.Remarks = remarks; d.Date = DateTime.Now; if (Session["monthly"] != null) { if ((bool)Session["monthly"] == true) { d.Status = "Monthly"; monthly = true; } else { d.Status = "Pending"; monthly = false; } } else { d.Status = "Pending"; } d.TotalDiscrepencyAmount = adj * averageUnitPrice; if (d.TotalDiscrepencyAmount < 250) { d.ApprovedBy = EFBroker_DeptEmployee.GetEmployeeListByRole("Store Supervisor")[0].EmpID; } else { d.ApprovedBy = EFBroker_DeptEmployee.GetEmployeeListByRole("Store Manager")[0].EmpID; } dList.Add(d); } else { lblErrorCharLimit.Text = "Make sure all remarks are under 100 characters long"; row.BackColor = Color.Yellow; complete = false; break; } } else { lblRequired.Text = "Please state the cause of discrepancies for all items in Remarks"; complete = false; break; } } if (complete) { if (monthly) { EFBroker_Discrepancy.MonthlyInventoryCheck(dList); } else { EFBroker_Discrepancy.SaveDiscrepencies(dList); } //bool informSupervisor = false; //bool informManager = false; informSupervisor = false; informManager = false; foreach (Discrepency d in dList) { if (Math.Abs((decimal)d.TotalDiscrepencyAmount) < 250) { informSupervisor = true; } else { informManager = true; } } Session["discrepancyList"] = null; Session["discrepancyDisplay"] = null; Session["RetrievalShortfallItemList"] = null; Session["RetrievalID"] = null; Session["monthly"] = null; Session["ItemToUpdate"] = null; ThreadStart emailThreadStart = new ThreadStart(DiscrepancyMailNotification); Thread emailThread = new Thread(emailThreadStart); emailThread.Start(); string destination = ""; if (Session["empRole"] != null) { string role = (string)Session["empRole"]; if (role == "Store Supervisor" || role == "Store Manager") { destination = "PurchaseOrderList.aspx"; } else if (role == "Store Clerk") { destination = "RequisitionListClerk.aspx"; } else { Utility.logout(); } } else { Utility.logout(); } Utility.AlertMessageThenRedirect("Discrepancies successfully reported", destination); } }
public bool SubmitDiscrepanciesWithItemUpdate(List <WCFDiscrepancy> wdList) { List <Discrepency> dList = new List <Discrepency>(); bool informSupervisor = false; bool informManager = false; foreach (WCFDiscrepancy wd in wdList) { Discrepency d = new Discrepency(); d.ItemCode = wd.ItemCode; d.RequestedBy = Int32.Parse(wd.RequestedBy); d.AdjustmentQty = Int32.Parse(wd.AdjustmentQty); d.Remarks = wd.Remarks; d.Status = wd.Status; d.Date = DateTime.Now; //Code to determine the discrepancy amount List <PriceList> plHistory = EFBroker_PriceList.GetPriceListByItemCode(d.ItemCode); List <PriceList> itemPrices = new List <PriceList>(); foreach (PriceList pl in plHistory) { //Get only currently active suppliers for an item if (pl.TenderYear == DateTime.Now.Year.ToString()) { itemPrices.Add(pl); } } decimal totalPrice = 0; foreach (PriceList pl in itemPrices) { totalPrice += (decimal)pl.Price; } decimal averageUnitPrice = totalPrice / itemPrices.Count; d.TotalDiscrepencyAmount = d.AdjustmentQty * averageUnitPrice; //Set the approver based on discrepancy amount, and email notify them if (Math.Abs((decimal)d.TotalDiscrepencyAmount) < 250) { if (d.TotalDiscrepencyAmount < 250) { d.ApprovedBy = EFBroker_DeptEmployee.GetEmployeeListByRole("Store Supervisor")[0].EmpID; informSupervisor = true; } else { d.ApprovedBy = EFBroker_DeptEmployee.GetEmployeeListByRole("Store Manager")[0].EmpID; informManager = true; } } dList.Add(d); } bool successfullySent = sendDiscrepanciesToDatabaseWithItemUpdates(dList); if (successfullySent) { if (informSupervisor) { string supervisorEmail = EFBroker_DeptEmployee.GetEmployeeListByRole("Store Supervisor")[0].Email; Utility.sendMail(supervisorEmail, "New Discrepancies Notification " + DateTime.Now.ToString(), "New item discrepancies have been submitted. Please log in to the system to review them. Thank you."); } if (informManager) { string managerEmail = EFBroker_DeptEmployee.GetEmployeeListByRole("Store Manager")[0].Email; Utility.sendMail(managerEmail, "New Discrepancies Notification " + DateTime.Now.ToString(), "New item discrepancies (worth at least $250) have been submitted. Please log in to the system to review them. Thank you."); } return(true); } else { return(false); } }
protected void Page_Load(object sender, EventArgs e) { string itemCode = Request.QueryString["itemCode"]; string adjustment = "Adjustment"; //strings for stock card transaction type string disbursement = "Disbursement"; string purchase = "Purchase"; if (!ValidatorUtil.isEmpty(itemCode)) { Item item = EFBroker_Item.GetItembyItemCode(itemCode); string currentYear = DateTime.Now.Year.ToString(); List <PriceList> plList = EFBroker_PriceList.GetPriceListByItemCode(itemCode).Where(c => c.TenderYear == currentYear).ToList(); if (item != null && plList.Count > 0) { lblItemCode.Text = item.ItemCode; lblItemName.Text = item.Description; lblBin.Text = item.Bin; lblUom.Text = item.UnitOfMeasure; foreach (PriceList pl in plList) { switch (pl.SupplierRank) { case 1: lblSupp1.Text = pl.SupplierCode; break; case 2: lblSupp2.Text = pl.SupplierCode; break; case 3: lblSupp3.Text = pl.SupplierCode; break; } } if (plList.Count < 3) // N/A on supplier labels if there are less than 3 suppliers { lblSupp3.Text = "N/A"; if (plList.Count < 2) { lblSupp2.Text = "N/A"; } } List <StockCard> scList = EFBroker_StockCard.GetStockCardsByItemCode(itemCode); List <StockCardDisplayRow> scDisplayList = new List <StockCardDisplayRow>(); foreach (StockCard sc in scList) { if (sc.TransactionType == adjustment || sc.TransactionType == disbursement || sc.TransactionType == purchase) { //Possible to display 3 types of stock card entries (each accessing different tables) StockCardDisplayRow scdr = new StockCardDisplayRow(); if (sc.TransactionType == adjustment) { Discrepency d = EFBroker_Discrepancy.GetDiscrepancyById((int)sc.TransactionDetailID); scdr.TransDate = ((DateTime)d.Date).ToShortDateString(); scdr.TransDetails = "Adjustment ID. " + sc.TransactionDetailID; scdr.Quantity = "ADJ " + GetQuantityString((int)sc.Qty); } else if (sc.TransactionType == purchase) { PurchaseOrder po = EFBroker_PurchaseOrder.GetPurchaseOrderById((int)sc.TransactionDetailID); scdr.TransDate = ((DateTime)po.ExpectedDate).ToShortDateString(); scdr.TransDetails = "Supplier - " + po.SupplierCode; Item_PurchaseOrder ipo = EFBroker_PurchaseOrder.GetPurchaseOrderItem(po.PurchaseOrderID, itemCode); scdr.Quantity = GetQuantityString((int)sc.Qty); } else if (sc.TransactionType == disbursement) { Disbursement db = EFBroker_Disbursement.GetDisbursmentbyDisbID((int)sc.TransactionDetailID); scdr.TransDate = ((DateTime)db.CollectionDate).ToShortDateString(); scdr.TransDetails = EFBroker_DeptEmployee.GetDepartByDepCode(db.DeptCode).DeptName; scdr.Quantity = GetQuantityString((int)sc.Qty); } scdr.Balance = (int)sc.Balance; scDisplayList.Add(scdr); } } gvTransactions.DataSource = scDisplayList; gvTransactions.DataBind(); } else //if item is not found or no entries found in price list table { Response.Redirect(LoginController.StationeryCatalogueURI); } } else //if there is no itemCode in querystring { Response.Redirect(LoginController.StationeryCatalogueURI); } }