103 lines
3.4 KiB
C#
103 lines
3.4 KiB
C#
using System.Globalization;
|
|
using System.Text.Json.Serialization;
|
|
using System.Windows;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using JetBrains.Annotations;
|
|
|
|
namespace Livia.Models.Data;
|
|
|
|
public record DataHistory
|
|
{
|
|
[JsonPropertyName("key"), UsedImplicitly]
|
|
public string? Key { get; init; }
|
|
|
|
[JsonPropertyName("import_time"), UsedImplicitly]
|
|
public string? ImportTimeString { get; init; }
|
|
|
|
public DateTime? ImportTime
|
|
{
|
|
get
|
|
{
|
|
if (ImportTimeString == null)
|
|
return null;
|
|
|
|
if (DateTime.TryParseExact(ImportTimeString, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime))
|
|
return dateTime;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
[JsonPropertyName("errno"), UsedImplicitly]
|
|
public int? ErrNo { get; init; }
|
|
|
|
[JsonPropertyName("status"), UsedImplicitly]
|
|
public int Status { get; init; }
|
|
|
|
public string StatusString => (string)Application.Current.TryFindResource($"ServerJobStatus{Status}");
|
|
public string Tooltip => (string)(Application.Current.TryFindResource($"ServerError{ErrNo}") ?? StatusString);
|
|
}
|
|
|
|
[UsedImplicitly]
|
|
public class ServerJobData : ObservableObject
|
|
{
|
|
public string? Key => HistoryList?.FirstOrDefault(item => item.Status == 4)?.Key ?? FirstHistory?.Key ?? null;
|
|
public DateTime? ImportTime => FirstHistory?.ImportTime ?? null;
|
|
public int Status => _canceled ? 5 : FirstHistory?.Status ?? -1;
|
|
|
|
[JsonPropertyName("id"), UsedImplicitly]
|
|
public int? Id { get; init; }
|
|
|
|
[JsonPropertyName("patient_name"), UsedImplicitly]
|
|
public string? PatientName { get; init; }
|
|
|
|
[JsonPropertyName("patient_id"), UsedImplicitly]
|
|
public string? PatientId { get; init; }
|
|
|
|
[JsonPropertyName("patient_age"), UsedImplicitly]
|
|
public int? PatientAge { get; init; }
|
|
|
|
[JsonPropertyName("patient_sex"), UsedImplicitly]
|
|
public string? PatientSex { get; init; }
|
|
|
|
[JsonPropertyName("study_date"), UsedImplicitly]
|
|
public string? StudyDateString { get; init; }
|
|
public DateTime? StudyDate
|
|
{
|
|
get
|
|
{
|
|
if (StudyDateString == null)
|
|
return null;
|
|
|
|
if (DateTime.TryParseExact(StudyDateString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime))
|
|
return dateTime;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
[JsonPropertyName("sequence"), UsedImplicitly]
|
|
public List<SeriesGroup>? Sequence { get; init; }
|
|
|
|
[JsonPropertyName("history"), UsedImplicitly]
|
|
public List<DataHistory>? HistoryList { get; init; }
|
|
|
|
public bool JobSuccess => HistoryList?.Any(item => item.Status == 4) ?? false;
|
|
public bool ContainsMultipleHistory => (HistoryList?.Count ?? 0) > 1;
|
|
public bool CancelButtonVisible => Status < 4 && !_canceled;
|
|
public bool DeleteButtonVisible => Status >= 4;
|
|
public bool SelectSeriesButtonVisible => Status == 6;
|
|
public string Tooltip => FirstHistory?.Tooltip ?? "";
|
|
public string StatusString => FirstHistory?.StatusString ?? "";
|
|
|
|
private DataHistory? FirstHistory => HistoryList?.Count > 0 ? HistoryList[0] : null;
|
|
private bool _canceled;
|
|
|
|
public void SetJobCanceled()
|
|
{
|
|
_canceled = true;
|
|
OnPropertyChanged(nameof(Status));
|
|
OnPropertyChanged(nameof(CancelButtonVisible));
|
|
OnPropertyChanged(nameof(Tooltip));
|
|
OnPropertyChanged(nameof(StatusString));
|
|
}
|
|
}
|