SiteITPForms.xaml.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using InABox.Core;
  7. using Comal.Classes;
  8. using Syncfusion.Data;
  9. using Xamarin.Forms;
  10. using Xamarin.Forms.Xaml;
  11. using XF.Material.Forms.UI.Dialogs;
  12. namespace PRS.Mobile
  13. {
  14. [XamlCompilation(XamlCompilationOptions.Compile)]
  15. public partial class SiteITPForms
  16. {
  17. private JobITPFormModel _formmodel;
  18. private JobITPModel _itpmodel;
  19. private Guid _itpid;
  20. private JobITPShell _itp => _itpmodel?.FirstOrDefault(x => x.ID == _itpid);
  21. public SiteITPForms(JobITPModel itps, JobITPFormModel forms, Guid itp)
  22. {
  23. _itpmodel = itps;
  24. _formmodel = forms;
  25. _itpid = itp;
  26. InitializeComponent();
  27. ProgressVisible = true;
  28. _forms.DataModel = _formmodel;
  29. _forms.AppliesTo = "JobITP";
  30. _forms.Property = model => _formmodel.Items.OfType<IDigitalFormInstanceShell>().ToArray();
  31. RefreshData(false, true);
  32. }
  33. protected void RefreshData(bool force, bool async)
  34. {
  35. Task[] tasks = new Task[]
  36. {
  37. Task.Run(() => _itpmodel.Refresh(force)),
  38. Task.Run(() => _formmodel.Refresh(force))
  39. };
  40. if (async)
  41. Task.WhenAll(tasks).ContinueWith((_) => Device.BeginInvokeOnMainThread(RefreshScreen));
  42. else
  43. {
  44. Task.WaitAll(tasks);
  45. RefreshScreen();
  46. }
  47. }
  48. private void RefreshScreen()
  49. {
  50. Title = _itpmodel.FirstOrDefault((x=>x.ID == _itpid))?.Description ?? "No ITP Selected";
  51. _forms.Refresh();
  52. ProgressVisible = false;
  53. }
  54. private bool _forms_OnSearch(object sender, ExistingFormSearchEventArgs args)
  55. {
  56. return args.Shell.ParentID == _itp.ID;
  57. }
  58. private void Add_Clicked(object sender, EventArgs e)
  59. {
  60. var shell = _formmodel.AddItem();
  61. shell.ParentID = _itp.ID;
  62. shell.FormID = _itp.FormID;
  63. shell.FormCode = _itp.FormCode;
  64. shell.FormDescription = _itp.FormName;
  65. shell.Save("Created on Mobile Device");
  66. _formmodel.Search(null);
  67. _forms.RefreshData(false,false);
  68. }
  69. private void _forms_OnFormTapped(object sender, ExistingFormTappedEventArgs args)
  70. {
  71. if (args.Shell is JobITPFormShell shell)
  72. {
  73. // Pretty sure this can be replaced with _forms.EditFormAsync<>(shell, _itp.Entity)
  74. // Only difference is that calls RefreshData(true, true)
  75. var model = new DigitalFormHostModel<JobITP, JobITPLink, JobITPForm>();
  76. model.LoadItems(_itp.Entity, shell.FormID, shell.ID, null);
  77. var host = new DigitalFormHost(model);
  78. host.OnClosing += (o, args) =>
  79. {
  80. if (args.Changed)
  81. {
  82. //instance.Completed = !model.DigitalFormDataModel.Instance.FormCompleted.IsEmpty();
  83. }
  84. };
  85. Navigation.PushAsync(host);
  86. }
  87. }
  88. private void _forms_OnRefreshRequested(object sender, ExistingFormRefreshEventArgs args)
  89. {
  90. RefreshData(true,false);
  91. args.Cancel = true;
  92. }
  93. }
  94. }