feat(api,dal): в JobGroup добавлено свойство UserTimeZoneOffsetMinutes, доработан контроллер. EsppScheduleTransformService - доработка с учетом offset

This commit is contained in:
Mikhail Trubnikov
2026-02-09 15:48:30 +10:00
parent 25f3ebc372
commit 897dd4c4e3
12 changed files with 4309 additions and 174 deletions

View File

@@ -23,6 +23,8 @@
public DateTimeOffset ReferenceDate { get; set; }
public int? UserTimeZoneOffsetMinutes { get; set; }
/// <summary>
/// Использовать таймзону рабочей группы ответственного за ЭК шаблона
/// </summary>

View File

@@ -18,6 +18,8 @@
public DateTimeOffset ReferenceDate { get; set; }
public int? UserTimeZoneOffsetMinutes { get; set; }
public bool IsWorkGroupTimezone { get; set; }
public required JobGroupTypeResponse GroupType { get; set; }

View File

@@ -39,7 +39,6 @@ namespace PARR.API.Controllers.V1
private readonly IEsppSchTypeConfigService esppConfigService;
private readonly IValidator<JobGroupRequest> validator;
private readonly IJobGroupTypeService jobGroupTypeService;
private readonly SettingsFromDb settingsFromDb;
private readonly IMatchingStatusService matchingStatusService;
private readonly IScheduleResponseAreaTimeOffsetService scheduleResponseAreaTimeOffsetService;
@@ -52,7 +51,6 @@ namespace PARR.API.Controllers.V1
IEsppSchTypeConfigService esppConfigService,
IValidator<JobGroupRequest> validator,
IJobGroupTypeService jobGroupTypeService,
SettingsFromDb settingsFromDb,
IMatchingStatusService matchingStatusService,
IScheduleResponseAreaTimeOffsetService scheduleResponseAreaTimeOffsetService
)
@@ -65,7 +63,6 @@ namespace PARR.API.Controllers.V1
this.esppConfigService = esppConfigService;
this.validator = validator;
this.jobGroupTypeService = jobGroupTypeService;
this.settingsFromDb = settingsFromDb;
this.matchingStatusService = matchingStatusService;
this.scheduleResponseAreaTimeOffsetService = scheduleResponseAreaTimeOffsetService;
}
@@ -168,6 +165,7 @@ namespace PARR.API.Controllers.V1
Solution = request.Solution.Trim(),
TemplateDuration = request.TemplateDuration.Trim(),
ReferenceDate = request.ReferenceDate,
UserTimeZoneOffsetMinutes = request.UserTimeZoneOffsetMinutes,
ScheduleExcludeTypeId = request.ScheduleExcludeTypeId,
ScheduleExcludeTypeCalendarId = request.ScheduleExcludeTypeCalendarId,
IsAutoDistributionEnabled = request.IsAutoDistributionEnabled,
@@ -262,6 +260,7 @@ namespace PARR.API.Controllers.V1
orig.Solution = request.Solution.Trim();
orig.TemplateDuration = request.TemplateDuration.Trim();
orig.ReferenceDate = request.ReferenceDate;
orig.UserTimeZoneOffsetMinutes = request.UserTimeZoneOffsetMinutes;
orig.ScheduleExcludeTypeId = request.ScheduleExcludeTypeId;
orig.ScheduleExcludeTypeCalendarId = request.ScheduleExcludeTypeCalendarId;
orig.IsAutoDistributionEnabled = request.IsAutoDistributionEnabled;

View File

@@ -1,5 +1,6 @@
using FluentValidation;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json.Linq;
using PARR.API.Contracts.V1.Requests;
using PARR.DAL.Contracts;
using PARR.DAL.Services.Interfaces;
@@ -123,6 +124,14 @@ namespace PARR.API.Validators
return true;
}).WithMessage("Некорректное значение периода распределения");
RuleFor(t => t.UserTimeZoneOffsetMinutes)
.Must((entity, value, c) =>
{
// если IsResponseAreaTimezone == true, то поле UserTimeZoneOffsetMinutes обязательно.
// если IsResponseAreaTimezone == false, то UserTimeZoneOffsetMinutes должно быть null
return (entity.IsWorkGroupTimezone && value != null) || (!entity.IsWorkGroupTimezone && value == null);
}).WithMessage("Некорректное значение."); ;
}
}
}