RequisitionList.xaml.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Comal.Classes;
  5. using InABox.Configuration;
  6. using InABox.Core;
  7. using InABox.Mobile;
  8. using Xamarin.Forms;
  9. using Xamarin.Forms.Xaml;
  10. namespace PRS.Mobile
  11. {
  12. public class RequisitionListSettings : ILocalConfigurationSettings
  13. {
  14. public String FilterName { get; set; }
  15. }
  16. [XamlCompilation(XamlCompilationOptions.Compile)]
  17. public partial class RequisitionList : MobilePage
  18. {
  19. private RequisitionListSettings _settings;
  20. private CoreFilterDefinitions _filters;
  21. private RequisitionModel _model;
  22. private JobShell? _job;
  23. private RequisitionEditMode _mode;
  24. public RequisitionList(JobShell? job, RequisitionEditMode mode)
  25. {
  26. _job = job;
  27. _mode = mode;
  28. _model = new RequisitionModel(App.Data,
  29. () => _job != null ? new Filter<Requisition>(x=>x.JobLink.ID).IsEqualTo(_job.ID) : null);
  30. var _setup = new Task[]
  31. {
  32. Task.Run(() => { _settings = new LocalConfiguration<RequisitionListSettings>(_mode.ToString()).Load(); }),
  33. Task.Run(() => { _filters = _model.AvailableFilters(); }),
  34. };
  35. InitializeComponent();
  36. Task.WaitAll(_setup);
  37. _filter.Items.Clear();
  38. foreach (var group in _model.AvailableFilters())
  39. {
  40. var item = new MobileMenuItem() { Text = group.Name };
  41. item.Clicked += (sender, args) =>
  42. {
  43. var text = (sender as MobileMenuItem)?.Text ?? string.Empty;
  44. _settings.FilterName = text;
  45. new LocalConfiguration<RequisitionListSettings>(_mode.ToString()).Save(_settings);
  46. RefreshData(true, false);
  47. };
  48. _filter.Items.Add(item);
  49. }
  50. _filter.IsVisible = _filter.Items.Any();
  51. Title = _job?.DisplayName ?? "Site Requis";
  52. }
  53. protected override void OnAppearing()
  54. {
  55. base.OnAppearing();
  56. RefreshData(true,true);
  57. }
  58. private void RefreshData(bool force, bool async)
  59. {
  60. _model.SelectFilter(_settings.FilterName);
  61. var modulename = _mode == RequisitionEditMode.EditRequest
  62. ? "Site Requis"
  63. : "Picking Lists";
  64. Title = String.IsNullOrWhiteSpace(_settings.FilterName)
  65. ? modulename
  66. : $"{modulename} - {_settings.FilterName}";
  67. if (async)
  68. _model.Refresh(force, () => Device.BeginInvokeOnMainThread(RefreshList));
  69. else
  70. {
  71. _model.Refresh(force);
  72. RefreshList();
  73. }
  74. }
  75. private void RefreshList()
  76. {
  77. _model.Search(FilterShell);
  78. _requisitions.ItemsSource ??= _model.Items;
  79. }
  80. private bool FilterShell(RequisitionShell shell)
  81. {
  82. bool bOK = (String.IsNullOrWhiteSpace(_currentfilter)
  83. || shell.Number.ToString().ToUpper().Contains(_currentfilter)
  84. || shell.Title.ToUpper().Contains(_currentfilter)
  85. || String.Join("\n",shell.Notes).ToUpper().Contains(_currentfilter)
  86. );
  87. return bOK;
  88. }
  89. private String _currentfilter = "";
  90. private void _search_OnTextChanged(object sender, MobileSearchBarTextChangedArgs args)
  91. {
  92. _currentfilter = args.Text?.ToUpper() ?? string.Empty;
  93. RefreshList();
  94. }
  95. private void _requisitions_OnRefresh(object sender, MobileListRefreshEventArgs args)
  96. {
  97. RefreshData(true,false);
  98. }
  99. private async void _requisitions_Selected(object sender, EventArgs e)
  100. {
  101. var requi = (sender as MobileCard)?.BindingContext as RequisitionShell;
  102. if (requi == null)
  103. return;
  104. var page = new RequisitionEdit()
  105. {
  106. Item = requi,
  107. Mode = this._mode
  108. };
  109. Navigation.PushAsync(page);
  110. }
  111. private async void AddRequisition_Clicked(object sender, MobileMenuButtonClickedEventArgs args)
  112. {
  113. var requi = _model.AddItem();
  114. requi.RequestedByID = App.Data.Me.ID;
  115. requi.RequestedByName = App.Data.Me.Name;
  116. requi.Due = DateTime.Today;
  117. requi.JobID = _job?.ID ?? Guid.Empty;
  118. requi.JobName = _job?.Name ?? string.Empty;
  119. requi.JobNumber = _job?.JobNumber ?? string.Empty;
  120. var page = new RequisitionEdit()
  121. {
  122. Item = requi,
  123. Mode = this._mode
  124. };
  125. Navigation.PushAsync(page);
  126. }
  127. }
  128. }