Пример #1
0
        private void Find(int docNum)
        {
            try
            {
                CancelledLabel.Visibility = Visibility.Collapsed;

                _currentItems = JournalVoucher.WhereDocumentNumberIs(docNum);
                _currentItems.CollectionChanged += CurrentItemsCollectionChanged;

                foreach (JournalVoucher currentItem in _currentItems)
                {
                    currentItem.PropertyChanged += CurrentItemOnPropertyChanged;
                }
                _voucherNumber = docNum;

                RefreshDisplay();

                DataContext  = _currentItems;
                _hasModified = false;
            }
            catch (Exception exception)
            {
                MessageWindow.ShowAlertMessage(exception.Message);
            }
        }
        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);
            }
        }
Пример #3
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)));
        }
Пример #4
0
        public Result Validate()
        {
            if (AmountAllocated <= 0m)
            {
                return(new Result(false, "Amount allocated is not valid."));
            }

            if (MaintainingBalance <= 0m)
            {
                return(new Result(false, "Maintaining Balance is not valid."));
            }

            if (JournalVoucherNumber <= 0)
            {
                return(new Result(false, "Journal Voucher Number is not valid."));
            }

            if (string.IsNullOrEmpty(ShareCapitalCode))
            {
                return(new Result(false, "Share Capital Code is required."));
            }

            if (string.IsNullOrEmpty(InterestOnShareCapitalPayableCode))
            {
                return(new Result(false, "Interest on Share Capital Payable Code is required."));
            }

            if (string.IsNullOrEmpty(CooperativeCode))
            {
                return(new Result(false, "Cooperative Code is required."));
            }

            // with database related validation
            var collection = JournalVoucher.WhereDocumentNumberIs(JournalVoucherNumber);

            if (collection.Any())
            {
                return(new Result(false, "Journal Voucher Number already in use."));
            }

            _shareCapitalAccount = Account.FindByCode(ShareCapitalCode);
            if (string.IsNullOrEmpty(_shareCapitalAccount.AccountTitle))
            {
                return(new Result(false, "Share Capital Code is not valid or does not exist."));
            }

            _interestOnShareCapitalAccount = Account.FindByCode(InterestOnShareCapitalPayableCode);
            if (string.IsNullOrEmpty(_interestOnShareCapitalAccount.AccountTitle))
            {
                return(new Result(false, "Interest on Share Capital Code is not valid or does not exist."));
            }

            _cooperative = Nfmb.FindByCode(CooperativeCode);
            if (string.IsNullOrEmpty(_cooperative.MemberName))
            {
                return(new Result(false, "Cooperatice Code is not valid or does not exist."));
            }

            // after all the above validation succeeds then...
            return(new Result(true, "Valid."));
        }