private void PlusButton_Click(object sender, EventArgs e) { var panel = OrderTableLayoutPanel; int rowIndex = OrderTableLayoutPanel.GetPositionFromControl((Button)sender).Row; var value = Int32.Parse(panel.GetControlFromPosition(1, rowIndex).Text); var product = products.Find(x => x.Name.Equals(panel.GetControlFromPosition(0, rowIndex).Text)); var price = product.Price; if (productsDiscountAmount.Keys.Any(m => m.Item1.Id == product.Id)) { for (int i = 0; i < productsDiscountAmount.Count; i++) { var discount = productsDiscountAmount.ElementAt(i); if (discount.Key.Item1.Id == product.Id) { var disc = discount.Value / (Int32.Parse(panel.GetControlFromPosition(1, rowIndex).Text)); panel.GetControlFromPosition(2, rowIndex).Text = (Convert.ToDouble(panel.GetControlFromPosition(2, rowIndex).Text, nfi) + price - disc).ToString(nfi); productsDiscountAmount[discount.Key] += disc; } } } else { panel.GetControlFromPosition(2, rowIndex).Text = (Convert.ToDouble(panel.GetControlFromPosition(2, rowIndex).Text, nfi) + price).ToString(nfi); } panel.GetControlFromPosition(1, rowIndex).Text = (value + 1).ToString(); orderProducts.Find(x => x.Name.Equals(product.Name)).Count++; UpdateSumTextBox(); }
private void ApplyDiscount(Product product, Discount discount, double?discountAmount) { double?newValue; var panel = OrderTableLayoutPanel; for (int i = 1; i < panel.RowCount; i++) { if (OrderTableLayoutPanel.GetControlFromPosition(0, i).Text == product.Name) { var oldPrice = Convert.ToDouble(OrderTableLayoutPanel.GetControlFromPosition(2, i).Text, nfi); int amount = Int32.Parse(OrderTableLayoutPanel.GetControlFromPosition(1, i).Text); if (discountAmount < 0) { newValue = 0; discountAmount = Convert.ToDouble(OrderTableLayoutPanel.GetControlFromPosition(2, i).Text, nfi); productsDiscountAmount.Add(new Tuple <Product, Discount>(product, discount), Convert.ToDouble(discountAmount, nfi)); } else { newValue = amount * discountAmount; productsDiscountAmount.Add(new Tuple <Product, Discount>(product, discount), Convert.ToDouble(oldPrice - newValue, nfi)); } OrderTableLayoutPanel.GetControlFromPosition(2, i).Text = Convert.ToDouble(newValue).ToString(nfi); } } }
private void RemoveDiscount(Product product, Discount discount) { var panel = OrderTableLayoutPanel; double value; Tuple <Product, Discount> tuple = new Tuple <Product, Discount>(product, discount); if (productsDiscountAmount.Keys.Contains(tuple)) { value = productsDiscountAmount[tuple]; for (int i = 1; i < panel.RowCount; i++) { if (OrderTableLayoutPanel.GetControlFromPosition(0, i).Text == product.Name) { double newValue = Convert.ToDouble(OrderTableLayoutPanel.GetControlFromPosition(2, i).Text, nfi) + value; OrderTableLayoutPanel.GetControlFromPosition(2, i).Text = Convert.ToDouble(newValue).ToString(nfi); productsDiscountAmount.Remove(tuple); } } } }
private void DeleteButton_Click(object sender, EventArgs e) { var panel = OrderTableLayoutPanel; int rowIndex = OrderTableLayoutPanel.GetPositionFromControl((Button)sender).Row; Product product = orderProducts.Find(x => x.Name == panel.GetControlFromPosition(0, rowIndex).Text); orderProducts.Remove(product); for (int i = 0; i < DiscountList.Items.Count; i++) { Discount discount = (Discount)DiscountList.Items[i]; bool containsFlag = false; if (discount.Products.Any(m => m.Id == product.Id)) { foreach (var pr in discount.Products) { if (orderProducts.Any(m => m.Id == pr.Id)) { containsFlag = true; break; } } if (containsFlag) { var tuple = productsDiscountAmount.FirstOrDefault(x => x.Key.Item1.Id == product.Id && x.Key.Item2.Id == discount.Id); if (tuple.Key != null) { productsDiscountAmount.Remove(tuple.Key); } } else { DiscountList.SetItemCheckState(i, CheckState.Indeterminate); var tuple = productsDiscountAmount.FirstOrDefault(x => x.Key.Item1.Id == product.Id && x.Key.Item2.Id == discount.Id); if (tuple.Key != null) { productsDiscountAmount.Remove(tuple.Key); } } } } // delete all controls of row that we want to delete for (int i = 0; i < panel.ColumnCount; i++) { var control = panel.GetControlFromPosition(i, rowIndex); panel.Controls.Remove(control); } // move up row controls that comes after row we want to remove for (int i = rowIndex + 1; i < panel.RowCount; i++) { for (int j = 0; j < panel.ColumnCount; j++) { var control = panel.GetControlFromPosition(j, i); if (control != null) { panel.SetRow(control, i - 1); } } } var removeStyle = panel.RowCount - 1; if (panel.RowStyles.Count > removeStyle) { panel.RowStyles.RemoveAt(removeStyle); } panel.RowCount--; UpdateSumTextBox(); }
private void ProductsListView_DoubleClick(object sender, EventArgs e) { var item = ProductsListView.SelectedItems[0]; if (!OrderContains(item.Text)) { Button delButton = new DeleteButtonClass().DeleteButton; delButton.Click += new System.EventHandler(this.DeleteButton_Click); Button plusButton = new PlusButtonClass().PlusButton; plusButton.Click += new System.EventHandler(this.PlusButton_Click); Button minusButton = new MinusButtonClass().MinusButton; minusButton.Click += new System.EventHandler(this.MinusButton_Click); this.OrderTableLayoutPanel.RowCount += 1; this.OrderTableLayoutPanel.Controls.Add(new Label() { Width = 200, Font = new Font("Century Gothic", 14), Text = item.SubItems[0].Text }, 0, this.OrderTableLayoutPanel.RowCount - 1); this.OrderTableLayoutPanel.Controls.Add(new Label() { Font = new Font("Century Gothic", 14), Text = "1" }, 1, this.OrderTableLayoutPanel.RowCount - 1); this.OrderTableLayoutPanel.Controls.Add(new Label() { Font = new Font("Century Gothic", 14), Text = item.SubItems[1].Text }, 2, this.OrderTableLayoutPanel.RowCount - 1); this.OrderTableLayoutPanel.Controls.Add(minusButton, 3, this.OrderTableLayoutPanel.RowCount - 1); this.OrderTableLayoutPanel.Controls.Add(plusButton, 4, this.OrderTableLayoutPanel.RowCount - 1); this.OrderTableLayoutPanel.Controls.Add(delButton, 5, this.OrderTableLayoutPanel.RowCount - 1); var product = products.Find(x => x.Name.Equals(item.Text)); orderProducts.Add(new Product(product.Id, product.Name, 1)); foreach (var discount in discounts) { foreach (var p in discount.Products) { if (p.Id == product.Id) { int index = DiscountList.Items.IndexOf(discount); DiscountList.SetItemCheckState(index, CheckState.Unchecked); } } } } else { for (int rowIndex = 1; rowIndex < OrderTableLayoutPanel.RowCount; rowIndex++) { if (OrderTableLayoutPanel.GetControlFromPosition(0, rowIndex).Text == item.Text) { var product = products.Find(x => x.Name.Equals(item.Text)); var price = product.Price; if (productsDiscountAmount.Keys.Any(m => m.Item1.Id == product.Id)) { for (int i = 0; i < productsDiscountAmount.Count; i++) { var discount = productsDiscountAmount.ElementAt(i); if (discount.Key.Item1.Id == product.Id) { var disc = discount.Value / (Int32.Parse(OrderTableLayoutPanel.GetControlFromPosition(1, rowIndex).Text)); OrderTableLayoutPanel.GetControlFromPosition(2, rowIndex).Text = (Convert.ToDouble(OrderTableLayoutPanel.GetControlFromPosition(2, rowIndex).Text, nfi) + price - disc).ToString(nfi); productsDiscountAmount[discount.Key] += disc; OrderTableLayoutPanel.GetControlFromPosition(1, rowIndex).Text = (Int32.Parse(OrderTableLayoutPanel.GetControlFromPosition(1, rowIndex).Text) + 1).ToString(); } } } else { OrderTableLayoutPanel.GetControlFromPosition(1, rowIndex).Text = (Int32.Parse(OrderTableLayoutPanel.GetControlFromPosition(1, rowIndex).Text) + 1).ToString(); OrderTableLayoutPanel.GetControlFromPosition(2, rowIndex).Text = (Double.Parse(OrderTableLayoutPanel.GetControlFromPosition(1, rowIndex).Text, nfi) * product.Price).ToString(nfi); } orderProducts.Find(x => x.Name.Equals(item.Text)).Count++; } } } UpdateSumTextBox(); }