ManufacturingListView.xaml.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using InABox.Configuration;
  7. using InABox.Core;
  8. using InABox.Mobile;
  9. using Xamarin.Forms;
  10. using Xamarin.Forms.Xaml;
  11. namespace PRS.Mobile
  12. {
  13. public class MobileManufacturingSettings : ILocalConfigurationSettings
  14. {
  15. public Guid FactoryID { get; set; }
  16. public Guid JobID { get; set; }
  17. }
  18. public class OrderStatusConverter : UtilityConverter<ManufacturingPacketShell, Color>
  19. {
  20. public Color NoOrder { get; set; }
  21. public Color OpenOrder { get; set; }
  22. public Color ReceivedOrder { get; set; }
  23. protected override Color Convert(ManufacturingPacketShell value)
  24. {
  25. return value == null
  26. ? NoOrder
  27. : value.OrderID != Guid.Empty
  28. ? value.OrderRecDate.IsEmpty()
  29. ? OpenOrder
  30. : ReceivedOrder
  31. : NoOrder;
  32. }
  33. }
  34. public class SerialConverter : UtilityConverter<ManufacturingPacketShell, String>
  35. {
  36. protected override String Convert(ManufacturingPacketShell value)
  37. {
  38. return value == null
  39. ? ""
  40. : String.IsNullOrWhiteSpace(value.WaterMark)
  41. ? value.Serial
  42. : $"{value.Serial} [{value.WaterMark}]";
  43. }
  44. }
  45. public class ProgressConverter : UtilityConverter<ManufacturingPacketShell, String>
  46. {
  47. protected override String Convert(ManufacturingPacketShell value)
  48. {
  49. return value == null
  50. ? ""
  51. : (value.OrderID != Guid.Empty) && (value.OrderRecDate.IsEmpty())
  52. ? $"ETA: {value.OrderETA:dd MMM yy}"
  53. : value.Issued.IsEmpty()
  54. ? "To Be Issued"
  55. : $"{value.StageLinkSection} {value.StageLinkPercentage}%";
  56. }
  57. }
  58. public class JobNameConverter : UtilityConverter<ManufacturingPacketShell, String>
  59. {
  60. protected override String Convert(ManufacturingPacketShell value)
  61. {
  62. return value == null
  63. ? ""
  64. : $"{value.JobNumber}: {value.JobName}";
  65. }
  66. }
  67. [XamlCompilation(XamlCompilationOptions.Compile)]
  68. public partial class ManufacturingListView
  69. {
  70. public Guid JobID { get; set; }
  71. public Guid FactoryID { get; set; }
  72. public ManufacturingListView()
  73. {
  74. InitializeComponent();
  75. }
  76. public void RefreshData(bool force, bool async)
  77. {
  78. if (async)
  79. App.Data.ManufacturingPackets.Refresh(force, () => Dispatcher.BeginInvokeOnMainThread(Refresh));
  80. else
  81. {
  82. App.Data.ManufacturingPackets.Refresh(force);
  83. Refresh();
  84. }
  85. }
  86. private void Refresh()
  87. {
  88. App.Data.ManufacturingPackets.Search(FilterShell);
  89. _items.ItemsSource ??= App.Data.ManufacturingPackets.Items;
  90. }
  91. private String _currentFilter;
  92. private void _search_OnTextChanged(object sender, MobileSearchBarTextChangedArgs args)
  93. {
  94. _currentFilter = args.Text.ToUpper();
  95. Refresh();
  96. }
  97. private bool FilterShell(ManufacturingPacketShell shell)
  98. {
  99. bool bOK = (FactoryID == Guid.Empty) || (shell.FactoryID == FactoryID);
  100. bOK = bOK && ((JobID == Guid.Empty) || (shell.JobID == JobID));
  101. bOK = bOK && (
  102. String.IsNullOrWhiteSpace(_currentFilter)
  103. || shell.Title?.ToUpper().Contains(_currentFilter) == true
  104. || shell.JobNumber?.ToUpper().Contains(_currentFilter) == true
  105. || shell.JobName?.ToUpper().Contains(_currentFilter) == true
  106. || shell.Location?.ToUpper().Contains(_currentFilter) == true
  107. || shell.SetoutNumber?.ToUpper().Contains(_currentFilter) == true
  108. || shell.Serial?.ToUpper().Contains(_currentFilter) == true
  109. || shell.WaterMark?.ToUpper().Contains(_currentFilter) == true
  110. );
  111. return bOK;
  112. }
  113. private void ListView_Tapped(object sender, EventArgs e)
  114. {
  115. if ((sender as Frame)?.BindingContext is ManufacturingPacketShell shell)
  116. {
  117. var editor = new ManufacturingPacketEdit()
  118. {
  119. Item = shell
  120. };
  121. Navigation.PushAsync(editor);
  122. }
  123. }
  124. private void _items_OnRefreshRequested(object sender, MobileListRefreshEventArgs args)
  125. {
  126. RefreshData(true, false);
  127. }
  128. }
  129. }