using GMCabsDriverAssistant.Models;
|
|
using GMCabsDriverAssistant.Models.Rydo;
|
|
using GMCabsDriverAssistant.Services;
|
|
using GMCabsDriverAssistantSolution.Models.Rydo;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GMCabsDriverAssistantSolution.ViewModels
|
|
{
|
|
[QueryProperty(nameof(RideRequestJson), nameof(RideRequestJson))]
|
|
public class StartRideViewModel : BaseViewModel
|
|
{
|
|
#region Fields
|
|
private string rideRequestJson;
|
|
private string passengerName;
|
|
private bool isCorporate;
|
|
private string fullDestinationAddress;
|
|
private StartRideResponse startRideResponse;
|
|
private int frameWidth;
|
|
private bool stopOver = false;
|
|
private bool noStopOver = false;
|
|
private int index = 0;
|
|
private double destinationCircleColorOpecity = 0.2;
|
|
private string destinationStopLabelColorCode = "#BECEDA";
|
|
private bool isStopOver = false;
|
|
private bool isNoStopOver = false;
|
|
StartRideRequestDto startRideRequestDto;
|
|
Page _page;
|
|
public string meterRunningStatus;
|
|
private string locationSuburbName;
|
|
private string startSuburb;
|
|
private string pickUpDateTime;
|
|
private string timerSeconds;
|
|
public int seconds = 0;
|
|
private bool visibleTrip;
|
|
private bool isEndTripButtonVisible = true;
|
|
private string startTimeOrEndLocation;
|
|
#endregion
|
|
|
|
#region Properties
|
|
public List<StopoverLocations> StopoverLocations { get; }
|
|
public ObservableCollection<StopoverLocations> StopoverLocationsList { get; }
|
|
public Command OnPassengerCollectedClick { get; }
|
|
public string RideRequestJson
|
|
{
|
|
get => rideRequestJson;
|
|
set
|
|
{
|
|
rideRequestJson = value;
|
|
ProcessRiding(value);
|
|
}
|
|
}
|
|
public string PassengerName
|
|
{
|
|
get => passengerName;
|
|
set => SetProperty(ref passengerName, value);
|
|
}
|
|
public bool IsCorporate
|
|
{
|
|
get => isCorporate;
|
|
set => SetProperty(ref isCorporate, value);
|
|
}
|
|
public string FullDestinationAddress
|
|
{
|
|
get => fullDestinationAddress;
|
|
set => SetProperty(ref fullDestinationAddress, value);
|
|
}
|
|
public bool StopOver
|
|
{
|
|
get => stopOver;
|
|
set => SetProperty(ref stopOver, value);
|
|
}
|
|
public bool NoStopOver
|
|
{
|
|
get => noStopOver;
|
|
set => SetProperty(ref noStopOver, value);
|
|
}
|
|
public bool IsStopOver
|
|
{
|
|
get => isStopOver;
|
|
set => SetProperty(ref isStopOver, value);
|
|
}
|
|
public bool IsNoStopOver
|
|
{
|
|
get => isNoStopOver;
|
|
set => SetProperty(ref isNoStopOver, value);
|
|
}
|
|
public int FrameWidth
|
|
{
|
|
get => frameWidth;
|
|
set => SetProperty(ref frameWidth, value);
|
|
}
|
|
public double DestinationCircleColorOpecity
|
|
{
|
|
get => destinationCircleColorOpecity;
|
|
set => SetProperty(ref destinationCircleColorOpecity, value);
|
|
}
|
|
public string DestinationStopLabelColorCode
|
|
{
|
|
get => destinationStopLabelColorCode;
|
|
set => SetProperty(ref destinationStopLabelColorCode, value);
|
|
}
|
|
public string StartSuburb
|
|
{
|
|
get => startSuburb;
|
|
set
|
|
{
|
|
SetProperty(ref startSuburb, value);
|
|
}
|
|
}
|
|
public string PickUpDateTime
|
|
{
|
|
get => pickUpDateTime;
|
|
set => SetProperty(ref pickUpDateTime, value);
|
|
}
|
|
public string TimerSeconds
|
|
{
|
|
get => timerSeconds;
|
|
set => SetProperty(ref timerSeconds, value);
|
|
}
|
|
public bool VisibleTrip
|
|
{
|
|
get => visibleTrip;
|
|
set => SetProperty(ref visibleTrip, value);
|
|
}
|
|
public bool IsEndTripButtonVisible
|
|
{
|
|
get => isEndTripButtonVisible;
|
|
set => SetProperty(ref isEndTripButtonVisible, value);
|
|
}
|
|
public string StartTimeOrEndLocation
|
|
{
|
|
get => startTimeOrEndLocation;
|
|
set => SetProperty(ref startTimeOrEndLocation, value);
|
|
}
|
|
public Command OnPassengerDroppedOffClick { get; }
|
|
public Command onEndTripClick { get; }
|
|
#endregion
|
|
|
|
#region Constructor
|
|
public StartRideViewModel(Page page)
|
|
{
|
|
Title = "Passenger Collected";
|
|
StopoverLocations = new List<StopoverLocations>();
|
|
StopoverLocationsList = new ObservableCollection<StopoverLocations>();
|
|
OnPassengerCollectedClick = new Command(PassengerCollected);
|
|
startRideRequestDto = new StartRideRequestDto();
|
|
OnPassengerDroppedOffClick = new Command(PassengerDroppedOff);
|
|
_page = page;
|
|
meterRunningStatus = Preferences.Get("MeterRunningStatus", "");
|
|
StartTimeOrEndLocation = "Start Time";
|
|
}
|
|
#endregion
|
|
|
|
#region Methods
|
|
private async void ProcessRiding(string rideRequestJson)
|
|
{
|
|
string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, "");
|
|
GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
|
|
startRideRequestDto = JsonSerializer.Deserialize<StartRideRequestDto>(rideRequestJson);
|
|
StartRideRequest startRideRequest = startRideRequestDto.startRideRequest;
|
|
if (startRideRequest.DriverId == "")
|
|
{
|
|
await Shell.Current.GoToAsync("..");
|
|
}
|
|
startRideResponse = new StartRideResponse();
|
|
startRideResponse = await gmCabsDriverService.StartRiding(startRideRequest, rydoAccessToken, startRideRequestDto.BookingId.ToString());
|
|
if (startRideResponse.StatusCode == (int)HttpStatusCode.OK)
|
|
{
|
|
PassengerName = startRideResponse.PassengerName;
|
|
IsCorporate = startRideResponse.IsCorporate;
|
|
startRideResponse.DriverId = startRideRequest.DriverId;
|
|
startRideResponse.BookingId = startRideRequestDto.BookingId;
|
|
if (IsCorporate)
|
|
{
|
|
FrameWidth = 310;
|
|
}
|
|
else
|
|
{
|
|
FrameWidth = 370;
|
|
}
|
|
startRideResponse.FrameWidth = FrameWidth;
|
|
FullDestinationAddress = startRideResponse.EndAddress + " " + startRideResponse.EndSuburb;
|
|
var locations = new List<StopoverLocations>();
|
|
|
|
//These below-mentioned commented out codes are witten for checking the lists of Stop Over Locations as a mock data
|
|
//because of unable to fetch real stop over location data from the dev rydo booking page
|
|
|
|
//locations.Add(new StopoverLocations
|
|
//{
|
|
// Latitude = -32.63,
|
|
// Longitude = 151.55,
|
|
// Address = "1 Milson St",
|
|
// Suburb = "Charlestown",
|
|
// StopNumber = 1
|
|
//});
|
|
//locations.Add(new StopoverLocations
|
|
//{
|
|
// Latitude = -36.17,
|
|
// Longitude = 144.66,
|
|
// Address = "1/1 Milson St",
|
|
// Suburb = "Charlestown",
|
|
// StopNumber = 2
|
|
//});
|
|
//locations.Add(new StopoverLocations
|
|
//{
|
|
// Latitude = -36.17,
|
|
// Longitude = 144.66,
|
|
// Address = "1/1 Milson St",
|
|
// Suburb = "Charlestown",
|
|
// StopNumber = 3
|
|
//});
|
|
//locations.Add(new StopoverLocations
|
|
//{
|
|
// Latitude = -36.17,
|
|
// Longitude = 144.66,
|
|
// Address = "1/1 Milson St",
|
|
// Suburb = "Charlestown",
|
|
// StopNumber = 2
|
|
//});
|
|
//locations.Add(new StopoverLocations
|
|
//{
|
|
// Latitude = -36.17,
|
|
// Longitude = 144.66,
|
|
// Address = "1/1 Milson St",
|
|
// Suburb = "Charlestown",
|
|
// StopNumber = 2
|
|
//});
|
|
//locations.Add(new StopoverLocations
|
|
//{
|
|
// Latitude = -36.17,
|
|
// Longitude = 144.66,
|
|
// Address = "1/1 Milson St",
|
|
// Suburb = "Charlestown",
|
|
// StopNumber = 2
|
|
//});
|
|
locations.Add(new StopoverLocations
|
|
{
|
|
Latitude = startRideResponse.EndLatitude,
|
|
Longitude = startRideResponse.EndLongitude,
|
|
Address = startRideResponse.EndAddress,
|
|
Suburb = startRideResponse.EndSuburb,
|
|
StopNumber = startRideResponse.StopoverLocations.Count + 1
|
|
});
|
|
startRideResponse.StopoverLocations.AddRange(locations);
|
|
if (startRideResponse.StopoverLocations.Count > 0)
|
|
{
|
|
StopOver = true;
|
|
NoStopOver = false;
|
|
IsStopOver = true;
|
|
IsNoStopOver = false;
|
|
StopoverLocations.Clear();
|
|
foreach (var locationlists in startRideResponse.StopoverLocations)
|
|
{
|
|
StopoverLocations.Add(locationlists);
|
|
}
|
|
setPrimaryStopOverLocation(StopoverLocations);
|
|
}
|
|
else
|
|
{
|
|
StopOver = false;
|
|
NoStopOver = true;
|
|
IsStopOver = false;
|
|
IsNoStopOver = true;
|
|
}
|
|
if (startRideResponse.FixedAmount != null)
|
|
{
|
|
decimal amount = Convert.ToDecimal(startRideResponse.FixedAmount) / 100.0m;
|
|
amount = amount * 1.00m;
|
|
startRideResponse.FixedAmount = amount;
|
|
}
|
|
}
|
|
}
|
|
private void setPrimaryStopOverLocation(List<StopoverLocations> stopoverLocations)
|
|
{
|
|
StopoverLocationsList.Clear();
|
|
int stopOverLocationCount = 1;
|
|
foreach (var location in stopoverLocations)
|
|
{
|
|
if (stopOverLocationCount == stopoverLocations.Count)
|
|
{
|
|
location.IsLineVisible = false;
|
|
}
|
|
location.LabelColor = "#BBB9B9";
|
|
location.CircleColorOpecity = 0.2;
|
|
StopoverLocationsList.Add(location);
|
|
|
|
if (stopoverLocations.Count == 1)
|
|
{
|
|
location.LabelColor = "Black";
|
|
location.CircleColorOpecity = 0.5;
|
|
IsStopOver = false;
|
|
IsNoStopOver = true;
|
|
}
|
|
|
|
stopOverLocationCount++;
|
|
}
|
|
}
|
|
|
|
private void setStopOverLocation(List<StopoverLocations> stopoverLocations)
|
|
{
|
|
StopoverLocationsList.Clear();
|
|
int stopoverLocationIndex = 0;
|
|
foreach (var location in stopoverLocations)
|
|
{
|
|
if (stopoverLocationIndex == stopoverLocations.Count - 1)
|
|
{
|
|
location.IsLineVisible = false;
|
|
}
|
|
|
|
if (stopoverLocationIndex == index)
|
|
{
|
|
location.LabelColor = "Black";
|
|
location.CircleColorOpecity = 0.5;
|
|
}
|
|
else
|
|
{
|
|
location.LabelColor = "#BBB9B9";
|
|
location.CircleColorOpecity = 0.2;
|
|
}
|
|
StopoverLocationsList.Add(location);
|
|
stopoverLocationIndex++;
|
|
}
|
|
}
|
|
|
|
private async void PassengerCollected()
|
|
{
|
|
int stop_number = StopoverLocationsList[index].StopNumber;
|
|
string booking_id = startRideRequestDto.BookingId.ToString();
|
|
string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, "");
|
|
GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
|
|
await gmCabsDriverService.NotifyStop(stop_number, rydoAccessToken, booking_id);
|
|
int StopoverLocationsListCount = StopoverLocationsList.Count;
|
|
setStopOverLocation(StopoverLocations);
|
|
if (index == StopoverLocationsListCount - 1)
|
|
{
|
|
DestinationStopLabelColorCode = "Black";
|
|
DestinationCircleColorOpecity = 0.5;
|
|
IsStopOver = false;
|
|
IsNoStopOver = true;
|
|
}
|
|
index = index + 1;
|
|
}
|
|
|
|
public async void PassengerDroppedOff()
|
|
{
|
|
//if (meterRunningStatus == "Stopped")
|
|
//{
|
|
//UpdateBookingStatus();
|
|
//if (startRideResponse.PaymentMethodId == null && startRideResponse.FixedAmount == null)
|
|
//{
|
|
// await _page.Navigation.PushAsync(new PassengerDroppedWithNoPaymentMethodIdNoFixedFareTablet(startRideResponse));
|
|
//}
|
|
//else if (startRideResponse.PaymentMethodId == null && startRideResponse.FixedAmount != null)
|
|
//{
|
|
// await _page.Navigation.PushAsync(new PassengerDroppedWithNoPaymentMethodIdAndFixedFareTablet(startRideResponse));
|
|
//}
|
|
//else if (startRideResponse.PaymentMethodId != null && startRideResponse.FixedAmount != null)
|
|
//{
|
|
// await _page.Navigation.PushAsync(new PassengerDroppedWithPaymentMethodIdAndFixedFareTablet(startRideResponse));
|
|
//}
|
|
//else if (startRideResponse.PaymentMethodId != null && startRideResponse.FixedAmount == null)
|
|
//{
|
|
// await _page.Navigation.PushAsync(new PassengerDroppedWithPaymentMethodIdNoFixedFareTablet(startRideResponse));
|
|
//}
|
|
//}
|
|
//else
|
|
//{
|
|
// _page.Navigation.ShowPopup(new MeterTripStatusDialogPage(this._page, startRideResponse));
|
|
//}
|
|
}
|
|
|
|
|
|
#endregion
|
|
}
|
|
}
|