public ActionResult UpdateCheRec(ChequeReceipt CheRec)
        {
            RBACUser rUser = new RBACUser(Session["UserName"].ToString());

            if (!rUser.HasPermission("ChequeReceipt_Update"))
            {
                return(Json("U", JsonRequestBehavior.AllowGet));
            }
            using (var transaction = new TransactionScope())
            {
                try
                {
                    var VchrExist   = _vchrMainService.All().FirstOrDefault(s => s.VchrNo == CheRec.VchrNo);
                    var chqArcExist = _chequeArchiveService.All().ToList().Where(x => x.ChqNo == CheRec.oldChqNo).Select(s => s.ChqStatus).ToList();
                    if (chqArcExist.Contains("Receive") && CheRec.ChqStatus == "Receive" || chqArcExist.Contains("Receive") && CheRec.ChqStatus == "Deposit" || chqArcExist.Contains("Deposit") && CheRec.ChqStatus == "Encash" ||
                        chqArcExist.Contains("Encash") && CheRec.ChqStatus != "Dishonour" && CheRec.ChqStatus != "Return")
                    {
                        if (VchrExist == null)
                        {
                            ChequeReceipt cr = new ChequeReceipt();
                            cr            = CheRec;
                            cr.MRTing     = 0;
                            cr.MRTingTime = null;
                            cr.ProjCode   = Session["ProjCode"].ToString();
                            cr.FinYear    = Session["FinYear"].ToString();

                            _chequeReceiptService.Update(cr);
                            _chequeReceiptService.Save();

                            var chqArc = _chequeArchiveService.All().FirstOrDefault(s => s.ChqNo == CheRec.oldChqNo && s.ChqStatus == CheRec.ChqStatus);
                            if (chqArc != null && chqArc.ChqStatus == CheRec.ChqStatus)
                            {
                                chqArc.ChqNo      = CheRec.ChqNo;
                                chqArc.UpdateBy   = CheRec.UpdateBy;
                                chqArc.UpdateDate = CheRec.UpdateDate;
                                chqArc.Reason     = CheRec.Reason;
                                chqArc.Remarks    = CheRec.Remarks;
                                _chequeArchiveService.Update(chqArc);
                                _chequeArchiveService.Save();
                            }
                            else
                            {
                                ChequeArchive ca = new ChequeArchive();
                                ca.ChqStatus  = CheRec.ChqStatus;
                                ca.ChqNo      = CheRec.ChqNo;
                                ca.UpdateBy   = CheRec.UpdateBy;
                                ca.UpdateDate = CheRec.UpdateDate;
                                ca.Reason     = CheRec.Reason;
                                ca.Remarks    = CheRec.Remarks;
                                _chequeArchiveService.Add(ca);
                                _chequeArchiveService.Save();
                            }

                            BankReceipt br = _bankReceiptService.All().Where(s => s.RefNo == CheRec.ChqReceiptNo && s.ChequeNo == CheRec.ChqNo).FirstOrDefault();
                            if (CheRec.ChqStatus == "Deposit")
                            {
                                br.BReceiptDate = CheRec.ChqReceiptDate;
                                br.purAccode    = CheRec.MRAgainst.ToString();
                                br.RefNo        = CheRec.ChqReceiptNo;
                                br.bankAccode   = CheRec.DepositBank;
                                br.ChequeNo     = CheRec.ChqNo;
                                br.ChequeDate   = CheRec.ChqDate;
                                br.Amount       = (double)CheRec.Amount;
                                br.Advance      = false;
                                br.Remarks      = CheRec.Remarks;
                                br.FinYear      = Session["FinYear"].ToString();
                                br.GLPost       = CheRec.GLPost;
                                br.BranchCode   = CheRec.BranchCode;
                                br.VoucherNo    = CheRec.VchrNo;
                                br.SubCode      = CheRec.SubCode;
                                br.bankCode     = CheRec.BankCode;
                                _bankReceiptService.Update(br);
                                _bankReceiptService.Save();
                            }

                            var MoneyR = _moneyReceiptService.All().Where(s => s.MRNo == CheRec.ChqReceiptNo).FirstOrDefault();
                            //insert to provision and money receipt table
                            if (CheRec.ChqStatus == "Encash" && (MoneyR == null ? "000000" : MoneyR.MRNo) != CheRec.ChqReceiptNo)
                            {
                                MoneyReceipt MR = new MoneyReceipt();
                                MR.MRSL        = LoadDropDown.GenerateRecvSlNo(_moneyReceiptService, CheRec.BranchCode, Session["BranchCode"].ToString(), CheRec.ProjCode, Session["VchrConv"].ToString());
                                MR.BranchCode  = (CheRec.BranchCode == null) ? Session["BranchCode"].ToString() : CheRec.BranchCode;
                                MR.ProjCode    = (CheRec.ProjCode == null) ? Session["ProjCode"].ToString() : CheRec.ProjCode;
                                MR.MRNo        = CheRec.ChqReceiptNo;
                                MR.MRDate      = CheRec.ChqReceiptDate;
                                MR.MRAgainst   = CheRec.MRAgainst;
                                MR.VchrNo      = CheRec.VchrNo;
                                MR.PayMode     = "Cq";
                                MR.Posted      = CheRec.PostDated;
                                MR.AdjWithBill = CheRec.AdjWithBill;
                                MR.MRAmount    = CheRec.Amount;
                                MR.Accode      = CheRec.MRAgainst;
                                MR.CustCode    = CheRec.SubCode;
                                MR.FinYear     = Session["FinYear"].ToString();
                                MR.Remarks     = CheRec.Remarks;
                                MR.JobNo       = CheRec.JobNo;
                                MR.Ca_Bk       = CheRec.DepositBank;
                                MR.ChqNo       = CheRec.ChqNo;
                                MR.ChqDate     = CheRec.ChqDate;
                                MR.EncashDate  = CheRec.EncashDate;
                                MR.DepositBank = CheRec.DepositBank;
                                _moneyReceiptService.Add(MR);
                                _moneyReceiptService.Save();

                                var chqExt = _chqRecExtService.All().ToList().Where(s => s.ChqReceiptID == CheRec.ChqReceiptId);
                                foreach (var chqExtitem in chqExt)
                                {
                                    MoneyReceiptExt MRExt = new MoneyReceiptExt();
                                    MRExt.MRId   = _moneyReceiptService.All().OrderBy(s => s.MRId).LastOrDefault().MRId;
                                    MRExt.SaleNo = chqExtitem.BillNo;
                                    MRExt.Amount = chqExtitem.BillAmount;
                                    _moneyReceiptExtService.Add(MRExt);
                                    _moneyReceiptExtService.Save();
                                }
                                LoadDropDown.journalVoucherSave("BR", "I", br.BReceiptNo, CheRec.VchrNo, Session["FinYear"].ToString(), Session["ProjCode"].ToString(), CheRec.BranchCode, CheRec.ChqReceiptDate, CheRec.DepositBank, Session["UserName"].ToString());
                            }
                            ////update to provision
                            //LoadDropDown.journalVoucherRemoval("BR", CheRec.ChqReceiptNo, CheRec.VchrNo, Session["FinYear"].ToString());
                            //LoadDropDown.journalVoucherSave("BR", "I", CheRec.ChqReceiptNo, CheRec.VchrNo, Session["FinYear"].ToString(), Session["ProjCode"].ToString(), CheRec.BranchCode, CheRec.ChqReceiptDate, CheRec.DepositBank, Session["UserName"].ToString());
                            TransactionLogService.SaveTransactionLog(_transactionLogService, "ChequeReceipt", "Update", CheRec.ChqReceiptNo, Session["UserName"].ToString());

                            transaction.Complete();
                            return(Json("1", JsonRequestBehavior.AllowGet));
                        }
                        else
                        {
                            return(Json("2", JsonRequestBehavior.AllowGet));
                        }
                    }
                    else
                    {
                        return(Json("3", JsonRequestBehavior.AllowGet));
                    }
                }
                catch (Exception)
                {
                    transaction.Dispose();
                    return(Json("0", JsonRequestBehavior.AllowGet));
                }
            }
        }
        public ActionResult SaveCheRec(ChequeReceipt CheRec, List <ChequeReceiptExt> AdjBills)
        {
            using (var transaction = new TransactionScope())
            {
                try
                {
                    RBACUser rUser = new RBACUser(Session["UserName"].ToString());
                    if (!rUser.HasPermission("ChequeReceipt_Insert"))
                    {
                        return(Json("X", JsonRequestBehavior.AllowGet));
                    }

                    string BrNo   = "";
                    var    items  = _chequeReceiptService.All().ToList().FirstOrDefault(x => x.ChqReceiptNo == CheRec.ChqReceiptNo);
                    var    chqArc = _chequeArchiveService.All().ToList().Where(x => x.ChqNo == CheRec.ChqNo).Select(s => s.ChqStatus).ToList();
                    if (chqArc.Count == 0 || chqArc.Contains("Deposit") && CheRec.ChqStatus != "Receive" || chqArc.Contains("Encash") && CheRec.ChqStatus != "Deposit" ||
                        chqArc.Contains("Dishonour") && CheRec.ChqStatus != "Encash" || chqArc.Contains("Return") && CheRec.ChqStatus != "Dishonour")
                    {
                        if (items == null)
                        {
                            ChequeReceipt cr = new ChequeReceipt();
                            cr            = CheRec;
                            cr.MRTing     = 0;
                            cr.MRTingTime = null;
                            cr.ProjCode   = Session["ProjCode"].ToString();
                            cr.FinYear    = Session["FinYear"].ToString();
                            _chequeReceiptService.Add(cr);
                            _chequeReceiptService.Save();

                            ChequeArchive CA = new ChequeArchive();
                            CA.ChqNo      = CheRec.ChqNo;
                            CA.ChqStatus  = CheRec.ChqStatus;
                            CA.UpdateBy   = CheRec.UpdateBy;
                            CA.UpdateDate = CheRec.UpdateDate;
                            CA.Reason     = CheRec.Reason;
                            CA.Remarks    = CheRec.Remarks;
                            _chequeArchiveService.Add(CA);
                            _chequeArchiveService.Save();

                            BankReceipt br = new BankReceipt();
                            br.BReceiptNo   = GenerateBankReceiptNo(CheRec.BranchCode);
                            BrNo            = br.BReceiptNo;
                            br.BReceiptDate = CheRec.ChqReceiptDate;
                            br.purAccode    = CheRec.MRAgainst.ToString();
                            br.RefNo        = CheRec.ChqReceiptNo;
                            br.bankAccode   = CheRec.DepositBank;
                            br.ChequeNo     = CheRec.ChqNo;
                            br.ChequeDate   = CheRec.ChqDate;
                            br.Amount       = (double)CheRec.Amount;
                            br.Advance      = false;
                            br.Remarks      = CheRec.Remarks;
                            br.FinYear      = Session["FinYear"].ToString();
                            br.GLPost       = CheRec.GLPost;
                            br.BranchCode   = CheRec.BranchCode;
                            br.VoucherNo    = CheRec.VchrNo;
                            br.SubCode      = CheRec.SubCode;
                            br.bankCode     = CheRec.BankCode;
                            _bankReceiptService.Add(br);
                            _bankReceiptService.Save();

                            if (AdjBills != null)
                            {
                                decimal TotAmt = CheRec.Amount;
                                foreach (var bill in AdjBills)
                                {
                                    ChequeReceiptExt chqExt = new ChequeReceiptExt();
                                    var saleMain            = _salesMainService.All().Where(s => s.SaleNo == bill.BillNo).FirstOrDefault();
                                    chqExt.ChqReceiptID = _chequeReceiptService.All().LastOrDefault().ChqReceiptId;
                                    chqExt.BillNo       = bill.BillNo;
                                    chqExt.BillDate     = saleMain.SaleDate;
                                    if (TotAmt >= bill.BillAmount)
                                    {
                                        chqExt.BillAmount = bill.BillAmount;
                                        TotAmt            = TotAmt - bill.BillAmount;

                                        saleMain.ReceiptNo  = CheRec.ChqReceiptNo;
                                        saleMain.ReceiptAmt = bill.BillAmount;
                                        saleMain.IsPaid     = true;
                                        _salesMainService.Update(saleMain);
                                        _salesMainService.Save();

                                        _chqRecExtService.Add(chqExt);
                                        _chqRecExtService.Save();
                                    }
                                    else
                                    {
                                        if (bill.IsPaid_mre)
                                        {
                                            saleMain.IsPaid  = true;
                                            chqExt.AdjAmount = TotAmt;
                                        }
                                        else
                                        {
                                            saleMain.IsPaid  = false;
                                            chqExt.AdjAmount = TotAmt;
                                        }

                                        chqExt.BillAmount = TotAmt;
                                        _chqRecExtService.Add(chqExt);
                                        _chqRecExtService.Save();

                                        string sql = string.Format("select sm.ReceiptAmt, sm.SaleNo as BillNo, sm.SaleDate as BillDate, (sm.NetAmount - isnull(sum(cre.BillAmount),0)) as Billamount from SalesMain sm left join ChequeReceiptExt cre on cre.BillNo = sm.SaleNo where sm.CustCode = " + CheRec.SubCode + " and sm.IsPaid = 'false'  group by sm.ReceiptAmt, cre.BillNo, sm.NetAmount, sm.SaleNo, sm.SaleDate, cre.BillAmount order by sm.SaleNo");
                                        IEnumerable <billShow> BillLst;
                                        using (AcclineERPContext dbContext = new AcclineERPContext())
                                        {
                                            BillLst = dbContext.Database.SqlQuery <billShow>(sql).ToList();
                                        }
                                        foreach (var Salebill in BillLst)
                                        {
                                            if (Salebill.BillAmount == 0)
                                            {
                                                saleMain.ReceiptNo  = CheRec.ChqReceiptNo;
                                                saleMain.ReceiptAmt = ((Salebill.ReceiptAmt == null) ? 0 : Salebill.ReceiptAmt) + TotAmt;
                                                saleMain.IsPaid     = true;
                                                _salesMainService.Update(saleMain);
                                                _salesMainService.Save();
                                            }
                                        }
                                    }
                                }
                            }

                            TransactionLogService.SaveTransactionLog(_transactionLogService, "ChequeReceipt", "Save", CheRec.ChqReceiptNo, Session["UserName"].ToString());
                            transaction.Complete();
                            return(Json("1", JsonRequestBehavior.AllowGet));
                        }
                        else
                        {
                            return(Json("2", JsonRequestBehavior.AllowGet));
                        }
                    }
                    else
                    {
                        return(Json("3", JsonRequestBehavior.AllowGet));
                    }
                }
                catch (Exception)
                {
                    transaction.Dispose();
                    return(Json("0", JsonRequestBehavior.AllowGet));
                }
            }
        }