using System; using System.Collections.Generic; using System.Windows; namespace XLAB2 { internal interface IDialogService { DocumentEditorResult ShowCreateDocumentDialog(DocumentEditorResult seed); IReadOnlyList ShowInstrumentPickerDialog(string customerName, IReadOnlyList instruments); InstrumentTypeSelectionResult ShowInstrumentTypeDialog(string customerName, IReadOnlyList instrumentTypes); IReadOnlyList ShowCloneVerificationDialog(CloneVerificationSeed seed); GroupOption ShowAccountingBookEditDialog(GroupOption seed, bool isNew, IReadOnlyList existingItems); SpoiDirectoryItem ShowSpoiEditDialog(SpoiDirectoryItem seed, bool isNew, IReadOnlyList existingItems); SpnmtpDirectoryItem ShowSpnmtpEditDialog(SpnmtpDirectoryItem seed, bool isNew, IReadOnlyList existingItems); VerificationEditResult ShowVerificationDialog( VerificationEditSeed seed, IReadOnlyList verifiers, IReadOnlyList documentForms); bool Confirm(string message); void ShowError(string message); void ShowInfo(string message); void ShowWarning(string message); } internal sealed class DialogService : IDialogService { private readonly DocumentNumberDirectoryService _documentNumberDirectoryService; public DialogService() { } public DialogService(Window owner) { Owner = owner; } public DialogService(Window owner, DocumentNumberDirectoryService documentNumberDirectoryService) { Owner = owner; _documentNumberDirectoryService = documentNumberDirectoryService; } public Window Owner { get; set; } public DocumentEditorResult ShowCreateDocumentDialog(DocumentEditorResult seed) { var directory = (_documentNumberDirectoryService ?? CreateDefaultDocumentNumberDirectoryService()).LoadDirectory(); var viewModel = new CreateDocumentWindowViewModel(seed, directory); var window = new CreateDocumentWindow(viewModel); AttachOwner(window); var result = window.ShowDialog(); return result.HasValue && result.Value ? viewModel.ToResult() : null; } public IReadOnlyList ShowInstrumentPickerDialog(string customerName, IReadOnlyList instruments) { var viewModel = new SelectInstrumentsWindowViewModel(customerName, instruments); var window = new SelectInstrumentsWindow(viewModel); AttachOwner(window); var result = window.ShowDialog(); return result.HasValue && result.Value ? viewModel.GetSelectedItems() : null; } public InstrumentTypeSelectionResult ShowInstrumentTypeDialog(string customerName, IReadOnlyList instrumentTypes) { var viewModel = new SelectInstrumentTypeWindowViewModel(customerName, instrumentTypes); var window = new SelectInstrumentTypeWindow(viewModel); AttachOwner(window); var result = window.ShowDialog(); return result.HasValue && result.Value ? viewModel.GetResult() : null; } public IReadOnlyList ShowCloneVerificationDialog(CloneVerificationSeed seed) { var viewModel = new CloneVerificationWindowViewModel(seed); var window = new CloneVerificationWindow(viewModel); AttachOwner(window); var result = window.ShowDialog(); return result.HasValue && result.Value ? viewModel.GetSerialNumbers() : null; } public GroupOption ShowAccountingBookEditDialog(GroupOption seed, bool isNew, IReadOnlyList existingItems) { var viewModel = new AccountingBookEditWindowViewModel(seed, isNew, existingItems); var window = new AccountingBookEditWindow(viewModel); AttachOwner(window); var result = window.ShowDialog(); return result.HasValue && result.Value ? viewModel.ToResult() : null; } public SpoiDirectoryItem ShowSpoiEditDialog(SpoiDirectoryItem seed, bool isNew, IReadOnlyList existingItems) { var viewModel = new SpoiEditWindowViewModel(seed, isNew, existingItems); var window = new SpoiEditWindow(viewModel); AttachOwner(window); var result = window.ShowDialog(); return result.HasValue && result.Value ? viewModel.ToResult() : null; } public SpnmtpDirectoryItem ShowSpnmtpEditDialog(SpnmtpDirectoryItem seed, bool isNew, IReadOnlyList existingItems) { var viewModel = new SpnmtpEditWindowViewModel(seed, isNew, existingItems); var window = new SpnmtpEditWindow(viewModel); AttachOwner(window); var result = window.ShowDialog(); return result.HasValue && result.Value ? viewModel.ToResult() : null; } public VerificationEditResult ShowVerificationDialog( VerificationEditSeed seed, IReadOnlyList verifiers, IReadOnlyList documentForms) { var viewModel = new VerificationEditWindowViewModel(seed, verifiers, documentForms); var window = new VerificationEditWindow(viewModel); AttachOwner(window); var result = window.ShowDialog(); return result.HasValue && result.Value ? viewModel.ToResult() : null; } public bool Confirm(string message) { return Owner == null ? MessageBox.Show(message, "ПСВ", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes : MessageBox.Show(Owner, message, "ПСВ", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes; } public void ShowError(string message) { ShowMessage(message, MessageBoxImage.Error); } public void ShowInfo(string message) { ShowMessage(message, MessageBoxImage.Information); } public void ShowWarning(string message) { ShowMessage(message, MessageBoxImage.Warning); } private void AttachOwner(Window window) { if (Owner != null) { window.Owner = Owner; } } private void ShowMessage(string message, MessageBoxImage image) { if (Owner == null) { MessageBox.Show(message, "ПСВ", MessageBoxButton.OK, image); return; } MessageBox.Show(Owner, message, "ПСВ", MessageBoxButton.OK, image); } private static DocumentNumberDirectoryService CreateDefaultDocumentNumberDirectoryService() { return new DocumentNumberDirectoryService(System.IO.Path.Combine(AppContext.BaseDirectory, "Assets", "document-number-directory.json")); } } }