PurchaseOrderListView.xaml.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using System;
  2. using System.Threading.Tasks;
  3. using InABox.Configuration;
  4. using InABox.Core;
  5. using InABox.Mobile;
  6. using Xamarin.Forms;
  7. using Xamarin.Forms.Xaml;
  8. namespace PRS.Mobile
  9. {
  10. public class PurchaseOrderModuleSettings : ILocalConfigurationSettings
  11. {
  12. public String FilterName { get; set; }
  13. }
  14. // public class PurchaseOrderFilterConfigurationEventArgs : EventArgs
  15. // {
  16. // public CoreFilterDefinitions Filters { get; private set; }
  17. //
  18. // public String SelectedFilter { get; private set; }
  19. //
  20. // public PurchaseOrderFilterConfigurationEventArgs(CoreFilterDefinitions filters, String selectedfilter)
  21. // {
  22. // Filters = filters;
  23. // SelectedFilter = selectedfilter;
  24. // }
  25. // }
  26. // public delegate void PurchaseOrderFilterConfigurationEvent(object sender,
  27. // PurchaseOrderFilterConfigurationEventArgs args);
  28. public class PurchaseOrderSelectedEventArgs : EventArgs
  29. {
  30. public PurchaseOrderShell Order { get; private set; }
  31. public PurchaseOrderSelectedEventArgs(PurchaseOrderShell order)
  32. {
  33. Order = order;
  34. }
  35. }
  36. public delegate void PurchaseOrderSelectedEvent(object sender, PurchaseOrderSelectedEventArgs args);
  37. public class PurchaseOrderStatusConverter : AbstractConverter<PurchaseOrderShell, String>
  38. {
  39. protected override string? Convert(PurchaseOrderShell? value, object? parameter = null)
  40. {
  41. return value == null
  42. ? string.Empty
  43. : !value.CancelledDate.IsEmpty()
  44. ? "Cancelled"
  45. : !value.ClosedDate.IsEmpty()
  46. ? "Closed"
  47. : !value.IssuedDate.IsEmpty()
  48. ? !value.Unreceived.IsEffectivelyEqual(0.0)
  49. ? !value.Received.IsEffectivelyEqual(0.0)
  50. ? "Backorder"
  51. : "Issued"
  52. : "Received"
  53. : "Draft";
  54. }
  55. }
  56. [XamlCompilation(XamlCompilationOptions.Compile)]
  57. public partial class PurchaseOrderListView
  58. {
  59. private PurchaseOrderModuleSettings _settings;
  60. //public event PurchaseOrderFilterConfigurationEvent ConfigureFilters;
  61. public event PurchaseOrderSelectedEvent PurchaseOrderSelected;
  62. private CoreFilterDefinitions _filters;
  63. public CoreFilterDefinitions Filters => _filters;
  64. public String CurrentFilter => _settings?.FilterName ?? string.Empty;
  65. public PurchaseOrderListView()
  66. {
  67. var _setup = new []
  68. {
  69. Task.Run(() => { _settings = new LocalConfiguration<PurchaseOrderModuleSettings>().Load(); }),
  70. Task.Run(() => { _filters = App.Data.PurchaseOrders.AvailableFilters(); }),
  71. };
  72. InitializeComponent();
  73. Task.WaitAll(_setup);
  74. //ConfigureFilters?.Invoke(this,new PurchaseOrderFilterConfigurationEventArgs(_filters, _settings.FilterName));
  75. RefreshData(false,true);
  76. }
  77. public void SelectFilter(string filter)
  78. {
  79. _settings.FilterName = filter;
  80. new LocalConfiguration<PurchaseOrderModuleSettings>().Save(_settings);
  81. RefreshData(true, false);
  82. }
  83. private void RefreshData(bool force, bool async)
  84. {
  85. App.Data.PurchaseOrders.SelectFilter(_settings.FilterName);
  86. if (async)
  87. App.Data.PurchaseOrders.Refresh(force, () => Dispatcher.BeginInvokeOnMainThread(Refresh));
  88. else
  89. {
  90. App.Data.PurchaseOrders.Refresh(force);
  91. Refresh();
  92. }
  93. }
  94. private void Refresh()
  95. {
  96. App.Data.PurchaseOrders.Search(FilterShell);
  97. _list.ItemsSource ??= App.Data.PurchaseOrders.Items;
  98. }
  99. private String _currentFilter;
  100. private bool FilterShell(PurchaseOrderShell shell)
  101. {
  102. try
  103. {
  104. return String.IsNullOrWhiteSpace(_currentFilter)
  105. || (shell.SupplierName?.ToUpper().Contains(_currentFilter) == true)
  106. || (shell.Notes?.ToUpper().Contains(_currentFilter) == true)
  107. || (shell.PONumber?.ToUpper().Contains(_currentFilter) == true);
  108. }
  109. catch (Exception)
  110. {
  111. return true;
  112. }
  113. }
  114. private void _search_OnTextChanged(object sender, MobileSearchBarTextChangedArgs args)
  115. {
  116. _currentFilter = args.Text.ToUpper();
  117. Refresh();
  118. }
  119. private void _list_ItemTapped(object sender, EventArgs e)
  120. {
  121. if ((sender as Frame)?.BindingContext is PurchaseOrderShell shell)
  122. PurchaseOrderSelected?.Invoke(this,new PurchaseOrderSelectedEventArgs(shell));
  123. }
  124. private void _list_OnRefreshRequested(object sender, MobileListRefreshEventArgs args)
  125. {
  126. RefreshData(true,false);
  127. }
  128. }
  129. }