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
}