コード例 #1
0
 /// <summary>
 /// Метод проверяет, хватает ли остатка товара
 /// при добавлении указанного количества товара в чек, если хватает, то из
 /// базы данных вычитается это количество.
 /// </summary>
 /// <param name="product">Продукт, остаток которого необходимо проверить.</param>
 /// <returns>Признак успешности выполнения операции.</returns>
 public static bool Check(Product product)
 {
     try
     {
         using (var db = new KassaDBContext())
         {
             var productInDB = db.Product.Where(p => p.Name == product.Name).FirstOrDefault();
             //если количество выбранного товара меньше либо равно остатку
             if (product.Quantity <= productInDB.Quantity)
             {
                 if (productInDB.Type == 1)                        //услуги не отслеживаются, только товары
                 {
                     //вычесть количество из остатков в бд
                     productInDB.Quantity -= product.Quantity;
                     db.SaveChanges();
                 }
                 return(true);
             }
             else
             {
                 MessageBox.Show("Недостаточно товара в наличии!" +
                                 $"\nТовар: {productInDB.Name}" +
                                 $"\nОстаток: {productInDB.Quantity}");
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
     return(false);
 }
コード例 #2
0
ファイル: ChooseProduct.cs プロジェクト: ILYA-PP/Kassa
 /// <summary>
 /// Метод выводит результат поиска в таблицу формы.
 /// Если результат поиска равен null выводятся все продукты.
 /// </summary>
 /// <param name="products">Массив, содержащий найденные продукты.</param>
 private void ViewResult(IQueryable <Product> products)
 {
     using (var db = new KassaDBContext())
     {
         productsDGV.Rows.Clear();
         //если в метод не переданы данные для вывода
         //то выводится информация о всех товарах
         if (products == null)
         {
             foreach (Product p in db.Product)
             {
                 productsDGV.Rows.Add(p.Name, p.Quantity, p.Price,
                                      p.Discount, p.NDS, p.Row_Summ);
                 if (p.ShelfLife != new DateTime(1901, 1, 1) && p.ShelfLife < DateTime.Now)
                 {
                     productsDGV.Rows[productsDGV.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Red;
                 }
             }
         }
         else
         {
             foreach (Product p in products)
             {
                 productsDGV.Rows.Add(p.Name, p.Quantity, p.Price,
                                      p.Discount, p.NDS, p.Row_Summ);
                 if (p.ShelfLife != new DateTime(1901, 1, 1) && p.ShelfLife < DateTime.Now)
                 {
                     productsDGV.Rows[productsDGV.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Red;
                 }
             }
         }
     }
 }
コード例 #3
0
 /// <summary>
 /// Метод отвечает за восстановление остатков товаров чеков,
 /// в случае, если они не были отмечены в базе данных,
 /// как оплаченные.
 /// </summary>
 public static void ReconciliationAll()
 {
     try
     {
         using (var db = new KassaDBContext())
         {
             var receipts = db.Receipt.Where(r => r.Paid == false);
             foreach (var r in receipts)
             {
                 if (r.Summa == 0 || new Recovery(r).ShowDialog() == DialogResult.No)
                 {
                     Reconciliation(r);
                 }
                 else
                 {
                     r.Paid = true;
                 }
             }
             db.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
 }
コード例 #4
0
ファイル: ChooseProduct.cs プロジェクト: ILYA-PP/Kassa
 /// <summary>
 /// Метод обрабатывает ввод текста в textBox.
 /// Формирует массив значений, подходящих под параметры запроса.
 /// </summary>
 /// <param name="sender">Объект, вызвавщий метод.</param>
 /// <param name="e">Аргументы события.</param>
 private void searchTB_TextChanged(object sender, EventArgs e)
 {
     using (var db = new KassaDBContext())
     {
         //получение продуктов название которых
         //содержит введённый в поисковую строку текст
         var products = db.Product.Where(p => p.Name.Contains(searchTB.Text));
         ViewResult(products);
     }
 }
コード例 #5
0
ファイル: ViewReports.cs プロジェクト: ILYA-PP/Kassa
 /// <summary>
 /// Метод отвечает за поиск отчётов по имени.
 /// </summary>
 /// <param name="name">Название отчёта</param>
 private void NameFilter(string name)
 {
     using (var db = new KassaDBContext())
     {
         //получение отчётов название которых
         //содержит введённый в поисковую строку текст
         var reports = db.Report.Where(p => p.Name.Contains(name));
         ViewResult(reports);
     }
 }
コード例 #6
0
ファイル: ViewReports.cs プロジェクト: ILYA-PP/Kassa
 /// <summary>
 /// Метод обрабатывает выбор даты в dateTimePicker.
 /// Формирует массив значений, сохранённых в выбранную дату.
 /// </summary>
 /// <param name="sender">Объект, вызвавщий метод.</param>
 /// <param name="e">Аргументы события.</param>
 private void dateSearchDTP_ValueChanged(object sender, EventArgs e)
 {
     using (var db = new KassaDBContext())
     {
         //получение отчётов дата добавления которых
         //равна выбранной дате
         var reports = db.Report.Where(r => r.Date.Year == dateSearchDTP.Value.Year &&
                                       r.Date.Month == dateSearchDTP.Value.Month &&
                                       r.Date.Day == dateSearchDTP.Value.Day &&
                                       r.Name.Contains(typeCB.SelectedItem.ToString()));
         ViewResult(reports);
     }
 }
コード例 #7
0
 /// <summary>
 /// Метод отвечает сохранение отчётов в базу данных.
 /// </summary>
 /// <param name="reportName">Имя отчёта.</param>
 /// <param name="template">Шаблон отчёта.</param>
 private void SaveReport(string reportName, string template = null)
 {
     //получить статус ккт
     ExecuteAndHandleError(Driver.FNGetStatus);
     //получить текст отчёта
     if (template != null || ExecuteAndHandleError(Driver.FNGetDocumentAsString, true) == 0)
     {
         try
         {
             using (var db = new KassaDBContext())
             {
                 string d = null;
                 //сохранение шаблона
                 //иначе готовый отчёт
                 if (template != null)
                 {
                     d = template;
                 }
                 else if (Driver.StringForPrinting != null)
                 {
                     d = Driver.StringForPrinting;
                 }
                 if (d != null)
                 {
                     byte[] data   = Encoding.Default.GetBytes(d);//перевод отчёта в байты
                     Report report = new Report()
                     {
                         Name       = reportName,
                         ReportData = data,
                         Date       = DateTime.Now
                     };
                     db.Report.Add(report); //добавление отчёта
                     db.SaveChanges();      //сохранение отчёта
                     GetMessage($"Отчёт \"{reportName}\" сохранён!");
                 }
             }
         }
         catch (DbEntityValidationException dbEx)
         {
             foreach (var validationErrors in dbEx.EntityValidationErrors)
             {
                 foreach (var validationError in validationErrors.ValidationErrors)
                 {
                     GetMessage($"Property: {validationError.PropertyName} Error: {validationError.ErrorMessage}");
                 }
             }
         }
     }
 }
コード例 #8
0
ファイル: Recovery.cs プロジェクト: ILYA-PP/Kassa
 /// <summary>
 /// Конструктор класса.
 /// Выполняет инициализацию формы и первичное заполнение таблицы товаров
 /// для восстановления.
 /// </summary>
 public Recovery(Receipt receipt)
 {
     InitializeComponent();
     Receipt     = receipt;
     totalL.Text = string.Format("Итог по чеку: {0:f}", receipt.Summa);
     using (var db = new KassaDBContext())
     {
         foreach (var purchase in receipt.Purchase)
         {
             var product = db.Product.Where(prod => prod.Id == purchase.ProductId).FirstOrDefault();
             product.Quantity = purchase.Count;
             product.Row_Summ = purchase.Summa;
             Product.RowFromProduct(product, receiptDGV);
         }
     }
 }
コード例 #9
0
 /// <summary>
 /// Метод отвечает за восстановление остатков товара,
 /// в случае, если чек не был оплачен или товар удалён из чека.
 /// </summary>
 /// <param name="id">ID продукта, остаток которого необходимо проверить.</param>
 /// <param name="count">Количество продукта, которое необходимо восстановить.</param>
 /// <returns>Признак успешности выполнения операции.</returns>
 public static bool Recover(int id, int count)
 {
     try
     {
         using (var db = new KassaDBContext())
         {
             var productInDB = db.Product.Where(p => p.Id == id).FirstOrDefault();
             if (productInDB.Type == 1)
             {
                 //прибавить количество к остаткам в бд
                 productInDB.Quantity += count;
                 db.SaveChanges();
             }
             return(true);
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
     return(false);
 }
コード例 #10
0
 /// <summary>
 /// Метод отвечает за восстановление остатков товаров чека,
 /// в случае, если товары были добавлены в чек, но не были
 /// удалены из него до закрытия приложения.
 /// </summary>
 /// <param name="receipt">Чек, остатки продуктов
 /// которого необходимо восстановить.</param>
 public static void Reconciliation(Receipt receipt)
 {
     try
     {
         using (var db = new KassaDBContext())
         {
             foreach (Product p in receipt.Products)
             {
                 Recover(p.Id, p.Quantity);                        //восстановление остатков товара
             }
             if (receipt != null)
             {
                 //удаление чека из бд
                 db.Receipt.Remove(db.Receipt.Where(r => r.Id == receipt.Id).FirstOrDefault());
                 db.SaveChanges();
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
 }
コード例 #11
0
ファイル: ViewReports.cs プロジェクト: ILYA-PP/Kassa
 /// <summary>
 /// Метод выводит результат поиска в таблицу формы.
 /// Если результат поиска равен null выводятся все отчёты.
 /// </summary>
 /// <param name="reports">Массив, содержащий найденные отчёты.</param>
 private void ViewResult(IQueryable <Report> reports)
 {
     using (var db = new KassaDBContext())
     {
         reportsDGV.Rows.Clear();
         //если в метод не переданы данные для вывода
         //то выводится информация о всех отчётах
         if (reports == null)
         {
             foreach (Report p in db.Report)
             {
                 reportsDGV.Rows.Add(p.Name, p.ReportData, p.Date);
             }
         }
         else
         {
             foreach (Report p in reports)
             {
                 reportsDGV.Rows.Add(p.Name, p.ReportData, p.Date);
             }
         }
     }
 }
コード例 #12
0
ファイル: ChooseProduct.cs プロジェクト: ILYA-PP/Kassa
 /// <summary>
 /// Метод обрабатывает нажатие кнопки Ввод.
 /// Отвечает за вывод выбранного продукта в таблицу формы Main.
 /// </summary>
 /// <param name="sender">Объект, вызвавщий метод.</param>
 /// <param name="e">Аргументы события.</param>
 private void enterB_Click(object sender, EventArgs e)
 {
     try
     {
         using (var db = new KassaDBContext())
         {
             Product  product;
             Purchase purchase;
             //если продукт выбран
             if (productsDGV.SelectedRows.Count > 0)
             {
                 foreach (DataGridViewRow r in productsDGV.SelectedRows)
                 {
                     //формирование продукта из строки DataGridView
                     product = Product.ProductFromRow(r, null);
                     if (product.ShelfLife < DateTime.Now)
                     {
                         if (MessageBox.Show($"Срок годности товара \"{product.Name}\" истёк {product.ShelfLife:dd.MM.yyyy}!\n\n" +
                                             $"Действительно добавить товар в чек?", "Предупреждение", MessageBoxButtons.YesNo) == DialogResult.No)
                         {
                             return;
                         }
                     }
                     if (product != null)
                     {
                         product.Quantity = (int)countNUD.Value;
                         product.RowSummCalculate();
                         //если количество не превышает остаток
                         if (CountController.Check(product))
                         {
                             bool added = false;
                             //перебор содержимого состава чека на форме Main
                             foreach (Product p in ((Main)Owner).receipt.Products)
                             {
                                 //если товар уже добавлен в чек новая позиция не создаётся
                                 if (p.Name == product.Name)
                                 {
                                     if (p.Type == 1)//учитываются только товары, без услуг
                                     {
                                         //обновляется запись в БД в таблице Purchase
                                         var oldP = db.Purchase.Where(pur => pur.ProductId == p.Id && pur.ReceiptId == ((Main)Owner).receipt.Id).FirstOrDefault();
                                         oldP.Count += product.Quantity;
                                         oldP.Summa += product.Row_Summ;
                                         //к существующей позиции добавляется количество и сумма
                                         p.Quantity += product.Quantity;
                                         p.Row_Summ += product.Row_Summ;
                                         ((Main)Owner).DGV_Refresh();
                                         db.SaveChanges();
                                     }
                                     added = true;
                                 }
                             }
                             //если товар не добавлен
                             if (!added)
                             {
                                 //создаётся новая позиция в чеке
                                 ((Main)Owner).receipt.Products.Add(product);
                                 ((Main)Owner).DGV_Refresh();
                                 //данные добавляются в БД в таблицу Purchase
                                 purchase = new Purchase()
                                 {
                                     ProductId = product.Id,
                                     Count     = product.Quantity,
                                     Summa     = product.Row_Summ,
                                     Date      = DateTime.Now,
                                     ReceiptId = ((Main)Owner).receipt.Id,
                                     Receipt   = db.Receipt.Where(rec => rec.Id == ((Main)Owner).receipt.Id).FirstOrDefault()
                                 };
                                 ((Main)Owner).receipt.Purchase.Add(purchase);
                                 db.Purchase.Add(purchase);
                                 db.SaveChanges();
                             }
                             //обновление данных формы
                             ViewResult(null);
                             Close();
                         }
                     }
                 }
             }
             else
             {
                 MessageBox.Show("Строка не выбрана!");
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
 }