示例#1
0
        public object Get(CurrentAccount request)
        {
            var session = this.GetSession();

            // Just in case someone was able to authenticate with a null session.
            if (!session.Id.HasValueTrimmed())
            {
                throw new HttpError(HttpStatusCode.Forbidden, "NoSession");
            }

            var account = _accountDao.FindById(new Guid(session.UserAuthId));

            var creditCard = account.DefaultCreditCard.HasValue
                ? _creditCardDao.FindById(account.DefaultCreditCard.Value)
                : null;

            var creditCardResource = creditCard != null
                ? new CreditCardDetails
            {
                CreditCardId      = creditCard.CreditCardId,
                AccountId         = creditCard.AccountId,
                NameOnCard        = creditCard.NameOnCard,
                Token             = creditCard.Token,
                Last4Digits       = creditCard.Last4Digits,
                CreditCardCompany = creditCard.CreditCardCompany,
                ExpirationMonth   = creditCard.ExpirationMonth,
                ExpirationYear    = creditCard.ExpirationYear,
                IsDeactivated     = creditCard.IsDeactivated,
                Label             = creditCard.Label,
                ZipCode           = creditCard.ZipCode,
                StreetNumber      = creditCard.StreetNumber,
                StreetName        = creditCard.StreetName,
                Email             = creditCard.Email,
                Phone             = creditCard.Phone
            }
                : null;

            var currentAccount = new CurrentAccountResponse
            {
                Id                    = account.Id,
                Email                 = account.Email,
                Name                  = account.Name,
                IbsAccountid          = account.IBSAccountId ?? 0,
                FacebookId            = account.FacebookId,
                TwitterId             = account.TwitterId,
                Settings              = account.Settings,
                Language              = account.Language,
                HasAdminAccess        = account.HasAdminAccess,
                IsSuperAdmin          = account.RoleNames.Contains(RoleName.SuperAdmin),
                DefaultCreditCard     = creditCardResource,
                DefaultTipPercent     = account.DefaultTipPercent,
                IsPayPalAccountLinked = account.IsPayPalAccountLinked
            };

            currentAccount.Settings.ChargeTypeId  = account.Settings.ChargeTypeId ?? _serverSettings.ServerData.DefaultBookingSettings.ChargeTypeId;
            currentAccount.Settings.VehicleTypeId = account.Settings.VehicleTypeId ?? _serverSettings.ServerData.DefaultBookingSettings.VehicleTypeId;
            currentAccount.Settings.ProviderId    = account.Settings.ProviderId ?? _serverSettings.ServerData.DefaultBookingSettings.ProviderId;

            return(currentAccount);
        }
示例#2
0
        private void ValidateCreditCard(AccountDetail account, string clientLanguageCode, string cvv, CreateReportOrder createReportOrder)
        {
            // check if the account has a credit card
            if (!account.DefaultCreditCard.HasValue)
            {
                ThrowAndLogException(createReportOrder, ErrorCode.CreateOrder_CardOnFileButNoCreditCard,
                                     GetCreateOrderServiceErrorMessage(ErrorCode.CreateOrder_CardOnFileButNoCreditCard, clientLanguageCode));
            }

            var creditCard = _creditCardDao.FindById(account.DefaultCreditCard.GetValueOrDefault());

            if (creditCard.IsExpired())
            {
                ThrowAndLogException(createReportOrder, ErrorCode.CreateOrder_RuleDisable, _resources.Get("CannotCreateOrder_CreditCardExpired", clientLanguageCode));
            }
            if (creditCard.IsDeactivated)
            {
                ThrowAndLogException(createReportOrder, ErrorCode.CreateOrder_CardOnFileDeactivated, _resources.Get("CannotCreateOrder_CreditCardDeactivated", clientLanguageCode));
            }

            if (_serverSettings.GetPaymentSettings().AskForCVVAtBooking &&
                !cvv.HasValue())
            {
                ThrowAndLogException(createReportOrder, ErrorCode.CreateOrder_RuleDisable, _resources.Get("CannotCreateOrder_CreditCardCvvRequired", clientLanguageCode));
            }
        }
