You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.4 KiB

1 year ago
1 year ago
1 year ago
1 year ago
  1. using GMCabsDriverAssistant.Models;
  2. using GMCabsDriverAssistant.Services;
  3. using GMCabsDriverAssistant.Utils;
  4. using QRCoder;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Collections.ObjectModel;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace GMCabsDriverAssistantSolution.ViewModels
  12. {
  13. public class CouponsViewModel : BaseViewModel
  14. {
  15. #region Fields
  16. private string emptyViewMessage;
  17. #endregion
  18. #region Properties
  19. public string EmptyViewMessage
  20. {
  21. get => emptyViewMessage;
  22. set => SetProperty(ref emptyViewMessage, value);
  23. }
  24. public ObservableCollection<CouponDto> Coupons { get; }
  25. public Command SyncCouponCommand { get; }
  26. #endregion
  27. #region Constructor
  28. [Obsolete]
  29. public CouponsViewModel()
  30. {
  31. Title = "Coupons";
  32. SyncCouponCommand = new Command(async () => await GetCoupons());
  33. Coupons = new ObservableCollection<CouponDto>();
  34. HandleReceivedMessages();
  35. }
  36. #endregion
  37. #region Methods
  38. public void OnAppearing()
  39. {
  40. Task.Run(async () => await GetCoupons());
  41. }
  42. private async Task GetCoupons()
  43. {
  44. EmptyViewMessage = "Loading Coupons...";
  45. string appToken = Preferences.Get(SecureStorageData.Token, "");
  46. GMCabsDriverService gMCabsDriverService = new GMCabsDriverService();
  47. Coupons.Clear();
  48. List<CouponDto> coupons = await gMCabsDriverService.GetCoupons(appToken);
  49. if (coupons != null && coupons.Count > 0)
  50. {
  51. foreach (CouponDto coupon in coupons)
  52. {
  53. QRCodeGenerator qrGenerator = new QRCodeGenerator();
  54. QRCodeData qrCodeData = qrGenerator.CreateQrCode(coupon.Id.ToString(), QRCodeGenerator.ECCLevel.Q);
  55. BitmapByteQRCode qrCode = new BitmapByteQRCode(qrCodeData);
  56. byte[] qrCodeAsBitmapByteArr = qrCode.GetGraphic(20);
  57. coupon.Image = ImageSource.FromStream(() => new MemoryStream(qrCodeAsBitmapByteArr));
  58. Coupons.Add(coupon);
  59. }
  60. }
  61. else
  62. {
  63. EmptyViewMessage = "No Coupons available";
  64. }
  65. }
  66. [Obsolete]
  67. void HandleReceivedMessages()
  68. {
  69. MessagingCenter.Unsubscribe<App, CouponDto>(this, nameof(App));
  70. MessagingCenter.Subscribe<App, CouponDto>(this, nameof(App), (sender, couponDto) => {
  71. Device.BeginInvokeOnMainThread(() => {
  72. CouponDto redeemedcoupon = new CouponDto
  73. {
  74. Id = couponDto.Id,
  75. Status = couponDto.Status
  76. };
  77. List<CouponDto> copyCoupons = new List<CouponDto>(Coupons);
  78. Coupons.Clear();
  79. foreach (var item in copyCoupons)
  80. {
  81. if (item.Id == redeemedcoupon.Id)
  82. {
  83. item.Image = ImageSource.FromFile("scanned.png");
  84. }
  85. Coupons.Add(item);
  86. }
  87. });
  88. });
  89. }
  90. #endregion
  91. }
  92. }