public object GetProductPurchasedWithData(HttpRequest request, HotcakesApplication hccApp) { var productId = request.Params["productId"]; var period = (SalesPeriod)Enum.Parse(typeof(SalesPeriod), request.Params["period"]); var products = hccApp.CatalogServices.Products.GetMostPurchasedWith(productId, period, 4); var results = new List <ProductPurchasedWithInfo>(); foreach (var product in products) { var reportingService = Factory.CreateService <ReportingService>(); var performanceInfo = reportingService.GetPurchasedWithProductPerformance(product.Bvin, period); var result = new ProductPurchasedWithInfo(hccApp, product); result.QuantitySold = performanceInfo.QuantitySold; result.Revenue = performanceInfo.Revenue.ToString("C"); result.IsQuantitySoldGrowing = performanceInfo.QuantitySold >= performanceInfo.QuantitySoldPrev; result.IsRevenueGrowing = performanceInfo.Revenue >= performanceInfo.RevenuePrev; var periodString = LocalizationUtils.GetSalesPeriodLower(period); var lessThan = Localization.GetFormattedString("LessSinceLast", periodString); var moreThan = Localization.GetFormattedString("MoreSinceLast", periodString); result.QuantitySoldComparison = result.IsQuantitySoldGrowing ? moreThan : lessThan; result.RevenueComparison = result.IsRevenueGrowing ? moreThan : lessThan; var quantitySoldPercentageChange = 1D; if (performanceInfo.QuantitySoldPrev != 0) { quantitySoldPercentageChange = (performanceInfo.QuantitySold - performanceInfo.QuantitySoldPrev) / performanceInfo.QuantitySoldPrev / 100.0; } result.QuantitySoldPercentageChange = quantitySoldPercentageChange.ToString("p0"); var revenuePercentageChange = 1D; if (performanceInfo.RevenuePrev != 0) { revenuePercentageChange = (double) ((performanceInfo.Revenue - performanceInfo.RevenuePrev) / performanceInfo.RevenuePrev / 100); } result.RevenuePercentageChange = revenuePercentageChange.ToString("p0"); results.Add(result); } return(results); }
public PerformanceInfoJson(PerformanceInfo performanceInfo, SalesPeriod period, ILocalizationHelper localization) { BouncedName = localization.GetString("Bounced"); AbandonedName = localization.GetString("Abandoned"); PurchasedName = localization.GetString("Purchased"); BouncedData = performanceInfo.BouncedData; AbandonedData = performanceInfo.AbandonedData; PurchasedData = performanceInfo.PurchasedData; ChartLabels = performanceInfo.ChartLabels; Events = performanceInfo.Events; Views = performanceInfo.Views.ToString("N0"); AddsToCart = performanceInfo.AddsToCart.ToString("N0"); Purchases = performanceInfo.Purchases.ToString("N0"); var bouncesPercentageChange = 0D; if (performanceInfo.ViewsPrev != 0) { bouncesPercentageChange = Math.Abs(performanceInfo.Views - performanceInfo.ViewsPrev) / (double)performanceInfo.ViewsPrev; } else if (performanceInfo.Views != 0) { bouncesPercentageChange = 1; } bouncesPercentageChange = Math.Round(bouncesPercentageChange, 2); ViewsPercentageChange = bouncesPercentageChange.ToString("p0"); var abandomentsPercentageChange = 0D; if (performanceInfo.AddsToCartPrev != 0) { abandomentsPercentageChange = Math.Abs(performanceInfo.AddsToCart - performanceInfo.AddsToCartPrev) / (double)performanceInfo.AddsToCartPrev; } else if (performanceInfo.AddsToCart != 0) { abandomentsPercentageChange = 1; } abandomentsPercentageChange = Math.Round(abandomentsPercentageChange, 2); AddsToCartPercentageChange = abandomentsPercentageChange.ToString("p0"); var purchasesPercentageChange = 0D; if (performanceInfo.PurchasesPrev != 0) { purchasesPercentageChange = Math.Abs(performanceInfo.Purchases - performanceInfo.PurchasesPrev) / (double)performanceInfo.PurchasesPrev; } else if (performanceInfo.Purchases != 0) { purchasesPercentageChange = 1; } purchasesPercentageChange = Math.Round(purchasesPercentageChange, 2); PurchasesPercentageChange = purchasesPercentageChange.ToString("p0"); var periodString = LocalizationUtils.GetSalesPeriodLower(period); var noChange = localization.GetFormattedString("NoChangeSinceLast", periodString); var lessThan = localization.GetFormattedString("LessSinceLast", periodString); var moreThan = localization.GetFormattedString("MoreSinceLast", periodString); ViewsComparison = noChange; if (Math.Abs(bouncesPercentageChange) >= 0.01) { IsViewsGrowing = performanceInfo.Views >= performanceInfo.ViewsPrev; ViewsComparison = IsViewsGrowing.Value ? moreThan : lessThan; } AddsToCartComparison = noChange; if (Math.Abs(abandomentsPercentageChange) >= 0.01) { IsAddsToCartGrowing = performanceInfo.AddsToCart >= performanceInfo.AddsToCartPrev; AddsToCartComparison = IsAddsToCartGrowing.Value ? moreThan : lessThan; } PurchasesComparison = noChange; if (Math.Abs(purchasesPercentageChange) >= 0.01) { IsPurchasesGrowing = performanceInfo.Purchases >= performanceInfo.PurchasesPrev; PurchasesComparison = IsPurchasesGrowing.Value ? moreThan : lessThan; } }