using framework_business; using framework_library; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; public partial class controls_sales_items : System.Web.UI.UserControl { #region methods public void ReloadControl() { try { BindItemData(); BindItemTypes(); } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// Method to Bind Item Data /// private void BindItemData() { try { //ArrayList ItemList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSalesItem), "", "", "code"); //CVH 2016-09-15 Only process items not deleted DataTable dtItemList = xData.GetCustomTypedTable(@"SELECT I.*, ISNULL(T.itemType, 'Service') itemTypeDescription FROM pal_SalesItem I LEFT JOIN pal_SalesItemType T ON T.recId = I.itemType WHERE ISNULL(I.isDeleted,0) = 0 "); rptItems.DataSource = dtItemList; rptItems.DataBind(); } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// Bind SalesItemType dropdown /// private void BindItemTypes() { try { DataTable dtItemTypes = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSalesItemType), "isActive", "1"); ddItemTypes.DataSource = dtItemTypes; ddItemTypes.DataTextField = "itemType"; ddItemTypes.DataValueField = "recId"; ddItemTypes.DataBind(); } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// Populate Form Values /// /// private void PopulatePageFormValues(ref oSalesItem _Item) { try { txtCode.Value = _Item.code; txtDescription.Value = _Item.description; ddItemTypes.SelectedIndex = 0; if (ddItemTypes.Items.FindByValue(_Item.itemType.ToString()) != null) ddItemTypes.SelectedValue = _Item.itemType.ToString(); txtComments.Value = _Item.comments; txtUnitMeasure.Value = _Item.unitMeasure; /* CVH 2016-08-16 Dem-Pro-60 Don't load 0.00 */ if (_Item.code != "") txtBuyPrice.Value = utils.returnFormattedDecimal(Convert.ToString(_Item.BuyPriceExcl)); else txtBuyPrice.Value = ""; if (_Item.code != "") txtSellPriceExcl.Text = utils.returnFormattedDecimal(Convert.ToString(_Item.SellPriceExcl)); else txtSellPriceExcl.Text = ""; if (_Item.code != "") txtSellPriceIncl.Text = utils.returnFormattedDecimal(Convert.ToString(_Item.SellPriceIncl)); else txtSellPriceIncl.Text = ""; } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, 0); Response.Redirect("/error", false); } } private void PopulateViewFormValues(ref oSalesItem _Item) { try { lblvItemCode.Text = _Item.code; lblvItemDescription.Text = _Item.description; if (ddItemTypes.Items.FindByValue(_Item.itemType.ToString()) != null) lblvItemType.Text = ddItemTypes.Items.FindByValue(_Item.itemType.ToString()).Text; lblvDetailedDescription.Text = _Item.comments; lblvUnitOfMeasure.Text = _Item.unitMeasure; /* CVH 2016-08-16 Dem-Pro-60 Don't load 0.00 */ lblvBuyPrice.Text = utils.returnFormattedDecimal(Convert.ToString(_Item.BuyPriceExcl)); lblvSellPriceEx.Text = txtSellPriceExcl.Text = utils.returnFormattedDecimal(Convert.ToString(_Item.SellPriceExcl)); lblvSellPriceIn.Text = utils.returnFormattedDecimal(Convert.ToString(_Item.SellPriceIncl)); btnEditItem.CommandArgument = _Item.recId.ToString(); } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, 0); Response.Redirect("/error", false); } } /// /// Save Form Values /// /// private void SavePageFormValues(ref oSalesItem _Item) { try { _Item.isDeleted = false; _Item.code = txtCode.Value; _Item.description = txtDescription.Value; _Item.itemType = int.Parse(ddItemTypes.SelectedValue); _Item.comments = txtComments.Value; _Item.unitMeasure = txtUnitMeasure.Value; decimal buyPrice = 0; decimal.TryParse(txtBuyPrice.Value, out buyPrice); _Item.BuyPriceExcl = buyPrice; decimal sellPrice = 0; decimal.TryParse(txtSellPriceExcl.Text, out sellPrice); _Item.SellPriceExcl = sellPrice; decimal sellPriceIncl = 0; decimal.TryParse(txtSellPriceIncl.Text, out sellPriceIncl); _Item.SellPriceIncl = sellPriceIncl; } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, 0); Response.Redirect("/error", false); } } private void ToggleHeadingButtonVisibility(bool show, LinkButton btn) { try { /* CVH 2016-08-31 Need to toggle visibility of Add New button. Should only be visible on Grid. Can't use noShow, it will break GridSurfaceOptions */ string classname = "noShowSurfaceAdd"; if (show) { //show Add New - remove class noShow btn.CssClass = String.Join(" ", btn .CssClass .Split(' ') .Except(new string[] { "", classname }) .ToArray() ); } else { //hide Add New - add class noShow btn.CssClass = String.Join(" ", btn .CssClass .Split(' ') .Except(new string[] { "", classname }) .Concat(new string[] { classname }) .ToArray() ); } } catch { } } /// /// Method to Toggle Panels /// /// private void TogglePanels(string panelName) { switch (panelName) { case "pnlItemPage": ToggleHeadingButtonVisibility(false, btnNewItem); ToggleHeadingButtonVisibility(false, btnEditItem); pnlItemPage.Visible = true; pnlItemList.Visible = false; pnlItemView.Visible = false; break; case "pnlItemList": ToggleHeadingButtonVisibility(true, btnNewItem); ToggleHeadingButtonVisibility(false, btnEditItem); pnlItemPage.Visible = false; pnlItemList.Visible = true; pnlItemView.Visible = false; break; case "pnlItemView": ToggleHeadingButtonVisibility(false, btnNewItem); ToggleHeadingButtonVisibility(true, btnEditItem); pnlItemPage.Visible = false; pnlItemList.Visible = false; pnlItemView.Visible = true; break; } //clear result pnlResult.Visible = false; upHeading.Update(); } #endregion #region events /// /// Page Load Event /// /// /// protected void Page_Load(object sender, EventArgs e) { try { if (!Page.IsPostBack) { BindItemData(); BindItemTypes(); } } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// New Item Click /// /// /// protected void btnNewItem_Click(object sender, EventArgs e) { try { //show Content Specific TogglePanels("pnlItemPage"); Session["ItemId"] = 0; utils.disposeSession("Item"); oSalesItem Item = new oSalesItem(); PopulatePageFormValues(ref Item); txtCode.Disabled = false; } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// Edit the Item page /// /// /// protected void lnkEdit_Click(object sender, EventArgs e) { oSalesItem _Item = new oSalesItem(); ArrayList catList = new ArrayList(); try { if (sender.GetType() == typeof(LinkButton)) { // int recId = int.Parse(((LinkButton)sender).CommandArgument); if (recId > 0) { Session["ItemId"] = recId; //get cat catList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSalesItem), "recId", recId.ToString()); //enumerate list foreach (oSalesItem cat in catList) { //assign object _Item = cat; //populate page form PopulatePageFormValues(ref _Item); if (txtCode.Value != String.Empty) txtCode.Disabled = true; Session["Item"] = _Item; break; } //show Item Form TogglePanels("pnlItemPage"); upItems.Update(); } } } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// Remove the Item /// /// /// protected void lnkRemove_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { int recId = int.Parse(((LinkButton)sender).CommandArgument); foreach (oSalesItem proc in xData.GetTypedByCriteriaSpecific("recId", typeof(oSalesItem), "recId", recId.ToString())) { //CVH 2016-09-15 Don't delete item, just set isDeleted flag proc.isDeleted = true; if (xData.UpdateTyped("recId", recId.ToString(), typeof(oSalesItem), proc)) { //rebind pages grid BindItemData(); pnlResult.Visible = true; //display successful result lblResult.Text = "the selected Item was deleted successfully."; } } } } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// Cancel /// /// /// protected void btnCancel_Click(object sender, EventArgs e) { try { Session["ItemId"] = 0; utils.disposeSession("Item"); BindItemData(); //show cat list TogglePanels("pnlItemList"); } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// Save Click /// /// /// protected void btnSave_Click(object sender, EventArgs e) { oSalesItem Item = new oSalesItem(); try { Control btn = (Control)sender; if (btn == null) return; bool saved = false; if (utils.verifySession("Item"))//update mode { Item = (oSalesItem)Session["Item"]; /* CVH 2016-09-01 Allowing save with blank code, need to verify not duplicate code on update as well as save */ foreach (oSalesItem exist in xData.GetTypedByCriteriaSpecific("recId", typeof(oSalesItem), "code", txtCode.Value.Trim())) { if (exist.recId != Item.recId) { pnlResult.Visible = true; lblResult.Text = "An Item with this code already exists on the system"; return; } } Item.isActive = (btn.ID == "btnSaveDraft" ? false : true); //save form values SavePageFormValues(ref Item); if (xData.UpdateTyped("recId", Item.recId.ToString(), typeof(oSalesItem), Item)) { saved = true; lblResult.Text = "your changes were updated successfully."; } } else { if (txtCode.Value != "" && xData.VerifyExists("recId", typeof(oSalesItem), "code", txtCode.Value)) { pnlResult.Visible = true; lblResult.Text = "An Item with this code already exists on the system"; return; } else { Item.isActive = (btn.ID == "btnSaveDraft" ? false : true); //save form values SavePageFormValues(ref Item); //save procedure Item.recId = xData.SaveTyped("recId", typeof(oSalesItem), Item); if (Item.recId > 0) { saved = true; lblResult.Text = "your Item was created successfully."; if (handler.GetRoutedData("canvas-title") == "sales") { CommandEventArgs args = new CommandEventArgs("ReloadItems", ""); RaiseBubbleEvent(null, args); } } } } if (saved) { if (btn.ID == "btnSaveBack" || btn.ID == "btnSaveDraft") { Session["ItemId"] = 0; utils.disposeSession("Item"); BindItemData(); //show cat list TogglePanels("pnlItemList"); } else if (btn.ID == "btnSaveAndNew") { TogglePanels("pnlItemPage"); Session["ItemId"] = 0; utils.disposeSession("Item"); oSalesItem newItem = new oSalesItem(); PopulatePageFormValues(ref newItem); txtCode.Disabled = false; } else { Session["ItemId"] = Item.recId; Session["Item"] = Item; BindItemData(); pnlResult.Visible = true; if (txtCode.Value != String.Empty) txtCode.Disabled = true; else txtCode.Disabled = false; } } } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["Item"]); Response.Redirect("/error", false); } } /// /// excl price textbox event to calculate vat for incl price /// /// /// protected void txtSellPriceExcl_TextChanged(object sender, EventArgs e) { string output = txtSellPriceExcl.Text; oSetup setup = handler.ReturnSetup(); if (setup.vatRegistered) { decimal input = Convert.ToDecimal(txtSellPriceExcl.Text); output = utils.CalculateVAT(setup.vatRate, input).ToString("N2"); } txtSellPriceIncl.Text = output; } /// /// incl price textbox event to calculate excl price /// /// /// protected void txtSellPriceIncl_TextChanged(object sender, EventArgs e) { string output = txtSellPriceIncl.Text; oSetup setup = handler.ReturnSetup(); if (setup.vatRegistered) { decimal input = Convert.ToDecimal(txtSellPriceIncl.Text); output = utils.CalculateVAT(setup.vatRate, input, true).ToString("N2"); } txtSellPriceExcl.Text = output; } /// /// Item data bound /// /// /// protected void rptItems_ItemDataBound(object sender, RepeaterItemEventArgs e) { try { if (e.Item.ItemIndex != -1) { HiddenField hfActive = e.Item.FindControl("hfActive") as HiddenField; if (hfActive != null && hfActive.Value == "False") { HtmlTableRow tr = (HtmlTableRow)e.Item.FindControl("trID"); tr.Attributes.Add("class", "draft"); } } } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// View Click /// /// /// protected void lnkView_Click(object sender, EventArgs e) { oSalesItem _Item = new oSalesItem(); ArrayList catList = new ArrayList(); try { if (sender.GetType() == typeof(LinkButton)) { int recId = int.Parse(((LinkButton)sender).CommandArgument); if (recId > 0) { Session["ItemId"] = recId; //get cat catList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSalesItem), "recId", recId.ToString()); //enumerate list foreach (oSalesItem cat in catList) { //assign object _Item = cat; //populate page form PopulateViewFormValues(ref _Item); Session["Item"] = _Item; break; } //show Item Form TogglePanels("pnlItemView"); } } } catch (Exception ex) { exception.HandleException("Item:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } #endregion }