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

using GMCabsDriverAssistant.Models;
using GMCabsDriverAssistant.Services;
using GMCabsDriverAssistant.Utils;
using QRCoder;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GMCabsDriverAssistantSolution.ViewModels
{
public class CouponsViewModel : BaseViewModel
{
#region Fields
private string emptyViewMessage;
#endregion
#region Properties
public string EmptyViewMessage
{
get => emptyViewMessage;
set => SetProperty(ref emptyViewMessage, value);
}
public ObservableCollection<CouponDto> Coupons { get; }
public Command SyncCouponCommand { get; }
#endregion
#region Constructor
[Obsolete]
public CouponsViewModel()
{
Title = "Coupons";
SyncCouponCommand = new Command(async () => await GetCoupons());
Coupons = new ObservableCollection<CouponDto>();
HandleReceivedMessages();
}
#endregion
#region Methods
public void OnAppearing()
{
Task.Run(async () => await GetCoupons());
}
private async Task GetCoupons()
{
EmptyViewMessage = "Loading Coupons...";
string appToken = Preferences.Get(SecureStorageData.Token, "");
GMCabsDriverService gMCabsDriverService = new GMCabsDriverService();
Coupons.Clear();
List<CouponDto> coupons = await gMCabsDriverService.GetCoupons(appToken);
if (coupons != null && coupons.Count > 0)
{
foreach (CouponDto coupon in coupons)
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(coupon.Id.ToString(), QRCodeGenerator.ECCLevel.Q);
BitmapByteQRCode qrCode = new BitmapByteQRCode(qrCodeData);
byte[] qrCodeAsBitmapByteArr = qrCode.GetGraphic(20);
coupon.Image = ImageSource.FromStream(() => new MemoryStream(qrCodeAsBitmapByteArr));
Coupons.Add(coupon);
}
}
else
{
EmptyViewMessage = "No Coupons available";
}
}
[Obsolete]
void HandleReceivedMessages()
{
MessagingCenter.Unsubscribe<App, CouponDto>(this, nameof(App));
MessagingCenter.Subscribe<App, CouponDto>(this, nameof(App), (sender, couponDto) => {
Device.BeginInvokeOnMainThread(() => {
CouponDto redeemedcoupon = new CouponDto
{
Id = couponDto.Id,
Status = couponDto.Status
};
List<CouponDto> copyCoupons = new List<CouponDto>(Coupons);
Coupons.Clear();
foreach (var item in copyCoupons)
{
if (item.Id == redeemedcoupon.Id)
{
item.Image = ImageSource.FromFile("scanned.png");
}
Coupons.Add(item);
}
});
});
}
#endregion
}
}