protected void UpdateBalance(Entry entry) { using (_entryRepository.BeginTransaction()) { //Entry this._entryRepository.Save(entry); //Account var account = _accountRepository.FindOrCreateBy(entry.DestinationAccount, entry.DestinationBank, entry.TypeAccount, entry.DestinationIdentity); //Balance var currentBalance = _balanceRepository.FindOrCreateBy(account, entry.DateToExecute.GetValueOrDefault()); var entryDto = new ShortEntryDTO(entry.DateEntry.GetValueOrDefault(), entry.Value.GetValueOrDefault()); if (entry.IsPayment()) { currentBalance.Outputs.Add(entryDto); currentBalance.Total -= entryDto.Value; } else { currentBalance.Inputs.Add(entryDto); currentBalance.Total += entryDto.Value; } if (entry.FinancialCharges > 0.00m) { currentBalance.Charges.Add(new ShortEntryDTO(entry.DateEntry.GetValueOrDefault(), entry.FinancialCharges.GetValueOrDefault(0))); currentBalance.Total -= entry.FinancialCharges.GetValueOrDefault(); } _balanceRepository.Update(currentBalance); _balanceRepository.UpdateCurrentAndFutureBalance(entry.DateToExecute.GetValueOrDefault(), account.Id.GetValueOrDefault()); //Commit _entryRepository.Commit(); } }