75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
from rest_framework import serializers
|
|
|
|
from django.db.models import Count
|
|
|
|
from tmc.models import Territory, CustomTable
|
|
from tmc.serializers import TerritorySerializer
|
|
from .models import TgItem, TmcElement, TmcField
|
|
import logging
|
|
|
|
logger = logging.getLogger("root")
|
|
|
|
|
|
class CustomTableSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = CustomTable
|
|
fields = ["name"]
|
|
|
|
|
|
class TmcElementSerializer(serializers.Serializer):
|
|
tmc__name = serializers.CharField()
|
|
count = serializers.IntegerField()
|
|
|
|
|
|
class TerritorySerializer(serializers.Serializer):
|
|
id = serializers.IntegerField()
|
|
name = serializers.CharField()
|
|
count = serializers.IntegerField(required=False)
|
|
|
|
|
|
class TgItemSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TgItem
|
|
fields = "__all__"
|
|
depth = 3
|
|
|
|
|
|
class TgStatItemSerializer(serializers.Serializer):
|
|
location = serializers.SerializerMethodField(required=False)
|
|
inv_count = serializers.IntegerField()
|
|
tmc = serializers.SerializerMethodField()
|
|
|
|
def get_location(self, obj):
|
|
if not obj.get("location__parent"):
|
|
return None
|
|
if isinstance(obj.get("location__parent"), list):
|
|
location_parent_ids = obj.get("location__parent")
|
|
queryset = Territory.objects.filter(id__in=obj.get("location__parent")).values('name')
|
|
for q in queryset:
|
|
q.count = location_parent_ids.count(q.id)
|
|
serializer = TerritorySerializer(queryset, many=True)
|
|
else:
|
|
queryset = Territory.objects.get(id=obj.get("location__parent"))
|
|
serializer = TerritorySerializer(queryset)
|
|
|
|
return serializer.data
|
|
|
|
def get_tmc(self, obj):
|
|
queryset = (
|
|
TmcElement.objects.filter(id__in=obj.get("tmc"))
|
|
.values("tmc__name")
|
|
.annotate(count=Count("id"))
|
|
)
|
|
serializer = TmcElementSerializer(queryset, many=True)
|
|
|
|
return serializer.data
|
|
|
|
class Meta:
|
|
depth = 2
|
|
|
|
|
|
class TmcFieldSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TmcField
|
|
fields = "__all__"
|