gold eggs backend
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
This commit is contained in:
130
core/apps/eggs/serializers/party.py
Normal file
130
core/apps/eggs/serializers/party.py
Normal file
@@ -0,0 +1,130 @@
|
||||
"""
|
||||
Party serializer
|
||||
"""
|
||||
|
||||
from django.utils.translation import gettext as _
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.eggs import models
|
||||
from core.apps.eggs.serializers import group
|
||||
from core.apps.eggs.serializers import group as group_serializer
|
||||
from core.apps.eggs.serializers import invoice
|
||||
from core.http.serializers import user
|
||||
|
||||
|
||||
class PartySerializer(serializers.ModelSerializer):
|
||||
invoices = invoice.InvoiceSerializer(many=True)
|
||||
groups = group.GroupSerializer(many=True)
|
||||
user = user.UserSerializer(read_only=True, source="user_id")
|
||||
|
||||
class Meta:
|
||||
model = models.Party
|
||||
fields = (
|
||||
"id",
|
||||
"user",
|
||||
"count",
|
||||
"sold_count",
|
||||
"remaining_count",
|
||||
"profit",
|
||||
"benefit",
|
||||
"cost",
|
||||
"total_cost",
|
||||
"created_at",
|
||||
"invoices",
|
||||
"groups",
|
||||
"broken_eggs",
|
||||
"courier_eggs",
|
||||
)
|
||||
|
||||
def create(self, validated_data):
|
||||
invoices_data = validated_data.pop("invoices", [])
|
||||
groups_data = validated_data.pop("groups", [])
|
||||
party = models.Party.objects.create(**validated_data)
|
||||
|
||||
for invoice_data in invoices_data:
|
||||
invoice_data["party_id"] = party
|
||||
models.Invoice.objects.create(**invoice_data)
|
||||
|
||||
for group_data in groups_data:
|
||||
group_data["party_id"] = party
|
||||
models.Group.objects.create(**group_data)
|
||||
|
||||
return party
|
||||
|
||||
|
||||
class PartyGroupSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Group
|
||||
fields = (
|
||||
"id",
|
||||
"name",
|
||||
"entry_price",
|
||||
"unit_price",
|
||||
"wholesale_price",
|
||||
"quantity",
|
||||
"broken_eggs",
|
||||
"product_id",
|
||||
)
|
||||
|
||||
|
||||
class PartyCreateSerializer(serializers.ModelSerializer):
|
||||
invoices = invoice.InvoiceSerializer(many=True)
|
||||
groups = PartyGroupSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = models.Party
|
||||
fields = (
|
||||
"invoices",
|
||||
"groups",
|
||||
)
|
||||
|
||||
def create(self, validated_data):
|
||||
user = self.context["request"].user
|
||||
invoices_data = validated_data.pop("invoices", [])
|
||||
groups_data = validated_data.pop("groups", [])
|
||||
party = models.Party.objects.create(user_id=user, **validated_data)
|
||||
|
||||
for invoice_data in invoices_data:
|
||||
invoice_data["party_id"] = party
|
||||
models.Invoice.objects.create(**invoice_data)
|
||||
|
||||
created_groups = []
|
||||
for group_data in groups_data:
|
||||
group_data["party_id"] = party
|
||||
created_group = models.Group.objects.create(**group_data)
|
||||
created_groups.append(created_group)
|
||||
|
||||
party.groups.set(created_groups)
|
||||
|
||||
full_name = f"{user.first_name} {user.last_name}"
|
||||
|
||||
models.History.objects.create(
|
||||
content_object=party,
|
||||
action="party_created",
|
||||
user_id=user,
|
||||
created_who=full_name,
|
||||
created_by=party.groups.name,
|
||||
reason=_(f"Partiya yaratildi: {party.total_cost}"),
|
||||
comment=_(f"Partiya yaratildi: {party.total_cost}"),
|
||||
avatar=user.avatar if user.avatar else None,
|
||||
)
|
||||
models.Monitoring.objects.create(
|
||||
content_object=party,
|
||||
action="party_created",
|
||||
user_id=user,
|
||||
created_who=full_name,
|
||||
created_by=party.groups.name,
|
||||
reason=_(f"Partiya yaratildi: {party.total_cost}"),
|
||||
comment="Chiqim",
|
||||
price=party.total_cost,
|
||||
)
|
||||
|
||||
return party
|
||||
|
||||
def to_representation(self, instance):
|
||||
representation = super().to_representation(instance)
|
||||
representation["groups"] = group_serializer.GroupSerializer(
|
||||
instance.groups.all(), many=True
|
||||
).data
|
||||
|
||||
return representation
|
||||
Reference in New Issue
Block a user