using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows.Forms; using Tanshu.Accounts.Helpers; using Tanshu.Accounts.Contracts; using Tanshu.Accounts.Repository; using Tanshu.Accounts.Entities; using Tanshu.Accounts.Entities.Auth; namespace Tanshu.Accounts.PointOfSale { public partial class ProductsForm : Form { bool createOnly = false; IList productList = new List(); #region Form Load public ProductsForm() { InitializeComponent(); } private void Products_Load(object sender, EventArgs e) { productList = ProductBI.GetProducts(); bsProducts.DataSource = productList; FillCombos(); bsProducts.MoveFirst(); } private void FillCombos() { bsProductGroups.DataSource = new ProductGroupBI().GetProductGroups(); bsTax.DataSource = TaxBI.GetTaxes(); } #endregion #region Buttons private void btnAdd_Click(object sender, EventArgs e) { if (btnAdd.Text == "&Add") { bsProducts.AddNew(); LockControls(true); this.lblNavLocation.Text = "Add New"; txtName.Select(); } else { if (!ValidateValues()) { MessageBox.Show("Missing Information: Please check the form."); bsProducts.CancelEdit(); } else { bsProducts.EndEdit(); Save(true); if (createOnly) btnExit_Click(sender, e); else { productList = ProductBI.GetProducts(); bsProducts.DataSource = productList; LockControls(false); } } } } private void btnDelete_Click(object sender, EventArgs e) { if (btnDelete.Text == "&Delete") { if (productList.Count() > 0) { if (MessageBox.Show("Are you sure?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { if (ProductBI.Delete(productList.Single(p => p.Code == Convert.ToInt32(txtUniqueID.Text)).ProductID)) { productList = ProductBI.GetProducts(); btnNavFirst_Click(sender, e); } } } } else { LockControls(false); bsProducts.CancelEdit(); } } private void btnUpdate_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { Save(false); bsProducts.ResetItem(bsProducts.Position); } } #endregion #region Add / Edit / Delete private bool ValidateValues() { if (txtName.Text.Trim().Length == 0) return false; if (cmbProductGroup.SelectedValue == null) return false; if (cmbSalesTax.SelectedValue == null) return false; return true; } private bool Save(bool addNew) { #region Setup Products Product product = new Product(); if (!addNew) product = (Product)bsProducts.Current; product.Name = txtName.Text; product.Units = txtUnits.Text; product.ProductGroup = new ProductGroupBI().GetProductGroup((int)cmbProductGroup.SelectedValue); product.SalePrice = Convert.ToDecimal(txtSalePrice.Text); product.Discontinued = chkDiscontinued.Checked; product.Tax = new Tax(); if (addNew) ProductBI.Insert(product); else ProductBI.Update(product); return true; #endregion } #endregion private void btnExit_Click(object sender, EventArgs e) { this.Close(); } private void LockControls(bool enable) { if (enable) { btnAdd.Text = "&Save"; btnDelete.Text = "&Cancel"; } else { btnAdd.Text = "&Add"; btnDelete.Text = "&Delete"; } btnExit.Enabled = !enable; btnLast.Enabled = !enable; btnNavPrev.Enabled = !enable; btnNavNext.Enabled = !enable; btnUpdate.Enabled = !enable; btnNavFirst.Enabled = !enable; } private void btnAddCategory_Click(object sender, EventArgs e) { ProductTypes frm = new ProductTypes(); frm.ShowDialog(); frm.Dispose(); FillCombos(); cmbProductGroup.SelectedIndex = 0; } #region Move Buttons private void btnNavFirst_Click(object sender, EventArgs e) { this.bsProducts.MoveFirst(); } private void btnNavPrev_Click(object sender, EventArgs e) { this.bsProducts.MovePrevious(); } private void btnNavNext_Click(object sender, EventArgs e) { this.bsProducts.MoveNext(); } private void btnLast_Click(object sender, EventArgs e) { this.bsProducts.MoveLast(); } private void lblNavLocation_Click(object sender, EventArgs e) { using (SelectProduct selectProduct = new SelectProduct(ProductBI.GetFilteredProducts, true)) { selectProduct.ShowDialog(); if (selectProduct.SelectedItem != null) { bsProducts.Position = GetPosition(productList, selectProduct.SelectedItem.ProductID); } } } #endregion #region Binding Source Events private void bsProducts_AddingNew(object sender, AddingNewEventArgs e) { e.NewObject = new Product(); } private void bsProducts_PositionChanged(object sender, EventArgs e) { this.lblNavLocation.Text = string.Format("{0} of {1}", bsProducts.Position + 1, bsProducts.Count); } #endregion private int GetPosition(IList list, int id) { for (int i = 0; i < list.Count; i++) { if (list[i].ProductID == id) return i; } return 0; } } }