47 lines
1.7 KiB
C#
47 lines
1.7 KiB
C#
using System.Text.Json;
|
|
|
|
namespace Tnsu.ApprovalRoute.Application.Reminders;
|
|
|
|
/// <summary>
|
|
/// Строка списка «Прием на работу — данные», разобранная из ответа SharePoint.
|
|
/// Имена колонок — как в request-portal (provisioning.json формы RecruitingHire).
|
|
/// </summary>
|
|
internal sealed record HireRow(
|
|
int Id,
|
|
string Status,
|
|
string? CandidateName,
|
|
DateTimeOffset? HireDate,
|
|
string? ProbationPeriod,
|
|
string? RequestUniqueCode)
|
|
{
|
|
public static HireRow? TryParse(JsonElement item)
|
|
{
|
|
if (!item.TryGetProperty("Id", out var idProp) || !idProp.TryGetInt32(out var id)) return null;
|
|
|
|
return new HireRow(
|
|
id,
|
|
GetString(item, "RequestStatus") ?? string.Empty,
|
|
GetString(item, "CandidateName"),
|
|
TryGetDate(item, "HireDate"),
|
|
GetString(item, "ProbationPeriod"),
|
|
GetString(item, "RequestUniqueCode"));
|
|
}
|
|
|
|
private static string? GetString(JsonElement e, string name) =>
|
|
e.TryGetProperty(name, out var v) && v.ValueKind == JsonValueKind.String ? v.GetString() : null;
|
|
|
|
private static DateTimeOffset? TryGetDate(JsonElement e, string name) =>
|
|
e.TryGetProperty(name, out var v) &&
|
|
v.ValueKind == JsonValueKind.String &&
|
|
DateTimeOffset.TryParse(v.GetString(), out var parsed)
|
|
? parsed
|
|
: null;
|
|
}
|
|
|
|
/// <summary>Статусы списка данных («… — данные», колонка RequestStatus) — считаем приём завершённым по ним.</summary>
|
|
internal static class HireRequestStatuses
|
|
{
|
|
public const string Approved = "Согласовано";
|
|
public const string Closed = "Закрыта";
|
|
}
|