示例#3
0
        public void Handle(OrderStatusChanged @event)
        {
            _logger.LogMessage("OrderPairingManager Handle : " + @event.Status.IBSStatusId);

            switch (@event.Status.IBSStatusId)
            {
            case VehicleStatuses.Common.Loaded:
            {
                if (@event.Status.IsPrepaid)
                {
                    // No need to pair, order was already paid
                    return;
                }

                var order = _orderDao.FindById(@event.SourceId);

                if (order.Settings.ChargeTypeId == ChargeTypes.CardOnFile.Id ||
                    order.Settings.ChargeTypeId == ChargeTypes.PayPal.Id)
                {
                    var account              = _accountDao.FindById(@event.Status.AccountId);
                    var creditCard           = _creditCardDao.FindById(account.DefaultCreditCard.GetValueOrDefault());
                    var cardToken            = creditCard != null ? creditCard.Token : null;
                    var defaultTipPercentage = account.DefaultTipPercent ?? _serverSettings.ServerData.DefaultTipPercentage;

                    var errorMessageKey = "TripUnableToPairErrorText";

                    var response = _paymentFacadeService.Pair(order.CompanyKey, @event.SourceId, cardToken, defaultTipPercentage);

                    if (response.IgnoreResponse)
                    {
                        // no need to interpret the response
                        return;
                    }

                    switch (response.ErrorCode)
                    {
                    case CmtErrorCodes.CreditCardDeclinedOnPreauthorization:
                        errorMessageKey = "CreditCardDeclinedOnPreauthorizationErrorText";
                        break;

                    case CmtErrorCodes.UnablePreauthorizeCreditCard:
                        errorMessageKey = "CreditCardUnableToPreathorizeErrorText";
                        break;
                    }

                    var ibsStatusDescription = response.IsSuccessful ? "OrderStatus_PairingSuccess" : errorMessageKey;

                    UpdateIBSStatusDescription(order.Id, order.ClientLanguageCode, ibsStatusDescription);

                    _notificationService.SendAutomaticPairingPush(@event.SourceId, creditCard, defaultTipPercentage, response.IsSuccessful, errorMessageKey);
                }
            }
            break;
            }
        }
示例#4
0
        public PreAuthorizePaymentResponse PreAuthorize(string companyKey, Guid orderId, AccountDetail account, decimal amountToPreAuthorize, bool isReAuth = false, bool isSettlingOverduePayment = false, bool isForPrepaid = false, string cvv = null)
        {
            var paymentId  = Guid.NewGuid();
            var creditCard = _creditCardDao.FindById(account.DefaultCreditCard.GetValueOrDefault());

            _commandBus.Send(new InitiateCreditCardPayment
            {
                PaymentId     = paymentId,
                Amount        = 0,
                TransactionId = string.Empty,
                OrderId       = orderId,
                CardToken     = creditCard.Token,
                Provider      = PaymentProvider.Cmt,
                IsNoShowFee   = false,
                CompanyKey    = companyKey
            });

            return(new PreAuthorizePaymentResponse
            {
                IsSuccessful = true,
                Message = string.Empty
            });
        }
示例#5
0
        public PairingResponse Pair(string companyKey, Guid orderId, string cardToken, int autoTipPercentage)
        {
            var order = _orderDao.FindById(orderId);

            if (IsPayPal(null, order))
            {
                return(_payPalServiceFactory.GetInstance(companyKey).Pair(orderId, autoTipPercentage));
            }

            var account    = _accountDao.FindById(order.AccountId);
            var creditCard = _creditCardDao.FindById(account.DefaultCreditCard.GetValueOrDefault());

            return(GetInstance(companyKey).Pair(companyKey, orderId, creditCard.Token, autoTipPercentage));
        }
示例#6
0
        private void SendFeesReceipt(Guid orderId, decimal feeAmount, FeeTypes feeType)
        {
            var order      = _orderDao.FindById(orderId);
            var account    = _accountDao.FindById(order.AccountId);
            var creditCard = _creditCardDao.FindById(account.DefaultCreditCard.GetValueOrDefault());

            if (feeType == FeeTypes.Cancellation)
            {
                _notificationService.SendCancellationFeesReceiptEmail(order.IBSOrderId ?? 0, Convert.ToDouble(feeAmount), creditCard.Last4Digits, account.Email, account.Language);
            }
            else if (feeType == FeeTypes.NoShow)
            {
                _notificationService.SendNoShowFeesReceiptEmail(order.IBSOrderId ?? 0, Convert.ToDouble(feeAmount), order.PickupAddress, creditCard.Last4Digits, account.Email, account.Language);
            }
        }
