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"); } }
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(); } }
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"); } } }
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"); } } }
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; }
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(); }
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(); }
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); } }
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); } }
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(); } }
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"); } } }
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(); }
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); } }
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(); }
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); } }
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); } }
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); } }