Beispiel #1
0
        public object Post(ExportDataRequest request)
        {
            var offset = new TimeSpan(_serverSettings.ServerData.IBS.TimeDifference);

            var startDate = request.StartDate ?? DateTime.MinValue;
            var endDate   = request.EndDate.HasValue ? request.EndDate.Value.AddDays(1) : DateTime.MaxValue;// Add one day to include the current day since it ends at midnight
            var accountId = request.AccountId;

            switch (request.Target)
            {
            case DataType.Accounts:
                var accounts    = _accountDao.GetAll().Where(x => x.CreationDate >= startDate && x.CreationDate <= endDate).ToList();
                var startUpLogs = _appStartUpLogDao.GetAll().ToList();

                // We join each accound details with their "last launch details"
                return(from a in accounts
                       join s in startUpLogs on a.Id equals s.UserId into matchingLog
                       from m in matchingLog.DefaultIfEmpty()
                       select new
                {
                    a.Id,
                    a.IBSAccountId,
                    CreateDate = TimeZoneHelper.TransformToLocalTime(_serverSettings.ServerData.CompanyTimeZone, a.CreationDate).ToString("d", CultureInfo.InvariantCulture),
                    CreateTime = TimeZoneHelper.TransformToLocalTime(_serverSettings.ServerData.CompanyTimeZone, a.CreationDate).ToString("t", CultureInfo.InvariantCulture),
                    a.Settings.Name,
                    a.Settings.Phone,
                    a.Email,
                    a.DefaultCreditCard,
                    a.DefaultTipPercent,
                    a.Language,
                    a.TwitterId,
                    a.FacebookId,
                    a.HasAdminAccess,
                    a.IsConfirmed,
                    a.DisabledByAdmin,
                    a.Settings.PayBack,
                    LastLaunch = (m == null ? null : TimeZoneHelper.TransformToLocalTime(_serverSettings.ServerData.CompanyTimeZone, m.DateOccured).ToString(CultureInfo.InvariantCulture)),
                    Platform = (m == null ? null : m.Platform),
                    PlatformDetails = (m == null ? null : m.PlatformDetails),
                    ApplicationVersion = (m == null ? null : m.ApplicationVersion),
                    ServerVersion = (m == null ? null : m.ServerVersion)
                });

            case DataType.Orders:

                var orders = (accountId.HasValue()) ? _reportDao.GetOrderReportsByAccountId((Guid)accountId) : _reportDao.GetOrderReports(startDate, endDate);

                var exportedOrderReports = new List <Dictionary <string, string> >();

                orders.ForEach(orderReport =>
                {
                    var orderReportEntry = new Dictionary <string, string>();

                    orderReportEntry["Account.AccountId"] = orderReport.Account.AccountId.ToString();

                    if (orderReport.Account.Name.HasValue())
                    {
                        orderReportEntry["Account.Name"] = orderReport.Account.Name.Trim();
                    }

                    if (orderReport.Account.Phone.HasValue())
                    {
                        orderReportEntry["Account.Phone"] = orderReport.Account.Phone.Trim();
                    }

                    if (orderReport.Account.Email.HasValue())
                    {
                        orderReportEntry["Account.Email"] = orderReport.Account.Email.Trim();
                    }

                    orderReportEntry["Account.IBSAccountId"]      = orderReport.Account.IBSAccountId.ToString();
                    orderReportEntry["Account.DefaultCardToken "] = orderReport.Account.DefaultCardToken.ToString();
                    orderReportEntry["Account.PayBack "]          = orderReport.Account.PayBack;

                    orderReportEntry["Order.GUID"]        = orderReport.Id.ToString();
                    orderReportEntry["Order.CompanyName"] = orderReport.Order.CompanyName;
                    orderReportEntry["Order.CompanyKey"]  = orderReport.Order.CompanyKey;
                    orderReportEntry["Order.Market"]      = orderReport.Order.Market;
                    orderReportEntry["Order.IBSOrderId"]  = orderReport.Order.IBSOrderId.ToString();
                    orderReportEntry["Order.ChargeType"]  = orderReport.Order.ChargeType;
                    orderReportEntry["Charge Account with Card on File Payment"] = orderReport.Order.IsChargeAccountPaymentWithCardOnFile.ToString();
                    orderReportEntry["Order.IsPrepaid"]  = orderReport.Order.IsPrepaid.ToString();
                    orderReportEntry["Order.PickupDate"] = orderReport.Order.PickupDateTime.HasValue
                       ? orderReport.Order.PickupDateTime.Value.ToString("d", CultureInfo.InvariantCulture)
                       : string.Empty;
                    orderReportEntry["Order.PickupTime"] = orderReport.Order.PickupDateTime.HasValue
                       ? orderReport.Order.PickupDateTime.Value.ToString("t", CultureInfo.InvariantCulture)
                       : string.Empty;
                    orderReportEntry["Order.CreateDate"] = orderReport.Order.CreateDateTime.HasValue
                       ? orderReport.Order.CreateDateTime.Value.Add(offset).ToString("d", CultureInfo.InvariantCulture)
                       : string.Empty;
                    orderReportEntry["Order.CreateTime"] = orderReport.Order.CreateDateTime.HasValue
                       ? orderReport.Order.CreateDateTime.Value.Add(offset).ToString("t", CultureInfo.InvariantCulture)
                       : string.Empty;
                    orderReportEntry["Order.PickupAddress"]  = orderReport.Order.PickupAddress.DisplayAddress;
                    orderReportEntry["Order.DropOffAddress"] = orderReport.Order.DropOffAddress.DisplayAddress;
                    orderReportEntry["Order.WasSwitchedToAnotherCompany"] = orderReport.Order.WasSwitchedToAnotherCompany.ToString();
                    orderReportEntry["Order.HasTimedOut"] = orderReport.Order.HasTimedOut.ToString();
                    orderReportEntry["Order.OriginalEta"] = orderReport.Order.OriginalEta.ToString();
                    orderReportEntry["Order.Error"]       = orderReport.Order.Error;

                    orderReportEntry["OrderStatus.Status"]           = orderReport.OrderStatus.Status.ToString();
                    orderReportEntry["OrderStatus.OrderIsCancelled"] = orderReport.OrderStatus.OrderIsCancelled.ToString();
                    orderReportEntry["OrderStatus.OrderIsCompleted"] = orderReport.OrderStatus.OrderIsCompleted.ToString();

                    orderReportEntry["Payment.Id"]                        = orderReport.Payment.PaymentId.ToString();
                    orderReportEntry["Payment.DriverId"]                  = orderReport.Payment.DriverId;
                    orderReportEntry["Payment.Medallion"]                 = orderReport.Payment.Medallion;
                    orderReportEntry["Payment.Last4Digits"]               = orderReport.Payment.Last4Digits.IsNullOrEmpty() ? string.Empty : string.Format("'{0}'", orderReport.Payment.Last4Digits);
                    orderReportEntry["Payment.MeterAmount"]               = orderReport.Payment.MeterAmount.ToString();
                    orderReportEntry["Payment.TipAmount"]                 = orderReport.Payment.TipAmount.ToString();
                    orderReportEntry["Payment.TotalAmountCharged"]        = orderReport.Payment.TotalAmountCharged.ToString();
                    orderReportEntry["Payment.Type"]                      = orderReport.Payment.Type.ToString();
                    orderReportEntry["Payment.Provider"]                  = orderReport.Payment.Provider.ToString();
                    orderReportEntry["Payment.FirstPreAuthTransactionId"] = orderReport.Payment.FirstPreAuthTransactionId.ToSafeString();
                    orderReportEntry["Payment.TransactionId"]             = orderReport.Payment.TransactionId.ToSafeString();
                    orderReportEntry["Payment.AuthorizationCode"]         = orderReport.Payment.AuthorizationCode;
                    orderReportEntry["Payment.CardToken"]                 = orderReport.Payment.CardToken;
                    orderReportEntry["Payment.PayPalPayerId"]             = orderReport.Payment.PayPalPayerId;
                    orderReportEntry["Payment.PayPalToken"]               = orderReport.Payment.PayPalToken;
                    orderReportEntry["Payment.MdtTip"]                    = orderReport.Payment.MdtTip.ToString();
                    orderReportEntry["Payment.MdtToll"]                   = orderReport.Payment.MdtToll.ToString();
                    orderReportEntry["Payment.MdtFare"]                   = orderReport.Payment.MdtFare.ToString();
                    orderReportEntry["Payment.BookingFees"]               = orderReport.Payment.BookingFees.ToString();
                    orderReportEntry["Payment.CmtPairingToken"]           = orderReport.Payment.PairingToken;
                    orderReportEntry["Payment.IsPaired"]                  = orderReport.Payment.IsPaired.ToString();
                    orderReportEntry["Payment.WasUnpaired"]               = orderReport.Payment.WasUnpaired.ToString();
                    orderReportEntry["Payment.IsCompleted"]               = orderReport.Payment.IsCompleted.ToString();
                    orderReportEntry["Payment.IsCancelled"]               = orderReport.Payment.IsCancelled.ToString();
                    orderReportEntry["Payment.IsRefunded"]                = orderReport.Payment.IsRefunded.ToString();
                    orderReportEntry["Payment.WasChargedNoShowFee"]       = orderReport.Payment.WasChargedNoShowFee.ToString();
                    orderReportEntry["Payment.WasChargedCancellationFee"] = orderReport.Payment.WasChargedCancellationFee.ToString();
                    orderReportEntry["Payment.WasChargedBookingFee"]      = orderReport.Payment.WasChargedBookingFee.ToString();
                    orderReportEntry["Payment.Error"]                     = orderReport.Payment.Error;

                    orderReportEntry["Promotion.Code"]        = orderReport.Promotion.Code;
                    orderReportEntry["Promotion.WasApplied"]  = orderReport.Promotion.WasApplied.ToString();
                    orderReportEntry["Promotion.WasRedeemed"] = orderReport.Promotion.WasRedeemed.ToString();
                    orderReportEntry["Promotion.SavedAmount"] = orderReport.Promotion.SavedAmount.ToString();

                    orderReportEntry["VehicleInfos.Number"]          = orderReport.VehicleInfos.Number;
                    orderReportEntry["VehicleInfos.Type"]            = orderReport.VehicleInfos.Type;
                    orderReportEntry["VehicleInfos.Make"]            = orderReport.VehicleInfos.Make;
                    orderReportEntry["VehicleInfos.Model"]           = orderReport.VehicleInfos.Model;
                    orderReportEntry["VehicleInfos.Color"]           = orderReport.VehicleInfos.Color;
                    orderReportEntry["VehicleInfos.Registration"]    = orderReport.VehicleInfos.Registration;
                    orderReportEntry["VehicleInfos.DriverId"]        = orderReport.VehicleInfos.DriverId;
                    orderReportEntry["VehicleInfos.DriverFirstName"] = orderReport.VehicleInfos.DriverFirstName;
                    orderReportEntry["VehicleInfos.DriverLastName"]  = orderReport.VehicleInfos.DriverLastName;

                    orderReportEntry["Client.OperatingSystem"] = orderReport.Client.OperatingSystem;
                    orderReportEntry["Client.UserAgent"]       = orderReport.Client.UserAgent;
                    orderReportEntry["Client.Version"]         = orderReport.Client.Version;

                    var rating = (JsonSerializer.DeserializeFromString(orderReport.Rating, typeof(Dictionary <string, string>)) as Dictionary <string, string>) ?? new Dictionary <string, string>();

                    foreach (var rate in rating)
                    {
                        orderReportEntry["Rating." + rate.Key] = rate.Value;
                    }

                    exportedOrderReports.Add(orderReportEntry);
                });

                return(exportedOrderReports);

            case DataType.Promotions:
                var exportedPromotions = new List <Dictionary <string, string> >();

                var promotions = _promotionsDao.GetAll().Where(x => (!x.StartDate.HasValue || (x.StartDate.HasValue && x.StartDate.Value <= endDate)) &&
                                                               (!x.EndDate.HasValue || (x.EndDate.HasValue && x.EndDate.Value >= startDate))).ToArray();

                for (int i = 0; i < promotions.Length; i++)
                {
                    var promo = new Dictionary <string, string>();
                    promo["Name"]        = promotions[i].Name;
                    promo["Description"] = promotions[i].Description;
                    promo["StartDate"]   = promotions[i].StartDate.HasValue ? promotions[i].StartDate.Value.ToString("d", CultureInfo.InvariantCulture) : null;
                    promo["StartTime"]   = promotions[i].StartTime.HasValue ? promotions[i].StartTime.Value.ToString("t", CultureInfo.InvariantCulture) : null;
                    promo["EndDate"]     = promotions[i].EndDate.HasValue ? promotions[i].EndDate.Value.ToString("d", CultureInfo.InvariantCulture) : null;
                    promo["EndTime"]     = promotions[i].EndTime.HasValue ? promotions[i].EndTime.Value.ToString("t", CultureInfo.InvariantCulture) : null;
                    var days       = (string[])JsonSerializer.DeserializeFromString(promotions[i].DaysOfWeek, typeof(string[]));
                    var daysOfWeek = Enum.GetNames(typeof(System.DayOfWeek));

                    var daysText = new StringBuilder();

                    for (int i1 = 0; i1 < daysOfWeek.Length; i1++)
                    {
                        if (days.Contains(daysOfWeek[i1]))
                        {
                            if (daysText.Length > 0)
                            {
                                daysText.Append(", ");
                            }

                            daysText.Append(CultureInfo.InvariantCulture.DateTimeFormat.DayNames[i1]);
                        }
                    }

                    promo["Days"]       = daysText.ToString();
                    promo["Applies To"] = ((promotions[i].AppliesToCurrentBooking ? "Current booking" : "") + (promotions[i].AppliesToFutureBooking ? " Future booking" : "")).TrimStart();
                    promo["Discount"]   = promotions[i].DiscountValue.ToString() + (promotions[i].DiscountType == Common.Enumeration.PromoDiscountType.Cash ? " $" : " %");

                    if (promotions[i].TriggerSettings.Type != Common.Enumeration.PromotionTriggerTypes.CustomerSupport)
                    {
                        promo["Maximum Usage Per User"] = promotions[i].MaxUsagePerUser.ToString();
                        promo["Maximum Usage"]          = promotions[i].MaxUsage.ToString();
                    }

                    promo["Promo Code"]           = promotions[i].Code;
                    promo["Published Start Date"] = promotions[i].PublishedStartDate.HasValue ? promotions[i].PublishedStartDate.Value.ToString("d", CultureInfo.InvariantCulture) : null;
                    promo["Published End Date"]   = promotions[i].PublishedEndDate.HasValue ? promotions[i].PublishedEndDate.Value.ToString("d", CultureInfo.InvariantCulture) : null;

                    switch (promotions[i].TriggerSettings.Type)
                    {
                    case Common.Enumeration.PromotionTriggerTypes.AccountCreated:
                        promo["Trigger"] = "Account created";
                        break;

                    case Common.Enumeration.PromotionTriggerTypes.AmountSpent:
                        promo["Trigger"] = "Amount spent " + promotions[i].TriggerSettings.AmountSpent.ToString();;
                        break;

                    case Common.Enumeration.PromotionTriggerTypes.CustomerSupport:
                        promo["Trigger"] = "Customer support";
                        break;

                    case Common.Enumeration.PromotionTriggerTypes.RideCount:
                        promo["Trigger"] = "Ride count " + promotions[i].TriggerSettings.RideCount.ToString();
                        break;
                    }

                    exportedPromotions.Add(promo);
                }

                return(exportedPromotions);
            }

            return(new HttpResult(HttpStatusCode.NotFound));
        }