Пример #1
0
        private void btnCancelled_Click(object sender, RoutedEventArgs e)
        {
            if (!CanModify)
            {
                MessageWindow.AlertRecordIsLocked();
                return;
            }

            if (MessageWindow.ConfirmCancelVoucher() != MessageBoxResult.Yes)
            {
                return;
            }

            JournalVoucher.DeleteAll(_voucherNumber);

            var cancelledJournalVoucher = new JournalVoucher
            {
                MemberCode   = "CANCEL",
                MemberName   = "CANCELLED",
                AccountCode  = "CANCEL",
                AccountTitle = "CANCELLED",
                Debit        = 0m,
                Credit       = 0m,
                VoucherDate  = _voucherDate,
                VoucherNo    = _voucherNumber,
                VoucherType  = _voucherType
            };

            cancelledJournalVoucher.Create();
            Find(_voucherNumber);
        }
Пример #2
0
        private Result PostCashOnHand()
        {
            // post cash on hand credit side
            var member      = Nfmb.FindByCode(_accountDetail.MemberCode);
            var accountCode = GlobalSettings.CodeOfCashOnHand;

            if (string.IsNullOrWhiteSpace(accountCode))
            {
                return(new Result(false, GenerateCodeOfAccountNotSetMessage("Cash on Hand")));
            }
            var account = Account.FindByCode(accountCode);
            var amount  = _accountDetail.EndingBalance +
                          _accountDetail.TimeDepositDetails.CalculateInterestEarned(_voucherDocument.VoucherDate) -
                          _accountDetail.TimeDepositDetails.CalculateServiceFee(_voucherDocument.VoucherDate);
            var cv = new JournalVoucher
            {
                MemberCode    = member.MemberCode,
                MemberName    = member.MemberName,
                AccountCode   = account.AccountCode,
                AccountTitle  = account.AccountTitle,
                Credit        = amount,
                VoucherDate   = _voucherDocument.VoucherDate,
                VoucherNo     = _voucherDocument.VoucherNo,
                Explanation   = "Withdrawal of Time Deposit",
                AmountInWords = Converter.AmountToWords(amount),
            };

            var postResult = cv.Create();

            if (!postResult.Success)
            {
                Rollback();
            }
            return(postResult);
        }
Пример #3
0
        private Result PostServiceFee()
        {
            // post service fee credit side
            var member      = Nfmb.FindByCode(_accountDetail.MemberCode);
            var accountCode = GlobalSettings.CodeOfServiceFee;

            if (string.IsNullOrWhiteSpace(accountCode))
            {
                return(new Result(false, GenerateCodeOfAccountNotSetMessage("Service Fee")));
            }
            var account = Account.FindByCode(accountCode);
            var jv      = new JournalVoucher
            {
                MemberCode   = member.MemberCode,
                MemberName   = member.MemberName,
                AccountCode  = account.AccountCode,
                AccountTitle = account.AccountTitle,
                Credit       = _accountDetail.TimeDepositDetails.CalculateServiceFee(_voucherDocument.VoucherDate),
                VoucherDate  = _voucherDocument.VoucherDate,
                VoucherNo    = _voucherDocument.VoucherNo,
            };

            var postResult = jv.Create();

            if (!postResult.Success)
            {
                Rollback();
            }
            return(postResult);
        }
