|
|
@ -0,0 +1,326 @@ |
|
|
|
using GMCabsDriverAssistant.Enums; |
|
|
|
using GMCabsDriverAssistant.Models; |
|
|
|
using GMCabsDriverAssistant.Services; |
|
|
|
using GMCabsDriverAssistantSolution.Models.Rydo; |
|
|
|
using GMCabsDriverAssistantSolution.Views; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
using System.Text; |
|
|
|
using System.Text.Json; |
|
|
|
using System.Threading.Tasks; |
|
|
|
|
|
|
|
namespace GMCabsDriverAssistantSolution.ViewModels |
|
|
|
{ |
|
|
|
[QueryProperty(nameof(BookingJson), nameof(BookingJson))] |
|
|
|
public class BookingDetailViewModel : BaseViewModel |
|
|
|
{ |
|
|
|
#region Constants
|
|
|
|
private const int RYDO_METER_FARE_PROVIDER_CHARGE = 10; |
|
|
|
private const int RYDO_FIXED_PRICE_PROVIDER_CHARGE = 10; |
|
|
|
private const int RYDO_METER_FARE_PROVIDER_CHARGE_GM_DRIVER = 10; |
|
|
|
private const int RYDO_FIXED_PRICE_PROVIDER_CHARGE_GM_DRIVER = 5; |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#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; |
|
|
|
private string bookingJson; |
|
|
|
|
|
|
|
private string startStreetName; |
|
|
|
private string endStreetName; |
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
public Guid Id { get; set; } |
|
|
|
|
|
|
|
public string BookingId |
|
|
|
{ |
|
|
|
get => _bookingId; |
|
|
|
set |
|
|
|
{ |
|
|
|
_bookingId = value; |
|
|
|
// LoadBooking(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); |
|
|
|
} |
|
|
|
|
|
|
|
public Command OnAcceptBookingClicked { get; } |
|
|
|
|
|
|
|
public Command OnDeclineBookingClicked { get; } |
|
|
|
|
|
|
|
public string BookingJson |
|
|
|
{ |
|
|
|
get => bookingJson; |
|
|
|
set |
|
|
|
{ |
|
|
|
bookingJson = value; |
|
|
|
LoadBooking(value); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public string StartStreetName |
|
|
|
{ |
|
|
|
get => startStreetName; |
|
|
|
set => SetProperty(ref startStreetName, value); |
|
|
|
} |
|
|
|
|
|
|
|
public string EndStreetName |
|
|
|
{ |
|
|
|
get => endStreetName; |
|
|
|
set => SetProperty(ref endStreetName, value); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Constructor
|
|
|
|
public BookingDetailViewModel() |
|
|
|
{ |
|
|
|
Title = "Booking Details"; |
|
|
|
OnAcceptBookingClicked = new Command(async () => { await AcceptBooking(); }); |
|
|
|
OnDeclineBookingClicked = new Command(async () => { await DeclineBooking(Id.ToString()); }); |
|
|
|
} |
|
|
|
public BookingDetailViewModel(Guid bookingId) |
|
|
|
{ |
|
|
|
BookingId = bookingId.ToString(); |
|
|
|
Title = "Booking Details"; |
|
|
|
OnAcceptBookingClicked = new Command(async () => { await AcceptBooking(); }); |
|
|
|
OnDeclineBookingClicked = new Command(async () => { await DeclineBooking(Id.ToString()); }); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Method
|
|
|
|
private async void LoadBooking(string bookingJson) |
|
|
|
{ |
|
|
|
/* string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN,""); |
|
|
|
GMCabsDriverService gmCabsDriverService = new GMCabsDriverService(); |
|
|
|
var booking = await gmCabsDriverService.GetBookingDetails(rydoAccessToken, bookingId);*/ |
|
|
|
BookingDto booking = JsonSerializer.Deserialize<BookingDto>(bookingJson); |
|
|
|
if (booking.BookingId == Guid.Empty) |
|
|
|
{ |
|
|
|
await Shell.Current.GoToAsync(".."); |
|
|
|
} |
|
|
|
|
|
|
|
Id = booking.BookingId; |
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
string[] splitStartAddresses = StartAddress.Split(' '); |
|
|
|
bool isStartAddressNumberOccurance = splitStartAddresses[0].Any(letter => char.IsDigit(letter)); |
|
|
|
|
|
|
|
string[] splitEndAddresses = EndAddress.Split(' '); |
|
|
|
bool isEndAddressNumberOccurance = splitEndAddresses[0].Any(letter => char.IsDigit(letter)); |
|
|
|
|
|
|
|
if (isEndAddressNumberOccurance) |
|
|
|
{ |
|
|
|
StartStreetName = StartAddress.Substring(StartAddress.IndexOf(' ') + 1); |
|
|
|
StartStreetName = StartStreetName + $", {StartSuburb}"; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
StartStreetName = StartSuburb; |
|
|
|
} |
|
|
|
|
|
|
|
if (isEndAddressNumberOccurance) |
|
|
|
{ |
|
|
|
EndStreetName = EndAddress.Substring(EndAddress.IndexOf(' ') + 1); |
|
|
|
EndStreetName = EndStreetName + $", {EndSuburb}"; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
EndStreetName = EndSuburb; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Obsolete] |
|
|
|
private async Task AcceptBooking() |
|
|
|
{ |
|
|
|
await Shell.Current.GoToAsync($"{nameof(AcceptBookingPage)}?{nameof(AcceptBookingViewModel.BookingId)}={Id}&{nameof(AcceptBookingViewModel.PickUpAddress)}={StartAddress}&{nameof(AcceptBookingViewModel.DropUpAddress)}={EndAddress}&{nameof(AcceptBookingViewModel.IsFutureBooking)}={IsFutureBooking}"); |
|
|
|
} |
|
|
|
|
|
|
|
private async Task DeclineBooking(string booking_Id) |
|
|
|
{ |
|
|
|
string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, ""); |
|
|
|
Guid driverId = Guid.Parse(Preferences.Get(LoginResponseDto.USER_CODE, "")); |
|
|
|
GMCabsDriverService gmCabsDriverService = new GMCabsDriverService(); |
|
|
|
AcceptDeclineBookingRequest acceptBookingRequest = new AcceptDeclineBookingRequest(); |
|
|
|
acceptBookingRequest.DriverId = driverId; |
|
|
|
|
|
|
|
var res = await gmCabsDriverService.DeclineBooking(acceptBookingRequest, rydoAccessToken, booking_Id); |
|
|
|
if (res.StatusCode == 200) |
|
|
|
{ |
|
|
|
await Shell.Current.GoToAsync($"//{nameof(HomePage)}"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
} |