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 CouponsV2ViewModel : BaseViewModel
|
|
{
|
|
#region Fields
|
|
Page page;
|
|
private string emptyViewMessage;
|
|
public ImageSource image;
|
|
public float amount;
|
|
public DateTime expiryDate;
|
|
private CouponDto _selectedCoupon;
|
|
private bool _hasCoupons = false;
|
|
private bool _hasEmptyMessage = false;
|
|
|
|
private bool _isNextButton = false;
|
|
private bool _isBackButton = false;
|
|
int couponPosition = 0;
|
|
int couponCount = 0;
|
|
#endregion
|
|
|
|
#region Properties
|
|
public string EmptyViewMessage
|
|
{
|
|
get => emptyViewMessage;
|
|
set => SetProperty(ref emptyViewMessage, value);
|
|
}
|
|
public ObservableCollection<CouponDto> Coupons { get; }
|
|
public Command SyncCouponCommand { get; }
|
|
|
|
public ImageSource Image
|
|
{
|
|
get => image;
|
|
set => SetProperty(ref image, value);
|
|
}
|
|
|
|
public float Amount
|
|
{
|
|
get => amount;
|
|
set => SetProperty(ref amount, value);
|
|
}
|
|
|
|
public DateTime ExpiryDate
|
|
{
|
|
get => expiryDate;
|
|
set => SetProperty(ref expiryDate, value);
|
|
}
|
|
|
|
public CouponDto SelectedCoupon
|
|
{
|
|
get => _selectedCoupon;
|
|
set => SetProperty(ref _selectedCoupon, value);
|
|
}
|
|
|
|
public bool HasCoupons
|
|
{
|
|
get => _hasCoupons;
|
|
set => SetProperty(ref _hasCoupons, value);
|
|
}
|
|
|
|
public bool HasEmptyMessage
|
|
{
|
|
get => _hasEmptyMessage;
|
|
set => SetProperty(ref _hasEmptyMessage, value);
|
|
}
|
|
|
|
public bool IsNextButton
|
|
{
|
|
get => _isNextButton;
|
|
set => SetProperty(ref _isNextButton, value);
|
|
}
|
|
|
|
public bool IsBackButton
|
|
{
|
|
get => _isBackButton;
|
|
set => SetProperty(ref _isBackButton, value);
|
|
}
|
|
|
|
public Command NextCouponCommand { get; }
|
|
public Command BackCouponCommand { get; }
|
|
public Command RedemptionDetails { get; }
|
|
|
|
#endregion
|
|
|
|
#region Constructor
|
|
public CouponsV2ViewModel(Page page)
|
|
{
|
|
this.page = page;
|
|
Title = "Available Coupons";
|
|
SyncCouponCommand = new Command(async () => await GetCoupons());
|
|
BackCouponCommand = new Command(() => SelectCouponOption(true));
|
|
NextCouponCommand = new Command(() => SelectCouponOption(false));
|
|
RedemptionDetails = new Command(() => RedemptionDetailsDialog());
|
|
Coupons = new ObservableCollection<CouponDto>();
|
|
HandleReceivedMessages();
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
public void OnAppearing()
|
|
{
|
|
Task.Run(async () => await GetCoupons());
|
|
}
|
|
private async Task GetCoupons()
|
|
{
|
|
HasCoupons = false;
|
|
IsBackButton = false;
|
|
IsNextButton = false;
|
|
HasEmptyMessage = true;
|
|
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)
|
|
{
|
|
couponPosition = 0;
|
|
couponCount = coupons.Count;
|
|
HasCoupons = true;
|
|
HasEmptyMessage = false;
|
|
if (couponCount == 1)
|
|
{
|
|
IsBackButton = false;
|
|
IsNextButton = false;
|
|
}
|
|
else
|
|
{
|
|
IsNextButton = true;
|
|
}
|
|
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);
|
|
}
|
|
Console.WriteLine("Before Position :" + couponPosition);
|
|
Image = Coupons[couponPosition].Image;
|
|
}
|
|
else
|
|
{
|
|
HasCoupons = false;
|
|
HasEmptyMessage = true;
|
|
EmptyViewMessage = "No Coupons available";
|
|
}
|
|
}
|
|
private void SelectCouponOption(bool isback)
|
|
{
|
|
if (isback)
|
|
{
|
|
couponPosition = couponPosition - 1;
|
|
if (couponPosition + 1 == 1 && couponCount > 1)
|
|
{
|
|
IsBackButton = false;
|
|
IsNextButton = true;
|
|
}
|
|
else
|
|
{
|
|
IsNextButton = true;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
couponPosition = couponPosition + 1;
|
|
IsBackButton = true;
|
|
if (couponCount == couponPosition + 1 && couponCount > 1)
|
|
{
|
|
IsNextButton = false;
|
|
}
|
|
}
|
|
|
|
SelectedCoupon = Coupons[couponPosition];
|
|
Image = Coupons[couponPosition].Image;
|
|
}
|
|
|
|
[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);
|
|
}
|
|
Console.WriteLine("After Position :" + couponPosition);
|
|
SelectedCoupon = Coupons[couponPosition];
|
|
Image = Coupons[couponPosition].Image;
|
|
});
|
|
});
|
|
|
|
}
|
|
|
|
private async void RedemptionDetailsDialog()
|
|
{
|
|
int issuedFromLocationID = Coupons[couponPosition].IssuedLocationID;
|
|
string appToken = Preferences.Get(SecureStorageData.Token, "");
|
|
GMCabsDriverService gMCabsDriverService = new GMCabsDriverService();
|
|
LocationVoucherDto locationVoucher = await gMCabsDriverService.GetLocationVoucherByLocationID(appToken, issuedFromLocationID);
|
|
if (locationVoucher != null)
|
|
{
|
|
string voucherOfferText = locationVoucher.VoucherOfferText.Replace("<h1>", "").Replace("</h1>", "");
|
|
await page.DisplayAlert("Redemption Details", voucherOfferText, "Ok");
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
}
|
|
}
|