Пример #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 void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            if (!CanModify)
            {
                MessageWindow.AlertRecordIsLocked();
                return;
            }

            if (MessageWindow.ConfirmDeleteVoucher() != MessageBoxResult.Yes)
            {
                return;
            }
            JournalVoucher.DeleteAll(_voucherNumber);
            Find(_voucherNumber);
        }
Пример #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
 private void Rollback()
 {
     JournalVoucher.DeleteAll(_voucherDocument.VoucherNo);
 }