polamin
2/20/2017 - 6:33 AM

This show how I use Petapoco to complete form which uses to create new payment and edit exist payment

This show how I use Petapoco to complete form which uses to create new payment and edit exist payment

namespace Sales
{
    public partial class PaymentForm : Form
    {
        petaConnectionDB db = new petaConnectionDB();
        paymentheader _ph = new paymentheader();
        private string _paymentNo;
        private bool _view;
        public PaymentForm()
        {
            InitializeComponent();
            _view = false;
        }

        public PaymentForm(string paymentNo)
        {
            InitializeComponent();
            _paymentNo = paymentNo;
            _view = true;
        }

        private void PaymentForm_Load(object sender, EventArgs e)
        {
            saleIDComboBox.DataSource = db.Query<sale>("SELECT * FROM sale").ToList();
            db.BeginTransaction();
            if (!_view)
            {
                AutoPaymentNo();
                AddDefaultRows();
                btPrint.Visible = false;
            }
            else
            {
                _ph = db.SingleOrDefault<paymentheader>("SELECT * FROM paymentheader WHERE PaymentNO = @0", _paymentNo); // << First time I have var in front of the line but should remove
                paymentheaderBindingSource.DataSource = _ph;
                saleIDComboBox.SelectedValue = _ph.SaleID;
                paymentitemBindingSource.DataSource = db.Query<paymentitem>("SELECT * FROM paymentitem WHERE PaymentNO = @0", _paymentNo);
                paymentDateDateTimePicker.Enabled = false;
            }
        }

        private void AutoPaymentNo()
        {
            var date = paymentDateDateTimePicker.Value.ToString("yyyyMMdd");
            var countInDb = db.ExecuteScalar<long>("SELECT COUNT(PaymentNO) FROM paymentheader WHERE PaymentNO LIKE @0", "%" + date + "%");
            var number = countInDb.ToString().PadLeft(4, '0');
            var paymentNo = date + number;
            paymentNOTextBox.Text = paymentNo;
        }

        private void AddDefaultRows()
        {
            //Initialize Header
            _ph = new paymentheader
            {
                PaymentDate = paymentDateDateTimePicker.Value,
                SaleID = int.Parse(saleIDComboBox.SelectedValue.ToString()),
                CR_DATE = DateTime.Now,
                LT_DATE = DateTime.Now
            };
            db.Save(_ph);

            var newItem = new paymentitem()
            {
                PaymentTypeID = 1,
                PaymentDetail = "ค่าน้ำมัน",
                LT_DATE = DateTime.Now,
                CR_DATE = DateTime.Now,
            };
            paymentitemBindingSource.Add(newItem);
            db.Save(newItem);

            newItem = new paymentitem()
            {
                PaymentTypeID = 2,
                PaymentDetail = "ค่าทางด่วน",
                LT_DATE = DateTime.Now,
                CR_DATE = DateTime.Now,
            };
            paymentitemBindingSource.Add(newItem);
            db.Save(newItem);

            newItem = new paymentitem()
            {
                PaymentTypeID = 3,
                PaymentDetail = "ค่าโทรศัพท์",
                LT_DATE = DateTime.Now,
                CR_DATE = DateTime.Now,
            };
            paymentitemBindingSource.Add(newItem);
            db.Save(newItem);

            newItem = new paymentitem()
            {
                PaymentTypeID = 4,
                PaymentDetail = "ค่าเลี้ยงรับรอง",
                LT_DATE = DateTime.Now,
                CR_DATE = DateTime.Now,
            };
            paymentitemBindingSource.Add(newItem);
            db.Save(newItem);
        }

        private void paymentitemDataGridView_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            if (e.Row.Index < 4)
            {
                e.Cancel = true;
                return;
            }
            var rowIndex = e.Row.Index; // We use Gridview row index instead because BindingSource.Current isn't work when user drag then deleting multiple row 
            db.Delete(paymentitemDataGridView.Rows[rowIndex].DataBoundItem as paymentitem);
        }

        private void btAdd_Click(object sender, EventArgs e)
        {
            AddNewRow();
        }

        private void AddNewRow()
        {
            var newItem = new paymentitem()
            {
                PaymentTypeID = 5,
                LT_DATE = DateTime.Now,
                CR_DATE = DateTime.Now
            };
            paymentitemBindingSource.Add(newItem);
            db.Save(newItem);
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            Save();
        }

        private void paymentDateDateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            AutoPaymentNo();
        }

        private void Save()
        {
            paymentitemDataGridView.EndEdit();

            _ph.PaymentNO = paymentNOTextBox.Text;
            _ph.PaymentDate = paymentDateDateTimePicker.Value;
            _ph.SaleID = int.Parse(saleIDComboBox.SelectedValue.ToString());
            db.Update(_ph);

            foreach (DataGridViewRow row in paymentitemDataGridView.Rows)
            {
                row.Cells[PaymentNO.DisplayIndex].Value = paymentNOTextBox.Text;
                var query = db.SingleOrDefault<paymentitem>("WHERE PaymentItemID = @0",
                    row.Cells[PaymentItemID.DisplayIndex].Value);
                query.PaymentNO = paymentNOTextBox.Text;
                db.Save(query);
            }


            db.CompleteTransaction();

            MessageBox.Show("Complete");
            paymentNOTextBox.Enabled = false;
            paymentDateDateTimePicker.Enabled = false;
            btPrint.Visible = true;
        }

        private void paymentitemDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                db.Save((paymentitem)paymentitemBindingSource.Current);
            }
            catch (Exception)
            {
                return;
            }
        }

        private void PaymentForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            db.AbortTransaction();
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            switch (keyData)
            {
                case (Keys.Enter):
                    var text = this.ActiveControl.Name;
                    var itemVFName = paymentitemDataGridView.Name;
                    var editMode = paymentitemDataGridView.IsCurrentCellInEditMode;
                    if (text == itemVFName || editMode)
                    {
                        if (GridviewDecoration.CheckAllEmptyCellExist(paymentitemDataGridView))
                            GridviewDecoration.GoNextEmptyCell(ref paymentitemDataGridView);
                        else
                        {
                            if (GridviewDecoration.IsFocusingLastRowColumn(paymentitemDataGridView) && !editMode)
                            AddNewRow();

                            GridviewDecoration.GoNextCell(ref paymentitemDataGridView);
                        }
                    }
                    return true;

                case (Keys.Escape):
                    this.Close();
                    return true;

                case (Keys.Control | Keys.S):
                    Save();
                    return true;

                case (Keys.Control | Keys.P):
                    Print();
                    return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void btPrint_Click(object sender, EventArgs e)
        {
            Print();
        }

        private void Print()
        {
            var printPayment = new PrintPayment(paymentNOTextBox.Text); 
            printPayment.Show();
        }


    }
}