Пример #4
0
        public void Process()
        {
            var transactionDate = MainController.LoggedUser.TransactionDate;
            var previousYear    = transactionDate.Year - 1;

            var montlyEndBalances = GetMontlyEndBalance(previousYear, ShareCapitalCode);

            if (!montlyEndBalances.Any())
            {
                MessageWindow.ShowAlertMessage(string.Format("No transactions were found having account {0}.",
                                                             _shareCapitalAccount.AccountTitle));
                return;
            }

            // total monthly average
            var filteredMonthlyEndBalances = (from meb in montlyEndBalances
                                              where meb.Average >= _maintainingBalance
                                              select meb).ToList();

            var totalMonthlyAverage = filteredMonthlyEndBalances.Sum(item => item.Average);

            // rate
            var rate = AmountAllocated / totalMonthlyAverage;

            foreach (var item in filteredMonthlyEndBalances)
            {
                if (item.Average <= 0)
                {
                    continue;
                }
                var jvCredit = new JournalVoucher
                {
                    MemberCode   = item.MemberCode,
                    MemberName   = item.MemberName,
                    AccountCode  = _shareCapitalAccount.AccountCode,
                    AccountTitle = _shareCapitalAccount.AccountTitle,
                    Credit       = item.Average * rate,
                    VoucherDate  = transactionDate,
                    VoucherNo    = JournalVoucherNumber,
                    IsPosted     = true
                };
                jvCredit.Create();
            }

            var jvDebit = new JournalVoucher
            {
                MemberCode   = _cooperative.MemberCode,
                MemberName   = _cooperative.MemberName,
                AccountCode  = _interestOnShareCapitalAccount.AccountCode,
                AccountTitle = _interestOnShareCapitalAccount.AccountTitle,
                Debit        = _amountAllocated,
                VoucherDate  = transactionDate,
                VoucherNo    = JournalVoucherNumber,
                IsPosted     = true,
                Explanation  = "Posting Dividend Distribution"
            };

            jvDebit.Create();
        }
Пример #5
0
        private Result PostInterestExpense()
        {
            // post interest expense debit side
            var interestEarned = _accountDetail.TimeDepositDetails.CalculateInterestEarned(_voucherDocument.VoucherDate);

            if (interestEarned == 0)
            {
                return(new Result(true, "No interest earned."));
            }

            var member      = Nfmb.FindByCode(_accountDetail.MemberCode);
            var accountCode = GlobalSettings.CodeOfInterestExpenseOnTimeDeposit;

            if (string.IsNullOrWhiteSpace(accountCode))
            {
                return(new Result(false, GenerateCodeOfAccountNotSetMessage("Interest Expense On Time Deposit")));
            }
            var account = Account.FindByCode(accountCode);
            var jv      = new JournalVoucher
            {
                MemberCode   = member.MemberCode,
                MemberName   = member.MemberName,
                AccountCode  = account.AccountCode,
                AccountTitle = account.AccountTitle,
                Debit        = interestEarned,
                VoucherDate  = _voucherDocument.VoucherDate,
                VoucherNo    = _voucherDocument.VoucherNo,
            };

            var postResult = jv.Create();

            if (!postResult.Success)
            {
                Rollback();
            }
            return(postResult);
        }
Пример #6
0
        private Result PostTimeDepositInterestEarned()
        {
            // post time desposit interest earned credit side
            var member  = Nfmb.FindByCode(_accountDetail.MemberCode);
            var account = Account.FindByCode(_accountDetail.AccountCode);

            var previousDetail = _accountDetail.TimeDepositDetails;
            var asOf           = GlobalSettings.DateOfOpenTransaction;
            var interestEarned = previousDetail.CalculateInterestEarned(asOf) - previousDetail.CalculateServiceFee(asOf);

            var tdDetails = SetNewTimeDepositDetails();

            if (tdDetails == null)
            {
                return(new Result(false, "Time deposit details not set."));
            }
            var jv = new JournalVoucher
            {
                MemberCode         = member.MemberCode,
                MemberName         = member.MemberName,
                AccountCode        = account.AccountCode,
                AccountTitle       = account.AccountTitle,
                Credit             = interestEarned,
                VoucherDate        = _voucherDocument.VoucherDate,
                VoucherNo          = _voucherDocument.VoucherNo,
                TimeDepositDetails = tdDetails,
            };

            var postResult = jv.Create();

            if (!postResult.Success)
            {
                Rollback();
            }
            return(postResult);
        }
        private void btnPost_Click(object sender, EventArgs e)
        {
            var collection = JournalVoucher.WhereDocumentNumberIs(_journalVoucher.VoucherNo);

            if (collection.Count > 0)
            {
                MessageWindow.ShowAlertMessage("JV No. already in use.");
                return;
            }
            try
            {
                btnPost.Content = "Posting, please wait...";

                JournalVoucher jv;
                foreach (var item in _viewModel.Collection)
                {
                    jv = new JournalVoucher();

                    jv.MemberCode   = item.MemberCode;
                    jv.MemberName   = item.MemberName;
                    jv.AccountCode  = item.AccountCode;
                    jv.AccountTitle = item.AccountTitle;
                    jv.Credit       = item.Credit;

                    jv.VoucherDate = _journalVoucher.VoucherDate;
                    jv.VoucherNo   = _journalVoucher.VoucherNo;
                    jv.VoucherType = VoucherTypes.JV;

                    jv.IsPosted = true;
                    jv.Create();
                }

                // closing
                jv = new JournalVoucher();

                var coop = Nfmb.FindByCode(GlobalSettings.CodeOfCompany);
                jv.MemberCode = coop.MemberCode;
                jv.MemberName = coop.MemberName;
                var intExpense = _viewModel.InterestExpenseOnSavingsDepositAccount;
                jv.AccountCode  = intExpense.AccountCode;
                jv.AccountTitle = intExpense.AccountTitle;
                jv.Debit        = _viewModel.Collection.Sum(voucher => voucher.Credit);

                jv.VoucherDate = _journalVoucher.VoucherDate;
                jv.VoucherNo   = _journalVoucher.VoucherNo;
                jv.VoucherType = VoucherTypes.JV;

                jv.Explanation = "Savings Deposit interest posting";

                jv.IsPosted = true;
                jv.Create();

                #region --- Voucher Log ---

                var voucherLog = new VoucherLog();
                voucherLog.Find("JV", _journalVoucher.VoucherNo);
                voucherLog.Date     = _journalVoucher.VoucherDate;
                voucherLog.Initials = MainController.LoggedUser.Initials;
                voucherLog.Save();

                #endregion

                btnPost.Content = string.Format("Posting Complete");
                MessageWindow.ShowNotifyMessage("Interest on Savings Deposit succesfully posted!");
                DialogResult = true;
                Close();
            }
            catch (Exception exception)
            {
                MessageWindow.ShowAlertMessage(exception.Message);
            }
        }
