diff --git a/GMCabsDriverAssistantSolution/ViewModels/StartRideViewModel.cs b/GMCabsDriverAssistantSolution/ViewModels/StartRideViewModel.cs new file mode 100644 index 0000000..6813ae0 --- /dev/null +++ b/GMCabsDriverAssistantSolution/ViewModels/StartRideViewModel.cs @@ -0,0 +1,382 @@ +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 + } +} diff --git a/GMCabsDriverAssistantSolution/Views/PassgerCollectedPage.xaml b/GMCabsDriverAssistantSolution/Views/PassgerCollectedPage.xaml new file mode 100644 index 0000000..70ff567 --- /dev/null +++ b/GMCabsDriverAssistantSolution/Views/PassgerCollectedPage.xaml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +