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 { get; } public ObservableCollection 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(); StopoverLocationsList = new ObservableCollection(); 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(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(); //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) { 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) { 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 } }