feat(bll, dal): distributionPeriod - добавили типы, адаптировали методы

This commit is contained in:
Mikhail Kuznetsov
2024-07-01 16:56:59 +10:00
parent e896191ac9
commit 453164a4a0
13 changed files with 6237 additions and 21 deletions

View File

@@ -1,18 +1,75 @@
using PARR.BLL.Services.Interfaces;
using Microsoft.Extensions.Logging;
using PARR.BLL.Services.Interfaces;
using PARR.Constants;
namespace PARR.BLL.Services.Implementations
{
internal class CalendarService : ICalendarService
{
private DateOnly GetEndPeriodDate(DateOnly startPeriod, TimeSpan distributionPeriod)
private readonly ILogger<CalendarService> logger;
public CalendarService(ILogger<CalendarService> logger)
{
return startPeriod.AddDays(distributionPeriod.Days).AddDays(-1);
this.logger = logger;
}
private DateOnly GetEndPeriodDate(DateOnly startPeriod, DistributionPeriodTypeEnum periodType, string distributionPeriod)
{
//TODO: подходит для NextRun
switch (periodType)
{
case (DistributionPeriodTypeEnum.Day):
return startPeriod.AddDays(ParseInt(distributionPeriod));
case (DistributionPeriodTypeEnum.Month):
return startPeriod.AddMonths(ParseInt(distributionPeriod));
case (DistributionPeriodTypeEnum.Year):
return startPeriod.AddYears(ParseInt(distributionPeriod));
//case (DistributionPeriodTypeEnum.TimeSpan):
// var timeSpan = ParseTimeSpan(distributionPeriod);
// return timeSpan.Days > 0 ? startPeriod.AddDays();
}
//return startPeriod.AddDays(duration.Days).AddDays(-1);
return startPeriod;
}
public List<DateOnly> GetWorkDatesForPeriod(DateOnly startPeriod, TimeSpan distributionPeriod, GetWeekendsDelegate getWeekends)
private int ParseInt(string value)
{
var endPeriod = GetEndPeriodDate(startPeriod, distributionPeriod);
try
{
return int.Parse(value);
}
catch (Exception ex)
{
logger.LogError(ex, $"{nameof(CalendarService)}, получение конца периода. Не смог распарсить string в int для значения {value}.");
return 0;
}
}
//private TimeSpan ParseTimeSpan(string value)
//{
// try
// {
// return TimeSpan.Parse(value);
// }
// catch (Exception ex)
// {
// logger.LogError(ex, $"{nameof(CalendarService)}, получение конца периода. Не смог распарсить string в TimeSpan для значения {value}.");
// return new TimeSpan(0);
// }
//}
//public List<DateOnly> GetWorkDatesForPeriod(DateOnly startPeriod, TimeSpan duration, GetWeekendsDelegate getWeekends)
public List<DateOnly> GetWorkDatesForPeriod(DateOnly startPeriod, DistributionPeriodTypeEnum periodType, string distributionPeriod, GetWeekendsDelegate getWeekends)
{
var endPeriod = GetEndPeriodDate(startPeriod, periodType, distributionPeriod);
//не получилось сделать асинхронным
var weekends = getWeekends.Invoke(startPeriod, endPeriod).ToList(); //.ToListAsync();
@@ -43,9 +100,9 @@ namespace PARR.BLL.Services.Implementations
var currentDay = startPeriod;
while (currentDay <= EndPeriod)
{
// 29 дней, потому что в феврале 28, чтоб не париться, сделали так
//if (currentDay.Day < 29) - не делаем, так как в таблице DistributionPeriods указали 28 дней
workDaysList.Add(currentDay);
//!!!!!!!! 29 дней, потому что в феврале 28, чтоб не париться, сделали так
if (currentDay.Day < 29)
workDaysList.Add(currentDay);
currentDay = currentDay.AddDays(1);
}