Отчет по вакансиям (#20)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/20
This commit was merged in pull request #20.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Tnsu.ApprovalRoute.Application.Reports;
|
||||
|
||||
/// <summary>
|
||||
/// Строка списка «Заявка на подбор — данные». Имена колонок — как в request-portal
|
||||
/// (provisioning.json формы RecruitingSelection).
|
||||
/// </summary>
|
||||
internal sealed record SelectionRow(
|
||||
int Id,
|
||||
string ListId,
|
||||
string Status,
|
||||
string? Position,
|
||||
string? DepartmentName,
|
||||
string? ObjectProject,
|
||||
int VacanciesCount,
|
||||
DateOnly? SubmitDate,
|
||||
string? Initiator,
|
||||
string? OpenReason,
|
||||
string? OpenReasonDetails)
|
||||
{
|
||||
/// <summary>
|
||||
/// Поля, которые нужны отчёту, — перечислены явно: список данных широкий
|
||||
/// (полсотни колонок, часть — Note с многострочным текстом), и тянуть его
|
||||
/// целиком по всем партициям только ради шестнадцати колонок незачем.
|
||||
/// </summary>
|
||||
public const string Select =
|
||||
"$select=Id,RequestStatus,Position,DepartmentName,ObjectProject,OpenVacanciesCount," +
|
||||
"SubmitDate,Created,OpenReason,OpenReasonDetails,Responsible/Title&$expand=Responsible&$top=5000";
|
||||
|
||||
public static SelectionRow? TryParse(JsonElement item, string listId)
|
||||
{
|
||||
var id = SharePointJson.Int(item, "Id");
|
||||
if (id is null) return null;
|
||||
|
||||
return new SelectionRow(
|
||||
id.Value,
|
||||
listId,
|
||||
SharePointJson.String(item, "RequestStatus") ?? string.Empty,
|
||||
SharePointJson.String(item, "Position"),
|
||||
SharePointJson.String(item, "DepartmentName"),
|
||||
SharePointJson.String(item, "ObjectProject"),
|
||||
// Пустое «Количество открытых вакансий» — это одна вакансия: заявку
|
||||
// подают на конкретную должность, и ноль вакансий в отчёте сломал бы
|
||||
// и итог по колонке E, и признак «закрыта» (0 из 0).
|
||||
SharePointJson.Int(item, "OpenVacanciesCount") is { } count and > 0 ? count : 1,
|
||||
// Дата подачи — поле формы, заполняется руками и может быть пустым;
|
||||
// тогда берём дату создания элемента. Тем же правилом заявки
|
||||
// отбираются по интервалу (см. VacancyReportService.PeriodFilter) —
|
||||
// иначе заявка попадала бы в отчёт, но с пустой колонкой H.
|
||||
SharePointJson.Date(item, "SubmitDate") ?? SharePointJson.Date(item, "Created"),
|
||||
SharePointJson.PersonTitle(item, "Responsible"),
|
||||
SharePointJson.String(item, "OpenReason"),
|
||||
SharePointJson.String(item, "OpenReasonDetails"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user