cfc2b393bd
- ReminderDto: базовый класс сузился до ReceiverEmail/ReceiverName/Url; RequestTypeId/RequestTypeName/RequestId/Status/RequestUniqueCode остались только в ApprovalOverdueReminderDto — ProbationEndingReminderDto они не нужны. Дискриминатор полиморфной сериализации ($type) больше не дублируется отдельным enum-полем Category. - ApprovalOverdueReminderDto: старый Email сохранён рядом с унаследованным ReceiverEmail (то же значение) — контракт можно переключать постепенно. - ApprovalRow/RowSelect: добавлен Title согласующего (TansuSiteApprover/Title) — заполняет ReceiverName для просроченных шагов, когда он есть в SharePoint. - EmployeeDirectorySnapshot.NameByEmail: обратный поиск ФИО руководителя по email — заполняет ReceiverName для напоминаний об испытательном сроке без лишнего похода в api.tnsu.kz (данные уже загружены для EmailOf). - GetProbationEndingAsync: испытательный срок не длиннее 6 месяцев, поэтому читаем только текущую и последнюю архивную партицию (не весь архив) и фильтруем строки по HireDate не старше 6 месяцев — экономим лишние запросы к SharePoint без потери актуальных заявок.
36 lines
2.1 KiB
C#
36 lines
2.1 KiB
C#
namespace Tnsu.ApprovalRoute.Application.Reminders;
|
|
|
|
/// <param name="Email">
|
|
/// То же значение, что и унаследованный ReceiverEmail — оставлено под старым
|
|
/// именем ради обратной совместимости с потребителями, читавшими это поле до
|
|
/// появления общего ReceiverEmail/ReceiverName в базовом классе.
|
|
/// </param>
|
|
/// <param name="HoursOverdue">
|
|
/// На сколько часов просрочен шаг: сейчас минус (активация шага + SLA).
|
|
/// Выходные не учитываются — считаются календарные часы.
|
|
/// </param>
|
|
/// <param name="AskOverdueReason">
|
|
/// Спрашивать ли у пользователя причину просрочки. Значение уже с применённым
|
|
/// наследованием (шаг перекрывает тип заявки).
|
|
/// </param>
|
|
/// <param name="RequestTypeId">Id типа заявки (RequestType).</param>
|
|
/// <param name="RequestTypeName">Название типа заявки — для читаемости в письме/таблице, без похода в БД.</param>
|
|
/// <param name="RequestId">Id заявки (TicketId строки списка согласования).</param>
|
|
/// <param name="Status">Статус просроченного шага (ApprovalStatus строки списка «… — согласование»).</param>
|
|
/// <param name="RequestUniqueCode">
|
|
/// Уникальный код заявки (колонка RequestUniqueCode списка данных) — null, если у
|
|
/// заявки его нет или строка данных не найдена.
|
|
/// </param>
|
|
public sealed record ApprovalOverdueReminderDto(
|
|
string Email,
|
|
int HoursOverdue,
|
|
bool AskOverdueReason,
|
|
int RequestTypeId,
|
|
string RequestTypeName,
|
|
int RequestId,
|
|
string Status,
|
|
string? RequestUniqueCode,
|
|
string Url,
|
|
string? ReceiverName = null)
|
|
: ReminderDto(Email, ReceiverName, Url);
|