Пример #1
0
        private void btnInvoicePay_Click(object sender, EventArgs e)
        {
            var dbContext = AppVariables.getDbContext();
            var invoice   = dbContext.INVOICES.Find(this.CurrentInvoice.Id);

            try
            {
                if (invoice.PAID == 1)
                {
                    throw new Exception("Change is impossible, invoice paid.");
                }

                invoice.PAID = 1;
                // сохраняем изменения
                dbContext.SaveChanges();
                // перезагружаем изменённую запись
                CurrentInvoice.Load(invoice.INVOICE_ID);
                masterBinding.ResetCurrentItem();
            }
            catch (Exception ex)
            {
                // отображаем ошибку
                MessageBox.Show(ex.Message, "Error");
            }
        }
Пример #2
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            var dialog = new LoginForm();

            //dialog.UserName = "******";
            //dialog.Password = "******";

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                var dbContext = AppVariables.getDbContext();

                try
                {
                    string s       = dbContext.Database.Connection.ConnectionString;
                    var    builder = new FbConnectionStringBuilder(s);
                    builder.UserID   = dialog.UserName;
                    builder.Password = dialog.Password;

                    dbContext.Database.Connection.ConnectionString = builder.ConnectionString;

                    // пробуем подключится
                    dbContext.Database.Connection.Open();
                }
                catch (Exception ex)
                {
                    // отображаем ошибку
                    MessageBox.Show(ex.Message, "Error");
                    Application.Exit();
                }
            }
            else
            {
                Application.Exit();
            }
        }
Пример #3
0
        private void btnDeleteInvoice_Click(object sender, EventArgs e)
        {
            var result = MessageBox.Show("Are you sure you want to delete the invoice?",
                                         "Confirm",
                                         MessageBoxButtons.YesNo,
                                         MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                var dbContext = AppVariables.getDbContext();
                var invoice   = dbContext.INVOICES.Find(this.CurrentInvoice.Id);
                try
                {
                    if (invoice.PAID == 1)
                    {
                        throw new Exception("Remove is impossible, invoice paid.");
                    }

                    dbContext.INVOICES.Remove(invoice);
                    dbContext.SaveChanges();
                    // обновляется очень быстро
                    masterBinding.RemoveCurrent();
                }
                catch (Exception ex)
                {
                    // отображаем ошибку
                    MessageBox.Show(ex.Message, "Error");
                }
            }
        }
Пример #4
0
        private void btnDelete_Click(object sender, EventArgs e)
        {
            var dbContext = AppVariables.getDbContext();
            var result    = MessageBox.Show("Are you sure you want to delete the customer?",
                                            "Confirm",
                                            MessageBoxButtons.YesNo,
                                            MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                // получаем сущность
                var customer = (CUSTOMER)bindingSource.Current;
                try
                {
                    dbContext.CUSTOMERS.Remove(customer);
                    // пытаемся сохранить изменения
                    dbContext.SaveChanges();
                    // удаляем из связанного списка
                    bindingSource.RemoveCurrent();
                }
                catch (Exception ex)
                {
                    // отображаем ошибку
                    MessageBox.Show(ex.Message, "Error");
                }
            }
        }
Пример #5
0
        public void Load(int Id)
        {
            var dbContext = AppVariables.getDbContext();

            var invoices =
                from invoice in dbContext.INVOICES
                where invoice.INVOICE_ID == Id
                select new InvoiceView
            {
                Id         = invoice.INVOICE_ID,
                Cusomer_Id = invoice.CUSTOMER_ID,
                Customer   = invoice.CUSTOMER.NAME,
                Date       = invoice.INVOICE_DATE,
                Amount     = invoice.TOTAL_SALE,
                Paid       = (invoice.PAID == 1) ? "Yes" : "No"
            };

            InvoiceView invoiceView = invoices.ToList().First();

            this.Id         = invoiceView.Id;
            this.Cusomer_Id = invoiceView.Cusomer_Id;
            this.Customer   = invoiceView.Customer;
            this.Date       = invoiceView.Date;
            this.Amount     = invoiceView.Amount;
            this.Paid       = invoiceView.Paid;
        }
