using GMCabsDriverAssistant.Models;
|
|
using GMCabsDriverAssistant.Services;
|
|
using GMCabsDriverAssistant.Utils;
|
|
using GMCabsDriverAssistantSolution.Models.Rydo;
|
|
using GMCabsDriverAssistantSolution.Views;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GMCabsDriverAssistantSolution.ViewModels
|
|
{
|
|
class BookingsViewModel : BaseViewModel
|
|
{
|
|
#region Fields
|
|
private string startSuburb;
|
|
|
|
private string endSuburb;
|
|
|
|
private float distance;
|
|
private string formattedDistance;
|
|
|
|
private bool isFutureBooking;
|
|
|
|
private BookingDto selectedBooking;
|
|
#endregion
|
|
|
|
#region Properties
|
|
|
|
public string StartSuburb
|
|
{
|
|
get => startSuburb;
|
|
set => SetProperty(ref startSuburb, value);
|
|
}
|
|
public string EndSuburb
|
|
{
|
|
get => endSuburb;
|
|
set => SetProperty(ref endSuburb, 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 bool IsFutureBooking
|
|
{
|
|
get => isFutureBooking;
|
|
set => SetProperty(ref isFutureBooking, value);
|
|
}
|
|
public BookingDto SelectedBooking
|
|
{
|
|
get => selectedBooking;
|
|
set
|
|
{
|
|
SetProperty(ref selectedBooking, value);
|
|
OnBookingSelected(value);
|
|
}
|
|
}
|
|
public Command OnRefreshClicked { get; }
|
|
public ObservableCollection<BookingDto> Bookings { get; }
|
|
public Command<BookingDto> BookingTapped { get; }
|
|
public double CurrentLat { get; set; }
|
|
public double CurrentLng { get; set; }
|
|
#endregion
|
|
|
|
#region Constructor
|
|
public BookingsViewModel()
|
|
{
|
|
Title = "Available Bookings";
|
|
Bookings = new ObservableCollection<BookingDto>();
|
|
OnRefreshClicked = new Command(async () => { await GetBookings(); });
|
|
BookingTapped = new Command<BookingDto>(OnBookingSelected);
|
|
}
|
|
#endregion
|
|
|
|
#region Methods
|
|
public void OnAppearing()
|
|
{
|
|
//IsBusy = true;
|
|
SelectedBooking = null;
|
|
Task.Run(async () =>
|
|
{
|
|
await GetBookings();
|
|
});
|
|
}
|
|
|
|
private async Task GetBookings()
|
|
{
|
|
List<string> seenBookingList = new List<string>();
|
|
var seenBooking = Preferences.Get(SecureStorageData.UnSeenBooking, "");
|
|
if (!String.IsNullOrEmpty(seenBooking))
|
|
{
|
|
var arrList = seenBooking.Split(',');
|
|
if (arrList != null)
|
|
{
|
|
foreach (var item in arrList)
|
|
{
|
|
seenBookingList.Add(item);
|
|
}
|
|
|
|
}
|
|
}
|
|
string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, "");
|
|
Guid driverId = Guid.Parse(Preferences.Get(LoginResponseDto.USER_CODE, ""));
|
|
GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
|
|
Bookings.Clear();
|
|
var bookings = await gmCabsDriverService.GetBookings(rydoAccessToken, driverId, CurrentLat, CurrentLng);
|
|
if (bookings.Count > 0)
|
|
{
|
|
foreach (BookingDto booking in bookings)
|
|
{
|
|
if (seenBookingList.Count > 0 && seenBookingList.Contains(booking.BookingId.ToString()))
|
|
{
|
|
booking.IsSeenBooking = false;
|
|
}
|
|
else
|
|
{
|
|
booking.IsSeenBooking = true;
|
|
}
|
|
Bookings.Add(booking);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Preferences.Set(SecureStorageData.UnSeenBooking, "");
|
|
await Shell.Current.GoToAsync("..");
|
|
}
|
|
|
|
}
|
|
|
|
async void OnBookingSelected(BookingDto booking)
|
|
{
|
|
if (booking == null)
|
|
return;
|
|
|
|
// This will push the ItemDetailPage onto the navigation stack
|
|
|
|
var seenBooking = Preferences.Get(SecureStorageData.UnSeenBooking, "");
|
|
if (String.IsNullOrEmpty(seenBooking))
|
|
{
|
|
seenBooking = booking.BookingId.ToString();
|
|
}
|
|
else
|
|
{
|
|
seenBooking = seenBooking + "," + booking.BookingId.ToString();
|
|
}
|
|
Preferences.Set(SecureStorageData.UnSeenBooking, seenBooking);
|
|
// await Shell.Current.GoToAsync($"{nameof(BookingDetailsPage)}?{nameof(BookingDetailViewModel.BookingId)}={booking.BookingId:N}");
|
|
string bookingJson = JsonSerializer.Serialize(booking);
|
|
await Shell.Current.GoToAsync($"{nameof(BookingDetailsPage)}?{nameof(BookingDetailViewModel.BookingJson)}={bookingJson}");
|
|
}
|
|
#endregion
|
|
}
|
|
}
|