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.

237 lines
6.8 KiB

  1. using GMCabsDriverAssistant.Enums;
  2. using GMCabsDriverAssistant.Services;
  3. using GMCabsDriverAssistantSolution.Models.Rydo;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace GMCabsDriverAssistantSolution.ViewModels
  10. {
  11. [QueryProperty(nameof(BookingId), nameof(BookingId))]
  12. class AcceptedFutureBookingDetailViewModel : BaseViewModel
  13. {
  14. #region Fields
  15. private string _bookingId;
  16. private float distance;
  17. private string formattedDistance;
  18. private string startAddress;
  19. private string startSuburb;
  20. private string endAddress;
  21. private string endSuburb;
  22. private string rewardPoints;
  23. private double bookingFee;
  24. private bool isCorporateBooking;
  25. private string fareTypeValue;
  26. private int? fixedAmount;
  27. private bool isFutureBooking;
  28. private int pickUpTime;
  29. private string formattedPickUpTime;
  30. private string formattedPickUpTimeDateOnly;
  31. private string formattedPickUpTimeTimeOnly;
  32. #endregion
  33. #region Properties
  34. public string BookingId
  35. {
  36. get => _bookingId;
  37. set
  38. {
  39. _bookingId = value;
  40. LoadAcceptedFutureBooking(Guid.Parse(value));
  41. }
  42. }
  43. public float Distance
  44. {
  45. get => distance;
  46. set => SetProperty(ref distance, value);
  47. }
  48. public string FormattedDistance
  49. {
  50. get => (distance >= 1000) ? $"{distance / 1000:0.##}k" : $"{(int)distance}m";
  51. set => SetProperty(ref formattedDistance, value);
  52. }
  53. public string StartAddress
  54. {
  55. get => startAddress;
  56. set => SetProperty(ref startAddress, value);
  57. }
  58. public string StartSuburb
  59. {
  60. get => startSuburb;
  61. set => SetProperty(ref startSuburb, value);
  62. }
  63. public string EndAddress
  64. {
  65. get => endAddress;
  66. set => SetProperty(ref endAddress, value);
  67. }
  68. public string EndSuburb
  69. {
  70. get => endSuburb;
  71. set => SetProperty(ref endSuburb, value);
  72. }
  73. public string RewardPoints
  74. {
  75. get => rewardPoints;
  76. set => SetProperty(ref rewardPoints, value);
  77. }
  78. public double BookingFee
  79. {
  80. get => bookingFee;
  81. set => SetProperty(ref bookingFee, value);
  82. }
  83. public bool IsCorporateBooking
  84. {
  85. get => isCorporateBooking;
  86. set => SetProperty(ref isCorporateBooking, value);
  87. }
  88. public string FareTypeValue
  89. {
  90. get => fareTypeValue;
  91. set => SetProperty(ref fareTypeValue, value);
  92. }
  93. public int? FixedAmount
  94. {
  95. get => fixedAmount;
  96. set => SetProperty(ref fixedAmount, value);
  97. }
  98. public bool IsFutureBooking
  99. {
  100. get => isFutureBooking;
  101. set => SetProperty(ref isFutureBooking, value);
  102. }
  103. public int PickUpTime
  104. {
  105. get => pickUpTime;
  106. set => SetProperty(ref pickUpTime, value);
  107. }
  108. public string FormattedPickUpTime
  109. {
  110. get
  111. {
  112. DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
  113. dateTime = dateTime.AddSeconds(pickUpTime).ToLocalTime();
  114. return dateTime.ToString("dd/MM/yyyy hh:mm tt");
  115. }
  116. set => SetProperty(ref formattedPickUpTime, value);
  117. }
  118. #endregion
  119. #region Constructor
  120. public AcceptedFutureBookingDetailViewModel()
  121. {
  122. Title = "Accepted Future Booking Detail";
  123. }
  124. #endregion
  125. #region Methods
  126. public async void LoadAcceptedFutureBooking(Guid bookingId)
  127. {
  128. string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, "");
  129. GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
  130. var booking = await gmCabsDriverService.GetBookingDetails(rydoAccessToken, bookingId);
  131. if (booking.BookingId == Guid.Empty)
  132. {
  133. await Shell.Current.GoToAsync("..");
  134. }
  135. Distance = booking.Distance;
  136. FormattedDistance = booking.Distance.ToString();
  137. StartAddress = booking.StartAddress;
  138. StartSuburb = booking.StartSuburb;
  139. EndAddress = booking.EndAddress;
  140. EndSuburb = booking.EndSuburb;
  141. IsCorporateBooking = booking.IsCorporate;
  142. FixedAmount = booking.FixedAmount;
  143. IsFutureBooking = booking.FutureBooking;
  144. PickUpTime = booking.PickupTime;
  145. FormattedPickUpTime = booking.PickupTime.ToString();
  146. BookingFee = 0;
  147. if (FixedAmount != null)
  148. {
  149. decimal amount = (decimal)(FixedAmount / 100.0);
  150. FareTypeValue = "$" + amount;
  151. }
  152. else
  153. {
  154. FareTypeValue = "METER";
  155. }
  156. RewardPoints = booking.RydoStars > 0 ? string.Format($"+{booking.RydoStars}") : booking.RydoStars.ToString();
  157. var preferredDriver = booking.PriorityDriver;
  158. if (preferredDriver)
  159. {
  160. if (booking.FareType == FareType.Fixed)
  161. {
  162. if (booking.FixedAmount > booking.MinFareAmount)
  163. {
  164. BookingFee = booking.ProviderChargeFixedFarePreferred.Value;
  165. }
  166. }
  167. else if (booking.FareType == FareType.Meter)
  168. {
  169. BookingFee = booking.ProviderChargeMeterFarePreferred.Value;
  170. }
  171. }
  172. else
  173. {
  174. if (booking.FareType == FareType.Fixed)
  175. {
  176. if (booking.FixedAmount > booking.MinFareAmount)
  177. {
  178. BookingFee = booking.ProviderChargeFixedFare.Value;
  179. }
  180. }
  181. else if (booking.FareType == FareType.Meter)
  182. {
  183. BookingFee = booking.ProviderChargeMeterFare.Value;
  184. }
  185. }
  186. }
  187. public async Task OnDeclineBookingClickedAsync()
  188. {
  189. string rydoAccessToken = Preferences.Get(EftposLoginResponse.RYDO_ACCESS_TOKEN, "");
  190. GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
  191. var result = await gmCabsDriverService.DeclineFutureBooking(rydoAccessToken, _bookingId);
  192. if (result)
  193. {
  194. await Shell.Current.GoToAsync("../AcceptedFutureBookingsPage");
  195. }
  196. }
  197. #endregion
  198. }
  199. }