Пример #6
0
        private void LoadGoodsData()
        {
            var dbContext = AppVariables.getDbContext();

            // отсоединяем все загруженные объекты
            // это необходимо чтобы обнвился внутренний кеш
            // при второй и последующих вызовах этого метода
            dbContext.DetachAll(dbContext.PRODUCTS);

            var goods =
                from product in dbContext.PRODUCTS
                orderby product.NAME
                select product;

            bindingSource.DataSource = goods.ToBindingList();
        }
Пример #7
0
        private void LoadCustomersData()
        {
            var dbContext = AppVariables.getDbContext();

            // отсоединяем все загруженные объекты
            // это необходимо чтобы обнвился внутренний кеш
            // при второй и последующих вызовах этого метода
            dbContext.DetachAll(dbContext.CUSTOMERS);

            var customers =
                from customer in dbContext.CUSTOMERS
                orderby customer.NAME
                select customer;


            bindingSource.DataSource = customers.ToBindingList();
        }
Пример #8
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            var dbContext = AppVariables.getDbContext();
            // создание нового экземпляра сущности
            var customer = (CUSTOMER)bindingSource.AddNew();

            // создаём форму для редактирования
            using (CustomerEditorForm editor = new CustomerEditorForm())
            {
                editor.Text     = "Add customer";
                editor.Customer = customer;
                // Обработчик закрытия формы
                editor.FormClosing += delegate(object fSender, FormClosingEventArgs fe)
                {
                    if (editor.DialogResult == DialogResult.OK)
                    {
                        try
                        {
                            // получаем новое значение генератора
                            // и присваиваем его идентификатору
                            customer.CUSTOMER_ID = dbContext.NextValueFor("GEN_CUSTOMER_ID");
                            // добавляем нового заказчика
                            dbContext.CUSTOMERS.Add(customer);
                            // пытаемся сохранить изменения
                            dbContext.SaveChanges();
                            // и обновить текущую запись
                            dbContext.Refresh(RefreshMode.StoreWins, customer);
                        }
                        catch (Exception ex)
                        {
                            // отображаем ошибку
                            MessageBox.Show(ex.Message, "Error");
                            // не закрываем форму для возможности исправления ошибки
                            fe.Cancel = true;
                        }
                    }
                    else
                    {
                        bindingSource.CancelEdit();
                    }
                };
                // показываем модальную форму
                editor.ShowDialog(this);
            }
        }
Пример #9
0
        private void btnEditInvoice_Click(object sender, EventArgs e)
        {
            // получение контекста
            var dbContext = AppVariables.getDbContext();
            // поиск сущности по идентификатору
            var invoice = dbContext.INVOICES.Find(this.CurrentInvoice.Id);

            if (invoice.PAID == 1)
            {
                MessageBox.Show("Change is impossible, invoice paid.", "Error");
                return;
            }

            using (InvoiceEditorForm editor = new InvoiceEditorForm())
            {
                editor.Text    = "Edit invoice";
                editor.Invoice = invoice;
                // Обработчик закрытия формы
                editor.FormClosing += delegate(object fSender, FormClosingEventArgs fe)
                {
                    if (editor.DialogResult == DialogResult.OK)
                    {
                        try
                        {
                            // пытаемся сохранить изменения
                            dbContext.SaveChanges();
                            // перезагружаем проекцию
                            CurrentInvoice.Load(invoice.INVOICE_ID);
                            masterBinding.ResetCurrentItem();
                        }
                        catch (Exception ex)
                        {
                            // отображаем ошибку
                            MessageBox.Show(ex.Message, "Error");
                            // не закрываем форму для возможности исправления ошибки
                            fe.Cancel = true;
                        }
                    }
                };
                // показываем модальную форму
                editor.ShowDialog(this);
            }
        }
