EmployeeQualificationEditPage.xaml.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. using System;
  2. using System.Threading.Tasks;
  3. using InABox.Mobile;
  4. using Xamarin.Forms.Xaml;
  5. namespace PRS.Mobile
  6. {
  7. [XamlCompilation(XamlCompilationOptions.Compile)]
  8. public partial class EmployeeQualificationEditPage
  9. {
  10. #region Fields, constructor + navigation
  11. public EmployeeQualificationShell Item
  12. {
  13. get => _viewmodel.Item;
  14. set
  15. {
  16. _viewmodel.Item = value;
  17. Title = _viewmodel.Item.Description;
  18. CheckChanged();
  19. }
  20. }
  21. // EmployeeQualification EmpQualification = new EmployeeQualification();
  22. // Dictionary<string, Qualification> descriptionQualifications = new Dictionary<string, Qualification>();
  23. // PhotoType photoType = new PhotoType();
  24. // Document frontPhotoDoc = new Document();
  25. // Document backPhotoDoc = new Document();
  26. // bool bFirstLoad = true;
  27. // bool newEmpQualificationSaved = false;
  28. // List<Qualification> qualifications = new List<Qualification>();
  29. // Dictionary<string, Guid> fileNameIDs = new Dictionary<string, Guid>();
  30. public EmployeeQualificationEditPage()
  31. {
  32. InitializeComponent();
  33. }
  34. private void _viewmodel_OnLoaded(object sender, MobileViewModelLoadedEventArgs args)
  35. {
  36. Details.Refresh();
  37. Images.Refresh();
  38. }
  39. private void CheckChanged()
  40. {
  41. Dispatcher.BeginInvokeOnMainThread(() =>
  42. {
  43. bool changed = Item.ID == Guid.Empty || Item.IsChanged();
  44. _save.IsVisible = changed;
  45. _camera.IsVisible = !changed && _tabStrip.SelectedItem.Index == 1;
  46. });
  47. }
  48. // protected override void OnAppearing()
  49. // {
  50. // addViewDocsBtn.IsEnabled = false;
  51. // Task.Run(() =>
  52. // {
  53. // Thread.Sleep(1000);
  54. // if (EmpQualification.ID != Guid.Empty)
  55. // {
  56. // CoreTable table = new Client<EmployeeQualificationDocument>().Query(new Filter<EmployeeQualificationDocument>(x => x.EntityLink.ID).IsEqualTo(EmpQualification.ID),
  57. // new Columns<EmployeeQualificationDocument>(x => x.DocumentLink.ID));
  58. // if (table.Rows.Any())
  59. // {
  60. // fileNameIDs.Clear();
  61. // foreach (CoreRow row in table.Rows)
  62. // {
  63. // CoreTable docsTable = new Client<Document>().Query(new Filter<Document>(x => x.ID).IsEqualTo(Guid.Parse(row.Values[0].ToString())),
  64. // new Columns<Document>(x => x.ID, x => x.FileName));
  65. // Guid id = Guid.Parse(docsTable.Rows.First().Values[0].ToString());
  66. // string str = docsTable.Rows.First().Values[1].ToString();
  67. // if (!fileNameIDs.ContainsKey(str))
  68. // fileNameIDs.Add(str, id);
  69. // }
  70. // }
  71. // }
  72. // Device.BeginInvokeOnMainThread(() =>
  73. // {
  74. // addViewDocsBtn.IsEnabled = true;
  75. // documentsLbl.Text = "Documents (" + fileNameIDs.Count + ")";
  76. // });
  77. // });
  78. // base.OnAppearing();
  79. // }
  80. // async void ExitBtn_Clicked(object sender, EventArgs e)
  81. // {
  82. // if (newEmpQualificationSaved)
  83. // {
  84. // CoreTable table = new Client<EmployeeQualificationDocument>().Query
  85. // (
  86. // new Filter<EmployeeQualificationDocument>(x => x.EntityLink.ID).IsEqualTo(EmpQualification.ID),
  87. // new Columns<EmployeeQualificationDocument>(x => x.ID, x => x.DocumentLink.ID)
  88. // );
  89. // if (table.Rows.Any())
  90. // {
  91. // string chosenOption = await DisplayActionSheet("Alert", "You are exiting without saving. Continue?", null, "Yes", "No");
  92. // switch (chosenOption)
  93. // {
  94. // case "Cancel":
  95. // return;
  96. // default:
  97. // return;
  98. // case "Yes":
  99. // using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Working"))
  100. // {
  101. // List<EmployeeQualificationDocument> empdocs = new List<EmployeeQualificationDocument>();
  102. // List<Document> docs = new List<Document>();
  103. // foreach (CoreRow row in table.Rows)
  104. // {
  105. // EmployeeQualificationDocument empdoc = new EmployeeQualificationDocument();
  106. // empdoc.ID = Guid.Parse(row.Values[0].ToString());
  107. // empdocs.Add(empdoc);
  108. // Document doc = new Document();
  109. // doc.ID = Guid.Parse(row.Values[1].ToString());
  110. // docs.Add(doc);
  111. // }
  112. // new Client<EmployeeQualificationDocument>().Delete(empdocs, "Deleted from mobile device");
  113. // new Client<Document>().Delete(docs, "Deleted from mobile device");
  114. // }
  115. // break;
  116. // case "No":
  117. // return;
  118. // }
  119. // }
  120. // new Client<EmployeeQualification>().Delete(EmpQualification, "Deleted from mobile device");
  121. // }
  122. // Navigation.PopAsync();
  123. // }
  124. // async void Save_Clicked(object sender, EventArgs e)
  125. // {
  126. // if (qualificationPicker.SelectedIndex == -1)
  127. // {
  128. // DisplayAlert("Alert", "Choose a qualification first", "OK");
  129. // return;
  130. // }
  131. //
  132. // using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Saving"))
  133. // {
  134. // EmpQualification.Employee.ID = App.Data.Me.ID;
  135. // if (!string.IsNullOrWhiteSpace(frontPhotoDoc.FileName))
  136. // {
  137. // new Client<Document>().Save(frontPhotoDoc, "Saved from mobile device");
  138. // EmpQualification.FrontPhoto.ID = frontPhotoDoc.ID;
  139. // EmpQualification.Verified = DateTime.MinValue;
  140. // }
  141. // if (!string.IsNullOrWhiteSpace(backPhotoDoc.FileName))
  142. // {
  143. // new Client<Document>().Save(backPhotoDoc, "Saved from mobile device");
  144. // EmpQualification.BackPhoto.ID = backPhotoDoc.ID;
  145. // EmpQualification.Verified = DateTime.MinValue;
  146. // }
  147. // if (EmpQualification.Qualified == DateTime.MinValue)
  148. // EmpQualification.Qualified = qualifiedDatePicker.Date;
  149. // if (EmpQualification.Expiry == DateTime.MinValue)
  150. // EmpQualification.Expiry = expiryDatePicker.Date;
  151. // new Client<EmployeeQualification>().Save(EmpQualification, "Saved from mobile device");
  152. // }
  153. // await DisplayAlert("Succes", "Qualification saved for " + EmpQualification.Qualification.Description
  154. // + ". This qualification is now awaiting verification.", "OK");
  155. // Navigation.PopAsync();
  156. // }
  157. #endregion
  158. #region Loading
  159. // async void LoadScreen(Guid id)
  160. // {
  161. // try
  162. // {
  163. // if (id == Guid.Empty)
  164. // {
  165. // qualificationPicker.IsEnabled = true;
  166. // }
  167. // else
  168. // {
  169. // qualificationPicker.IsEnabled = false;
  170. // descriptionFrame.BorderColor = Color.Gray;
  171. // CoreTable table = new Client<EmployeeQualification>().Query(new Filter<EmployeeQualification>(x => x.ID).IsEqualTo(id),
  172. // new Columns<EmployeeQualification>(x => x.ID, x => x.Qualification.ID, x => x.Qualification.Description, x => x.Expiry,
  173. // x => x.Qualified, x => x.Verified, x => x.FrontPhoto.ID, x => x.BackPhoto.ID, x => x.Employee.ID, x => x.Qualification.Renewal,
  174. // x => x.Qualification.Period));
  175. // if (table.Rows.Any())
  176. // {
  177. // EmpQualification = table.Rows.FirstOrDefault().ToObject<EmployeeQualification>();
  178. // }
  179. // else
  180. // {
  181. // Device.BeginInvokeOnMainThread(() => { DisplayAlert("Error loading qualification", "", "OK"); });
  182. // return;
  183. // }
  184. // if (EmpQualification.Qualified != DateTime.MinValue)
  185. // {
  186. // Device.BeginInvokeOnMainThread(() => { qualifiedDatePicker.Date = EmpQualification.Qualified; });
  187. // }
  188. // if (EmpQualification.Expiry != DateTime.MinValue)
  189. // {
  190. // Device.BeginInvokeOnMainThread(() => { expiryDatePicker.Date = EmpQualification.Expiry; });
  191. // }
  192. // }
  193. // RefreshPhotoButtons();
  194. // LoadQualifications();
  195. // Task.Run(() =>
  196. // {
  197. // Thread.Sleep(1000);
  198. // bFirstLoad = false;
  199. // });
  200. // }
  201. // catch { }
  202. // }
  203. //
  204. //
  205. //
  206. // void LoadQualifications()
  207. // {
  208. // try
  209. // {
  210. // Task.Run(() =>
  211. // {
  212. // CoreTable table = new Client<Qualification>().Query(null,
  213. // new Columns<Qualification>(x => x.ID, x => x.Description, x => x.Renewal, x => x.Period)
  214. // );
  215. // foreach (CoreRow row in table.Rows)
  216. // {
  217. // Qualification qualification = row.ToObject<Qualification>();
  218. // if (!descriptionQualifications.ContainsKey(qualification.Description))
  219. // {
  220. // descriptionQualifications.Add(qualification.Description, qualification);
  221. // }
  222. // }
  223. // Device.BeginInvokeOnMainThread(() =>
  224. // {
  225. // qualificationPicker.ItemsSource = descriptionQualifications.Keys.ToList();
  226. // if (EmpQualification.Qualification.ID != Guid.Empty)
  227. // {
  228. // qualificationPicker.SelectedIndex = descriptionQualifications.Keys.ToList().FindIndex(x => x.Equals(EmpQualification.Qualification.Description));
  229. // ShowRenewal();
  230. // }
  231. // });
  232. // });
  233. // }
  234. // catch { }
  235. // }
  236. //
  237. // void ShowRenewal()
  238. // {
  239. // if (EmpQualification.Qualification.Renewal.Equals(QualificationRenewal.Permanent) ||
  240. // EmpQualification.Qualification.Renewal.Equals(QualificationRenewal.Manual))
  241. // {
  242. // renewalLbl.Text = EmpQualification.Qualification.Renewal.ToString();
  243. // }
  244. // else
  245. // {
  246. // renewalLbl.Text = EmpQualification.Qualification.Period.ToString() + " " + EmpQualification.Qualification.Renewal;
  247. // }
  248. // if (EmpQualification.Qualification.Renewal.Equals(QualificationRenewal.Permanent))
  249. // {
  250. // EmpQualification.Expiry = DateTime.MaxValue;
  251. // expiryDatePicker.Date = DateTime.MaxValue;
  252. // expiryDatePicker.IsEnabled = false;
  253. // Task.Run(() =>
  254. // {
  255. // Device.BeginInvokeOnMainThread(() =>
  256. // {
  257. // expiryDatePicker.BackgroundColor = Color.LightGreen;
  258. // expiryDatePicker.Date = EmpQualification.Expiry;
  259. // });
  260. // Thread.Sleep(1200);
  261. // Device.BeginInvokeOnMainThread(() => { expiryDatePicker.BackgroundColor = Color.Default; });
  262. // });
  263. // }
  264. // else
  265. // {
  266. // expiryDatePicker.IsEnabled = true;
  267. // if (EmpQualification.Expiry != DateTime.MinValue)
  268. // {
  269. // expiryDatePicker.Date = EmpQualification.Expiry;
  270. // }
  271. // else
  272. // {
  273. // EmpQualification.Expiry = DateTime.Today;
  274. // }
  275. // }
  276. // }
  277. #endregion
  278. #region Response to fields changing / Taps
  279. // async void AddViewDocsBtn_Clicked(object sender, EventArgs e)
  280. // {
  281. // if (qualificationPicker.SelectedIndex == -1)
  282. // {
  283. // DisplayAlert("Error", "Select a qualification first", "OK");
  284. // return;
  285. // }
  286. // using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Loading"))
  287. // {
  288. // if (EmpQualification.ID == Guid.Empty)
  289. // {
  290. // new Client<EmployeeQualification>().Save(EmpQualification, "Saved from mobile device");
  291. // newEmpQualificationSaved = true;
  292. // }
  293. //
  294. // PDFList pdfList = new PDFList(); //fileNameIDs, EmpQualification, true, true, true, false);
  295. // Navigation.PushAsync(pdfList);
  296. // }
  297. // }
  298. //
  299. //
  300. // void QualificationPicker_IndexChanged(object sender, EventArgs e)
  301. // {
  302. // if (!bFirstLoad)
  303. // {
  304. // EmpQualification.Qualification.ID = descriptionQualifications[qualificationPicker.SelectedItem.ToString()].ID;
  305. // EmpQualification.Qualification.Description = qualificationPicker.SelectedItem.ToString();
  306. // EmpQualification.Qualification.Renewal = descriptionQualifications[qualificationPicker.SelectedItem.ToString()].Renewal;
  307. // EmpQualification.Qualification.Period = descriptionQualifications[qualificationPicker.SelectedItem.ToString()].Period;
  308. // ShowRenewal();
  309. // }
  310. // }
  311. //
  312. // void QualifiedDatePicker_Selected(object sender, DateChangedEventArgs e)
  313. // {
  314. // if (!bFirstLoad)
  315. // {
  316. // EmpQualification.Qualified = qualifiedDatePicker.Date;
  317. // EmpQualification.Verified = DateTime.MinValue;
  318. // Task.Run(() =>
  319. // {
  320. // Thread.Sleep(300);
  321. // Device.BeginInvokeOnMainThread(() =>
  322. // {
  323. // expiryDatePicker.BackgroundColor = Color.LightGreen;
  324. // expiryDatePicker.Date = EmpQualification.Expiry;
  325. // });
  326. // Thread.Sleep(1200);
  327. // Device.BeginInvokeOnMainThread(() => { expiryDatePicker.BackgroundColor = Color.Default; });
  328. // });
  329. // }
  330. // }
  331. //
  332. // void ExpiryDatePicker_Selected(object sender, DateChangedEventArgs e)
  333. // {
  334. // if (!bFirstLoad)
  335. // {
  336. // EmpQualification.Expiry = expiryDatePicker.Date;
  337. // EmpQualification.Verified = DateTime.MinValue;
  338. // }
  339. // }
  340. #endregion
  341. private void Save_Clicked(object sender, MobileMenuButtonClickedEventArgs args)
  342. {
  343. Item.Save("Saved on Mobile Device");
  344. CheckChanged();
  345. }
  346. private void Details_OnOnDetailsChanged(object sender, MobileViewChangedEventArgs eventargs)
  347. {
  348. CheckChanged();
  349. }
  350. private async void TakePhoto_Clicked(object sender, EventArgs e)
  351. {
  352. await Images.AddImage<MobileDocumentCameraSource, MobileDocumentCameraOptions>(
  353. PhotoUtils.CreateCameraOptions());
  354. CheckChanged();
  355. }
  356. private async void BrowseLibrary_Clicked(object sender, EventArgs e)
  357. {
  358. await Images.AddImage<MobileDocumentPhotoLibrarySource, MobileDocumentPhotoLibraryOptions>(PhotoUtils.CreatePhotoLibraryOptions());
  359. CheckChanged();
  360. }
  361. protected override async Task<bool> OnBackButtonClicked()
  362. {
  363. return await ConfirmChanges(Item);
  364. }
  365. private void _tabStrip_OnSelectionChanged(object sender, EventArgs e)
  366. {
  367. _tabView.SelectedItem = _tabView.Items[_tabStrip.SelectedItem.Index];
  368. CheckChanged();
  369. }
  370. }
  371. }