示例#7
0
        private AccountManagementModel InitializeModel(Guid accountId)
        {
            var accountDetail = _accountDao.FindById(accountId);

            var orders             = GetOrderDetails(accountId) ?? new List <OrderDetail>();
            var ordersCount        = orders.Count();
            var accountAgeInDays   = (DateTime.UtcNow - accountDetail.CreationDate).TotalDays;
            var averageTripsPerDay = decimal.Round((decimal)(ordersCount / accountAgeInDays), 1);
            var totalCanceled      = GetOrderStatusDetails(accountId).Count(x => x.IBSStatusId == VehicleStatuses.Common.Cancelled || x.IBSStatusId == VehicleStatuses.Common.CancelledDone);
            var totalCompleted     = orders.Count(order => order.Status == (int)OrderStatus.Completed);
            var totalNoShow        = GetOrderStatusDetails(accountId).Count(x => x.IBSStatusId == VehicleStatuses.Common.NoShow);

            var model = new AccountManagementModel
            {
                Id                    = accountId,
                Name                  = accountDetail.Name,
                Email                 = accountDetail.Email,
                CustomerNumber        = accountDetail.Settings.CustomerNumber,
                CreationDate          = accountDetail.CreationDate,
                FacebookAccount       = accountDetail.FacebookId,
                IBSAccountId          = accountDetail.IBSAccountId,
                IsConfirmed           = accountDetail.IsConfirmed,
                IsEnabled             = !accountDetail.DisabledByAdmin,
                CountryCode           = accountDetail.Settings.Country,
                PhoneNumber           = accountDetail.Settings.Phone,
                ChargeType            = accountDetail.Settings.ChargeType,
                DefaultTipPercent     = accountDetail.DefaultTipPercent,
                IsPayPalAccountLinked = accountDetail.IsPayPalAccountLinked,
                TotalCanceled         = totalCanceled,
                TotalCompleted        = totalCompleted,
                AverageTripsPerDay    = averageTripsPerDay,
                TotalNoShows          = totalNoShow
            };

            if (accountDetail.DefaultCreditCard != null)
            {
                var defaultCreditCard = _creditCardDao.FindById(accountDetail.DefaultCreditCard.Value);
                model.CreditCardLast4Digits = defaultCreditCard.Last4Digits;
            }

            model.Notes = _accountNoteService.FindByAccountId(accountId)
                          .OrderByDescending(c => c.CreationDate)
                          .Select(x => new NoteModel(x))
                          .ToList();

            return(model);
        }
