livia-test/Livia/Views/CheckReportDialog.xaml.cs
2025-03-28 14:31:53 +08:00

123 lines
3.7 KiB
C#

using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Livia.Models.Data;
using Livia.Utility.DependencyInjection;
using Livia.ViewModels;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Ookii.Dialogs.Wpf;
namespace Livia.Views;
/// <summary>
/// Interaction logic for CheckReportDialog.xaml
/// </summary>
public partial class CheckReportDialog
{
private readonly ILogger _logger;
private readonly CheckReportWindowViewModel _viewModel;
private string? _patientName;
public CheckReportDialog(string dataKey, bool showDeleteButton = true, string patientName = "")
{
_viewModel = ActivatorUtilities.CreateInstance<CheckReportWindowViewModel>(ServiceProviderFactory.ServiceProvider);
DataContext = _viewModel;
_viewModel.OnRequestClose += (_, _) => Close();
InitializeComponent();
_patientName = patientName;
Task.FromResult(_viewModel.LoadReportData(dataKey, showDeleteButton));
_logger = ActivatorUtilities.GetServiceOrCreateInstance<ILogger>(ServiceProviderFactory.ServiceProvider);
}
private void WindowClosing(object sender, CancelEventArgs e)
{
_viewModel.Dispose();
}
private async void DeleteReportButtonClick(object sender, RoutedEventArgs e)
{
ReportItem? data = GetDataFromSender(sender);
if (data == null)
return;
try
{
await _viewModel.DeleteReport(data.Id);
}
catch (Exception exception)
{
_logger.LogError(exception, $"Error DeleteReport, Id = {data.Id}");
}
}
private async void DownloadReportButtonClick(object sender, RoutedEventArgs e)
{
ReportItem? data = GetDataFromSender(sender);
if (data == null)
return;
string name = _viewModel.PatientInfoManager.AnonymousMode ? "Anonymous" : _viewModel.PatientInfoManager.PatientName;
if (!string.IsNullOrEmpty(_patientName)) name = _patientName;
VistaSaveFileDialog dialog = new()
{
OverwritePrompt = true,
CheckFileExists = true,
CheckPathExists = true,
AddExtension = true,
FileName = $"{name}_{data.Title}",
Filter = "pdf|*.pdf",
DefaultExt = ".pdf"
};
if (!(dialog.ShowDialog() ?? false))
return;
try
{
await _viewModel.DownloadReport(data.Id, dialog.FileName);
}
catch (Exception exception)
{
_logger.LogError(exception, $"Error DownloadReport, Id = {data.Id}, FileName = {dialog.FileName}");
}
}
private async void PushReportButtonClick(object sender, RoutedEventArgs e)
{
ReportItem? data = GetDataFromSender(sender);
if (data == null)
return;
await _viewModel.PushReport(data.Id);
}
private static ReportItem? GetDataFromSender(object sender)
{
return (sender as Button)?.DataContext as ReportItem;
}
private void TitleBarMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
DragMove();
}
catch (Exception exception)
{
_logger.LogError(exception, "Error dragging window, sender = {sender}, event = {event}", sender, e);
}
}
private void CancelButtonClick(object sender, RoutedEventArgs e)
{
_viewModel.Cancel();
}
public async Task LoadReportData(string dataKey, bool showDeleteButton = true, string patientName = "")
{
_patientName = patientName;
await _viewModel.LoadReportData(dataKey, showDeleteButton);
}
}