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; /// /// Interaction logic for CheckReportDialog.xaml /// 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(ServiceProviderFactory.ServiceProvider); DataContext = _viewModel; _viewModel.OnRequestClose += (_, _) => Close(); InitializeComponent(); _patientName = patientName; Task.FromResult(_viewModel.LoadReportData(dataKey, showDeleteButton)); _logger = ActivatorUtilities.GetServiceOrCreateInstance(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); } }