/// <summary> /// Метод обрабатывает нажатие кнопки Удалить. /// Отвечает за удаление записи таблицы. /// </summary> /// <param name="sender">Объект, вызвавщий метод.</param> /// <param name="e">Аргументы события.</param> private void deleteB_Click(object sender, EventArgs e) { //если строка выбрана if (receiptDGV.SelectedRows.Count > 0) { //формирование удаляемого продукт из строки Product product = Product.ProductFromRow(receiptDGV.SelectedRows[0], receipt); //вывод диалогового окна if (product != null && MessageBox.Show("Вы действительно хотите удалить строку:\n" + $"| {product.Name} | {product.Quantity} | {product.Price} | " + $"{product.Row_Summ} |", "", MessageBoxButtons.YesNo) == DialogResult.Yes) { using (var db = new KassaDBContext()) { //удаление из БД из таблицы Purchase var purchase = db.Purchase.Where(p => p.ProductId == product.Id && p.ReceiptId == receipt.Id).FirstOrDefault(); db.Purchase.Remove(purchase); db.SaveChanges(); //удаление из состава чека receipt.Purchase.Remove(purchase); receipt.Products.Remove(product); receipt.CalculateSumm(); //удаление из DataGridView receiptDGV.Rows.Remove(receiptDGV.SelectedRows[0]); //восстановление остатка CountController.Recover(product.Id, product.Quantity); } } } }
/// <summary> /// Метод формирует объект класса Product из строки DataGridView. /// </summary> /// <param name="row">Строка с данными.</param> /// <param name="receipt">Текущий чек.</param> /// <returns>Сформированный продукт.</returns> public static Product ProductFromRow(DataGridViewRow row, Receipt receipt) { try { Product product; //если продукт уже есть в составе чека if (receipt != null) { product = receipt.Products.Where(p => p.Name == row.Cells["nameCol"].Value.ToString()).FirstOrDefault(); } else { using (var db = new KassaDBContext()) { string name = row.Cells["nameCol"].Value.ToString(); int count = int.Parse(row.Cells["countCol"].Value.ToString()); product = db.Product.Where(p => p.Name == name).FirstOrDefault(); product.Quantity = count; product.RowSummCalculate(); } } return(product); } catch (Exception ex) { MessageBox.Show(TextFormat.GetExceptionMessage(ex)); return(null); } }
/// <summary> /// Метод обрабатывает событие загрузки формы. /// Отвечает вызов сравнения остатков и создание объекта чека. /// </summary> /// <param name="sender">Объект, вызвавщий метод.</param> /// <param name="e">Аргументы события.</param> private void Main_Load(object sender, EventArgs e) { //сверка остатков по всем товарам CountController.ReconciliationAll(); //добавление нового чека в БД в таблицу Receipt using (var db = new KassaDBContext()) { receipt = new Receipt(); receipt = db.Receipt.Add(receipt); db.SaveChanges(); timer.Start(); } }
/// <summary> /// Метод обрабатывает нажатие кнопки Ввод. /// Отвечает за проверку корректности и сохранение изменённых данных. /// </summary> /// <param name="sender">Объект, вызвавщий метод.</param> /// <param name="e">Аргументы события.</param> private void addProductB_Click(object sender, EventArgs e) { try { using (var db = new KassaDBContext()) { if (countNUD.Value != 0 && discountTB.Text != "") { //создание продукта с изменёнными данными Product product = new Product() { Id = OldProduct.Id, Name = OldProduct.Name, Quantity = (int)countNUD.Value, Price = OldProduct.Price, Discount = double.Parse(discountTB.Text), NDS = OldProduct.NDS, Department = (int)departmentNUD.Value, Type = OldProduct.Type }; product.RowSummCalculate(); product.Quantity -= OldProduct.Quantity; //если изменённое количесвто не превышает остаток if (CountController.Check(product)) { product.Quantity += OldProduct.Quantity; //изменение данных на форме Main int index = ((Main)Owner).receipt.Products.IndexOf( ((Main)Owner).receipt.Products.Where(p => p.Name == product.Name).FirstOrDefault()); ((Main)Owner).receipt.Products[index] = product; ((Main)Owner).DGV_Refresh(); //обновление данных в БД в таблице Purchase var oldP = db.Purchase.Where(pur => pur.ProductId == product.Id && pur.ReceiptId == ((Main)Owner).receipt.Id).FirstOrDefault(); oldP.Count = product.Quantity; oldP.Summa = (decimal)product.Row_Summ; db.SaveChanges(); } Close(); } else { MessageBox.Show("Заполните все данные о товаре!"); } } } catch (Exception ex) { MessageBox.Show(TextFormat.GetExceptionMessage(ex)); } }
/// <summary> /// Метод остаток товара. /// </summary> /// <returns>Остаток товара.</returns> public int GetBalance() { try { using (var db = new KassaDBContext()) { return(db.Product.Where(p => p.Id == Id).FirstOrDefault().Quantity); } } catch (Exception ex) { MessageBox.Show(TextFormat.GetExceptionMessage(ex)); } return(-1); }
/// <summary> /// Метод отвечает за отметку чека, как оплаченного, в базе данных. /// </summary> private void MarkAsPaid() { try { using (var db = new KassaDBContext()) { var rec = db.Receipt.Where(r => r.Id == CurrentReceipt.Id).FirstOrDefault(); rec.Paid = true; //признак оплаты чека db.SaveChanges(); } } catch (Exception ex) { MessageBox.Show(TextFormat.GetExceptionMessage(ex)); } }
/// <summary> /// Метод обрабатывает событие закрытия формы. /// Отвечает за удаление старого и создание нового чека /// при отказе работать с текущими позициями. /// </summary> /// <param name="sender">Объект, вызвавщий метод.</param> /// <param name="e">Аргументы события.</param> private void Payment_FormClosing(object sender, FormClosingEventArgs e) { using (var db = new KassaDBContext()) { //если в диалоговом окне выбрано Нет if (MessageBox.Show("Продолжить работу с этими позициями?", "", MessageBoxButtons.YesNo) == DialogResult.No) { ((Main)Owner).receipt = new Receipt(); ((Main)Owner).receiptDGV.Rows.Clear(); //очистка таблицы на главной форме var r = db.Receipt.Where(p => p.Id == CurrentReceipt.Id && p.Paid == false).FirstOrDefault(); if (r != null) { CountController.Reconciliation(CurrentReceipt); //сверка остатков } db.Receipt.Add(((Main)Owner).receipt); //добавление нового чека db.SaveChanges(); } } }
/// <summary> /// Метод отвечает сохранение данных по чеку в базе данных. /// </summary> private void InsertData() { try { using (var db = new KassaDBContext()) { var rec = db.Receipt.Where(r => r.Id == CurrentReceipt.Id).FirstOrDefault(); rec.Discount = CurrentReceipt.Discount; //скидка на чек rec.Summa = CurrentReceipt.Summa; //сумма по чеку rec.Payment = CurrentReceipt.Payment; //способ оплаты rec.DiscountCard = CurrentReceipt.DiscountCard; //дк db.SaveChanges(); } } catch (Exception ex) { MessageBox.Show(TextFormat.GetExceptionMessage(ex)); } }