123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- using System;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Text;
- using System.Threading.Tasks;
- using Comal.Classes;
- using InABox.Core;
- using Syncfusion.Drawing;
- using Xamarin.Forms;
- using Xamarin.Forms.Xaml;
- using XF.Material.Forms.UI.Dialogs;
- using PRSSecurity = InABox.Core.Security;
- namespace comal.timesheets
- {
- public class AssignmentDetailsChangedArgs : EventArgs
- {
- public string Property { get; }
- public AssignmentDetailsChangedArgs(String property)
- {
- Property = property;
- }
- }
- public delegate void AssignmentDetailsChangedDelegate(object sender, AssignmentDetailsChangedArgs args);
- [XamlCompilation(XamlCompilationOptions.Compile)]
- public partial class AssignmentDetails : ContentView, IAssignmentPage
- {
- public event AssignmentDetailsChangedDelegate OnDetailsChanged;
- public AssignmentDetailModel DataModel => BindingContext as AssignmentDetailModel;
- public AssignmentDetails()
- {
- InitializeComponent();
- }
- public void Load()
- {
- bool open = DataModel.Item.Completed.IsEmpty();
- Completed.Text = open
- ? "Complete"
- : InABox.Core.Security.CanEdit<Assignment>() ? "Re-Open" : $"Completed {DataModel.Item.Completed:dd/MM/yy}";
- Subject.IsEnabled = open && PRSSecurity.CanEdit<Assignment>();
- BookedStart.IsEnabled = open && PRSSecurity.IsAllowed<CanEditAssignmentBookings>();
- BookedFinish.IsEnabled = open && PRSSecurity.IsAllowed<CanEditAssignmentBookings>();
- ActualStart.IsEnabled = open && PRSSecurity.IsAllowed<CanEditAssignmentActualTimes>();
- ActualFinish.IsEnabled = open && PRSSecurity.IsAllowed<CanEditAssignmentActualTimes>();
- //AsBookedBtn.IsEnabled = open && PRSSecurity.IsAllowed<CanEditAssignmentActualTimes>();
- Job.IsEnabled = open && PRSSecurity.CanEdit<Assignment>();
- Task.IsEnabled = open && PRSSecurity.CanEdit<Assignment>();
- Activity.IsEnabled = open && PRSSecurity.CanEdit<Assignment>();
- Description.IsEnabled = open && PRSSecurity.CanEdit<Assignment>();
- Completed.IsEnabled = open || PRSSecurity.CanEdit<Assignment>();
- }
- private async void Activity_Clicked(object sender, EventArgs e)
- {
- try
- {
- GenericSelectionPage page = new GenericSelectionPage(
- "Select Activity",
- new SelectionViewModel<EmployeeActivity>(
- new Filter<EmployeeActivity>(x => x.Employee.ID).IsEqualTo(App.Data.Me.ID),
- new Expression<Func<EmployeeActivity, object>>[]
- { x => x.Activity.Code, x => x.Activity.Description },
- new Expression<Func<EmployeeActivity, object>>[] { x => x.Activity.ID },
- new SortOrder<EmployeeActivity>(x => x.Activity.Code)
- )
- );
- page.OnItemSelected += (row) =>
- {
- Device.BeginInvokeOnMainThread(() =>
- {
- DataModel.Item.ActivityID = row.Get<EmployeeActivity, Guid>(c => c.Activity.ID);
- DataModel.Item.ActivityCode = row.Get<EmployeeActivity, String>(c => c.Activity.Code);
- DataModel.Item.ActivityDescription = row.Get<EmployeeActivity, String>(c => c.Activity.Description);
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Activity"));
- });
- };
- Navigation.PushAsync(page);
- }
- catch
- {
- }
- }
- private void SelectJob_Clicked(object sender, EventArgs e)
- {
- try
- {
- GenericSelectionPage page = new GenericSelectionPage(
- "Select Job",
- new SelectionViewModel<Job>(
- new Filter<Job>(x => x.JobStatus.Active).IsEqualTo(true),
- new Expression<Func<Job, object>>[]
- { x => x.JobNumber, x => x.Name },
- new Expression<Func<Job, object>>[] { x => x.ID, x => x.SiteAddress.Location.Latitude, x => x.SiteAddress.Location.Longitude },
- new SortOrder<Job>(x => x.JobNumber, SortDirection.Descending)
- )
- );
- page.OnItemSelected += (row) =>
- {
- Device.BeginInvokeOnMainThread(() =>
- {
- DataModel.Item.JobID = row.Get<Job, Guid>(c => c.ID);
- DataModel.Item.JobNumber = row.Get<Job, String>(c => c.JobNumber);
- DataModel.Item.JobName = row.Get<Job, String>(c => c.Name);
- DataModel.Item.Latitude = row.Get<Job, double>(c => c.SiteAddress.Location.Latitude);
- DataModel.Item.Longitude = row.Get<Job, double>(c => c.SiteAddress.Location.Longitude);
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Job"));
- });
- };
- Navigation.PushAsync(page);
- }
- catch
- {
- }
- }
- private void Task_Clicked(object sender, EventArgs e)
- {
- try
- {
- GenericSelectionPage page = new GenericSelectionPage(
- "Select Task",
- new SelectionViewModel<Kanban>(
- new Filter<Kanban>(x => x.Completed).IsEqualTo(DateTime.MinValue),
- new Expression<Func<Kanban, object>>[]
- { x => x.Number, x => x.Title },
- new Expression<Func<Kanban, object>>[] { x => x.ID },
- new SortOrder<Kanban>(x => x.Number, SortDirection.Descending)
- )
- );
- page.OnItemSelected += (row) =>
- {
- Device.BeginInvokeOnMainThread(() =>
- {
- DataModel.Item.TaskID = row.Get<Kanban, Guid>(c => c.ID);
- DataModel.Item.TaskNumber = row.Get<Kanban, int>(c => c.Number);
- DataModel.Item.TaskName = row.Get<Kanban, String>(c => c.Title);
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Task"));
- });
- };
- Navigation.PushAsync(page);
- }
- catch
- {
- }
- }
- private async void Complete_Clicked(object sender, EventArgs e)
- {
- if (!DataModel.Item.Completed.IsEmpty())
- {
- DataModel.Item.Completed = DateTime.MinValue;
- DataModel.Save("Re-opened on Mobile Device");
- Load();
- return;
- }
- bool bOpenForms = DataModel.Forms.Any(x => x.Completed.IsEmpty());
- if (bOpenForms)
- {
- await MaterialDialog.Instance.AlertAsync("Please finish all open forms before completing this assignment", "Open Forms Found");
- return;
- }
- bool bConfirm = await MaterialDialog.Instance.ConfirmAsync(message: "Complete Assignment?",
- confirmingText: "Yes",
- dismissiveText: "No") == true;
- if (bConfirm)
- {
- DataModel.Item.Completed = DateTime.Now;
- DataModel.Save("Completed on Mobile Device");
- Navigation.PopAsync();
- }
- }
- private void Description_OnTextChanged(object sender, TextChangedEventArgs e)
- {
- if (Description.IsFocused)
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Description"));
- }
- private void Subject_OnTextChanged(object sender, TextChangedEventArgs e)
- {
- if (Subject.IsFocused)
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Subject"));
- }
-
- private void BookedStart_OnChanged(object sender, TimeButtonChangedArgs args)
- {
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("BookedStart"));
- if (DataModel.Item.BookedStart > DataModel.Item.BookedFinish)
- {
- DataModel.Item.BookedFinish = DataModel.Item.BookedStart;
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("BookedFinish"));
- }
- }
- private void ActualStart_OnChanged(object sender, TimeButtonChangedArgs args)
- {
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("ActualStart"));
- if (DataModel.Item.ActualStart > DataModel.Item.ActualFinish)
- {
- DataModel.Item.ActualFinish = DataModel.Item.ActualStart;
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("ActualFinish"));
- }
- }
- private void BookedFinish_OnChanged(object sender, TimeButtonChangedArgs args)
- {
- if (DataModel.Item.BookedStart > DataModel.Item.BookedFinish)
- {
- DataModel.Item.BookedFinish = DataModel.Item.BookedStart;
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("BookedFinish"));
- }
- }
- private void ActualFinish_OnChanged(object sender, TimeButtonChangedArgs args)
- {
- if (DataModel.Item.ActualStart > DataModel.Item.ActualFinish)
- {
- DataModel.Item.ActualFinish = DataModel.Item.ActualStart;
- OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("ActualFinish"));
- }
- }
- }
- }
|