190 lines
7.3 KiB
Python
190 lines
7.3 KiB
Python
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) |