示例#8
0
        /// <summary>
        /// This endpoint is used by Cmt to send us the pairing token.
        /// </summary>
        public object Post(CmtPaymentPairingRequest request)
        {
            _logger.LogMessage("Pairing info received for order {0} and PairingToken {1}", request.OrderUuid, request.PairingToken ?? "Unknown");
            if (Guid.Empty == request.OrderUuid || request.PairingToken.HasValueTrimmed())
            {
                throw new HttpError(HttpStatusCode.BadRequest, "400", "Missing required parameter");
            }

            var orderStatusDetail = _orderDao.FindOrderStatusById(request.OrderUuid);

            if (orderStatusDetail == null)
            {
                throw new HttpError(HttpStatusCode.BadRequest, "401", "Cannot find OrderId");
            }

            var account = _accountDao.FindById(orderStatusDetail.AccountId);

            if (!account.DefaultCreditCard.HasValue)
            {
                throw new HttpError(HttpStatusCode.BadRequest, "402", "User does not have a currently set creditcard");
            }

            var creditCard = _creditCardDao.FindById(account.DefaultCreditCard.Value);

            var tripInfoServiceHelper = GetTripInfoServiceHelper(orderStatusDetail.CompanyKey);

            var tripInfo = tripInfoServiceHelper.WaitForTripInfo(request.PairingToken, request.TimeoutSeconds ?? DefaultTimeoutSeconds);

            _commandBus.Send(new PairForPayment
            {
                OrderId      = request.OrderUuid,
                Medallion    = orderStatusDetail.VehicleNumber,
                DriverId     = tripInfo.DriverId.ToString(),
                PairingToken = tripInfo.PairingToken,
                TokenOfCardToBeUsedForPayment = creditCard.Token,
                AutoTipPercentage             = tripInfo.AutoTipPercentage
            });

            return(new CmtPaymentPairingResponse
            {
                CustomerId = account.Id,
                CustomerName = account.Name,
                CardOnFileId = creditCard.Token,
                TripRequestNumber = orderStatusDetail.IBSStatusId
            });
        }
        public PreAuthorizePaymentResponse PreAuthorize(string companyKey, Guid orderId, AccountDetail account, decimal amountToPreAuthorize, bool isReAuth = false, bool isSettlingOverduePayment = false, bool isForPrepaid = false, string cvv = null)
        {
            var      message         = string.Empty;
            var      transactionId   = string.Empty;
            DateTime?transactionDate = null;

            try
            {
                bool isSuccessful;
                var  isCardDeclined = false;
                var  creditCard     = _creditCardDao.FindById(account.DefaultCreditCard.GetValueOrDefault());

                var order = _orderDao.FindOrderStatusById(orderId);

                // We cannot re-use the same id has a previously failed payment
                var shouldGenerateNewOrderId = isReAuth || isSettlingOverduePayment;

                var orderIdentifier = shouldGenerateNewOrderId
                    ? string.Format("{0}-{1}", orderId, GenerateShortUid())
                    : orderId.ToString();

                if (amountToPreAuthorize > 0)
                {
                    // PreAuthorize transaction
                    var monerisSettings = _serverPaymentSettings.MonerisPaymentSettings;

                    var customerId = monerisSettings.UseCarIdInTransaction
                        ? order.SelectOrDefault(o => o.VehicleNumber)
                        : order != null?order.DriverInfos.SelectOrDefault(driverInfos => driverInfos.DriverId) : null;

                    var preAuthorizeCommand = new ResPreauthCC(creditCard.Token, orderIdentifier, customerId, amountToPreAuthorize.ToString("F"), CryptType_SSLEnabledMerchant);
                    AddCvvInfo(preAuthorizeCommand, cvv);

                    var info = new AvsInfo();
                    if (_serverPaymentSettings.EnableAddressVerification)
                    {
                        info.SetAvsStreetName(creditCard.StreetName);
                        info.SetAvsStreetNumber(creditCard.StreetNumber);
                        info.SetAvsZipCode(creditCard.ZipCode);
                        info.SetAvsCustPhone(creditCard.Phone);
                        info.SetAvsEmail(creditCard.Email);
                        preAuthorizeCommand.SetAvsInfo(info);
                    }

                    var preAuthRequest = MonerisHttpRequestWrapper.NewHttpsPostRequest(monerisSettings.Host, monerisSettings.StoreId, monerisSettings.ApiToken, preAuthorizeCommand);
                    var preAuthReceipt = preAuthRequest.GetAndLogReceipt(_logger);

                    isSuccessful    = RequestSuccesful(preAuthReceipt, out message);
                    isCardDeclined  = IsCardDeclined(preAuthReceipt);
                    transactionId   = preAuthReceipt.GetTxnNumber();
                    transactionDate = GetTransactionDate(preAuthReceipt);
                }
                else
                {
                    // if we're preauthorizing $0, we skip the preauth with payment provider
                    // but we still send the InitiateCreditCardPayment command
                    // this should never happen in the case of a real preauth (hence the minimum of $50)
                    isSuccessful = true;
                }

                if (isSuccessful && !isReAuth)
                {
                    var paymentId = Guid.NewGuid();
                    _commandBus.Send(new InitiateCreditCardPayment
                    {
                        PaymentId     = paymentId,
                        Amount        = amountToPreAuthorize,
                        TransactionId = transactionId,
                        OrderId       = orderId,
                        CardToken     = creditCard.Token,
                        Provider      = PaymentProvider.Moneris,
                        IsNoShowFee   = false,
                        CompanyKey    = companyKey
                    });
                }

                return(new PreAuthorizePaymentResponse
                {
                    IsSuccessful = isSuccessful,
                    Message = message,
                    TransactionId = transactionId,
                    ReAuthOrderId = shouldGenerateNewOrderId ? orderIdentifier : null,
                    IsDeclined = isCardDeclined,
                    TransactionDate = transactionDate,
                });
            }
            catch (Exception e)
            {
                _logger.LogMessage(string.Format("Error during preauthorization (validation of the card) for client {0}: {1} - {2}", account.Email, message, e));
                _logger.LogError(e);

                return(new PreAuthorizePaymentResponse
                {
                    IsSuccessful = false,
                    Message = message
                });
            }
        }
