/// <summary>
 /// Save account balance into database
 /// </summary>
 /// <param name="account">account which balance will be saved</param>
 public void SaveAccountBalance(IPublicAccount account)
 {
     using (var db = new DbBank())
     {
         db.Accounts
         .Where(p => p.InnerAccountNumber == account.AccountNumber.InnerNumber)
         .Set(p => p.BalanceValue, account.GetBalanceValue())
         .Update();
     }
 }
예제 #2
0
 public InnerBankTransfer(IAccount sender, IPublicAccount receiver,
                          decimal amount, string operationTitle)
 {
     ResponseStatus = ResponseStatus.Success;
     _operations    = new List <BankOperation>
     {
         new OutgoingTransfer(sender, amount, operationTitle, receiver.AccountNumber.ToString()),
         new IncomingTransfer(receiver, amount, operationTitle, sender.AccountNumber.ToString())
     };
 }
예제 #3
0
 /// <summary>
 /// creates deposit command. Allows to add custom source value, used in derived types
 /// </summary>
 /// <param name="targetAccount">account on which operation will be performed</param>
 /// <param name="amount">amount to send</param>
 /// <param name="operationTitle">operation title</param>
 /// <param name="source">source of the money</param>
 public Deposit(IPublicAccount targetAccount, decimal amount, string operationTitle, string source) :
     base(targetAccount.AccountNumber, new OperationRecord
 {
     Title  = operationTitle,
     Credit = amount,
     Source = source
 })
 {
     _targetAccount = targetAccount;
     _amount        = amount;
 }
        /// <summary>
        /// <see cref="IUserManager.GetAccount"/>
        /// </summary>
        public IPublicAccount GetAccount(AccountNumber accoutNumber)
        {
            IPublicAccount searchedAccount = null;

            foreach (var user in _users)
            {
                if (!user.ContainsAccount(accoutNumber))
                {
                    continue;
                }
                var a = user.GetAccount(accoutNumber);
                if (a != null)
                {
                    searchedAccount = a;
                }
            }
            return(searchedAccount);
        }
예제 #5
0
 public InnerBankTransfer(IAccount sender, IPublicAccount receiver,
                          int amountInCents, string operationTitle)
     : this(sender, receiver, amountInCents / 100m, operationTitle)
 {
 }
예제 #6
0
 /// <summary>
 /// <see cref="IBankDataInserter.SaveAccountBalance"/>
 /// </summary>
 public void SaveAccountBalance(IPublicAccount account)
 {
     _dataSaver.SaveAccountBalance(account);
 }
 /// <summary>
 /// Execute operation, save it and save account operation balance afterwards
 /// </summary>
 /// <param name="operation">operation to execute and save</param>
 /// <param name="account">account to save</param>
 public void ExecuteAndSave(BankOperation operation, IPublicAccount account)
 {
     operation.Execute();
     _dataInserter.SaveOperation(operation);
     _dataInserter.SaveAccountBalance(account);
 }
 /// <summary>
 /// Execute complex command; save operation records and sender acount balance
 /// </summary>
 /// <param name="complexCommand">complex command to execute and save</param>
 /// <param name="sender">sender account</param>
 public void ExecuteAndSave(ComplexCommand complexCommand, IPublicAccount sender)
 {
     complexCommand.Execute();
     _dataInserter.SaveOperations(complexCommand.GetExecutedOperations());
     _dataInserter.SaveAccountBalance(sender);
 }
 /// <summary>
 /// Execute complex command; save operation records and receiver and sender acount balance
 /// </summary>
 /// <param name="complexCommand">complex command to execute and save</param>
 /// <param name="sender">sender account</param>
 /// <param name="receiver">receiver account</param>
 public void ExecuteAndSave(ComplexCommand complexCommand, IPublicAccount sender, IPublicAccount receiver)
 {
     ExecuteAndSave(complexCommand, sender);
     _dataInserter.SaveAccountBalance(receiver);
 }
예제 #10
0
 /// <summary>
 /// does nothing
 /// </summary>
 /// <param name="account">anything (ignored)</param>
 /// <param name="operation">anything (ignored)</param>
 public void SaveOperation(IPublicAccount account, BankOperation operation)
 {
 }
예제 #11
0
 /// <summary>
 /// does nothing
 /// </summary>
 /// <param name="account">anything (ignored)</param>
 public void SaveAccountBalance(IPublicAccount account)
 {
 }
 /// <param name="account">sender account number</param>
 /// <param name="transferFeeValue">fee value</param>
 /// <param name="receiverAccountNumber">receiver account number</param>
 public RollbackTransferFee(IPublicAccount account, decimal transferFeeValue, string receiverAccountNumber)
     : base(account, transferFeeValue, $"fee refund for transfer to {receiverAccountNumber}", "Bank 00112169")
 {
 }
예제 #13
0
 /// <param name="account">receiver account number</param>
 /// <param name="amount">amount to transfer</param>
 /// <param name="title">operation title</param>
 /// <param name="senderAccountNumber">sendar account number</param>
 public IncomingTransfer(IPublicAccount account, decimal amount, string title, string senderAccountNumber)
     : base(account, amount, title, $"{senderAccountNumber}")
 {
 }
예제 #14
0
 /// <summary>
 /// creates deposit command. Used to create deposit with default source field value
 /// </summary>
 /// <param name="targetAccount">account on which operation will be performed</param>
 /// <param name="amount">amount to send</param>
 /// <param name="operationTitle">operation title</param>
 public Deposit(IPublicAccount targetAccount, decimal amount, string operationTitle) :
     this(targetAccount, amount, operationTitle, "Deposit")
 {
 }
예제 #15
0
 /// <param name="account">sender account number</param>
 /// <param name="amount">amount to transfer</param>
 /// <param name="title">operation title</param>
 /// <param name="receiverAccountNumber">receiver  account number</param>
 public RollbackTransfer(IPublicAccount account, decimal amount, string title, AccountNumber receiverAccountNumber)
     : base(account, amount, title, $"{receiverAccountNumber}")
 {
 }