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); } }
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))); }
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.")); }