2026-05-04 11:55:07 +10:00
|
|
|
|
using PARR.Core.Services.NextRunServices.Models;
|
2026-06-15 16:56:23 +10:00
|
|
|
|
using PARR.Domain.Entities.JobGroupEntities;
|
2026-04-14 12:01:49 +10:00
|
|
|
|
using PARR.Domain.Enums;
|
2026-02-12 16:15:36 +10:00
|
|
|
|
|
2026-05-04 11:55:07 +10:00
|
|
|
|
namespace PARR.Core.Services.NextRunServices
|
2026-02-12 16:15:36 +10:00
|
|
|
|
{
|
2026-03-05 10:19:54 +10:00
|
|
|
|
public interface INextRunService
|
2026-02-12 16:15:36 +10:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Распределить шаблоны в группе работ (получить список распределенных шаблонов с актуальными nextRun)
|
|
|
|
|
|
/// </summary>
|
2026-02-13 15:39:21 +10:00
|
|
|
|
/// <param name="jobGroupId">ИД группы работ</param>
|
|
|
|
|
|
/// <param name="templateStatusType">Статус шаблона, если не передать, берутся все шаблоны группы</param>
|
2026-02-12 16:15:36 +10:00
|
|
|
|
/// <returns>Список TemplateId с NextRun и NextRunOld</returns>
|
2026-02-13 15:39:21 +10:00
|
|
|
|
Task<List<TemplateNextRunResultDto>?> GetNextRunForJobGroupWithAutoDistributionAsync(Guid jobGroupId, TemplateStatusTypeEnum? templateStatusType);
|
2026-02-16 12:23:24 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить nextRun для вновь создаваемого шаблона, которого еще нет в БД
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="jobGroupId">ИД группы работ</param>
|
|
|
|
|
|
/// <param name="workGroupName">Рабочая группа, не маска</param>
|
|
|
|
|
|
/// <param name="responseAreaName">Зона ответственности, не маска</param>
|
2026-02-16 14:48:43 +10:00
|
|
|
|
/// <returns>NextRun или null, если null - то ошибка</returns>
|
|
|
|
|
|
Task<DateTimeOffset?> GetNextRunForNewTemplateAsync(Guid jobGroupId, string workGroupName, string responseAreaName);
|
2026-02-16 12:23:24 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить nextRun по id существующего в БД шаблона
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="templateId">ИД шаблона</param>
|
|
|
|
|
|
/// <param name="isNew">При перемещении шаблона в новую для него работу, ставить isNew=true</param>
|
2026-02-16 14:48:43 +10:00
|
|
|
|
/// <returns>NextRun или null, если null - то ошибка</returns>
|
|
|
|
|
|
Task<DateTimeOffset?> GetNextRunForTemplateAsync(Guid templateId, bool isNew);
|
2026-02-16 12:23:24 +10:00
|
|
|
|
|
2026-02-16 16:54:06 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить часовой пояс УЗ ЕСПП
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
TimeSpan GetEsppAccountOffset();
|
2026-02-16 12:23:24 +10:00
|
|
|
|
|
2026-02-20 10:39:53 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить продолжительность в днях
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="config"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
int GetDurationDays(JobGroupDistributionConfig config);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить список рабочих дней в диапазоне, исключая выходные и праздники.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="start"></param>
|
|
|
|
|
|
/// <param name="end"></param>
|
|
|
|
|
|
/// <param name="excludeWeekends">Исключить выходные и праздники</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends);
|
2026-02-16 12:23:24 +10:00
|
|
|
|
|
2026-02-20 10:39:53 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить список выходных дней
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="startDate"></param>
|
|
|
|
|
|
/// <param name="endDate"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task<HashSet<DateOnly>> GetWeekendsAsync(DateOnly startDate, DateOnly endDate);
|
2026-02-12 16:15:36 +10:00
|
|
|
|
}
|
|
|
|
|
|
}
|