@ -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 | |||
} | |||
} |
@ -0,0 +1,183 @@ | |||
<?xml version="1.0" encoding="utf-8" ?> | |||
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" | |||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | |||
x:Class="GMCabsDriverAssistantSolution.Views.AcceptedFutureBookingDetailPage" | |||
xmlns:vm="clr-namespace:GMCabsDriverAssistantSolution.ViewModels" | |||
xmlns:models="clr-namespace:GMCabsDriverAssistant.Models" | |||
x:DataType="vm:AcceptedFutureBookingDetailViewModel" | |||
Title="{Binding Title}"> | |||
<ContentPage.Resources> | |||
<ResourceDictionary> | |||
<Style x:Key="InnerFrameLabel" TargetType="Label"> | |||
<Setter Property="HorizontalTextAlignment" Value="Center"/> | |||
<Setter Property="FontAttributes" Value="Bold"/> | |||
<Setter Property="TextColor" Value="Black"/> | |||
<Setter Property="FontSize" Value="25"/> | |||
</Style> | |||
<Style x:Key="OuterFrameLabel" TargetType="Label"> | |||
<Setter Property="HorizontalTextAlignment" Value="Center"/> | |||
<Setter Property="FontAttributes" Value="Bold"/> | |||
<Setter Property="TextColor" Value="Black"/> | |||
<Setter Property="FontSize" Value="25"/> | |||
</Style> | |||
<Style x:Key="BellowFrameStyle" TargetType="Frame"> | |||
<Setter Property="BackgroundColor" Value="#C4C4C4"/> | |||
<Setter Property="WidthRequest" Value="70"/> | |||
</Style> | |||
<Color x:Key="Accent">#96d1ff</Color> | |||
</ResourceDictionary> | |||
</ContentPage.Resources> | |||
<ContentPage.Content> | |||
<StackLayout Orientation="Vertical" | |||
Padding="20,5,20,5" | |||
BackgroundColor="#DCDCDC"> | |||
<!-- | |||
<Label | |||
TextColor="Black" | |||
HorizontalTextAlignment="Center" | |||
FontSize="25"> | |||
<Label.Triggers> | |||
<DataTrigger TargetType="Label" Binding="{Binding IsFutureBooking}" Value="True"> | |||
<Setter Property="Text" Value=""/> | |||
</DataTrigger> | |||
<DataTrigger TargetType="Label" Binding="{Binding IsFutureBooking}" Value="False"> | |||
<Setter Property="Text" Value="{Binding FormattedDistance}" /> | |||
</DataTrigger> | |||
</Label.Triggers> | |||
</Label> | |||
--> | |||
<StackLayout Orientation="Horizontal"> | |||
<Image Source="green_pin.png" | |||
HeightRequest="40"/> | |||
<Label TextColor="Black" | |||
HorizontalTextAlignment="Start" | |||
FontSize="20" | |||
Margin="10,10,0,0" | |||
Text="{Binding StartSuburb}"> | |||
<!-- | |||
<Label.Text> | |||
<MultiBinding StringFormat="{}{0} {1}"> | |||
<Binding Path="StartAddress" /> | |||
<Binding Path="StartSuburb" /> | |||
</MultiBinding> | |||
</Label.Text> | |||
--> | |||
</Label> | |||
</StackLayout> | |||
<StackLayout Orientation="Horizontal"> | |||
<Image Source="red_pin.png" | |||
HeightRequest="40"/> | |||
<Label TextColor="Black" | |||
HorizontalTextAlignment="Start" | |||
FontSize="20" | |||
Margin="10,10,0,0" | |||
Text="{Binding EndSuburb}"> | |||
<!-- | |||
<Label.Text> | |||
<MultiBinding StringFormat="{}{0} {1}"> | |||
<Binding Path="EndAddress" /> | |||
<Binding Path="EndSuburb" /> | |||
</MultiBinding> | |||
</Label.Text> | |||
--> | |||
</Label> | |||
</StackLayout> | |||
<Frame CornerRadius="25" | |||
Padding="0" | |||
Margin="0,15,0,0" | |||
BackgroundColor="#BCA70F0F"> | |||
<StackLayout> | |||
<Frame BackgroundColor="#C4C4C4" | |||
HeightRequest="28" | |||
Padding="0,5,0,5" | |||
CornerRadius="25"> | |||
<StackLayout Orientation="Horizontal" | |||
HorizontalOptions="CenterAndExpand"> | |||
<Image Source="clock.png" | |||
Margin="0,0,10,0"/> | |||
<Label | |||
TextColor="Black" | |||
FontAttributes="Bold" | |||
VerticalTextAlignment="Center" | |||
HorizontalTextAlignment="Center" | |||
FontSize="20"> | |||
<Label.Triggers> | |||
<DataTrigger TargetType="Label" Binding="{Binding IsFutureBooking}" Value="True"> | |||
<Setter Property="Text" Value="{Binding FormattedPickUpTime}"/> | |||
</DataTrigger> | |||
<DataTrigger TargetType="Label" Binding="{Binding IsFutureBooking}" Value="False"> | |||
<Setter Property="Text" Value="READY NOW" /> | |||
</DataTrigger> | |||
</Label.Triggers> | |||
</Label> | |||
</StackLayout> | |||
</Frame> | |||
<!--<Frame x:Name="corporateVIPFrame" BackgroundColor="Transparent" | |||
HasShadow="False" | |||
Padding="5">--> | |||
<Label x:Name="corporateVipLabel" | |||
Text="Corporate VIP Booking" | |||
TextColor="White" | |||
FontAttributes="Bold" | |||
VerticalTextAlignment="Start" | |||
HorizontalTextAlignment="Center" | |||
FontSize="20" | |||
Padding="5"/> | |||
<!--</Frame>--> | |||
</StackLayout> | |||
</Frame> | |||
<StackLayout Orientation="Horizontal" | |||
Margin="0,5,0,0"> | |||
<StackLayout HorizontalOptions="StartAndExpand"> | |||
<Label Text="PAYMENT" | |||
HorizontalTextAlignment="Center" | |||
TextColor="Black" | |||
FontSize="15"/> | |||
<Frame Padding="4,12" | |||
WidthRequest="100" | |||
CornerRadius="24" | |||
Style="{StaticResource BellowFrameStyle}"> | |||
<Label Text="{Binding FareTypeValue}" | |||
FontSize="20" | |||
Style="{StaticResource InnerFrameLabel}"/> | |||
</Frame> | |||
</StackLayout> | |||
<StackLayout HorizontalOptions="CenterAndExpand"> | |||
<Label Text="POINTS" | |||
HorizontalTextAlignment="Center" | |||
TextColor="Black" | |||
FontSize="15"/> | |||
<Frame Style="{StaticResource BellowFrameStyle}" | |||
Padding="4,12" | |||
CornerRadius="24"> | |||
<Label Text="{Binding RewardPoints, StringFormat='+{0}'}" FontSize="20" | |||
Style="{StaticResource InnerFrameLabel}"/> | |||
</Frame> | |||
</StackLayout> | |||
<StackLayout HorizontalOptions="EndAndExpand"> | |||
<Label Text="FEE" | |||
HorizontalTextAlignment="Center" | |||
TextColor="Black" | |||
FontSize="15"/> | |||
<Frame Style="{StaticResource BellowFrameStyle}" | |||
Padding="4,12" | |||
CornerRadius="24"> | |||
<Label Text="{Binding BookingFee, StringFormat='{0}%'}" FontSize="20" | |||
TextColor="#B44444" | |||
Style="{StaticResource InnerFrameLabel}"/> | |||
</Frame> | |||
</StackLayout> | |||
</StackLayout> | |||
<StackLayout VerticalOptions="EndAndExpand" | |||
Margin="0,5,0,0"> | |||
<Button | |||
Margin="20,0,20,15" | |||
Text="Decline Booking" | |||
FontSize="20" | |||
TextTransform="Uppercase" | |||
Clicked="OnDeclineBookingClicked"/> | |||
</StackLayout> | |||
</StackLayout> | |||
</ContentPage.Content> | |||
</ContentPage> |
@ -0,0 +1,30 @@ | |||
using GMCabsDriverAssistantSolution.ViewModels; | |||
namespace GMCabsDriverAssistantSolution.Views; | |||
public partial class AcceptedFutureBookingDetailPage : ContentPage | |||
{ | |||
private AcceptedFutureBookingDetailViewModel _viewModel; | |||
public AcceptedFutureBookingDetailPage() | |||
{ | |||
InitializeComponent(); | |||
BindingContext = _viewModel = new AcceptedFutureBookingDetailViewModel(); | |||
} | |||
protected override void OnAppearing() | |||
{ | |||
base.OnAppearing(); | |||
corporateVipLabel.IsVisible = _viewModel.IsCorporateBooking; | |||
} | |||
private async void OnDeclineBookingClicked(object sender, EventArgs e) | |||
{ | |||
bool answer = await DisplayAlert("", "Are you sure you want to release this booking, cancellation fees may apply", "YES", "NO"); | |||
if (answer) | |||
{ | |||
await _viewModel.OnDeclineBookingClickedAsync(); | |||
} | |||
} | |||
} |