Пример #8
0
        private Result PostToVoucher()
        {
            var postingDetails = new LoanPostingDetails
            {
                VoucherType = VoucherTypes.CV,
                VoucherDate = GlobalSettings.DateOfOpenTransaction
            };

            postingDetails.VoucherNumber = Voucher.LastDocumentNo(postingDetails.VoucherType) + 1;

            postingDetails.ReleaseNumber = ModelController.Releases.MaxReleaseNumber() + 1;
            postingDetails.ReleaseDate   = postingDetails.VoucherDate;

            // 1. ask user to enter voucher information
            var postingWindow = new LoanPostingWindow(postingDetails);

            if (postingWindow.ShowDialog() != true)
            {
                return(new Result(false, "Posting was cancelled by user."));
            }

            // 1.1 Must be open transaction
            if (postingDetails.VoucherDate != GlobalSettings.DateOfOpenTransaction)
            {
                return(new Result(false, "Voucher date is locked!"));
            }
            if (postingDetails.VoucherDate != MainController.LoggedUser.TransactionDate)
            {
                return(new Result(false, "Transaction Date is not valid or not set!"));
            }

            // 2. inform user if voucher information already exist, ask if to overwrite

            if (postingDetails.VoucherType == VoucherTypes.CV)
            {
                ObservableCollection <CashVoucher> cvEntries =
                    CashVoucher.WhereDocumentNumberIs(postingDetails.VoucherNumber);
                if (cvEntries.Count > 0)
                {
                    return(new Result(false, string.Format("{0} #{1} already exist!", postingDetails.VoucherType,
                                                           postingDetails.VoucherNumber)));
                }
            }

            if (postingDetails.VoucherType == VoucherTypes.JV)
            {
                ObservableCollection <JournalVoucher> jvEntries =
                    JournalVoucher.WhereDocumentNumberIs(postingDetails.VoucherNumber);
                if (jvEntries.Count > 0)
                {
                    return(new Result(false, string.Format("{0} #{1} already exist!", postingDetails.VoucherType,
                                                           postingDetails.VoucherNumber)));
                }
            }

            // 3. post transaction details

            _loanDetails.ReleaseNo    = postingDetails.ReleaseNumber;
            _loanDetails.DateReleased = postingDetails.ReleaseDate;

            //TODO: Loan Application Information
            //loanDetails.ThisMonth
            //loanDetails.DateApplied = _loanDetail.DateGranted;
            //loanDetails.DateApproved
            //loanDetails.DateCancelled;
            //loanDetails.DateReleased


            // net proceeds
            var netProceeds = new ComputationDetail
            {
                AccountCode  = _loanComputation.NetProceedsCode,
                AccountTitle = _loanComputation.NetProceedsTitle,
                Amount       = _loanComputation.NetProceedsAmount
            };

            if (postingDetails.VoucherType == VoucherTypes.JV)
            {
                #region --- Add entry for Cash On Hand ---

                var net = new JournalVoucher
                {
                    MemberCode   = _loanDetails.MemberCode,
                    MemberName   = _loanDetails.MemberName,
                    AccountCode  = netProceeds.AccountCode,
                    AccountTitle = netProceeds.AccountTitle,
                    Credit       = netProceeds.Amount,
                    VoucherDate  = postingDetails.VoucherDate,
                    VoucherNo    = postingDetails.VoucherNumber,
                };
                net.Amount        = net.Credit;
                net.AmountInWords = Converter.AmountToWords(net.Amount);
                Result postResult = net.Create();
                if (!postResult.Success)
                {
                    JournalVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Add entries for Charges ---

                foreach (ComputationDetail computationDetail in _loanComputation.Charges)
                {
                    if (string.IsNullOrEmpty(computationDetail.AccountCode) || computationDetail.Amount == 0)
                    {
                        continue;
                    }
                    var charges = new JournalVoucher
                    {
                        MemberCode   = _loanDetails.MemberCode,
                        MemberName   = _loanDetails.MemberName,
                        AccountCode  = computationDetail.AccountCode,
                        AccountTitle = computationDetail.AccountTitle,
                        Credit       = computationDetail.Amount,
                        VoucherDate  = postingDetails.VoucherDate,
                        VoucherNo    = postingDetails.VoucherNumber
                    };
                    postResult = charges.Create();
                    if (postResult.Success)
                    {
                        continue;
                    }
                    JournalVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Add entries for Deductions ---

                foreach (ComputationDetail computationDetail in _loanComputation.Deductions)
                {
                    if (string.IsNullOrEmpty(computationDetail.AccountCode) || computationDetail.Amount == 0)
                    {
                        continue;
                    }
                    var deductions = new JournalVoucher
                    {
                        MemberCode   = _loanDetails.MemberCode,
                        MemberName   = _loanDetails.MemberName,
                        AccountCode  = computationDetail.AccountCode,
                        AccountTitle = computationDetail.AccountTitle,
                        Credit       = computationDetail.Amount,
                        VoucherDate  = postingDetails.VoucherDate,
                        VoucherNo    = postingDetails.VoucherNumber
                    };
                    postResult = deductions.Create();
                    if (postResult.Success)
                    {
                        continue;
                    }
                    JournalVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Add entry for Unearned Income ---

                Account ui             = Account.FindByCode(GlobalSettings.CodeOfUnearnedIncome);
                var     unearnedIncome = new JournalVoucher
                {
                    MemberCode   = _loanDetails.MemberCode,
                    MemberName   = _loanDetails.MemberName,
                    AccountCode  = ui.AccountCode,
                    AccountTitle = ui.AccountTitle,
                    Credit       = _loanAmortizationHeader.PaymentSchedules.Sum(sched => sched.Interest),
                    VoucherDate  = postingDetails.VoucherDate,
                    VoucherNo    = postingDetails.VoucherNumber
                };

                postResult = unearnedIncome.Create();
                if (!postResult.Success)
                {
                    JournalVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Add entry for Capital Build-Up ---

                Account cbu            = Account.FindByCode(GlobalSettings.CodeOfCapitalBuildUp);
                var     capitalBuildUp = new JournalVoucher
                {
                    MemberCode   = _loanDetails.MemberCode,
                    MemberName   = _loanDetails.MemberName,
                    AccountCode  = cbu.AccountCode,
                    AccountTitle = cbu.AccountTitle,
                    Credit       = _loanAmortizationHeader.PaymentSchedules.Sum(sched => sched.CapitalBuildUp),
                    VoucherDate  = postingDetails.VoucherDate,
                    VoucherNo    = postingDetails.VoucherNumber
                };

                postResult = capitalBuildUp.Create();
                if (!postResult.Success)
                {
                    JournalVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Finally add entry for the loan applied ---

                var loanVoucherEntry = new JournalVoucher
                {
                    MemberCode   = _loanDetails.MemberCode,
                    MemberName   = _loanDetails.MemberName,
                    AccountCode  = _loanDetails.AccountCode,
                    AccountTitle = _loanDetails.AccountTitle,
                    Debit        = _loanDetails.LoanAmount + unearnedIncome.Credit + capitalBuildUp.Credit,
                    VoucherDate  = postingDetails.VoucherDate,
                    VoucherNo    = postingDetails.VoucherNumber,
                    LoanDetails  = _loanDetails,
                    Explanation  = _loanDetails.GenerateExplanation()
                };

                postResult = loanVoucherEntry.Create();
                if (!postResult.Success)
                {
                    JournalVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion
            }
            else
            {
                #region --- Add entry for Cash On Hand ---

                var net = new CashVoucher
                {
                    MemberCode   = _loanDetails.MemberCode,
                    MemberName   = _loanDetails.MemberName,
                    AccountCode  = netProceeds.AccountCode,
                    AccountTitle = netProceeds.AccountTitle,
                    Credit       = netProceeds.Amount,
                    VoucherDate  = postingDetails.VoucherDate,
                    VoucherNo    = postingDetails.VoucherNumber,
                };
                net.Amount        = net.Credit;
                net.AmountInWords = Converter.AmountToWords(net.Amount);
                Result postResult = net.Create();
                if (!postResult.Success)
                {
                    CashVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Add entries for Charges ---

                foreach (ComputationDetail computationDetail in _loanComputation.Charges)
                {
                    if (string.IsNullOrEmpty(computationDetail.AccountCode) || computationDetail.Amount == 0)
                    {
                        continue;
                    }
                    var charges = new CashVoucher
                    {
                        MemberCode   = _loanDetails.MemberCode,
                        MemberName   = _loanDetails.MemberName,
                        AccountCode  = computationDetail.AccountCode,
                        AccountTitle = computationDetail.AccountTitle,
                        Credit       = computationDetail.Amount,
                        VoucherDate  = postingDetails.VoucherDate,
                        VoucherNo    = postingDetails.VoucherNumber
                    };
                    postResult = charges.Create();
                    if (postResult.Success)
                    {
                        continue;
                    }
                    CashVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Add entries for Deductions ---

                foreach (ComputationDetail computationDetail in _loanComputation.Deductions)
                {
                    if (string.IsNullOrEmpty(computationDetail.AccountCode) || computationDetail.Amount == 0)
                    {
                        continue;
                    }
                    var deductions = new CashVoucher
                    {
                        MemberCode   = _loanDetails.MemberCode,
                        MemberName   = _loanDetails.MemberName,
                        AccountCode  = computationDetail.AccountCode,
                        AccountTitle = computationDetail.AccountTitle,
                        Credit       = computationDetail.Amount,
                        VoucherDate  = postingDetails.VoucherDate,
                        VoucherNo    = postingDetails.VoucherNumber
                    };
                    postResult = deductions.Create();
                    if (postResult.Success)
                    {
                        continue;
                    }
                    CashVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Add entry for Unearned Income ---

                Account ui             = Account.FindByCode(GlobalSettings.CodeOfUnearnedIncome);
                var     unearnedIncome = new CashVoucher
                {
                    MemberCode   = _loanDetails.MemberCode,
                    MemberName   = _loanDetails.MemberName,
                    AccountCode  = ui.AccountCode,
                    AccountTitle = ui.AccountTitle,
                    Credit       = _loanAmortizationHeader.PaymentSchedules.Sum(sched => sched.Interest),
                    VoucherDate  = postingDetails.VoucherDate,
                    VoucherNo    = postingDetails.VoucherNumber
                };

                postResult = unearnedIncome.Create();
                if (!postResult.Success)
                {
                    CashVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Add entry for Capital Build-Up ---

                Account cbu            = Account.FindByCode(GlobalSettings.CodeOfCapitalBuildUp);
                var     capitalBuildUp = new CashVoucher
                {
                    MemberCode   = _loanDetails.MemberCode,
                    MemberName   = _loanDetails.MemberName,
                    AccountCode  = cbu.AccountCode,
                    AccountTitle = cbu.AccountTitle,
                    Credit       = _loanAmortizationHeader.PaymentSchedules.Sum(sched => sched.CapitalBuildUp),
                    VoucherDate  = postingDetails.VoucherDate,
                    VoucherNo    = postingDetails.VoucherNumber
                };

                postResult = capitalBuildUp.Create();
                if (!postResult.Success)
                {
                    CashVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion

                #region --- Finally add entry for the loan applied ---

                var loanVoucherEntry = new CashVoucher
                {
                    MemberCode   = _loanDetails.MemberCode,
                    MemberName   = _loanDetails.MemberName,
                    AccountCode  = _loanDetails.AccountCode,
                    AccountTitle = _loanDetails.AccountTitle,
                    Debit        = _loanDetails.LoanAmount + unearnedIncome.Credit + capitalBuildUp.Credit,
                    VoucherDate  = postingDetails.VoucherDate,
                    VoucherNo    = postingDetails.VoucherNumber,
                    LoanDetails  = _loanDetails,
                    Explanation  = _loanDetails.GenerateExplanation()
                };

                postResult = loanVoucherEntry.Create();
                if (!postResult.Success)
                {
                    CashVoucher.DeleteAll(postingDetails.VoucherNumber);
                    return(postResult);
                }

                #endregion
            }

            #region --- Voucher Log ---

            var voucherLog = new VoucherLog();
            voucherLog.Find(postingDetails.VoucherType.ToString(), postingDetails.VoucherNumber);
            voucherLog.Date     = postingDetails.VoucherDate;
            voucherLog.Initials = MainController.LoggedUser.Initials;

            voucherLog.Save();

            #endregion

            return(new Result(true, string.Format("A loan has been created! Please check {0} #{1}.",
                                                  postingDetails.VoucherType, postingDetails.VoucherNumber)));
        }
Пример #9
0
        public void Process()
        {
            var transactionDate = MainController.LoggedUser.TransactionDate;
            var previousYear    = transactionDate.Year - 1;

            var interestOnLoans = GetMontlyEndBalance(previousYear, InterestOnLoanCode);
            var interestRebates = GetMontlyEndBalance(previousYear, InterestRebateCode);

            // loop each interest on loans, subtract any interest rebates per member
            var endBalances = new List <Tuple <string, decimal> >();

            foreach (var item in interestOnLoans)
            {
                var realBalance = item.December - item.Beginning;
                if (realBalance > 0)
                {
                    var rebate      = interestRebates.SingleOrDefault(t => t.MemberCode.Trim() == item.MemberCode.Trim());
                    var totalRebate = 0m;

                    if (rebate != null)
                    {
                        totalRebate = rebate.December - rebate.Beginning;
                    }

                    var endBalance = realBalance - totalRebate;
                    if (endBalance > 0)
                    {
                        endBalances.Add(new Tuple <string, decimal>(item.MemberCode, endBalance));
                    }
                }
            }

            var totalInterestFromLoans = endBalances.Sum(t => t.Item2);
            var rate = _amountAllocated / totalInterestFromLoans;

            foreach (var eb in endBalances)
            {
                var item = interestOnLoans.SingleOrDefault(t => t.MemberCode.Trim() == eb.Item1.Trim());
                if (item == null)
                {
                    Console.WriteLine(@"This must not happen!!!");
                    continue;
                }
                var jvCredit = new JournalVoucher
                {
                    MemberCode   = item.MemberCode,
                    MemberName   = item.MemberName,
                    AccountCode  = _shareCapitalAccount.AccountCode,
                    AccountTitle = _shareCapitalAccount.AccountTitle,
                    Credit       = eb.Item2 * rate,
                    VoucherDate  = transactionDate,
                    VoucherNo    = JournalVoucherNumber,
                    IsPosted     = true
                };
                jvCredit.Create();
            }

            var jvDebit = new JournalVoucher
            {
                MemberCode   = _cooperative.MemberCode,
                MemberName   = _cooperative.MemberName,
                AccountCode  = _patronageRefundAccount.AccountCode,
                AccountTitle = _patronageRefundAccount.AccountTitle,
                Debit        = _amountAllocated,
                VoucherDate  = transactionDate,
                VoucherNo    = JournalVoucherNumber,
                IsPosted     = true,
                Explanation  = "Posting Patronage Refund"
            };

            jvDebit.Create();
        }