示例#1
0
文件: Product.cs 项目: ILYA-PP/Kassa
 /// <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);
     }
 }
示例#2
0
文件: Product.cs 项目: ILYA-PP/Kassa
 /// <summary>
 /// Метод формирует строку DataGridView из объекта класса Product.
 /// </summary>
 /// <param name="product">Продукт из которого будет сформирована строка.</param>
 /// <param name="dgv">DataGridView в который будет добавлена строка.</param>
 public static void RowFromProduct(Product product, DataGridView dgv)
 {
     try
     {
         dgv.Rows.Add(product.Name, product.Quantity, product.Price, product.Discount, product.NDS, product.Row_Summ);
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
 }
示例#3
0
 /// <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));
     }
 }
示例#4
0
文件: Product.cs 项目: ILYA-PP/Kassa
 /// <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);
 }
示例#5
0
文件: Payment.cs 项目: ILYA-PP/Kassa
 /// <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));
     }
 }
示例#6
0
文件: Payment.cs 项目: ILYA-PP/Kassa
 /// <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));
     }
 }
示例#7
0
 /// <summary>
 /// Метод обрабатывает нажатие кнопки Настройка.
 /// Устанавливает настройки для фискального регистратора.
 /// </summary>
 /// <param name="sender">Объект, вызвавщий метод.</param>
 /// <param name="e">Аргументы события.</param>
 private void registrSettingsB_Click(object sender, EventArgs e)
 {
     try
     {
         var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
         if (comPortTB.Text != "" && exchangeSpeedTB.Text != "")
         {
             config.AppSettings.Settings["ComNumber"].Value = comPortTB.Text;       //изменение сом порта
             config.AppSettings.Settings["BaudRate"].Value  = exchangeSpeedTB.Text; // изменение скорости обмена
             config.Save();
             ConfigurationManager.RefreshSection("appSettings");                    //сохранение изменений
             MessageBox.Show("Настройки сохранены!");
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
 }
示例#8
0
 private Product OldProduct; //переданная строка для изменения
 /// <summary>
 /// Конструктор класса.
 /// Выполняет инициализацию формы и заполнение данных для редактирования.
 /// </summary>
 /// <param name="row">Строка, которую надо изменить.</param>
 public EditProduct(DataGridViewRow row)
 {
     InitializeComponent();
     OldProduct = Product.ProductFromRow(row, null);
     try
     {
         if (OldProduct != null)
         {
             //установка полученных данных в поля формы
             receiptDGV.Visible = true;
             countNUD.Value     = OldProduct.Quantity;
             discountTB.Text    = string.Format("{0:f}", OldProduct.Discount);
             receiptDGV.Rows.Add(OldProduct.Name, OldProduct.Quantity,
                                 OldProduct.Price, OldProduct.Discount, OldProduct.NDS, OldProduct.Row_Summ);
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
 }
示例#9
0
文件: Payment.cs 项目: ILYA-PP/Kassa
 /// <summary>
 /// Метод обрабатывает нажатие кнопки Наличные.
 /// Отвечает за оплату покупки наличными.
 /// </summary>
 /// <param name="sender">Объект, вызвавщий метод</param>
 /// <param name="e">Аргументы события</param>
 private void cashB_Click(object sender, EventArgs e)
 {
     if (decimal.Parse(moneyTB.Text) < CurrentReceipt.Summa)
     {
         MessageBox.Show("Вносимая сумма не может быть меньше суммы по чеку!");
         return;
     }
     try
     {
         messageL.Text  = "Оплата наличными";
         this.Enabled   = false; //блокировка формы
         panel1.Visible = true;  //показать панель сообщений
         using (IFiscalRegistrar fr = CurrentHardware.GetFiscalRegistrar())
         {
             if (fr.CheckConnect() == 0)
             {
                 messageL.Text          = "Печать чека";
                 CurrentReceipt.Payment = 1;
                 InsertData();
                 //замена суммы по чеку на сумму вносимых наличных
                 CurrentReceipt.Summa = decimal.Parse(moneyTB.Text);
                 //печать товарного чека
                 if (fr.PrintReceipt(CurrentReceipt) == 0)
                 {
                     messageL.Text = "Успешно";
                     MarkAsPaid();
                     Close();
                 }
             }
         }
         panel1.Visible = false; //убрать панель сообщений
         this.Enabled   = true;  //разблокировать форму
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
 }
示例#10
0
        /// <summary>
        /// Конструктор класса.
        /// Выполняет инициализацию формы и установку текущих настроек.
        /// для восстановления.
        /// </summary>
        public Settings()
        {
            InitializeComponent();
            driverCB.SelectedIndex = 0;
            var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            try
            {
                comPortTB.Text       = config.AppSettings.Settings["ComNumber"].Value;
                exchangeSpeedTB.Text = config.AppSettings.Settings["BaudRate"].Value;
                if (config.AppSettings.Settings["UsedPassword"].Value == "1")
                {
                    usePasswordCheckB.Checked = true;
                }
                else
                {
                    usePasswordCheckB.Checked = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(TextFormat.GetExceptionMessage(ex));
            }
        }
示例#11
0
 /// <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));
     }
 }
示例#12
0
文件: Payment.cs 项目: ILYA-PP/Kassa
 /// <summary>
 /// Метод обрабатывает нажатие кнопки Банковская карта.
 /// Отвечает за оплату покупки по банковской карте.
 /// </summary>
 /// <param name="sender">Объект, вызвавщий метод</param>
 /// <param name="e">Аргументы события</param>
 private void nonCashB_Click(object sender, EventArgs e)
 {
     try
     {
         messageL.Text  = "Идёт процесс оплаты через терминал";
         this.Enabled   = false; //блокировка формы
         panel1.Visible = true;  //показать панель сообщений
         using (ITerminal terminal = CurrentHardware.GetTerminal())
         {
             using (IFiscalRegistrar fr = CurrentHardware.GetFiscalRegistrar())
             {
                 if (terminal.IsEnabled())
                 {
                     if (fr.CheckConnect() == 0)
                     {
                         //если оплата через терминал успешна
                         if (terminal.Purchase(CurrentReceipt.Summa) == 0)
                         {
                             messageL.Text = "Оплата успешно!";
                             terminal.Unconfirmed();
                             //если печать чека терминала успешна
                             if (terminal.GetReceipt() != null && fr.Print(terminal.GetReceipt(), terminal.GetReceiptName()) == 0)
                             {
                                 messageL.Text          = "Печать чеков";
                                 CurrentReceipt.Payment = 2;
                                 InsertData();
                                 //печать товарного чека
                                 if (fr.PrintReceipt(CurrentReceipt, null) == 0)
                                 {
                                     messageL.Text = "Успешно";
                                     terminal.Confirmed();
                                     MarkAsPaid();
                                     Close();
                                 }
                                 else
                                 {
                                     //????????????????????????
                                     MessageBox.Show("Товарный чек не напечатан! Отмена транзакции.");
                                     terminal.CancelTransaction();
                                 }
                             }
                             else
                             {
                                 MessageBox.Show("Чек терминала не напечатан! Отмена операции.");
                                 terminal.CancelTransaction();
                             }
                         }
                     }
                 }
                 else
                 {
                     MessageBox.Show("Терминал не подключен! Проверьте подключение и повторите попытку.");
                 }
             }
         }
         panel1.Visible = false; //убрать панель сообщений
         this.Enabled   = true;  //разблокировать форму
     }
     catch (Exception ex)
     {
         MessageBox.Show(TextFormat.GetExceptionMessage(ex));
     }
 }