feat(bll, dal): distributionPeriod - добавили типы, адаптировали методы
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user