示例#10
0
        public PreAuthorizePaymentResponse PreAuthorize(string companyKey, Guid orderId, AccountDetail account, decimal amountToPreAuthorize, bool isReAuth = false, bool isSettlingOverduePayment = false, bool isForPrepaid = false, string cvv = null)
        {
            var      message         = string.Empty;
            var      transactionId   = string.Empty;
            DateTime?transactionDate = null;

            try
            {
                bool isSuccessful;
                var  isCardDeclined  = false;
                var  orderIdentifier = isReAuth ? string.Format("{0}-{1}", orderId, GenerateShortUid()) : orderId.ToString();
                var  creditCard      = _creditCardDao.FindById(account.DefaultCreditCard.GetValueOrDefault());

                if (amountToPreAuthorize > 0)
                {
                    var transactionRequest = new TransactionRequest
                    {
                        Amount             = amountToPreAuthorize,
                        PaymentMethodToken = creditCard.Token,
                        OrderId            = orderIdentifier,
                        Channel            = "MobileKnowledgeSystems_SP_MEC",
                        Options            = new TransactionOptionsRequest
                        {
                            SubmitForSettlement = false
                        }
                    };

                    AddCvvInfo(transactionRequest, cvv);

                    //sale
                    var result = BraintreeGateway.Transaction.Sale(transactionRequest);

                    message         = result.Message;
                    isSuccessful    = result.IsSuccess();
                    isCardDeclined  = IsCardDeclined(result.Transaction);
                    transactionId   = isSuccessful ? result.Target.Id : result.Transaction.Id;
                    transactionDate = isSuccessful ? result.Target.CreatedAt : result.Transaction.CreatedAt;
                }
                else
                {
                    // if we're preauthorizing $0, we skip the preauth with payment provider
                    // but we still send the InitiateCreditCardPayment command
                    // this should never happen in the case of a real preauth (hence the minimum of $50)
                    isSuccessful = true;
                }

                if (isSuccessful && !isReAuth)
                {
                    var paymentId = Guid.NewGuid();
                    _commandBus.Send(new InitiateCreditCardPayment
                    {
                        PaymentId     = paymentId,
                        Amount        = amountToPreAuthorize,
                        TransactionId = transactionId,
                        OrderId       = orderId,
                        CardToken     = creditCard.Token,
                        Provider      = PaymentProvider.Braintree,
                        IsNoShowFee   = false,
                        CompanyKey    = companyKey
                    });
                }

                return(new PreAuthorizePaymentResponse
                {
                    IsSuccessful = isSuccessful,
                    Message = message,
                    TransactionId = transactionId,
                    ReAuthOrderId = isReAuth ? orderIdentifier : null,
                    IsDeclined = isCardDeclined,
                    TransactionDate = transactionDate
                });
            }
            catch (Exception e)
            {
                _logger.LogMessage(string.Format("Error during preauthorization (validation of the card) for client {0}: {1} - {2}", account.Email, message, e));
                _logger.LogError(e);

                return(new PreAuthorizePaymentResponse
                {
                    IsSuccessful = false,
                    Message = message
                });
            }
        }
        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
                });
            }
        }
示例#12
0
 public object Get(CreditCardInfoRequest request)
 {
     return(_dao.FindById(request.CreditCardId));
 }