public async Task <DayBalanceEntity> FillDayBalance(FinancialEntryEntity entity, DayBalanceEntity dayBalanceEntity = null) { try { var isPayment = entity.EntryType == FinancialEntryTypeEnum.Payment; if (dayBalanceEntity == null) { dayBalanceEntity = await _dayBalanceRepository.GetByDate(entity.EntryDate); } if (dayBalanceEntity == null) { dayBalanceEntity = new DayBalanceEntity(); } dayBalanceEntity.Date = entity.EntryDate; if (isPayment) { dayBalanceEntity.TotalOut += entity.Value; } else { dayBalanceEntity.TotalEntry += entity.Value; } dayBalanceEntity.Balance = CalculateBalance(dayBalanceEntity); dayBalanceEntity.Interest = CalculateInterest(dayBalanceEntity); return(dayBalanceEntity); } catch { throw; } }
public async Task <long> Insert(DayBalanceEntity entity) { try { var sql = @"INSERT INTO day_balance ( date, total_entry, total_out, interest ) VALUES ( @Date, @TotalEntry, @TotalOut, @Interest ); SELECT LAST_INSERT_ID();"; return(await _connection.ExecuteScalarAsync <long>(sql, new { TotalEntry = entity.TotalEntry, TotalOut = entity.TotalOut, Interest = entity.Interest, Date = entity.Date.ToString("yyyy-MM-dd") })); } catch { throw; } }
public decimal CalculateInterest(DayBalanceEntity entity) { decimal interest = 0; var dayInterest = Convert.ToDecimal(Configuration.GetSection("Business:DayInterest").Value); if (entity.Balance < 0) { interest = ((entity.Balance * dayInterest) / 100) * -1; } return(interest); }
public void CalculateBalance(decimal totalOut, decimal totalEntry, decimal expected) { var dayBalanceBusiness = new DayBalanceBusiness(_dayBalanceRepository.Object, _financialEntryValidateService.Object, _configuration.Object); var entiry = new DayBalanceEntity() { TotalOut = totalOut, TotalEntry = totalEntry }; var result = dayBalanceBusiness.CalculateBalance(entiry); Assert.Equal(expected, result); }
public bool IsDayAccountLimitReached(DayBalanceEntity dayBalanceEntity) { try { var dayAccountLimit = Convert.ToDecimal(Configuration.GetSection("Business:DayAccountLimit").Value); return(dayBalanceEntity.Balance > dayAccountLimit); } catch { throw; } }
public void IsDayAccountLimitReached(string dayAccountLimit, decimal value) { _configuration.Setup(x => x.GetSection("Business:DayAccountLimit").Value).Returns(dayAccountLimit); var dayBalanceEntity = new DayBalanceEntity() { Balance = value }; var financialEntryValidateService = new FinancialEntryValidateService(_configuration.Object); var result = financialEntryValidateService.IsDayAccountLimitReached(dayBalanceEntity); Assert.True(result); }
public void CalculateInterest(string interest, decimal balance, decimal percentage) { _configuration.Setup(x => x.GetSection("Business:DayInterest").Value).Returns(interest); var dayBalanceBusiness = new DayBalanceBusiness(_dayBalanceRepository.Object, _financialEntryValidateService.Object, _configuration.Object); var entiry = new DayBalanceEntity() { Balance = balance }; var result = dayBalanceBusiness.CalculateInterest(entiry); Assert.Equal(percentage, result); }
public async Task <bool> Update(FinancialEntryEntity financialEntryEntity, DayBalanceEntity dayBalanceEntity) { try { var dayInterest = Convert.ToDecimal(Configuration.GetSection("Business:DayInterest").Value); dayBalanceEntity = await FillDayBalance(financialEntryEntity, dayBalanceEntity); return(await _dayBalanceRepository.Update(dayBalanceEntity)); } catch { throw; } }
public void FillDayBalance(decimal currentValue, decimal totalOut, decimal totalEntry, decimal expectedBalance, decimal expectedInterest) { _configuration.Setup(x => x.GetSection("Business:DayInterest").Value).Returns("0,83"); var dayBalanceBusiness = new DayBalanceBusiness(_dayBalanceRepository.Object, _financialEntryValidateService.Object, _configuration.Object); var financialEntryEntity = new FinancialEntryEntity() { EntryType = FinancialEntryTypeEnum.Payment, Value = currentValue }; var dayBalanceEntity = new DayBalanceEntity() { TotalOut = totalOut, TotalEntry = totalEntry }; var result = dayBalanceBusiness.FillDayBalance(financialEntryEntity, dayBalanceEntity).GetAwaiter().GetResult(); Assert.Equal(expectedBalance, result.Balance); Assert.Equal(expectedInterest, result.Interest); Assert.Equal((currentValue + totalOut), result.TotalOut); Assert.Equal(totalEntry, result.TotalEntry); }
public async Task <bool> Update(DayBalanceEntity entity) { try { var sql = @"UPDATE day_balance SET total_entry = @TotalEntry, total_out = @TotalOut, interest = @Interest WHERE date = @Date;"; var result = await _connection.ExecuteAsync(sql, new { TotalEntry = entity.TotalEntry, TotalOut = entity.TotalOut, Interest = entity.Interest, Date = entity.Date.ToString("yyyy-MM-dd") }); return(result == 1); } catch { throw; } }
public decimal CalculateBalance(DayBalanceEntity entity) { return(entity.TotalEntry - entity.TotalOut); }