138 lines
5.5 KiB
Python
138 lines
5.5 KiB
Python
import datetime
|
|
|
|
from django.db.models import Sum, F
|
|
from rest_framework import serializers
|
|
|
|
from authentication.serializer.serializer import SystemUserProfileSerializer, BankCardSerializer, \
|
|
SystemUserProfileForGuildSerializer
|
|
from authentication.serializers import SystemAddressSerializer
|
|
from panel.CityOperator.helpers import get_city_sub_sector_finance_info, get_city_sub_sector_finance_info_with_date
|
|
from panel.models import CityOperatorCheckRequest, CityOperator, ProvinceKillRequest, ProvinceCheckOperatorRequest, \
|
|
WageType, PercentageOfWageType, PoultryHatching, Poultry, PoultryRequest, KillHouseFreeBarInformation, \
|
|
KillHouseFreeSaleBarInformation, KillHouse
|
|
from panel.poultry.serializers import PoultryRequestSerializer
|
|
|
|
|
|
# سریالایزر مربوط به اپراتور شهرستان
|
|
class CityOperatorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(read_only=True, required=False)
|
|
|
|
class Meta:
|
|
model = CityOperator
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
# 'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
|
|
class CityOperatorForAllUserSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(read_only=True, required=False)
|
|
|
|
class Meta:
|
|
model = CityOperator
|
|
fields = ['address', 'user_bank_info', 'identity_documents', 'phone', 'unit_name']
|
|
|
|
|
|
class CityOperatorForPoultrySerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CityOperator
|
|
fields = ['key', 'address', 'unit_name']
|
|
|
|
|
|
class CityOperatorForSubSectorTransactionsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CityOperator
|
|
fields = ['key', 'user', 'unit_name']
|
|
|
|
|
|
class CityOperatorForSubSectorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = CityOperator
|
|
fields = ['key', 'user', 'unit_name','wage_info']
|
|
|
|
|
|
def get_wage_info(self, obj):
|
|
date1=None
|
|
date2=None
|
|
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()
|
|
poultries = Poultry.objects.filter(city_operator=obj.unit_name,trash=False).order_by('id')
|
|
info=get_city_sub_sector_finance_info(poultries,obj,date1,date2)
|
|
return info
|
|
|
|
|
|
|
|
# سریالایزر مربوط به بررسی درخواست مرغدار توسط شهرستان (تایید یا رد)
|
|
class CityOperatorCheckRequestSerializer(serializers.ModelSerializer):
|
|
poultry_request = PoultryRequestSerializer(read_only=True)
|
|
quantity = serializers.SerializerMethodField('get_quantity')
|
|
|
|
# city_operator = CityOperatorSerializer()
|
|
|
|
class Meta:
|
|
model = CityOperatorCheckRequest
|
|
fields = '__all__'
|
|
|
|
def get_quantity(self, instance):
|
|
allocated_number = 0
|
|
returned_number = 0
|
|
assignable_number = 0
|
|
province_check_req = ProvinceCheckOperatorRequest.objects.filter(city_request_Poultry=instance)
|
|
if province_check_req.count() > 0:
|
|
province_check_req = province_check_req.last()
|
|
assignable_number = province_check_req.quantity
|
|
else:
|
|
assignable_number = instance.poultry_request.quantity
|
|
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(province_request__city_request_Poultry=instance,
|
|
trash=False, state__in=('pending', 'accepted'))
|
|
if province_kill_requests.count() > 0:
|
|
for province_kill_request in province_kill_requests:
|
|
if province_kill_request.return_to_province == False:
|
|
allocated_number += province_kill_request.main_quantity
|
|
else:
|
|
returned_number += province_kill_request.main_quantity
|
|
|
|
quantity = {
|
|
"allocated_number": allocated_number,
|
|
"assignable_number": assignable_number,
|
|
"returned_number": returned_number,
|
|
}
|
|
return quantity
|
|
|
|
|
|
class CityOperatorForSubSectorSerializerForExcel(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = CityOperator
|
|
fields = ['key', 'user', 'unit_name','wage_info']
|
|
|
|
|
|
def get_wage_info(self, obj):
|
|
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()
|
|
|
|
poultries = Poultry.objects.filter(city_operator=obj.unit_name,trash=False).order_by('id')
|
|
info=get_city_sub_sector_finance_info_with_date(poultries,obj,date1,date2)
|
|
return info |