private bool TryInsertNewDonationTransaction(DonorSimpleEntryViewModel vm) { bool success = false; try { AccountingTransaction transaction = new AccountingTransaction(); transaction.AccountTransactionID = Guid.NewGuid(); transaction.Amount = vm.Amount.GetValueOrDefault(); transaction.TransactionDate = vm.TransactionDate.GetValueOrDefault(); transaction.AccountingTransactionSource = new AccountingTransactionSource() { DonationDonorEntityID = vm.DonationDonorEntityID }; transaction.Description = "Donation Entry (" + vm.DonorEntryTitle + ")"; IEnumerable<AccountingTransactionAccount> accounts = unitOfWork.AccountingTransactionAccountRepository.Get(x => x.Active && x.IsDonation && (x.IsDefaultCredit || x.IsDefaultDebit)); foreach (var account in accounts) { transaction.AccountingTransactionAccountingTransactionAccounts.Add(new AccountingTransactionAccountingTransactionAccount() { AccountingTransactionAccount = account, IsTransactionCredit = account.IsDefaultCredit }); } unitOfWork.AccountingTransactionRepository.Insert(transaction); unitOfWork.Save(); success = true; } catch (Exception e) { e.LogException(); } return success; }
public ActionResult Create(AccountingTransactionBaseViewModel accountingTransactionBaseViewModel) { if (ModelState.IsValid) { AccountingTransaction newAccountingTransaction = new AccountingTransaction(); AccountingPeriodOpeningClosingTransaction accountingPeriodOpeningClosingTransaction = null; newAccountingTransaction = accountingTransactionBaseViewModel.AccountingTransaction; newAccountingTransaction.AccountTransactionID = Guid.NewGuid(); SetupAccountForTransaction(ref newAccountingTransaction, accountingTransactionBaseViewModel); CheckAndUpdateTheDonorTransactionSource(ref newAccountingTransaction, accountingTransactionBaseViewModel.AccountingTransaction.AccountingTransactionSource); if (accountingTransactionBaseViewModel.IsTransactionOpeningClosingTransaction) { accountingPeriodOpeningClosingTransaction = new AccountingPeriodOpeningClosingTransaction(); AccountingPeriodTimeFrame pf = unitOfWork.AccountingPeriodTimeFrameRepository.GetByID(accountingTransactionBaseViewModel.AccountingPeriodTimeFrameID); newAccountingTransaction.TransactionDate = accountingTransactionBaseViewModel.IsTransactionOpening ? pf.StartDate : pf.EndDate; accountingPeriodOpeningClosingTransaction.IsTransactionOpening = accountingTransactionBaseViewModel.IsTransactionOpening; accountingPeriodOpeningClosingTransaction.AccountingPeriodTimeFrameID = accountingTransactionBaseViewModel.AccountingPeriodTimeFrameID; accountingPeriodOpeningClosingTransaction.AccountTransactionID = newAccountingTransaction.AccountTransactionID; accountingPeriodOpeningClosingTransaction.Active = true; } SetupTagInfosForAccount(ref accountingTransactionBaseViewModel); newAccountingTransaction = unitOfWork.AccountingTransactionRepository.Insert(newAccountingTransaction); unitOfWork.Save(); if (accountingTransactionBaseViewModel.IsTransactionOpeningClosingTransaction) { accountingPeriodOpeningClosingTransaction.AccountTransactionID = newAccountingTransaction.AccountTransactionID; unitOfWork.AccountingPeriodOpeningClosingTransactionRepository.Insert(accountingPeriodOpeningClosingTransaction); unitOfWork.Save(); } if (accountingTransactionBaseViewModel.AccountingTransaction.AccountingTransactionSource.DonationDonorEntityID != null) { return RedirectToAction("Index", "Donor"); } else if (accountingTransactionBaseViewModel.IsTransactionOpeningClosingTransaction) { return RedirectToAction("Index", "AccountingPeriodOpeningClosingTransaction"); } else if (newAccountingTransaction.IsTemplateTransaction) { return RedirectToAction("Index", "AccountingTransactionTemplate"); } else { return RedirectToAction("Index"); } } return View(AccountingTransactionBaseViewModelBaseSetup(accountingTransactionBaseViewModel)); }
private void SetupAccountForTransaction(ref AccountingTransaction accountingTransaction, AccountingTransactionBaseViewModel accountingTransactionBaseViewModel) { int[] AccountsToCreditIDs = accountingTransactionBaseViewModel.AccountsToCredit.Where(x => x.Selected).Select(x => Convert.ToInt32(x.Value)).ToArray<int>(); int[] AccountsToDebitIDs = accountingTransactionBaseViewModel.AccountsToDebit.Where(x => x.Selected).Select(x => Convert.ToInt32(x.Value)).ToArray<int>(); IEnumerable<AccountingTransactionAccount> accountsSelected = unitOfWork.AccountingTransactionAccountRepository.Get(x => AccountsToCreditIDs.Contains(x.AccountTransactionAccountID) || AccountsToDebitIDs.Contains(x.AccountTransactionAccountID)).ToArray(); foreach (var account in accountsSelected) { AccountingTransactionAccountingTransactionAccount newAccountingTransactionAccountingTransactionAccount = new AccountingTransactionAccountingTransactionAccount(); newAccountingTransactionAccountingTransactionAccount.IsTransactionCredit = AccountsToCreditIDs.Contains(account.AccountTransactionAccountID); newAccountingTransactionAccountingTransactionAccount.AccountTransactionID = accountingTransaction.AccountTransactionID; newAccountingTransactionAccountingTransactionAccount.AccountTransactionAccountID = account.AccountTransactionAccountID; accountingTransaction.AccountingTransactionAccountingTransactionAccounts.Add(newAccountingTransactionAccountingTransactionAccount); } }
private void CheckAndUpdateTheDonorTransactionSource(ref AccountingTransaction accountingTransaction, AccountingTransactionSource transactionSource) { //Remove the donor from transaction if not selected if (!transactionSource.IsFromADonor) { accountingTransaction.AccountingTransactionSource.DonationDonorEntity = null; accountingTransaction.AccountingTransactionSource.DonationDonorEntityID = null; } }