SubmitDocsEditorViewModel.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using InABox.Avalonia;
  3. using InABox.Avalonia.Components;
  4. using InABox.Avalonia.Platform;
  5. using InABox.Core;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace PRS.Avalonia.Modules;
  12. internal partial class SubmitDocsEditorViewModel : ModuleViewModel
  13. {
  14. public override string Title => "Document Editor";
  15. [ObservableProperty]
  16. private DataEntryDocumentShell _dataEntryDocument = null!;
  17. [ObservableProperty]
  18. public DocumentShell? _document;
  19. [ObservableProperty]
  20. private DocumentModel? _documentModel;
  21. [ObservableProperty]
  22. private Func<byte[]>? _getImage;
  23. [ObservableProperty]
  24. private bool _imageChanged;
  25. public SubmitDocsEditorViewModel()
  26. {
  27. PrimaryMenu.Add(new AvaloniaMenuItem(Images.save, Save));
  28. }
  29. protected override Task OnActivated()
  30. {
  31. DocumentModel = new DocumentModel(DataAccess,
  32. () => new Filter<Document>(x => x.ID).IsEqualTo(DataEntryDocument.DocumentID),
  33. () => DefaultCacheFileName<DocumentShell>(DataEntryDocument.DocumentID));
  34. return Task.CompletedTask;
  35. }
  36. protected override async Task<TimeSpan> OnRefresh()
  37. {
  38. await DocumentModel!.RefreshAsync(false);
  39. Document = DocumentModel.FirstOrDefault();
  40. return TimeSpan.Zero;
  41. }
  42. public override bool OnBackButtonPressed()
  43. {
  44. DataEntryDocument.Cancel();
  45. return base.OnBackButtonPressed();
  46. }
  47. private async Task<bool> Save()
  48. {
  49. ProgressVisible = true;
  50. if (ImageChanged && GetImage is not null && Document is not null)
  51. {
  52. var imgData = GetImage();
  53. Document.Data = imgData;
  54. Document.CRC = CoreUtils.CalculateCRC(imgData);
  55. Document.TimeStamp = DateTime.Now;
  56. await DocumentModel!.SaveAsync("Updated from Mobile Device");
  57. DataEntryDocument.Thumbnail = PlatformTools.ImageTools.CreateThumbnail(imgData, 256, 256);
  58. }
  59. await DataEntryDocument.SaveAsync("Updated from Mobile Device");
  60. ProgressVisible = false;
  61. Navigation.Back();
  62. return true;
  63. }
  64. }