| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Xamarin.Forms;
- using InABox.Core;
- using InABox.Clients;
- using Comal.Classes;
- using InABox.Mobile;
- using Xamarin.CommunityToolkit.UI.Views;
- using Xamarin.Forms.Xaml;
- namespace PRS.Mobile
- {
- //public delegate void NotificationsClosedEvent(int numberOfNotifications);
- public class NotificationTypeConverter : UtilityConverter<String,ImageSource>
- {
- private readonly Dictionary<String, ImageSource> _images = new Dictionary<string, ImageSource>()
- {
- { "", ImageSource.FromFile("notification") },
- { typeof(Delivery).EntityName(), ImageSource.FromFile("delivery") },
- { typeof(Kanban).EntityName(), ImageSource.FromFile("task") },
- { typeof(KanbanForm).EntityName(), ImageSource.FromFile("task") },
- { typeof(LeaveRequest).EntityName(), ImageSource.FromFile("holiday") },
- { typeof(LeaveRequestForm).EntityName(), ImageSource.FromFile("holiday") },
- { typeof(EmployeeForm).EntityName(), ImageSource.FromFile("person") },
- { typeof(EmployeeQualification).EntityName(), ImageSource.FromFile("badge") },
- { typeof(JobForm).EntityName(), ImageSource.FromFile("construction") },
- };
-
- protected override ImageSource Convert(string value)
- {
- if (!_images.TryGetValue(value ?? "", out ImageSource result))
- result = _images[""];
- return result;
- }
- }
-
- [XamlCompilation(XamlCompilationOptions.Compile)]
- public partial class NotificationList
- {
- //public event NotificationsClosedEvent NotificationsClosed;
-
- //List<NotificationShell> notificationShells = new List<NotificationShell>();
-
- public NotificationList()
- {
- InitializeComponent();
- RefreshData(false, true);
- // App.Data.Notifications.Load(() =>
- // {
- // Dispatcher.BeginInvokeOnMainThread(() =>
- // {
- // notificationListView.ItemsSource = App.Data.Notifications;
- // });
- // });
- }
- private void RefreshData(bool force, bool async)
- {
- if (async)
- App.Data.Notifications.Refresh(force, () => Dispatcher.BeginInvokeOnMainThread(Refresh));
- else
- {
- App.Data.Notifications.Refresh(force);
- Refresh();
- }
- }
- private void Refresh()
- {
- foreach (var shell in App.Data.Notifications.Items.ToArray())
- shell.Selected = false;
- App.Data.Notifications.Search(FilterShell);
- _notifications.ItemsSource = App.Data.Notifications.Items;
- }
- private String _currentFilter = "";
- private bool FilterShell(NotificationShell shell)
- {
- bool bOK = shell.Closed.IsEmpty() == (_view.SelectedItem.Index == 0);
- bOK =
- bOK &&
- (
- String.IsNullOrWhiteSpace(_currentFilter)
- || shell.Title.ToUpper().Contains(_currentFilter)
- || shell.Description.ToUpper().Contains(_currentFilter)
- || shell.Sender.ToUpper().Contains(_currentFilter)
- );
-
- return bOK;
- }
-
-
- private void _search_Changed(object sender, MobileSearchBarTextChangedArgs args)
- {
- _currentFilter = args.Text.ToUpper();
- }
-
-
- private void _notifications_RefreshRequested(object sender, MobileListRefreshEventArgs args)
- {
- RefreshData(true,false);
- }
-
- protected override void OnDisappearing()
- {
- //NotificationsClosed?.Invoke(notificationShells.Count());
- base.OnDisappearing();
- }
-
- #region Buttons / Taps
-
- // private async void NotificationListView_Tapped(object sender, EventArgs e)
- // {
- // NotificationShell shell = notificationListView.SelectedItem as NotificationShell;
- // string extra = CreateOption(shell);
- // string chosenOption = await DisplayActionSheet(shell.Description, "Cancel", null, "View / Reply Message", "Dismiss Message", extra);
- // ProcessOption(chosenOption, shell);
- // }
- //
- // private void ProcessOption(string chosenOption, NotificationShell shell)
- // {
- // switch (chosenOption)
- // {
- // case "Cancel":
- // return;
- // case "View / Reply Message":
- // ReplyNotification(shell);
- // break;
- // case "Dismiss Message":
- // DismissNotification(shell);
- // break;
- // case VIEWTASK:
- // ViewTask(shell);
- // break;
- // case VIEWLEAVE:
- // OpenLeaveList();
- // break;
- // case VIEWLEAVEFORM:
- // ViewRequestForm(shell);
- // break;
- // case VIEWDELIVERY:
- // ViewDelivery(shell);
- // break;
- // default:
- // return;
- // }
- // }
- //
- // private void ViewDelivery(NotificationShell shell)
- // {
- // Task.Run(async () =>
- // {
- // DeliveryEdit page = await DeliveryEdit.Load(shell.EntityID);
- // Navigation.PushAsync(page);
- // });
- //
- // }
- //
- // private void ViewRequestForm(NotificationShell shell)
- // {
- // DigitalFormHostModel<LeaveRequest, LeaveRequestLink, LeaveRequestForm> model = new DigitalFormHostModel<LeaveRequest, LeaveRequestLink, LeaveRequestForm>();
- // LeaveRequest request = new LeaveRequest();
- // request.ID = shell.EntityID;
- // LeaveRequestForm form = new Client<LeaveRequestForm>().Query(new Filter<LeaveRequestForm>(x => x.Parent.ID).IsEqualTo(shell.EntityID)).Rows.FirstOrDefault().ToObject<LeaveRequestForm>();
- // DigitalFormLayout digitalFormLayout = new Client<DigitalFormLayout>().Query(new Filter<DigitalFormLayout>(x => x.Form.ID).IsEqualTo(form.Form.ID).And(x => x.Type).IsEqualTo(DFLayoutType.Mobile)).Rows.FirstOrDefault().ToObject<DigitalFormLayout>();
- // model.LoadItems(request, form, digitalFormLayout);
- // DigitalFormHost host = new DigitalFormHost(model);
- // Navigation.PushAsync(host);
- // }
- //
- // private void ReplyNotification(NotificationShell shell)
- // {
- // NewReplyNotification newReplyNotification = new NewReplyNotification(shell.ID);
- // Navigation.PushAsync(newReplyNotification);
- // }
- //
- // private void ViewTask(NotificationShell shell)
- // {
- // AddEditTask taskPage = new AddEditTask(shell.EntityID);
- // Navigation.PushAsync(taskPage);
- // }
- //
- // private void OpenLeaveList()
- // {
- // LeaveRequestList leaveRequestList = new LeaveRequestList();
- // Navigation.PushAsync(leaveRequestList);
- // }
- //
- // const string VIEWTASK = "View Task";
- // const string VIEWLEAVE = "View Leave";
- // const string VIEWLEAVEFORM = "View Leave Request Form";
- // const string VIEWDELIVERY = "View Delivery";
- //
- // private string CreateOption(NotificationShell shell)
- // {
- // if (string.IsNullOrWhiteSpace(shell.EntityType))
- // return "";
- // if (shell.EntityType == "Comal.Classes.Kanban")
- // return VIEWTASK;
- // if (shell.EntityType == "Comal.Classes.LeaveRequest")
- // return VIEWLEAVE;
- // if (shell.EntityType == "Comal.Classes.LeaveRequestLink")
- // return VIEWLEAVEFORM;
- // if (shell.EntityType == "Comal.Classes.Delivery")
- // return VIEWDELIVERY;
- // else
- // return "";
- // }
- //
- // void New_Clicked(object sender, EventArgs e)
- // {
- // NewReplyNotification newReplyNotification = new NewReplyNotification();
- // Navigation.PushAsync(newReplyNotification);
- // }
- //
- #endregion
-
- private void UpdateStatus(DateTime timestamp)
- {
- ProgressVisible = true;
- var task = Task.Run(() =>
- {
- foreach (var shell in App.Data.Notifications.Items.Where(x => x.Selected).ToArray())
- {
- shell.Closed = timestamp;
- shell.Save("Updated by Mobile Device");
- }
- });
- task.Wait();
- RefreshData(true,false);
- ProgressVisible = false;
- }
-
- private void _markAsRead_Clicked(object sender, EventArgs e)
- {
- UpdateStatus(DateTime.Now);
- }
- private void _markAsUnread_Clicked(object sender, EventArgs e)
- {
- UpdateStatus(DateTime.MinValue);
- }
-
- private void _selectAll_Clicked(object sender, EventArgs e)
- {
- foreach (var shell in App.Data.Notifications.Items.ToArray())
- shell.Selected = true;
- App.Data.Notifications.Search();
- }
- private void _selectNone_Clicked(object sender, EventArgs e)
- {
- foreach (var shell in App.Data.Notifications.Items.ToArray())
- shell.Selected = false;
- App.Data.Notifications.Search();
- }
- private void _newmessage_OnClicked(object sender, EventArgs e)
- {
- NewReplyNotification newReplyNotification = new NewReplyNotification();
- Navigation.PushAsync(newReplyNotification);
- }
- private void _options_OnAppearing(object sender, EventArgs e)
- {
- _markAsRead.IsVisible = (_view.SelectedItem.Index == 0) && App.Data.Notifications.Any(x => x.Selected);
- _markAsUnread.IsVisible = (_view.SelectedItem.Index == 1) && App.Data.Notifications.Any(x => x.Selected);
- _selectAll.IsVisible = App.Data.Notifications.Any(x => !x.Selected);
- _selectNone.IsVisible = App.Data.Notifications.Any(x => x.Selected);
- _separator.IsVisible = (_markAsRead.IsVisible || _markAsUnread.IsVisible) && (_selectAll.IsVisible || _selectNone.IsVisible);
- }
- private void _view_OnSelectionChanged(object sender, EventArgs e)
- {
- Refresh();
- }
- private void _notification_Tapped(object sender, EventArgs e)
- {
- if ((sender as Frame)?.BindingContext is NotificationShell shell)
- {
- // if (String.Equals(shell.EntityType, typeof(Delivery).EntityName()))
- // {
- //
- // }
- // else if (String.Equals(shell.EntityType, typeof(Kanban).EntityName()))
- // {
- //
- // }
- // else if (String.Equals(shell.EntityType, typeof(KanbanForm).EntityName()))
- // {
- //
- // }
- // else if (String.Equals(shell.EntityType, typeof(LeaveRequest).EntityName()))
- // {
- //
- // }
- // else if (String.Equals(shell.EntityType, typeof(LeaveRequestForm).EntityName()))
- // {
- //
- // }
- // else if (String.Equals(shell.EntityType, typeof(EmployeeForm).EntityName()))
- // {
- //
- // }
- // else if (String.Equals(shell.EntityType, typeof(EmployeeQualification).EntityName()))
- // {
- //
- // }
- // else if (String.Equals(shell.EntityType, typeof(JobForm).EntityName()))
- // {
- //
- // }
- // else
- {
- NewReplyNotification newReplyNotification = new NewReplyNotification(shell.ID);
- Navigation.PushAsync(newReplyNotification);
- }
- }
- }
- }
- }
|