AssignmentEdit.xaml.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System;
  2. using System.Linq;
  3. using InABox.Mobile;
  4. using Xamarin.Essentials;
  5. using Xamarin.Forms.Xaml;
  6. namespace PRS.Mobile
  7. {
  8. [XamlCompilation(XamlCompilationOptions.Compile)]
  9. public partial class AssignmentEdit
  10. {
  11. public AssignmentShell Item
  12. {
  13. get => _viewmodel.Item;
  14. set
  15. {
  16. _viewmodel.Item = value;
  17. Title = _viewmodel.Item.ID == Guid.Empty
  18. ? "New Assignment"
  19. : $"Assignment {_viewmodel.Item.Number}";
  20. ReloadForms();
  21. Forms.Refresh();
  22. CheckChanged();
  23. }
  24. }
  25. public AssignmentEdit()
  26. {
  27. InitializeComponent();
  28. App.Data.Activities.Refresh(false);
  29. }
  30. private void CheckChanged()
  31. {
  32. Dispatcher.BeginInvokeOnMainThread(() =>
  33. {
  34. bool changed = Item.ID == Guid.Empty || Item.IsChanged();
  35. _save.IsVisible = changed;
  36. _directions.IsVisible = !changed && _tabStrip.SelectedItem.Index == 1;
  37. _newimage.IsVisible = !changed && _tabStrip.SelectedItem.Index == 2;
  38. _newform.IsVisible = !changed && _tabStrip.SelectedItem.Index == 3;
  39. });
  40. }
  41. private void Details_OnOnDetailsChanged(object sender, MobileViewChangedEventArgs eventArgs)
  42. {
  43. CheckChanged();
  44. }
  45. private void ReloadForms()
  46. {
  47. _newform.Items.Clear();
  48. var forms = App.Data.Activities.FirstOrDefault(x => x.ID == _viewmodel.Item.ActivityID)?.Forms;
  49. if (forms?.Any() == true)
  50. {
  51. foreach (var form in forms)
  52. {
  53. MobileMenuItem item = new MobileMenuItem()
  54. {
  55. Text = form.FormDescription,
  56. BindingContext = form
  57. };
  58. item.Clicked += (o, args) =>
  59. {
  60. var newform = _viewmodel.Forms.AddItem();
  61. newform.ParentID = _viewmodel.Item.ID;
  62. newform.FormID = (item.BindingContext as ActivityFormShell)?.FormID ?? Guid.Empty;
  63. newform.FormDescription = (item.BindingContext as ActivityFormShell)?.FormDescription ?? "Guid.Empty";
  64. _viewmodel.Forms.CommitItem(newform);
  65. Forms.Refresh();
  66. };
  67. _newform.Items.Add(item);
  68. }
  69. }
  70. }
  71. private async void TakePhoto_Clicked(object sender, EventArgs e)
  72. {
  73. await Images.AddImage<MobileDocumentCameraSource, MobileDocumentCameraOptions>(PhotoUtils.CreateCameraOptions());
  74. }
  75. private async void BrowseLibrary_Clicked(object sender, EventArgs e)
  76. {
  77. await Images.AddImage<MobileDocumentPhotoLibrarySource, MobileDocumentPhotoLibraryOptions>(PhotoUtils.CreatePhotoLibraryOptions());
  78. }
  79. private async void _save_OnClicked(object sender, MobileMenuButtonClickedEventArgs args)
  80. {
  81. if (Item.ActivityID == Guid.Empty)
  82. {
  83. await DisplayAlert("Please select an Activity before saving this booking!", "Error", "OK");
  84. return;
  85. }
  86. Item.Save("Saved by PRS Mobile");
  87. CheckChanged();
  88. }
  89. private void _newform_OnClicked(object sender, MobileMenuButtonClickedEventArgs args)
  90. {
  91. var selector = new NewForms() { AppliesTo = "Assignment" };
  92. selector.ItemSelected += CreateNewForm;
  93. Navigation.PushAsync(selector);
  94. }
  95. private async void CreateNewForm(object sender, NewFormSelectedArgs args)
  96. {
  97. var instance = _viewmodel.Forms.AddItem();
  98. instance.ParentID = _viewmodel.Item.ID;
  99. instance.FormID = args.Form.ID;
  100. instance.FormCode = args.Form.Code;
  101. instance.FormDescription = args.Form.Description;
  102. instance.Save("Created on Mobile Device");
  103. Dispatcher.BeginInvokeOnMainThread(() =>
  104. {
  105. _viewmodel.Forms.Search(null);
  106. Forms.Refresh();
  107. });
  108. }
  109. private async void RefreshMap_Clicked(object sender, MobileMenuButtonClickedEventArgs args)
  110. {
  111. await DisplayAlert("Error", "Not Implemented Yet!", "OK");
  112. }
  113. private void _tabStrip_OnSelectionChanged(object sender, EventArgs e)
  114. {
  115. _tabView.SelectedItem = _tabView.Items[_tabStrip.SelectedItem.Index];
  116. if (_tabStrip.SelectedIndex == 1)
  117. Map.Refresh();
  118. else if (_tabStrip.SelectedIndex == 3)
  119. {
  120. Forms.Refresh();
  121. ReloadForms();
  122. }
  123. CheckChanged();
  124. }
  125. private async void Directions_Clicked(object sender, MobileMenuButtonClickedEventArgs args)
  126. {
  127. var location = new Xamarin.Essentials.Location(_viewmodel.Coordinates.Y, _viewmodel.Coordinates.X);
  128. var options = new Xamarin.Essentials.MapLaunchOptions { NavigationMode = Xamarin.Essentials.NavigationMode.Driving };
  129. await Xamarin.Essentials.Map.OpenAsync(location, options);
  130. }
  131. }
  132. }