🔥 Remove stat and log views
➖ Remove djangorestframework
This commit is contained in:
1 parent
d7513f389e
commit
7ba3ead688
13 files changed
+67
-609
No files matched your search
@@ -7,7 +7,7 @@ from strawberry import ID
|
||||
|
||||
from main import models
|
||||
from main.api.errors import Error, FieldError, FormErrors
|
||||
from main.api.types import Order, Transaction, UserProfile
|
||||
from main.api.types import Order, Transaction
|
||||
|
||||
UserModel = get_user_model()
|
||||
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
from django.db.models import Count, Sum
|
||||
from rest_framework import serializers
|
||||
from rest_framework.serializers import ModelSerializer
|
||||
|
||||
from main.models import Order, OrderLine, Product
|
||||
|
||||
|
||||
class ProductSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = Product
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class ProductStatSerializer(ModelSerializer):
|
||||
EXTERNAL_USER = "Ekstern"
|
||||
counts = serializers.SerializerMethodField()
|
||||
|
||||
def _format_counts(self, per_user):
|
||||
per_user = list(per_user)
|
||||
for row in per_user:
|
||||
first = row.pop("order__customer__first_name")
|
||||
last = row.pop("order__customer__last_name")
|
||||
if first is None:
|
||||
who = self.EXTERNAL_USER
|
||||
else:
|
||||
who = "{} {}".format(first, last)
|
||||
row["full_name"] = who
|
||||
|
||||
return per_user
|
||||
|
||||
def get_counts(self, obj):
|
||||
name_fields = ["order__customer__first_name", "order__customer__last_name"]
|
||||
per_user = OrderLine.objects.filter(product=obj)
|
||||
per_user = per_user.values(*name_fields).annotate(amount_total=Sum("amount")).order_by("-amount_total")
|
||||
|
||||
return self._format_counts(per_user)
|
||||
|
||||
class Meta:
|
||||
model = Product
|
||||
fields = [
|
||||
"id",
|
||||
"name",
|
||||
"description",
|
||||
"image",
|
||||
"inventory_amount",
|
||||
"active",
|
||||
"created",
|
||||
"counts",
|
||||
]
|
||||
@@ -1,19 +0,0 @@
|
||||
from rest_framework import mixins
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.viewsets import GenericViewSet
|
||||
|
||||
from main.api.serializers import ProductSerializer, ProductStatSerializer
|
||||
from main.models import Product
|
||||
|
||||
|
||||
class ProductViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet):
|
||||
serializer_class = ProductSerializer
|
||||
queryset = Product.objects.all()
|
||||
|
||||
@action(detail=False, methods=["get"])
|
||||
def group_by_user(self, request):
|
||||
products = self.get_queryset().filter(active=True)
|
||||
serializer = ProductStatSerializer(products, many=True)
|
||||
|
||||
return Response(serializer.data)
|
||||
@@ -2,7 +2,6 @@ import pytest
|
||||
from django.test import Client
|
||||
from strawberry.django.test import GraphQLTestClient
|
||||
|
||||
from main.api.mutations import create_order
|
||||
from main.models import Order, Product
|
||||
|
||||
|
||||
|
||||
+2
-29
@@ -1,19 +1,9 @@
|
||||
from django.contrib.staticfiles.views import serve
|
||||
from django.urls import include, path, re_path
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
from main.api.views import ProductViewSet
|
||||
from main.views.general import deposit, log, register
|
||||
from main.views.general import deposit, register
|
||||
from main.views.reports import inventory, inventory_add, report
|
||||
from main.views.stats import (
|
||||
OrdersDailyView,
|
||||
OrdersHourlyView,
|
||||
OrdersMonthlyView,
|
||||
OrdersYearlyView,
|
||||
stats_list,
|
||||
stats_products_per_user,
|
||||
stats_products_realtime,
|
||||
)
|
||||
from main.views.stats import stats_products_per_user, stats_products_realtime
|
||||
from main.views.users import create_user, profile
|
||||
|
||||
spa_kwargs = {"path": "modern/index.html"}
|
||||
@@ -41,18 +31,6 @@ urlpatterns = [
|
||||
|
||||
# Stats
|
||||
urlpatterns += [
|
||||
re_path(
|
||||
r"^stats/orders/hourly/$",
|
||||
OrdersHourlyView.as_view(),
|
||||
name="stats-orders-hourly",
|
||||
),
|
||||
re_path(r"^stats/orders/daily/", OrdersDailyView.as_view(), name="stats-orders-daily"),
|
||||
re_path(
|
||||
r"^stats/orders/monthly/",
|
||||
OrdersMonthlyView.as_view(),
|
||||
name="stats-orders-monthly",
|
||||
),
|
||||
re_path(r"^stats/orders/yearly/", OrdersYearlyView.as_view(), name="stats-orders-yearly"),
|
||||
re_path(
|
||||
r"^stats/orders/products_realtime$",
|
||||
stats_products_realtime,
|
||||
@@ -66,8 +44,3 @@ urlpatterns += [
|
||||
]
|
||||
# Root level service-worker.js
|
||||
urlpatterns += [re_path(r"^service-worker\.js$", serve, kwargs={"path": "dist/service-worker.js"})]
|
||||
|
||||
# API
|
||||
router = DefaultRouter()
|
||||
router.register(r"api/products", ProductViewSet)
|
||||
urlpatterns += router.urls
|
||||
+1
-22
@@ -10,7 +10,7 @@ from django.shortcuts import redirect, render
|
||||
from django.urls import reverse
|
||||
|
||||
from main.forms import DepositForm, OrderForm, OrderLineForm
|
||||
from main.models import Order, OrderLine, Product, Transaction
|
||||
from main.models import OrderLine, Product
|
||||
from main.utils import users_format_js, users_with_perm
|
||||
|
||||
|
||||
@@ -158,24 +158,3 @@ def deposit(request):
|
||||
form = DepositForm()
|
||||
|
||||
return render(request, "deposit.html", locals())
|
||||
|
||||
|
||||
def log(request, limit=datetime.now() - timedelta(days=2)):
|
||||
if limit:
|
||||
# display last two days of orders and transactions
|
||||
orders = Order.objects.filter(created__gte=limit).order_by("-created")
|
||||
transactions = Transaction.objects.filter(created__gte=limit).order_by("-created")
|
||||
|
||||
# no action in the last two days?
|
||||
# ...then display the last 5 items
|
||||
if len(orders) == 0:
|
||||
orders = Order.objects.all().order_by("-created")[:5]
|
||||
|
||||
if len(transactions) == 0:
|
||||
transactions = Transaction.objects.all().order_by("-created")[:5]
|
||||
else:
|
||||
# display everything
|
||||
orders = Order.objects.all().order_by("-created")
|
||||
transactions = Transaction.objects.all().order_by("-created")
|
||||
|
||||
return render(request, "log.html", locals())
|
||||
+1
-88
@@ -1,96 +1,9 @@
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from itertools import groupby
|
||||
|
||||
from django.http import JsonResponse
|
||||
from django.shortcuts import render
|
||||
from django.utils import timezone
|
||||
from django.views.generic import View
|
||||
|
||||
from main.models import Order, OrderLine, Product
|
||||
|
||||
|
||||
def stats_list(request):
|
||||
products = Product.objects.filter(active=True)
|
||||
order_groups = ["hourly", "daily", "monthly", "yearly"]
|
||||
|
||||
return render(request, "stats.html", {"products": products, "order_groups": order_groups})
|
||||
|
||||
|
||||
class OrdersView(View):
|
||||
grouping = "orders"
|
||||
|
||||
def get_range(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def get_key(self, order):
|
||||
raise NotImplementedError
|
||||
|
||||
def group_by(self, orders):
|
||||
orders_grouped = dict([(key, 0) for key in self.get_range()]) # init
|
||||
for key, values in groupby(orders, key=self.get_key):
|
||||
count = len(list(values))
|
||||
orders_grouped[key] += count
|
||||
|
||||
return orders_grouped
|
||||
|
||||
def get(self, request):
|
||||
orders = Order.objects.all()
|
||||
if not orders.exists():
|
||||
return JsonResponse({})
|
||||
|
||||
orders_grouped = self.group_by(orders)
|
||||
data = {
|
||||
"start": str(orders[0].created),
|
||||
"orders": [[k, v] for k, v in orders_grouped.items()],
|
||||
"total": sum(orders_grouped.values()),
|
||||
"grouping": self.grouping,
|
||||
}
|
||||
return JsonResponse(data)
|
||||
|
||||
|
||||
class OrdersHourlyView(OrdersView):
|
||||
grouping = "hourly"
|
||||
|
||||
def get_range(self):
|
||||
return range(0, 24)
|
||||
|
||||
def get_key(self, order):
|
||||
return order.created.hour
|
||||
|
||||
|
||||
class OrdersDailyView(OrdersView):
|
||||
grouping = "daily"
|
||||
|
||||
def get_range(self):
|
||||
return range(0, 7)
|
||||
|
||||
def get_key(self, order):
|
||||
return order.created.weekday()
|
||||
|
||||
|
||||
class OrdersMonthlyView(OrdersView):
|
||||
grouping = "monthly"
|
||||
|
||||
def get_range(self):
|
||||
return range(1, 13)
|
||||
|
||||
def get_key(self, order):
|
||||
return order.created.month
|
||||
|
||||
|
||||
class OrdersYearlyView(OrdersView):
|
||||
grouping = "yearly"
|
||||
|
||||
def get_range(self):
|
||||
first = Order.objects.order_by("created").first()
|
||||
last = timezone.now().year
|
||||
first = first.created.year if first else last
|
||||
|
||||
return range(first, last + 1)
|
||||
|
||||
def get_key(self, order):
|
||||
return order.created.year
|
||||
from main.models import OrderLine
|
||||
|
||||
|
||||
def stats_products_realtime(request):
|
||||
|
||||
Reference in new issue
Block a user