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.
 

236 lines
7.7 KiB

using GMCabsDriverAssistant.Models;
using GMCabsDriverAssistant.Services;
using GMCabsDriverAssistant.Utils;
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
}
}