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 cv = new CashVoucher { 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 = cv.Create(); if (!postResult.Success) { Rollback(); } return(postResult); }
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 CashVoucher { 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); }
private Result PostTimeDepositEndBalance() { // post time desposit end balance debit side var member = Nfmb.FindByCode(_accountDetail.MemberCode); var account = Account.FindByCode(_accountDetail.AccountCode); var tdDetails = new TimeDepositDetails { CertificateNo = _accountDetail.TimeDepositDetails.CertificateNo }; var cv = new CashVoucher { MemberCode = member.MemberCode, MemberName = member.MemberName, AccountCode = account.AccountCode, AccountTitle = account.AccountTitle, Debit = _accountDetail.EndingBalance, VoucherDate = _voucherDocument.VoucherDate, VoucherNo = _voucherDocument.VoucherNo, TimeDepositDetails = tdDetails, }; var postResult = cv.Create(); if (!postResult.Success) { Rollback(); } return(postResult); }
public static Result ReBalanceWithdrawals(Voucher voucher, decimal totalWithdrawals) { var sqlBuilder = new StringBuilder(); sqlBuilder.AppendLine("SELECT *"); sqlBuilder.AppendLine("FROM cv"); sqlBuilder.AppendLine("WHERE DOC_NUM = ?DOC_NUM"); sqlBuilder.AppendLine("AND CREDIT > 0"); sqlBuilder.AppendLine("LIMIT 1"); var sqlParam = new SqlParameter("?DOC_NUM", voucher.VoucherNo); DataTable dataTable = DatabaseController.ExecuteSelectQuery(sqlBuilder, sqlParam); var cv = new CashVoucher(); foreach (DataRow dataRow in dataTable.Rows) { cv.SetPropertiesFromDataRow(dataRow); } cv.Credit = totalWithdrawals; cv.Amount = totalWithdrawals; cv.AmountInWords = Utilities.Converter.AmountToWords(totalWithdrawals); if (cv.ID == 0) { var company = Nfmb.FindByCode(GlobalSettings.CodeOfCompany); if (company == null || company.ID == 0) { return(new Result(false, "Company Code is not set. Please consult System Administrator")); } cv.MemberCode = company.MemberCode; cv.MemberName = company.MemberName; var coh = Account.FindByCode(GlobalSettings.CodeOfCashOnHand); cv.AccountCode = coh.AccountCode; cv.AccountTitle = coh.AccountTitle; cv.VoucherNo = voucher.VoucherNo; cv.VoucherDate = voucher.VoucherDate; cv.VoucherType = cv.VoucherType; cv.Explanation = "Daily partial withdrawal from Savings Deposit"; return(cv.Create()); } return(cv.Update()); }
public MemberInformationWindow(string memberCode) { InitializeComponent(); _member = Nfmb.FindByCode(memberCode); InitializeLookupControls(); DataContext = _member; TabItemContactInformation.DataContext = _member.ContactInformation; _member.ContactInformation = Contact.WhereMemberCodeIs(memberCode); imgPhoto.Source = ImageTool.CreateImageSourceFromBytes(_member.ContactInformation.Picture); imgSignature.Source = ImageTool.CreateImageSourceFromBytes(_member.ContactInformation.Signature); CrudButtons.Visibility = Visibility.Hidden; stbMemberNameCode.IsEnabled = false; }
private static Result ValidateMemberName(string memberCode, string memberName) { if (string.IsNullOrEmpty(memberCode) || string.IsNullOrEmpty(memberName)) { return(new Result(false, "Member Code or Member Name must not be empty.")); } if (_dataManipulationType == ModelController.DataManipulationType.Create) { Nfmb foundMember = Nfmb.FindByCode(memberCode); if (foundMember != null && foundMember.ID > 0) { return(new Result(false, "Member Code already exists.")); } foundMember = Nfmb.FindByName(memberName); if (foundMember != null && foundMember.ID > 0) { if (foundMember.ID != 0) { return(new Result(false, "Member Name already exists.")); } } } else { Nfmb foundMember = Nfmb.FindByName(memberName); if (foundMember != null && foundMember.ID > 0) { if (foundMember.MemberCode != memberCode) { return(new Result(false, "Member Name already exists.")); } } } return(new Result(true, "ValidateMemberName successful.")); }
private void CurrentItemOnPropertyChanged(object sender, PropertyChangedEventArgs e) { _hasModified = true; var currentItem = (CashVoucher)sender; switch (e.PropertyName) { case "MemberCode": var nfmb = Nfmb.FindByCode(currentItem.MemberCode); currentItem.MemberName = nfmb.MemberName; break; case "AccountCode": var account = Account.FindByCode(currentItem.AccountCode); currentItem.AccountTitle = account.AccountTitle; break; case "Debit": case "Credit": UpdateTotalDebitAndTotalCredit(); break; } }
private Result PostInterestExpense() { // post time desposit end balance 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 cv = new CashVoucher { MemberCode = member.MemberCode, MemberName = member.MemberName, AccountCode = account.AccountCode, AccountTitle = account.AccountTitle, Debit = interestEarned, VoucherDate = _voucherDocument.VoucherDate, VoucherNo = _voucherDocument.VoucherNo, }; var postResult = cv.Create(); if (!postResult.Success) { Rollback(); } return(postResult); }
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 PostButtonOnClick(object sender, RoutedEventArgs e) { var result = _withdrawal.Validate(); if (!result.Success) { MessageWindow.ShowAlertMessage(result.Message); return; } #region --- Withdrawal Credit Side --- var voucher = new Voucher { VoucherDate = _withdrawal.WithdrawalSettings.TransactionDate, VoucherNo = _withdrawal.WithdrawalSettings.WithdrawalVoucherNo, VoucherType = VoucherTypes.CV }; var totalWithdrawals = Withdrawal.TotalWithdrawals(voucher.VoucherNo) + _withdrawal.WithdrawalAmount; result = Withdrawal.ReBalanceWithdrawals(voucher, totalWithdrawals); if (!result.Success) { MessageWindow.ShowAlertMessage(result.Message); return; } #endregion #region --- Withdrawal Debit Side --- var cv = new CashVoucher(); var member = Nfmb.FindByCode(_withdrawal.AccountInfo.MemberCode); cv.MemberCode = member.MemberCode; cv.MemberName = member.MemberName; var account = Account.FindByCode(_withdrawal.AccountInfo.AccountCode); cv.AccountCode = account.AccountCode; cv.AccountTitle = account.AccountTitle; cv.Debit = _withdrawal.WithdrawalAmount; cv.VoucherDate = voucher.VoucherDate; cv.VoucherNo = voucher.VoucherNo; cv.VoucherType = voucher.VoucherType; cv.WithdrawalSlipNo = _withdrawal.WithdrawalSlipNo; cv.Create(); #endregion #region --- Voucher Log --- var voucherLog = new VoucherLog(); voucherLog.Find("CV", cv.VoucherNo); voucherLog.Date = cv.VoucherDate; voucherLog.Initials = MainController.LoggedUser.Initials; voucherLog.Save(); #endregion var validationBuilder = new StringBuilder(); validationBuilder.AppendFormat("{0} {1} {2} {3} {4} {5:yyyy-MM-dd hh:mm:ss} {6}", cv.MemberCode, cv.AccountCode, cv.VoucherNo, cv.WithdrawalSlipNo, cv.Debit, DateTime.Now, MainController.LoggedUser.Initials); if (MessageWindow.ShowConfirmMessage("Print withdrawal validation?") == MessageBoxResult.Yes) { ReportController.PrintWitdrawalValidation(cv); } DialogResult = true; Close(); }
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); } }
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.")); }
public static LoanAmortizationHeader GenerateLoanAmortization( string codeMember, string codeAccount, decimal amountLoan, int termLoan, decimal rateAnnualInterest, System.DateTime grantedDate, decimal monthlyCapitalBuildUp) { var schedule = new LoanAmortizationHeader(); // Member Information var member = Nfmb.FindByCode(codeMember); schedule.MemberCode = member.MemberCode; schedule.MemberName = member.MemberName; schedule.MemberAddress = member.CompleteAddress(); // Account Information var account = Account.FindByCode(codeAccount); schedule.AccountCode = account.AccountCode; schedule.AccountTitle = account.AccountTitle; schedule.LoanAmount = amountLoan; schedule.MonthlyCapitalBuildUp = monthlyCapitalBuildUp; schedule.AnnualInterestRate = rateAnnualInterest; schedule.LoanTerm = termLoan; schedule.ModeOfPayment = "Monthly"; schedule.DateGranted = grantedDate; schedule.DateMaturity = grantedDate.AddMonths(termLoan); schedule.FirstPaymentDate = grantedDate.AddMonths(1); var monthlyInterest = System.Math.Round((amountLoan * (schedule.AnnualInterestRate / 12)), 2); var monthlyPayment = System.Math.Round((amountLoan / termLoan), 2); schedule.MonthlyAmortization = monthlyPayment + monthlyInterest + monthlyCapitalBuildUp; var runningBalance = amountLoan; for (int i = 1; i < termLoan; i++) { var item = new LoanAmortizationDetail(); item.PaymentDate = grantedDate.AddMonths(i); item.PaymentNo = i; item.BeginningBalance = runningBalance; item.Payment = monthlyPayment; item.Interest = monthlyInterest; item.CapitalBuildUp = schedule.MonthlyCapitalBuildUp; item.Amortization = item.Payment + monthlyInterest + item.CapitalBuildUp; item.EndingBalance = item.BeginningBalance - item.Payment; schedule.PaymentSchedules.Add(item); runningBalance = item.EndingBalance; } // Add final payment that, balancing discrepancies in monthly payment and amortization var lastpayment = new LoanAmortizationDetail(); lastpayment.PaymentDate = grantedDate.AddMonths(termLoan); lastpayment.PaymentNo = termLoan; lastpayment.BeginningBalance = runningBalance; lastpayment.Payment = amountLoan - schedule.PaymentSchedules.Sum(payment => payment.Payment); lastpayment.Interest = monthlyInterest; lastpayment.CapitalBuildUp = monthlyCapitalBuildUp; lastpayment.Amortization = lastpayment.Payment + monthlyInterest + lastpayment.CapitalBuildUp; lastpayment.EndingBalance = lastpayment.BeginningBalance - lastpayment.Payment; schedule.PaymentSchedules.Add(lastpayment); return(schedule); }