94 lines
3.2 KiB
C#
94 lines
3.2 KiB
C#
using PARR.BLL.Services.Interfaces;
|
|
|
|
namespace PARR.BLL.Services.Implementations
|
|
{
|
|
internal class CalendarService : ICalendarService
|
|
{
|
|
private DateOnly GetEndPeriodDate(DateOnly startPeriod, TimeSpan distributionPeriod)
|
|
{
|
|
return startPeriod.AddDays(distributionPeriod.Days).AddDays(-1);
|
|
}
|
|
|
|
|
|
public List<DateOnly> GetWorkDatesForPeriod(DateOnly startPeriod, TimeSpan distributionPeriod, GetWeekendsDelegate getWeekends)
|
|
{
|
|
var endPeriod = GetEndPeriodDate(startPeriod, distributionPeriod);
|
|
|
|
//не получилось сделать асинхронным
|
|
var weekends = getWeekends.Invoke(startPeriod, endPeriod).ToList(); //.ToListAsync();
|
|
|
|
|
|
//TODO: переделать метод получения рабочих дней, получать актуальные рабочие дни за период
|
|
//не стали реализовывать сразу, так как повысится нагрузка на робота
|
|
// на следующий месяц будет много изменений
|
|
//временно сделаем список руками рабочих дней
|
|
var workDays = GetMockWorkDays(startPeriod, endPeriod);
|
|
|
|
workDays = workDays.Where(t => weekends.Any(x => x != t)).ToList();
|
|
|
|
return workDays;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Временные данные пока не реализован сервис и логика
|
|
/// </summary>
|
|
/// <param name="startPeriod"></param>
|
|
/// <param name="EndPeriod"></param>
|
|
/// <returns></returns>
|
|
private List<DateOnly> GetMockWorkDays(DateOnly startPeriod, DateOnly EndPeriod)
|
|
{
|
|
var workDaysList = new List<DateOnly>();
|
|
|
|
var currentDay = startPeriod;
|
|
while (currentDay <= EndPeriod)
|
|
{
|
|
// 29 дней, потому что в феврале 28, чтоб не париться, сделали так
|
|
if (currentDay.Day < 29)
|
|
workDaysList.Add(currentDay);
|
|
|
|
|
|
currentDay = currentDay.AddDays(1);
|
|
}
|
|
|
|
return workDaysList.OrderBy(t => t).ToList();
|
|
}
|
|
}
|
|
|
|
|
|
//public class Test
|
|
//{
|
|
// private readonly ICalendarService calendarService;
|
|
|
|
// public Test(ICalendarService calendarService)
|
|
// {
|
|
// this.calendarService = calendarService;
|
|
// }
|
|
|
|
|
|
// public async void Ttt()
|
|
// {
|
|
// var tService = new TestService();
|
|
// // var endPeriod = calendarService.GetEndPeriodDate(new DateOnly(2024, 1, 1), TimeSpan.Parse("30:00:00:00"));
|
|
|
|
// var workDays = await calendarService.GetWorkDatesForPeriodAsync(new DateOnly(2024, 1, 1), TimeSpan.Parse("30:00:00:00"), tService.GetWeekendsAsync);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
//public class TestService
|
|
//{
|
|
// public async Task<List<DateOnly>> GetWeekendsAsync(DateOnly start, DateOnly end)
|
|
// {
|
|
|
|
// await Task.Delay(1000);
|
|
|
|
// return new List<DateOnly> { new DateOnly(2024, 1, 12) };
|
|
// }
|
|
//}
|
|
}
|