def get_dashboard_blocks(self, request): if not self.check_demo_optin(request): return locale = get_current_babel_locale() n = now() weekday = format_date(n, "EEEE", locale=locale) today = format_date(n, locale=locale) yield DashboardValueBlock(id="test-x", color="blue", title="Happy %s!" % weekday, value=today, icon="fa fa-calendar") yield DashboardNumberBlock(id="test-x", color="red", title="Visitors Yesterday", value=random.randint(2200, 10000), icon="fa fa-globe") yield DashboardNumberBlock(id="test-x", color="gray", title="Registered Users", value=1240, icon="fa fa-user") yield DashboardNumberBlock(id="test-x", color="orange", title="Orders", value=32, icon="fa fa-inbox") yield DashboardMoneyBlock(id="test-x", color="green", title="Open Orders Value", value=32000, currency="USD", icon="fa fa-line-chart") yield DashboardNumberBlock(id="test-x", color="yellow", title="Current Visitors", value=6, icon="fa fa-users") yield DashboardMoneyBlock(id="test-x", color="none", title="Sales this week", value=430.30, currency="USD", icon="fa fa-dollar") yield DashboardValueBlock(id="test-1", value="\u03C0", title="The most delicious number", color="purple", icon="fa fa-smile-o")
def get_unfinalized_basket_block(currency, days=14): days = int(days) early_cutoff = now() - datetime.timedelta(days=days) # The `hours` value for `late_cutoff` should maybe be tunable somehow. # Either way, we're currently considering baskets abandoned if they've been # unupdated for two hours. late_cutoff = now() - datetime.timedelta(hours=2) data = (StoredBasket.objects.filter(currency=currency).filter( updated_on__range=(early_cutoff, late_cutoff), product_count__gte=0).exclude(deleted=True, finished=True).aggregate( count=Count("id"), sum=Sum("taxful_total_price_value"))) if not data["count"]: return return DashboardMoneyBlock( id="abandoned_baskets_%d" % days, color="red", title=_("Abandoned Basket Value"), value=(data.get("sum") or 0), currency=currency, icon="fa fa-calculator", subtitle=_("Based on {b} baskets over the last {d} days").format( b=data.get("count"), d=days))
def get_dashboard_blocks(self, request): return [ DashboardContentBlock(id="test-0", content="Hello", size="invalid"), DashboardValueBlock(id="test-1", value="yes", title="hi"), DashboardNumberBlock(id="test-2", value=35, title="hello"), DashboardNumberBlock(id="test-3", value=35.3, title="hello"), DashboardMoneyBlock(id="test-4", value=35, title="hola", currency="USD"), ]
def get_open_orders_block(request): # Open orders / open orders value open_order_data = Order.objects.incomplete().aggregate(count=Count("id"), sum=Sum("taxful_total_price")) return DashboardMoneyBlock( id="open_orders_sum", color="orange", title=_("Open Orders Value"), value=(open_order_data.get("sum") or 0), icon="fa fa-inbox", subtitle=get_subtitle(open_order_data.get("count")) )
def get_sales_of_the_day_block(request): # Sales of the day todays_order_data = Order.objects.complete().since(0).aggregate(count=Count("id"), sum=Sum("taxful_total_price")) return DashboardMoneyBlock( id="todays_order_sum", color="green", title=_("Today's Sales"), value=(todays_order_data.get("sum") or 0), icon="fa fa-calculator", subtitle=get_subtitle(todays_order_data.get("count")) )
def get_lifetime_sales_block(request): # Lifetime sales lifetime_sales_data = Order.objects.complete().aggregate( count=Count("id"), sum=Sum("taxful_total_price")) return DashboardMoneyBlock(id="lifetime_sales_sum", color="green", title=_("Lifetime Sales"), value=(lifetime_sales_data.get("sum") or 0), icon="fa fa-line-chart", subtitle=get_subtitle( lifetime_sales_data.get("count")))
def get_avg_purchase_size_block(request): lifetime_sales_data = Order.objects.complete().aggregate( count=Count("id"), sum=Sum("taxful_total_price")) # Average size of purchase with amount of orders it is calculated from average_purchase_size = Order.objects.all().aggregate( count=Count("id"), sum=Avg("taxful_total_price")) return DashboardMoneyBlock(id="average_purchase_sum", color="blue", title=_("Average Purchase"), value=(average_purchase_size.get("sum") or 0), icon="fa fa-shopping-cart", subtitle=get_subtitle( lifetime_sales_data.get("count")))
def get_lifetime_sales_block(request, currency): orders = get_orders_by_currency(currency) # Lifetime sales lifetime_sales_data = orders.complete().aggregate( count=Count("id"), sum=Sum("taxful_total_price_value")) return DashboardMoneyBlock(id="lifetime_sales_sum", color="green", title=_("Lifetime Sales"), value=(lifetime_sales_data.get("sum") or 0), currency=currency, icon="fa fa-line-chart", subtitle=get_subtitle( lifetime_sales_data.get("count")))
def get_open_orders_block(request, currency): orders = get_orders_by_currency(currency) # Open orders / open orders value open_order_data = (orders.incomplete().aggregate( count=Count("id"), sum=Sum("taxful_total_price_value"))) return DashboardMoneyBlock( id="open_orders_sum", color="orange", title=_("Open Orders Value"), value=TaxfulPrice((open_order_data.get("sum") or 0), currency), currency=currency, icon="fa fa-inbox", subtitle=get_subtitle(open_order_data.get("count")))