Пример #10
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            var dbContext = AppVariables.getDbContext();
            var product   = (PRODUCT)bindingSource.AddNew();

            using (GoodsEditorForm editor = new GoodsEditorForm())
            {
                editor.Text    = "Add product";
                editor.Product = product;

                // Обработчик закрытия формы
                editor.FormClosing += delegate(object fSender, FormClosingEventArgs fe)
                {
                    if (editor.DialogResult == DialogResult.OK)
                    {
                        try
                        {
                            // получаем новое значение генератора
                            // и присваиваем его идентификатору
                            product.PRODUCT_ID = dbContext.NextValueFor("GEN_PRODUCT_ID");
                            // добавляем новый продукт
                            dbContext.PRODUCTS.Add(product);
                            // пытаемся сохранить изменения
                            dbContext.SaveChanges();
                            dbContext.Refresh(RefreshMode.StoreWins, product);
                        }
                        catch (Exception ex)
                        {
                            // отображаем ошибку
                            MessageBox.Show(ex.Message, "Error");
                            // не закрываем форму для возможности исправления ошибки
                            fe.Cancel = true;
                        }
                    }
                    else
                    {
                        bindingSource.CancelEdit();
                    }
                };
                // показываем модальную форму
                editor.ShowDialog();
            }
        }
Пример #11
0
        private void btnDeleteInvoiceLine_Click(object sender, EventArgs e)
        {
            var result = MessageBox.Show("Are you sure you want to delete the invoice item?",
                                         "Confirm",
                                         MessageBoxButtons.YesNo,
                                         MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                var dbContext = AppVariables.getDbContext();
                // получаем текущую счёт-фактуру
                var invoice = dbContext.INVOICES.Find(this.CurrentInvoice.Id);

                try
                {
                    // проверяем не оплачена ли счёт-фактура
                    if (invoice.PAID == 1)
                    {
                        throw new Exception("Remove is impossible, invoice paid.");
                    }
                    // создаём параметры ХП
                    var idParam = new FbParameter("INVOICE_LINE_ID", FbDbType.Integer);
                    // инициализируем параметры значениями
                    idParam.Value = this.CurrentInvoiceLine.Id;
                    // выполняем хранимую процедуру
                    dbContext.Database.ExecuteSqlCommand("EXECUTE PROCEDURE SP_DELETE_INVOICE_LINE(@INVOICE_LINE_ID)", idParam);

                    // обновляем гриды
                    // перезагрузка текущей записи счёт-фактуры
                    CurrentInvoice.Load(invoice.INVOICE_ID);
                    // перезагрузка всех записей детейл грида
                    LoadInvoiceLineData(invoice.INVOICE_ID);
                    // обновляем связанные даные
                    masterBinding.ResetCurrentItem();
                }
                catch (Exception ex)
                {
                    // отображаем ошибку
                    MessageBox.Show(ex.Message, "Error");
                }
            }
        }
Пример #12
0
        private void LoadInvoiceLineData(int?id)
        {
            var dbContext = AppVariables.getDbContext();

            var lines =
                from line in dbContext.INVOICE_LINES
                where line.INVOICE_ID == id
                select new InvoiceLineView
            {
                Id         = line.INVOICE_LINE_ID,
                Invoice_Id = line.INVOICE_ID,
                Product_Id = line.PRODUCT_ID,
                Product    = line.PRODUCT.NAME,
                Quantity   = line.QUANTITY,
                Price      = line.SALE_PRICE,
                Total      = line.QUANTITY * line.SALE_PRICE
            };

            detailBinding.DataSource = lines.ToBindingList();
        }
