using System; using System.Linq; using InABox.Mobile; using Xamarin.Essentials; using Xamarin.Forms.Xaml; namespace PRS.Mobile { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class AssignmentEdit { public AssignmentShell Item { get => _viewmodel.Item; set { _viewmodel.Item = value; Title = _viewmodel.Item.ID == Guid.Empty ? "New Assignment" : $"Assignment {_viewmodel.Item.Number}"; ReloadForms(); Forms.Refresh(); CheckChanged(); } } public AssignmentEdit() { InitializeComponent(); App.Data.Activities.Refresh(false); } private void CheckChanged() { Dispatcher.BeginInvokeOnMainThread(() => { bool changed = Item.ID == Guid.Empty || Item.IsChanged(); _save.IsVisible = changed; _directions.IsVisible = !changed && _tabStrip.SelectedItem.Index == 1; _newimage.IsVisible = !changed && _tabStrip.SelectedItem.Index == 2; _newform.IsVisible = !changed && _tabStrip.SelectedItem.Index == 3; }); } private void Details_OnOnDetailsChanged(object sender, MobileViewChangedEventArgs eventArgs) { CheckChanged(); } private void ReloadForms() { _newform.Items.Clear(); var forms = App.Data.Activities.FirstOrDefault(x => x.ID == _viewmodel.Item.ActivityID)?.Forms; if (forms?.Any() == true) { foreach (var form in forms) { MobileMenuItem item = new MobileMenuItem() { Text = form.FormDescription, BindingContext = form }; item.Clicked += (o, args) => { var newform = _viewmodel.Forms.AddItem(); newform.ParentID = _viewmodel.Item.ID; newform.FormID = (item.BindingContext as ActivityFormShell)?.FormID ?? Guid.Empty; newform.FormDescription = (item.BindingContext as ActivityFormShell)?.FormDescription ?? "Guid.Empty"; _viewmodel.Forms.CommitItem(newform); Forms.Refresh(); }; _newform.Items.Add(item); } } } private async void TakePhoto_Clicked(object sender, EventArgs e) { await Images.AddImage(PhotoUtils.CreateCameraOptions()); } private async void BrowseLibrary_Clicked(object sender, EventArgs e) { await Images.AddImage(PhotoUtils.CreatePhotoLibraryOptions()); } private async void _save_OnClicked(object sender, MobileMenuButtonClickedEventArgs args) { if (Item.ActivityID == Guid.Empty) { await DisplayAlert("Please select an Activity before saving this booking!", "Error", "OK"); return; } Item.Save("Saved by PRS Mobile"); CheckChanged(); } private void _newform_OnClicked(object sender, MobileMenuButtonClickedEventArgs args) { var selector = new NewForms() { AppliesTo = "Assignment" }; selector.ItemSelected += CreateNewForm; Navigation.PushAsync(selector); } private async void CreateNewForm(object sender, NewFormSelectedArgs args) { var instance = _viewmodel.Forms.AddItem(); instance.ParentID = _viewmodel.Item.ID; instance.FormID = args.Form.ID; instance.FormCode = args.Form.Code; instance.FormDescription = args.Form.Description; instance.Save("Created on Mobile Device"); Dispatcher.BeginInvokeOnMainThread(() => { _viewmodel.Forms.Search(null); Forms.Refresh(); }); } private async void RefreshMap_Clicked(object sender, MobileMenuButtonClickedEventArgs args) { await DisplayAlert("Error", "Not Implemented Yet!", "OK"); } private void _tabStrip_OnSelectionChanged(object sender, EventArgs e) { _tabView.SelectedItem = _tabView.Items[_tabStrip.SelectedItem.Index]; if (_tabStrip.SelectedIndex == 1) Map.Refresh(); else if (_tabStrip.SelectedIndex == 3) { Forms.Refresh(); ReloadForms(); } CheckChanged(); } private async void Directions_Clicked(object sender, MobileMenuButtonClickedEventArgs args) { var location = new Xamarin.Essentials.Location(_viewmodel.Coordinates.Y, _viewmodel.Coordinates.X); var options = new Xamarin.Essentials.MapLaunchOptions { NavigationMode = Xamarin.Essentials.NavigationMode.Driving }; await Xamarin.Essentials.Map.OpenAsync(location, options); } } }