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.
 

237 lines
6.8 KiB

using GMCabsDriverAssistant.Enums;
using GMCabsDriverAssistant.Services;
using GMCabsDriverAssistantSolution.Models.Rydo;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GMCabsDriverAssistantSolution.ViewModels
{
[QueryProperty(nameof(BookingId), nameof(BookingId))]
class AcceptedFutureBookingDetailViewModel : BaseViewModel
{
#region Fields
private string _bookingId;
private float distance;
private string formattedDistance;
private string startAddress;
private string startSuburb;
private string endAddress;
private string endSuburb;
private string rewardPoints;
private double bookingFee;
private bool isCorporateBooking;
private string fareTypeValue;
private int? fixedAmount;
private bool isFutureBooking;
private int pickUpTime;
private string formattedPickUpTime;
private string formattedPickUpTimeDateOnly;
private string formattedPickUpTimeTimeOnly;
#endregion
#region Properties
public string BookingId
{
get => _bookingId;
set
{
_bookingId = value;
LoadAcceptedFutureBooking(Guid.Parse(value));
}
}
public float Distance
{
get => distance;
set => SetProperty(ref distance, value);
}
public string FormattedDistance
{
get => (distance >= 1000) ? $"{distance / 1000:0.##}k" : $"{(int)distance}m";
set => SetProperty(ref formattedDistance, value);
}
public string StartAddress
{
get => startAddress;
set => SetProperty(ref startAddress, value);
}
public string StartSuburb
{
get => startSuburb;
set => SetProperty(ref startSuburb, value);
}
public string EndAddress
{
get => endAddress;
set => SetProperty(ref endAddress, value);
}
public string EndSuburb
{
get => endSuburb;
set => SetProperty(ref endSuburb, value);
}
public string RewardPoints
{
get => rewardPoints;
set => SetProperty(ref rewardPoints, value);
}
public double BookingFee
{
get => bookingFee;
set => SetProperty(ref bookingFee, value);
}
public bool IsCorporateBooking
{
get => isCorporateBooking;
set => SetProperty(ref isCorporateBooking, value);
}
public string FareTypeValue
{
get => fareTypeValue;
set => SetProperty(ref fareTypeValue, value);
}
public int? FixedAmount
{
get => fixedAmount;
set => SetProperty(ref fixedAmount, value);
}
public bool IsFutureBooking
{
get => isFutureBooking;
set => SetProperty(ref isFutureBooking, value);
}
public int PickUpTime
{
get => pickUpTime;
set => SetProperty(ref pickUpTime, value);
}
public string FormattedPickUpTime
{
get
{
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
dateTime = dateTime.AddSeconds(pickUpTime).ToLocalTime();
return dateTime.ToString("dd/MM/yyyy hh:mm tt");
}
set => SetProperty(ref formattedPickUpTime, value);
}
#endregion
#region Constructor
public AcceptedFutureBookingDetailViewModel()
{
Title = "Accepted Future Booking Detail";
}
#endregion
#region Methods
public async void LoadAcceptedFutureBooking(Guid bookingId)
{
string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, "");
GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
var booking = await gmCabsDriverService.GetBookingDetails(rydoAccessToken, bookingId);
if (booking.BookingId == Guid.Empty)
{
await Shell.Current.GoToAsync("..");
}
Distance = booking.Distance;
FormattedDistance = booking.Distance.ToString();
StartAddress = booking.StartAddress;
StartSuburb = booking.StartSuburb;
EndAddress = booking.EndAddress;
EndSuburb = booking.EndSuburb;
IsCorporateBooking = booking.IsCorporate;
FixedAmount = booking.FixedAmount;
IsFutureBooking = booking.FutureBooking;
PickUpTime = booking.PickupTime;
FormattedPickUpTime = booking.PickupTime.ToString();
BookingFee = 0;
if (FixedAmount != null)
{
decimal amount = (decimal)(FixedAmount / 100.0);
FareTypeValue = "$" + amount;
}
else
{
FareTypeValue = "METER";
}
RewardPoints = booking.RydoStars > 0 ? string.Format($"+{booking.RydoStars}") : booking.RydoStars.ToString();
var preferredDriver = booking.PriorityDriver;
if (preferredDriver)
{
if (booking.FareType == FareType.Fixed)
{
if (booking.FixedAmount > booking.MinFareAmount)
{
BookingFee = booking.ProviderChargeFixedFarePreferred.Value;
}
}
else if (booking.FareType == FareType.Meter)
{
BookingFee = booking.ProviderChargeMeterFarePreferred.Value;
}
}
else
{
if (booking.FareType == FareType.Fixed)
{
if (booking.FixedAmount > booking.MinFareAmount)
{
BookingFee = booking.ProviderChargeFixedFare.Value;
}
}
else if (booking.FareType == FareType.Meter)
{
BookingFee = booking.ProviderChargeMeterFare.Value;
}
}
}
public async Task OnDeclineBookingClickedAsync()
{
string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, "");
GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
var result = await gmCabsDriverService.DeclineFutureBooking(rydoAccessToken, _bookingId);
if (result)
{
await Shell.Current.GoToAsync("../AcceptedFutureBookingsPage");
}
}
#endregion
}
}