Commit Graph

16 Commits

Author SHA1 Message Date
gorbenko.pavel 1221b31225 fix: колонки с датами теряли заливку шапки (SetDefaultColumnStyle в NPOI)
Tests / frontend-test (pull_request) Successful in 48s
Tests / backend-test (pull_request) Successful in 2m0s
H1/I1/K1 («Дата подачи заявки», «Дата закрытия вакансии», «Дата
выхода») выходили с форматом даты вместо синей заливки шапки — хотя
код применял ко всей строке 1 один и тот же стиль Header.

Причина — SetDefaultColumnStyle(col, DataDate), вызванный ПОСЛЕ записи
строк: в отличие от чистого OOXML, где стиль колонки уступает явному
стилю ячейки, NPOI этим вызовом переписывает стиль уже существующих
ячеек колонки целиком, включая шапку. Формат даты и так стоит на каждой
конкретной ячейке с датой (SetDate) — вызов просто убран.

Добавлен регрессионный тест (сравнение Index стиля, а не ссылки на
объект — NPOI отдаёт новую обёртку ICellStyle на каждый вызов
CellStyle, ссылки не совпадают даже у идентичного стиля).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 11:33:13 +05:00
gorbenko.pavel 80973bc1c0 fix: диаграммы отчёта по вакансиям не накладываются, шапка блоков — сплошная
Якорь второй диаграммы стоял на строке заголовка второй вертикальной
таблицы — при коротком списке рекрутёров (2-4 человека) это оказывалось
внутри вертикального диапазона первой диаграммы (фиксированные 14
строк), и они наезжали друг на друга. Теперь обе диаграммы позиционируются
независимо от строк таблиц: вторая всегда сразу под первой (ChartHeightRows).

Заливка шапки «Общий объем работ»/«Общий объем в работе» теперь на всю
ширину блока (по числу рекрутёров), а не только под текстом — иначе она
выглядела как две узкие цветные ячейки на белом фоне.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 11:17:07 +05:00
gorbenko.pavel 4dac12302c feat: сводный лист «Результаты» с диаграммами в отчёте по вакансиям
Второй лист xlsx по образцу ручного отчёта HR: горизонтальная таблица
по рекрутёрам (всего/в работе %/закрыто %) и две вертикальные таблицы
с долей каждого рекрутёра в общем объёме и в объёме "в работе" — плюс
по круговой диаграмме на каждую (VacancyReportSummary,
VacancyReportWorkbook.BuildSummarySheet).

Библиотека для xlsx сменена с ClosedXML на NPOI: у ClosedXML нет
поддержки Excel-диаграмм вовсе, только у NPOI из бесплатных вариантов
она есть (XSSFChart/DataSources из NPOI.OOXML). Переписан весь
генератор, тесты читают файл обратно тем же NPOI. Заодно запинена
System.Security.Cryptography.Xml до 10.0.11 — версия, которую тянет
NPOI транзитивно (8.0.2), с известной уязвимостью.

Вакансии без рекрутёра сведены в «Без рекрутёра» и всегда идут в
таблицах последними — не участник рейтинга, а технический хвост.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 11:12:45 +05:00
gorbenko.pavel 24d2cd7a6a feat: отчёт по вакансиям в xlsx за период
GET api/reports/vacancies?from=&to= отдаёт лист «Список вакансий (все)»
по образцу ручного отчёта HR: те же шестнадцать колонок, разделители по
объектам, двойная нумерация, итоги формулами.

Данные — из двух форм портала: «Заявка на подбор» даёт вакансию,
«Приём на работу» — её закрытие (связь по SelectionRequestId +
SelectionRequestListId). Рекрутёр и дата закрытия берутся из фазы
«Исполнение» парного списка «— согласование»: в самой заявке их нет.

Период отбирает заявки по «Дате подачи заявки» с откатом на Created —
поле заполняется руками и часто пустое. Заявки на приём периодом не
ограничены: приём по вакансии из начала интервала мог оформляться уже
после его конца.

Колонка «Комментарии» остаётся пустой — в ручном отчёте это пометки
рекрутёра, которым в заявках пока негде храниться.

Генерация — ClosedXML (MIT): нужны стили, формулы и autofilter, а EPPlus
с v5 под Polyform Noncommercial.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 18:01:24 +05:00
gorbenko.pavel 95d460c80a Расширение reminders (#19)
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 2m22s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/19
2026-08-27 11:43:45 +00: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 a2672042d7 ускорение reminders
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 2m7s
2026-08-18 10:58:34 +05: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 7bd4acb7a6 добавлен статус
Tests / frontend-test (push) Successful in 48s
Tests / backend-test (push) Successful in 3m4s
2026-08-17 14:33:51 +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