public bool WithdrawAmountIntoBankAccount(int accountId, decimal currentAmount, decimal amountToWithdraw, DateTime accountLastModifiedDate) { using (this.Context.Database.BeginTransaction()) { BankAccount bankAccount = this.Context.BankAccounts.Find(accountId); if (!CompareCurrentWithLastKnownDate(accountLastModifiedDate, bankAccount.ModifiedDate)) { throw new InvalidBankAccountModifiedTimeStamp("The Bank Account has been modified since your last read, state is inconsistent!"); } if (bankAccount.Amount < amountToWithdraw) { throw new InvalidBankAccountWithdrawException("The Amount in the Account is less than the amount the user wants to withdraw!"); } bankAccount.ModifiedDate = DateTime.UtcNow; bankAccount.ModifiedByUserID = this.UserID; BankAccountAudit bankAccountAudit = new BankAccountAudit(); bankAccountAudit.PreviousAmount = bankAccount.Amount; bankAccount.Amount = bankAccount.Amount - amountToWithdraw; bankAccountAudit.CurrentAmount = bankAccount.Amount; bankAccountAudit.ChangeAmount = -amountToWithdraw; bankAccountAudit.CreatedByUserID = this.UserID; bankAccountAudit.CreatedDate = bankAccount.ModifiedDate; bankAccountAudit.BankAccountOperationID = (int)AccountOperation.Withdraw; bankAccountAudit.TransferBankAccount = bankAccount; bankAccount.BankAccountAudits = new List <BankAccountAudit>(); bankAccount.BankAccountAudits.Add(bankAccountAudit); this.Context.BankAccountAudits.Add(bankAccountAudit); this.Context.SaveChanges(); this.Context.Database.CommitTransaction(); } return(true); }
public bool DepositAmountIntoBankAccount(int accountId, decimal currentAmount, decimal amountToDeposit, DateTime accountLastModifiedDate) { using (this.Context.Database.BeginTransaction()) { BankAccount bankAccount = this.Context.BankAccounts.Find(accountId); if (!CompareCurrentWithLastKnownDate(accountLastModifiedDate, bankAccount.ModifiedDate))//| bankAccount.Amount != currentAmount) { throw new InvalidBankAccountModifiedTimeStamp("The Bank Account has been modified since your last read, state is inconsistent!"); } bankAccount.ModifiedDate = DateTime.UtcNow; bankAccount.ModifiedByUserID = this.UserID; BankAccountAudit bankAccountAudit = new BankAccountAudit(); bankAccountAudit.PreviousAmount = bankAccount.Amount; bankAccount.Amount = bankAccount.Amount + amountToDeposit; bankAccountAudit.CurrentAmount = bankAccount.Amount; bankAccountAudit.ChangeAmount = amountToDeposit; bankAccountAudit.CreatedByUserID = this.UserID; bankAccountAudit.CreatedDate = bankAccount.ModifiedDate; bankAccountAudit.BankAccountOperationID = (int)AccountOperation.Deposit; bankAccountAudit.TransferBankAccount = bankAccount; bankAccount.BankAccountAudits = new List <BankAccountAudit>(); bankAccount.BankAccountAudits.Add(bankAccountAudit); this.Context.BankAccountAudits.Add(bankAccountAudit); //this.Context.Entry(bankAccount).State = Microsoft.EntityFrameworkCore.EntityState.Modified; this.Context.SaveChanges(); this.Context.Database.CommitTransaction(); } return(true); }