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.
 

382 lines
14 KiB

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
}
}