public void GoToManualRideLinq(OrderManualRideLinqDetail detail, bool isRestoringFromBackground = false) { CurrentViewState = HomeViewModelState.ManualRidelinq; _orderWorkflowService.SetAddresses(new Address(), new Address()); BookingStatus.StartBookingStatus(detail, isRestoringFromBackground); }
public object Post(ManualRideLinqPairingRequest request) { try { var accountId = new Guid(this.GetSession().UserAuthId); var account = _accountDao.FindById(accountId); ValidateAppVersion(account); var currentRideLinq = _orderDao.GetCurrentManualRideLinq(request.PairingCode, account.Id); if (currentRideLinq != null) { return(new ManualRideLinqResponse { Data = currentRideLinq, IsSuccessful = true, Message = "Ok" }); } var creditCard = account.DefaultCreditCard.HasValue ? _creditCardDao.FindById(account.DefaultCreditCard.Value) : null; if (creditCard == null) { throw new HttpError(HttpStatusCode.BadRequest, ErrorCode.ManualRideLinq_NoCardOnFile.ToString(), _resources.Get("ManualRideLinq_NoCardOnFile", account.Language)); } if (creditCard.IsDeactivated) { throw new HttpError(HttpStatusCode.BadRequest, ErrorCode.ManualRideLinq_CardOnFileDeactivated.ToString(), _resources.Get("ManualRideLinq_CreditCardDisabled", account.Language)); } // Send pairing request to CMT API var pairingRequest = new ManualRideLinqCoFPairingRequest { AutoTipPercentage = account.DefaultTipPercent ?? _serverSettings.ServerData.DefaultTipPercentage, CustomerId = accountId.ToString(), CustomerName = account.Name, Latitude = request.PickupAddress.Latitude, Longitude = request.PickupAddress.Longitude, PairingCode = request.PairingCode, AutoCompletePayment = true, CardOnFileId = creditCard.Token, LastFour = creditCard.Last4Digits, ZipCode = creditCard.ZipCode, Email = account.Email, CustomerIpAddress = RequestContext.IpAddress, BillingFullName = creditCard.NameOnCard, SessionId = request.KountSessionId }; _logger.LogMessage("Pairing for manual RideLinq with Pairing Code {0}", request.PairingCode); var response = _cmtMobileServiceClient.Post(pairingRequest); _logger.LogMessage("Pairing result: {0}", response.ToJson()); var trip = _cmtTripInfoServiceHelper.WaitForTripInfo(response.PairingToken, response.TimeoutSeconds); if (trip.HttpStatusCode == (int)HttpStatusCode.OK) { var command = new CreateOrderForManualRideLinqPair { OrderId = Guid.NewGuid(), AccountId = accountId, UserAgent = Request.UserAgent, ClientVersion = Request.Headers.Get("ClientVersion"), PairingCode = request.PairingCode, PickupAddress = request.PickupAddress, PairingToken = response.PairingToken, PairingDate = DateTime.Now, ClientLanguageCode = request.ClientLanguageCode, Distance = trip.Distance, StartTime = trip.StartTime, EndTime = trip.EndTime, Extra = Math.Round(((double)trip.Extra / 100), 2), Fare = Math.Round(((double)trip.Fare / 100), 2), Tax = Math.Round(((double)trip.Tax / 100), 2), Tip = Math.Round(((double)trip.Tip / 100), 2), Toll = trip.TollHistory.Sum(toll => Math.Round(((double)toll.TollAmount / 100), 2)), Surcharge = Math.Round(((double)trip.Surcharge / 100), 2), Total = Math.Round(((double)trip.Total / 100), 2), FareAtAlternateRate = Math.Round(((double)trip.FareAtAlternateRate / 100), 2), Medallion = response.Medallion, DeviceName = response.DeviceName, RateAtTripStart = trip.RateAtTripStart, RateAtTripEnd = trip.RateAtTripEnd, RateChangeTime = trip.RateChangeTime, TripId = trip.TripId, DriverId = trip.DriverId, LastFour = trip.LastFour, AccessFee = Math.Round(((double)trip.AccessFee / 100), 2), OriginatingIpAddress = request.CustomerIpAddress, KountSessionId = request.KountSessionId, CreditCardId = creditCard.CreditCardId, }; _commandBus.Send(command); var data = new OrderManualRideLinqDetail { OrderId = command.OrderId, Distance = trip.Distance, StartTime = trip.StartTime, EndTime = trip.EndTime, Extra = command.Extra, Fare = command.Fare, Tax = command.Tax, Tip = command.Tip, Toll = command.Toll, Surcharge = command.Surcharge, Total = command.Total, FareAtAlternateRate = command.FareAtAlternateRate, Medallion = response.Medallion, DeviceName = response.DeviceName, RateAtTripStart = command.RateAtTripStart, RateAtTripEnd = command.RateAtTripEnd, RateChangeTime = trip.RateChangeTime, AccountId = accountId, PairingDate = command.PairingDate, PairingCode = pairingRequest.PairingCode, PairingToken = trip.PairingToken, DriverId = trip.DriverId, LastFour = command.LastFour, AccessFee = command.AccessFee }; return(new ManualRideLinqResponse { Data = data, IsSuccessful = true, Message = "Ok", TripInfoHttpStatusCode = trip.HttpStatusCode, ErrorCode = trip.ErrorCode.ToString() }); } else { if (trip.HttpStatusCode == (int)HttpStatusCode.BadRequest) { switch (trip.ErrorCode) { case CmtErrorCodes.CreditCardDeclinedOnPreauthorization: _notificationService.SendCmtPaymentFailedPush(accountId, _resources.Get("CreditCardDeclinedOnPreauthorizationErrorText", request.ClientLanguageCode)); break; case CmtErrorCodes.UnablePreauthorizeCreditCard: _notificationService.SendCmtPaymentFailedPush(accountId, _resources.Get("CreditCardUnableToPreathorizeErrorText", request.ClientLanguageCode)); break; default: _notificationService.SendCmtPaymentFailedPush(accountId, _resources.Get("TripUnableToPairErrorText", request.ClientLanguageCode)); break; } } return(new ManualRideLinqResponse { IsSuccessful = false, TripInfoHttpStatusCode = trip.HttpStatusCode, ErrorCode = trip.ErrorCode != null?trip.ErrorCode.ToString() : null }); } } catch (WebServiceException ex) { _logger.LogMessage( string.Format("A WebServiceException occured while trying to manually pair with CMT with pairing code: {0}", request.PairingCode)); _logger.LogError(ex); ErrorResponse errorResponse = null; if (ex.ResponseBody != null) { _logger.LogMessage("Error Response: {0}", ex.ResponseBody); errorResponse = ex.ResponseBody.FromJson <ErrorResponse>(); } return(new ManualRideLinqResponse { IsSuccessful = false, Message = errorResponse != null ? errorResponse.Message : ex.ErrorMessage, ErrorCode = errorResponse != null?errorResponse.ResponseCode.ToString() : ex.ErrorCode }); } catch (Exception ex) { _logger.LogMessage(string.Format("An error occured while trying to manually pair with CMT with pairing code: {0}", request.PairingCode)); _logger.LogError(ex); return(new ManualRideLinqResponse { IsSuccessful = false, Message = ex.Message }); } }