31a0a8e9e3
Напоминания: - ProbationEndingReminderDto: ManagerEmail убран — это был унаследованный ReceiverEmail под вторым именем. - Ссылка для ProbationEnding больше не ведёт на саму заявку на приём (она уже закрыта, решать по ней нечего) — берётся из новой настройки RemindersOptions.ProbationReminderUrl и ведёт в раздел, где заводят новую заявку. Подстановок в ней нет: адрес конкретной формы в портал не передать, rptype без rpid/rpsource игнорируется (см. parseRoute в request-portal). Заодно ушли BuildProbationUrl и ненужные больше параметры type/listId. Стайлгайд (CLAUDE.md) — у enum первое значение None: - ReminderFeed: None=0 трактуется как ApprovalOverdue, чтобы вызов без явного выбора работал как раньше. - EmploymentStatus: заодно инвертирован switch в ReminderService — раньше «продолжить» было веткой по умолчанию, и новый None молча означал бы «сотрудник работает». Теперь по умолчанию пропуск с предупреждением. - ConditionsLogic: None — НЕвалидное значение, отвергается валидаторами шага (в том числе новым PatchTemplateRouteStepRequestValidator, его не было вовсе). Поэтому у ConditionsLogic в Create/Update-запросах убрано значение по умолчанию: System.Text.Json в .NET 10 уважает дефолты параметров конструктора, и пропущенное поле молча означало «И». Теперь пропущенное поле даёт None и упирается в валидатор. ЛОМАЮЩЕЕ ИЗМЕНЕНИЕ КОНТРАКТА: клиент, не присылающий conditionsLogic в POST/PUT шага, получит 400 вместо прежнего молчаливого «И». Админка не затронута — она это поле всегда отправляет.
25 lines
1.5 KiB
C#
25 lines
1.5 KiB
C#
namespace Tnsu.ApprovalRoute.Application.Reminders;
|
|
|
|
/// <param name="ReceiverEmail">
|
|
/// Email руководителя принимаемого сотрудника — кому адресовано напоминание.
|
|
/// Отдельного ManagerEmail рядом нет намеренно: это было то же самое значение
|
|
/// под вторым именем.
|
|
/// </param>
|
|
/// <param name="CandidateEmail">Email принимаемого сотрудника (см. ReminderService.GetProbationEndingAsync).</param>
|
|
/// <param name="CandidateName">ФИО принимаемого сотрудника (колонка CandidateName списка данных).</param>
|
|
/// <param name="ProbationPeriod">Текст испытательного срока (колонка ProbationPeriod).</param>
|
|
/// <param name="HireDate">Дата приёма (колонка HireDate).</param>
|
|
/// <param name="ProbationEndsAt">Дата окончания испытательного срока (HireDate + срок).</param>
|
|
/// <param name="DaysUntilProbationEnds">Сколько дней осталось до конца испытательного срока.</param>
|
|
public sealed record ProbationEndingReminderDto(
|
|
string ReceiverEmail,
|
|
string CandidateEmail,
|
|
string CandidateName,
|
|
string? ProbationPeriod,
|
|
DateTimeOffset HireDate,
|
|
DateTimeOffset ProbationEndsAt,
|
|
int DaysUntilProbationEnds,
|
|
string Url,
|
|
string? ReceiverName = null)
|
|
: ReminderDto(ReceiverEmail, ReceiverName, Url);
|