public IActionResult SaveDebitVoucher(DebitVoucherViewModel debitVoucherViewModel)
        {
            if (!string.IsNullOrEmpty(debitVoucherViewModel.VoucherNumber))
            {
                var tempVoucherHead = _work.TempVoucherHead.Find(x => x.VoucherNumber == debitVoucherViewModel.VoucherNumber).FirstOrDefault();

                if (tempVoucherHead != null)
                {
                    VoucherHead voucherHead = new VoucherHead
                    {
                        VoucherId        = tempVoucherHead.VoucherId,
                        VoucherNumber    = debitVoucherViewModel.VoucherNumber,
                        EntryDate        = Convert.ToDateTime(debitVoucherViewModel.Date),
                        PaidTo           = debitVoucherViewModel.PaidTo,
                        PreparedBy       = debitVoucherViewModel.PreparedBy,
                        PreparedByUserId = debitVoucherViewModel.PreparedByUserId,
                        ReceivedBy       = debitVoucherViewModel.ReceivedBy,
                        VoucherSaveState = VoucherSaveStates.Saved
                    };

                    _work.VoucherHead.Add(voucherHead);

                    // === voucher number === //

                    VoucherNumber voucherNumber = _work.VoucherNumber.Find(x => x.Number == debitVoucherViewModel.VoucherNumber).FirstOrDefault();

                    if (voucherNumber.State != VoucherSaveStates.Saved)
                    {
                        voucherNumber.State = VoucherSaveStates.Saved;

                        _work.VoucherNumber.Update(voucherNumber);
                    }

                    // === === === //

                    foreach (var item in debitVoucherViewModel.DebitVoucherItems)
                    {
                        VoucherDetail voucherDetail = new VoucherDetail
                        {
                            VoucherNumber      = debitVoucherViewModel.VoucherNumber,
                            Particulars        = item.Particulars,
                            VoucherHeadId      = voucherHead.Id,
                            AccountSubLedgerId = item.LedgerId == 0 ? (int?)null : item.LedgerId,
                            Ref          = item.Ref,
                            DebitAmount  = item.DebitAmount,
                            CreditAmount = item.CreditAmount
                        };

                        if (item.VoucherItemType == "Dr")
                        {
                            voucherDetail.TransactionTypes = TransactionTypes.Debit;
                        }
                        else if (item.VoucherItemType == "Cr")
                        {
                            voucherDetail.TransactionTypes = TransactionTypes.Credit;
                        }

                        _work.VoucherDetail.Add(voucherDetail);
                    }

                    bool isSaved = _work.Save() > 0;

                    _sql.DeleteVoucherHead(debitVoucherViewModel.VoucherNumber);   //CHANGE ISDELETED & ISACTIVE VALUE
                    _sql.DeleteVoucherDetail(debitVoucherViewModel.VoucherNumber); //DELETE TEMP VOUCHER DETAILS

                    if (isSaved)
                    {
                        return(Json(true));
                    }

                    return(Json(false));
                }
            }

            return(Json(false));
        }
        public IActionResult DebitVoucher(DebitVoucherViewModel debitVoucherViewModel)
        {
            if (!string.IsNullOrEmpty(debitVoucherViewModel.VoucherNumber))
            {
                var tempVoucherHead = _work.TempVoucherHead.GetVoucherNumberWiseVoucher(debitVoucherViewModel.VoucherNumber);

                if (tempVoucherHead != null)
                {
                    tempVoucherHead.VoucherNumber    = debitVoucherViewModel.VoucherNumber;
                    tempVoucherHead.EntryDate        = Convert.ToDateTime(debitVoucherViewModel.Date);
                    tempVoucherHead.PaidTo           = debitVoucherViewModel.PaidTo;
                    tempVoucherHead.PreparedBy       = debitVoucherViewModel.PreparedBy;
                    tempVoucherHead.PreparedByUserId = debitVoucherViewModel.PreparedByUserId;
                    tempVoucherHead.ReceivedBy       = debitVoucherViewModel.ReceivedBy;
                    tempVoucherHead.VoucherSaveState = VoucherSaveStates.Running;

                    _work.TempVoucherHead.Update(tempVoucherHead);

                    // === voucher number === //

                    VoucherNumber voucherNumber = _work.VoucherNumber.Find(x => x.Number == debitVoucherViewModel.VoucherNumber).FirstOrDefault();

                    if (voucherNumber.State != VoucherSaveStates.Running)
                    {
                        voucherNumber.State = VoucherSaveStates.Running;

                        _work.VoucherNumber.Update(voucherNumber);
                    }

                    // === === === //

                    _sql.DeleteVoucherDetail(debitVoucherViewModel.VoucherNumber);  //DELETE PREVIOUS TEMP VOUCHER DETAILS

                    foreach (var item in debitVoucherViewModel.DebitVoucherItems)
                    {
                        TempVoucherDetail tempVoucherDetail = new TempVoucherDetail
                        {
                            VoucherNumber      = debitVoucherViewModel.VoucherNumber,
                            Particulars        = item.Particulars,
                            TempVoucherHeadId  = tempVoucherHead.Id,
                            AccountSubLedgerId = item.LedgerId == 0 ? (int?)null : item.LedgerId,
                            Ref          = item.Ref,
                            DebitAmount  = item.DebitAmount,
                            CreditAmount = item.CreditAmount
                        };

                        if (item.VoucherItemType == "Dr")
                        {
                            tempVoucherDetail.TransactionTypes = TransactionTypes.Debit;
                        }
                        else if (item.VoucherItemType == "Cr")
                        {
                            tempVoucherDetail.TransactionTypes = TransactionTypes.Credit;
                        }

                        _work.TempVoucherDetail.Add(tempVoucherDetail);
                    }

                    bool isSaved = _work.Save() > 0;

                    if (isSaved)
                    {
                        return(Json(true));
                    }

                    return(Json(false));
                }
            }

            return(Json(false));
        }