first push
This commit is contained in:
190
panel/VetFarm/serializers.py
Normal file
190
panel/VetFarm/serializers.py
Normal file
@@ -0,0 +1,190 @@
|
||||
import datetime
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from authentication.serializer.serializer import SystemUserProfileForGuildSerializer
|
||||
# سریالایزر مربوط به درخواست بورسی مرغدار
|
||||
from authentication.serializers import SystemAddressSerializer
|
||||
from panel.KillHouse.serializers import VetSerializer, VetForBarManagementSerializer
|
||||
from panel.VetFarm.helpers import get_vet_sub_sector_finance_info, get_vet_sub_sector_finance_info_with_date
|
||||
from panel.models import VetFarm, VetFarmInspection, PoultryHatching, Poultry, Vet
|
||||
from panel.poultry.serializers import PoultrySerializer, PoultryHatchingSerializer
|
||||
|
||||
|
||||
class VetFarmSerializer(serializers.ModelSerializer):
|
||||
vet = VetSerializer(read_only=True)
|
||||
poultry = PoultrySerializer(read_only=True)
|
||||
inspection_info = serializers.SerializerMethodField('get_inspections')
|
||||
hatching_quantity = serializers.SerializerMethodField('get_hatching_quantity')
|
||||
|
||||
class Meta:
|
||||
model = VetFarm
|
||||
fields = '__all__'
|
||||
|
||||
def get_inspections(self, instance):
|
||||
inspections = len(VetFarmInspection.objects.filter(vet_farm=instance))
|
||||
hatching = PoultryHatching.objects.filter(poultry=instance.poultry, hall=int(instance.hall)).only(
|
||||
'quantity').last()
|
||||
number_of_hatching = 0
|
||||
if hatching:
|
||||
number_of_hatching = hatching.quantity
|
||||
dict1 = {}
|
||||
if inspections > 0:
|
||||
dict1 = {
|
||||
"number_of_inspections": inspections,
|
||||
"number_of_hatching": number_of_hatching
|
||||
}
|
||||
return dict1
|
||||
|
||||
def get_hatching_quantity(self, instance):
|
||||
quantity = 0
|
||||
poultry = Poultry.objects.get(key=instance.poultry.key)
|
||||
poultry_hatching = PoultryHatching.objects.filter(poultry=poultry).only('left_over').last()
|
||||
if poultry_hatching:
|
||||
quantity = poultry_hatching.left_over
|
||||
|
||||
return quantity
|
||||
|
||||
|
||||
class VetForSubSectorSerializer(serializers.ModelSerializer):
|
||||
user = SystemUserProfileForGuildSerializer(read_only=True)
|
||||
wage_info = serializers.SerializerMethodField('get_wage_info')
|
||||
|
||||
class Meta:
|
||||
model = Vet
|
||||
fields = ['key', 'user', 'wage_info']
|
||||
|
||||
def get_wage_info(self, obj):
|
||||
if self.context.get('request').GET.get('date1'):
|
||||
date1 = datetime.datetime.strptime(str(self.context.get('request').GET['date1']),
|
||||
'%Y-%m-%d').date()
|
||||
date2 = datetime.datetime.strptime(str(self.context.get('request').GET['date2']),
|
||||
'%Y-%m-%d').date()
|
||||
else:
|
||||
date1=None
|
||||
date2=None
|
||||
return get_vet_sub_sector_finance_info(obj,date1,date2)
|
||||
|
||||
|
||||
class VetForSubSectorTransactionSerializer(serializers.ModelSerializer):
|
||||
user = SystemUserProfileForGuildSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Vet
|
||||
fields = ['key', 'user']
|
||||
|
||||
|
||||
class VetFarmInspectionSerializer(serializers.ModelSerializer):
|
||||
vet_farm = VetFarmSerializer(read_only=True)
|
||||
poultry_hatching = PoultryHatchingSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = VetFarmInspection
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class ManagementVetFarmSerializer(serializers.ModelSerializer):
|
||||
# vet = VetSerializer(read_only=True)
|
||||
poultry = PoultrySerializer(read_only=True)
|
||||
inspection_info = serializers.SerializerMethodField('get_inspections')
|
||||
hatching_quantity = serializers.SerializerMethodField('get_hatching_quantity')
|
||||
|
||||
class Meta:
|
||||
model = VetFarm
|
||||
fields = '__all__'
|
||||
|
||||
def get_inspections(self, instance):
|
||||
inspections = len(VetFarmInspection.objects.filter(vet_farm=instance))
|
||||
hatching = PoultryHatching.objects.filter(poultry=instance.poultry, hall=int(instance.hall)).only(
|
||||
'quantity').last()
|
||||
number_of_hatching = 0
|
||||
if hatching:
|
||||
number_of_hatching = hatching.quantity
|
||||
dict1 = {}
|
||||
if inspections > 0:
|
||||
dict1 = {
|
||||
"number_of_inspections": inspections,
|
||||
"number_of_hatching": number_of_hatching
|
||||
}
|
||||
return dict1
|
||||
|
||||
def get_hatching_quantity(self, instance):
|
||||
quantity = 0
|
||||
poultry = Poultry.objects.get(key=instance.poultry.key)
|
||||
poultry_hatching = PoultryHatching.objects.filter(poultry=poultry).only('left_over').last()
|
||||
if poultry_hatching:
|
||||
quantity = poultry_hatching.left_over
|
||||
|
||||
return quantity
|
||||
|
||||
|
||||
class PoultryForCityVetSerializer(serializers.ModelSerializer):
|
||||
address = SystemAddressSerializer(read_only=True)
|
||||
inspection_info = serializers.SerializerMethodField('get_inspections')
|
||||
hatching_quantity = serializers.SerializerMethodField('get_hatching_quantity')
|
||||
|
||||
class Meta:
|
||||
model = Poultry
|
||||
fields = ['key', 'unit_name', 'address', 'number_of_halls', 'breeding_unique_id', 'inspection_info',
|
||||
'hatching_quantity']
|
||||
|
||||
def get_inspections(self, instance):
|
||||
inspections = len(VetFarmInspection.objects.filter(vet_farm__poultry=instance))
|
||||
hatching = PoultryHatching.objects.filter(poultry=instance, trash=False).only('quantity').last()
|
||||
number_of_hatching = 0
|
||||
if hatching:
|
||||
number_of_hatching = hatching.quantity
|
||||
dict1 = {}
|
||||
if inspections > 0:
|
||||
dict1 = {
|
||||
"number_of_inspections": inspections,
|
||||
"number_of_hatching": number_of_hatching
|
||||
}
|
||||
return dict1
|
||||
|
||||
def get_hatching_quantity(self, instance):
|
||||
total_quantity = 0
|
||||
left_over = 0
|
||||
vet_farm_losses = 0
|
||||
union_losses = 0
|
||||
period = None
|
||||
hatching_key = None
|
||||
poultry_hatching = PoultryHatching.objects.filter(poultry=instance, allow_hatching='pending', state='pending',
|
||||
archive=False, violation=False, trash=False).last()
|
||||
if poultry_hatching:
|
||||
total_quantity = poultry_hatching.quantity
|
||||
left_over = poultry_hatching.left_over
|
||||
vet_farm_losses = poultry_hatching.losses
|
||||
union_losses = poultry_hatching.direct_losses
|
||||
period = poultry_hatching.period
|
||||
hatching_key = poultry_hatching.key
|
||||
|
||||
return {
|
||||
"total_quantity": total_quantity,
|
||||
"left_over": left_over,
|
||||
"vet_farm_losses": vet_farm_losses,
|
||||
"union_losses": union_losses,
|
||||
"period": period,
|
||||
"total_losses": union_losses + vet_farm_losses,
|
||||
"hatching_key": hatching_key,
|
||||
}
|
||||
|
||||
|
||||
class VetForSubSectorSerializerForExcel(serializers.ModelSerializer):
|
||||
user = SystemUserProfileForGuildSerializer(read_only=True)
|
||||
wage_info = serializers.SerializerMethodField('get_wage_info')
|
||||
|
||||
class Meta:
|
||||
model = Vet
|
||||
fields = ['key', 'user', 'wage_info']
|
||||
|
||||
def get_wage_info(self, obj):
|
||||
if self.context.get('request').GET['date1']:
|
||||
date1 = datetime.datetime.strptime(str(self.context.get('request').GET['date1']),
|
||||
'%Y-%m-%d').date()
|
||||
date2 = datetime.datetime.strptime(str(self.context.get('request').GET['date2']),
|
||||
'%Y-%m-%d').date()
|
||||
else:
|
||||
date1=None
|
||||
date2=None
|
||||
return get_vet_sub_sector_finance_info_with_date(obj,date1,date2)
|
||||
Reference in New Issue
Block a user