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.
 

162 lines
5.3 KiB

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