RecTransferPopup.xaml.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. using comal.timesheets.CustomControls;
  2. using Comal.Classes;
  3. using InABox.Clients;
  4. using InABox.Core;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Linq.Expressions;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Xamarin.Forms;
  13. using Xamarin.Forms.Xaml;
  14. namespace comal.timesheets
  15. {
  16. [XamlCompilation(XamlCompilationOptions.Compile)]
  17. public partial class RecTransferPopup : ContentPage
  18. {
  19. public delegate void RecTransferItemAcceptedEvent();
  20. public delegate void RecTransferPopupBackButtonPressed();
  21. public event RecTransferItemAcceptedEvent OnRecTransferItemAccepted;
  22. public event RecTransferPopupBackButtonPressed OnRecTransferPopupBackButtonPressed;
  23. public StockHoldingShell Shell { get; set; }
  24. ProductStyle DefaultStyle = new ProductStyle();
  25. Job DefaultJob = new Job();
  26. Job ReceivingJob = new Job();
  27. bool stocktake = false;
  28. public double OriginalQty = 0.0;
  29. public RecTransferPopup(StockHoldingShell _shell, ProductStyle _defaultStyle, Job _defaultJob, Job _receivingJob, bool _stocktake = false)
  30. {
  31. InitializeComponent();
  32. NavigationPage.SetHasBackButton(this, false);
  33. stocktake = _stocktake;
  34. if (_stocktake)
  35. jobBtn.IsEnabled = false;
  36. Shell = new StockHoldingShell();
  37. Shell = _shell;
  38. OriginalQty = _shell.Units;
  39. DefaultStyle = _defaultStyle;
  40. DefaultJob = _defaultJob;
  41. ReceivingJob = _receivingJob;
  42. if (ReceivingJob.ID != Guid.Empty)
  43. {
  44. jobBtn.IsEnabled = false;
  45. styleBtn.IsEnabled = false;
  46. }
  47. LoadImage();
  48. LoadScreen();
  49. }
  50. private void BackBtn_Clicked(object sender, EventArgs e)
  51. {
  52. OnRecTransferPopupBackButtonPressed?.Invoke();
  53. Navigation.PopAsync();
  54. }
  55. private void LoadScreen()
  56. {
  57. Device.BeginInvokeOnMainThread(() =>
  58. {
  59. if (ReceivingJob.ID != Guid.Empty)
  60. {
  61. Shell.JobID = ReceivingJob.ID;
  62. Shell.JobName = ReceivingJob.Name;
  63. Shell.JobNumber = ReceivingJob.JobNumber;
  64. Shell.DisplayJob = "Job: " + ReceivingJob.JobNumber;
  65. jobBtn.Text = Shell.JobNumber;
  66. }
  67. else if (Shell.JobID != Guid.Empty)
  68. {
  69. jobBtn.Text = Shell.JobNumber;
  70. }
  71. else if (DefaultJob.ID != Guid.Empty)
  72. {
  73. Shell.JobID = DefaultJob.ID;
  74. Shell.JobName = DefaultJob.Name;
  75. Shell.JobNumber = DefaultJob.JobNumber;
  76. Shell.DisplayJob = "Job: " + DefaultJob.JobNumber;
  77. jobBtn.Text = Shell.JobNumber;
  78. }
  79. if (!string.IsNullOrWhiteSpace(Shell.Finish))
  80. {
  81. styleBtn.Text = Shell.Finish;
  82. }
  83. qty.Text = Shell.Units.ToString();
  84. });
  85. }
  86. private void SelectJob_Clicked(object sender, EventArgs e)
  87. {
  88. if (ReceivingJob.ID != Guid.Empty)
  89. return;
  90. JobSelectionPage jobSelectionPage = new JobSelectionPage(
  91. (job) =>
  92. {
  93. Shell.JobID = job.ID;
  94. Shell.JobName = job.Name;
  95. Shell.JobNumber = job.JobNumber;
  96. Shell.DisplayJob = "Job: " + Shell.JobNumber;
  97. jobBtn.Text = Shell.JobNumber;
  98. }
  99. );
  100. Navigation.PushAsync(jobSelectionPage);
  101. }
  102. private void SelectStyle_Clicked(object sender, EventArgs e)
  103. {
  104. GenericSelectionPage page = new GenericSelectionPage(
  105. "Select Product Style",
  106. new SelectionViewModel<ProductStyle>(
  107. null,
  108. new Expression<Func<ProductStyle, object>>[] { x => x.Code, x => x.Description },
  109. null,
  110. new SortOrder<ProductStyle>(x => x.Code)
  111. )
  112. );
  113. page.OnItemSelected += (row) =>
  114. {
  115. var style = row.ToObject<ProductStyle>();
  116. Shell.StyleID = style.ID;
  117. Shell.Finish = style.Description;
  118. Shell.StyleName = "Finish: " + style.Description;
  119. Shell.StyleCode = style.Code;
  120. styleBtn.Text = Shell.Finish;
  121. };
  122. Navigation.PushAsync(page);
  123. }
  124. private void Qty_Changed(object sender, EventArgs e)
  125. {
  126. if (!string.IsNullOrWhiteSpace(qty.Text))
  127. {
  128. if (double.TryParse(qty.Text, out double value))
  129. {
  130. if (value > 0 || stocktake)
  131. {
  132. Shell.Units = value;
  133. Shell.DisplayUnits = "Units: " + Shell.Units;
  134. accept_Btn.IsEnabled = true;
  135. }
  136. else
  137. {
  138. qty.Text = OriginalQty.ToString();
  139. Shell.Units = OriginalQty;
  140. Shell.DisplayUnits = "Units: " + Shell.Units;
  141. accept_Btn.IsEnabled = true;
  142. }
  143. }
  144. else
  145. {
  146. accept_Btn.IsEnabled = false;
  147. }
  148. }
  149. else
  150. {
  151. accept_Btn.IsEnabled = false;
  152. }
  153. }
  154. private void AcceptBtn_Clicked(object sender, EventArgs e)
  155. {
  156. if (Shell.Units != 0 || stocktake)
  157. {
  158. OnRecTransferItemAccepted?.Invoke();
  159. Navigation.PopAsync();
  160. }
  161. }
  162. private async void LoadImage()
  163. {
  164. await Task.Run(() =>
  165. {
  166. CoreTable table = new Client<Product>().Query
  167. (
  168. new Filter<Product>(x => x.Code).IsEqualTo(Shell.Code),
  169. new Columns<Product>(x => x.Image.ID)
  170. );
  171. if (table.Rows.Any())
  172. {
  173. CoreTable table2 = new Client<Document>().Query(new Filter<Document>(x => x.ID).IsEqualTo(table.Rows.FirstOrDefault().Get<Product, Guid>(x => x.Image.ID)));
  174. if (table2.Rows.Any())
  175. {
  176. CoreRow docrow = table2.Rows.FirstOrDefault();
  177. if (docrow != null)
  178. {
  179. byte[] data = docrow.Get<Document, byte[]>(x => x.Data);
  180. DataToImage(data);
  181. }
  182. }
  183. }
  184. });
  185. }
  186. private void DataToImage(byte[] data)
  187. {
  188. ImageSource src = ImageSource.FromStream(() => new MemoryStream(data));
  189. if (src != null)
  190. {
  191. Device.BeginInvokeOnMainThread(() =>
  192. {
  193. productImage.Source = src;
  194. ForceLayout();
  195. });
  196. }
  197. }
  198. }
  199. }