Example #1
0
        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;
            }
        }
Example #2
0
 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;
     }
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
 public bool IsDayAccountLimitReached(DayBalanceEntity dayBalanceEntity)
 {
     try
     {
         var dayAccountLimit = Convert.ToDecimal(Configuration.GetSection("Business:DayAccountLimit").Value);
         return(dayBalanceEntity.Balance > dayAccountLimit);
     }
     catch
     {
         throw;
     }
 }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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;
            }
        }
Example #9
0
        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);
        }
Example #10
0
        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;
            }
        }
Example #11
0
 public decimal CalculateBalance(DayBalanceEntity entity)
 {
     return(entity.TotalEntry - entity.TotalOut);
 }