private void c1Combo2_SelectedValueChanged(object sender, EventArgs e)
 {
     if (txMode == DataEntryModes.Add)
     {
         try
         {
             // get data
             dsCore ds = new dsCore();
             OrdersTableAdapter od = new OrdersTableAdapter();
             OrderDetailsTableAdapter ta = new OrderDetailsTableAdapter();
             ds.EnforceConstraints = false;
             od.Connection = AppHelper.GetDbConnection();
             od.FillByID(ds.Orders, (int)c1Combo2.SelectedValue);
             ta.Connection = AppHelper.GetDbConnection();
             ta.FillNotCompleted(ds.OrderDetails, (int)c1Combo2.SelectedValue);
             // clear grid
             dsCore1.OrderDetails.Clear();
             // fill grid with new data
             _grid.Redraw = false;
             DataRowView dv = (DataRowView)this.BindingContext[dsCore1, "Orders"].Current;
             dv["CompanyID"] = ds.Orders[0].CompanyID;
             dv["CurrencyID"] = ds.Orders[0].CurrencyID;
             if (!ds.Orders[0].IsCompanyIDNull())
                 c1Combo1.SelectedValue = ds.Orders[0].CompanyID;
             foreach (dsCore.OrderDetailsRow src in ds.OrderDetails.Rows)
             {
                 dsCore.OrderDetailsRow row = dsCore1.OrderDetails.NewOrderDetailsRow();
                 row.OrderID = (int)dv["ID"];
                 row.ItemID = src.ItemID;
                 row.ItemCode = src.ItemCode;
                 row.ItemName = src.ItemName;
                 row.Quantity = src.Quantity;
                 row.UnitPrice = src.UnitPrice;
                 row.TaxPct = src.TaxPct;
                 row.Remarks = src.Remarks;
                 row.MeasureCode = src.MeasureCode;
                 dsCore1.OrderDetails.AddOrderDetailsRow(row);
             }
             // redraw grid
             _grid.Redraw = true;
             _grid.Refresh();
         }
         catch (Exception ex)
         {
             // textfile logging
             Logger.ErrorRoutine(ex);
             // screen logging
             RibbonMessageBox.Show("ERROR Retrieving Detail Data: \n" + ex.Message,
                 Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         }
     }
 }
        private void btnSave_Click(object sender, EventArgs e)
        {
            // Validate all required field(s)
            if (!ValidateUserInput()) return;

            // if you get here, it means that all user input has been validated
            Cursor = Cursors.AppStarting;

            try
            {
                // End editing
                BindingContext[dsCore1, "Orders"].EndCurrentEdit();
                BindingContext[dsCore1, "OrderDetails"].EndCurrentEdit();

                // There are changes that need to be made, so attempt to update the datasource by
                // calling the update method and passing the dataset and any parameters.
                if (txMode == DataEntryModes.Add)
                {
                    // copy master record dari main dataset
                    // harus dilakukan krena main dataset sebelumnya sudah 
                    // AcceptChanges padahal belum diupdate ke database 
                    dsChanges = new dsCore();
                    dsChanges.EnforceConstraints = false;
                    dsChanges.Orders.Rows.Add(((DataRowView)this.BindingContext[dsCore1, "Orders"].Current).Row.ItemArray);

                    // copy juga detail record dari main dataset
                    for (int i = 0; i < dsCore1.OrderDetails.Rows.Count; i++)
                        dsChanges.OrderDetails.Rows.Add(dsCore1.OrderDetails.Rows[i].ItemArray);

                    // persist changes to database
                    daOrders1.Update(dsChanges.Orders);
                    daOrderDetails1.Update(dsChanges.OrderDetails);

                    // inform user, successful
                    DialogResult dr = RibbonMessageBox.Show("Data SUCCESFULLY saved to database\n" +
                        "Do you want to print this document?\n",
                        Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    // ask user for voucher print
                    if (dr == DialogResult.Yes)
                    {
                        Cursor = Cursors.AppStarting;
                        Form fx = new frmReportViewer1(ReportHelper1.LoadDeliveryOrderForm(c1TextBox1.Text));
                        fx.WindowState = FormWindowState.Maximized;
                        fx.ShowDialog();
                        Cursor = Cursors.Default;
                    }
                }
                else
                {
                    // persist changes to database
                    daOrders1.Update(dsCore1.Orders);
                    daOrderDetails1.Update(dsCore1.OrderDetails);

                    // inform user for successful update
                    RibbonMessageBox.Show("Changes SUCCESFULLY saved to database",
                        Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                // success, close form
                btnClose.PerformClick();
            }
            catch (SqlException ex)
            {
                // textfile logging
                Logger.ErrorRoutine(ex);

                // screen logging
                if (ex.Number != 2601)
                    RibbonMessageBox.Show("ERROR Saving Data: \n" + ex.Message,
                        Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                else
                    RibbonMessageBox.Show("ERROR Saving Data:\n" +
                        "Document number [" + c1TextBox1.Text + "]already existed in database\n" +
                        "Please change this document number and try saving again.",
                        Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception ex)
            {
                // textfile logging
                Logger.ErrorRoutine(ex);

                // screen logging
                RibbonMessageBox.Show("ERROR Saving Data: \n" + ex.Message,
                    Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

            Cursor = Cursors.Default;
        }
        private void GenerateInvoice(dsCore ds)
        {
            dsCore dt = new dsCore();
            dt.EnforceConstraints = false;

            // copy master record
            dt.Orders.Rows.Add(ds.Orders[0].ItemArray);
            // copy juga detail record dari main dataset
            for (int i = 0; i < ds.OrderDetails.Rows.Count; i++)
                dt.OrderDetails.Rows.Add(ds.OrderDetails.Rows[i].ItemArray);
            // ubah jenis transaksi
            dt.Orders[0].ParentID = ds.Orders[0].ID;
            dt.Orders[0].OrderNo = DbHelper.GenerateNewOrderID(TransactionTypes.TX_PURCHASE_INVOICE, dt.Orders[0].OrderDate.Year);
            dt.Orders[0].OrderType = TransactionTypes.TX_PURCHASE_INVOICE;
            dt.Orders[0].OrderValue = ds.Orders[0].OrderValue;
            // persist changes to database
            daOrders1.Update(dt.Orders);
            daOrderDetails1.Update(dt.OrderDetails);
            // remember result
            InvoiceID = dt.Orders[0].ID;
            InvoiceNum = dt.Orders[0].OrderNo;
        }
        private void GeneratePayment(dsCore ds)
        {
            dsCore dt = new dsCore();
            dt.EnforceConstraints = false;

            // copy master record
            dt.Orders.Rows.Add(ds.Orders[0].ItemArray);
            // ubah jenis transaksi
            dt.Orders[0].ParentID = ds.Orders[0].ID;
            dt.Orders[0].OrderNo = DbHelper.GenerateNewOrderID(TransactionTypes.TX_PURCHASE_PAYMENT, dt.Orders[0].OrderDate.Year);
            dt.Orders[0].OrderType = TransactionTypes.TX_PURCHASE_PAYMENT;
            dt.Orders[0].OrderValue = Convert.ToDouble(c1NumericEdit1.Value);
            // detail payment
            dsCore.OrderDetailsRow row = dt.OrderDetails.NewOrderDetailsRow();
            row.OrderID = dt.Orders[0].ID;
            row.ReferenceID = InvoiceID;
            row.UnitPrice = Convert.ToDouble(c1NumericEdit1.Value);
            row.Quantity = 1;
            row.TaxPct = 0;
            if (!dt.Orders[0].IsRemarksNull())
                row.Remarks = ds.Orders[0].Remarks;
            dt.OrderDetails.AddOrderDetailsRow(row);

            // persist changes to database
            daOrders1.Update(dt.Orders);
            daOrderDetails1.Update(dt.OrderDetails);

            // remember result
            PaymentID = dt.Orders[0].ID;
            PaymentNum = dt.Orders[0].OrderNo;
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            // Validate all required field(s)
            if (!ValidateUserInput()) return;

            // if you get here, it means that all user input has been validated
            Cursor = Cursors.AppStarting;

            try
            {
                // End editing
                BindingContext[dsCore1, "Orders"].EndCurrentEdit();
                BindingContext[dsCore1, "OrderDetails"].EndCurrentEdit();

                // There are changes that need to be made, so attempt to update the datasource by
                // calling the update method and passing the dataset and any parameters.
                if (txMode == DataEntryModes.Add)
                {
                    // copy master record dari main dataset
                    // harus dilakukan krena main dataset sebelumnya sudah 
                    // AcceptChanges padahal belum diupdate ke database 
                    dsChanges = new dsCore();
                    dsChanges.EnforceConstraints = false;
                    dsChanges.Orders.Rows.Add(((DataRowView)this.BindingContext[dsCore1, "Orders"].Current).Row.ItemArray);

                    // copy juga detail record dari main dataset
                    for (int i = 0; i < dsCore1.OrderDetails.Rows.Count; i++)
                        dsChanges.OrderDetails.Rows.Add(dsCore1.OrderDetails.Rows[i].ItemArray);

                    // persist changes to database
                    daOrders1.Update(dsChanges.Orders);
                    daOrderDetails1.Update(dsChanges.OrderDetails);

                    // only generate invoice 
                    GenerateInvoice(dsChanges);

                    // generate payment record for cash payment
                    if (radioButton1.Checked || Convert.ToDouble(c1NumericEdit1.Value) > 0)
                        GeneratePayment(dsChanges);
                    
                    // inform user for successful update
                    RibbonMessageBox.Show("Data SUCCESFULLY saved to database\n" +
                        (InvoiceID < 0 ? "" : "New Invoice Voucher [" + InvoiceNum + "] created automatically\n") +
                        (PaymentID < 0 ? "" : "New Payment Voucher [" + PaymentNum + "] created automatically\n"),
                        Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    // persist changes to database
                    daOrders1.Update(dsCore1.Orders);
                    daOrderDetails1.Update(dsCore1.OrderDetails);

                    // inform user for successful update
                    RibbonMessageBox.Show("Changes SUCCESFULLY saved to database",
                        Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                // success, close form
                btnClose.PerformClick();
            }
            catch (SqlException ex)
            {
                // textfile logging
                Logger.ErrorRoutine(ex);

                // screen logging
                if (ex.Number != 2601)
                    RibbonMessageBox.Show("ERROR Saving Data: \n" + ex.Message,
                        Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                else
                    RibbonMessageBox.Show("ERROR Saving Data:\n" +
                        "Document number [" + c1TextBox1.Text + "]already existed in database\n" +
                        "Please change this document number and try saving again.",
                        Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception ex)
            {
                // textfile logging
                Logger.ErrorRoutine(ex);

                // screen logging
                RibbonMessageBox.Show("ERROR Saving Data: \n" + ex.Message,
                    Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

            Cursor = Cursors.Default;
        }
 private void c1Combo1_SelectedValueChanged(object sender, EventArgs e)
 {
     if (txMode == DataEntryModes.Add)
     {
         try
         {
             // prevent redraw 
             _grid.Redraw = false;
             // get data
             dsCore ds = new dsCore();
             OrdersTableAdapter od = new OrdersTableAdapter();
             ds.EnforceConstraints = false;
             od.Connection = AppHelper.GetDbConnection();
             od.FillOutstandingSalesInvoices(ds.Orders, (int)c1Combo1.SelectedValue);
             // clear grid
             dsCore1.OrderDetails.Clear();
             // fill grid with new data
             DataRowView dv = (DataRowView)this.BindingContext[dsCore1, "Orders"].Current;
             foreach (dsCore.OrdersRow src in ds.Orders.Rows)
             {
                 dsCore.OrderDetailsRow row = dsCore1.OrderDetails.NewOrderDetailsRow();
                 row.OrderID = (int)dv["ID"];
                 row.ReferenceID = src.ID;
                 row.ReferenceNo = src.OrderNo;
                 row.ReferenceDate = src.OrderDate;
                 row.ReferenceValue = src.OutstandingValue;
                 row.UnitPrice = src.OutstandingValue;
                 row.Quantity = 1;
                 row.TaxPct = 0;
                 if (!src.IsRemarksNull())
                     row.Remarks = src.Remarks;
                 dsCore1.OrderDetails.AddOrderDetailsRow(row);
             }
             // recalculate
             CountDetails();
             // redraw grid
             _grid.Redraw = true;
             _grid.Refresh();
         }
         catch (Exception ex)
         {
             // textfile logging
             Logger.ErrorRoutine(ex);
             // screen logging
             RibbonMessageBox.Show("ERROR Retrieving Detail Data: \n" + ex.Message,
                 Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         }
     }
 }