From 31191f316976ead88c3a48f1e5721c1a2e4ba8cd Mon Sep 17 00:00:00 2001 From: Kaustav Chaudhuri Date: Mon, 8 May 2023 11:19:45 +0530 Subject: [PATCH] Accepted Future booking View Model and Its respective pages Implemented. --- .../AcceptedFutureBookingDetailViewModel.cs | 237 ++++++++++++++++++ .../AcceptedFutureBookingsViewModel.cs | 3 +- .../AcceptedFutureBookingDetailPage.xaml | 183 ++++++++++++++ .../AcceptedFutureBookingDetailPage.xaml.cs | 30 +++ 4 files changed, 452 insertions(+), 1 deletion(-) create mode 100644 GMCabsDriverAssistantSolution/ViewModels/AcceptedFutureBookingDetailViewModel.cs create mode 100644 GMCabsDriverAssistantSolution/Views/AcceptedFutureBookingDetailPage.xaml create mode 100644 GMCabsDriverAssistantSolution/Views/AcceptedFutureBookingDetailPage.xaml.cs diff --git a/GMCabsDriverAssistantSolution/ViewModels/AcceptedFutureBookingDetailViewModel.cs b/GMCabsDriverAssistantSolution/ViewModels/AcceptedFutureBookingDetailViewModel.cs new file mode 100644 index 0000000..395461a --- /dev/null +++ b/GMCabsDriverAssistantSolution/ViewModels/AcceptedFutureBookingDetailViewModel.cs @@ -0,0 +1,237 @@ +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 + + } +} diff --git a/GMCabsDriverAssistantSolution/ViewModels/AcceptedFutureBookingsViewModel.cs b/GMCabsDriverAssistantSolution/ViewModels/AcceptedFutureBookingsViewModel.cs index 502cd07..33e19a8 100644 --- a/GMCabsDriverAssistantSolution/ViewModels/AcceptedFutureBookingsViewModel.cs +++ b/GMCabsDriverAssistantSolution/ViewModels/AcceptedFutureBookingsViewModel.cs @@ -1,6 +1,7 @@ using GMCabsDriverAssistant.Models; using GMCabsDriverAssistant.Services; using GMCabsDriverAssistantSolution.Models.Rydo; +using GMCabsDriverAssistantSolution.Views; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -119,7 +120,7 @@ namespace GMCabsDriverAssistantSolution.ViewModels { if (booking == null) return; - // await Shell.Current.GoToAsync($"{nameof(AcceptedFutureBookingDetailPage)}?{nameof(AcceptedFutureBookingDetailViewModel.BookingId)}={booking.BookingId:N}"); + await Shell.Current.GoToAsync($"{nameof(AcceptedFutureBookingDetailPage)}?{nameof(AcceptedFutureBookingDetailViewModel.BookingId)}={booking.BookingId:N}"); } #endregion } diff --git a/GMCabsDriverAssistantSolution/Views/AcceptedFutureBookingDetailPage.xaml b/GMCabsDriverAssistantSolution/Views/AcceptedFutureBookingDetailPage.xaml new file mode 100644 index 0000000..d55f354 --- /dev/null +++ b/GMCabsDriverAssistantSolution/Views/AcceptedFutureBookingDetailPage.xaml @@ -0,0 +1,183 @@ + + + + + + + + #96d1ff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +