Example #1
0
        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();
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
                    }
                }
            }
        }
Example #4
0
        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();
        }
Example #5
0
        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();
        }