private void btnAdd_Click(object sender, EventArgs e)
        {
            if (validator1.Validate())
            {
                if (product != null)//update
                {
                    product.Description = txtDescription.Text;
                    product.ProductName = txtName.Text;
                    product.ProductCode = txtCode.Text;

                    ProductType refProductType = productTypes.Single(pt => pt.Id == (int)cmbType.SelectedValue);
                    product.ProductType1 = refProductType;
                    ProductService productService = new ProductService();
                    bool result = productService.UpdateProduct(product);
                    result = UpdateAttribute(product.Id);
                    if (result)
                    {
                        MessageBox.Show("Sản phẩm đã được cập nhật thành công");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else//add new
                {
                    product = new Product
                    {
                        Description = txtDescription.Text,
                        ProductName = txtName.Text,
                        ProductCode = txtCode.Text,
                        ProductType = (int)cmbType.SelectedValue
                    };
                    ProductService productService = new ProductService();
                    bool result = productService.AddProduct(product);

                    long newProductId = BaoHienRepository.GetMaxId<Product>();

                    result = UpdateAttribute(newProductId);
                    if (result)
                    {
                        MessageBox.Show("Sản phẩm đã được tạo thành công");
                        if (this.CallFromUserControll != null && this.CallFromUserControll is ProductList)
                        {
                            ((ProductList)this.CallFromUserControll).loadProductList();
                        }
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }
        public void GetProducts()
        {
            //List<ProductType> list = (List<ProductType>)BaoHienRepository.SelectAll<ProductType>().Where<ProductType>(item => item.st == false).ToList<ProductType>();
            //int count = list.Count;

            ProductService productService = new ProductService();
            List<Product> products = productService.GetProducts();

            Assert.AreEqual<bool>(true, products.Count > 0); ;
        }
        public void GetProduct()
        {
            //List<ProductType> list = (List<ProductType>)BaoHienRepository.SelectAll<ProductType>().Where<ProductType>(item => item.st == false).ToList<ProductType>();
            //int count = list.Count;
           
            ProductService productService = new ProductService();
            Product product = productService.GetProduct(1);

            Assert.AreEqual<int>(1, product.Id); ;
        }
        public void AddProduct()
        {
            //List<ProductType> list = (List<ProductType>)BaoHienRepository.SelectAll<ProductType>().Where<ProductType>(item => item.st == false).ToList<ProductType>();
            //int count = list.Count;
            Product product = new Product
            {
                ProductCode = "Product code 1",
                ProductName = "Product Name 1",
                ProductType = 4
            };
            ProductService productTypeService = new ProductService();
            bool result = productTypeService.AddProduct(product);

            Assert.AreEqual<bool>(true, result); ;
        }
 public void loadProductList()
 {            
     ProductService productService = new ProductService();
     List<Product> products = productService.GetProducts().OrderBy(x => x.ProductCode).ToList();
     setUpDataGrid(products);
     ProductTypeService productTypeService = new ProductTypeService();
     List<ProductType> productTypes = productTypeService.GetProductTypes();
     productTypes.Add(new ProductType() { Id = 0, TypeName = "Tất cả" });
     productTypes = productTypes.OrderBy(x => x.Id).ToList();
     if (productTypes != null)
     {
         cbProductTypes.DataSource = productTypes;
         cbProductTypes.DisplayMember = "TypeName";
         cbProductTypes.ValueMember = "Id";
     }
 }
        private void searchProduct()
        {
            ProductSearchCriteria productSearchCriteria = new ProductSearchCriteria()
            {
                ProductCode = string.IsNullOrEmpty(txtCode.Text) ? "" : txtCode.Text.ToLower(),
                ProductName = string.IsNullOrEmpty(txtName.Text) ? "" : txtName.Text.ToLower(),
                ProductTypeId = cbProductTypes.SelectedValue != null && cbProductTypes.SelectedIndex > 0 ? (int)cbProductTypes.SelectedValue : (int?)null
            };

            ProductService productService = new ProductService();
            List<Product> products = productService.SearchingProduct(productSearchCriteria);
            if (products != null)
            {
                setUpDataGrid(products);
                lblTotalResult.Text = products.Count.ToString();
            }
        }
        private void dgvProductList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (sender is DataGridView)
            {
                DataGridViewCell cell = ((DataGridView)sender).CurrentCell;
                if (cell.ColumnIndex == ((DataGridView)sender).ColumnCount - 1)
                {
                    DialogResult result = MessageBox.Show("Bạn có muốn xóa sản phẩm này?",
                    "Xoá sản phẩm này",
                     MessageBoxButtons.YesNo,
                    MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        DataGridViewRow currentRow = dgvProductList.Rows[e.RowIndex];

                        ProductService productService = new ProductService();
                        int id = ObjectHelper.GetValueFromAnonymousType<int>(currentRow.DataBoundItem, "Id");
                        ProductLogService productLogService = new ProductLogService();
                        ProductLog log = productLogService.GetProductLogs().Where(p => p.ProductId == id && p.Status == BHConstant.ACTIVE_STATUS).FirstOrDefault();
                        if (log == null)
                        {
                            if (!productService.DeleteProduct(id))
                            {
                                MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Sản phẩm này còn trong kho nên không thể xóa được!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                        loadProductList();
                    }

                }

            }
        }
 private string getProductCode(int productID)
 {
     string result = string.Empty;
     ProductService productService = new ProductService();
     Product p = productService.GetProduct(productID);
     if (p != null)
         result = p.ProductCode;
     return result;
 }
        private void AddProduct_Load(object sender, EventArgs e)
        {
            ProductService productService = new ProductService();
            products = productService.GetProducts();

            productLogService = new ProductLogService();
            loadSomeData();
            SetupColumns();

            oldAttr = new List<int>();
            if (mode == 1) // Load data grid
            {
                List<ProductAttribute> pas = product.ProductAttributes.ToList<ProductAttribute>();
                oldAttr = pas.Select(x => x.AttributeId).ToList();
                foreach (DataGridViewRow dgv in dgvBaseAttributes.Rows)
                {
                    DataGridViewCheckBoxCell checkbox = (DataGridViewCheckBoxCell)dgvBaseAttributes.Rows[dgv.Index].Cells[0];
                    checkbox.Value = "0";
                    foreach (ProductAttribute pa in pas)
                    {
                        if ((BaseAttribute)dgv.DataBoundItem == pa.BaseAttribute)
                        {
                            checkbox.Value = "1";
                            if (productLogService.GetNewestProductLog(product.Id, pa.AttributeId) != null)
                            {
                                checkbox.FlatStyle = FlatStyle.Flat;
                                checkbox.Style.ForeColor = Color.DarkGray;
                                checkbox.ReadOnly = true;
                                checkbox.ToolTipText = "Thuộc tính của sản phẩm đang được sử dụng";
                            }
                            break;
                        }
                    }
                }
            }

            var product_codes = new AutoCompleteStringCollection();
            product_codes.AddRange(products.Select(x => x.ProductCode).ToArray());
            txtCode.AutoCompleteCustomSource = product_codes;
            txtCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            txtCode.AutoCompleteSource = AutoCompleteSource.CustomSource;
        }
 public void loadDataForEditProduct(int productId)
 {
     this.Text = "Chỉnh sửa sản phẩm này";
     this.btnAdd.Text = "Cập nhật";
     
     ProductService productTypeService = new ProductService();
     product = productTypeService.GetProduct(productId);
     loadSomeData();
     if (product != null)
     {
         mode = 1; // Edit mode
         if (productTypes != null)
         {
             cmbType.SelectedIndex = productTypes.FindIndex(p => p.Id == product.ProductType);
         }
         //dgvBaseAttributes.Enabled = false;
         txtDescription.Text = product.Description;
         txtCode.Text = product.ProductCode;
         txtName.Text = product.ProductName;                
     }
 }
        private void LoadAttributes(int productId)
        {
            if (productId == 0)
            {
                cbmAttrs.Enabled = false;
                cbmAttrs.SelectedValue = 0;
                cbmUnits.Enabled = false;
                cbmUnits.SelectedValue = 0;
            }
            else
            {
                cbmAttrs.Enabled = true;
                BaseAttributeService attrService = new BaseAttributeService();
                BaseAttribute ba = new BaseAttribute
                {
                    AttributeName = "Tất cả",
                    Id = 0
                };

                ProductService productService = new ProductService();
                Product p = productService.GetProduct(productId);
                List<ProductAttribute> pas = p.ProductAttributes.ToList();
                attrs = new List<BaseAttribute>();
                attrs.Add(ba);
                foreach (ProductAttribute pa in pas)
                {
                    attrs.Add(pa.BaseAttribute);
                }
                attrs = attrs.OrderBy(a => a.Id).ToList();
                if (attrs != null)
                {
                    cbmAttrs.DataSource = attrs;
                    cbmAttrs.DisplayMember = "AttributeName";
                    cbmAttrs.ValueMember = "Id";
                }
                LoadUnits(productId, 0);
            }
        }
 private void LoadProducts(int productTypeId)
 {
     if (productTypeId == 0)
     {
         cbmProducts.Enabled = false;
         cbmProducts.SelectedValue = 0;
         cbmAttrs.Enabled = false;
         cbmAttrs.SelectedValue = 0;
         cbmUnits.Enabled = false;
         cbmUnits.SelectedValue = 0;
     }
     else
     {
         cbmProducts.Enabled = true;
         ProductService productService = new ProductService();
         Product product = new Product
         {
             ProductName = "Tất cả",
             Id = 0
         };
         products = productService.GetProducts().Where(p => p.ProductType == productTypeId).ToList();
         products.Add(product);
         products = products.OrderBy(p => p.Id).ToList();
         if (products != null)
         {
             cbmProducts.DataSource = products;
             cbmProducts.DisplayMember = "ProductName";
             cbmProducts.ValueMember = "Id";
         }
         LoadAttributes(0);
     }
 }
        private void dgvProductTypeList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (sender is DataGridView)
            {
                DataGridViewCell cell = ((DataGridView)sender).CurrentCell;
                if (cell.ColumnIndex == ((DataGridView)sender).ColumnCount - 1)
                {
                    DialogResult result = MessageBox.Show("Bạn có muốn xóa loại sản phẩm này?",
                    "Xoá loại sản phẩm này",
                     MessageBoxButtons.YesNo,
                    MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        DataGridViewRow currentRow = dgvProductTypeList.Rows[e.RowIndex];

                        int id = ObjectHelper.GetValueFromAnonymousType<int>(currentRow.DataBoundItem, "Id");
                        ProductService productService = new ProductService();
                        ProductTypeService producTypeService = new ProductTypeService();
                        List<Product> productList = productService.SelectProductByWhere(pt => pt.ProductType == id);
                        if (productList.Count > 0)
                        {
                            MessageBox.Show("Loại này hiện có nhiều sản phẩm. Không xóa được!");
                        }
                        else
                        {
                            if (!producTypeService.DeleteProductType(id))
                            {
                                MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            loadProductTypeList();
                        }
                    }
                    
                }
                
            }
            
        }