public ActionResult Edit(accountPayableHeader accountpayable)
        {
            if (acm.cekSession() == false)
                return RedirectToAction("Logout", "Account");

            lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin;
            if (acm.cekValidation(Url.Action().ToString()) == false && lvm.isAdmin == false)
                return RedirectToAction("NotAuthorized", "Account", new { menu = Url.Action().ToString() });

            #region collect detail account payable
            var countChk = 0;
            for (int i = 0; i < Request.Form.Count; i++)
            {
                if (Request.Form.AllKeys.ToList()[i].Contains("txtInvoiceNo_"))
                    countChk++;
            }

            var model = new accountPayableHeader();
            for (int i = 1; i <= countChk; i++)
            {
                var colVal = Request.Form["txtInvoiceNo_" + i];
                if (colVal == "")
                    break;

                string t_invoiceNo = Request.Form["txtInvoiceNo_" + i].ToString();
                decimal t_amountDebt = decimal.Parse(Request.Form["txtAmount_" + i].ToString());
                decimal t_amountPayment = decimal.Parse(Request.Form["txtPaymentAmount_" + i].ToString());

                var editor = new accountPayableHeader.accountPayableDetailView()
                {
                    invoiceNo = t_invoiceNo,
                    amountDebt = t_amountDebt,
                    amountPayment = t_amountPayment
                };
                model.viewDetailAccountPayable.Add(editor);
            }
            ViewData["dataDetail"] = model.viewDetailAccountPayable.ToList();
            #endregion

            ViewBag.Bank = ccm.ddlBank(accountpayable.bankId.ToString());
            ViewBag.DDLpaymentType = ccm.ddlPaymentType(accountpayable.paymentType);
            ViewBag.VendorPopUp = db.vendors.ToList();
            ViewBag.totalRowsVendor = db.vendors.Count();
            if (ModelState.IsValid)
            {
                try
                {
                    using (TransactionScope ts = new TransactionScope())
                    {
                        db.Entry(accountpayable).State = EntityState.Modified;

                        #region insertDetail
                        bool runFirst = true;
                        for (int i = 1; i <= countChk; i++)
                        {
                            if (runFirst == true)
                            {
                                db.accountPayableDetails.RemoveRange(db.accountPayableDetails.Where(x => x.voucherNo == accountpayable.voucherNo));
                                runFirst = false;
                            }

                            var colVal = Request.Form["txtInvoiceNo_" + i];
                            if (colVal == "")
                                break;

                            string t_invoiceNo = Request.Form["txtInvoiceNo_" + i].ToString();
                            decimal t_amountDebt = decimal.Parse(Request.Form["txtAmount_" + i].ToString());
                            decimal t_amountPayment = decimal.Parse(Request.Form["txtPaymentAmount_" + i].ToString());

                            var editor = new accountPayableHeader.accountPayableDetail()
                            {
                                voucherNo = accountpayable.voucherNo,
                                invoiceNo = t_invoiceNo,
                                amountPayment = t_amountPayment
                            };
                            db.accountPayableDetails.Add(editor);
                        }
                        #endregion

                        db.SaveChanges();
                        ts.Complete();
                    }

                    return RedirectToAction("Index");
                }
                catch (Exception exc)
                {
                    string a = exc.Message;
                }
            }

            if (ModelState.IsValid)
            {
                
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(accountpayable);
        }
        public ActionResult Create(accountPayableHeader accountpayable)
        {
            if (acm.cekSession() == false)
                return RedirectToAction("Logout", "Account");

            lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin;
            if (acm.cekValidation(Url.Action().ToString()) == false && lvm.isAdmin == false)
                return RedirectToAction("NotAuthorized", "Account", new { menu = Url.Action().ToString() });

            #region collect detail account payable
            var countChk = 0;
            for (int i = 0; i < Request.Form.Count; i++)
            {
                if (Request.Form.AllKeys.ToList()[i].Contains("txtInvoiceNo_"))
                    countChk++;
            }

            var model = new accountPayableHeader();
            for (int i = 1; i <= countChk; i++)
            {
                var colVal = Request.Form["txtInvoiceNo_" + i];
                if (colVal == "")
                    break;

                string t_invoiceNo = Request.Form["txtInvoiceNo_" + i].ToString();
                decimal t_amountDebt = decimal.Parse(Request.Form["txtAmount_" + i].ToString());
                decimal t_amountPayment = decimal.Parse(Request.Form["txtPaymentAmount_" + i].ToString());

                var editor = new accountPayableHeader.accountPayableDetailView()
                {
                    invoiceNo = t_invoiceNo,
                    amountDebt = t_amountDebt,
                    amountPayment = t_amountPayment
                };
                model.viewDetailAccountPayable.Add(editor);
            }
            ViewData["dataDetail"] = model.viewDetailAccountPayable.ToList();
            #endregion 
                        
            ViewBag.Bank = ccm.ddlBank(accountpayable.bankId.ToString());
            ViewBag.DDLpaymentType = ccm.ddlPaymentType(accountpayable.paymentType);
            ViewBag.VendorPopUp = db.vendors.ToList();
            ViewBag.totalRowsVendor = db.vendors.Count();
            if (ModelState.IsValid)
            {
                try
                {
                    using(TransactionScope ts = new TransactionScope())
                    {
                        string generateID = prefix + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString("d2");
                        var prIDCreated = db.accountPayableHeaders.Where(x => x.voucherNo.Contains(generateID)).OrderByDescending(x => x.createdDate).Select(x => x.voucherNo).ToList();
                        if (prIDCreated.Count == 0)
                        {
                            generateID = generateID + "0001";
                        }
                        else
                        {
                            generateID = generateID + (Convert.ToInt32(prIDCreated[0].Substring((prIDCreated[0].Length - 4))) + 1).ToString().PadLeft(4, '0');
                        }

                        accountpayable.voucherNo = generateID;
                        accountpayable.createdUser = lvm.userID;
                        accountpayable.createdDate = DateTime.Now;
                        db.accountPayableHeaders.Add(accountpayable);

                        #region insertDetail
                        for (int i = 1; i <= countChk; i++)
                        {
                            var colVal = Request.Form["txtInvoiceNo_" + i];
                            if (colVal == "")
                                break;

                            string t_invoiceNo = Request.Form["txtInvoiceNo_" + i].ToString();
                            decimal t_amountDebt = decimal.Parse(Request.Form["txtAmount_" + i].ToString());
                            decimal t_amountPayment = decimal.Parse(Request.Form["txtPaymentAmount_" + i].ToString());

                            var editor = new accountPayableHeader.accountPayableDetail()
                            {
                                voucherNo = accountpayable.voucherNo,
                                invoiceNo = t_invoiceNo,
                                amountPayment = t_amountPayment
                            };
                            db.accountPayableDetails.Add(editor);
                        }
                        #endregion

                        db.SaveChanges();
                        ts.Complete();
                    }

                    return RedirectToAction("Index");
                }
                catch (Exception exc)
                {
                    string a = exc.Message;
                }
            }

            return View(accountpayable);
        }