Пример #13
0
        private void btnEdit_Click(object sender, EventArgs e)
        {
            var dbContext = AppVariables.getDbContext();
            // получаем сущность
            var customer = (CUSTOMER)bindingSource.Current;

            // создаём форму для редактирования
            using (CustomerEditorForm editor = new CustomerEditorForm())
            {
                editor.Text     = "Edit customer";
                editor.Customer = customer;
                // Обработчик закрытия формы
                editor.FormClosing += delegate(object fSender, FormClosingEventArgs fe)
                {
                    if (editor.DialogResult == DialogResult.OK)
                    {
                        try
                        {
                            // пытаемся сохранить изменения
                            dbContext.SaveChanges();
                            dbContext.Refresh(RefreshMode.StoreWins, customer);
                            // обновляем все связанные контролы
                            bindingSource.ResetCurrentItem();
                        }
                        catch (Exception ex)
                        {
                            // отображаем ошибку
                            MessageBox.Show(ex.Message, "Error");
                            // не закрываем форму для возможности исправления ошибки
                            fe.Cancel = true;
                        }
                    }
                    else
                    {
                        bindingSource.CancelEdit();
                    }
                };
                // показываем модальную форму
                editor.ShowDialog(this);
            }
        }
Пример #14
0
        public void LoadInvoicesData()
        {
            var dbContext = AppVariables.getDbContext();

            // запрос на LINQ преобразуется в SQL
            var invoices =
                from invoice in dbContext.INVOICES
                where (invoice.INVOICE_DATE >= AppVariables.StartDate) &&
                (invoice.INVOICE_DATE <= AppVariables.FinishDate)
                orderby invoice.INVOICE_DATE descending
                select new InvoiceView
            {
                Id         = invoice.INVOICE_ID,
                Cusomer_Id = invoice.CUSTOMER_ID,
                Customer   = invoice.CUSTOMER.NAME,
                Date       = invoice.INVOICE_DATE,
                Amount     = invoice.TOTAL_SALE,
                Paid       = (invoice.PAID == 1) ? "Yes" : "No"
            };

            masterBinding.DataSource = invoices.ToBindingList();
        }
Пример #15
0
        private void btnAddInvoice_Click(object sender, EventArgs e)
        {
            var dbContext = AppVariables.getDbContext();
            var invoice   = dbContext.INVOICES.Create();

            using (InvoiceEditorForm editor = new InvoiceEditorForm())
            {
                editor.Text    = "Add invoice";
                editor.Invoice = invoice;
                // Обработчик закрытия формы
                editor.FormClosing += delegate(object fSender, FormClosingEventArgs fe)
                {
                    if (editor.DialogResult == DialogResult.OK)
                    {
                        try
                        {
                            // получаем значение генератора
                            invoice.INVOICE_ID = dbContext.NextValueFor("GEN_INVOICE_ID");
                            // добавляем запись
                            dbContext.INVOICES.Add(invoice);
                            // пытаемся сохранить изменения
                            dbContext.SaveChanges();
                            // добавляем проекцию в список для грида
                            ((InvoiceView)masterBinding.AddNew()).Load(invoice.INVOICE_ID);
                        }
                        catch (Exception ex)
                        {
                            // отображаем ошибку
                            MessageBox.Show(ex.Message, "Error");
                            // не закрываем форму для возможности исправления ошибки
                            fe.Cancel = true;
                        }
                    }
                };
                // показываем модальную форму
                editor.ShowDialog(this);
            }
        }
