Commit Graph

21 Commits

Author SHA1 Message Date
gorbenko.pavel 31a0a8e9e3 Напоминания: убрать дубль ManagerEmail, ссылка из настроек; None первым во всех enum
Напоминания:
- 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 вместо прежнего молчаливого «И». Админка не
затронута — она это поле всегда отправляет.
2026-08-27 15:53:31 +05:00
gorbenko.pavel 554f9b2528 правки 2026-08-27 15:21:34 +05:00
gorbenko.pavel cfc2b393bd Reminders: убрать Category из общей части DTO, добавить ReceiverEmail/ReceiverName, ограничить чтение испытательного срока последними партициями
Tests / frontend-test (pull_request) Successful in 45s
Tests / backend-test (pull_request) Successful in 1m54s
- 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 без потери актуальных заявок.
2026-08-27 14:12:39 +05:00
gorbenko.pavel 5d7503209a ReminderDto: разделить на ApprovalOverdueReminderDto и ProbationEndingReminderDto
Абстрактный базовый класс + два sealed-наследника вместо одного DTO с
опциональными полями под обе категории — так специфичные для каждого
вида напоминания поля не путаются с полями другого вида. Полиморфная
сериализация System.Text.Json ([JsonPolymorphic]/[JsonDerivedType])
нужна, иначе список IReadOnlyList<ReminderDto> сериализовался бы только
по общим полям базового класса.
2026-08-27 12:31:45 +05:00
gorbenko.pavel 874e41990c промежуточный коммит
Tests / frontend-test (pull_request) Successful in 47s
Tests / backend-test (pull_request) Successful in 1m34s
2026-08-26 17:17:47 +05:00
gorbenko.pavel 19a46b0df8 Правки (#18)
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 5m28s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/18
2026-08-26 07:08:16 +00:00
gorbenko.pavel ba48ed1a0e Несколько условий шага, объединяемых через И/ИЛИ (#16)
Tests / frontend-test (push) Successful in 47s
Tests / backend-test (push) Successful in 2m12s
<html>
<body>
<!--StartFragment-->
GetEmployeeByEmailAsync возвращает массив; новый HeadType.CompanyDirectors
--

<!--EndFragment-->
</body>
</html>[GetEmployeeByEmailAsync возвращает массив; новый HeadType.CompanyDirectors](http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/commit/572749b4d7cc11bc8e1ef4184a93f18a14b710ab)

---------

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/16
2026-08-25 07:04:44 +00:00
gorbenko.pavel e4a6cb8167 Новые условия (#15)
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 1m48s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/15
2026-08-24 12:27:25 +00:00
gorbenko.pavel aa97657721 обновлен reminders
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 3m57s
2026-08-20 11:49:54 +05:00
gorbenko.pavel 1ee1b71e3e Редактирование заявок у конкретного пользователя (#14)
Tests / frontend-test (push) Successful in 45s
Tests / backend-test (push) Successful in 7m18s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/14
2026-08-19 12:58:07 +00:00
gorbenko.pavel 82512eb1db Архивация списков (#13)
Tests / frontend-test (push) Successful in 44s
Tests / backend-test (push) Failing after 17m4s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/13
2026-08-19 09:08:36 +00:00
gorbenko.pavel 36fb71da02 RequestUniqueCode из данных заявк
Tests / frontend-test (push) Successful in 50s
Tests / backend-test (push) Successful in 2m9s
2026-08-18 10:46:28 +05:00
gorbenko.pavel 48ede1420d Обходной лист (#12)
Tests / backend-test (push) Successful in 1m38s
Tests / frontend-test (push) Successful in 47s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/12
2026-08-17 05:43:52 +00:00
gorbenko.pavel d076f4e98d Sla (#11)
Tests / backend-test (push) Successful in 1m50s
Tests / frontend-test (push) Successful in 49s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/11
2026-08-13 04:44:08 +00:00
gorbenko.pavel 509f26de7b поправлены дубли шагов
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 1m59s
2026-08-11 10:07:41 +05:00
gorbenko.pavel 1d45780294 Заглушка для департамента (#8)
Tests / frontend-test (push) Successful in 43s
Tests / backend-test (push) Successful in 2m57s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/8
2026-08-07 10:36:53 +00:00
gorbenko.pavel 9d9f390548 теперь хранится id списка а не его название
Tests / test (push) Successful in 1m33s
2026-08-03 16:14:31 +05:00
gorbenko.pavel 13db1388a3 Новый виды условных шагов (#6)
Tests / test (push) Successful in 4m19s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/6
2026-07-31 12:15:15 +00:00
gorbenko.pavel 5476c1bab5 добавлен warning
Tests / test (push) Successful in 2m4s
2026-07-29 14:53:45 +05:00
gorbenko.pavel 13d929eb5b валидация статуса 2026-07-29 10:19:38 +05:00
gorbenko.pavel 602554ac64 апи для работы с маршрутами согласования (#2)
Tests / test (push) Successful in 5m45s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/2
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tnsu.kz>
Co-committed-by: gorbenko.pavel <gorbenko.pavel@tnsu.kz>
2026-07-27 13:14:32 +00:00