private Trip GetTripInfo(string pairingToken)
        {
            var cmtMobileServiceClient   = new CmtMobileServiceClient(_serverSettings.GetPaymentSettings().CmtPaymentSettings, null, null, null);
            var cmtTripInfoServiceHelper = new CmtTripInfoServiceHelper(cmtMobileServiceClient, _logger);

            return(cmtTripInfoServiceHelper.GetTripInfo(pairingToken));
        }
Example #2
0
        public void Handle(OrderStatusChanged @event)
        {
            if (@event.IsCompleted)
            {
                if (@event.Status.IsPrepaid)
                {
                    // Send receipt for PrePaid
                    // No tolls and surcharge for prepaid orders
                    SendTripReceipt(@event.SourceId,
                                    Convert.ToDecimal(@event.Fare ?? 0),
                                    Convert.ToDecimal(@event.Tip ?? 0),
                                    Convert.ToDecimal(@event.Tax ?? 0));
                }
                else
                {
                    var order       = _orderDao.FindById(@event.SourceId);
                    var pairingInfo = _orderDao.FindOrderPairingById(@event.SourceId);

                    var orderStatus = _orderDao.FindOrderStatusById(@event.SourceId);
                    if (CmtErrorCodes.IsTerminalError(orderStatus.PairingError))
                    {
                        return;
                    }

                    if (order.Settings.ChargeTypeId == ChargeTypes.PaymentInCar.Id)
                    {
                        // Send receipt for Pay in Car
                        SendTripReceipt(@event.SourceId,
                                        Convert.ToDecimal(@event.Fare ?? 0),
                                        Convert.ToDecimal(@event.Tip ?? 0),
                                        Convert.ToDecimal(@event.Tax ?? 0),
                                        toll: Convert.ToDecimal(@event.Toll ?? 0),
                                        surcharge: Convert.ToDecimal(@event.Surcharge ?? 0));
                    }
                    else if (pairingInfo != null && pairingInfo.DriverId.HasValue() && pairingInfo.Medallion.HasValue() && pairingInfo.PairingToken.HasValue())
                    {
                        // Send receipt for CMTRideLinq
                        InitializeCmtServiceClient(order.CompanyKey);

                        var tripInfo = _cmtTripInfoServiceHelper.GetTripInfo(pairingInfo.PairingToken);
                        if (tripInfo != null && !tripInfo.ErrorCode.HasValue && tripInfo.EndTime.HasValue)
                        {
                            var tollHistory = tripInfo.TollHistory != null
                                                                ? tripInfo.TollHistory.Sum(p => p.TollAmount)
                                                                : 0;

                            var meterAmount         = Math.Round(((double)tripInfo.Fare / 100), 2);
                            var tollAmount          = Math.Round(((double)tollHistory / 100), 2);
                            var tipAmount           = Math.Round(((double)tripInfo.Tip / 100), 2);
                            var taxAmount           = Math.Round(((double)tripInfo.Tax / 100), 2);
                            var surchargeAmount     = Math.Round(((double)tripInfo.Surcharge / 100), 2);
                            var extraAmount         = Math.Round(((double)tripInfo.Extra / 100), 2);
                            var accessFee           = Math.Round(((double)tripInfo.AccessFee / 100), 2);
                            var fareAtAlternateRate = Math.Round(((double)tripInfo.FareAtAlternateRate / 100), 2);

                            var tolls = new List <TollDetail>();

                            if (tripInfo.TollHistory != null)
                            {
                                tolls.AddRange(tripInfo.TollHistory.Select(toll =>
                                                                           new TollDetail
                                {
                                    TollName   = toll.TollName,
                                    TollAmount = toll.TollAmount
                                }));
                            }

                            SendTripReceipt(@event.SourceId,
                                            Convert.ToDecimal(meterAmount),
                                            Convert.ToDecimal(tipAmount),
                                            Convert.ToDecimal(taxAmount),
                                            extra: Convert.ToDecimal(extraAmount),
                                            toll: Convert.ToDecimal(tollAmount),
                                            surcharge: Convert.ToDecimal(surchargeAmount),
                                            cmtRideLinqFields: new SendReceipt.CmtRideLinqReceiptFields
                            {
                                DriverId            = tripInfo.DriverId.ToString(),
                                PickUpDateTime      = tripInfo.StartTime,
                                DropOffDateTime     = tripInfo.EndTime,
                                TripId              = tripInfo.TripId,
                                Distance            = tripInfo.Distance,
                                LastFour            = tripInfo.LastFour,
                                AccessFee           = accessFee,
                                FareAtAlternateRate = fareAtAlternateRate,
                                RateAtTripEnd       = tripInfo.RateAtTripEnd,
                                RateAtTripStart     = tripInfo.RateAtTripStart,
                                Tolls        = tolls.ToArray(),
                                TipIncentive = order.TipIncentive ?? 0
                            });
                        }
                    }
                }
            }
        }