| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | 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<MobileDocumentCameraSource, MobileDocumentCameraOptions>(PhotoUtils.CreateCameraOptions());        }        private async void BrowseLibrary_Clicked(object sender, EventArgs e)        {            await Images.AddImage<MobileDocumentPhotoLibrarySource, MobileDocumentPhotoLibraryOptions>(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);        }    }}
 |