gold eggs backend
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s

This commit is contained in:
2026-04-15 08:59:36 +02:00
commit ab73d05ecc
359 changed files with 14415 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
from datetime import datetime
from datetime import timedelta
from django.db.models import Sum
from rest_framework import serializers
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from core.apps.eggs.models import Monitoring
class MonitoringSerializer(serializers.ModelSerializer):
class Meta:
model = Monitoring
fields = [
"id",
"content_type",
"object_id",
"action",
"timestamp",
"created_by",
"created_who",
"reason",
"comment",
"price",
]
class MonitoringSummarySerializer(serializers.Serializer):
from_date = serializers.CharField()
end_date = serializers.CharField()
enter_price = serializers.DecimalField(max_digits=30, decimal_places=2)
exit_price = serializers.DecimalField(max_digits=30, decimal_places=2)
profit = serializers.DecimalField(max_digits=30, decimal_places=2)
results = MonitoringSerializer(many=True)
class MonitoringSummaryView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request, *args, **kwargs):
from_date = request.query_params.get("from_date")
end_date = request.query_params.get("end_date")
if from_date and end_date:
start_date = datetime.strptime(from_date, "%Y-%m-%d")
end_date = datetime.strptime(end_date, "%Y-%m-%d") + timedelta(
days=1
)
else:
start_date = None
end_date = None
enter_actions = ["Kirim", "debt_created", "order_created"]
exit_actions = [
"Chiqim",
"additional_cost_created",
"broken_created",
"party_created",
]
if start_date and end_date:
enter_price = (
Monitoring.objects.filter(
action__in=enter_actions,
timestamp__range=[start_date, end_date],
).aggregate(total=Sum("price"))["total"]
or 0
)
exit_price = (
Monitoring.objects.filter(
action__in=exit_actions,
timestamp__range=[start_date, end_date],
).aggregate(total=Sum("price"))["total"]
or 0
)
results = Monitoring.objects.filter(
timestamp__range=[start_date, end_date]
)
else:
enter_price = (
Monitoring.objects.filter(action__in=enter_actions).aggregate(
total=Sum("price")
)["total"]
or 0
)
exit_price = (
Monitoring.objects.filter(action__in=exit_actions).aggregate(
total=Sum("price")
)["total"]
or 0
)
results = Monitoring.objects.all()
profit = enter_price - exit_price
data = {
"from_date": from_date,
"end_date": end_date,
"enter_price": enter_price,
"exit_price": exit_price,
"profit": profit,
"results": results,
}
serializer = MonitoringSummarySerializer(data)
return Response(serializer.data)