Пример #16
0
        private void btnEditInvoiceLine_Click(object sender, EventArgs e)
        {
            var dbContext = AppVariables.getDbContext();
            // получаем текущую счёт-фактуру
            var invoice = dbContext.INVOICES.Find(this.CurrentInvoice.Id);

            // проверяем не оплачена ли счёт-фактура
            if (invoice.PAID == 1)
            {
                MessageBox.Show("Change is impossible, invoice paid.", "Error");
                return;
            }
            // получаем текущую позицию счёт-фактуры
            var invoiceLine = invoice.INVOICE_LINES
                              .Where(p => p.INVOICE_LINE_ID == this.CurrentInvoiceLine.Id)
                              .First();

            // создаём редактор позиции счёт фактуры
            using (InvoiceLineEditorForm editor = new InvoiceLineEditorForm())
            {
                editor.Text        = "Edit invoice line";
                editor.InvoiceLine = invoiceLine;

                // Обработчик закрытия формы
                editor.FormClosing += delegate(object fSender, FormClosingEventArgs fe)
                {
                    if (editor.DialogResult == DialogResult.OK)
                    {
                        try
                        {
                            // создаём параметры ХП
                            var idParam       = new FbParameter("INVOICE_LINE_ID", FbDbType.Integer);
                            var quantityParam = new FbParameter("QUANTITY", FbDbType.Integer);
                            // инициализируем параметры значениями
                            idParam.Value       = invoiceLine.INVOICE_LINE_ID;
                            quantityParam.Value = invoiceLine.QUANTITY;
                            // выполняем хранимую процедуру
                            dbContext.Database.ExecuteSqlCommand(
                                "EXECUTE PROCEDURE SP_EDIT_INVOICE_LINE(@INVOICE_LINE_ID, @QUANTITY)",
                                idParam,
                                quantityParam);
                            // обновляем гриды
                            // перезагрузка текущей записи счёт-фактуры
                            CurrentInvoice.Load(invoice.INVOICE_ID);
                            // перезагрузка всех записей детейл грида
                            LoadInvoiceLineData(invoice.INVOICE_ID);
                            // обновляем связанные даные
                            masterBinding.ResetCurrentItem();
                        }
                        catch (Exception ex)
                        {
                            // отображаем ошибку
                            MessageBox.Show(ex.Message, "Error");
                            // не закрываем форму для возможности исправления ошибки
                            fe.Cancel = true;
                        }
                    }
                };
                // показываем модальную форму
                editor.ShowDialog(this);
            }
        }
Пример #17
0
        private void btnDiscount_Click(object sender, EventArgs e)
        {
            DiscountEditorForm editor = new DiscountEditorForm();

            editor.Text = "Enter discount";
            if (editor.ShowDialog() != DialogResult.OK)
            {
                return;
            }


            bool needUpdate = false;

            var dbContext  = AppVariables.getDbContext();
            var connection = dbContext.Database.Connection;

            // явный старт транзакции по умолчанию
            using (var dbTransaction = connection.BeginTransaction(IsolationLevel.Snapshot))
            {
                dbContext.Database.UseTransaction(dbTransaction);
                string sql =
                    "UPDATE PRODUCT " +
                    "SET PRICE =  ROUND(PRICE * (100 - @DISCOUNT)/100, 2) " +
                    "WHERE PRODUCT_ID = @PRODUCT_ID";
                try
                {
                    // создаём параметры запроса
                    var idParam       = new FbParameter("PRODUCT_ID", FbDbType.Integer);
                    var discountParam = new FbParameter("DISCOUNT", FbDbType.Decimal);
                    // создаём SQL комманду для обновления записей
                    var sqlCommand = connection.CreateCommand();
                    sqlCommand.CommandText = sql;
                    // указываем команде какую транзакцию использовать
                    sqlCommand.Transaction = dbTransaction;
                    sqlCommand.Parameters.Add(discountParam);
                    sqlCommand.Parameters.Add(idParam);
                    // подготовливаем команду
                    sqlCommand.Prepare();
                    // для всех выделенных записей в гриде
                    foreach (DataGridViewRow gridRows in dataGridView.SelectedRows)
                    {
                        int id = (int)gridRows.Cells["PRODUCT_ID"].Value;
                        // инициализируем параметры запроса
                        idParam.Value       = id;
                        discountParam.Value = editor.Discount;
                        // выполняем sql запрос
                        needUpdate = (sqlCommand.ExecuteNonQuery() > 0) || needUpdate;
                    }
                    dbTransaction.Commit();
                }
                catch (Exception ex)
                {
                    dbTransaction.Rollback();
                    MessageBox.Show(ex.Message, "error");
                    needUpdate = false;
                }
            }
            // перезагружаем содержимое грида
            if (needUpdate)
            {
                // для всех выделенных записей в гриде
                foreach (DataGridViewRow gridRows in dataGridView.SelectedRows)
                {
                    var product = (PRODUCT)bindingSource.List[gridRows.Index];
                    dbContext.Refresh(RefreshMode.StoreWins, product);
                }
                bindingSource.ResetBindings(false);
            }
        }