SignatureSaver.xaml.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Comal.Classes;
  2. using InABox.Clients;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using Xamarin.Forms;
  10. using Xamarin.Forms.Xaml;
  11. namespace PRS.Mobile
  12. {
  13. [XamlCompilation(XamlCompilationOptions.Compile)]
  14. public partial class SignatureSaver
  15. {
  16. public delegate void SignatureSaved();
  17. public event SignatureSaved OnSignatureSaved;
  18. public SignatureSaver ()
  19. {
  20. InitializeComponent ();
  21. }
  22. void Save_Clicked(object sender, EventArgs e)
  23. {
  24. signaturePad.Save();
  25. if (signaturePad.ImageSource != null)
  26. {
  27. string base64 = ImageSourceToBase64(signaturePad.ImageSource);
  28. byte[] data = Convert.FromBase64String(base64);
  29. try
  30. {
  31. Employee employee = new Employee { ID = App.Data.Me.ID };
  32. employee.Signature = data;
  33. new Client<Employee>().Save(employee, "Signature Saved from mobile");
  34. }
  35. catch
  36. {
  37. }
  38. if (Application.Current.Properties.ContainsKey("SavedSignature"))
  39. {
  40. Application.Current.Properties["SavedSignature"] = data;
  41. }
  42. else
  43. {
  44. Application.Current.Properties.Add("SavedSignature", data);
  45. }
  46. }
  47. OnSignatureSaved?.Invoke();
  48. Navigation.PopAsync();
  49. }
  50. void Clear_Clicked(object sender, EventArgs e)
  51. {
  52. signaturePad.Clear();
  53. }
  54. void DeleteSaved_Clicked(object sender, EventArgs e)
  55. {
  56. try
  57. {
  58. Employee employee = new Employee { ID = App.Data.Me.ID };
  59. employee.Signature = null;
  60. new Client<Employee>().Save(employee, "Signature Saved from mobile");
  61. DisplayAlert("Success", "Signature deleted for Employee", "OK");
  62. }
  63. catch
  64. {
  65. }
  66. }
  67. private string ImageSourceToBase64(ImageSource source)
  68. {
  69. StreamImageSource streamImageSource = (StreamImageSource)source;
  70. System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None;
  71. Task<Stream> task = streamImageSource.Stream(cancellationToken);
  72. Stream stream = task.Result;
  73. byte[] bytes = new byte[stream.Length];
  74. stream.Read(bytes, 0, bytes.Length);
  75. string s = Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks);
  76. return s;
  77. }
  78. }
  79. }