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

  1. using GMCabsDriverAssistant.Models;
  2. using GMCabsDriverAssistant.Services;
  3. using GMCabsDriverAssistant.Utils;
  4. using GMCabsDriverAssistantSolution.Models.Rydo;
  5. using GMCabsDriverAssistantSolution.Views;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Collections.ObjectModel;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Text.Json;
  12. using System.Threading.Tasks;
  13. namespace GMCabsDriverAssistantSolution.ViewModels
  14. {
  15. class BookingsViewModel : BaseViewModel
  16. {
  17. #region Fields
  18. private string startSuburb;
  19. private string endSuburb;
  20. private float distance;
  21. private string formattedDistance;
  22. private bool isFutureBooking;
  23. private BookingDto selectedBooking;
  24. #endregion
  25. #region Properties
  26. public string StartSuburb
  27. {
  28. get => startSuburb;
  29. set => SetProperty(ref startSuburb, value);
  30. }
  31. public string EndSuburb
  32. {
  33. get => endSuburb;
  34. set => SetProperty(ref endSuburb, value);
  35. }
  36. public float Distance
  37. {
  38. get => distance;
  39. set => SetProperty(ref distance, value);
  40. }
  41. public string FormattedDistance
  42. {
  43. get => (distance >= 1000) ? $"{distance / 1000:0.##}k" : $"{(int)distance}m";
  44. set => SetProperty(ref formattedDistance, value);
  45. }
  46. public bool IsFutureBooking
  47. {
  48. get => isFutureBooking;
  49. set => SetProperty(ref isFutureBooking, value);
  50. }
  51. public BookingDto SelectedBooking
  52. {
  53. get => selectedBooking;
  54. set
  55. {
  56. SetProperty(ref selectedBooking, value);
  57. OnBookingSelected(value);
  58. }
  59. }
  60. public Command OnRefreshClicked { get; }
  61. public ObservableCollection<BookingDto> Bookings { get; }
  62. public Command<BookingDto> BookingTapped { get; }
  63. public double CurrentLat { get; set; }
  64. public double CurrentLng { get; set; }
  65. #endregion
  66. #region Constructor
  67. public BookingsViewModel()
  68. {
  69. Title = "Available Bookings";
  70. Bookings = new ObservableCollection<BookingDto>();
  71. OnRefreshClicked = new Command(async () => { await GetBookings(); });
  72. BookingTapped = new Command<BookingDto>(OnBookingSelected);
  73. }
  74. #endregion
  75. #region Methods
  76. public void OnAppearing()
  77. {
  78. //IsBusy = true;
  79. SelectedBooking = null;
  80. Task.Run(async () =>
  81. {
  82. await GetBookings();
  83. });
  84. }
  85. private async Task GetBookings()
  86. {
  87. List<string> seenBookingList = new List<string>();
  88. var seenBooking = Preferences.Get(SecureStorageData.UnSeenBooking, "");
  89. if (!String.IsNullOrEmpty(seenBooking))
  90. {
  91. var arrList = seenBooking.Split(',');
  92. if (arrList != null)
  93. {
  94. foreach (var item in arrList)
  95. {
  96. seenBookingList.Add(item);
  97. }
  98. }
  99. }
  100. string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, "");
  101. Guid driverId = Guid.Parse(Preferences.Get(LoginResponseDto.USER_CODE, ""));
  102. GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
  103. Bookings.Clear();
  104. var bookings = await gmCabsDriverService.GetBookings(rydoAccessToken, driverId, CurrentLat, CurrentLng);
  105. if (bookings.Count > 0)
  106. {
  107. foreach (BookingDto booking in bookings)
  108. {
  109. if (seenBookingList.Count > 0 && seenBookingList.Contains(booking.BookingId.ToString()))
  110. {
  111. booking.IsSeenBooking = false;
  112. }
  113. else
  114. {
  115. booking.IsSeenBooking = true;
  116. }
  117. Bookings.Add(booking);
  118. }
  119. }
  120. else
  121. {
  122. Preferences.Set(SecureStorageData.UnSeenBooking, "");
  123. await Shell.Current.GoToAsync("..");
  124. }
  125. }
  126. async void OnBookingSelected(BookingDto booking)
  127. {
  128. if (booking == null)
  129. return;
  130. // This will push the ItemDetailPage onto the navigation stack
  131. var seenBooking = Preferences.Get(SecureStorageData.UnSeenBooking, "");
  132. if (String.IsNullOrEmpty(seenBooking))
  133. {
  134. seenBooking = booking.BookingId.ToString();
  135. }
  136. else
  137. {
  138. seenBooking = seenBooking + "," + booking.BookingId.ToString();
  139. }
  140. Preferences.Set(SecureStorageData.UnSeenBooking, seenBooking);
  141. // await Shell.Current.GoToAsync($"{nameof(BookingDetailsPage)}?{nameof(BookingDetailViewModel.BookingId)}={booking.BookingId:N}");
  142. string bookingJson = JsonSerializer.Serialize(booking);
  143. await Shell.Current.GoToAsync($"{nameof(BookingDetailsPage)}?{nameof(BookingDetailViewModel.BookingJson)}={bookingJson}");
  144. }
  145. #endregion
  146. }
  147. }