6517 lines
358 KiB
Python
6517 lines
358 KiB
Python
import datetime
|
|
from datetime import timedelta
|
|
from django.db.models import Sum, Q, F, Count
|
|
from rest_framework import serializers
|
|
|
|
# import panel.KillHouse.serializers
|
|
from authentication.models import SystemUserProfile
|
|
from authentication.serializer.serializer import SystemUserProfileSerializer, BankCardSerializer, \
|
|
SystemUserProfileForAutoAllocationSerializer, SystemUserProfileForGuildSerializer, \
|
|
SystemUserProfileForPoultryLocSerializer, SystemUserProfileForInspectionSerializer
|
|
from authentication.serializers import UserProfileSerializer, SystemAddressSerializer
|
|
from deposit_id import wage_counting_type, new_out_selling_count_wage, before_out_buying_count_wage_amount
|
|
from deposit_percent import wage_percent, carcases_sell
|
|
from panel.KillHouse.helpers import get_finance_info, get_kill_house_finance_info, get_difference_carcasses_weight, \
|
|
get_difference_carcasses_weight_kill, market_kill_request_share_quantity
|
|
from panel.models import \
|
|
KillHouse, \
|
|
KillHouseRequest, \
|
|
KillRequest, \
|
|
KillHouseCheckRequest, KillHouseAssignmentInformation, PoultryAssignmentInformation, \
|
|
ProvinceCheckOperatorRequest, KillHouseADDCAR, Vet, VetCheckRequest, ProvinceKillRequest, KillHouseRequestExchange, \
|
|
KillHouseRequestExchangeReserve, KillHouseRequestExchangeAddCar, PoultryRequestExchangeAccept, KillHouseDriver, \
|
|
KillHouseOperator, KillHouseRequestAction, KillHouseRequestActionWinner, DriverRequestCancel, KillHouseVet, \
|
|
KillHouseComplaint, CheckKillHouseComplaint, CheckUnusualCasualties, KillHouseAssignmentImages, KillRequestFactor, \
|
|
KillRequestFactorPayment, AutomaticKillRequest, VetFarm, KillHouseCreditors, KillHouseAllowVet, Poultry, \
|
|
ProvinceAllowKillHouseRegisterCar, KillHousePercentage, KillHouseDailyQuota, KillHouseFactorToProvince, \
|
|
KillHouseWareHouse, KillHouseFreeBarInformation, PoultryRequest, ShareOfAllocation, \
|
|
ProvinceAllowKillHouseDirectBuying, Pricing, KillHousePurchaseRequest, StewardAllocation, ProvinceOperator, \
|
|
CityOperatorCheckRequest, CityOperator, StewardWareHouse, Steward, PoultryHatching, KillHouseFreeSaleBarInformation, \
|
|
PaymentGatewayPercentage, SlaughterHouseTransaction, InternalTransaction, BarDocumentStatus, \
|
|
KillHouseStewardGuildRelation, OutProvinceCarcassesBuyer, TypeActivity, WageType, RolesProducts, ColdHouse, \
|
|
BarDifferenceRequest, PercentageOfWageType, PoultryRequestQuarantineCode, DirectBuyingPayment, PosSegmentation, \
|
|
ProductsTransactions, WarehouseArchive
|
|
|
|
from panel.poultry.serializers import PoultryRequestExchangeSerializer, PoultryRequestSerializer, \
|
|
PoultryRequestForBarMangementSerializer, PoultrySerializer, PoultryForBarManagementSerializer, \
|
|
PoultryForPoultryRequestLetterSerializer, OutProvincePoultryRequestBuyerSerializer, PoultryHatchingSerializer, \
|
|
PoultryHatchingForBarDifferenceRequestSerializer, PoultryForPredictionSerializer, PoultryRequestForMarketSerializer, \
|
|
PoultryHatchingForLocSerializer
|
|
|
|
|
|
class BarDocumentStatusSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BarDocumentStatus
|
|
fields = ['id', 'key', 'title', 'sms', 'is_error', 'priority_id']
|
|
|
|
|
|
class KillHouseOperatorForAutoAllocationsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseOperator
|
|
fields = ['user']
|
|
|
|
|
|
class KillHouseOperatorForColdHouseSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForInspectionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseOperator
|
|
fields = ['user']
|
|
|
|
|
|
# سریالایزر مربوط به اپراتور شهرستان
|
|
class KillHouseOperatorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = KillHouseOperator
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseOperatorForKillHouseDriverSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseOperator
|
|
fields = ['user']
|
|
|
|
|
|
class KillHouseOperatorForAllUserSerializer(serializers.ModelSerializer):
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = KillHouseOperator
|
|
fields = ['user_bank_info']
|
|
|
|
|
|
class KillHouseForKillHouseDriverSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForKillHouseDriverSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['kill_house_operator', 'killer']
|
|
|
|
|
|
class VetForKillHouseVetSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Vet
|
|
fields = ['user']
|
|
|
|
|
|
class KillHouseVetForKillHouseSerializer(serializers.ModelSerializer):
|
|
vet = VetForKillHouseVetSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseVet
|
|
fields = ['vet']
|
|
|
|
|
|
class KillHouseForKillHouseVetKillHouseSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForKillHouseDriverSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['kill_house_operator', 'name']
|
|
|
|
|
|
class KillHouseForAllUserSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAllUserSerializer(read_only=True)
|
|
system_address = SystemAddressSerializer(read_only=True)
|
|
killers = serializers.SerializerMethodField('get_killers')
|
|
kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
exclude = (
|
|
'id',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'address',
|
|
'car',
|
|
'create_date',
|
|
'modify_date',
|
|
'killing_race',
|
|
'phone',
|
|
'shift_work_from',
|
|
'shift_work_to',
|
|
'user',
|
|
'userprofile',
|
|
)
|
|
|
|
def get_killers(self, obj):
|
|
killers = KillHousePercentage.objects.filter(kill_house_for_killer__exact=obj)
|
|
return KillHousePercentageForKillerKillHousseSerializer(killers, many=True).data
|
|
|
|
def get_kill_house_vet(self, obj):
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house__exact=obj, trash=False)
|
|
return KillHouseVetForKillHouseSerializer(kill_house_vet, many=True).data
|
|
|
|
|
|
class KillHouseForAutoAllocationSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['kill_house_operator', 'name', 'killer', 'key', 'maximum_load_volume_increase',
|
|
'maximum_load_volume_reduction']
|
|
|
|
|
|
class KillHouseForKillHouseGuildRelationSerializer(serializers.ModelSerializer):
|
|
# kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
city = serializers.CharField(source='kill_house_operator.user.city.name', read_only=True)
|
|
fullname = serializers.CharField(source='kill_house_operator.user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='kill_house_operator.user.mobile', read_only=True)
|
|
allocation_limit = serializers.SerializerMethodField('get_allocation_limit')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['name', 'city', 'fullname', 'mobile', 'killer', 'key', 'allocation_limit']
|
|
|
|
def get_allocation_limit(self, obj):
|
|
guild = self.context.get('guild')
|
|
if guild:
|
|
relation = KillHouseStewardGuildRelation.objects.filter(kill_house=obj, guild=guild).first()
|
|
if relation:
|
|
return {
|
|
"allocation_limit": relation.allocation_limit,
|
|
"allocation_type": relation.allocation_type
|
|
}
|
|
return None
|
|
|
|
|
|
class KillHouseForKillHouseStewardRelationSerializer(serializers.ModelSerializer):
|
|
# kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
city = serializers.CharField(source='kill_house_operator.user.city.name', read_only=True)
|
|
fullname = serializers.CharField(source='kill_house_operator.user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='kill_house_operator.user.mobile', read_only=True)
|
|
allocation_limit = serializers.SerializerMethodField('get_allocation_limit')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['name', 'city', 'fullname', 'mobile', 'killer', 'key', 'allocation_limit']
|
|
|
|
def get_allocation_limit(self, obj):
|
|
guild = self.context.get('guild')
|
|
if guild:
|
|
relation = KillHouseStewardGuildRelation.objects.filter(kill_house=obj, steward=guild).first()
|
|
if relation:
|
|
return {
|
|
"allocation_limit": relation.allocation_limit,
|
|
"allocation_type": relation.allocation_type
|
|
}
|
|
return None
|
|
|
|
|
|
class KillHouseForCommonlyUsedSerializer(serializers.ModelSerializer):
|
|
city = serializers.CharField(source='kill_house_operator.user.city.name', read_only=True)
|
|
fullname = serializers.CharField(source='kill_house_operator.user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='kill_house_operator.user.mobile', read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['name', 'city', 'fullname', 'mobile', 'killer', 'key', 'market_capacity_percent',
|
|
'market_light_capacity', 'market_light_capacity_percent', 'market_buying', 'market_buying_limitation',
|
|
'total_kill_capacity', 'total_kill_capacity_percent', 'max_kill_limit',
|
|
'market_buying_capacity_percent_status',
|
|
'governmental_selling_permission', 'free_selling_permission',
|
|
'in_province_governmental_selling_percent',
|
|
'out_province_governmental_selling_percent', 'segmentation_governmental_percent',
|
|
'in_province_free_selling_percent', 'out_province_free_selling_percent',
|
|
'segmentation_free_selling_percent',
|
|
'cold_house_governmental_percent',
|
|
'cold_house_free_percent',
|
|
'free_sale_form_governmental_quota',
|
|
'out_province_free_buying_commitment_percent',
|
|
'free_sale_from_free_quota_in_province',
|
|
]
|
|
|
|
|
|
class KillHouseForReturnBuyingSerializer(serializers.ModelSerializer):
|
|
city = serializers.CharField(source='kill_house_operator.user.city.name', read_only=True)
|
|
fullname = serializers.CharField(source='kill_house_operator.user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='kill_house_operator.user.mobile', read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['name', 'city', 'fullname', 'mobile', 'killer', 'key']
|
|
|
|
|
|
class KillHouseForColdHouseAllocationSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'info']
|
|
|
|
def get_info(self, obj):
|
|
date1 = self.context.get('date1')
|
|
date2 = self.context.get('date2')
|
|
if date1:
|
|
|
|
cold_house_allocations = StewardAllocation.objects.filter(
|
|
kill_house=obj,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
to_cold_house__isnull=False,
|
|
receiver_state__in=('accepted', 'pending'),
|
|
trash=False)
|
|
|
|
else:
|
|
cold_house_allocations = StewardAllocation.objects.filter(
|
|
kill_house=obj,
|
|
to_cold_house__isnull=False,
|
|
receiver_state__in=('accepted', 'pending'),
|
|
trash=False)
|
|
|
|
self_allocations = cold_house_allocations.filter(kill_house=obj, to_cold_house__kill_house=obj)
|
|
other_allocations = cold_house_allocations.filter(kill_house=obj).exclude(to_cold_house__kill_house=obj)
|
|
|
|
cold_house_allocations_weight = \
|
|
cold_house_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
|
'total'] or 0
|
|
self_allocations_weight = \
|
|
self_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
|
'total'] or 0
|
|
|
|
other_allocations_weight = \
|
|
other_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
|
'total'] or 0
|
|
|
|
result = {
|
|
"total_allocations_count": cold_house_allocations.count(),
|
|
"total_allocations_weight": cold_house_allocations_weight,
|
|
"total_self_allocations_count": self_allocations.count(),
|
|
"total_self_allocations_weight": self_allocations_weight,
|
|
"total_other_allocations_count": other_allocations.count(),
|
|
"total_other_allocations_weight": other_allocations_weight,
|
|
|
|
}
|
|
return result
|
|
|
|
|
|
class KillHouseForSegmentationSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'info']
|
|
|
|
def get_info(self, obj):
|
|
date1 = self.context.get('date1')
|
|
date2 = self.context.get('date2')
|
|
if date1:
|
|
|
|
segmentations = PosSegmentation.objects.filter(kill_house=obj, trash=False, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
|
|
else:
|
|
segmentations = PosSegmentation.objects.filter(kill_house=obj, trash=False)
|
|
|
|
segmentations_aggregates = segmentations.aggregate(
|
|
total_count=Count('id'),
|
|
total_self_count=Count('id', filter=Q(to_guild__isnull=True)),
|
|
total_other_count=Count('id', filter=Q(to_guild__isnull=False)),
|
|
total_weight=Sum('weight'),
|
|
total_self_weight=Sum('weight', filter=Q(to_guild__isnull=True)),
|
|
total_other_weight=Sum('weight', filter=Q(to_guild__isnull=False)),
|
|
|
|
)
|
|
|
|
result = {
|
|
"total_count": segmentations_aggregates['total_count'] or 0,
|
|
"total_weight": segmentations_aggregates['total_weight'] or 0,
|
|
"total_self_count": segmentations_aggregates['total_self_count'] or 0,
|
|
"total_self_weight": segmentations_aggregates['total_self_weight'] or 0,
|
|
"total_other_count": segmentations_aggregates['total_other_count'] or 0,
|
|
"total_other_weight": segmentations_aggregates['total_other_weight'] or 0
|
|
|
|
}
|
|
return result
|
|
|
|
|
|
# class TotalKillHouseRemainWeightViewSetSerializer(serializers.ModelSerializer):
|
|
# info = serializers.SerializerMethodField('get_info')
|
|
#
|
|
# class Meta:
|
|
# model = KillHouse
|
|
# fields = ['key', 'name', 'info']
|
|
#
|
|
# def get_info(self, obj):
|
|
# product = RolesProducts.objects.filter(kill_house=obj, trash=False, name='مرغ گرم').first()
|
|
# archives = WarehouseArchive.objects.filter(kill_house=obj, trash=False,warehouse=True)
|
|
# today = datetime.datetime.now().date()
|
|
# yesterday = today - timedelta(days=1)
|
|
# two_days_ago = yesterday - timedelta(days=1)
|
|
# date_list=[two_days_ago,yesterday,two_days_ago]
|
|
#
|
|
# all_dates = set()
|
|
#
|
|
# all_dates.update(
|
|
# KillHouseRequest.objects.filter(
|
|
# input_warehouse=obj,
|
|
# ware_house_confirmation=True, trash=False, calculate_status=True, warehouse=True
|
|
# ).values_list('kill_request__recive_date__date', flat=True)
|
|
# )
|
|
#
|
|
# all_dates.update(
|
|
# KillHouseFreeBarInformation.objects.filter(
|
|
# input_warehouse=obj, trash=False, calculate_status=True, warehouse=True
|
|
# ).exclude(entered_message='ورود به انبار مجازی')
|
|
# .values_list('date__date', flat=True)
|
|
# )
|
|
#
|
|
# all_dates.update(
|
|
# StewardAllocation.objects.filter(
|
|
# kill_house=obj, trash=False, calculate_status=True, warehouse=True,
|
|
# receiver_state__in=('pending', 'accepted')
|
|
# ).values_list('production_date__date', flat=True)
|
|
# )
|
|
#
|
|
# all_dates.update(
|
|
# KillHouseFreeSaleBarInformation.objects.filter(
|
|
# kill_house=obj, trash=False, calculate_status=True, warehouse=True
|
|
# ).values_list('production_date__date', flat=True)
|
|
# )
|
|
#
|
|
# all_dates.update(
|
|
# PosSegmentation.objects.filter(
|
|
# kill_house=obj, trash=False, warehouse=True
|
|
# ).values_list('production_date__date', flat=True)
|
|
# )
|
|
#
|
|
# all_dates.update(
|
|
# ProductsTransactions.objects.filter(
|
|
# product=product, transaction__paid=True, trash=False, warehouse=True
|
|
# ).values_list('transaction__date__date', flat=True)
|
|
# )
|
|
#
|
|
# days = sorted([d for d in all_dates if d is not None])
|
|
#
|
|
# if not days:
|
|
# return None
|
|
#
|
|
# kill_house_requests = KillHouseRequest.objects.filter(
|
|
# input_warehouse=obj,
|
|
# ware_house_confirmation=True, trash=False, calculate_status=True, warehouse=True
|
|
# )
|
|
#
|
|
# kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(
|
|
# input_warehouse=obj, trash=False, calculate_status=True, warehouse=True
|
|
# ).exclude(entered_message='ورود به انبار مجازی')
|
|
#
|
|
# kill_house_allocations = StewardAllocation.objects.filter(
|
|
# kill_house=obj, trash=False, calculate_status=True, warehouse=True,
|
|
# receiver_state__in=('pending', 'accepted')
|
|
# )
|
|
#
|
|
# kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(
|
|
# kill_house=obj, trash=False, calculate_status=True, warehouse=True
|
|
# )
|
|
#
|
|
# segmentations = PosSegmentation.objects.filter(
|
|
# kill_house=obj, trash=False, warehouse=True
|
|
# )
|
|
#
|
|
# transactions = ProductsTransactions.objects.filter(
|
|
# product=product, transaction__paid=True, trash=False, warehouse=True
|
|
# )
|
|
#
|
|
# governmental_list = []
|
|
# free_list = []
|
|
#
|
|
# for day in days:
|
|
# kill_house_requests_info = kill_house_requests.aggregate(
|
|
# total_kill_house_request_governmental_weight=Sum(
|
|
# 'ware_house_accepted_real_weight',
|
|
# filter=Q(
|
|
# province_request__poultry_request__free_sale_in_province=False,
|
|
# kill_request__recive_date__date=day
|
|
# )
|
|
# ),
|
|
# total_kill_house_request_free_weight=Sum(
|
|
# 'ware_house_accepted_real_weight',
|
|
# filter=Q(
|
|
# province_request__poultry_request__free_sale_in_province=True,
|
|
# kill_request__recive_date__date=day
|
|
# )
|
|
# ),
|
|
# )
|
|
#
|
|
# kill_house_free_buying_bars_info = kill_house_free_buying_bars.aggregate(
|
|
# total_kill_house_free_buying_bars_weight=Sum('weight_of_carcasses', filter=Q(date__date=day))
|
|
# )
|
|
#
|
|
# kill_house_allocations_info = kill_house_allocations.aggregate(
|
|
# total_kill_house_allocations_governmental_weight=Sum(
|
|
# 'real_weight_of_carcasses', filter=Q(quota='governmental', production_date__date=day)
|
|
# ),
|
|
# total_kill_house_allocations_free_weight=Sum(
|
|
# 'real_weight_of_carcasses', filter=Q(quota='free', production_date__date=day)
|
|
# ),
|
|
# )
|
|
#
|
|
# kill_house_free_sale_bars_info = kill_house_free_sale_bars.aggregate(
|
|
# total_kill_house_free_sale_bars_governmental_weight=Sum(
|
|
# 'real_weight_of_carcasses', filter=Q(quota='governmental', production_date__date=day)
|
|
# ),
|
|
# total_kill_house_free_sale_bars_free_weight=Sum(
|
|
# 'real_weight_of_carcasses', filter=Q(quota='free', production_date__date=day)
|
|
# ),
|
|
# )
|
|
#
|
|
# segmentations_info = segmentations.aggregate(
|
|
# segmentations_governmental_weight=Sum('weight',
|
|
# filter=Q(quota='governmental', production_date__date=day)),
|
|
# segmentations_free_weight=Sum('weight', filter=Q(quota='free', production_date__date=day)),
|
|
# )
|
|
#
|
|
# pos_allocated_weight_info = transactions.aggregate(
|
|
# pos_governmental_allocated_weight=Sum('cur_weight',
|
|
# filter=Q(price_approved=True, transaction__date__date=day)),
|
|
# pos_free_allocated_weight=Sum('cur_weight',
|
|
# filter=Q(price_approved=False, transaction__date__date=day)),
|
|
# )
|
|
# archives_info = archives.aggregate(
|
|
# total_archive_governmental_weight=Sum('weight', filter=Q(date__date=day, quota='governmental')),
|
|
# total_archive_free_weight=Sum('weight', filter=Q(date__date=day, quota='free')),
|
|
# )
|
|
#
|
|
# total_kill_house_request_governmental_weight = kill_house_requests_info[
|
|
# 'total_kill_house_request_governmental_weight'] or 0
|
|
# total_kill_house_request_free_weight = kill_house_requests_info['total_kill_house_request_free_weight'] or 0
|
|
# total_kill_house_free_buying_bars_weight = kill_house_free_buying_bars_info[
|
|
# 'total_kill_house_free_buying_bars_weight'] or 0
|
|
# total_kill_house_allocations_governmental_weight = kill_house_allocations_info[
|
|
# 'total_kill_house_allocations_governmental_weight'] or 0
|
|
# total_kill_house_allocations_free_weight = kill_house_allocations_info[
|
|
# 'total_kill_house_allocations_free_weight'] or 0
|
|
# total_kill_house_free_sale_bars_governmental_weight = kill_house_free_sale_bars_info[
|
|
# 'total_kill_house_free_sale_bars_governmental_weight'] or 0
|
|
# total_kill_house_free_sale_bars_free_weight = kill_house_free_sale_bars_info[
|
|
# 'total_kill_house_free_sale_bars_free_weight'] or 0
|
|
# segmentations_governmental_weight = segmentations_info['segmentations_governmental_weight'] or 0
|
|
# segmentations_free_weight = segmentations_info['segmentations_free_weight'] or 0
|
|
# pos_governmental_allocated_weight = pos_allocated_weight_info['pos_governmental_allocated_weight'] or 0
|
|
# pos_free_allocated_weight = pos_allocated_weight_info['pos_free_allocated_weight'] or 0
|
|
# total_archive_governmental_weight = archives_info['total_archive_governmental_weight'] or 0
|
|
# total_archive_free_weight = archives_info['total_archive_free_weight'] or 0
|
|
#
|
|
# total_governmental_input = total_kill_house_request_governmental_weight
|
|
# total_free_input = total_kill_house_request_free_weight + total_kill_house_free_buying_bars_weight
|
|
# total_governmental_output = (
|
|
# total_kill_house_allocations_governmental_weight +
|
|
# total_kill_house_free_sale_bars_governmental_weight +
|
|
# segmentations_governmental_weight +
|
|
# int(pos_governmental_allocated_weight / 1000)
|
|
# )
|
|
# total_free_output = (
|
|
# total_kill_house_allocations_free_weight +
|
|
# total_kill_house_free_sale_bars_free_weight +
|
|
# segmentations_free_weight +
|
|
# int(pos_free_allocated_weight / 1000)
|
|
# )
|
|
# governmental_amount = (
|
|
# total_governmental_input - total_governmental_output) - total_archive_governmental_weight
|
|
# free_amount = (total_free_input - total_free_output) - total_archive_free_weight
|
|
# governmental_data = {
|
|
# 'day': day,
|
|
# 'amount': governmental_amount,
|
|
# }
|
|
# free_data = {
|
|
# 'day': day,
|
|
# 'amount': free_amount,
|
|
# }
|
|
# if day not in date_list:
|
|
#
|
|
# if governmental_amount > 0:
|
|
# governmental_list.append(governmental_data)
|
|
# if free_amount > 0:
|
|
# free_list.append(free_data)
|
|
#
|
|
# final_dict = {
|
|
# 'governmental': governmental_list,
|
|
# 'free': free_list
|
|
# }
|
|
# return final_dict
|
|
class TotalKillHouseRemainWeightViewSetSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'info']
|
|
|
|
def get_info(self, obj):
|
|
product = RolesProducts.objects.filter(kill_house=obj, trash=False, name='مرغ گرم').first()
|
|
archives = WarehouseArchive.objects.filter(kill_house=obj, trash=False,warehouse=True)
|
|
today = datetime.datetime.now().date()
|
|
yesterday = today - timedelta(days=1)
|
|
two_days_ago = yesterday - timedelta(days=1)
|
|
date_list=[two_days_ago,yesterday,two_days_ago]
|
|
|
|
all_dates = set()
|
|
|
|
all_dates.update(
|
|
KillHouseRequest.objects.filter(
|
|
input_warehouse=obj,
|
|
ware_house_confirmation=True, trash=False, calculate_status=True, warehouse=True
|
|
).values_list('kill_request__recive_date__date', flat=True)
|
|
)
|
|
|
|
all_dates.update(
|
|
KillHouseFreeBarInformation.objects.filter(
|
|
input_warehouse=obj, trash=False, calculate_status=True, warehouse=True
|
|
).exclude(entered_message='ورود به انبار مجازی')
|
|
.values_list('date__date', flat=True)
|
|
)
|
|
|
|
all_dates.update(
|
|
StewardAllocation.objects.filter(
|
|
kill_house=obj, trash=False, calculate_status=True, warehouse=True,
|
|
receiver_state__in=('pending', 'accepted')
|
|
).values_list('production_date__date', flat=True)
|
|
)
|
|
|
|
all_dates.update(
|
|
KillHouseFreeSaleBarInformation.objects.filter(
|
|
kill_house=obj, trash=False, calculate_status=True, warehouse=True
|
|
).values_list('production_date__date', flat=True)
|
|
)
|
|
|
|
all_dates.update(
|
|
PosSegmentation.objects.filter(
|
|
kill_house=obj, trash=False, warehouse=True
|
|
).values_list('production_date__date', flat=True)
|
|
)
|
|
|
|
all_dates.update(
|
|
ProductsTransactions.objects.filter(
|
|
product=product, transaction__paid=True, trash=False, warehouse=True
|
|
).values_list('transaction__date__date', flat=True)
|
|
)
|
|
|
|
days = sorted([d for d in all_dates if d is not None])
|
|
|
|
if not days:
|
|
return None
|
|
|
|
kill_house_requests = KillHouseRequest.objects.filter(
|
|
input_warehouse=obj,
|
|
ware_house_confirmation=True, trash=False, calculate_status=True, warehouse=True
|
|
)
|
|
|
|
kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(
|
|
input_warehouse=obj, trash=False, calculate_status=True, warehouse=True
|
|
).exclude(entered_message='ورود به انبار مجازی')
|
|
|
|
kill_house_allocations = StewardAllocation.objects.filter(
|
|
kill_house=obj, trash=False, calculate_status=True, warehouse=True,
|
|
receiver_state__in=('pending', 'accepted')
|
|
)
|
|
|
|
kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(
|
|
kill_house=obj, trash=False, calculate_status=True, warehouse=True
|
|
)
|
|
|
|
segmentations = PosSegmentation.objects.filter(
|
|
kill_house=obj, trash=False, warehouse=True
|
|
)
|
|
|
|
transactions = ProductsTransactions.objects.filter(
|
|
product=product, transaction__paid=True, trash=False, warehouse=True
|
|
)
|
|
|
|
governmental_list = []
|
|
free_list = []
|
|
|
|
for day in days:
|
|
kill_house_requests_info = kill_house_requests.aggregate(
|
|
total_kill_house_request_governmental_weight=Sum(
|
|
'ware_house_accepted_real_weight',
|
|
filter=Q(
|
|
province_request__poultry_request__free_sale_in_province=False,
|
|
kill_request__recive_date__date=day
|
|
)
|
|
),
|
|
total_kill_house_request_free_weight=Sum(
|
|
'ware_house_accepted_real_weight',
|
|
filter=Q(
|
|
province_request__poultry_request__free_sale_in_province=True,
|
|
kill_request__recive_date__date=day
|
|
)
|
|
),
|
|
)
|
|
|
|
kill_house_free_buying_bars_info = kill_house_free_buying_bars.aggregate(
|
|
total_kill_house_free_buying_bars_weight=Sum('weight_of_carcasses', filter=Q(date__date=day))
|
|
)
|
|
|
|
kill_house_allocations_info = kill_house_allocations.aggregate(
|
|
total_kill_house_allocations_governmental_weight=Sum(
|
|
'real_weight_of_carcasses', filter=Q(quota='governmental', production_date__date=day)
|
|
),
|
|
total_kill_house_allocations_free_weight=Sum(
|
|
'real_weight_of_carcasses', filter=Q(quota='free', production_date__date=day)
|
|
),
|
|
)
|
|
|
|
kill_house_free_sale_bars_info = kill_house_free_sale_bars.aggregate(
|
|
total_kill_house_free_sale_bars_governmental_weight=Sum(
|
|
'real_weight_of_carcasses', filter=Q(quota='governmental', production_date__date=day)
|
|
),
|
|
total_kill_house_free_sale_bars_free_weight=Sum(
|
|
'real_weight_of_carcasses', filter=Q(quota='free', production_date__date=day)
|
|
),
|
|
)
|
|
|
|
segmentations_info = segmentations.aggregate(
|
|
segmentations_governmental_weight=Sum('weight',
|
|
filter=Q(quota='governmental', production_date__date=day)),
|
|
segmentations_free_weight=Sum('weight', filter=Q(quota='free', production_date__date=day)),
|
|
)
|
|
|
|
pos_allocated_weight_info = transactions.aggregate(
|
|
pos_governmental_allocated_weight=Sum('cur_weight',
|
|
filter=Q(price_approved=True, transaction__date__date=day)),
|
|
pos_free_allocated_weight=Sum('cur_weight',
|
|
filter=Q(price_approved=False, transaction__date__date=day)),
|
|
)
|
|
archives_info = archives.aggregate(
|
|
total_archive_governmental_weight=Sum('weight', filter=Q(date__date=day, quota='governmental')),
|
|
total_archive_free_weight=Sum('weight', filter=Q(date__date=day, quota='free')),
|
|
)
|
|
|
|
total_kill_house_request_governmental_weight = kill_house_requests_info[
|
|
'total_kill_house_request_governmental_weight'] or 0
|
|
total_kill_house_request_free_weight = kill_house_requests_info['total_kill_house_request_free_weight'] or 0
|
|
total_kill_house_free_buying_bars_weight = kill_house_free_buying_bars_info[
|
|
'total_kill_house_free_buying_bars_weight'] or 0
|
|
total_kill_house_allocations_governmental_weight = kill_house_allocations_info[
|
|
'total_kill_house_allocations_governmental_weight'] or 0
|
|
total_kill_house_allocations_free_weight = kill_house_allocations_info[
|
|
'total_kill_house_allocations_free_weight'] or 0
|
|
total_kill_house_free_sale_bars_governmental_weight = kill_house_free_sale_bars_info[
|
|
'total_kill_house_free_sale_bars_governmental_weight'] or 0
|
|
total_kill_house_free_sale_bars_free_weight = kill_house_free_sale_bars_info[
|
|
'total_kill_house_free_sale_bars_free_weight'] or 0
|
|
segmentations_governmental_weight = segmentations_info['segmentations_governmental_weight'] or 0
|
|
segmentations_free_weight = segmentations_info['segmentations_free_weight'] or 0
|
|
pos_governmental_allocated_weight = pos_allocated_weight_info['pos_governmental_allocated_weight'] or 0
|
|
pos_free_allocated_weight = pos_allocated_weight_info['pos_free_allocated_weight'] or 0
|
|
total_archive_governmental_weight = archives_info['total_archive_governmental_weight'] or 0
|
|
total_archive_free_weight = archives_info['total_archive_free_weight'] or 0
|
|
|
|
total_governmental_input = total_kill_house_request_governmental_weight
|
|
total_free_input = total_kill_house_request_free_weight + total_kill_house_free_buying_bars_weight
|
|
total_governmental_output = (
|
|
total_kill_house_allocations_governmental_weight +
|
|
total_kill_house_free_sale_bars_governmental_weight +
|
|
segmentations_governmental_weight +
|
|
int(pos_governmental_allocated_weight / 1000)
|
|
)
|
|
total_free_output = (
|
|
total_kill_house_allocations_free_weight +
|
|
total_kill_house_free_sale_bars_free_weight +
|
|
segmentations_free_weight +
|
|
int(pos_free_allocated_weight / 1000)
|
|
)
|
|
governmental_amount = (
|
|
total_governmental_input - total_governmental_output) - total_archive_governmental_weight
|
|
free_amount = (total_free_input - total_free_output) - total_archive_free_weight
|
|
governmental_data = {
|
|
'day': day,
|
|
'amount': governmental_amount,
|
|
}
|
|
free_data = {
|
|
'day': day,
|
|
'amount': free_amount,
|
|
}
|
|
if day not in date_list:
|
|
|
|
if governmental_amount > 0:
|
|
governmental_list.append(governmental_data)
|
|
if free_amount > 0:
|
|
free_list.append(free_data)
|
|
|
|
final_dict = {
|
|
'governmental': governmental_list,
|
|
'free': free_list
|
|
}
|
|
return final_dict
|
|
|
|
class TotalKillHouseWarehouseArchiveDashboardSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'info']
|
|
|
|
def get_info(self, obj):
|
|
date1 = self.context.get('date1')
|
|
date2 = self.context.get('date2')
|
|
if date1:
|
|
archives = WarehouseArchive.objects.filter(trash=False, kill_house=obj, create_date__date__gte=date1,
|
|
create_date__date__lte=date2)
|
|
|
|
else:
|
|
archives = WarehouseArchive.objects.filter(trash=False, kill_house=obj)
|
|
|
|
archives_info = archives.aggregate(
|
|
total_count=Count('id'),
|
|
total_governmental_count=Count('id', filter=Q(quota='governmental')),
|
|
total_free_count=Count('id', filter=Q(quota='free')),
|
|
total_weight=Sum('weight'),
|
|
total_governmental_weight=Sum('weight', filter=Q(quota='governmental')),
|
|
total_free_weight=Sum('weight', filter=Q(quota='free')),
|
|
)
|
|
|
|
total_count = archives_info['total_count'] or 0
|
|
total_governmental_count = archives_info['total_governmental_count'] or 0
|
|
total_free_count = archives_info['total_free_count'] or 0
|
|
total_weight = archives_info['total_weight'] or 0
|
|
total_governmental_weight = archives_info['total_governmental_weight'] or 0
|
|
total_free_weight = archives_info['total_free_weight'] or 0
|
|
|
|
result = {
|
|
'total_count': total_count,
|
|
'total_governmental_count': total_governmental_count,
|
|
'total_free_count': total_free_count,
|
|
'total_weight': total_weight,
|
|
'total_governmental_weight': total_governmental_weight,
|
|
'total_free_weight': total_free_weight,
|
|
}
|
|
return result
|
|
|
|
|
|
class KillHouseComparativeInformationSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_ware_house_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'info']
|
|
|
|
def _calculate_info(self, obj, date1=None, date2=None):
|
|
product = RolesProducts.objects.filter(kill_house=obj, trash=False, name='مرغ گرم').first()
|
|
|
|
if date1:
|
|
bars_date1 = date1
|
|
bars_date2 = date2
|
|
# bars_date1 = date1 - timedelta(days=1)
|
|
# bars_date2 = date2 - timedelta(days=1)
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj, archive_wage=False,
|
|
return_to_province=False,
|
|
state__in=('pending', 'accepted'),
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
kill_request__recive_date__date__gte=bars_date1,
|
|
kill_request__recive_date__date__lte=bars_date2)
|
|
|
|
kill_house_requests = KillHouseRequest.objects.filter(
|
|
killhouse_user=obj,
|
|
non_receipt=False,
|
|
trash=False, calculate_status=True, kill_request__recive_date__date__gte=bars_date1,
|
|
kill_request__recive_date__date__lte=bars_date2
|
|
)
|
|
|
|
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(Q(date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
buy_type='carcass') | Q(
|
|
create_date__date__gte=date1, create_date__date__lte=date2, buy_type='live'), kill_house=obj,
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
calculate_status=True)
|
|
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(kill_house=obj,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
calculate_status=True)
|
|
|
|
kill_house_allocations = StewardAllocation.objects.filter(kill_house=obj, trash=False,
|
|
receiver_state__in=('pending', 'accepted'),
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
to_cold_house__isnull=True,
|
|
calculate_status=True, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
segmentations = PosSegmentation.objects.filter(kill_house=obj, trash=False, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
cold_house_allocations = StewardAllocation.objects.filter(
|
|
kill_house=obj,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
to_cold_house__isnull=False,
|
|
receiver_state__in=('accepted', 'pending'),
|
|
trash=False)
|
|
transactions = ProductsTransactions.objects.filter(product=product, transaction__paid=True,
|
|
transaction__date__date__gte=date1,
|
|
transaction__date__date__lte=date2, trash=False,
|
|
warehouse=True)
|
|
archives = WarehouseArchive.objects.filter(kill_house=obj,date__date__gte=date1,date__date__lte=date2, trash=False)
|
|
|
|
|
|
else:
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj, archive_wage=False,
|
|
return_to_province=False,
|
|
state__in=('pending', 'accepted'),
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False)
|
|
|
|
kill_house_requests = KillHouseRequest.objects.filter(killhouse_user=obj,
|
|
trash=False,
|
|
non_receipt=False,
|
|
calculate_status=True)
|
|
|
|
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(kill_house=obj,
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
calculate_status=True)
|
|
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(kill_house=obj,
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
calculate_status=True)
|
|
|
|
kill_house_allocations = StewardAllocation.objects.filter(kill_house=obj, trash=False,
|
|
receiver_state__in=('pending', 'accepted'),
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
to_cold_house__isnull=True,
|
|
calculate_status=True)
|
|
segmentations = PosSegmentation.objects.filter(kill_house=obj, trash=False)
|
|
cold_house_allocations = StewardAllocation.objects.filter(
|
|
kill_house=obj,
|
|
|
|
to_cold_house__isnull=False,
|
|
receiver_state__in=('accepted', 'pending'),
|
|
trash=False)
|
|
transactions = ProductsTransactions.objects.filter(product=product, transaction__paid=True, trash=False,
|
|
warehouse=True)
|
|
archives = WarehouseArchive.objects.filter(kill_house=obj, trash=False)
|
|
|
|
|
|
province_kill_request_info = province_kill_requests.aggregate(
|
|
total_province_kill_request_count=Count('id'),
|
|
total_province_kill_request_quantity=Sum('total_killed_quantity'),
|
|
total_province_kill_request_weight=Sum('total_killed_weight'),
|
|
|
|
)
|
|
kill_house_request_info = kill_house_requests.aggregate(
|
|
total_kill_house_request_quantity=Sum('accepted_real_quantity'),
|
|
total_kill_house_request_governmental_quantity=Sum('accepted_real_quantity',
|
|
filter=Q(
|
|
province_request__poultry_request__free_sale_in_province=False)),
|
|
total_kill_house_request_free_quantity=Sum('accepted_real_quantity',
|
|
filter=Q(
|
|
province_request__poultry_request__free_sale_in_province=True)),
|
|
total_kill_house_request_warehouse_entered_quantity=Sum('accepted_real_quantity',
|
|
filter=Q(ware_house_confirmation=True)),
|
|
total_kill_house_request_warehouse_entered_weight=Sum('accepted_real_weight',
|
|
filter=Q(ware_house_confirmation=True)),
|
|
total_kill_house_request_warehouse_cacasses_entered_weight=Sum('ware_house_accepted_real_weight',
|
|
filter=Q(ware_house_confirmation=True)),
|
|
|
|
total_kill_house_request_warehouse_entered_governmental_weight=Sum('ware_house_accepted_real_weight',
|
|
filter=Q(ware_house_confirmation=True,
|
|
province_request__poultry_request__free_sale_in_province=False)),
|
|
total_kill_house_request_warehouse_entered_free_weight=Sum('ware_house_accepted_real_weight',
|
|
filter=Q(ware_house_confirmation=True,
|
|
province_request__poultry_request__free_sale_in_province=True)),
|
|
)
|
|
kill_house_free_bar_info = kill_house_free_bar_informations.aggregate(
|
|
total_kill_house_free_bar_carcass_total_weight=Sum('weight_of_carcasses'),
|
|
total_kill_house_free_bar_live_total_quantity=Sum('quantity', filter=Q(buy_type='live')),
|
|
total_kill_house_entered_free_bar_live_total_weight=Sum('live_weight',
|
|
filter=Q(buy_type='live', ware_house=True)),
|
|
total_kill_house_entered_free_bar_live_carcasses_total_weight=Sum('weight_of_carcasses',
|
|
filter=Q(buy_type='live',
|
|
ware_house=True)),
|
|
total_kill_house_entered_free_bar_live_total_quantity=Sum('quantity',
|
|
filter=Q(buy_type='live', ware_house=True)),
|
|
)
|
|
|
|
kill_house_free_Sale_bar_info = kill_house_free_Sale_bar_informations.aggregate(
|
|
total_kill_house_free_Sale_bar_weight=Sum('real_weight_of_carcasses'),
|
|
total_kill_house_free_Sale_bar_governmental_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='governmental')),
|
|
total_kill_house_free_Sale_bar_free_weight=Sum('real_weight_of_carcasses', filter=Q(quota='free')),
|
|
)
|
|
|
|
kill_house_allocations_info = kill_house_allocations.aggregate(
|
|
total_kill_house_allocations_weight=Sum('real_weight_of_carcasses'),
|
|
total_kill_house_allocations_governmental_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='governmental')),
|
|
total_kill_house_allocations_free_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='free')),
|
|
)
|
|
|
|
segmentations_aggregates_info = segmentations.aggregate(
|
|
total_segmentations_weight=Sum('weight'),
|
|
total_segmentations_governmental_weight=Sum('weight', filter=Q(quota='governmental')),
|
|
total_segmentations_free_weight=Sum('weight', filter=Q(quota='free')),
|
|
)
|
|
cold_house_allocations_info = cold_house_allocations.aggregate(
|
|
total_cold_house_allocations_weight=Sum('real_weight_of_carcasses'),
|
|
total_cold_house_allocations_governmental_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='governmental')),
|
|
total_cold_house_allocations_free_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='free')),
|
|
)
|
|
pos_allocated_weight_info = transactions.aggregate(
|
|
pos_allocated_weight=Sum('cur_weight'),
|
|
pos_governmental_allocated_weight=Sum('cur_weight',
|
|
filter=Q(price_approved=True)),
|
|
pos_free_allocated_weight=Sum('cur_weight', filter=Q(price_approved=False)),
|
|
|
|
)
|
|
archives_info = archives.aggregate(
|
|
total_archive_governmental_weight=Sum('weight', filter=Q(quota='governmental')),
|
|
total_archive_free_weight=Sum('weight', filter=Q(quota='free')),
|
|
)
|
|
|
|
return {**province_kill_request_info, **kill_house_request_info, **kill_house_free_bar_info,
|
|
**kill_house_free_Sale_bar_info, **kill_house_allocations_info, **segmentations_aggregates_info,**pos_allocated_weight_info,
|
|
**cold_house_allocations_info,**archives_info}
|
|
|
|
def get_ware_house_info(self, obj):
|
|
product_remain_weight = RolesProducts.objects.filter(kill_house=obj, trash=False).only(
|
|
'total_remain_weight').first()
|
|
product_remain_weight = product_remain_weight.total_remain_weight if product_remain_weight else 0
|
|
date1 = self.context.get('date1')
|
|
date2 = self.context.get('date2')
|
|
rsi_data = self.context.get('rsi_data')
|
|
kill_house_rsi_info = next(
|
|
(obj_info for obj_info in rsi_data if obj_info["PartIdCode"] == obj.unique_identifier), None)
|
|
if date1 and date2:
|
|
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
|
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
|
|
|
total_info = self._calculate_info(obj, date1, date2) if date1 else self._calculate_info(obj)
|
|
|
|
total_province_kill_requests_quantity = total_info['total_province_kill_request_quantity'] or 0
|
|
total_kill_house_request_governmental_quantity = total_info[
|
|
'total_kill_house_request_governmental_quantity'] or 0
|
|
total_kill_house_request_free_quantity = total_info['total_kill_house_request_free_quantity'] or 0
|
|
total_kill_house_free_bar_live_total_quantity = total_info['total_kill_house_free_bar_live_total_quantity'] or 0
|
|
total_live_bars_quantity = total_kill_house_request_governmental_quantity + total_kill_house_request_free_quantity + total_kill_house_free_bar_live_total_quantity
|
|
total_kill_house_request_warehouse_entered_quantity = total_info[
|
|
'total_kill_house_request_warehouse_entered_quantity'] or 0
|
|
total_kill_house_entered_free_bar_live_total_quantity = total_info[
|
|
'total_kill_house_entered_free_bar_live_total_quantity'] or 0
|
|
total_entered_warehouse_bars_quantity = total_kill_house_request_warehouse_entered_quantity + total_kill_house_entered_free_bar_live_total_quantity
|
|
total_kill_house_request_warehouse_entered_weight = total_info[
|
|
'total_kill_house_request_warehouse_entered_weight'] or 0
|
|
total_kill_house_entered_free_bar_live_total_weight = total_info[
|
|
'total_kill_house_entered_free_bar_live_total_weight'] or 0
|
|
total_entered_warehouse_bars_weight = total_kill_house_request_warehouse_entered_weight + total_kill_house_entered_free_bar_live_total_weight
|
|
total_kill_house_request_warehouse_cacasses_entered_weight = total_info[
|
|
'total_kill_house_request_warehouse_cacasses_entered_weight'] or 0
|
|
total_kill_house_entered_free_bar_live_carcasses_total_weight = total_info[
|
|
'total_kill_house_entered_free_bar_live_carcasses_total_weight'] or 0
|
|
total_kill_house_free_bar_carcass_total_weight = total_info[
|
|
'total_kill_house_free_bar_carcass_total_weight'] or 0
|
|
total_kill_house_request_warehouse_entered_governmental_weight = total_info[
|
|
'total_kill_house_request_warehouse_entered_governmental_weight'] or 0
|
|
total_kill_house_request_warehouse_entered_free_weight = total_info[
|
|
'total_kill_house_request_warehouse_entered_free_weight'] or 0
|
|
total_kill_house_warehouse_cacasses_entered_weight = total_kill_house_request_warehouse_cacasses_entered_weight + total_kill_house_free_bar_carcass_total_weight
|
|
total_kill_house_warehouse_govermental_cacasses_entered_weight = total_kill_house_request_warehouse_entered_governmental_weight
|
|
total_kill_house_warehouse_free_cacasses_entered_weight = total_kill_house_request_warehouse_entered_free_weight + total_kill_house_entered_free_bar_live_carcasses_total_weight
|
|
total_kill_house_free_Sale_bar_weight = total_info['total_kill_house_free_Sale_bar_weight'] or 0
|
|
total_kill_house_free_Sale_bar_governmental_weight = total_info[
|
|
'total_kill_house_free_Sale_bar_governmental_weight'] or 0
|
|
total_kill_house_free_Sale_bar_free_weight = total_info['total_kill_house_free_Sale_bar_free_weight'] or 0
|
|
total_kill_house_allocations_weight = total_info['total_kill_house_allocations_weight'] or 0
|
|
total_kill_house_allocations_governmental_weight = total_info[
|
|
'total_kill_house_allocations_governmental_weight'] or 0
|
|
total_kill_house_allocations_free_weight = total_info['total_kill_house_allocations_free_weight'] or 0
|
|
total_segmentations_weight = total_info['total_segmentations_weight'] or 0
|
|
total_segmentations_governmental_weight = total_info['total_segmentations_governmental_weight'] or 0
|
|
total_segmentations_free_weight = total_info['total_segmentations_free_weight'] or 0
|
|
total_cold_house_allocations_weight = total_info['total_cold_house_allocations_weight'] or 0
|
|
total_cold_house_allocations_governmental_weight = total_info[
|
|
'total_cold_house_allocations_governmental_weight'] or 0
|
|
total_cold_house_allocations_free_weight = total_info['total_cold_house_allocations_free_weight'] or 0
|
|
pos_allocated_weight = total_info['pos_allocated_weight'] or 0
|
|
pos_governmental_allocated_weight = total_info['pos_governmental_allocated_weight'] or 0
|
|
pos_free_allocated_weight = total_info['pos_free_allocated_weight'] or 0
|
|
total_archive_governmental_weight = total_info['total_archive_governmental_weight'] or 0
|
|
total_archive_free_weight = total_info['total_archive_free_weight'] or 0
|
|
total_input_weight = total_kill_house_warehouse_cacasses_entered_weight
|
|
total_governmental_input_weight = total_kill_house_request_warehouse_entered_governmental_weight
|
|
total_free_input_weight = total_kill_house_request_warehouse_entered_free_weight + total_kill_house_free_bar_carcass_total_weight
|
|
total_output_weight = total_kill_house_free_Sale_bar_weight + total_kill_house_allocations_weight + total_segmentations_weight + total_cold_house_allocations_weight
|
|
total_output_governmental_weight = total_kill_house_free_Sale_bar_governmental_weight + total_kill_house_allocations_governmental_weight + total_segmentations_governmental_weight + total_cold_house_allocations_governmental_weight + int(pos_governmental_allocated_weight / 1000)
|
|
total_output_free_weight = total_kill_house_free_Sale_bar_free_weight + total_kill_house_allocations_free_weight + total_segmentations_free_weight + total_cold_house_allocations_free_weight + int(pos_free_allocated_weight / 1000)
|
|
# total_remain_weight = total_input_weight - total_output_weight
|
|
total_remain_governmental_weight = (total_governmental_input_weight - total_output_governmental_weight) - total_archive_governmental_weight if (
|
|
total_governmental_input_weight - total_output_governmental_weight) - total_archive_governmental_weight> 0 else 0
|
|
last_total_remain_governmental_weight = (
|
|
(total_governmental_input_weight - total_output_governmental_weight) - total_archive_governmental_weight) * -1 if (
|
|
total_governmental_input_weight - total_output_governmental_weight) - total_archive_governmental_weight < 0 else 0
|
|
total_remain_free_weight = (total_free_input_weight - total_output_free_weight) - total_archive_free_weight if (
|
|
total_free_input_weight - total_output_free_weight) - total_archive_free_weight > 0 else 0
|
|
last_total_remain_free_weight = ((total_free_input_weight - total_output_free_weight) - total_archive_free_weight) * -1 if (
|
|
total_free_input_weight - total_output_free_weight) - total_archive_free_weight < 0 else 0
|
|
total_remain_weight = total_remain_governmental_weight + total_remain_free_weight
|
|
last_total_remain_weight = last_total_remain_governmental_weight + last_total_remain_free_weight
|
|
|
|
return {
|
|
"kill_house_rsi_info": kill_house_rsi_info,
|
|
"total_killing_quantity": total_province_kill_requests_quantity + total_kill_house_free_bar_live_total_quantity,
|
|
"total_kill_house_request_governmental_quantity": total_kill_house_request_governmental_quantity,
|
|
"total_kill_house_request_free_quantity": total_kill_house_request_free_quantity,
|
|
"total_kill_house_free_bar_live_total_quantity": total_kill_house_free_bar_live_total_quantity,
|
|
"total_live_bars_quantity": total_live_bars_quantity,
|
|
"total_entered_warehouse_bars_quantity": total_entered_warehouse_bars_quantity,
|
|
"total_entered_warehouse_bars_weight": total_entered_warehouse_bars_weight,
|
|
"total_kill_house_request_warehouse_entered_quantity": total_kill_house_request_warehouse_entered_quantity,
|
|
"total_kill_house_request_warehouse_entered_weight": total_kill_house_request_warehouse_entered_weight,
|
|
"total_kill_house_warehouse_cacasses_entered_weight": total_kill_house_warehouse_cacasses_entered_weight,
|
|
"total_kill_house_warehouse_govermental_cacasses_entered_weight": total_kill_house_warehouse_govermental_cacasses_entered_weight,
|
|
"total_kill_house_warehouse_free_cacasses_entered_weight": total_kill_house_warehouse_free_cacasses_entered_weight,
|
|
"total_kill_house_request_warehouse_entered_governmental_weight": total_kill_house_request_warehouse_entered_governmental_weight,
|
|
"total_kill_house_request_warehouse_entered_free_weight": total_kill_house_request_warehouse_entered_free_weight,
|
|
"total_output_weight": total_output_weight,
|
|
"total_kill_house_allocations_weight": total_kill_house_allocations_weight,
|
|
"total_kill_house_free_Sale_bar_weight": total_kill_house_free_Sale_bar_weight,
|
|
"total_other_output_weight": total_segmentations_weight + total_cold_house_allocations_weight,
|
|
"total_remain_weight": total_remain_weight,
|
|
"total_remain_governmental_weight": total_remain_governmental_weight,
|
|
"total_remain_free_weight": total_remain_free_weight,
|
|
"last_total_remain_governmental_weight": last_total_remain_governmental_weight,
|
|
"last_total_remain_free_weight": last_total_remain_free_weight,
|
|
"last_total_remain_weight": last_total_remain_weight,
|
|
"pos_allocated_weight": int(pos_allocated_weight / 1000),
|
|
"pos_governmental_allocated_weight": int(pos_governmental_allocated_weight / 1000),
|
|
"pos_free_allocated_weight": int(pos_free_allocated_weight / 1000),
|
|
"total_archive_governmental_weight": total_archive_governmental_weight,
|
|
"total_archive_free_weight": total_archive_free_weight,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseMarketInfoSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'info']
|
|
|
|
def get_info(self, obj):
|
|
date1 = self.context.get('date1')
|
|
date2 = self.context.get('date2')
|
|
kill_houses = self.context.get('kill_houses')
|
|
if date1:
|
|
kill_house_info = market_kill_request_share_quantity(obj, date1, date2, total_kill_houses=kill_houses)
|
|
else:
|
|
kill_house_info = market_kill_request_share_quantity(obj, total_kill_houses=kill_houses)
|
|
|
|
result = {
|
|
"total_poultry_requests_quantity": kill_house_info['total_poultry_requests_quantity'],
|
|
"kill_house_today_share": kill_house_info['kill_house_today_share'],
|
|
"market_light_share": kill_house_info['market_light_share'],
|
|
"kill_house_market_kill_requests_quantity": kill_house_info['kill_house_market_kill_requests_quantity'],
|
|
"kill_house_market_kill_requests_quantity_first": kill_house_info[
|
|
'kill_house_market_kill_requests_quantity_first'],
|
|
"kill_house_market_kill_requests_quantity_final": kill_house_info[
|
|
'kill_house_market_kill_requests_quantity_final'],
|
|
"kill_house_today_left_share": kill_house_info['kill_house_today_left_share'],
|
|
"kill_house_market_kill_requests_quantity_weight": kill_house_info[
|
|
'kill_house_market_kill_requests_quantity_weight'],
|
|
"kill_house_market_kill_requests_quantity_first_weight": kill_house_info[
|
|
'kill_house_market_kill_requests_quantity_first_weight'],
|
|
"kill_house_market_kill_requests_quantity_final_weight": kill_house_info[
|
|
'kill_house_market_kill_requests_quantity_final_weight'],
|
|
"total_kill_house_market_kill_requests_quantity_agreement_light_weight": kill_house_info[
|
|
'total_kill_house_market_kill_requests_quantity_agreement_light_weight'],
|
|
"total_kill_house_market_kill_requests_quantity_light_weight": kill_house_info[
|
|
'total_kill_house_market_kill_requests_quantity_light_weight'],
|
|
"total_kill_house_market_kill_requests_quantity_heavy_weight": kill_house_info[
|
|
'total_kill_house_market_kill_requests_quantity_heavy_weight'],
|
|
}
|
|
return result
|
|
|
|
|
|
class KillHouseForKillHousePercentageSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
system_address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'system_address', 'kill_house_operator', 'name', 'active', 'killer', 'type']
|
|
|
|
|
|
class KillHouseForTotalReportAutomaticStewardAllocationSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
quantity_info = serializers.SerializerMethodField('get_quantity_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['name', 'killer', 'kill_house_operator', 'quantity_info']
|
|
|
|
def get_quantity_info(self, obj):
|
|
from django.db.models import F, Sum, DecimalField
|
|
date = datetime.datetime.strptime(str(self.context.get('request').GET['date']), '%Y-%m-%d').date()
|
|
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
kill_request__recive_date__date=date
|
|
).select_related(
|
|
'province_request__poultry_request')
|
|
allocations = StewardAllocation.objects.filter(kill_house=obj, date__date=date)
|
|
|
|
total_quantity = province_kill_requests.aggregate(total_quantity=Sum('main_quantity')).get(
|
|
'total_quantity', 0)
|
|
total_allocations = allocations.aggregate(total_quantity=Sum('real_number_of_carcasses')).get(
|
|
'total_quantity', 0)
|
|
if total_quantity == None:
|
|
total_quantity = 0
|
|
if total_allocations == None:
|
|
total_allocations = 0
|
|
|
|
if total_quantity == None:
|
|
total_quantity = 0
|
|
if total_allocations == None:
|
|
total_allocations = 0
|
|
remain_quantity = total_quantity - total_allocations
|
|
|
|
return {
|
|
"total_quantity": total_quantity,
|
|
"total_allocations": total_allocations,
|
|
"remain_quantity": remain_quantity
|
|
}
|
|
|
|
|
|
class KillHouseWageForTotalDashbordSerializer(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
return_to_province=False,
|
|
trash=False)
|
|
|
|
unpaid_province_kill_requests = province_kill_requests.filter(
|
|
wage_pay=False,
|
|
archive_by_province=False,
|
|
return_to_province=False,
|
|
trash=False)
|
|
|
|
paid_province_kill_requests = province_kill_requests.filter(
|
|
wage_pay=True,
|
|
archive_by_province=False,
|
|
return_to_province=False,
|
|
|
|
trash=False)
|
|
|
|
archive_province_kill_requests = province_kill_requests.filter(
|
|
wage_pay=False,
|
|
archive_by_province=True,
|
|
return_to_province=False,
|
|
trash=False)
|
|
|
|
return {
|
|
"total_count": len(province_kill_requests),
|
|
"paid_count": len(paid_province_kill_requests),
|
|
"unpaid_count": len(unpaid_province_kill_requests),
|
|
"archive_count": len(archive_province_kill_requests),
|
|
"total_quantity": province_kill_requests.aggregate(total=Sum('total_killed_quantity'))['total'] or 0,
|
|
"total_weight": province_kill_requests.aggregate(total=Sum('total_killed_weight'))['total'] or 0,
|
|
"total_wage": province_kill_requests.aggregate(total=Sum(F('total_killed_weight') * F('wage')))[
|
|
'total'],
|
|
"total_paid_quantity": paid_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
|
'total'] or 0,
|
|
"total_weight_paid":
|
|
paid_province_kill_requests.aggregate(total=Sum('total_killed_weight'))['total'] or 0,
|
|
"total_paid_wage": paid_province_kill_requests.aggregate(total=Sum(F('total_killed_weight') * F('wage')))[
|
|
'total'] or 0,
|
|
"total_unpaid_quantity": unpaid_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
|
'total'] or 0,
|
|
"total_weight_unpaid": unpaid_province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
'total'] or 0,
|
|
"total_unpaid_wage":
|
|
unpaid_province_kill_requests.aggregate(total=Sum(F('total_killed_weight') * F('wage')))[
|
|
'total'],
|
|
"total_archive_quantity": archive_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
|
'total'] or 0,
|
|
"total_weight_archive": archive_province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
'total'] or 0,
|
|
"total_archive_wage":
|
|
archive_province_kill_requests.aggregate(total=Sum(F('total_killed_weight') * F('wage')))[
|
|
'total'],
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForAutomaticStewardAllocationSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
system_address = SystemAddressSerializer(read_only=True)
|
|
province_kill_request_information = serializers.SerializerMethodField('get_province_kill_request_information')
|
|
date = serializers.SerializerMethodField('get_date')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'system_address', 'kill_house_operator', 'name', 'active', 'killer',
|
|
'province_kill_request_information', 'date'
|
|
]
|
|
|
|
def get_province_kill_request_information(self, obj):
|
|
from datetime import datetime, timedelta
|
|
date = datetime.strptime(str(self.context.get('request').GET['date']), '%Y-%m-%d').date()
|
|
ware_house = KillHouseWareHouse.objects.filter(kill_house=obj, date__date=date).first()
|
|
if not ware_house:
|
|
ware_house_date = datetime(year=date.year, month=date.month, day=date.day, hour=1, minute=12, second=20)
|
|
ware_house = KillHouseWareHouse(
|
|
kill_house=obj,
|
|
date=ware_house_date
|
|
)
|
|
ware_house.save()
|
|
|
|
total_number_of_carcasses_temp = ware_house.update_total_number_of_carcasses + ware_house.pre_cold_number_of_carcasses_to_ware_house if ware_house.update_total_number_of_carcasses > 0 else ware_house.total_number_of_carcasses + ware_house.pre_cold_number_of_carcasses_to_ware_house
|
|
total_weight_of_carcasses_temp = ware_house.update_total_weight_of_carcasses + ware_house.pre_cold_weight_of_carcasses_to_ware_house if ware_house.update_total_weight_of_carcasses > 0 else ware_house.total_weight_of_carcasses + ware_house.pre_cold_weight_of_carcasses_to_ware_house
|
|
return {
|
|
"total_number_of_carcasses": total_number_of_carcasses_temp,
|
|
"total_weight_of_carcasses": total_weight_of_carcasses_temp,
|
|
"allocated_total_number_of_carcasses": ware_house.allocated_total_number_of_carcasses,
|
|
"pre_cold_number_of_carcasses_self_ware_house": ware_house.pre_cold_number_of_carcasses_self_ware_house,
|
|
"pre_cold_weight_of_carcasses_self_ware_house": ware_house.pre_cold_weight_of_carcasses_self_ware_house,
|
|
"allocated_total_weight_of_carcasses": ware_house.allocated_total_weight_of_carcasses,
|
|
"remain_total_number_of_carcasses": total_number_of_carcasses_temp - ware_house.allocated_total_number_of_carcasses if ware_house.pre_cold_number_of_carcasses_self_ware_house == 0 else 0,
|
|
"remain_total_weight_of_carcasses": total_weight_of_carcasses_temp - ware_house.allocated_total_weight_of_carcasses if ware_house.pre_cold_weight_of_carcasses_to_ware_house == 0 else 0,
|
|
|
|
}
|
|
|
|
def get_date(self, obj):
|
|
return datetime.datetime.strptime(str(self.context.get('request').GET['date']), '%Y-%m-%d').date()
|
|
|
|
|
|
class KillHousePurchaseRequestSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForKillHousePercentageSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHousePurchaseRequest
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseforPurchaseRequestSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
system_address = SystemAddressSerializer(read_only=True)
|
|
allow_purchase_request = serializers.SerializerMethodField('get_allow_purchase_request')
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
kill_house_for_killer = serializers.SerializerMethodField('get_kill_house_for_killer')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'max_kill_limit', 'extra_bar_kill_percent', 'total_kill_capacity', 'kill_house_operator',
|
|
'name', 'killer', 'system_address', 'allow_purchase_request', 'wage_info', 'type', 'killer',
|
|
'kill_house_for_killer', 'out_province_selling_limitation', 'out_province_selling_limitation_percent',
|
|
'in_province_selling_limitation', 'in_province_selling_limitation_percent', 'quota', 'free_quota',
|
|
'governmental_quota', 'quota_max_kill_limit', 'quota_request', 'quota_custom',
|
|
'quota_custom_quantity', 'maximum_load_volume_increase', 'maximum_load_volume_reduction',
|
|
'ware_house_remaining_percent_limitation', 'ware_house_remaining_percent_limitation_status',
|
|
'ware_house_remaining_weight_limitation', 'ware_house_remaining_weight_limitation_status','ware_house_remaining_weight_archive_percent']
|
|
|
|
def get_allow_purchase_request(self, obj):
|
|
allow = True
|
|
limitation = False
|
|
total_limitation = False
|
|
limitation_number = 0
|
|
purchase_request = KillHousePurchaseRequest.objects.filter(kill_house=obj).first()
|
|
if purchase_request:
|
|
allow = purchase_request.allow
|
|
limitation = purchase_request.limitation
|
|
limitation_number = purchase_request.limitation_number
|
|
total_limitation = purchase_request.total_limitation
|
|
|
|
return {
|
|
"allow": allow,
|
|
"limitation": limitation,
|
|
"limitation_number": limitation_number,
|
|
"total_limitation": total_limitation,
|
|
}
|
|
|
|
# def get_wage_info(self, obj):
|
|
# total_unpaid_wage = 0
|
|
# total_paid_wage = 0
|
|
# kill_house_kill_requests_wage = 0
|
|
# real_free_sale_wage = 0
|
|
# # role = self.context.get('request').GET['role']
|
|
# total_unpaid_wage = get_finance_info(obj)['total_price']
|
|
# slaughter_transactions = InternalTransaction.objects.filter(Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
# status='completed',
|
|
# trash=False)
|
|
#
|
|
# total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
# 'total'] or 0
|
|
#
|
|
# return {
|
|
# "user_token": 'k' + obj.kill_house_operator.user.user_gate_way_id,
|
|
# "total_amount": total_unpaid_wage - (total_paid_wage + obj.off)
|
|
# }
|
|
def get_wage_info(self, obj):
|
|
total_unpaid_wage = 0
|
|
total_paid_wage = 0
|
|
kill_house_kill_requests_wage = 0
|
|
real_free_sale_wage = 0
|
|
# role = self.context.get('request').GET['role']
|
|
total_unpaid_wage = get_finance_info(obj)['total_price']
|
|
if obj.killer and obj.type == 'public':
|
|
slaughter_transactions = InternalTransaction.objects.filter(kill_house=obj,parent_kill_house=obj,
|
|
status='completed',
|
|
trash=False)
|
|
else:
|
|
slaughter_transactions = InternalTransaction.objects.filter(Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
trash=False)
|
|
|
|
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"user_token": 'k' + obj.kill_house_operator.user.user_gate_way_id,
|
|
"total_amount": total_unpaid_wage - (total_paid_wage + obj.off)
|
|
}
|
|
|
|
def get_kill_house_for_killer(self, obj):
|
|
kill_house_for_killer_info = None
|
|
kill_house_for_killer = KillHousePercentage.objects.filter(kill_house=obj, kill_house_for_killer__isnull=False,
|
|
kill_house__killer=True).first()
|
|
|
|
if kill_house_for_killer:
|
|
kill_house_for_killer_info = {
|
|
"kill_house_name": kill_house_for_killer.kill_house_for_killer.name,
|
|
"fullname": kill_house_for_killer.kill_house_for_killer.kill_house_operator.user.fullname,
|
|
"mobile": kill_house_for_killer.kill_house_for_killer.kill_house_operator.user.mobile,
|
|
}
|
|
|
|
return kill_house_for_killer_info
|
|
|
|
|
|
class KillHouseForKillingInformationDiscrepancyReportSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'kill_house_operator', 'name', 'killer']
|
|
|
|
|
|
class PosKillHouseForKillingInformationDiscrepancyReportSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name']
|
|
|
|
|
|
class KillHouseForProvinceSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForColdHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'killer', 'kill_house_operator']
|
|
|
|
|
|
class KillHouseForProvinceWageSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'info']
|
|
|
|
def get_info(self, obj):
|
|
total_quantity = 0
|
|
total_weight = 0
|
|
total_wage = 0
|
|
role = self.context.get('request').GET['role']
|
|
|
|
if role in ['KillHouse', 'SuperAdmin', 'AdminX', 'Supporter']:
|
|
wage_type = 'total_wage_amount'
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
return_to_province=False,
|
|
archive_wage=False,
|
|
trash=False).select_related(
|
|
'province_request__poultry_request')
|
|
elif role == 'ProvinceOperator':
|
|
wage_type = 'union_share'
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
union_share__gt=0,
|
|
return_to_province=False,
|
|
archive_wage=False,
|
|
trash=False).select_related(
|
|
'province_request__poultry_request')
|
|
elif role == 'Company':
|
|
wage_type = 'company_share'
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
company_share__gt=0,
|
|
return_to_province=False,
|
|
archive_wage=False,
|
|
trash=False).select_related(
|
|
'province_request__poultry_request')
|
|
elif role == 'Guilds':
|
|
wage_type = 'guilds_share'
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
guilds_share__gt=0,
|
|
return_to_province=False,
|
|
archive_wage=False,
|
|
trash=False).select_related(
|
|
'province_request__poultry_request')
|
|
else:
|
|
wage_type = 'wallet_share'
|
|
|
|
total_quantity += province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
|
'total'] or 0
|
|
|
|
total_weight += province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
|
|
total_wage += province_kill_requests.aggregate(total=Sum(wage_type))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"killer": obj.killer,
|
|
"kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
"kill_house_name": obj.name,
|
|
"kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
"kill_house_city": obj.kill_house_operator.user.city.name,
|
|
"total_count": len(province_kill_requests),
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
"total_wage": total_wage,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForKillHouseRequestWageSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'info']
|
|
|
|
def get_info(self, obj):
|
|
total_quantity = 0
|
|
total_weight = 0
|
|
role = self.context.get('request').GET['role']
|
|
if role == 'ProvinceOperator':
|
|
kill_house_requests = KillHouseRequest.objects.filter(Q(killhouse_user=obj) | Q(killer=obj),
|
|
province_kill_request__union_share__gt=0,
|
|
archive_wage=False, trash=False)
|
|
elif role == 'Company':
|
|
kill_house_requests = KillHouseRequest.objects.filter(Q(killhouse_user=obj) | Q(killer=obj),
|
|
province_kill_request__company_share__gt=0,
|
|
archive_wage=False, trash=False)
|
|
elif role == 'Guilds':
|
|
|
|
kill_house_requests = KillHouseRequest.objects.filter(Q(killhouse_user=obj) | Q(killer=obj),
|
|
province_kill_request__guilds_share__gt=0,
|
|
archive_wage=False, trash=False)
|
|
else:
|
|
kill_house_requests = KillHouseRequest.objects.filter(Q(killhouse_user=obj) | Q(killer=obj),
|
|
archive_wage=False, trash=False)
|
|
|
|
total_quantity += kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
|
'total'] or 0
|
|
|
|
total_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"killer": obj.killer,
|
|
"kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
"kill_house_name": obj.name,
|
|
"kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
"kill_house_city": obj.kill_house_operator.user.city.name,
|
|
"total_count": len(kill_house_requests),
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForNewWageInormationSerializer(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
shares = serializers.SerializerMethodField('get_shares')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'wage_info', 'shares']
|
|
|
|
# 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()
|
|
# total_paid_wage = 0
|
|
# if date1:
|
|
# # finance_info = get_kill_house_finance_info(obj,date1,date2)
|
|
# finance_info = get_finance_info(obj, date1, date2)
|
|
# slaughter_transactions = InternalTransaction.objects.filter(
|
|
# Q(kill_house=obj) | Q(parent_kill_house=obj), status='completed', date__date__gte=date1,
|
|
# date__date__lte=date2,
|
|
# trash=False)
|
|
# else:
|
|
# # finance_info = get_kill_house_finance_info(obj)
|
|
# finance_info = get_finance_info(obj)
|
|
# slaughter_transactions = InternalTransaction.objects.filter(
|
|
# Q(kill_house=obj) | Q(parent_kill_house=obj), status='completed',
|
|
# trash=False)
|
|
#
|
|
# total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
# 'total'] or 0
|
|
#
|
|
# return {
|
|
# "wage_counting_type": wage_counting_type,
|
|
# "total_wage": finance_info['total_price'],
|
|
# "total_paid_wage": total_paid_wage,
|
|
# "off": obj.off,
|
|
# "total_unpaid_wage": finance_info['total_price'] - (total_paid_wage + obj.off),
|
|
# "province_kill_requests_total_wage": finance_info['total_pure_province_carcasses_price'],
|
|
# "province_kill_requests_total_weight": finance_info['total_pure_province_carcasses_weight'],
|
|
# "free_bars_live_total_wage": finance_info['total_out_live_buying_province_carcasses_price'],
|
|
# "free_bars_live_total_weight": finance_info['total_out_live_buying_province_carcasses_weight'],
|
|
# "free_bars_carcases_total_wage": finance_info['total_out_carcasses_buying_province_carcasses_price'],
|
|
# "free_bars_carcases_total_weight": finance_info['total_out_carcasses_buying_province_carcasses_weight'],
|
|
# "free_bars_out_province_carcases_total_wage": finance_info['total_out_selling_province_carcasses_price'],
|
|
# "free_bars_out_province_carcases_total_weight": finance_info['total_out_selling_province_carcasses_weight'],
|
|
# "total_province_live_weight": finance_info['total_province_live_weight'],
|
|
# "total_province_carcasses_weight": finance_info['total_province_carcasses_weight'],
|
|
# "province_live_wage_amount": finance_info['province_live_wage_amount'],
|
|
# "free_buying_live_weight_amount": finance_info['free_buying_live_weight_amount'],
|
|
# "free_buying_carcesses_weight_amount": finance_info['free_buying_carcesses_weight_amount'],
|
|
# "free_sell_carcesses_weight_amount": finance_info['free_sell_carcesses_weight_amount'],
|
|
# "return_total_province_live_weight": finance_info['return_total_province_live_weight'],
|
|
# "total_return_pure_province_carcasses_price": finance_info['total_return_pure_province_carcasses_price'],
|
|
# }
|
|
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()
|
|
total_paid_wage = 0
|
|
if date1:
|
|
# finance_info = get_kill_house_finance_info(obj,date1,date2)
|
|
finance_info = get_finance_info(obj, date1, date2)
|
|
if obj.killer and obj.type == 'public':
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house=obj,parent_kill_house=obj, status='completed', date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False)
|
|
else:
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj), status='completed', date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False)
|
|
else:
|
|
# finance_info = get_kill_house_finance_info(obj)
|
|
finance_info = get_finance_info(obj)
|
|
if obj.killer and obj.type == 'public':
|
|
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house=obj,parent_kill_house=obj, status='completed',
|
|
trash=False)
|
|
else:
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj), status='completed',
|
|
trash=False)
|
|
|
|
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"wage_counting_type": wage_counting_type,
|
|
"total_wage": finance_info['total_price'],
|
|
"total_paid_wage": total_paid_wage,
|
|
"off": obj.off,
|
|
"total_unpaid_wage": finance_info['total_price'] - (total_paid_wage + obj.off),
|
|
"province_kill_requests_total_wage": finance_info['total_pure_province_carcasses_price'],
|
|
"province_kill_requests_total_weight": finance_info['total_pure_province_carcasses_weight'],
|
|
"free_bars_live_total_wage": finance_info['total_out_live_buying_province_carcasses_price'],
|
|
"free_bars_live_total_weight": finance_info['total_out_live_buying_province_carcasses_weight'],
|
|
"free_bars_carcases_total_wage": finance_info['total_out_carcasses_buying_province_carcasses_price'],
|
|
"free_bars_carcases_total_weight": finance_info['total_out_carcasses_buying_province_carcasses_weight'],
|
|
"free_bars_out_province_carcases_total_wage": finance_info['total_out_selling_province_carcasses_price'],
|
|
"free_bars_out_province_carcases_total_weight": finance_info['total_out_selling_province_carcasses_weight'],
|
|
"total_province_live_weight": finance_info['total_province_live_weight'],
|
|
"total_province_carcasses_weight": finance_info['total_province_carcasses_weight'],
|
|
"province_live_wage_amount": finance_info['province_live_wage_amount'],
|
|
"free_buying_live_weight_amount": finance_info['free_buying_live_weight_amount'],
|
|
"free_buying_carcesses_weight_amount": finance_info['free_buying_carcesses_weight_amount'],
|
|
"free_sell_carcesses_weight_amount": finance_info['free_sell_carcesses_weight_amount'],
|
|
"return_total_province_live_weight": finance_info['return_total_province_live_weight'],
|
|
"total_return_pure_province_carcasses_price": finance_info['total_return_pure_province_carcasses_price'],
|
|
}
|
|
|
|
# def get_shares(self, kill_house):
|
|
# date1 = None
|
|
# date2 = None
|
|
# before_total_out_live_buying_province_carcasses_price = 0
|
|
# total_wage_type = WageType.objects.filter(trash=False)
|
|
# free_buying_live_weight_wage_type = total_wage_type.filter(en_name='live-buy', trash=False).first()
|
|
# free_buying_live_weight_wage_type_amount = free_buying_live_weight_wage_type.amount if free_buying_live_weight_wage_type.status == True else 0
|
|
#
|
|
# 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()
|
|
#
|
|
# finance_info = get_finance_info(kill_house, date1, date2) if date1 else get_finance_info(kill_house)
|
|
# if date1:
|
|
# slaughter_transactions = InternalTransaction.objects.filter(
|
|
# Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), status='completed', date__date__gte=date1,
|
|
# date__date__lte=date2,
|
|
# trash=False)
|
|
# else:
|
|
# slaughter_transactions = InternalTransaction.objects.filter(
|
|
# Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), status='completed',
|
|
# trash=False)
|
|
#
|
|
# total_pure_province_carcasses_price = finance_info['total_pure_province_carcasses_price']
|
|
# return_total_pure_province_carcasses_price = finance_info['total_return_pure_province_carcasses_price']
|
|
# total_out_selling_province_carcasses_price = finance_info['total_out_selling_province_carcasses_price']
|
|
# difference_requests_price = finance_info['difference_requests_price']
|
|
#
|
|
# if new_out_selling_count_wage:
|
|
# total_out_live_buying_province_carcasses_price = int(
|
|
# (finance_info[
|
|
# 'before_total_out_live_buying_province_carcasses_weight'] * before_out_buying_count_wage_amount) + (
|
|
# finance_info[
|
|
# 'after_total_out_live_buying_province_carcasses_weight'] * free_buying_live_weight_wage_type_amount))
|
|
#
|
|
# before_total_out_live_buying_province_carcasses_price = finance_info[
|
|
# 'before_total_out_live_buying_province_carcasses_weight'] * before_out_buying_count_wage_amount
|
|
# else:
|
|
# total_out_live_buying_province_carcasses_price = finance_info[
|
|
# 'total_out_live_buying_province_carcasses_price']
|
|
# total_out_carcasses_buying_province_carcasses_price = finance_info[
|
|
# 'total_out_carcasses_buying_province_carcasses_price']
|
|
# total_price = finance_info['total_price']
|
|
#
|
|
# percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
# union_province_kill_request_percent = percentages_wage_type.filter(
|
|
# wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
|
# company_province_kill_request_percent = percentages_wage_type.filter(
|
|
# wage_type__en_name='province-kill-request', share_type__en_name='company').first().percent / 100
|
|
# guilds_province_kill_request_percent = percentages_wage_type.filter(
|
|
# wage_type__en_name='province-kill-request', share_type__en_name='guilds').first().percent / 100
|
|
# other_province_kill_request_percent = percentages_wage_type.filter(
|
|
# wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
|
#
|
|
# union_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
# share_type__en_name='union').first().percent / 100
|
|
# union_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
# share_type__en_name='union').first().percent / 100
|
|
# company_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
# share_type__en_name='company').first().percent / 100
|
|
# company_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
# share_type__en_name='company').first().percent / 100
|
|
# guilds_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
# share_type__en_name='guilds').first().percent / 100
|
|
# guilds_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
# share_type__en_name='guilds').first().percent / 100
|
|
# other_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
# share_type__en_name='other').first().percent / 100
|
|
# other_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
# share_type__en_name='other').first().percent / 100
|
|
#
|
|
# union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
# share_type__en_name='union').first().percent / 100
|
|
# company_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
# share_type__en_name='company').first().percent / 100
|
|
# guilds_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
# share_type__en_name='guilds').first().percent / 100
|
|
# other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
# share_type__en_name='other').first().percent / 100
|
|
#
|
|
# guilds_difference_requests_price = difference_requests_price * guilds_province_kill_request_percent
|
|
# other_difference_requests_price = difference_requests_price * other_province_kill_request_percent
|
|
# guild_return_province_kill_request_wage = return_total_pure_province_carcasses_price * guilds_province_kill_request_percent
|
|
# other_return_province_kill_request_wage = return_total_pure_province_carcasses_price * other_province_kill_request_percent
|
|
#
|
|
# union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
# return_union_province_kill_request_wage = return_total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
# union_free_buying_live_wage = (
|
|
# total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * union_free_buying_live_percent
|
|
# union_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * union_free_buying_carcasses_percent
|
|
# union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
|
# union_total_wage = union_province_kill_request_wage + union_free_buying_live_wage + union_free_buying_carcasses_wage + union_free_sell_carcasses_wage + return_union_province_kill_request_wage
|
|
# union_total_paid_wage = slaughter_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
|
# union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
|
# company_province_kill_request_wage = (
|
|
# total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
# guilds_difference_requests_price + other_difference_requests_price)
|
|
# return_company_province_kill_request_wage = (
|
|
# return_total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
# guild_return_province_kill_request_wage + other_return_province_kill_request_wage)
|
|
# company_free_buying_live_wage = ((
|
|
# total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * company_free_buying_live_percent) + before_total_out_live_buying_province_carcasses_price
|
|
# company_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * company_free_buying_carcasses_percent
|
|
# company_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * company_free_sell_carcasses_percent
|
|
# company_total_wage = company_province_kill_request_wage + company_free_buying_live_wage + company_free_buying_carcasses_wage + company_free_sell_carcasses_wage + return_company_province_kill_request_wage
|
|
# company_total_paid_wage = slaughter_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
|
# company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
|
#
|
|
# guilds_province_kill_request_wage = (
|
|
# total_pure_province_carcasses_price * guilds_province_kill_request_percent) - guilds_difference_requests_price
|
|
# return_guilds_province_kill_request_wage = 0
|
|
# guilds_free_buying_live_wage = (
|
|
# total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * guilds_free_buying_live_percent
|
|
# guilds_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * guilds_free_buying_carcasses_percent
|
|
# guilds_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * guilds_free_sell_carcasses_percent
|
|
# guilds_total_wage = guilds_province_kill_request_wage + guilds_free_buying_live_wage + guilds_free_buying_carcasses_wage + guilds_free_sell_carcasses_wage
|
|
# guilds_total_paid_wage = slaughter_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
|
# guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
|
#
|
|
# other_province_kill_request_wage = (
|
|
# total_pure_province_carcasses_price * other_province_kill_request_percent) - other_difference_requests_price
|
|
# return_other_province_kill_request_wage = 0
|
|
# other_free_buying_live_wage = (
|
|
# total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * other_free_buying_live_percent
|
|
# other_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * other_free_buying_carcasses_percent
|
|
# other_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * other_free_sell_carcasses_percent
|
|
# other_total_wage = other_province_kill_request_wage + other_free_buying_live_wage + other_free_buying_carcasses_wage + other_free_sell_carcasses_wage
|
|
# other_total_paid_wage = slaughter_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
|
# other_total_unpaid_wage = other_total_wage - other_total_paid_wage
|
|
# return [
|
|
# {
|
|
# "name": "اتحادیه",
|
|
# "province_kill_request_wage": union_province_kill_request_wage,
|
|
# "return_province_kill_request_wage": return_union_province_kill_request_wage,
|
|
# "free_buying_live_wage": union_free_buying_live_wage,
|
|
# "free_buying_carcasses_wage": union_free_buying_carcasses_wage,
|
|
# "free_sell_carcasses_wage": union_free_sell_carcasses_wage,
|
|
# "total_wage": union_total_wage,
|
|
# "total_paid_wage": union_total_paid_wage,
|
|
# "total_unpaid_wage": union_total_unpaid_wage,
|
|
# },
|
|
# {
|
|
# "name": "شرکت",
|
|
# "province_kill_request_wage": company_province_kill_request_wage,
|
|
# "return_province_kill_request_wage": return_company_province_kill_request_wage,
|
|
# "free_buying_live_wage": company_free_buying_live_wage,
|
|
# "free_buying_carcasses_wage": company_free_buying_carcasses_wage,
|
|
# "free_sell_carcasses_wage": company_free_sell_carcasses_wage,
|
|
# "total_wage": company_total_wage,
|
|
# "total_paid_wage": company_total_paid_wage,
|
|
# "total_unpaid_wage": company_total_unpaid_wage,
|
|
# },
|
|
# {
|
|
# "name": "صنف پروتئین",
|
|
# "province_kill_request_wage": guilds_province_kill_request_wage,
|
|
# "return_province_kill_request_wage": return_guilds_province_kill_request_wage,
|
|
# "free_buying_live_wage": guilds_free_buying_live_wage,
|
|
# "free_buying_carcasses_wage": guilds_free_buying_carcasses_wage,
|
|
# "free_sell_carcasses_wage": guilds_free_sell_carcasses_wage,
|
|
# "total_wage": guilds_total_wage,
|
|
# "total_paid_wage": guilds_total_paid_wage,
|
|
# "total_unpaid_wage": guilds_total_unpaid_wage,
|
|
# },
|
|
# {
|
|
# "name": "دامپزشک",
|
|
# "province_kill_request_wage": other_province_kill_request_wage,
|
|
# "return_province_kill_request_wage": return_other_province_kill_request_wage,
|
|
# "free_buying_live_wage": other_free_buying_live_wage,
|
|
# "free_buying_carcasses_wage": other_free_buying_carcasses_wage,
|
|
# "free_sell_carcasses_wage": other_free_sell_carcasses_wage,
|
|
# "total_wage": other_total_wage,
|
|
# "total_paid_wage": other_total_paid_wage,
|
|
# "total_unpaid_wage": other_total_unpaid_wage,
|
|
# }]
|
|
def get_shares(self, kill_house):
|
|
date1 = None
|
|
date2 = None
|
|
before_total_out_live_buying_province_carcasses_price = 0
|
|
total_wage_type = WageType.objects.filter(trash=False)
|
|
free_buying_live_weight_wage_type = total_wage_type.filter(en_name='live-buy', trash=False).first()
|
|
free_buying_live_weight_wage_type_amount = free_buying_live_weight_wage_type.amount if free_buying_live_weight_wage_type.status == True else 0
|
|
|
|
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()
|
|
|
|
finance_info = get_finance_info(kill_house, date1, date2) if date1 else get_finance_info(kill_house)
|
|
if date1:
|
|
if kill_house.killer and kill_house.type == 'public':
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
ill_house=kill_house,parent_kill_house=kill_house, status='completed', date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False)
|
|
else:
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), status='completed',
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False)
|
|
else:
|
|
if kill_house.killer and kill_house.type == 'public':
|
|
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house=kill_house,parent_kill_house=kill_house, status='completed',
|
|
trash=False)
|
|
else:
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), status='completed',
|
|
trash=False)
|
|
|
|
total_pure_province_carcasses_price = finance_info['total_pure_province_carcasses_price']
|
|
return_total_pure_province_carcasses_price = finance_info['total_return_pure_province_carcasses_price']
|
|
total_out_selling_province_carcasses_price = finance_info['total_out_selling_province_carcasses_price']
|
|
difference_requests_price = finance_info['difference_requests_price']
|
|
|
|
if new_out_selling_count_wage:
|
|
total_out_live_buying_province_carcasses_price = int(
|
|
(finance_info[
|
|
'before_total_out_live_buying_province_carcasses_weight'] * before_out_buying_count_wage_amount) + (
|
|
finance_info[
|
|
'after_total_out_live_buying_province_carcasses_weight'] * free_buying_live_weight_wage_type_amount))
|
|
|
|
before_total_out_live_buying_province_carcasses_price = finance_info[
|
|
'before_total_out_live_buying_province_carcasses_weight'] * before_out_buying_count_wage_amount
|
|
else:
|
|
total_out_live_buying_province_carcasses_price = finance_info[
|
|
'total_out_live_buying_province_carcasses_price']
|
|
total_out_carcasses_buying_province_carcasses_price = finance_info[
|
|
'total_out_carcasses_buying_province_carcasses_price']
|
|
total_price = finance_info['total_price']
|
|
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
union_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
|
company_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='company').first().percent / 100
|
|
guilds_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='guilds').first().percent / 100
|
|
other_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
|
|
|
union_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='union').first().percent / 100
|
|
union_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='company').first().percent / 100
|
|
company_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
guilds_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='other').first().percent / 100
|
|
other_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
guilds_difference_requests_price = difference_requests_price * guilds_province_kill_request_percent
|
|
other_difference_requests_price = difference_requests_price * other_province_kill_request_percent
|
|
guild_return_province_kill_request_wage = return_total_pure_province_carcasses_price * guilds_province_kill_request_percent
|
|
other_return_province_kill_request_wage = return_total_pure_province_carcasses_price * other_province_kill_request_percent
|
|
|
|
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
return_union_province_kill_request_wage = return_total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
union_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * union_free_buying_live_percent
|
|
union_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * union_free_buying_carcasses_percent
|
|
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
|
union_total_wage = union_province_kill_request_wage + union_free_buying_live_wage + union_free_buying_carcasses_wage + union_free_sell_carcasses_wage + return_union_province_kill_request_wage
|
|
union_total_paid_wage = slaughter_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
|
union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
|
company_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
guilds_difference_requests_price + other_difference_requests_price)
|
|
return_company_province_kill_request_wage = (
|
|
return_total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
guild_return_province_kill_request_wage + other_return_province_kill_request_wage)
|
|
company_free_buying_live_wage = ((
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * company_free_buying_live_percent) + before_total_out_live_buying_province_carcasses_price
|
|
company_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * company_free_buying_carcasses_percent
|
|
company_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * company_free_sell_carcasses_percent
|
|
company_total_wage = company_province_kill_request_wage + company_free_buying_live_wage + company_free_buying_carcasses_wage + company_free_sell_carcasses_wage + return_company_province_kill_request_wage
|
|
company_total_paid_wage = slaughter_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
|
company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
|
|
|
guilds_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * guilds_province_kill_request_percent) - guilds_difference_requests_price
|
|
return_guilds_province_kill_request_wage = 0
|
|
guilds_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * guilds_free_buying_live_percent
|
|
guilds_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * guilds_free_buying_carcasses_percent
|
|
guilds_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * guilds_free_sell_carcasses_percent
|
|
guilds_total_wage = guilds_province_kill_request_wage + guilds_free_buying_live_wage + guilds_free_buying_carcasses_wage + guilds_free_sell_carcasses_wage
|
|
guilds_total_paid_wage = slaughter_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
|
guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
|
|
|
other_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * other_province_kill_request_percent) - other_difference_requests_price
|
|
return_other_province_kill_request_wage = 0
|
|
other_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * other_free_buying_live_percent
|
|
other_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * other_free_buying_carcasses_percent
|
|
other_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * other_free_sell_carcasses_percent
|
|
other_total_wage = other_province_kill_request_wage + other_free_buying_live_wage + other_free_buying_carcasses_wage + other_free_sell_carcasses_wage
|
|
other_total_paid_wage = slaughter_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
|
other_total_unpaid_wage = other_total_wage - other_total_paid_wage
|
|
return [
|
|
{
|
|
"name": "اتحادیه",
|
|
"province_kill_request_wage": union_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_union_province_kill_request_wage,
|
|
"free_buying_live_wage": union_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": union_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": union_free_sell_carcasses_wage,
|
|
"total_wage": union_total_wage,
|
|
"total_paid_wage": union_total_paid_wage,
|
|
"total_unpaid_wage": union_total_unpaid_wage,
|
|
},
|
|
{
|
|
"name": "شرکت",
|
|
"province_kill_request_wage": company_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_company_province_kill_request_wage,
|
|
"free_buying_live_wage": company_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": company_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": company_free_sell_carcasses_wage,
|
|
"total_wage": company_total_wage,
|
|
"total_paid_wage": company_total_paid_wage,
|
|
"total_unpaid_wage": company_total_unpaid_wage,
|
|
},
|
|
{
|
|
"name": "صنف پروتئین",
|
|
"province_kill_request_wage": guilds_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_guilds_province_kill_request_wage,
|
|
"free_buying_live_wage": guilds_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": guilds_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": guilds_free_sell_carcasses_wage,
|
|
"total_wage": guilds_total_wage,
|
|
"total_paid_wage": guilds_total_paid_wage,
|
|
"total_unpaid_wage": guilds_total_unpaid_wage,
|
|
},
|
|
{
|
|
"name": "دامپزشک",
|
|
"province_kill_request_wage": other_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_other_province_kill_request_wage,
|
|
"free_buying_live_wage": other_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": other_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": other_free_sell_carcasses_wage,
|
|
"total_wage": other_total_wage,
|
|
"total_paid_wage": other_total_paid_wage,
|
|
"total_unpaid_wage": other_total_unpaid_wage,
|
|
}]
|
|
|
|
|
|
class KillHouseColdHouseSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForProvinceSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ColdHouse
|
|
fields = ['key', 'kill_house', 'total_input_weight', 'total_allocated_weight',
|
|
'total_remain_weight', 'name', 'province', 'city', 'address', 'capacity', 'active', 'broadcast',
|
|
'relocate']
|
|
|
|
|
|
class KillHouseColdHousesSerializer(serializers.ModelSerializer):
|
|
cold_houses = serializers.SerializerMethodField('get_cold_houses')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'cold_houses']
|
|
|
|
def get_cold_houses(self, obj):
|
|
cold_houses = ColdHouse.objects.filter(kill_house=obj, trash=False)
|
|
serializer = KillHouseColdHouseSerializer(cold_houses, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class KillHouseForColdHouseSerializer(serializers.ModelSerializer):
|
|
cold_houses_info = serializers.SerializerMethodField('get_cold_houses_info')
|
|
fullname = serializers.CharField(source='kill_house_operator.user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='kill_house_operator.user.mobile', read_only=True)
|
|
province = serializers.CharField(source='kill_house_operator.user.province.name', read_only=True)
|
|
city = serializers.CharField(source='kill_house_operator.user.city.name', read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'fullname', 'mobile', 'cold_houses_info', 'province', 'city']
|
|
|
|
def get_cold_houses_info(self, obj):
|
|
cold_houses = ColdHouse.objects.filter(kill_house=obj, trash=False)
|
|
|
|
total_input_weight = cold_houses.aggregate(total=Sum('total_input_weight'))[
|
|
'total'] or 0
|
|
total_allocated_weight = cold_houses.aggregate(total=Sum('total_allocated_weight'))[
|
|
'total'] or 0
|
|
total_remain_weight = cold_houses.aggregate(total=Sum('total_remain_weight'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"total_cold_houses": len(cold_houses),
|
|
"total_input_weight": total_input_weight,
|
|
"total_allocated_weight": total_allocated_weight,
|
|
"total_remain_weight": total_remain_weight,
|
|
}
|
|
|
|
|
|
class ParentCompanyKillHouseForNewWageInormationSerializer(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
total_paid_wage = 0
|
|
finance_info = get_kill_house_finance_info(obj)
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house=obj, status='completed',
|
|
trash=False)
|
|
|
|
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"wage_counting_type": wage_counting_type,
|
|
"total_wage": finance_info['total_price'],
|
|
"total_paid_wage": total_paid_wage,
|
|
"off": obj.off,
|
|
"total_unpaid_wage": finance_info['total_price'] - (total_paid_wage + obj.off),
|
|
"province_kill_requests_total_wage": finance_info['total_pure_province_carcasses_price'],
|
|
"province_kill_requests_total_weight": finance_info['total_pure_province_carcasses_weight'],
|
|
"free_bars_live_total_wage": finance_info['total_out_live_buying_province_carcasses_price'],
|
|
"free_bars_live_total_weight": finance_info['total_out_live_buying_province_carcasses_weight'],
|
|
"free_bars_carcases_total_wage": finance_info['total_out_carcasses_buying_province_carcasses_price'],
|
|
"free_bars_carcases_total_weight": finance_info['total_out_carcasses_buying_province_carcasses_weight'],
|
|
"free_bars_out_province_carcases_total_wage": finance_info['total_out_selling_province_carcasses_price'],
|
|
"free_bars_out_province_carcases_total_weight": finance_info['total_out_selling_province_carcasses_weight'],
|
|
"total_province_live_weight": finance_info['total_province_live_weight'],
|
|
"total_province_carcasses_weight": finance_info['total_province_carcasses_weight'],
|
|
"province_live_wage_amount": finance_info['province_live_wage_amount'],
|
|
"free_buying_live_weight_amount": finance_info['free_buying_live_weight_amount'],
|
|
"free_buying_carcesses_weight_amount": finance_info['free_buying_carcesses_weight_amount'],
|
|
"free_sell_carcesses_weight_amount": finance_info['free_sell_carcesses_weight_amount'],
|
|
}
|
|
|
|
|
|
class KillHouseForProvinceWareHouseDashboardSerializer(serializers.ModelSerializer):
|
|
ware_house_info = serializers.SerializerMethodField('get_ware_house_info')
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'killer', 'kill_house_operator', 'ware_house_info']
|
|
|
|
def _calculate_info(self, obj, date1=None, date2=None):
|
|
product = RolesProducts.objects.filter(kill_house=obj, trash=False, name='مرغ گرم').first()
|
|
if date1:
|
|
bars_date1 = date1
|
|
bars_date2 = date2
|
|
# bars_date1 = date1 - timedelta(days=1)
|
|
# bars_date2 = date1 - timedelta(days=1)
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj, archive_wage=False,
|
|
return_to_province=False,
|
|
state__in=('pending', 'accepted'),
|
|
first_car_allocated_quantity=0, trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
kill_request__recive_date__date__gte=bars_date1,
|
|
kill_request__recive_date__date__lte=bars_date2,
|
|
warehouse=True)
|
|
|
|
# kill_house_requests = KillHouseRequest.objects.filter(
|
|
# Q(killhouse_user=obj) | Q(killer=obj),
|
|
# trash=False, calculate_status=True,
|
|
# archive_wage=False,
|
|
# temporary_trash=False,
|
|
# temporary_deleted=False,
|
|
# kill_request__recive_date__date__gte=date1,
|
|
# kill_request__recive_date__date__lte=date2
|
|
# )
|
|
|
|
kill_house_requests = KillHouseRequest.objects.filter(
|
|
input_warehouse=obj,
|
|
trash=False, calculate_status=True, kill_request__recive_date__date__gte=bars_date1,
|
|
kill_request__recive_date__date__lte=bars_date2, warehouse=True
|
|
)
|
|
# kill_house_requests = kill_house_requests.filter(
|
|
# Q(killhouse_user=obj, killer__isnull=True) | Q(killhouse_user=obj, killer=obj) | Q(
|
|
# killer=obj))
|
|
|
|
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(Q(date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
buy_type='carcass') | Q(
|
|
create_date__date__gte=date1, create_date__date__lte=date2, buy_type='live'), input_warehouse=obj,
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
calculate_status=True,
|
|
warehouse=True).exclude(
|
|
entered_message='ورود به انبار مجازی')
|
|
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(kill_house=obj,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
calculate_status=True,
|
|
warehouse=True)
|
|
|
|
kill_house_allocations = StewardAllocation.objects.filter(kill_house=obj, trash=False,
|
|
receiver_state__in=('pending', 'accepted'),
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
to_cold_house__isnull=True,
|
|
calculate_status=True, date__date__gte=date1,
|
|
date__date__lte=date2, warehouse=True)
|
|
segmentations = PosSegmentation.objects.filter(kill_house=obj, trash=False, date__date__gte=date1,
|
|
date__date__lte=date2, warehouse=True)
|
|
cold_house_allocations = StewardAllocation.objects.filter(
|
|
kill_house=obj,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
to_cold_house__isnull=False,
|
|
receiver_state__in=('accepted', 'pending'),
|
|
trash=False, warehouse=True)
|
|
transactions = ProductsTransactions.objects.filter(product=product, transaction__paid=True,
|
|
transaction__date__date__gte=date1,
|
|
transaction__date__date__lte=date2, trash=False,
|
|
warehouse=True)
|
|
archives = WarehouseArchive.objects.filter(kill_house=obj,date__date__gte=date1,date__date__lte=date2, trash=False,warehouse=True)
|
|
|
|
|
|
else:
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj, archive_wage=False,
|
|
return_to_province=False,
|
|
state__in=('pending', 'accepted'),
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
first_car_allocated_quantity=0, trash=False,
|
|
warehouse=True)
|
|
|
|
# kill_house_requests = KillHouseRequest.objects.filter(
|
|
# Q(killhouse_user=obj) | Q(killer=obj),
|
|
# temporary_trash=False,
|
|
# temporary_deleted=False,
|
|
# trash=False, calculate_status=True)
|
|
|
|
kill_house_requests = KillHouseRequest.objects.filter(
|
|
input_warehouse=obj,
|
|
# Q(killhouse_user=obj)|Q(killer=obj),
|
|
trash=False, calculate_status=True, warehouse=True
|
|
)
|
|
# kill_house_requests = kill_house_requests.filter(
|
|
# Q(killhouse_user=obj, killer__isnull=True) | Q(killhouse_user=obj, killer=obj) | Q(
|
|
# killer=obj))
|
|
|
|
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(input_warehouse=obj,
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
calculate_status=True,
|
|
warehouse=True).exclude(
|
|
entered_message='ورود به انبار مجازی')
|
|
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(kill_house=obj,
|
|
trash=False,
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
calculate_status=True,
|
|
warehouse=True)
|
|
kill_house_allocations = StewardAllocation.objects.filter(kill_house=obj, trash=False,
|
|
receiver_state__in=('pending', 'accepted'),
|
|
temporary_trash=False,
|
|
temporary_deleted=False,
|
|
to_cold_house__isnull=True,
|
|
calculate_status=True, warehouse=True)
|
|
segmentations = PosSegmentation.objects.filter(kill_house=obj, trash=False, warehouse=True)
|
|
|
|
cold_house_allocations = StewardAllocation.objects.filter(
|
|
kill_house=obj,
|
|
to_cold_house__isnull=False,
|
|
receiver_state__in=('accepted', 'pending'),
|
|
trash=False, warehouse=True)
|
|
transactions = ProductsTransactions.objects.filter(product=product, trash=False, warehouse=True)
|
|
archives = WarehouseArchive.objects.filter(kill_house=obj, trash=False,warehouse=True)
|
|
|
|
|
|
province_kill_request_info = province_kill_requests.aggregate(
|
|
total_province_kill_request_count=Count('id'),
|
|
total_province_kill_request_quantity=Sum('total_killed_quantity'),
|
|
total_province_kill_request_weight=Sum('total_killed_weight'),
|
|
|
|
)
|
|
kill_house_request_info = kill_house_requests.aggregate(
|
|
total_kill_house_request_count=Count('id'),
|
|
total_kill_house_request_warehouse_entered_count=Count('id', filter=Q(ware_house_confirmation=True)),
|
|
total_kill_house_request_warehouse_not_entered_count=Count('id', filter=Q(ware_house_confirmation=False)),
|
|
total_kill_house_request_quantity=Sum('accepted_real_quantity'),
|
|
total_kill_house_request_weight=Sum('accepted_real_weight'),
|
|
total_kill_house_request_warehouse_not_entered_quantity=Sum('accepted_real_quantity',
|
|
filter=Q(ware_house_confirmation=False)),
|
|
total_kill_house_request_warehouse_not_entered_weight=Sum('accepted_real_weight',
|
|
filter=Q(ware_house_confirmation=False)),
|
|
kill_house_request_warehouse_weight=Sum('ware_house_accepted_real_weight',
|
|
filter=Q(ware_house_confirmation=True)),
|
|
kill_house_request_warehouse_governmental_weight=Sum('ware_house_accepted_real_weight',
|
|
filter=Q(ware_house_confirmation=True,
|
|
province_request__poultry_request__free_sale_in_province=False)),
|
|
kill_house_request_warehouse_free_weight=Sum('ware_house_accepted_real_weight',
|
|
filter=Q(ware_house_confirmation=True,
|
|
province_request__poultry_request__free_sale_in_province=True)),
|
|
|
|
)
|
|
kill_house_free_bar_info = kill_house_free_bar_informations.aggregate(
|
|
total_kill_house_free_bar_live_count=Count('id', filter=Q(buy_type='live')),
|
|
total_kill_house_free_bar_carcass_count=Count('id', filter=Q(buy_type='carcass')),
|
|
total_kill_house_free_bar_warehouse_entered_count=Count('id', filter=Q(weight_of_carcasses__gt=0)),
|
|
total_kill_house_free_bar_warehouse_not_entered_count=Count('id', filter=Q(weight_of_carcasses=0)),
|
|
total_kill_house_free_bar_live_quantity=Sum('quantity', filter=Q(buy_type='live')),
|
|
total_kill_house_free_bar_live_weight=Sum('live_weight', filter=Q(buy_type='live')),
|
|
total_kill_house_free_bar_carcass_quantity=Sum('number_of_carcasses', filter=Q(buy_type='carcass')),
|
|
total_kill_house_free_bar_carcass_weight=Sum('weight_of_carcasses', filter=Q(buy_type='carcass')),
|
|
total_kill_house_free_bar_carcass_total_weight=Sum('weight_of_carcasses'),
|
|
total_kill_house_free_bar_live_warehouse_not_entered_quantity=Sum('quantity',
|
|
filter=Q(weight_of_carcasses=0)),
|
|
total_kill_house_free_bar_warehouse_not_entered_weight=Sum('live_weight', filter=Q(weight_of_carcasses=0)),
|
|
|
|
)
|
|
|
|
kill_house_free_Sale_bar_info = kill_house_free_Sale_bar_informations.aggregate(
|
|
total_kill_house_free_Sale_bar_weight=Sum('real_weight_of_carcasses'),
|
|
total_kill_house_free_Sale_bar_governmental_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='governmental')),
|
|
total_kill_house_free_Sale_bar_free_weight=Sum('real_weight_of_carcasses', filter=Q(quota='free')),
|
|
)
|
|
|
|
kill_house_allocations_info = kill_house_allocations.aggregate(
|
|
total_kill_house_allocations_weight=Sum('real_weight_of_carcasses'),
|
|
total_kill_house_allocations_governmental_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='governmental')),
|
|
total_kill_house_allocations_free_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='free')),
|
|
)
|
|
|
|
segmentations_aggregates_info = segmentations.aggregate(
|
|
total_segmentations_weight=Sum('weight'),
|
|
total_segmentations_governmental_weight=Sum('weight', filter=Q(quota='governmental')),
|
|
total_segmentations_free_weight=Sum('weight', filter=Q(quota='free')),
|
|
)
|
|
cold_house_allocations_info = cold_house_allocations.aggregate(
|
|
total_cold_house_allocations_weight=Sum('real_weight_of_carcasses'),
|
|
total_cold_house_allocations_governmental_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='governmental')),
|
|
total_cold_house_allocations_free_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='free')),
|
|
)
|
|
pos_allocated_weight_info = transactions.aggregate(
|
|
pos_allocated_weight=Sum('cur_weight'),
|
|
pos_governmental_allocated_weight=Sum('cur_weight',
|
|
filter=Q(price_approved=True)),
|
|
pos_free_allocated_weight=Sum('cur_weight', filter=Q(price_approved=False)),
|
|
|
|
)
|
|
archives_info = archives.aggregate(
|
|
total_archive_governmental_weight=Sum('weight', filter=Q(quota='governmental')),
|
|
total_archive_free_weight=Sum('weight', filter=Q(quota='free')),
|
|
)
|
|
|
|
return {**province_kill_request_info, **kill_house_request_info, **kill_house_free_bar_info,
|
|
**kill_house_free_Sale_bar_info, **kill_house_allocations_info, **segmentations_aggregates_info,
|
|
**cold_house_allocations_info, **pos_allocated_weight_info, **archives_info}
|
|
|
|
def get_ware_house_info(self, obj):
|
|
product_remain_weight = RolesProducts.objects.filter(kill_house=obj, trash=False).only(
|
|
'total_remain_weight').first()
|
|
product_remain_weight = product_remain_weight.total_remain_weight if product_remain_weight else 0
|
|
request = self.context.get('request')
|
|
date1 = request.GET.get('date1', None)
|
|
date2 = request.GET.get('date2', None)
|
|
|
|
if date1 and date2:
|
|
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
|
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
|
|
|
total_info = self._calculate_info(obj, date1, date2) if date1 else self._calculate_info(obj)
|
|
|
|
total_kill_house_requests_quantity = total_info['total_kill_house_request_quantity'] if total_info[
|
|
'total_kill_house_request_quantity'] else 0
|
|
total_kill_house_free_bar_quantity = total_info['total_kill_house_free_bar_live_quantity'] if total_info[
|
|
'total_kill_house_free_bar_live_quantity'] else 0
|
|
total_kill_house_free_bar_carcasses = total_info['total_kill_house_free_bar_carcass_quantity'] if total_info[
|
|
'total_kill_house_free_bar_carcass_quantity'] else 0
|
|
|
|
total_kill_house_requests_weight = total_info['total_kill_house_request_weight'] if total_info[
|
|
'total_kill_house_request_weight'] else 0
|
|
total_kill_house_free_bar_weight = total_info['total_kill_house_free_bar_live_weight'] if total_info[
|
|
'total_kill_house_free_bar_live_weight'] else 0
|
|
total_kill_house_free_bar_carcasses_weight = total_info['total_kill_house_free_bar_carcass_weight'] if \
|
|
total_info['total_kill_house_free_bar_carcass_weight'] else 0
|
|
|
|
total_province_bars = total_info['total_kill_house_request_count'] if total_info[
|
|
'total_kill_house_request_count'] else 0
|
|
kill_house_free_bar_informations_live = total_info['total_kill_house_free_bar_live_count'] if total_info[
|
|
'total_kill_house_free_bar_live_count'] else 0
|
|
kill_house_free_bar_informations_carcasses = total_info['total_kill_house_free_bar_carcass_count'] if \
|
|
total_info['total_kill_house_free_bar_carcass_count'] else 0
|
|
total_entered_kill_house_requests_carcasses_weight = total_info['kill_house_request_warehouse_weight'] if \
|
|
total_info['kill_house_request_warehouse_weight'] else 0
|
|
total_entered_kill_house_free_bar_carcasses_weight = total_info[
|
|
'total_kill_house_free_bar_carcass_total_weight'] if total_info[
|
|
'total_kill_house_free_bar_carcass_total_weight'] else 0
|
|
|
|
entered_kill_house_request = total_info['total_kill_house_request_warehouse_entered_count'] if total_info[
|
|
'total_kill_house_request_warehouse_entered_count'] else 0
|
|
entered_free_buying_bars = total_info['total_kill_house_free_bar_warehouse_entered_count'] if total_info[
|
|
'total_kill_house_free_bar_warehouse_entered_count'] else 0
|
|
|
|
not_entered_kill_house_request = total_info['total_kill_house_request_warehouse_not_entered_count'] if \
|
|
total_info['total_kill_house_request_warehouse_not_entered_count'] else 0
|
|
not_entered_free_buying_bars = total_info['total_kill_house_free_bar_warehouse_not_entered_count'] if \
|
|
total_info['total_kill_house_free_bar_warehouse_not_entered_count'] else 0
|
|
|
|
not_entered_kill_house_request_quantity = total_info[
|
|
'total_kill_house_request_warehouse_not_entered_quantity'] if total_info[
|
|
'total_kill_house_request_warehouse_not_entered_quantity'] else 0
|
|
not_entered_free_buying_bars_quantity = total_info[
|
|
'total_kill_house_free_bar_live_warehouse_not_entered_quantity'] if total_info[
|
|
'total_kill_house_free_bar_live_warehouse_not_entered_quantity'] else 0
|
|
|
|
not_entered_kill_house_request_weight = total_info['total_kill_house_request_warehouse_not_entered_weight'] if \
|
|
total_info['total_kill_house_request_warehouse_not_entered_weight'] else 0
|
|
not_entered_free_buying_bars_weight = total_info['total_kill_house_free_bar_warehouse_not_entered_weight'] if \
|
|
total_info['total_kill_house_free_bar_warehouse_not_entered_weight'] else 0
|
|
|
|
total_kill_house_allocations_weight = total_info['total_kill_house_allocations_weight'] if \
|
|
total_info['total_kill_house_allocations_weight'] else 0
|
|
|
|
total_kill_house_free_Sale_bar_weight = total_info['total_kill_house_free_Sale_bar_weight'] if \
|
|
total_info['total_kill_house_free_Sale_bar_weight'] else 0
|
|
|
|
total_kill_house_segmentations_weight = total_info['total_segmentations_weight'] if \
|
|
total_info['total_segmentations_weight'] else 0
|
|
total_kill_house_cold_house_allocations_weight = total_info['total_cold_house_allocations_weight'] if \
|
|
total_info['total_cold_house_allocations_weight'] else 0
|
|
|
|
kill_house_request_warehouse_governmental_weight = total_info[
|
|
'kill_house_request_warehouse_governmental_weight'] if \
|
|
total_info['kill_house_request_warehouse_governmental_weight'] else 0
|
|
|
|
kill_house_request_warehouse_free_weight = total_info['kill_house_request_warehouse_free_weight'] if \
|
|
total_info['kill_house_request_warehouse_free_weight'] else 0
|
|
|
|
total_kill_house_free_Sale_bar_governmental_weight = total_info[
|
|
'total_kill_house_free_Sale_bar_governmental_weight'] if \
|
|
total_info['total_kill_house_free_Sale_bar_governmental_weight'] else 0
|
|
|
|
total_kill_house_free_Sale_bar_free_weight = total_info['total_kill_house_free_Sale_bar_free_weight'] if \
|
|
total_info['total_kill_house_free_Sale_bar_free_weight'] else 0
|
|
|
|
total_kill_house_allocations_governmental_weight = total_info[
|
|
'total_kill_house_allocations_governmental_weight'] if \
|
|
total_info['total_kill_house_allocations_governmental_weight'] else 0
|
|
|
|
total_kill_house_allocations_free_weight = total_info['total_kill_house_allocations_free_weight'] if \
|
|
total_info['total_kill_house_allocations_free_weight'] else 0
|
|
|
|
total_segmentations_governmental_weight = total_info['total_segmentations_governmental_weight'] if \
|
|
total_info['total_segmentations_governmental_weight'] else 0
|
|
|
|
total_segmentations_free_weight = total_info['total_segmentations_free_weight'] if \
|
|
total_info['total_segmentations_free_weight'] else 0
|
|
|
|
total_cold_house_allocations_governmental_weight = total_info[
|
|
'total_cold_house_allocations_governmental_weight'] if \
|
|
total_info['total_cold_house_allocations_governmental_weight'] else 0
|
|
|
|
total_cold_house_allocations_free_weight = total_info['total_cold_house_allocations_free_weight'] if \
|
|
total_info['total_cold_house_allocations_free_weight'] else 0
|
|
|
|
pos_allocated_weight = total_info['pos_allocated_weight'] or 0
|
|
pos_governmental_allocated_weight = total_info['pos_governmental_allocated_weight'] or 0
|
|
pos_free_allocated_weight = total_info['pos_free_allocated_weight'] or 0
|
|
|
|
total_archive_governmental_weight = total_info['total_archive_governmental_weight'] or 0
|
|
total_archive_free_weight = total_info['total_archive_free_weight'] or 0
|
|
|
|
total_governmental_input_weight = kill_house_request_warehouse_governmental_weight
|
|
total_free_input_weight = kill_house_request_warehouse_free_weight + total_entered_kill_house_free_bar_carcasses_weight
|
|
total_governmental_output_weight = total_kill_house_free_Sale_bar_governmental_weight + total_kill_house_allocations_governmental_weight + total_segmentations_governmental_weight + total_cold_house_allocations_governmental_weight + int(pos_governmental_allocated_weight / 1000)
|
|
total_free_output_weight = total_kill_house_free_Sale_bar_free_weight + total_kill_house_allocations_free_weight + total_segmentations_free_weight + total_cold_house_allocations_free_weight + int(pos_free_allocated_weight / 1000)
|
|
total_governmental_remain_weight = (total_governmental_input_weight - total_governmental_output_weight) - total_archive_governmental_weight if (
|
|
total_governmental_input_weight - total_governmental_output_weight) - total_archive_governmental_weight > 0 else 0
|
|
last_total_governmental_remain_weight = (
|
|
(total_governmental_input_weight - total_governmental_output_weight) - total_archive_governmental_weight) * -1 if (
|
|
total_governmental_input_weight - total_governmental_output_weight) - total_archive_governmental_weight < 0 else 0
|
|
total_free_remain_weight = (total_free_input_weight - total_free_output_weight) - total_archive_free_weight if (
|
|
total_free_input_weight - total_free_output_weight) - total_archive_free_weight > 0 else 0
|
|
last_total_free_remain_weight = ((total_free_input_weight - total_free_output_weight) - total_archive_free_weight) * -1 if (
|
|
total_free_input_weight - total_free_output_weight) - total_archive_free_weight < 0 else 0
|
|
last_total_remain_weight = last_total_governmental_remain_weight + last_total_free_remain_weight
|
|
warehouse_total_weight = total_kill_house_requests_weight + total_kill_house_free_bar_weight + total_kill_house_free_bar_carcasses_weight
|
|
warehouse_total_entered_carcasses_weight = total_entered_kill_house_requests_carcasses_weight + total_entered_kill_house_free_bar_carcasses_weight
|
|
difference_weight = warehouse_total_entered_carcasses_weight - (
|
|
total_kill_house_allocations_weight + total_kill_house_free_Sale_bar_weight + total_kill_house_segmentations_weight + total_kill_house_cold_house_allocations_weight)
|
|
final_difference_weight = difference_weight if difference_weight > 0 else (-1) * difference_weight
|
|
total_sell = total_kill_house_allocations_weight + total_kill_house_free_Sale_bar_weight + total_kill_house_segmentations_weight + total_kill_house_cold_house_allocations_weight
|
|
|
|
return {
|
|
"product_remain_weight": product_remain_weight,
|
|
"previous_product_remain_weight": int(product_remain_weight + final_difference_weight) if date1 else 0,
|
|
"total_sell": total_sell,
|
|
"total_province_bars": total_province_bars,
|
|
"total_province_bars_quantity": total_info['total_kill_house_request_quantity'] if total_info[
|
|
'total_kill_house_request_quantity'] else 0,
|
|
"total_province_bars_weight": total_info['total_kill_house_request_weight'] if total_info[
|
|
'total_kill_house_request_weight'] else 0,
|
|
"total_kill_house_free_bar": total_info['total_kill_house_free_bar_live_count'] if total_info[
|
|
'total_kill_house_free_bar_live_count'] else 0,
|
|
"total_kill_house_free_live_bar_quantity": total_info['total_kill_house_free_bar_live_quantity'] if
|
|
total_info['total_kill_house_free_bar_live_quantity'] else 0,
|
|
"total_kill_house_free_live_bar_weight": total_info['total_kill_house_free_bar_live_weight'] if total_info[
|
|
'total_kill_house_free_bar_live_weight'] else 0,
|
|
"total_kill_house_free_carcasses_bar": total_info['total_kill_house_free_bar_carcass_count'] if total_info[
|
|
'total_kill_house_free_bar_carcass_count'] else 0,
|
|
"total_kill_house_free_bar_carcasses": total_info['total_kill_house_free_bar_carcass_quantity'] if
|
|
total_info['total_kill_house_free_bar_carcass_quantity'] else 0,
|
|
"total_kill_house_free_bar_carcasses_weight": total_info['total_kill_house_free_bar_carcass_weight'] if
|
|
total_info['total_kill_house_free_bar_carcass_weight'] else 0,
|
|
"province_kill_requests": total_info['total_province_kill_request_count'] if total_info[
|
|
'total_province_kill_request_count'] else 0,
|
|
"province_kill_requests_quantity": total_info['total_province_kill_request_quantity'] if total_info[
|
|
'total_province_kill_request_quantity'] else 0,
|
|
"province_kill_requests_weight": total_info['total_province_kill_request_weight'] if total_info[
|
|
'total_province_kill_request_weight'] else 0,
|
|
|
|
"total_bars": total_province_bars + kill_house_free_bar_informations_live + kill_house_free_bar_informations_carcasses,
|
|
"warehouse_total_quantity": total_kill_house_requests_quantity + total_kill_house_free_bar_quantity + total_kill_house_free_bar_carcasses,
|
|
"warehouse_total_weight": warehouse_total_weight,
|
|
"warehouse_total_entered_bars": entered_kill_house_request + entered_free_buying_bars,
|
|
"warehouse_total_entered_carcasses_weight": warehouse_total_entered_carcasses_weight,
|
|
"warehouse_total_not_entered_bars": not_entered_kill_house_request + not_entered_free_buying_bars,
|
|
|
|
"warehouse_total_not_entered_bars_quantity": not_entered_kill_house_request_quantity + not_entered_free_buying_bars_quantity,
|
|
"warehouse_total_not_entered_bars_weight": not_entered_kill_house_request_weight + not_entered_free_buying_bars_weight,
|
|
"total_kill_house_allocations_weight": total_info['total_kill_house_allocations_weight'] if total_info[
|
|
'total_kill_house_allocations_weight'] else 0,
|
|
"total_kill_house_free_sale__bar_carcasses_weight": total_info['total_kill_house_free_Sale_bar_weight'] if
|
|
total_info['total_kill_house_free_Sale_bar_weight'] else 0,
|
|
"total_kill_house_segmentations_weight": total_kill_house_segmentations_weight,
|
|
"total_kill_house_cold_house_allocations_weight": total_kill_house_cold_house_allocations_weight,
|
|
"total_governmental_input_weight": total_governmental_input_weight,
|
|
"total_free_input_weight": total_free_input_weight,
|
|
"total_governmental_output_weight": total_governmental_output_weight,
|
|
"total_free_output_weight": total_free_output_weight,
|
|
"total_governmental_remain_weight": total_governmental_remain_weight,
|
|
"total_free_remain_weight": total_free_remain_weight,
|
|
"last_total_governmental_remain_weight": last_total_governmental_remain_weight,
|
|
"last_total_free_remain_weight": last_total_free_remain_weight,
|
|
"last_total_remain_weight": last_total_remain_weight,
|
|
"pos_allocated_weight": int(pos_allocated_weight / 1000),
|
|
"pos_governmental_allocated_weight": int(pos_governmental_allocated_weight / 1000),
|
|
"pos_free_allocated_weight": int(pos_free_allocated_weight / 1000),
|
|
"total_archive_governmental_weight": total_archive_governmental_weight,
|
|
"total_archive_free_weight": total_archive_free_weight,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForFreeBarWageSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'info']
|
|
|
|
def get_info(self, obj):
|
|
total_weight = 0
|
|
total_wage = 0
|
|
total_quantity = 0
|
|
type = self.context.get('request').GET['type']
|
|
role = self.context.get('request').GET['role']
|
|
if role in ['KillHouse', 'SuperAdmin', 'AdminX', 'Supporter']:
|
|
wage_type = 'total_wage_amount'
|
|
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=obj, archive_wage=False, buy_type=type,
|
|
trash=False)
|
|
|
|
elif role == 'ProvinceOperator':
|
|
wage_type = 'union_share'
|
|
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=obj, archive_wage=False, buy_type=type,
|
|
union_share__gt=0, trash=False)
|
|
|
|
elif role == 'Company':
|
|
wage_type = 'company_share'
|
|
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=obj, archive_wage=False, buy_type=type,
|
|
company_share__gt=0, trash=False)
|
|
|
|
elif role == 'Guilds':
|
|
wage_type = 'guilds_share'
|
|
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=obj, archive_wage=False, buy_type=type,
|
|
guilds_share__gt=0, trash=False)
|
|
|
|
else:
|
|
wage_type = 'wallet_share'
|
|
|
|
if type == 'live':
|
|
|
|
total_weight += free_bars.aggregate(total=Sum('live_weight'))[
|
|
'total'] or 0
|
|
total_quantity += free_bars.aggregate(total=Sum('quantity'))[
|
|
'total'] or 0
|
|
total_wage += free_bars.aggregate(total=Sum(wage_type))[
|
|
'total'] or 0
|
|
else:
|
|
|
|
total_weight += free_bars.aggregate(total=Sum('weight_of_carcasses'))[
|
|
'total'] or 0
|
|
total_quantity += free_bars.aggregate(total=Sum('number_of_carcasses'))[
|
|
'total'] or 0
|
|
|
|
total_wage += free_bars.aggregate(total=Sum(wage_type))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"killer": obj.killer,
|
|
"kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
"kill_house_name": obj.name,
|
|
"kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
"kill_house_city": obj.kill_house_operator.user.city.name,
|
|
"total_count": len(free_bars),
|
|
"total_weight": total_weight,
|
|
"total_quantity": total_quantity,
|
|
"total_wage": total_wage,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForProvinceWageWithDateSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'info']
|
|
|
|
def get_info(self, obj):
|
|
total_quantity = 0
|
|
total_weight = 0
|
|
total_wage = 0
|
|
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()
|
|
role = self.context.get('request').GET['role']
|
|
if role in ['KillHouse', 'SuperAdmin', 'AdminX', 'Supporter']:
|
|
wage_type = 'total_wage_amount'
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
return_to_province=False,
|
|
archive_wage=False,
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
trash=False).select_related(
|
|
'province_request__poultry_request')
|
|
elif role == 'ProvinceOperator':
|
|
wage_type = 'union_share'
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
union_share__gt=0,
|
|
return_to_province=False,
|
|
archive_wage=False,
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
trash=False).select_related(
|
|
'province_request__poultry_request')
|
|
elif role == 'Company':
|
|
wage_type = 'company_share'
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
company_share__gt=0,
|
|
return_to_province=False,
|
|
archive_wage=False,
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
trash=False).select_related(
|
|
'province_request__poultry_request')
|
|
elif role == 'Guilds':
|
|
wage_type = 'guilds_share'
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
guilds_share__gt=0,
|
|
return_to_province=False,
|
|
archive_wage=False,
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
trash=False).select_related(
|
|
'province_request__poultry_request')
|
|
else:
|
|
wage_type = 'wallet_share'
|
|
|
|
total_quantity += province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
|
'total'] or 0
|
|
|
|
total_weight += province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
|
|
total_wage += province_kill_requests.aggregate(total=Sum(wage_type))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"killer": obj.killer,
|
|
"kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
"kill_house_name": obj.name,
|
|
"kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
"kill_house_city": obj.kill_house_operator.user.city.name,
|
|
"total_count": len(province_kill_requests),
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
"total_wage": total_wage,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForKillHouseRequestWageWithDateSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'info']
|
|
|
|
def get_info(self, obj):
|
|
total_quantity = 0
|
|
total_weight = 0
|
|
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()
|
|
# role = self.context.get('request').GET['role']
|
|
kill_house_requests = KillHouseRequest.objects.filter(Q(killhouse_user=obj) | Q(killer=obj),
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
archive_wage=False,
|
|
trash=False)
|
|
|
|
total_quantity += kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
|
'total'] or 0
|
|
|
|
total_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"killer": obj.killer,
|
|
"kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
"kill_house_name": obj.name,
|
|
"kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
"kill_house_city": obj.kill_house_operator.user.city.name,
|
|
"total_count": len(kill_house_requests),
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
|
|
}
|
|
|
|
|
|
# class KillHouseForProvinceWageWithDateSerializer(serializers.ModelSerializer):
|
|
# info = serializers.SerializerMethodField('get_info')
|
|
#
|
|
# class Meta:
|
|
# model = KillHouse
|
|
# fields = ['key', 'info']
|
|
#
|
|
# def get_info(self, obj):
|
|
# total_count = 0
|
|
# paid_count = 0
|
|
# unpaid_count = 0
|
|
# archive_count = 0
|
|
# total_quantity = 0
|
|
# total_weight_unpaid = 0
|
|
# total_weight_archive = 0
|
|
# total_weight_paid = 0
|
|
# total_unpaid_wage = 0
|
|
# total_archive_wage = 0
|
|
# total_paid_wage = 0
|
|
# total_paid_quantity = 0
|
|
# total_unpaid_quantity = 0
|
|
# total_archive_quantity = 0
|
|
# total_quantity_sale_free = 0
|
|
# total_quantity_sale_government = 0
|
|
# total_weight_sale_free = 0
|
|
# total_wage = 0
|
|
# total_weight_sale_government = 0
|
|
# 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()
|
|
# role = self.context.get('request').GET['role']
|
|
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
# state__in=('pending', 'accepted'),
|
|
# return_to_province=False,
|
|
# kill_request__recive_date__date__gte=date1,
|
|
# kill_request__recive_date__date__lte=date2,
|
|
# trash=False).select_related(
|
|
# 'province_request__poultry_request')
|
|
# # province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
# # state__in=('pending', 'accepted'),
|
|
# # return_to_province=False,
|
|
# # trash=False).select_related(
|
|
# # 'province_request__poultry_request')
|
|
# total_count = len(province_kill_requests)
|
|
# total_quantity = province_kill_requests.aggregate(total_quantity=Sum('total_killed_quantity')).get(
|
|
# 'total_quantity', 0)
|
|
#
|
|
# for province_kill_request in province_kill_requests:
|
|
# if province_kill_request.wage_pay == True:
|
|
# paid_count += 1
|
|
# total_paid_quantity += province_kill_request.total_killed_quantity
|
|
# total_paid_wage += province_kill_request.total_killed_weight * province_kill_request.wage
|
|
# # total_paid_wage += int(province_kill_request.depositor['total_amount'])
|
|
# total_weight_paid += province_kill_request.total_killed_weight
|
|
# elif province_kill_request.wage_pay == False and province_kill_request.archive_by_province == False:
|
|
# unpaid_count += 1
|
|
# total_unpaid_quantity += province_kill_request.total_killed_quantity
|
|
# total_unpaid_wage += province_kill_request.total_killed_weight * province_kill_request.wage
|
|
# total_weight_unpaid += province_kill_request.total_killed_weight
|
|
#
|
|
# else:
|
|
# archive_count += 1
|
|
# total_archive_quantity += province_kill_request.total_killed_quantity
|
|
# total_archive_wage += province_kill_request.total_killed_weight * province_kill_request.wage
|
|
# total_weight_archive += province_kill_request.total_killed_weight
|
|
# if province_kill_request.province_request.poultry_request.free_sale_in_province == True:
|
|
# total_quantity_sale_free += province_kill_request.total_killed_quantity
|
|
# total_weight_sale_free += province_kill_request.total_killed_weight
|
|
#
|
|
# else:
|
|
# total_quantity_sale_government += province_kill_request.total_killed_quantity
|
|
# total_weight_sale_government += province_kill_request.total_killed_weight
|
|
# total_wage = total_paid_wage + total_unpaid_wage
|
|
#
|
|
# gate_way_percentage = PaymentGatewayPercentage.objects.get(trash=False)
|
|
# union = gate_way_percentage.union / 100 if gate_way_percentage.union > 0 else 0
|
|
#
|
|
# if role == 'ProvinceOperator':
|
|
# total_wage = (total_paid_wage + total_unpaid_wage) * union
|
|
# total_paid_wage = total_paid_wage * union
|
|
# total_unpaid_wage = total_unpaid_wage * union
|
|
# total_archive_wage = total_archive_wage * union
|
|
#
|
|
# return {
|
|
# "killer": obj.killer,
|
|
# "kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
# "kill_house_name": obj.name,
|
|
# "kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
# "kill_house_city": obj.kill_house_operator.user.city.name,
|
|
# "total_count": total_count,
|
|
# "paid_count": paid_count,
|
|
# "unpaid_count": unpaid_count,
|
|
# "archive_count": archive_count,
|
|
# "total_quantity": total_quantity,
|
|
# "total_weight": int(total_weight_paid + total_weight_unpaid),
|
|
# "total_weight_paid": int(total_weight_paid),
|
|
# "total_weight_archive": int(total_weight_archive),
|
|
# "total_weight_unpaid": int(total_weight_unpaid),
|
|
# "total_paid_wage": total_paid_wage,
|
|
# "total_unpaid_wage": total_unpaid_wage,
|
|
# "total_archive_wage": total_archive_wage,
|
|
# # "total_wage": total_paid_wage + total_unpaid_wage,
|
|
# "total_wage": total_wage,
|
|
# "total_unpaid_quantity": total_unpaid_quantity,
|
|
# "total_paid_quantity": total_paid_quantity,
|
|
# "total_archive_quantity": total_archive_quantity,
|
|
# "total_quantity_sale_free": total_quantity_sale_free,
|
|
# "total_weight_sale_free": total_weight_sale_free,
|
|
# "total_quantity_sale_government": total_quantity_sale_government,
|
|
# "total_weight_sale_government": total_weight_sale_government,
|
|
#
|
|
# }
|
|
class KillHouseForTotalProvinceWageTransactionWithDAteSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'info']
|
|
|
|
def get_info(self, obj):
|
|
total_paid_wage = 0
|
|
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()
|
|
role = self.context.get('request').GET['role']
|
|
if role in ['KillHouse', 'AdminX', 'Supporter']:
|
|
wage_type = 'amount'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
status='completed',
|
|
trash=False).order_by('id')
|
|
elif role == 'SuperAdmin':
|
|
wage_type = 'amount'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
status='completed',
|
|
trash=False).exclude(union_share=0, company_share=0, guilds_share=0).order_by('id')
|
|
elif role == 'ProvinceOperator':
|
|
wage_type = 'union_share'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
union_share__gt=0,
|
|
trash=False).order_by('id')
|
|
elif role == 'Company':
|
|
wage_type = 'company_share'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
company_share__gt=0,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False).order_by('id')
|
|
elif role == 'Guilds':
|
|
wage_type = 'guilds_share'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
guilds_share__gt=0,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False).order_by('id')
|
|
else:
|
|
wage_type = 'wallet_share'
|
|
|
|
total_paid_wage += transactions.aggregate(total=Sum(wage_type))[
|
|
'total'] or 0
|
|
if role == 'SuperAdmin':
|
|
total_paid_wage -= transactions.aggregate(total=Sum('other_share'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"killer": obj.killer,
|
|
"kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
"kill_house_name": obj.name,
|
|
"kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
"kill_house_city": obj.kill_house_operator.user.city.name,
|
|
"total_paid_count": len(transactions),
|
|
"total_paid_wage": total_paid_wage,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForTotalProvinceWageTransactionSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'info']
|
|
|
|
def get_info(self, obj):
|
|
total_paid_wage = 0
|
|
role = self.context.get('request').GET['role']
|
|
# transactions = InternalTransaction.objects.filter(
|
|
# Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
# status='completed',
|
|
# trash=False).order_by('id')
|
|
if role in ['KillHouse', 'AdminX', 'Supporter']:
|
|
wage_type = 'amount'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
trash=False).order_by('id')
|
|
elif role == 'SuperAdmin':
|
|
wage_type = 'amount'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
trash=False).exclude(union_share=0, company_share=0, guilds_share=0).order_by('id')
|
|
elif role == 'ProvinceOperator':
|
|
wage_type = 'union_share'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
union_share__gt=0,
|
|
trash=False).order_by('id')
|
|
elif role == 'Company':
|
|
wage_type = 'company_share'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
company_share__gt=0,
|
|
trash=False).order_by('id')
|
|
elif role == 'Guilds':
|
|
wage_type = 'guilds_share'
|
|
transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
status='completed',
|
|
guilds_share__gt=0,
|
|
trash=False).order_by('id')
|
|
else:
|
|
wage_type = 'wallet_share'
|
|
|
|
total_paid_wage += transactions.aggregate(total=Sum(wage_type))[
|
|
'total'] or 0
|
|
if role == 'SuperAdmin':
|
|
total_paid_wage -= transactions.aggregate(total=Sum('other_share'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"killer": obj.killer,
|
|
"kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
"kill_house_name": obj.name,
|
|
"kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
"kill_house_city": obj.kill_house_operator.user.city.name,
|
|
"total_paid_count": len(transactions),
|
|
"total_paid_wage": total_paid_wage,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForFreeBarWageWithDateSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'info']
|
|
|
|
def get_info(self, obj):
|
|
total_weight = 0
|
|
total_wage = 0
|
|
total_quantity = 0
|
|
type = self.context.get('request').GET['type']
|
|
role = self.context.get('request').GET['role']
|
|
if role in ['KillHouse', 'SuperAdmin', 'AdminX', 'Supporter']:
|
|
wage_type = 'total_wage_amount'
|
|
elif role == 'ProvinceOperator':
|
|
wage_type = 'union_share'
|
|
elif role == 'Company':
|
|
wage_type = 'company_share'
|
|
elif role == 'Company':
|
|
wage_type = 'company_share'
|
|
else:
|
|
wage_type = 'wallet_share'
|
|
|
|
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()
|
|
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=obj,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
archive_wage=False,
|
|
trash=False)
|
|
if type == 'live':
|
|
|
|
total_weight += free_bars.aggregate(total=Sum('live_weight'))[
|
|
'total'] or 0
|
|
total_quantity += free_bars.aggregate(total=Sum('quantity'))[
|
|
'total'] or 0
|
|
total_wage += free_bars.aggregate(total=Sum(wage_type))[
|
|
'total'] or 0
|
|
else:
|
|
|
|
total_weight += free_bars.aggregate(total=Sum('weight_of_carcasses'))[
|
|
'total'] or 0
|
|
total_quantity += free_bars.aggregate(total=Sum('number_of_carcasses'))[
|
|
'total'] or 0
|
|
|
|
total_wage += free_bars.aggregate(total=Sum(wage_type))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"killer": obj.killer,
|
|
"kill_house_fullname": obj.kill_house_operator.user.fullname,
|
|
"kill_house_name": obj.name,
|
|
"kill_house_mobile": obj.kill_house_operator.user.mobile,
|
|
"kill_house_city": obj.kill_house_operator.user.city.name,
|
|
"total_count": len(free_bars),
|
|
"total_weight": total_weight,
|
|
"total_quantity": total_quantity,
|
|
"total_wage": total_wage,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForFreeSaleBarInformationViewSetWithDateSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'kill_house_operator', 'info']
|
|
|
|
def get_info(self, obj):
|
|
role = self.context.get('request').GET['role']
|
|
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()
|
|
free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(kill_house=obj,
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
trash=False)
|
|
buyers = OutProvinceCarcassesBuyer.objects.filter(Kill_house=obj, trash=False)
|
|
|
|
total_carcasses = free_sale_bars.aggregate(total=Sum('number_of_carcasses'))[
|
|
'total'] or 0
|
|
total_weight = free_sale_bars.aggregate(total=Sum('weight_of_carcasses'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"number_of_buyers": len(buyers),
|
|
"total_number_of_carcasses": total_carcasses,
|
|
"total_weight_of_carcasses": total_weight,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseForFreeSaleBarInformationViewSetSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'kill_house_operator', 'info']
|
|
|
|
def get_info(self, obj):
|
|
free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(kill_house=obj,
|
|
trash=False)
|
|
buyers = OutProvinceCarcassesBuyer.objects.filter(Kill_house=obj, trash=False)
|
|
|
|
total_carcasses = free_sale_bars.aggregate(total=Sum('number_of_carcasses'))[
|
|
'total'] or 0
|
|
total_weight = free_sale_bars.aggregate(total=Sum('weight_of_carcasses'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"number_of_buyers": len(buyers),
|
|
"total_number_of_carcasses": total_carcasses,
|
|
"total_weight_of_carcasses": total_weight,
|
|
|
|
}
|
|
|
|
|
|
class GeneralKillHouseSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForKillHouseDriverSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'killer', 'kill_house_operator', 'union_gateway_percent', 'company_gateway_percent',
|
|
'guilds_gateway_percent', 'other_gateway_percent']
|
|
|
|
|
|
class PosGeneralKillHouseSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'killer']
|
|
|
|
|
|
# سریالایزر مربوط به کشتارگاه
|
|
class KillHouseSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorSerializer(read_only=True)
|
|
system_address = SystemAddressSerializer(read_only=True)
|
|
allow_state = serializers.SerializerMethodField('get_register_state')
|
|
allow_direct_buying = serializers.SerializerMethodField('get_allow_direct_buying')
|
|
kill_place = serializers.SerializerMethodField('get_kill_place')
|
|
debt = serializers.SerializerMethodField('get_debt')
|
|
|
|
# kill_request_quantity = serializers.SerializerMethodField('get_kill_request_remain_quantity')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
exclude = (
|
|
'id',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
def get_kill_place(self, instance):
|
|
place = None
|
|
percentage = KillHousePercentage.objects.filter(kill_house=instance)
|
|
if percentage.count() > 0:
|
|
percentage = percentage.last()
|
|
if percentage.kill_house_for_killer != None:
|
|
place = percentage.kill_house_for_killer.name
|
|
else:
|
|
place = percentage.kill_house.name
|
|
|
|
return place
|
|
|
|
def get_allow_direct_buying(self, obj):
|
|
allow_state = False
|
|
allow = ProvinceAllowKillHouseDirectBuying.objects.filter(kill_house=obj)
|
|
if allow.count() > 0:
|
|
allow_state = allow.last().allow
|
|
|
|
return allow_state
|
|
|
|
def get_register_state(self, instance):
|
|
allow_state = None
|
|
allow = ProvinceAllowKillHouseRegisterCar.objects.filter(kill_house=instance)
|
|
if allow.count() > 0:
|
|
allow_state = allow.last().allow
|
|
|
|
return allow_state
|
|
|
|
def get_debt(self, instance):
|
|
debt = False
|
|
if KillHouseFactorToProvince.objects.filter(
|
|
province_factor__province_check_info__kill_house_assignment__kill_house_request__killhouse_user=instance,
|
|
state='pending').exists():
|
|
debt = True
|
|
|
|
return debt
|
|
|
|
# def get_kill_request_remain_quantity(self, obj):
|
|
# quantity_sum = 0
|
|
# kill_req_key = None
|
|
# now = datetime.datetime.now().date()
|
|
# kill_request = KillRequest.objects.filter(kill_house=obj, recive_date__year=now.year,
|
|
# recive_date__month=now.month, recive_date__day=now.day,
|
|
# trash=False).last()
|
|
#
|
|
# if kill_request:
|
|
# quantity_sum = kill_request.remain_quantity_for_poultry
|
|
# kill_req_key = kill_request.key
|
|
#
|
|
# return {
|
|
# "quantity_sum": quantity_sum,
|
|
# "kill_req_key": kill_req_key,
|
|
# }
|
|
|
|
|
|
class PosKillHouseSerializer(serializers.ModelSerializer):
|
|
shop_name = serializers.CharField(source='name', read_only=True)
|
|
fullname = serializers.CharField(source='kill_house_operator.user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='kill_house_operator.user.mobile', read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'shop_name', 'fullname', 'mobile']
|
|
|
|
|
|
class PspKillHouseSerializer(serializers.ModelSerializer):
|
|
unit_name = serializers.CharField(source='name', read_only=True)
|
|
fullname = serializers.CharField(source='kill_house_operator.user.fullname', read_only=True)
|
|
city = serializers.CharField(source='kill_house_operator.user.city.name', read_only=True)
|
|
mobile = serializers.CharField(source='kill_house_operator.user.mobile', read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'unit_name', 'fullname', 'mobile','city','killer']
|
|
|
|
|
|
class distributionKillHouseSerializer(serializers.ModelSerializer):
|
|
shop_name = serializers.CharField(source='name', read_only=True)
|
|
fullname = serializers.CharField(source='kill_house_operator.user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='kill_house_operator.user.mobile', read_only=True)
|
|
shop_type = serializers.SerializerMethodField('get_type')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'shop_name', 'fullname', 'mobile', 'shop_type']
|
|
|
|
def get_type(self, obj):
|
|
obj_type = 'کشتارکن' if obj.killer else 'کشتارگاه'
|
|
|
|
return obj_type
|
|
|
|
|
|
class KillHouseAllowVetSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseAllowVet
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHousePercentageSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForKillHousePercentageSerializer(read_only=True)
|
|
kill_house_for_killer = KillHouseForProvinceSerializer(read_only=True)
|
|
kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
|
|
# kill_house = KillHouseSerializer(read_only=True)
|
|
# kill_house_for_killer = KillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHousePercentage
|
|
fields = ['key', 'guilds_quantity', 'guilds_weight', 'kill_house', 'kill_house_for_killer', 'percent',
|
|
'last_guilds_update_date', 'kill_house_vet']
|
|
# fields = '__all__'
|
|
|
|
def get_kill_house_vet(self, obj):
|
|
if obj.kill_house_for_killer != None:
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=obj.kill_house_for_killer, trash=False).last()
|
|
else:
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=obj.kill_house, trash=False).last()
|
|
|
|
if kill_house_vet != None:
|
|
serializer = KillHouseVetForKillHousePercentageSerializer(kill_house_vet)
|
|
return serializer.data
|
|
return None
|
|
|
|
|
|
class KillHousePercentageForKillerKillHousseSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
|
|
# kill_house_for_killer = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHousePercentage
|
|
fields = ['kill_house']
|
|
# fields = ['kill_house_for_killer']
|
|
|
|
|
|
class KillHouseADDCARForKillHouseDriverSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForKillHouseDriverSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseADDCAR
|
|
fields = ['kill_house']
|
|
|
|
|
|
class KillHouseDriverForAllUserSerializer(serializers.ModelSerializer):
|
|
user_bank_info = BankCardSerializer(read_only=True, required=False)
|
|
byers = serializers.SerializerMethodField('get_buyers')
|
|
|
|
class Meta:
|
|
model = KillHouseDriver
|
|
exclude = (
|
|
'id',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'create_date',
|
|
'modify_date',
|
|
'status',
|
|
'wallet',
|
|
'wallet_amount',
|
|
'registrar',
|
|
'user',
|
|
'weight_without_load',
|
|
)
|
|
|
|
def get_buyers(self, obj):
|
|
cars = KillHouseADDCAR.objects.filter(driver__exact=obj)
|
|
return KillHouseADDCARForKillHouseDriverSerializer(cars, many=True).data
|
|
|
|
|
|
# سریالایزر مربوط به اضافه کردن راننده به کشتارگاه
|
|
class KillHouseDriverSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True, required=False)
|
|
user_bank_info = BankCardSerializer(read_only=True, required=False)
|
|
first_name_last_name = serializers.SerializerMethodField('get_first_name_last_name')
|
|
|
|
class Meta:
|
|
model = KillHouseDriver
|
|
fields = '__all__'
|
|
extra_kwargs = {
|
|
'capocity': {'required': False},
|
|
'weight_without_load': {'required': False}
|
|
}
|
|
|
|
def get_first_name_last_name(self, instance):
|
|
user_dict = {}
|
|
user = SystemUserProfile.objects.get(
|
|
key=instance.user.key)
|
|
user_dict = {
|
|
"first_name": user.first_name,
|
|
"last_name": user.last_name,
|
|
}
|
|
|
|
return user_dict
|
|
|
|
|
|
class KillHouseDriverForBarManagementSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillHouseDriver
|
|
fields = ['driver_name', 'driver_mobile', 'type_car', 'pelak', 'health_code']
|
|
|
|
|
|
# سریالایزر مربوط به اضافه کردن خودرو به کشتارگاه
|
|
class KillHouseADDCARSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseSerializer(read_only=True)
|
|
driver = KillHouseDriverSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseADDCAR
|
|
exclude = (
|
|
'id',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
|
|
class KillHouseADDCARForBarManagementSerializer(serializers.ModelSerializer):
|
|
driver = KillHouseDriverForBarManagementSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseADDCAR
|
|
fields = ['driver']
|
|
|
|
|
|
class VetForBarManagementSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Vet
|
|
fields = ['user']
|
|
|
|
|
|
class VetFarmForBarManagementSerializer(serializers.ModelSerializer):
|
|
vet = VetForBarManagementSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = VetFarm
|
|
fields = ['vet']
|
|
|
|
|
|
# سریالایزر مربوط به ثبت نماینده کشتارگاه
|
|
class VetSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(read_only=True)
|
|
farms = serializers.SerializerMethodField('get_farms')
|
|
kill_houses = serializers.SerializerMethodField('get_kill_houses')
|
|
|
|
class Meta:
|
|
model = Vet
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
def get_farms(self, instance):
|
|
farms_list = []
|
|
farms = VetFarm.objects.filter(vet=instance, trash=False).select_related('poultry', 'vet')
|
|
if farms.count() > 0:
|
|
for farm in farms:
|
|
internal_dict = {
|
|
"poultry_name": farm.poultry.unit_name,
|
|
"poultry_full_name": farm.poultry.user.fullname,
|
|
"poultry_mobile": farm.poultry.user.mobile,
|
|
"poultry_hall": farm.hall,
|
|
"vet_id": farm.vet.id,
|
|
"vet_farm_key": farm.key,
|
|
}
|
|
farms_list.append(internal_dict)
|
|
|
|
return farms_list
|
|
|
|
def get_kill_houses(self, instance):
|
|
kill_houses_list = []
|
|
kill_house_vets = KillHouseVet.objects.filter(vet=instance, trash=False).select_related(
|
|
'kill_house__kill_house_operator__user')
|
|
if kill_house_vets.count() > 0:
|
|
for kill_house_vet in kill_house_vets:
|
|
internal_dict = {
|
|
"Kill_house_key": kill_house_vet.kill_house.key,
|
|
"Kill_house_name": kill_house_vet.kill_house.name,
|
|
"Kill_house_user_full_name": kill_house_vet.kill_house.kill_house_operator.user.fullname,
|
|
"Kill_house_user_mobile": kill_house_vet.kill_house.kill_house_operator.user.mobile,
|
|
}
|
|
kill_houses_list.append(internal_dict)
|
|
|
|
return kill_houses_list
|
|
|
|
|
|
class KillHouseVetSerializer(serializers.ModelSerializer):
|
|
vet = VetSerializer(read_only=True)
|
|
kill_house = KillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseVet
|
|
fields = '__all__'
|
|
|
|
|
|
class VetForKillRequestSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Vet
|
|
fields = ['user']
|
|
|
|
|
|
class KillHouseVetForKillRequestSerializer(serializers.ModelSerializer):
|
|
vet = VetForKillRequestSerializer(read_only=True)
|
|
kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseVet
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseVetForKillHousePercentageSerializer(serializers.ModelSerializer):
|
|
vet = VetForKillRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseVet
|
|
fields = ['vet']
|
|
|
|
|
|
class KillRequestForBarManagementSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillRequest
|
|
fields = ['recive_date']
|
|
|
|
|
|
# سریالایزر مربوط به ثبت درخواست کشتار توسط کشتارگاه
|
|
class KillRequestSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
poultry = PoultrySerializer(read_only=True)
|
|
slaughter_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
# kill_house = KillHouseSerializer(read_only=True)
|
|
# slaughter_house = KillHouseSerializer(read_only=True)
|
|
kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
number_of_allocated = serializers.SerializerMethodField('get_number_of_allocated')
|
|
poultry_hatching = PoultryHatchingSerializer(read_only=True)
|
|
|
|
# kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
# number_of_allocated = serializers.SerializerMethodField('get_number_of_allocated')
|
|
|
|
class Meta:
|
|
model = KillRequest
|
|
fields = '__all__'
|
|
|
|
# def get_kill_house_vet(self, instance):
|
|
# vet = None
|
|
# kill_house_vet = KillHouseVet.objects.filter(kill_house=instance.kill_house, trash=False)
|
|
# if kill_house_vet.count() > 0:
|
|
# kill_house_vet = kill_house_vet.last()
|
|
# vet = {
|
|
# "kill_house_vet_full_name": kill_house_vet.vet.user.fullname,
|
|
# "kill_house_vet_mobile": kill_house_vet.vet.user.mobile,
|
|
# }
|
|
#
|
|
# return vet
|
|
|
|
def get_kill_house_vet(self, obj):
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house__exact=obj.kill_house, trash=False).last()
|
|
if kill_house_vet:
|
|
return KillHouseVetForKillRequestSerializer(kill_house_vet).data
|
|
else:
|
|
return None
|
|
|
|
#
|
|
# def get_number_of_allocated(self, instance):
|
|
# quantity = 0
|
|
# province_kill_request = ProvinceKillRequest.objects.filter(kill_request=instance,
|
|
# state__in=('pending', 'accepted'),
|
|
# trash=False)
|
|
# if province_kill_request.count() > 0:
|
|
# quantity = province_kill_request.count()
|
|
#
|
|
# return quantity
|
|
|
|
def get_number_of_allocated(self, instance):
|
|
return instance.kill_capacity - instance.remain_quantity
|
|
|
|
|
|
class KillHouseDailyQuotaSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseSerializer(read_only=True)
|
|
killer_kill_house = KillHouseSerializer(read_only=True)
|
|
kill_request = KillRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseDailyQuota
|
|
fields = '__all__'
|
|
|
|
|
|
class AutomaticKillRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AutomaticKillRequest
|
|
fields = '__all__'
|
|
|
|
|
|
class KillRequestFactorSerializer(serializers.ModelSerializer):
|
|
kill_request = KillRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillRequestFactor
|
|
fields = '__all__'
|
|
|
|
|
|
class KillRequestFactorPaymentSerializer(serializers.ModelSerializer):
|
|
kill_request_factor = KillRequestFactorSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillRequestFactorPayment
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseRequestForColdHouseAllocationsSerializer(serializers.ModelSerializer):
|
|
kill_house_request_info = serializers.SerializerMethodField('get_kill_house_request_info')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
fields = ['key', 'kill_house_request_info']
|
|
|
|
def get_kill_house_request_info(self, obj):
|
|
return {
|
|
"poultry_fullname": obj.province_request.poultry_request.poultry.user.fullname,
|
|
"poultry_mobile": obj.province_request.poultry_request.poultry.user.mobile,
|
|
"poultry_name": obj.province_request.poultry_request.poultry.unit_name,
|
|
"kill_house_name": obj.killhouse_user.name,
|
|
"kill_house_fullname": obj.killhouse_user.kill_house_operator.user.fullname,
|
|
"kill_house_mobile": obj.killhouse_user.kill_house_operator.user.mobile,
|
|
"quantity": obj.ware_house_accepted_real_quantity,
|
|
"weight": obj.ware_house_accepted_real_weight,
|
|
}
|
|
|
|
|
|
# سریالایزر مربوط به ثبت درخواست کشتار بعد از تخصیص استان
|
|
class KillHouseRequestSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseSerializer(read_only=True)
|
|
kill_request = KillRequestSerializer(read_only=True)
|
|
add_car = KillHouseADDCARSerializer(read_only=True)
|
|
poultry = serializers.SerializerMethodField('get_poultry')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
fields = '__all__'
|
|
|
|
def get_poultry(self, instance):
|
|
poultry = Poultry.objects.get(
|
|
key=instance.province_kill_request.province_request.poultry_request.poultry.key)
|
|
poultry_dict = {
|
|
"poultry_name": poultry.unit_name,
|
|
"poultry_mobile": poultry.user.mobile,
|
|
"poultry_address": poultry.address.address,
|
|
"poultry_city": poultry.address.city.name,
|
|
"poultry_province": poultry.address.province.name,
|
|
}
|
|
|
|
return poultry_dict
|
|
|
|
|
|
class KillHouseRequestForDiffrentBarInfoSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
kill_request = KillRequestForBarManagementSerializer(read_only=True)
|
|
add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
weight_info = serializers.SerializerMethodField('get_weight_info')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
# 'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'killhouse_user_id_foreign_key',
|
|
'kill_request_id_foreign_key',
|
|
'province_request_id_foreign_key',
|
|
'province_kill_request_id_foreign_key',
|
|
'add_car_id_foreign_key',
|
|
'kill_house_request_id_key',
|
|
'capacity',
|
|
'kill_house_request_auction_winner',
|
|
'city_number',
|
|
'city_name',
|
|
'province_number',
|
|
'province_name',
|
|
'province_request',
|
|
'province_kill_request',
|
|
|
|
)
|
|
|
|
def get_weight_info(self, obj):
|
|
index_weight = 0
|
|
weight = 0
|
|
assignment_info = KillHouseAssignmentInformation.objects.filter(
|
|
kill_house_request=obj).last()
|
|
assingment_quantity = assignment_info.real_quantity
|
|
assingment_weight = assignment_info.net_weight
|
|
kill_house_vet_quantity = obj.vet_accepted_real_quantity
|
|
kill_house_vet_weight = obj.vet_accepted_real_weight
|
|
quantity = obj.quantity
|
|
weight = int(obj.quantity * obj.province_request.poultry_request.Index_weight)
|
|
|
|
return {"assingment_quantity": assingment_quantity,
|
|
"assingment_weight": assingment_weight,
|
|
"kill_house_vet_quantity": kill_house_vet_quantity,
|
|
"kill_house_vet_weight": kill_house_vet_weight,
|
|
"quantity": quantity,
|
|
"weight": weight,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseRequestForBarManagementSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
killer = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
bar_document_status = BarDocumentStatusSerializer(read_only=True)
|
|
kill_request = KillRequestForBarManagementSerializer(read_only=True)
|
|
add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
real_add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
poultry_request = serializers.SerializerMethodField('get_poultry_request')
|
|
kill_place = serializers.SerializerMethodField('get_kill_place')
|
|
vet_farm = serializers.SerializerMethodField('get_vet_farm')
|
|
kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
weight_info = serializers.SerializerMethodField('get_weight_info')
|
|
assignment_info = serializers.SerializerMethodField('get_assignment_info')
|
|
final_bar_state = serializers.SerializerMethodField('get_final_bar_state')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
exclude = (
|
|
'id',
|
|
# 'create_date',
|
|
# 'modify_date',
|
|
# 'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'killhouse_user_id_foreign_key',
|
|
'kill_request_id_foreign_key',
|
|
'province_request_id_foreign_key',
|
|
'province_kill_request_id_foreign_key',
|
|
'add_car_id_foreign_key',
|
|
'kill_house_request_id_key',
|
|
'capacity',
|
|
'kill_house_request_auction_winner',
|
|
'city_number',
|
|
'city_name',
|
|
'province_number',
|
|
'province_name',
|
|
'province_request',
|
|
'province_kill_request',
|
|
|
|
)
|
|
|
|
def get_poultry_request(self, obj):
|
|
poultry_request = PoultryRequest.objects.get(
|
|
key=obj.province_kill_request.province_request.poultry_request.key)
|
|
serializer = PoultryRequestForBarMangementSerializer(poultry_request)
|
|
return serializer.data
|
|
|
|
def get_kill_place(self, obj):
|
|
kill_place = obj.kill_request.slaughter_house.name if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house.name
|
|
return kill_place
|
|
|
|
def get_vet_farm(self, obj):
|
|
vet_farm = VetFarm.objects.filter(
|
|
poultry=obj.province_kill_request.province_request.poultry_request.poultry).last()
|
|
serializer = VetFarmForBarManagementSerializer(vet_farm)
|
|
return serializer.data
|
|
|
|
def get_kill_house_vet(self, obj):
|
|
data = None
|
|
kill_request = KillRequest.objects.get(key=obj.kill_request.key)
|
|
if kill_request.slaughter_house != None:
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_request.slaughter_house).select_related(
|
|
'vet__user').first()
|
|
else:
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_request.kill_house).select_related(
|
|
'vet__user').first()
|
|
if kill_house_vet:
|
|
data = {
|
|
"fullname": kill_house_vet.vet.user.fullname,
|
|
"mobile": kill_house_vet.vet.user.mobile,
|
|
}
|
|
return data
|
|
|
|
def get_weight_info(self, obj):
|
|
first_index_weight = round((obj.quantity * obj.province_request.poultry_request.Index_weight) / obj.quantity,
|
|
1) if obj.quantity > 0 else 0
|
|
first_weight = int(obj.quantity * obj.province_request.poultry_request.Index_weight)
|
|
final_index_weight = round(obj.accepted_real_weight / obj.accepted_real_quantity,
|
|
1) if obj.accepted_real_quantity > 0 else 0
|
|
kill_house_price = obj.province_kill_request.kill_house_price
|
|
weight_loss = obj.accepted_real_weight - obj.ware_house_accepted_real_weight if obj.ware_house_accepted_real_weight \
|
|
< obj.accepted_real_weight and obj.ware_house_accepted_real_weight != 0 else 0
|
|
total_weight_loss = (weight_loss / obj.accepted_real_weight) * 100 if weight_loss != 0 else 0
|
|
|
|
initial_to_quarantine_ratio = round((obj.quarantine_quantity / obj.quantity) * 100,
|
|
1) if obj.quantity > 0 and obj.quarantine_quantity else 0
|
|
|
|
quarantine_to_final_ratio = round((obj.quarantine_quantity / obj.accepted_real_quantity) * 100,
|
|
1) if obj.accepted_real_quantity > 0 and obj.quarantine_quantity else 0
|
|
|
|
return {"index_weight": first_index_weight,
|
|
"weight": first_weight,
|
|
"final_index_weight": final_index_weight,
|
|
"kill_house_price": kill_house_price,
|
|
"weight_loss": round(total_weight_loss, 1),
|
|
"input_loss": obj.weight_loss,
|
|
"initial_to_quarantine_ratio": initial_to_quarantine_ratio,
|
|
"quarantine_to_final_ratio": quarantine_to_final_ratio,
|
|
}
|
|
|
|
def get_assignment_info(self, obj):
|
|
assignment_state = False
|
|
state = None
|
|
assignment_key = None
|
|
net_weight = 0
|
|
real_quantity = 0
|
|
car_weight_without_load = 0
|
|
car_weight_with_load = 0
|
|
image_with_bar = image_without_bar = None
|
|
assignment = KillHouseAssignmentInformation.objects.filter(trash=False, kill_house_request=obj).first()
|
|
if assignment:
|
|
assignment_state = True
|
|
image_without_bar = assignment.car_weight_without_load_image
|
|
image_with_bar = assignment.car_weight_with_load_image
|
|
car_weight_without_load = assignment.car_weight_without_load
|
|
car_weight_with_load = assignment.car_weight_with_load
|
|
net_weight = assignment.net_weight
|
|
real_quantity = assignment.real_quantity
|
|
state = assignment.state
|
|
assignment_key = assignment.key
|
|
|
|
return {"assignment_state": assignment_state,
|
|
"image_without_bar": image_without_bar,
|
|
"image_with_bar": image_with_bar,
|
|
"car_weight_without_load": car_weight_without_load,
|
|
"car_weight_with_load": car_weight_with_load,
|
|
"net_weight": net_weight,
|
|
"state": state,
|
|
"real_quantity": real_quantity,
|
|
"assignment_key": assignment_key
|
|
}
|
|
|
|
def get_final_bar_state(self, obj):
|
|
final_state = 'در انتظار ورود اطلاعات'
|
|
if obj.ware_house_confirmation and obj.assignment_state_archive == 'True':
|
|
final_state = 'تکمیل شده'
|
|
elif obj.assignment_state_archive == 'True' and not obj.ware_house_confirmation:
|
|
final_state = 'در انتظار ورود به انبار'
|
|
elif obj.assignment_state_archive == 'pending' and obj.ware_house_confirmation:
|
|
final_state = 'در انتظار ورود اطلاعات بار'
|
|
else:
|
|
final_state = 'در انتظار ورود اطلاعات'
|
|
|
|
return final_state
|
|
|
|
|
|
class KillHouseRequestForInputBarsSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
killer = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
poultry_request = serializers.SerializerMethodField('get_poultry_request')
|
|
weight_info = serializers.SerializerMethodField('get_weight_info')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
exclude = (
|
|
'id',
|
|
# 'create_date',
|
|
'modify_date',
|
|
# 'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'killhouse_user_id_foreign_key',
|
|
'kill_request_id_foreign_key',
|
|
'province_request_id_foreign_key',
|
|
'province_kill_request_id_foreign_key',
|
|
'add_car_id_foreign_key',
|
|
'kill_house_request_id_key',
|
|
'capacity',
|
|
'kill_house_request_auction_winner',
|
|
'city_number',
|
|
'city_name',
|
|
'province_number',
|
|
'province_name',
|
|
'province_request',
|
|
'province_kill_request',
|
|
|
|
)
|
|
|
|
def get_poultry_request(self, obj):
|
|
poultry_request = PoultryRequest.objects.get(
|
|
key=obj.province_kill_request.province_request.poultry_request.key)
|
|
return {
|
|
"poultry_req_order_code": poultry_request.order_code,
|
|
"poultry_name": poultry_request.poultry.unit_name,
|
|
"poultry_user_name": poultry_request.poultry.user.fullname,
|
|
"poultry_mobile": poultry_request.poultry.user.mobile,
|
|
"poultry_city": poultry_request.poultry.address.city.name,
|
|
"chicken_breed": poultry_request.chicken_breed,
|
|
"date": poultry_request.send_date,
|
|
"freezing": poultry_request.freezing,
|
|
"export": poultry_request.export,
|
|
"free_sale_in_province": poultry_request.free_sale_in_province,
|
|
"direct_buying": poultry_request.direct_buying,
|
|
}
|
|
|
|
# def get_vet_info(self, obj):
|
|
# vet_farm_name = None
|
|
# vet_farm_mobile = None
|
|
# kill_house_vet_name = None
|
|
# kill_house_vet_mobile = None
|
|
# vet_farm = VetFarm.objects.filter(
|
|
# poultry=obj.province_kill_request.province_request.poultry_request.poultry).last()
|
|
#
|
|
# if vet_farm:
|
|
# vet_farm_name = vet_farm.vet.user.mobile
|
|
# vet_farm_mobile = vet_farm.vet.user.fullname
|
|
# kill_request = KillRequest.objects.get(key=obj.kill_request.key, trash=False)
|
|
# if kill_request.slaughter_house != None:
|
|
# kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_request.slaughter_house).select_related(
|
|
# 'vet__user').first()
|
|
# if kill_house_vet:
|
|
# kill_house_vet_name=kill_house_vet.vet.user.fullname
|
|
# kill_house_vet_mobile=kill_house_vet.vet.user.mobile
|
|
# else:
|
|
# kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_request.kill_house).select_related(
|
|
# 'vet__user').first()
|
|
# if kill_house_vet:
|
|
# kill_house_vet_name=kill_house_vet.vet.user.fullname
|
|
# kill_house_vet_mobile=kill_house_vet.vet.user.mobilee
|
|
# data = {
|
|
# "vet_farm_name": vet_farm_name,
|
|
# "vet_farm_mobile": vet_farm_mobile,
|
|
# "kill_house_vet_name": kill_house_vet_name,
|
|
# "kill_house_vet_mobile": kill_house_vet_mobile,
|
|
# }
|
|
# return data
|
|
|
|
def get_weight_info(self, obj):
|
|
if obj.ware_house_confirmation == True:
|
|
state = 'ورود به انبار'
|
|
|
|
elif obj.assignment_state_archive == 'pending':
|
|
state = 'در انتظار تکمیل اطلاعات'
|
|
|
|
else:
|
|
state = 'تکمیل اطلاعات'
|
|
|
|
first_index_weight = round((obj.quantity * obj.province_request.poultry_request.Index_weight) / obj.quantity, 1)
|
|
first_weight = int(obj.quantity * obj.province_request.poultry_request.Index_weight)
|
|
final_index_weight = round(obj.accepted_real_weight / obj.accepted_real_quantity, 1)
|
|
kill_house_price = obj.province_kill_request.kill_house_price
|
|
weight_loss = obj.accepted_real_weight - obj.ware_house_accepted_real_weight if obj.ware_house_accepted_real_weight \
|
|
< obj.accepted_real_weight and obj.ware_house_accepted_real_weight != 0 else 0
|
|
total_weight_loss = (weight_loss / obj.accepted_real_weight) * 100 if weight_loss != 0 else 0
|
|
return {"index_weight": first_index_weight,
|
|
"weight": first_weight,
|
|
"final_index_weight": final_index_weight,
|
|
"kill_house_price": kill_house_price,
|
|
"weight_loss": round(total_weight_loss, 1),
|
|
"input_loss": obj.weight_loss,
|
|
"state": state,
|
|
}
|
|
|
|
|
|
# سریالایزر مربوط به تایید یا رد توسط کشتارگاه نسبت به تخصیص استان به کشتارگاه
|
|
class KillHouseCheckRequestSerializer(serializers.ModelSerializer):
|
|
kill_house_request = KillHouseRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseCheckRequest
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به ثبت اطلاعات بار توسط کشتارگاه
|
|
|
|
class KillHouseRequestForCompletedLoadsSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
real_add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
kill_place = serializers.SerializerMethodField('get_kill_place')
|
|
kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
first_weight = serializers.SerializerMethodField('get_first_weight')
|
|
payment_remain_amount = serializers.SerializerMethodField('get_payment_remain_amount')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
fields = ['key', 'killhouse_user', 'add_car', 'real_add_car', 'kill_place',
|
|
'quantity',
|
|
'bar_code', 'assignment_state_archive', 'clearance_code', 'traffic_code', 'accepted_real_quantity',
|
|
'accepted_real_weight', 'vet_state', 'kill_house_vet', 'first_weight', 'payment_remain_amount']
|
|
|
|
def get_kill_place(self, obj):
|
|
kill_place = obj.kill_request.slaughter_house.name if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house.name
|
|
return kill_place
|
|
|
|
def get_kill_house_vet(self, obj):
|
|
kill_house_vet_fullname = None
|
|
kill_house_vet_mobile = None
|
|
vet_check_date = None
|
|
if obj.vet_state == 'accepted':
|
|
vet_check = VetCheckRequest.objects.filter(kill_house_request=obj).only('kill_house_request',
|
|
'create_date').first()
|
|
vet_check_date = vet_check.create_date
|
|
kill_house = obj.kill_request.slaughter_house if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_house, trash=False).select_related(
|
|
'vet__user').first()
|
|
if kill_house_vet:
|
|
kill_house_vet_fullname = kill_house_vet.vet.user.fullname
|
|
kill_house_vet_mobile = kill_house_vet.vet.user.mobile
|
|
return {
|
|
"kill_house_vet_fullname": kill_house_vet_fullname,
|
|
"kill_house_vet_mobile": kill_house_vet_mobile,
|
|
"vet_check_date": vet_check_date,
|
|
}
|
|
|
|
def get_first_weight(self, obj):
|
|
weight = obj.province_kill_request.province_request.poultry_request.Index_weight * obj.quantity
|
|
return weight
|
|
|
|
def get_payment_remain_amount(self, obj):
|
|
kill_house_payment = KillRequestFactorPayment.objects.filter(
|
|
kill_request_factor__kill_request=obj.kill_request)
|
|
if kill_house_payment.count() > 0:
|
|
kill_request_payment_remain_amount = kill_house_payment.last().remain_amount
|
|
else:
|
|
kill_request_payment_remain_amount = 0
|
|
return {
|
|
"kill_request_payment_remain_amount": kill_request_payment_remain_amount,
|
|
"sms_payment": obj.kill_request.sms_payment,
|
|
"buy_type": obj.province_kill_request.payment_type,
|
|
}
|
|
|
|
|
|
class KillHouseAssignmentInformationForCompletedLoadsSerializer(serializers.ModelSerializer):
|
|
kill_house_request = KillHouseRequestForCompletedLoadsSerializer(read_only=True)
|
|
poultry_request = serializers.SerializerMethodField('get_poultry_request')
|
|
banks_information = serializers.SerializerMethodField('get_banks_information')
|
|
|
|
class Meta:
|
|
model = KillHouseAssignmentInformation
|
|
fields = ['kill_house_request', 'poultry_request', 'banks_information', 'car_weight_without_load',
|
|
'car_weight_without_load_image', 'car_weight_with_load', 'car_weight_with_load_image', 'net_weight',
|
|
'state', 'real_quantity', 'protest_time']
|
|
|
|
def get_poultry_request(self, obj):
|
|
poultry_request = PoultryRequest.objects.get(
|
|
key=obj.kill_house_request.province_kill_request.province_request.city_request_Poultry.poultry_request.key)
|
|
return {
|
|
"poultry_province": poultry_request.poultry.user.province.name,
|
|
"poultry_city": poultry_request.poultry.user.city.name,
|
|
"order_code": poultry_request.order_code,
|
|
"poultry_name": poultry_request.poultry.user.fullname,
|
|
"unit_name": poultry_request.poultry.unit_name,
|
|
"poultry_mobile": poultry_request.poultry.user.mobile,
|
|
"poultry_request_quantity": poultry_request.quantity,
|
|
"poultry_request_id": poultry_request.id,
|
|
"age": (datetime.datetime.now() - poultry_request.hatching.date).days + 1,
|
|
|
|
"index_weight": poultry_request.Index_weight,
|
|
"chicken_breed": poultry_request.chicken_breed,
|
|
"create_date": poultry_request.create_date,
|
|
"send_date": poultry_request.send_date,
|
|
"hatching_date": poultry_request.hatching.date,
|
|
"cell_type": poultry_request.cell_type,
|
|
"losses": poultry_request.hatching.losses,
|
|
}
|
|
|
|
def get_banks_information(self, obj):
|
|
poultry_name_of_bank_user = None
|
|
poultry_bank_name = None
|
|
poultry_card = None
|
|
poultry_account = None
|
|
poultry_shaba = None
|
|
province_name_of_bank_user = None
|
|
province_bank_name = None
|
|
province_card = None
|
|
province_account = None
|
|
province_shaba = None
|
|
allocation = ShareOfAllocation.objects.all()
|
|
if allocation.count() > 0:
|
|
allocation = allocation.last().total
|
|
else:
|
|
allocation = 0
|
|
|
|
poultry = Poultry.objects.get(
|
|
key=obj.kill_house_request.province_request.poultry_request.poultry.key,
|
|
trash=False)
|
|
if poultry.user_bank_info != None:
|
|
poultry_name_of_bank_user = poultry.user_bank_info.name_of_bank_user
|
|
poultry_bank_name = poultry.user_bank_info.bank_name
|
|
poultry_card = poultry.user_bank_info.card
|
|
poultry_account = poultry.user_bank_info.account
|
|
poultry_shaba = poultry.user_bank_info.shaba
|
|
operator = ProvinceOperator.objects.filter(trash=False)
|
|
if operator.last().user_bank_info != None:
|
|
operator = operator.last()
|
|
province_name_of_bank_user = operator.user_bank_info.name_of_bank_user
|
|
province_bank_name = operator.user_bank_info.bank_name
|
|
province_card = operator.user_bank_info.shaba
|
|
province_account = operator.user_bank_info.account
|
|
province_shaba = operator.user_bank_info.shaba
|
|
|
|
return {
|
|
"poultry_name_of_bank_user": poultry_name_of_bank_user,
|
|
"poultry_bank_name": poultry_bank_name,
|
|
"poultry_card": poultry_card,
|
|
"poultry_account": poultry_account,
|
|
"poultry_shaba": poultry_shaba,
|
|
"province_name_of_bank_user": province_name_of_bank_user,
|
|
"province_bank_name": province_bank_name,
|
|
"province_card": province_card,
|
|
"province_account": province_account,
|
|
"province_shaba": province_shaba,
|
|
"province_wage": allocation,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseAssignmentInformationSerializer(serializers.ModelSerializer):
|
|
kill_house_request = KillHouseRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseAssignmentInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseAssignmentInformationForAggregateLoadsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillHouseAssignmentInformation
|
|
fields = ['key', 'car_weight_without_load', 'car_weight_without_load_image', 'car_weight_with_load',
|
|
'car_weight_with_load_image', 'net_weight', 'real_quantity']
|
|
|
|
|
|
class KillHouseRequestForAggregateLoadsSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
killer = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
poultry_request = serializers.SerializerMethodField('get_poultry_request')
|
|
kill_place = serializers.SerializerMethodField('get_kill_place')
|
|
assingment_information = serializers.SerializerMethodField('get_assingment_information')
|
|
first_weight = serializers.SerializerMethodField('get_first_weight')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
fields = ['key', 'killhouse_user', 'add_car', 'poultry_request', 'kill_place', 'assingment_information',
|
|
'quantity',
|
|
'bar_code', 'assignment_state_archive', 'clearance_code', 'traffic_code', 'accepted_real_quantity',
|
|
'accepted_real_weight', 'vet_state', 'first_weight', 'killer']
|
|
|
|
def get_poultry_request(self, obj):
|
|
poultry_request = PoultryRequest.objects.get(
|
|
key=obj.province_kill_request.province_request.poultry_request.key)
|
|
serializer = PoultryRequestForBarMangementSerializer(poultry_request)
|
|
return serializer.data
|
|
|
|
def get_kill_place(self, obj):
|
|
kill_place = obj.kill_request.slaughter_house.name if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house.name
|
|
return kill_place
|
|
|
|
def get_assingment_information(self, obj):
|
|
assignment = KillHouseAssignmentInformation.objects.filter(kill_house_request=obj).first()
|
|
serializer = KillHouseAssignmentInformationForAggregateLoadsSerializer(assignment)
|
|
return serializer.data
|
|
|
|
def get_first_weight(self, obj):
|
|
weight = obj.province_kill_request.province_request.poultry_request.Index_weight * obj.quantity
|
|
return weight
|
|
|
|
|
|
class KillHouseAssignmentImagesSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseAssignmentImages
|
|
fields = '__all__'
|
|
|
|
|
|
class VetForAllUserSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Vet
|
|
fields = ['address', 'user_bank_info', 'identity_documents', 'active']
|
|
|
|
|
|
class KillHouseVetForKillHouseVetSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForKillHouseVetKillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseVet
|
|
fields = ['kill_house']
|
|
|
|
|
|
class KillHouseVetForAllUserSerializer(serializers.ModelSerializer):
|
|
vet = VetForAllUserSerializer(read_only=True)
|
|
# kill_house = KillHouseForAllUserSerializer(read_only=True)
|
|
kill_houses = serializers.SerializerMethodField('get_kill_houses')
|
|
|
|
class Meta:
|
|
model = KillHouseVet
|
|
fields = ['vet', 'kill_houses']
|
|
|
|
def get_kill_houses(self, obj):
|
|
kill_houses = KillHouseVet.objects.filter(key=obj.key)
|
|
return KillHouseVetForKillHouseVetSerializer(kill_houses, many=True).data
|
|
|
|
|
|
# سریالایزر مربوط به ثبت اطلاعات بار توسط کشتارگاه
|
|
class VetCheckRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = VetCheckRequest
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceKillRequestForAutoAllocationSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = ['killhouse_user', 'main_quantity']
|
|
|
|
|
|
# سریالایزر مربوط به تخصیص استان به کشتارگاه
|
|
class ProvinceKillRequestSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseSerializer(read_only=True)
|
|
kill_request = KillRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceKillRequestProvinceWageSerializer(serializers.ModelSerializer):
|
|
province_request = serializers.SerializerMethodField('get_province_request')
|
|
kill_house_requests = serializers.SerializerMethodField('get_kill_house_request')
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = ['province_request', 'kill_house_requests', 'wage_pay', 'depositor', 'total_amount_editor',
|
|
'archive_by_province', 'archive_message', 'archiver']
|
|
|
|
def get_province_request(self, obj):
|
|
role = self.context.get('request').GET['role']
|
|
kill_place = obj.kill_request.slaughter_house.name if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house.name
|
|
kill_house_user_full_name = obj.killhouse_user.kill_house_operator.user.fullname
|
|
kill_house_user_mobile = obj.killhouse_user.kill_house_operator.user.mobile
|
|
killer = obj.killhouse_user.killer
|
|
province_request = ProvinceCheckOperatorRequest.objects.filter(key=obj.province_request.key,
|
|
trash=False).select_related(
|
|
'poultry_request__poultry__user', 'poultry_request__poultry__address__city', 'poultry_request').last()
|
|
|
|
if role in ['KillHouse', 'SuperAdmin', 'AdminX', 'Supporter']:
|
|
total_amount = obj.total_wage_amount
|
|
elif role == 'ProvinceOperator':
|
|
total_amount = obj.union_share
|
|
elif role == 'Company':
|
|
total_amount = obj.company_share
|
|
elif role == 'Company':
|
|
total_amount = obj.guilds_share
|
|
else:
|
|
total_amount = obj.total_wage_amount
|
|
|
|
return {
|
|
"order_code": province_request.poultry_request.order_code,
|
|
"poultry_fullname": province_request.poultry_request.poultry.user.fullname,
|
|
"poultry_mobile": province_request.poultry_request.poultry.user.mobile,
|
|
"poultry_city": province_request.poultry_request.poultry.address.city.name,
|
|
"breed": province_request.poultry_request.chicken_breed,
|
|
"index_weight": province_request.poultry_request.Index_weight,
|
|
"send_date": province_request.poultry_request.send_date,
|
|
"wage": obj.wage,
|
|
"killer": killer,
|
|
"kill_place": kill_place,
|
|
"kill_house_user_full_name": kill_house_user_full_name,
|
|
"kill_house_user_mobile": kill_house_user_mobile,
|
|
"province_kill_request_quantity": obj.total_killed_quantity,
|
|
"province_kill_request_key": obj.key,
|
|
"province_kill_request_total_weight": obj.total_killed_weight,
|
|
"total_amount": total_amount,
|
|
"prev_total_amount": obj.prev_total_amount,
|
|
# "prev_total_amount": wage * (obj.main_quantity * province_request.poultry_request.Index_weight)
|
|
"free_sale": province_request.poultry_request.free_sale_in_province,
|
|
}
|
|
|
|
def get_kill_house_request(self, obj):
|
|
kill_house_request = KillHouseRequest.objects.filter(province_kill_request=obj,
|
|
trash=False)
|
|
serializer = KillHouseRequestForBarManagementSerializer(kill_house_request, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class KillRequestForDirectBuyingSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForCommonlyUsedSerializer(read_only=True)
|
|
slaughter_house = KillHouseForCommonlyUsedSerializer(read_only=True)
|
|
poultry = PoultryForPredictionSerializer(read_only=True)
|
|
poultry_request = PoultryRequestForMarketSerializer(read_only=True)
|
|
|
|
# kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
|
|
class Meta:
|
|
model = KillRequest
|
|
fields = ['key', 'create_date', 'recive_date', 'free_direct_buying', 'chicken_breed', 'kill_house',
|
|
'slaughter_house', 'poultry', 'poultry_request', 'payment_deadline_date', 'payment_deadline_days',
|
|
'kill_capacity', 'Index_weight', 'amount', 'market_final_accept', 'market_state', 'recive_time',
|
|
'market_code_status', 'input_market_code', 'market_code','market_state_message']
|
|
|
|
# def get_kill_house_vet(self, obj):
|
|
# kill_house_vet = KillHouseVet.objects.filter(kill_house__exact=obj.kill_house, trash=False).last()
|
|
# if kill_house_vet:
|
|
# return KillHouseVetForKillRequestSerializer(kill_house_vet).data
|
|
# else:
|
|
# return None
|
|
|
|
|
|
class ProvinceKillRequestForDirectBuyingSerializer(serializers.ModelSerializer):
|
|
kill_request = KillRequestForDirectBuyingSerializer(read_only=True)
|
|
general_info = serializers.SerializerMethodField('get_general_info')
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = ['key', 'kill_request', 'total_killed_quantity', 'total_killed_weight', 'general_info',
|
|
'payment_deadline_days', 'payment_deadline_date', 'payment_deadline', 'payment_deadline_archive',
|
|
'payment_deadline_state', 'payment_deadline_checker_fullname', 'payment_deadline_checker_mobile',
|
|
'payment_deadline_check_date', 'payment_deadline_archive_message', 'final_accept',
|
|
'extension_payment_deadline_days', 'payment_deadline_amount', 'extension_payment_deadline_days',
|
|
'extension_payment_deadline_date']
|
|
|
|
def get_general_info(self, obj):
|
|
age = ((obj.kill_request.recive_date.date()) - (obj.kill_request.poultry_hatching.date.date())).days + 1
|
|
total_amount = int(obj.kill_request.amount * obj.total_killed_weight)
|
|
payments = DirectBuyingPayment.objects.filter(province_kill_request=obj, trash=False)
|
|
total_paid_amount = payments.aggregate(total=Sum('amount'))['total'] or 0
|
|
|
|
return {
|
|
"age": age,
|
|
"total_amount": total_amount,
|
|
"Index_weight": round((obj.total_killed_weight / obj.total_killed_quantity), 2),
|
|
"total_paid_amount": total_paid_amount
|
|
|
|
}
|
|
|
|
|
|
class ProvinceKillRequestForKillingInformationDiscrepancyReportSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForKillingInformationDiscrepancyReportSerializer(read_only=True)
|
|
total_info = serializers.SerializerMethodField('get_total_info')
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = ['killhouse_user', 'total_info']
|
|
|
|
def get_total_info(self, obj):
|
|
province_kill_request_quantity = obj.main_quantity
|
|
province_kill_request_weight = int(obj.main_quantity * obj.province_request.poultry_request.Index_weight)
|
|
province_kill_request_remain_quantity = obj.quantity
|
|
province_kill_request_remain_weight = int(obj.quantity * obj.province_request.poultry_request.Index_weight)
|
|
kill_house_requests = KillHouseRequest.objects.filter(trash=False, province_kill_request=obj).annotate(
|
|
total_quantity=Sum('accepted_real_quantity'),
|
|
total_weight=Sum('accepted_real_weight'),
|
|
|
|
)
|
|
kill_house_request_quantity = kill_house_requests.aggregate(total=Sum('total_quantity'))['total']
|
|
kill_house_request_weight = kill_house_requests.aggregate(total=Sum('total_weight'))['total']
|
|
|
|
return {
|
|
"province_kill_request_quantity": province_kill_request_quantity,
|
|
"province_kill_request_weight": province_kill_request_weight,
|
|
"province_kill_request_remain_quantity": province_kill_request_remain_quantity,
|
|
"province_kill_request_remain_weight": province_kill_request_remain_weight,
|
|
"kill_house_requests_count": kill_house_requests.count(),
|
|
"kill_house_request_quantity": kill_house_request_quantity if kill_house_request_quantity != None else 0,
|
|
"kill_house_request_weight": kill_house_request_weight if kill_house_request_weight != None else 0,
|
|
"operator_fullname": obj.killhouse_user.kill_house_operator.user.fullname,
|
|
"operator_mobile": obj.killhouse_user.kill_house_operator.user.mobile,
|
|
"role": "KillHouse",
|
|
|
|
}
|
|
|
|
|
|
# سریالایزر مربوط به ثبت درخواست بورسی کشتارگاه
|
|
class KillHouseRequestExchangeSerializer(serializers.ModelSerializer):
|
|
user = UserProfileSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseRequestExchange
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به ثبت درخواست رزرو بورسی کشتارگاه
|
|
class KillHouseRequestExchangeReserveSerializer(serializers.ModelSerializer):
|
|
poultry_exchange = PoultryRequestExchangeSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseRequestExchangeReserve
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به ثبت درخواست رزرو بورسی کشتارگاه
|
|
class KillHouseRequestActionSerializer(serializers.ModelSerializer):
|
|
poultry_request = PoultryRequestSerializer(read_only=True)
|
|
kill_house = KillHouseSerializer(read_only=True)
|
|
winner = serializers.SerializerMethodField('get_winner')
|
|
|
|
class Meta:
|
|
model = KillHouseRequestAction
|
|
fields = '__all__'
|
|
|
|
def get_winner(self, instance):
|
|
winners = KillHouseRequestActionWinner.objects.filter(kill_house_request_auction=instance)
|
|
if winners.count() > 0:
|
|
winners = winners.last()
|
|
internal_dict = {
|
|
"key": winners.key,
|
|
"fee": winners.fee,
|
|
"quantity": winners.quantity
|
|
}
|
|
|
|
return internal_dict
|
|
|
|
|
|
# سریالایزر مربوط به ثبت درخواست رزرو بورسی کشتارگاه
|
|
class KillHouseRequestActionWinnerSerializer(serializers.ModelSerializer):
|
|
kill_house_request_auction = KillHouseRequestActionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseRequestActionWinner
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به اضافه کردن خودرو به درخواست بورسی کشتارگاه
|
|
class KillHouseRequestExchangeAddCarSerializer(serializers.ModelSerializer):
|
|
kill_house_reserve = KillHouseRequestExchangeReserveSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseRequestExchangeAddCar
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به تایید یا رد درخواست بورسی کشتارگاه توسط مرغدار
|
|
|
|
class PoultryRequestExchangeAcceptSerializer(serializers.ModelSerializer):
|
|
poultry_request_exchange = PoultryRequestExchangeSerializer(read_only=True)
|
|
kill_house_request_exchange_reserve = KillHouseRequestExchangeReserveSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PoultryRequestExchangeAccept
|
|
fields = '__all__'
|
|
|
|
|
|
class DriverRequestCancelSerializer(serializers.ModelSerializer):
|
|
Kill_house_add_car = KillHouseADDCARSerializer(read_only=True)
|
|
kill_house_request = KillHouseRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = DriverRequestCancel
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseComplaintSerializer(serializers.ModelSerializer):
|
|
bar = KillHouseAssignmentInformationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseComplaint
|
|
fields = '__all__'
|
|
|
|
|
|
class CheckKillHouseComplaintSerializer(serializers.ModelSerializer):
|
|
complaint = KillHouseComplaintSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CheckKillHouseComplaint
|
|
fields = '__all__'
|
|
|
|
|
|
class CheckUnusualCasualtiesSerializer(serializers.ModelSerializer):
|
|
killHousecomplaint = KillHouseComplaintSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CheckUnusualCasualties
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseCreditorsSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseCreditors
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseWareHouseForDailyBroadCastOInDetailsSerializer(serializers.ModelSerializer):
|
|
informations = serializers.SerializerMethodField('get_informations')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['informations', 'key']
|
|
|
|
def get_informations(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()
|
|
kill_house_ware_houses = KillHouseWareHouse.objects.filter(
|
|
Q(weight_of_carcasses__gt=0) | Q(free_weight_of_carcasses__gt=0) | Q(
|
|
pre_cold_weight_of_carcasses_to_ware_house__gt=0), date__date__gte=date1,
|
|
date__date__lte=date2, kill_house=obj, trash=False)
|
|
|
|
steward_allocations = StewardAllocation.objects.filter(
|
|
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
|
ware_house__in=kill_house_ware_houses, receiver_state__in=('pending', 'accepted'), trash=False).order_by(
|
|
'id')
|
|
|
|
guild_allocations = steward_allocations.filter(guilds__isnull=False, trash=False)
|
|
number_of_guild = guild_allocations.values('guilds').distinct().count() if guild_allocations else 0
|
|
|
|
steward_allocations_for_number_of_steward = steward_allocations.filter(steward__isnull=False, trash=False)
|
|
number_of_steward = steward_allocations_for_number_of_steward.values(
|
|
'steward').distinct().count() if steward_allocations_for_number_of_steward else 0
|
|
|
|
total_pre_cold_quantity = \
|
|
kill_house_ware_houses.aggregate(total=Sum('pre_cold_number_of_carcasses_to_ware_house'))[
|
|
'total']
|
|
total_pre_cold_weight = \
|
|
kill_house_ware_houses.aggregate(total=Sum('pre_cold_weight_of_carcasses_to_ware_house'))[
|
|
'total']
|
|
total_number_of_free_carcasses = kill_house_ware_houses.aggregate(total=Sum('number_of_free_carcasses'))[
|
|
'total']
|
|
total_free_weight_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('free_weight_of_carcasses'))[
|
|
'total']
|
|
total_number_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('number_of_carcasses'))[
|
|
'total']
|
|
total_weight_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('weight_of_carcasses'))[
|
|
'total']
|
|
|
|
final_total_number_of_carcasses = \
|
|
kill_house_ware_houses.aggregate(total=Sum('final_total_number_of_carcasses'))[
|
|
'total']
|
|
final_total_weight_of_carcasses = \
|
|
kill_house_ware_houses.aggregate(total=Sum('final_total_weight_of_carcasses'))[
|
|
'total']
|
|
|
|
total_remain_quantity = \
|
|
kill_house_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
|
'total']
|
|
|
|
total_remain_weight = \
|
|
kill_house_ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
|
'total']
|
|
|
|
total_allocated_quantity = \
|
|
steward_allocations.aggregate(total=Sum('real_number_of_carcasses'))[
|
|
'total']
|
|
|
|
total_allocated_weight = \
|
|
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
|
'total']
|
|
|
|
total_accepted_allocated_quantity = \
|
|
steward_allocations.aggregate(total=Sum('receiver_real_number_of_carcasses'))[
|
|
'total']
|
|
|
|
total_accepted_allocated_weight = \
|
|
steward_allocations.aggregate(total=Sum('receiver_real_weight_of_carcasses'))[
|
|
'total']
|
|
|
|
return {
|
|
"buyers": obj.name,
|
|
"city": obj.kill_house_operator.user.city.name,
|
|
"incoming_quantity_of_cold_house": 0,
|
|
"incoming_weight_of_cold_house": 0,
|
|
"total_pre_cold_quantity": total_pre_cold_quantity if total_pre_cold_quantity != None else 0,
|
|
"total_pre_cold_weight": total_pre_cold_weight if total_pre_cold_weight != None else 0,
|
|
"total_number_of_free_carcasses": total_number_of_free_carcasses if total_number_of_free_carcasses != None else 0,
|
|
"total_free_weight_of_carcasses": total_free_weight_of_carcasses if total_free_weight_of_carcasses != None else 0,
|
|
"total_number_of_carcasses": total_number_of_carcasses if total_number_of_carcasses != None else 0,
|
|
"total_weight_of_carcasses": total_weight_of_carcasses if total_weight_of_carcasses != None else 0,
|
|
"final_total_number_of_carcasses": final_total_number_of_carcasses if final_total_number_of_carcasses != None else 0,
|
|
"final_total_weight_of_carcasses": final_total_weight_of_carcasses if final_total_weight_of_carcasses != None else 0,
|
|
"total_allocated_quantity": total_allocated_quantity if total_allocated_quantity != None else 0,
|
|
"total_allocated_weight": total_allocated_weight if total_allocated_weight != None else 0,
|
|
"total_accepted_allocated_quantity": total_accepted_allocated_quantity if total_accepted_allocated_quantity != None else 0,
|
|
"total_accepted_allocated_weight": total_accepted_allocated_weight if total_accepted_allocated_weight != None else 0,
|
|
"total_remain_quantity": total_remain_quantity if total_remain_quantity != None else 0,
|
|
"total_remain_weight": total_remain_weight if total_remain_weight != None else 0,
|
|
"number_of_guild": number_of_guild,
|
|
"number_of_steward": number_of_steward,
|
|
|
|
}
|
|
|
|
|
|
class KillHouseWareHouseSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseWareHouse
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseFreeBarInformationSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
exclusive_killer = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseFreeBarInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseFreeBarInformationForWageTotalSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
total_amount = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = KillHouseFreeBarInformation
|
|
fields = '__all__'
|
|
|
|
def get_info(self, obj):
|
|
role = self.context.get('request').GET['role']
|
|
if role in ['KillHouse', 'SuperAdmin', 'AdminX', 'Supporter']:
|
|
amount = obj.total_wage_amount
|
|
elif role == 'ProvinceOperator':
|
|
amount = obj.union_share
|
|
elif role == 'Company':
|
|
amount = obj.company_share
|
|
elif role == 'Guilds':
|
|
amount = obj.guilds_share
|
|
else:
|
|
amount = obj.total_wage_amount
|
|
return amount
|
|
|
|
|
|
class TypeActivityForKillHouseBuyerSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TypeActivity
|
|
fields = ['key', 'title']
|
|
|
|
|
|
class OutProvinceCarcassesBuyerForKillHouseSerializer(serializers.ModelSerializer):
|
|
type_activity = TypeActivityForKillHouseBuyerSerializer(read_only=True)
|
|
Kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = OutProvinceCarcassesBuyer
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by'
|
|
)
|
|
|
|
|
|
class KillHouseFreeSaleBarInformationSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
buyer = OutProvinceCarcassesBuyerForKillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseFreeSaleBarInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceKillRequestForLetterVetSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = ['killhouse_user', 'info']
|
|
|
|
def get_info(self, obj):
|
|
if obj.kill_request.slaughter_house == None:
|
|
kill_place = obj.kill_request.kill_house.name
|
|
else:
|
|
kill_place = obj.kill_request.slaughter_house.name
|
|
return {
|
|
"kill_place": kill_place,
|
|
"quantity": obj.main_quantity,
|
|
"weight": obj.main_quantity * obj.province_request.poultry_request.Index_weight,
|
|
}
|
|
|
|
|
|
class PoultryRequestoutProvinceSerializer(serializers.ModelSerializer):
|
|
poultry = PoultryForPoultryRequestLetterSerializer(read_only=True)
|
|
out_province_poultry_request_buyer = OutProvincePoultryRequestBuyerSerializer(read_only=True)
|
|
vet_farm_name = serializers.CharField(source='vet_farm.user.fullname', read_only=True)
|
|
vet_farm_mobile = serializers.CharField(source='vet_farm.user.mobile', read_only=True)
|
|
hatching = serializers.SerializerMethodField('get_hatching')
|
|
out_state = serializers.SerializerMethodField('get_out_state')
|
|
total_system_quarantine_quantity = serializers.SerializerMethodField('get_total_system_quarantine_quantity')
|
|
|
|
class Meta:
|
|
model = PoultryRequest
|
|
fields = ['key', 'out_state', 'hatching', 'create_date', 'poultry', 'order_code', 'quantity', 'remain_quantity',
|
|
'send_date',
|
|
'chicken_breed', 'financial_operation', 'Index_weight', 'amount', 'state_process', 'province_state',
|
|
'order_code', 'registrar', 'buyer', 'out', 'quarantine_code', 'final_state',
|
|
'out_province_request_cancel', 'out_province_request_canceller', 'out_province_driver_info',
|
|
'hatching_left_over', 'freezing', 'total_wage_amount', 'wage_pay', 'has_wage', 'payer_type',
|
|
'payer_fullname', 'out_province_poultry_request_buyer', 'buyer_mobile', 'buyer_fullname',
|
|
'buyer_city', 'buyer_province', 'agent', 'killer_kill_house_unit_name', 'killer_kill_house_city',
|
|
'killer_kill_house_province', 'kill_house_unique_id', 'payment_link', 'quarantine_quantity',
|
|
'total_system_quarantine_quantity','vet_farm_name','vet_farm_mobile','interface_number']
|
|
|
|
def get_hatching(self, obj):
|
|
|
|
|
|
# if ProvinceKillRequest.objects.filter(
|
|
# province_request__city_request_Poultry__poultry_request=obj,
|
|
# state='accepted').exists():
|
|
# age = (obj.send_date - obj.hatching.date).days + 1
|
|
# else:
|
|
# age = (datetime.datetime.now() - obj.hatching.date).days + 1
|
|
age = (obj.send_date - obj.hatching.date).days + 1
|
|
|
|
return {
|
|
"age": age,
|
|
"left_over": obj.hatching.left_over,
|
|
"city": obj.poultry.address.city.name,
|
|
"province": obj.poultry.address.province.name,
|
|
"hatching_quantity": obj.hatching.quantity,
|
|
}
|
|
|
|
def get_out_state(self, obj):
|
|
state = None
|
|
if obj.province_state == 'rejected':
|
|
state = 'رد شده'
|
|
elif obj.province_state == 'pending' and obj.out_province_request_cancel == False:
|
|
state = 'در انتظار تایید'
|
|
|
|
elif obj.province_state == 'accepted' and obj.has_wage == True and obj.wage_pay == False and obj.out_province_request_cancel == False and obj.out_province_request_cancel == False:
|
|
state = 'در انتظار پرداخت'
|
|
elif obj.province_state == 'accepted' and obj.has_wage == False and obj.wage_pay == False and obj.out_province_request_cancel == False and obj.out_province_request_cancel == False:
|
|
state = 'تایید شده'
|
|
elif obj.province_state == 'accepted' and obj.has_wage == True and obj.wage_pay == True and obj.out_province_request_cancel == False and obj.out_province_request_cancel == False:
|
|
state = 'پرداخت شده'
|
|
else:
|
|
state = 'لغو شده'
|
|
|
|
return state
|
|
|
|
def get_total_system_quarantine_quantity(self, obj):
|
|
code = PoultryRequestQuarantineCode.objects.filter(trash=False, poultry_request=obj).aggregate(
|
|
total=Sum('system_quarantine_quantity'))['total'] or 0
|
|
return code
|
|
|
|
|
|
class PoultryRequestLetterTotalSerializer(serializers.ModelSerializer):
|
|
poultry = PoultryForPoultryRequestLetterSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PoultryRequest
|
|
fields = ['poultry', 'order_code']
|
|
|
|
|
|
class PoultryRequestLetterForProvinceVetSerializer(serializers.ModelSerializer):
|
|
poultry = PoultryForBarManagementSerializer(read_only=True)
|
|
hatching = serializers.SerializerMethodField('get_hatching')
|
|
province_kill_requests = serializers.SerializerMethodField('get_province_kill_requests')
|
|
|
|
class Meta:
|
|
model = PoultryRequest
|
|
fields = ['key', 'id', 'poultry', 'order_code', 'send_date',
|
|
'province_kill_requests', 'quantity', 'Index_weight', 'hatching']
|
|
|
|
def get_hatching(self, obj):
|
|
vet_farm = VetFarm.objects.filter(trash=False, poultry=obj.poultry).first()
|
|
pricing = Pricing.objects.filter(trash=False).last()
|
|
vet_farm_name = vet_farm.vet.user.fullname if vet_farm else None
|
|
vet_farm_mobile = vet_farm.vet.user.mobile if vet_farm else None
|
|
age = (datetime.datetime.now() - obj.hatching.date).days + 1
|
|
return {
|
|
"vet_farm_name": vet_farm_name,
|
|
"vet_farm_mobile": vet_farm_mobile,
|
|
"age": age,
|
|
"hatching_quantity": obj.hatching.quantity,
|
|
"price": pricing.live_chicken_price if pricing else None,
|
|
}
|
|
|
|
def get_province_kill_requests(self, obj):
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False,
|
|
province_request__poultry_request=obj)
|
|
serializer = ProvinceKillRequestForLetterVetSerializer(province_kill_requests, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class KillHouseRequestForTotalInformationSerializer(serializers.ModelSerializer):
|
|
add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
kill_place = serializers.SerializerMethodField('get_kill_place')
|
|
vet_farm = serializers.SerializerMethodField('get_vet_farm')
|
|
kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
weight_info = serializers.SerializerMethodField('get_weight_info')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
# 'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'killhouse_user_id_foreign_key',
|
|
'kill_request_id_foreign_key',
|
|
'province_request_id_foreign_key',
|
|
'province_kill_request_id_foreign_key',
|
|
'add_car_id_foreign_key',
|
|
'kill_house_request_id_key',
|
|
'capacity',
|
|
'kill_house_request_auction_winner',
|
|
'city_number',
|
|
'city_name',
|
|
'province_number',
|
|
'province_name',
|
|
'province_request',
|
|
'province_kill_request',
|
|
|
|
)
|
|
|
|
def get_kill_place(self, obj):
|
|
kill_place = obj.kill_request.slaughter_house.name if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house.name
|
|
return kill_place
|
|
|
|
def get_vet_farm(self, obj):
|
|
vet_farm = VetFarm.objects.filter(
|
|
poultry=obj.province_kill_request.province_request.poultry_request.poultry).last()
|
|
serializer = VetFarmForBarManagementSerializer(vet_farm)
|
|
return serializer.data
|
|
|
|
def get_kill_house_vet(self, obj):
|
|
data = None
|
|
kill_request = KillRequest.objects.get(key=obj.kill_request.key, trash=False)
|
|
if kill_request.slaughter_house != None:
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_request.slaughter_house).select_related(
|
|
'vet__user').first()
|
|
else:
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_request.kill_house).select_related(
|
|
'vet__user').first()
|
|
if kill_house_vet:
|
|
data = {
|
|
"fullname": kill_house_vet.vet.user.fullname,
|
|
"mobile": kill_house_vet.vet.user.mobile,
|
|
}
|
|
return data
|
|
|
|
def get_weight_info(self, obj):
|
|
|
|
return {
|
|
"weight": int(obj.quantity * obj.province_request.poultry_request.Index_weight),
|
|
"index_weight": round(int(obj.quantity * obj.province_request.poultry_request.Index_weight) / obj.quantity,
|
|
2),
|
|
}
|
|
|
|
|
|
class KillHouseRequestForTotalInformationInTableSerializer(serializers.ModelSerializer):
|
|
add_car = KillHouseADDCARForBarManagementSerializer(read_only=True)
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
kill_place = serializers.SerializerMethodField('get_kill_place')
|
|
vet_farm = serializers.SerializerMethodField('get_vet_farm')
|
|
kill_house_vet = serializers.SerializerMethodField('get_kill_house_vet')
|
|
weight_info = serializers.SerializerMethodField('get_weight_info')
|
|
vet_check = serializers.SerializerMethodField('get_vet_check')
|
|
assignment = serializers.SerializerMethodField('get_assignment')
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
# 'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'killhouse_user_id_foreign_key',
|
|
'kill_request_id_foreign_key',
|
|
'province_request_id_foreign_key',
|
|
'province_kill_request_id_foreign_key',
|
|
'add_car_id_foreign_key',
|
|
'kill_house_request_id_key',
|
|
'capacity',
|
|
'kill_house_request_auction_winner',
|
|
'city_number',
|
|
'city_name',
|
|
'province_number',
|
|
'province_name',
|
|
'province_request',
|
|
'province_kill_request',
|
|
|
|
)
|
|
|
|
def get_kill_place(self, obj):
|
|
kill_place = obj.kill_request.slaughter_house.name if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house.name
|
|
return kill_place
|
|
|
|
def get_vet_farm(self, obj):
|
|
vet_farm = VetFarm.objects.filter(
|
|
poultry=obj.province_kill_request.province_request.poultry_request.poultry).last()
|
|
serializer = VetFarmForBarManagementSerializer(vet_farm)
|
|
return serializer.data
|
|
|
|
def get_kill_house_vet(self, obj):
|
|
data = None
|
|
kill_request = KillRequest.objects.get(key=obj.kill_request.key, trash=False)
|
|
if kill_request.slaughter_house != None:
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_request.slaughter_house).select_related(
|
|
'vet__user').first()
|
|
else:
|
|
kill_house_vet = KillHouseVet.objects.filter(kill_house=kill_request.kill_house).select_related(
|
|
'vet__user').first()
|
|
if kill_house_vet:
|
|
data = {
|
|
"fullname": kill_house_vet.vet.user.fullname,
|
|
"mobile": kill_house_vet.vet.user.mobile,
|
|
}
|
|
return data
|
|
|
|
def get_weight_info(self, obj):
|
|
|
|
return {
|
|
"weight": int(obj.quantity * obj.province_request.poultry_request.Index_weight),
|
|
"index_weight": round(int(obj.quantity * obj.province_request.poultry_request.Index_weight) / obj.quantity,
|
|
2),
|
|
}
|
|
|
|
def get_vet_check(self, obj):
|
|
try:
|
|
vet_check = VetCheckRequest.objects.get(kill_house_request=obj)
|
|
vet_state = {
|
|
"date": vet_check.create_date,
|
|
"state": vet_check.state,
|
|
"kill_house_vet_fullname": vet_check.vet.user.fullname,
|
|
"kill_house_vet_mobile": vet_check.vet.user.mobile,
|
|
}
|
|
except:
|
|
vet_state = None
|
|
|
|
return vet_state
|
|
|
|
def get_assignment(self, obj):
|
|
try:
|
|
assignment = KillHouseAssignmentInformation.objects.get(kill_house_request=obj)
|
|
assignment_info = {
|
|
"net_weight": assignment.net_weight,
|
|
"real_quantity": assignment.real_quantity,
|
|
"car_weight_without_load_image": assignment.car_weight_without_load_image,
|
|
"car_weight_with_load_image": assignment.car_weight_with_load_image,
|
|
"state": assignment.state,
|
|
}
|
|
except:
|
|
assignment_info = None
|
|
|
|
return assignment_info
|
|
|
|
|
|
class ProvinceKillRequestForTotalInformationSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
weight_info = serializers.SerializerMethodField('get_weight_info')
|
|
kill_place = serializers.SerializerMethodField('get_kill_place')
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = ['killhouse_user', 'quantity', 'kill_place', 'main_quantity', 'total_killed_quantity',
|
|
'first_car_allocated_quantity', 'total_killed_weight', 'automatic', 'weight_info', 'state']
|
|
|
|
def get_weight_info(self, obj):
|
|
province_kill_request_quantity = obj.main_quantity
|
|
province_kill_request_weight = int(obj.main_quantity * obj.province_request.poultry_request.Index_weight)
|
|
province_kill_request_index_weight = round((province_kill_request_weight / province_kill_request_quantity), 2)
|
|
|
|
return {
|
|
"province_kill_request_quantity": province_kill_request_quantity,
|
|
"province_kill_request_weight": province_kill_request_weight,
|
|
"province_kill_request_index_weight": province_kill_request_index_weight,
|
|
}
|
|
|
|
def get_kill_place(self, obj):
|
|
kill_place = obj.kill_request.slaughter_house.name if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house.name
|
|
return kill_place
|
|
|
|
|
|
class ProvinceKillRequestForTotalInformationInTableSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
weight_info = serializers.SerializerMethodField('get_weight_info')
|
|
kill_place = serializers.SerializerMethodField('get_kill_place')
|
|
kill_house_requests = serializers.SerializerMethodField('get_kill_house_requests')
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = ['killhouse_user', 'quantity', 'kill_place', 'main_quantity', 'total_killed_quantity',
|
|
'first_car_allocated_quantity', 'total_killed_weight', 'automatic', 'kill_house_requests',
|
|
'weight_info', 'state']
|
|
|
|
def get_weight_info(self, obj):
|
|
province_kill_request_quantity = obj.main_quantity
|
|
province_kill_request_weight = int(obj.main_quantity * obj.province_request.poultry_request.Index_weight)
|
|
province_kill_request_index_weight = round((province_kill_request_weight / province_kill_request_quantity), 2)
|
|
|
|
return {
|
|
"province_kill_request_quantity": province_kill_request_quantity,
|
|
"province_kill_request_weight": province_kill_request_weight,
|
|
"province_kill_request_index_weight": province_kill_request_index_weight,
|
|
}
|
|
|
|
def get_kill_place(self, obj):
|
|
kill_place = obj.kill_request.slaughter_house.name if obj.kill_request.slaughter_house != None else obj.kill_request.kill_house.name
|
|
return kill_place
|
|
|
|
def get_kill_house_requests(self, obj):
|
|
kill_house_requests = KillHouseRequest.objects.filter(province_kill_request=obj)
|
|
kill_house_requests_serializer = KillHouseRequestForTotalInformationInTableSerializer(kill_house_requests,
|
|
many=True)
|
|
return kill_house_requests_serializer.data
|
|
|
|
|
|
class PoultryRequestForTotalInformationSerializer(serializers.ModelSerializer):
|
|
poultry = PoultryForBarManagementSerializer(read_only=True)
|
|
hatching = serializers.SerializerMethodField('get_hatching')
|
|
city_state = serializers.SerializerMethodField('get_city_state')
|
|
province_state = serializers.SerializerMethodField('get_province_state')
|
|
province_kill_requests = serializers.SerializerMethodField('get_province_kill_requests')
|
|
kill_house_requests = serializers.SerializerMethodField('get_kill_house_requests')
|
|
|
|
class Meta:
|
|
model = PoultryRequest
|
|
fields = ['key', 'create_date', 'poultry', 'quantity', 'send_date', 'direct_buying', 'union', 'state_process',
|
|
'free_sale_in_province', 'hatching',
|
|
'province_state', 'amount', 'financial_operation',
|
|
'chicken_breed', 'order_code', 'city_state', 'province_state', 'Index_weight',
|
|
'province_kill_requests', 'kill_house_requests', 'freezing', 'out', 'out_province_driver_info',
|
|
'out_province_request_canceller', 'out_province_request_cancel', 'buyer']
|
|
|
|
def get_city_state(self, obj):
|
|
try:
|
|
if obj.out == True:
|
|
city_operator = CityOperator.objects.get(key=obj.city_operator.key, trash=False)
|
|
return {
|
|
"city_operator_fullname": city_operator.user.fullname,
|
|
"city_operator_mobile": city_operator.user.mobile,
|
|
"state": 'accept' if obj.state_process == 'accepted' else 'reject',
|
|
"poultry": obj.poultry.unit_name,
|
|
"city": obj.poultry.address.city.name,
|
|
"province": obj.poultry.address.province.name,
|
|
"date": obj.send_date.date(),
|
|
}
|
|
|
|
else:
|
|
city = CityOperatorCheckRequest.objects.get(trash=False, poultry_request=obj)
|
|
return {
|
|
"city_operator_fullname": city.city_operator_system.user.fullname,
|
|
"city_operator_mobile": city.city_operator_system.user.mobile,
|
|
"state": city.state,
|
|
"poultry": city.poultry_request.poultry.unit_name,
|
|
"city": city.poultry_request.poultry.address.city.name,
|
|
"province": city.poultry_request.poultry.address.province.name,
|
|
"date": city.create_date.date(),
|
|
}
|
|
except:
|
|
city_operator = CityOperator.objects.get(key=obj.city_operator.key, trash=False)
|
|
return {
|
|
"city_operator_fullname": city_operator.user.fullname,
|
|
"city_operator_mobile": city_operator.user.mobile,
|
|
"state": 'pending',
|
|
"poultry": obj.poultry.unit_name,
|
|
"city": obj.poultry.address.city.name,
|
|
"province": obj.poultry.address.province.name,
|
|
"date": None,
|
|
}
|
|
|
|
def get_hatching(self, obj):
|
|
if ProvinceKillRequest.objects.filter(
|
|
province_request__city_request_Poultry__poultry_request=obj,
|
|
state='accepted').exists():
|
|
|
|
age2 = (obj.send_date - obj.hatching.date).days + 1
|
|
else:
|
|
age2 = (datetime.datetime.now() - obj.hatching.date).days + 1
|
|
price = Pricing.objects.filter(trash=False).last()
|
|
price = price.live_chicken_price if price else None
|
|
try:
|
|
vet_farm = VetFarm.objects.get(poultry=obj.poultry, trash=False)
|
|
vet_farm_info = {
|
|
"vet_farm_fullname": vet_farm.vet.user.fullname,
|
|
"vet_farm_mobile": vet_farm.vet.user.mobile
|
|
}
|
|
except:
|
|
vet_farm_info = None
|
|
|
|
return {
|
|
"quantity": obj.hatching.quantity,
|
|
"left_over": obj.hatching.left_over,
|
|
"age": age2,
|
|
"price": price,
|
|
"vet_farm_info": vet_farm_info,
|
|
"weight": int(obj.quantity * obj.Index_weight)
|
|
|
|
}
|
|
|
|
def get_province_state(self, obj):
|
|
try:
|
|
if obj.out == True:
|
|
province_operator = ProvinceOperator.objects.get(user__role__name='ProvinceOperator', trash=False)
|
|
return {
|
|
"province_operator_fullname": province_operator.user.fullname,
|
|
"province_operator_mobile": province_operator.user.mobile,
|
|
"state": 'accept' if obj.province_state == 'accepted' else 'reject',
|
|
"poultry": obj.poultry.unit_name,
|
|
"city": obj.poultry.address.city.name,
|
|
"province": obj.poultry.address.province.name,
|
|
"date": obj.send_date.date(),
|
|
}
|
|
else:
|
|
province = ProvinceCheckOperatorRequest.objects.get(trash=False, poultry_request=obj)
|
|
return {
|
|
"province_operator_fullname": province.province_operator_system.user.fullname,
|
|
"province_operator_mobile": province.province_operator_system.user.mobile,
|
|
"state": province.state,
|
|
"poultry": province.poultry_request.poultry.unit_name,
|
|
"city": province.poultry_request.poultry.address.city.name,
|
|
"province": province.poultry_request.poultry.address.province.name,
|
|
"date": province.create_date.date(),
|
|
}
|
|
except:
|
|
province_operator = ProvinceOperator.objects.get(user__role__name='ProvinceOperator', trash=False)
|
|
return {
|
|
"province_operator_fullname": province_operator.user.fullname,
|
|
"province_operator_mobile": province_operator.user.mobile,
|
|
"state": 'pending',
|
|
"poultry": obj.poultry.unit_name,
|
|
"city": obj.poultry.address.city.name,
|
|
"province": obj.poultry.address.province.name,
|
|
"date": None,
|
|
}
|
|
|
|
def get_province_kill_requests(self, obj):
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'), trash=False,
|
|
province_request__poultry_request__key=obj.key)
|
|
province_kill_request_serializer = ProvinceKillRequestForTotalInformationSerializer(province_kill_requests,
|
|
many=True)
|
|
poultry_request_quantity = obj.quantity
|
|
poultry_request_remain_quantity = obj.remain_quantity
|
|
allocated_quantity = province_kill_requests.aggregate(total=Sum('main_quantity'))['total']
|
|
|
|
return {
|
|
"province_kill_request_serializer": province_kill_request_serializer.data,
|
|
"province_kill_requests_total_info": {
|
|
"poultry_request_quantity": poultry_request_quantity,
|
|
"poultry_request_remain_quantity": poultry_request_remain_quantity,
|
|
"allocated_quantity": allocated_quantity if allocated_quantity != None else 0,
|
|
}
|
|
}
|
|
|
|
def get_kill_house_requests(self, obj):
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'), trash=False,
|
|
province_request__poultry_request__key=obj.key)
|
|
allocated_quantity = province_kill_requests.aggregate(total=Sum('main_quantity'))['total']
|
|
remain_quantity = province_kill_requests.aggregate(total=Sum('quantity'))['total']
|
|
kill_house_requests = KillHouseRequest.objects.filter(
|
|
(Q(trash=False) | Q(trash=True, bar_remover__isnull=False)), province_request__poultry_request=obj)
|
|
kill_house_request_quantity = kill_house_requests.aggregate(total=Sum('quantity'))['total']
|
|
|
|
kill_house_request_vet_check = kill_house_requests.filter(
|
|
(Q(trash=False, vet_state='accepted', assignment_state_archive='pending') | Q(trash=False,
|
|
vet_state='pending',
|
|
assignment_state_archive='True')))
|
|
kill_house_request_assignment = kill_house_requests.filter(trash=False, assignment_state_archive='True')
|
|
|
|
kill_house_requests_serializer = KillHouseRequestForTotalInformationSerializer(kill_house_requests,
|
|
many=True)
|
|
kill_house_request_vet_check_serializer = KillHouseRequestForTotalInformationSerializer(
|
|
kill_house_request_vet_check,
|
|
many=True)
|
|
kill_house_request_assignment_serializer = KillHouseRequestForTotalInformationSerializer(
|
|
kill_house_request_assignment,
|
|
many=True)
|
|
|
|
return {
|
|
"allocated_quantity": allocated_quantity,
|
|
"remain_quantity": remain_quantity,
|
|
"kill_house_request_quantity": kill_house_request_quantity if kill_house_request_quantity != None else 0,
|
|
"number_of_bars": len(kill_house_requests),
|
|
"vet_accepted_number_of_bars": len(kill_house_request_vet_check),
|
|
"vet_remain_number_of_bars": len(kill_house_requests) - len(kill_house_request_vet_check),
|
|
"kill_house_request_assignment": len(kill_house_request_assignment),
|
|
"assignment_remain_number_of_bars": len(kill_house_requests) - len(kill_house_request_assignment),
|
|
"kill_house_requests_serializer": kill_house_requests_serializer.data,
|
|
"kill_house_request_vet_check_serializer": kill_house_request_vet_check_serializer.data,
|
|
"kill_house_request_assignment_serializer": kill_house_request_assignment_serializer.data,
|
|
|
|
}
|
|
|
|
|
|
class PoultryRequestForTotalInformationInTableSerializer(serializers.ModelSerializer):
|
|
poultry = PoultryForBarManagementSerializer(read_only=True)
|
|
hatching = serializers.SerializerMethodField('get_hatching')
|
|
city_state = serializers.SerializerMethodField('get_city_state')
|
|
province_state = serializers.SerializerMethodField('get_province_state')
|
|
province_kill_requests = serializers.SerializerMethodField('get_province_kill_requests')
|
|
|
|
class Meta:
|
|
model = PoultryRequest
|
|
fields = ['key', 'create_date', 'poultry', 'quantity', 'send_date', 'direct_buying', 'union', 'state_process',
|
|
'free_sale_in_province', 'hatching',
|
|
'province_state', 'amount', 'financial_operation',
|
|
'chicken_breed', 'order_code', 'city_state', 'province_state', 'Index_weight',
|
|
'province_kill_requests']
|
|
|
|
def get_city_state(self, obj):
|
|
try:
|
|
city = CityOperatorCheckRequest.objects.get(trash=False, poultry_request=obj)
|
|
return {
|
|
"city_operator_fullname": city.city_operator_system.user.fullname,
|
|
"city_operator_mobile": city.city_operator_system.user.mobile,
|
|
"state": city.state,
|
|
"poultry": city.poultry_request.poultry.unit_name,
|
|
"city": city.poultry_request.poultry.address.city.name,
|
|
"province": city.poultry_request.poultry.address.province.name,
|
|
"date": city.create_date.date(),
|
|
}
|
|
except:
|
|
city_operator = CityOperator.objects.get(key=obj.city_operator.key, trash=False)
|
|
return {
|
|
"city_operator_fullname": city_operator.user.fullname,
|
|
"city_operator_mobile": city_operator.user.mobile,
|
|
"state": 'pending',
|
|
"poultry": obj.poultry.unit_name,
|
|
"city": obj.poultry.address.city.name,
|
|
"province": obj.poultry.address.province.name,
|
|
"date": None,
|
|
}
|
|
|
|
def get_hatching(self, obj):
|
|
if ProvinceKillRequest.objects.filter(
|
|
province_request__city_request_Poultry__poultry_request=obj,
|
|
state='accepted').exists():
|
|
|
|
age2 = (obj.send_date - obj.hatching.date).days + 1
|
|
else:
|
|
age2 = (datetime.datetime.now() - obj.hatching.date).days + 1
|
|
price = Pricing.objects.filter(trash=False).last()
|
|
price = price.live_chicken_price if price else None
|
|
try:
|
|
vet_farm = VetFarm.objects.get(poultry=obj.poultry, trash=False)
|
|
vet_farm_info = {
|
|
"vet_farm_fullname": vet_farm.vet.user.fullname,
|
|
"vet_farm_mobile": vet_farm.vet.user.mobile
|
|
}
|
|
except:
|
|
vet_farm_info = None
|
|
|
|
return {
|
|
"quantity": obj.hatching.quantity,
|
|
"left_over": obj.hatching.left_over,
|
|
"age": age2,
|
|
"price": price,
|
|
"vet_farm_info": vet_farm_info,
|
|
"weight": int(obj.quantity * obj.Index_weight)
|
|
|
|
}
|
|
|
|
def get_province_state(self, obj):
|
|
try:
|
|
province = ProvinceCheckOperatorRequest.objects.get(trash=False, poultry_request=obj)
|
|
return {
|
|
"province_operator_fullname": province.province_operator_system.user.fullname,
|
|
"province_operator_mobile": province.province_operator_system.user.mobile,
|
|
"state": province.state,
|
|
"poultry": province.poultry_request.poultry.unit_name,
|
|
"city": province.poultry_request.poultry.address.city.name,
|
|
"province": province.poultry_request.poultry.address.province.name,
|
|
"date": province.create_date.date(),
|
|
}
|
|
except:
|
|
province_operator = ProvinceOperator.objects.get(user__role__name='ProvinceOperator', trash=False)
|
|
return {
|
|
"province_operator_fullname": province_operator.user.fullname,
|
|
"province_operator_mobile": province_operator.user.mobile,
|
|
"state": 'pending',
|
|
"poultry": obj.poultry.unit_name,
|
|
"city": obj.poultry.address.city.name,
|
|
"province": obj.poultry.address.province.name,
|
|
"date": None,
|
|
}
|
|
|
|
def get_province_kill_requests(self, obj):
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'), trash=False,
|
|
province_request__poultry_request__key=obj.key)
|
|
province_kill_request_serializer = ProvinceKillRequestForTotalInformationInTableSerializer(
|
|
province_kill_requests,
|
|
many=True)
|
|
|
|
return province_kill_request_serializer.data
|
|
|
|
|
|
class SlaughterHouseTransactionSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
parent_kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = SlaughterHouseTransaction
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseWageSerializer(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
total_weight = 0
|
|
total_wage = 0
|
|
total_paid_wage = 0
|
|
total_unpaid_wage = 0
|
|
kill_house_requests = KillHouseRequest.objects.filter(Q(killer=obj) | Q(killhouse_user=obj), trash=False)
|
|
total_wage += \
|
|
kill_house_requests.aggregate(total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
|
'total'] or 0
|
|
total_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
first_car_allocated_quantity=0,
|
|
state__in=('pending', 'accepted'), trash=False,
|
|
return_to_province=False, archive_by_province=False)
|
|
total_wage += province_kill_requests.aggregate(total=Sum(F('total_killed_weight') * F('wage')))[
|
|
'total'] or 0
|
|
total_weight += province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
transactions = SlaughterHouseTransaction.objects.filter(Q(kill_house=obj) | Q(parent_kill_house=obj),
|
|
state='completed', trash=False)
|
|
total_paid_wage = transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"total_weight": total_weight,
|
|
"total_wage": total_wage,
|
|
"total_paid_wage": total_paid_wage,
|
|
"total_unpaid_wage": total_wage - total_paid_wage,
|
|
}
|
|
|
|
|
|
class TotalWageInformationExclusiveKillerSerializer(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['name', 'key', 'wage_info']
|
|
|
|
# def get_wage_info(self, obj):
|
|
# before_total_out_live_buying_province_carcasses_price = 0
|
|
# total_wage_type = WageType.objects.filter(trash=False)
|
|
# free_buying_live_weight_wage_type = total_wage_type.filter(en_name='live-buy', trash=False).first()
|
|
# free_buying_live_weight_wage_type_amount = free_buying_live_weight_wage_type.amount if free_buying_live_weight_wage_type.status == True else 0
|
|
# finance_info = get_kill_house_finance_info(obj)
|
|
# slaughter_transactions = InternalTransaction.objects.filter(
|
|
# kill_house=obj, status='completed',
|
|
# trash=False)
|
|
#
|
|
# total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
# 'total'] or 0
|
|
#
|
|
# total_pure_province_carcasses_price = finance_info['total_pure_province_carcasses_price']
|
|
# return_total_pure_province_carcasses_price = finance_info['total_return_pure_province_carcasses_price']
|
|
# total_out_selling_province_carcasses_price = finance_info['total_out_selling_province_carcasses_price']
|
|
# difference_requests_price = finance_info['difference_requests_price']
|
|
#
|
|
# if new_out_selling_count_wage:
|
|
# total_out_live_buying_province_carcasses_price = int(
|
|
# (finance_info[
|
|
# 'before_total_out_live_buying_province_carcasses_weight'] * before_out_buying_count_wage_amount) + (
|
|
# finance_info[
|
|
# 'after_total_out_live_buying_province_carcasses_weight'] * free_buying_live_weight_wage_type_amount))
|
|
#
|
|
# before_total_out_live_buying_province_carcasses_price = finance_info[
|
|
# 'before_total_out_live_buying_province_carcasses_weight'] * before_out_buying_count_wage_amount
|
|
# else:
|
|
# total_out_live_buying_province_carcasses_price = finance_info[
|
|
# 'total_out_live_buying_province_carcasses_price']
|
|
# total_out_carcasses_buying_province_carcasses_price = finance_info[
|
|
# 'total_out_carcasses_buying_province_carcasses_price']
|
|
# total_price = finance_info['total_price']
|
|
#
|
|
# # total_pure_province_carcasses_price = finance_info['total_pure_province_carcasses_price']
|
|
# # total_out_selling_province_carcasses_price = finance_info['total_out_selling_province_carcasses_price']
|
|
# # total_out_live_buying_province_carcasses_price = finance_info['total_out_live_buying_province_carcasses_price']
|
|
# # total_out_carcasses_buying_province_carcasses_price = finance_info[
|
|
# # 'total_out_carcasses_buying_province_carcasses_price']
|
|
# # total_price = finance_info['total_price']
|
|
#
|
|
# percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
# union_province_kill_request_percent = percentages_wage_type.filter(
|
|
# wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
|
# company_province_kill_request_percent = percentages_wage_type.filter(
|
|
# wage_type__en_name='province-kill-request', share_type__en_name='company').first().percent / 100
|
|
# guilds_province_kill_request_percent = percentages_wage_type.filter(
|
|
# wage_type__en_name='province-kill-request', share_type__en_name='guilds').first().percent / 100
|
|
# other_province_kill_request_percent = percentages_wage_type.filter(
|
|
# wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
|
#
|
|
# union_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
# share_type__en_name='union').first().percent / 100
|
|
# union_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
# share_type__en_name='union').first().percent / 100
|
|
# company_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
# share_type__en_name='company').first().percent / 100
|
|
# company_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
# share_type__en_name='company').first().percent / 100
|
|
# guilds_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
# share_type__en_name='guilds').first().percent / 100
|
|
# guilds_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
# share_type__en_name='guilds').first().percent / 100
|
|
# other_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
# share_type__en_name='other').first().percent / 100
|
|
# other_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
# share_type__en_name='other').first().percent / 100
|
|
#
|
|
# union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
# share_type__en_name='union').first().percent / 100
|
|
# company_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
# share_type__en_name='company').first().percent / 100
|
|
# guilds_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
# share_type__en_name='guilds').first().percent / 100
|
|
# other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
# share_type__en_name='other').first().percent / 100
|
|
#
|
|
# guilds_difference_requests_price = difference_requests_price * guilds_province_kill_request_percent
|
|
# other_difference_requests_price = difference_requests_price * other_province_kill_request_percent
|
|
# guild_return_province_kill_request_wage = return_total_pure_province_carcasses_price * guilds_province_kill_request_percent
|
|
# other_return_province_kill_request_wage = return_total_pure_province_carcasses_price * other_province_kill_request_percent
|
|
#
|
|
# union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
# return_union_province_kill_request_wage = return_total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
# union_free_buying_live_wage = (
|
|
# total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * union_free_buying_live_percent
|
|
# union_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * union_free_buying_carcasses_percent
|
|
# union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
|
# union_total_wage = union_province_kill_request_wage + union_free_buying_live_wage + union_free_buying_carcasses_wage + union_free_sell_carcasses_wage + return_union_province_kill_request_wage
|
|
# union_total_paid_wage = slaughter_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
|
# union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
|
# company_province_kill_request_wage = (
|
|
# total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
# guilds_difference_requests_price + other_difference_requests_price)
|
|
# return_company_province_kill_request_wage = (
|
|
# return_total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
# guild_return_province_kill_request_wage + other_return_province_kill_request_wage)
|
|
# company_free_buying_live_wage = ((
|
|
# total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * company_free_buying_live_percent) + before_total_out_live_buying_province_carcasses_price
|
|
# company_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * company_free_buying_carcasses_percent
|
|
# company_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * company_free_sell_carcasses_percent
|
|
# company_total_wage = company_province_kill_request_wage + company_free_buying_live_wage + company_free_buying_carcasses_wage + company_free_sell_carcasses_wage + return_company_province_kill_request_wage
|
|
# company_total_paid_wage = slaughter_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
|
# company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
|
#
|
|
# guilds_province_kill_request_wage = (
|
|
# total_pure_province_carcasses_price * guilds_province_kill_request_percent) - guilds_difference_requests_price
|
|
# return_guilds_province_kill_request_wage = 0
|
|
# guilds_free_buying_live_wage = (
|
|
# total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * guilds_free_buying_live_percent
|
|
# guilds_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * guilds_free_buying_carcasses_percent
|
|
# guilds_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * guilds_free_sell_carcasses_percent
|
|
# guilds_total_wage = guilds_province_kill_request_wage + guilds_free_buying_live_wage + guilds_free_buying_carcasses_wage + guilds_free_sell_carcasses_wage
|
|
# guilds_total_paid_wage = slaughter_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
|
# guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
|
#
|
|
# other_province_kill_request_wage = (
|
|
# total_pure_province_carcasses_price * other_province_kill_request_percent) - other_difference_requests_price
|
|
# return_other_province_kill_request_wage = 0
|
|
# other_free_buying_live_wage = (
|
|
# total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * other_free_buying_live_percent
|
|
# other_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * other_free_buying_carcasses_percent
|
|
# other_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * other_free_sell_carcasses_percent
|
|
# other_total_wage = other_province_kill_request_wage + other_free_buying_live_wage + other_free_buying_carcasses_wage + other_free_sell_carcasses_wage
|
|
# other_total_paid_wage = slaughter_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
|
# other_total_unpaid_wage = other_total_wage - other_total_paid_wage
|
|
#
|
|
# shares = [
|
|
# {
|
|
# "name": "اتحادیه",
|
|
# "province_kill_request_wage": union_province_kill_request_wage,
|
|
# "return_province_kill_request_wage": return_union_province_kill_request_wage,
|
|
# "free_buying_live_wage": union_free_buying_live_wage,
|
|
# "free_buying_carcasses_wage": union_free_buying_carcasses_wage,
|
|
# "free_sell_carcasses_wage": union_free_sell_carcasses_wage,
|
|
# "total_wage": union_total_wage,
|
|
# "total_paid_wage": union_total_paid_wage,
|
|
# "total_unpaid_wage": union_total_unpaid_wage,
|
|
# },
|
|
# {
|
|
# "name": "شرکت",
|
|
# "province_kill_request_wage": company_province_kill_request_wage,
|
|
# "return_province_kill_request_wage": return_company_province_kill_request_wage,
|
|
# "free_buying_live_wage": company_free_buying_live_wage,
|
|
# "free_buying_carcasses_wage": company_free_buying_carcasses_wage,
|
|
# "free_sell_carcasses_wage": company_free_sell_carcasses_wage,
|
|
# "total_wage": company_total_wage,
|
|
# "total_paid_wage": company_total_paid_wage,
|
|
# "total_unpaid_wage": company_total_unpaid_wage,
|
|
# },
|
|
# {
|
|
# "name": "صنف پروتئین",
|
|
# "province_kill_request_wage": guilds_province_kill_request_wage,
|
|
# "return_province_kill_request_wage": return_guilds_province_kill_request_wage,
|
|
# "free_buying_live_wage": guilds_free_buying_live_wage,
|
|
# "free_buying_carcasses_wage": guilds_free_buying_carcasses_wage,
|
|
# "free_sell_carcasses_wage": guilds_free_sell_carcasses_wage,
|
|
# "total_wage": guilds_total_wage,
|
|
# "total_paid_wage": guilds_total_paid_wage,
|
|
# "total_unpaid_wage": guilds_total_unpaid_wage,
|
|
# },
|
|
# {
|
|
# "name": "دامپزشک",
|
|
# "province_kill_request_wage": other_province_kill_request_wage,
|
|
# "return_province_kill_request_wage": return_other_province_kill_request_wage,
|
|
# "free_buying_live_wage": other_free_buying_live_wage,
|
|
# "free_buying_carcasses_wage": other_free_buying_carcasses_wage,
|
|
# "free_sell_carcasses_wage": other_free_sell_carcasses_wage,
|
|
# "total_wage": other_total_wage,
|
|
# "total_paid_wage": other_total_paid_wage,
|
|
# "total_unpaid_wage": other_total_unpaid_wage,
|
|
# }]
|
|
#
|
|
# return {
|
|
# "wage_counting_type": wage_counting_type,
|
|
# "total_wage": finance_info['total_price'],
|
|
# "total_paid_wage": total_paid_wage,
|
|
# "off": obj.off,
|
|
# "total_unpaid_wage": finance_info['total_price'] - (total_paid_wage + obj.off),
|
|
# "province_kill_requests_total_wage": finance_info['total_pure_province_carcasses_price'],
|
|
# "province_kill_requests_total_weight": finance_info['total_pure_province_carcasses_weight'],
|
|
# "free_bars_live_total_wage": finance_info['total_out_live_buying_province_carcasses_price'],
|
|
# "free_bars_live_total_weight": finance_info['total_out_live_buying_province_carcasses_weight'],
|
|
# "free_bars_carcases_total_wage": finance_info['total_out_carcasses_buying_province_carcasses_price'],
|
|
# "free_bars_carcases_total_weight": finance_info['total_out_carcasses_buying_province_carcasses_weight'],
|
|
# "free_bars_out_province_carcases_total_wage": finance_info['total_out_selling_province_carcasses_price'],
|
|
# "free_bars_out_province_carcases_total_weight": finance_info['total_out_selling_province_carcasses_weight'],
|
|
# "total_province_live_weight": finance_info['total_province_live_weight'],
|
|
# "total_province_carcasses_weight": finance_info['total_province_carcasses_weight'],
|
|
# "province_live_wage_amount": finance_info['province_live_wage_amount'],
|
|
# "free_buying_live_weight_amount": finance_info['free_buying_live_weight_amount'],
|
|
# "free_buying_carcesses_weight_amount": finance_info['free_buying_carcesses_weight_amount'],
|
|
# "free_sell_carcesses_weight_amount": finance_info['free_sell_carcesses_weight_amount'],
|
|
# "user_token": 'k' + obj.kill_house_operator.user.user_gate_way_id,
|
|
# "shares": shares,
|
|
# "return_total_province_live_weight": finance_info['return_total_province_live_weight'],
|
|
# "total_return_pure_province_carcasses_price": finance_info['total_return_pure_province_carcasses_price'],
|
|
#
|
|
# }
|
|
def get_wage_info(self, obj):
|
|
before_total_out_live_buying_province_carcasses_price = 0
|
|
total_wage_type = WageType.objects.filter(trash=False)
|
|
free_buying_live_weight_wage_type = total_wage_type.filter(en_name='live-buy', trash=False).first()
|
|
free_buying_live_weight_wage_type_amount = free_buying_live_weight_wage_type.amount if free_buying_live_weight_wage_type.status == True else 0
|
|
finance_info = get_kill_house_finance_info(obj)
|
|
if obj.killer and obj.type == 'public':
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house=obj,parent_kill_house=obj, status='completed',
|
|
trash=False)
|
|
else:
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house=obj, status='completed',
|
|
trash=False)
|
|
|
|
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
|
|
total_pure_province_carcasses_price = finance_info['total_pure_province_carcasses_price']
|
|
return_total_pure_province_carcasses_price = finance_info['total_return_pure_province_carcasses_price']
|
|
total_out_selling_province_carcasses_price = finance_info['total_out_selling_province_carcasses_price']
|
|
difference_requests_price = finance_info['difference_requests_price']
|
|
|
|
if new_out_selling_count_wage:
|
|
total_out_live_buying_province_carcasses_price = int(
|
|
(finance_info[
|
|
'before_total_out_live_buying_province_carcasses_weight'] * before_out_buying_count_wage_amount) + (
|
|
finance_info[
|
|
'after_total_out_live_buying_province_carcasses_weight'] * free_buying_live_weight_wage_type_amount))
|
|
|
|
before_total_out_live_buying_province_carcasses_price = finance_info[
|
|
'before_total_out_live_buying_province_carcasses_weight'] * before_out_buying_count_wage_amount
|
|
else:
|
|
total_out_live_buying_province_carcasses_price = finance_info[
|
|
'total_out_live_buying_province_carcasses_price']
|
|
total_out_carcasses_buying_province_carcasses_price = finance_info[
|
|
'total_out_carcasses_buying_province_carcasses_price']
|
|
total_price = finance_info['total_price']
|
|
|
|
# total_pure_province_carcasses_price = finance_info['total_pure_province_carcasses_price']
|
|
# total_out_selling_province_carcasses_price = finance_info['total_out_selling_province_carcasses_price']
|
|
# total_out_live_buying_province_carcasses_price = finance_info['total_out_live_buying_province_carcasses_price']
|
|
# total_out_carcasses_buying_province_carcasses_price = finance_info[
|
|
# 'total_out_carcasses_buying_province_carcasses_price']
|
|
# total_price = finance_info['total_price']
|
|
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
union_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
|
company_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='company').first().percent / 100
|
|
guilds_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='guilds').first().percent / 100
|
|
other_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
|
|
|
union_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='union').first().percent / 100
|
|
union_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='company').first().percent / 100
|
|
company_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
guilds_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='other').first().percent / 100
|
|
other_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
guilds_difference_requests_price = difference_requests_price * guilds_province_kill_request_percent
|
|
other_difference_requests_price = difference_requests_price * other_province_kill_request_percent
|
|
guild_return_province_kill_request_wage = return_total_pure_province_carcasses_price * guilds_province_kill_request_percent
|
|
other_return_province_kill_request_wage = return_total_pure_province_carcasses_price * other_province_kill_request_percent
|
|
|
|
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
return_union_province_kill_request_wage = return_total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
union_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * union_free_buying_live_percent
|
|
union_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * union_free_buying_carcasses_percent
|
|
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
|
union_total_wage = union_province_kill_request_wage + union_free_buying_live_wage + union_free_buying_carcasses_wage + union_free_sell_carcasses_wage + return_union_province_kill_request_wage
|
|
union_total_paid_wage = slaughter_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
|
union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
|
company_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
guilds_difference_requests_price + other_difference_requests_price)
|
|
return_company_province_kill_request_wage = (
|
|
return_total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
guild_return_province_kill_request_wage + other_return_province_kill_request_wage)
|
|
company_free_buying_live_wage = ((
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * company_free_buying_live_percent) + before_total_out_live_buying_province_carcasses_price
|
|
company_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * company_free_buying_carcasses_percent
|
|
company_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * company_free_sell_carcasses_percent
|
|
company_total_wage = company_province_kill_request_wage + company_free_buying_live_wage + company_free_buying_carcasses_wage + company_free_sell_carcasses_wage + return_company_province_kill_request_wage
|
|
company_total_paid_wage = slaughter_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
|
company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
|
|
|
guilds_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * guilds_province_kill_request_percent) - guilds_difference_requests_price
|
|
return_guilds_province_kill_request_wage = 0
|
|
guilds_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * guilds_free_buying_live_percent
|
|
guilds_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * guilds_free_buying_carcasses_percent
|
|
guilds_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * guilds_free_sell_carcasses_percent
|
|
guilds_total_wage = guilds_province_kill_request_wage + guilds_free_buying_live_wage + guilds_free_buying_carcasses_wage + guilds_free_sell_carcasses_wage
|
|
guilds_total_paid_wage = slaughter_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
|
guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
|
|
|
other_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * other_province_kill_request_percent) - other_difference_requests_price
|
|
return_other_province_kill_request_wage = 0
|
|
other_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * other_free_buying_live_percent
|
|
other_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * other_free_buying_carcasses_percent
|
|
other_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * other_free_sell_carcasses_percent
|
|
other_total_wage = other_province_kill_request_wage + other_free_buying_live_wage + other_free_buying_carcasses_wage + other_free_sell_carcasses_wage
|
|
other_total_paid_wage = slaughter_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
|
other_total_unpaid_wage = other_total_wage - other_total_paid_wage
|
|
|
|
shares = [
|
|
{
|
|
"name": "اتحادیه",
|
|
"province_kill_request_wage": union_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_union_province_kill_request_wage,
|
|
"free_buying_live_wage": union_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": union_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": union_free_sell_carcasses_wage,
|
|
"total_wage": union_total_wage,
|
|
"total_paid_wage": union_total_paid_wage,
|
|
"total_unpaid_wage": union_total_unpaid_wage,
|
|
},
|
|
{
|
|
"name": "شرکت",
|
|
"province_kill_request_wage": company_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_company_province_kill_request_wage,
|
|
"free_buying_live_wage": company_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": company_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": company_free_sell_carcasses_wage,
|
|
"total_wage": company_total_wage,
|
|
"total_paid_wage": company_total_paid_wage,
|
|
"total_unpaid_wage": company_total_unpaid_wage,
|
|
},
|
|
{
|
|
"name": "صنف پروتئین",
|
|
"province_kill_request_wage": guilds_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_guilds_province_kill_request_wage,
|
|
"free_buying_live_wage": guilds_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": guilds_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": guilds_free_sell_carcasses_wage,
|
|
"total_wage": guilds_total_wage,
|
|
"total_paid_wage": guilds_total_paid_wage,
|
|
"total_unpaid_wage": guilds_total_unpaid_wage,
|
|
},
|
|
{
|
|
"name": "دامپزشک",
|
|
"province_kill_request_wage": other_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_other_province_kill_request_wage,
|
|
"free_buying_live_wage": other_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": other_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": other_free_sell_carcasses_wage,
|
|
"total_wage": other_total_wage,
|
|
"total_paid_wage": other_total_paid_wage,
|
|
"total_unpaid_wage": other_total_unpaid_wage,
|
|
}]
|
|
|
|
return {
|
|
"wage_counting_type": wage_counting_type,
|
|
"total_wage": finance_info['total_price'],
|
|
"total_paid_wage": total_paid_wage,
|
|
"off": obj.off,
|
|
"total_unpaid_wage": finance_info['total_price'] - (total_paid_wage + obj.off),
|
|
"province_kill_requests_total_wage": finance_info['total_pure_province_carcasses_price'],
|
|
"province_kill_requests_total_weight": finance_info['total_pure_province_carcasses_weight'],
|
|
"free_bars_live_total_wage": finance_info['total_out_live_buying_province_carcasses_price'],
|
|
"free_bars_live_total_weight": finance_info['total_out_live_buying_province_carcasses_weight'],
|
|
"free_bars_carcases_total_wage": finance_info['total_out_carcasses_buying_province_carcasses_price'],
|
|
"free_bars_carcases_total_weight": finance_info['total_out_carcasses_buying_province_carcasses_weight'],
|
|
"free_bars_out_province_carcases_total_wage": finance_info['total_out_selling_province_carcasses_price'],
|
|
"free_bars_out_province_carcases_total_weight": finance_info['total_out_selling_province_carcasses_weight'],
|
|
"total_province_live_weight": finance_info['total_province_live_weight'],
|
|
"total_province_carcasses_weight": finance_info['total_province_carcasses_weight'],
|
|
"province_live_wage_amount": finance_info['province_live_wage_amount'],
|
|
"free_buying_live_weight_amount": finance_info['free_buying_live_weight_amount'],
|
|
"free_buying_carcesses_weight_amount": finance_info['free_buying_carcesses_weight_amount'],
|
|
"free_sell_carcesses_weight_amount": finance_info['free_sell_carcesses_weight_amount'],
|
|
"user_token": 'k' + obj.kill_house_operator.user.user_gate_way_id,
|
|
"shares": shares,
|
|
"return_total_province_live_weight": finance_info['return_total_province_live_weight'],
|
|
"total_return_pure_province_carcasses_price": finance_info['total_return_pure_province_carcasses_price'],
|
|
|
|
}
|
|
|
|
|
|
class TotalWageInformationKillHouseExclusiveKillerSerializer(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['name', 'key', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
# kill_house_ids = KillHouseRequest.objects.filter(Q(killhouse_user=obj) | Q(killer=obj), archive_wage=False,
|
|
# trash=False
|
|
# ).values_list('killer', flat=True).distinct()
|
|
kill_house_ids = KillHousePercentage.objects.filter(
|
|
Q(kill_house=obj) | Q(kill_house_for_killer=obj, kill_house__type='exclusive'), trash=False).values_list(
|
|
'kill_house', flat=True)
|
|
kill_houses = KillHouse.objects.filter(id__in=kill_house_ids)
|
|
kill_house_srz = TotalWageInformationExclusiveKillerSerializer(kill_houses, many=True,
|
|
context={'kill_house': obj})
|
|
return kill_house_srz.data
|
|
|
|
|
|
class ProvinceRequestForKillHouseLetterSerialize(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
model = ProvinceKillRequest
|
|
fields = ['id', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
age = (datetime.datetime.now() - obj.province_request.poultry_request.hatching.date).days + 1
|
|
poultry = {
|
|
'poultry': obj.province_request.poultry_request.poultry.unit_name,
|
|
'poultry_mobile': obj.province_request.poultry_request.poultry.user.mobile,
|
|
'poultry_city': obj.province_request.poultry_request.poultry.address.city.name,
|
|
'quantity': obj.main_quantity,
|
|
'Index_weight': obj.province_request.poultry_request.Index_weight,
|
|
'chicken_age': age,
|
|
}
|
|
return poultry
|
|
|
|
|
|
class KillHouseLetterForProvinceSerializer(serializers.ModelSerializer):
|
|
province_kill_request = serializers.SerializerMethodField()
|
|
total_quantity = serializers.SerializerMethodField()
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'killer', 'name', 'kill_house_operator', 'province_kill_request', 'total_quantity']
|
|
|
|
def get_province_kill_request(self, obj):
|
|
date = self.context.get('date')
|
|
kill_requests = KillHouseRequest.objects.filter(
|
|
Q(killer=obj) | Q(killhouse_user=obj),
|
|
trash=False,
|
|
kill_request__recive_date__date=date
|
|
).select_related(
|
|
'province_request__poultry_request__poultry',
|
|
'province_request__poultry_request__hatching',
|
|
'province_request__poultry_request__poultry__address',
|
|
'add_car__driver'
|
|
)
|
|
|
|
total_quantity = kill_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get('total_quantity', 0)
|
|
self.total_quantity = total_quantity
|
|
|
|
poultries = [
|
|
{
|
|
'poultry': kill.province_request.poultry_request.poultry.unit_name,
|
|
'poultry_mobile': kill.province_request.poultry_request.poultry.user.mobile,
|
|
'poultry_city': kill.province_request.poultry_request.poultry.address.city.name,
|
|
'quantity': kill.accepted_real_quantity,
|
|
'Index_weight': kill.province_request.poultry_request.Index_weight,
|
|
'chicken_age': (datetime.datetime.now() - kill.province_request.poultry_request.hatching.date).days + 1,
|
|
'weight': kill.accepted_real_weight,
|
|
'car_type': kill.add_car.driver.type_car,
|
|
'driver_name': kill.add_car.driver.driver_name,
|
|
'traffic_code': kill.traffic_code,
|
|
'clearance_code': kill.clearance_code,
|
|
'pelak': kill.add_car.driver.pelak,
|
|
}
|
|
for kill in kill_requests
|
|
]
|
|
|
|
return poultries
|
|
|
|
def get_total_quantity(self, obj):
|
|
return getattr(self, 'total_quantity', 0)
|
|
|
|
|
|
class KillHousetestSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_province_kill_request')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'info']
|
|
|
|
def get_province_kill_request(self, obj):
|
|
total_weight = 0
|
|
total_wage = 0
|
|
total_paid_wage = 0
|
|
total_unpaid_wage = 0
|
|
union_total_weight = 0
|
|
union_total_wage = 0
|
|
union_total_paid_wage = 0
|
|
union_total_unpaid_wage = 0
|
|
union_province_kill_request_total_wage = 0
|
|
freezing_union_province_kill_request_total_wage = 0
|
|
union_kill_house_free_live_bar_total_wage = 0
|
|
union_kill_house_free_carcases_bar_total_wage = 0
|
|
union_chain_allocation_total_wage = 0
|
|
union_province_kill_request_total_weight = 0
|
|
freezing_union_province_kill_request_total_weight = 0
|
|
union_kill_house_free_live_bar_total_weight = 0
|
|
union_kill_house_free_carcases_bar_total_weight = 0
|
|
union_chain_allocation_total_weight = 0
|
|
|
|
company_total_weight = 0
|
|
company_total_wage = 0
|
|
company_total_paid_wage = 0
|
|
company_total_unpaid_wage = 0
|
|
company_province_kill_request_total_wage = 0
|
|
freezing_company_province_kill_request_total_wage = 0
|
|
company_kill_house_free_live_bar_total_wage = 0
|
|
company_kill_house_free_carcases_bar_total_wage = 0
|
|
company_chain_allocation_total_wage = 0
|
|
company_province_kill_request_total_weight = 0
|
|
freezing_company_province_kill_request_total_weight = 0
|
|
company_kill_house_free_live_bar_total_weight = 0
|
|
company_kill_house_free_carcases_bar_total_weight = 0
|
|
company_chain_allocation_total_weight = 0
|
|
|
|
guilds_total_weight = 0
|
|
guilds_total_wage = 0
|
|
guilds_total_paid_wage = 0
|
|
guilds_total_unpaid_wage = 0
|
|
guilds_province_kill_request_total_wage = 0
|
|
freezing_guilds_province_kill_request_total_wage = 0
|
|
guilds_kill_house_free_live_bar_total_wage = 0
|
|
guilds_kill_house_free_carcases_bar_total_wage = 0
|
|
guilds_chain_allocation_total_wage = 0
|
|
guilds_province_kill_request_total_weight = 0
|
|
freezing_guilds_province_kill_request_total_weight = 0
|
|
guilds_kill_house_free_live_bar_total_weight = 0
|
|
guilds_kill_house_free_carcases_bar_total_weight = 0
|
|
guilds_chain_allocation_total_weight = 0
|
|
province_kill_request_total_wage = 0
|
|
province_kill_request_total_weight = 0
|
|
freezing_province_kill_requests_total_wage = 0
|
|
freezing_province_kill_requests_total_weight = 0
|
|
chain_total_wage = 0
|
|
chain_total_weight = 0
|
|
free_bars_live_total_wage = 0
|
|
free_bars_live_total_weight = 0
|
|
free_bars_carcases_total_wage = 0
|
|
free_bars_carcases_total_weight = 0
|
|
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
|
state__in=('pending', 'accepted'), trash=False,
|
|
return_to_province=False,
|
|
first_car_allocated_quantity=0,
|
|
archive_wage=False,
|
|
).exclude(union_share=0, company_share=0,
|
|
guilds_share=0)
|
|
freezing_province_kill_requests = province_kill_requests.filter(
|
|
province_request__poultry_request__freezing=True)
|
|
|
|
kill_house_requests = KillHouseRequest.objects.filter(
|
|
Q(Q(killer=obj) & Q(killhouse_user=obj)) | Q(
|
|
Q(killer__isnull=True) & Q(killhouse_user=obj)) | Q(
|
|
Q(killer__isnull=True) | Q(killer=obj)),
|
|
# killhouse_user=kill_house,
|
|
archive_wage=False,
|
|
trash=False
|
|
)
|
|
|
|
kill_house_requests = kill_house_requests.filter(Q(killer=obj) | Q(killhouse_user=obj)).exclude(
|
|
province_kill_request__union_share=0, province_kill_request__company_share=0,
|
|
province_kill_request__guilds_share=0)
|
|
|
|
# kill_house_requests = KillHouseRequest.objects.filter(
|
|
# Q(Q(killhouse_user=obj) & Q(killer=obj)) | Q(
|
|
# Q(killhouse_user=obj) & Q(killer__isnull=True)) | Q(
|
|
# Q(killhouse_user=obj) | Q(killer=obj)), archive_wage=False,
|
|
# trash=False
|
|
# ).exclude(province_kill_request__union_share=0, province_kill_request__company_share=0,
|
|
# province_kill_request__guilds_share=0)
|
|
freezing_kill_house_requests = kill_house_requests.filter(
|
|
province_kill_request__province_request__poultry_request__freezing=True)
|
|
|
|
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=obj, archive_wage=False,
|
|
trash=False)
|
|
free_bars_live = free_bars.filter(buy_type='live', trash=False)
|
|
free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False)
|
|
province_kill_requests_total_wage = \
|
|
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('total_wage_amount'))[
|
|
'total'] or 0
|
|
freezing_province_kill_request_total_wage = \
|
|
freezing_province_kill_requests.aggregate(total=Sum('total_wage_amount'))['total'] or 0
|
|
|
|
total_wage += province_kill_requests_total_wage + freezing_province_kill_request_total_wage
|
|
province_kill_requests_total_weight = \
|
|
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
freezing_province_kill_request_total_weight = \
|
|
freezing_province_kill_requests.aggregate(total=Sum('total_killed_weight'))['total'] or 0
|
|
total_weight += province_kill_requests_total_weight + freezing_province_kill_request_total_weight
|
|
kill_house_reqest_total_wage = \
|
|
kill_house_requests.filter(
|
|
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
|
'total'] or 0
|
|
freezing_kill_house_reqest_total_wage = \
|
|
freezing_kill_house_requests.aggregate(
|
|
total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
|
'total'] or 0
|
|
total_wage += kill_house_reqest_total_wage + freezing_kill_house_reqest_total_wage
|
|
|
|
kill_house_reqest_total_weight = kill_house_requests.filter(
|
|
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
freezing_kill_house_reqest_total_weight = \
|
|
freezing_kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
|
|
total_weight += kill_house_reqest_total_weight + freezing_kill_house_reqest_total_weight
|
|
|
|
free_bars_live_total_wage = free_bars_live.aggregate(total=Sum('total_wage_amount'))[
|
|
'total'] or 0
|
|
total_wage += free_bars_live_total_wage
|
|
free_bars_live_total_weight = free_bars_live.aggregate(total=Sum('live_weight'))[
|
|
'total'] or 0
|
|
total_weight += free_bars_live_total_weight
|
|
free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum('total_wage_amount'))[
|
|
'total'] or 0
|
|
total_wage += free_bars_carcases_total_wage
|
|
free_bars_carcases_total_weight = free_bars_carcases.aggregate(total=Sum('weight_of_carcasses'))[
|
|
'total'] or 0
|
|
total_weight += free_bars_carcases_total_weight
|
|
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house=obj, status='completed',
|
|
trash=False)
|
|
|
|
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
|
|
union_province_kill_request_total_weight = \
|
|
province_kill_requests.filter(union_share__gt=0,
|
|
province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
freezing_union_province_kill_request_total_weight = \
|
|
freezing_province_kill_requests.filter(union_share__gt=0).aggregate(
|
|
total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
union_province_kill_request_total_weight += \
|
|
kill_house_requests.filter(province_kill_request__union_share__gt=0,
|
|
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
|
|
freezing_union_province_kill_request_total_weight += \
|
|
freezing_kill_house_requests.filter(province_kill_request__union_share__gt=0).aggregate(
|
|
total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
|
|
union_province_kill_request_total_wage = \
|
|
province_kill_requests.filter(union_share__gt=0,
|
|
province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('union_share'))[
|
|
'total'] or 0
|
|
union_province_kill_request_total_wage += \
|
|
kill_house_requests.filter(province_kill_request__union_share__gt=0,
|
|
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum(
|
|
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
F('province_kill_request__union_share_percent') / 100)))[
|
|
'total'] or 0
|
|
|
|
freezing_union_province_kill_request_total_wage = \
|
|
freezing_province_kill_requests.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
'total'] or 0
|
|
freezing_union_province_kill_request_total_wage += \
|
|
freezing_kill_house_requests.filter(province_kill_request__union_share__gt=0).aggregate(total=Sum(
|
|
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
F('province_kill_request__union_share_percent') / 100)))[
|
|
'total'] or 0
|
|
union_kill_house_free_live_bar_total_weight = \
|
|
free_bars.filter(buy_type='live', union_share__gt=0).aggregate(total=Sum('live_weight'))[
|
|
'total'] or 0
|
|
union_kill_house_free_live_bar_total_wage = \
|
|
free_bars.filter(buy_type='live', union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
'total'] or 0
|
|
|
|
union_kill_house_free_carcases_bar_total_weight = \
|
|
free_bars.filter(buy_type='carcass', union_share__gt=0).aggregate(total=Sum('weight_of_carcasses'))[
|
|
'total'] or 0
|
|
union_kill_house_free_carcases_bar_total_wage = \
|
|
free_bars.filter(buy_type='carcass', union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
'total'] or 0
|
|
union_total_paid_wage += \
|
|
slaughter_transactions.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
'total'] or 0
|
|
union_total_weight = union_province_kill_request_total_weight + freezing_union_province_kill_request_total_weight + union_chain_allocation_total_weight + union_kill_house_free_live_bar_total_weight + union_kill_house_free_carcases_bar_total_weight
|
|
union_total_wage = union_province_kill_request_total_wage + freezing_union_province_kill_request_total_wage + union_chain_allocation_total_wage + union_kill_house_free_live_bar_total_wage + union_kill_house_free_carcases_bar_total_wage
|
|
union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
|
|
|
company_province_kill_request_total_weight = \
|
|
province_kill_requests.filter(company_share__gt=0,
|
|
province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
company_province_kill_request_total_weight += \
|
|
kill_house_requests.filter(province_kill_request__company_share__gt=0,
|
|
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
freezing_company_province_kill_request_total_weight = \
|
|
freezing_province_kill_requests.filter(company_share__gt=0).aggregate(
|
|
total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
freezing_company_province_kill_request_total_weight += \
|
|
freezing_kill_house_requests.filter(province_kill_request__company_share__gt=0).aggregate(
|
|
total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
company_province_kill_request_total_wage = \
|
|
province_kill_requests.filter(company_share__gt=0,
|
|
province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('company_share'))[
|
|
'total'] or 0
|
|
company_province_kill_request_total_wage += \
|
|
kill_house_requests.filter(province_kill_request__company_share__gt=0,
|
|
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum(
|
|
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
F('province_kill_request__company_share_percent') / 100)))[
|
|
'total'] or 0
|
|
freezing_company_province_kill_request_total_wage = \
|
|
freezing_province_kill_requests.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
'total'] or 0
|
|
freezing_company_province_kill_request_total_wage += \
|
|
freezing_kill_house_requests.filter(province_kill_request__company_share__gt=0).aggregate(total=Sum(
|
|
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
F('province_kill_request__company_share_percent') / 100)))[
|
|
'total'] or 0
|
|
company_kill_house_free_live_bar_total_weight = \
|
|
free_bars.filter(buy_type='live', company_share__gt=0).aggregate(total=Sum('live_weight'))[
|
|
'total'] or 0
|
|
company_kill_house_free_live_bar_total_wage = \
|
|
free_bars.filter(buy_type='live', company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
'total'] or 0
|
|
|
|
company_kill_house_free_carcases_bar_total_weight = \
|
|
free_bars.filter(buy_type='carcass', company_share__gt=0).aggregate(
|
|
total=Sum('weight_of_carcasses'))[
|
|
'total'] or 0
|
|
company_kill_house_free_carcases_bar_total_wage = \
|
|
free_bars.filter(buy_type='carcass', company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
'total'] or 0
|
|
company_total_paid_wage += \
|
|
slaughter_transactions.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
'total'] or 0
|
|
company_total_weight = company_province_kill_request_total_weight + freezing_company_province_kill_request_total_weight + company_chain_allocation_total_weight + company_kill_house_free_live_bar_total_weight + company_kill_house_free_carcases_bar_total_weight
|
|
company_total_wage = company_province_kill_request_total_wage + freezing_company_province_kill_request_total_wage + company_chain_allocation_total_wage + company_kill_house_free_live_bar_total_wage + company_kill_house_free_carcases_bar_total_wage
|
|
company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
|
|
|
guilds_province_kill_request_total_weight = \
|
|
province_kill_requests.filter(guilds_share__gt=0,
|
|
province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
guilds_province_kill_request_total_weight += \
|
|
kill_house_requests.filter(province_kill_request__guilds_share__gt=0,
|
|
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
|
|
freezing_guilds_province_kill_request_total_weight = \
|
|
freezing_province_kill_requests.filter(guilds_share__gt=0).aggregate(
|
|
total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
freezing_guilds_province_kill_request_total_weight += \
|
|
freezing_kill_house_requests.filter(province_kill_request__guilds_share__gt=0).aggregate(
|
|
total=Sum('accepted_real_weight'))[
|
|
'total'] or 0
|
|
guilds_province_kill_request_total_wage = \
|
|
province_kill_requests.filter(guilds_share__gt=0,
|
|
province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum('guilds_share'))[
|
|
'total'] or 0
|
|
guilds_province_kill_request_total_wage += \
|
|
kill_house_requests.filter(province_kill_request__guilds_share__gt=0,
|
|
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
total=Sum(
|
|
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
F('province_kill_request__guilds_share_percent') / 100)))[
|
|
'total'] or 0
|
|
freezing_guilds_province_kill_request_total_wage = \
|
|
freezing_province_kill_requests.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
'total'] or 0
|
|
freezing_guilds_province_kill_request_total_wage += \
|
|
freezing_kill_house_requests.filter(province_kill_request__guilds_share__gt=0).aggregate(total=Sum(
|
|
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
F('province_kill_request__guilds_share_percent') / 100)))[
|
|
'total'] or 0
|
|
guilds_kill_house_free_live_bar_total_weight = \
|
|
free_bars.filter(buy_type='live', guilds_share__gt=0).aggregate(total=Sum('live_weight'))[
|
|
'total'] or 0
|
|
guilds_kill_house_free_live_bar_total_wage = \
|
|
free_bars.filter(buy_type='live', guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
'total'] or 0
|
|
|
|
guilds_kill_house_free_carcases_bar_total_weight = \
|
|
free_bars.filter(buy_type='carcass', guilds_share__gt=0).aggregate(
|
|
total=Sum('weight_of_carcasses'))[
|
|
'total'] or 0
|
|
guilds_kill_house_free_carcases_bar_total_wage = \
|
|
free_bars.filter(buy_type='carcass', guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
'total'] or 0
|
|
guilds_total_paid_wage += \
|
|
slaughter_transactions.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
'total'] or 0
|
|
|
|
guilds_total_weight = guilds_province_kill_request_total_weight + freezing_guilds_province_kill_request_total_weight + guilds_chain_allocation_total_weight + guilds_kill_house_free_live_bar_total_weight + guilds_kill_house_free_carcases_bar_total_weight
|
|
guilds_total_wage = guilds_province_kill_request_total_wage + freezing_guilds_province_kill_request_total_wage + guilds_chain_allocation_total_wage + guilds_kill_house_free_live_bar_total_wage + guilds_kill_house_free_carcases_bar_total_wage
|
|
guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
|
return {
|
|
"total_weight": total_weight,
|
|
"total_wage": total_wage,
|
|
"total_paid_wage": total_paid_wage,
|
|
"total_unpaid_wage": total_wage - total_paid_wage,
|
|
"province_kill_requests_total_wage": province_kill_requests_total_wage,
|
|
"province_kill_requests_total_weight": province_kill_requests_total_weight,
|
|
"freezing_province_kill_requests_total_wage": freezing_province_kill_requests_total_wage,
|
|
"freezing_province_kill_requests_total_weight": freezing_province_kill_requests_total_weight,
|
|
"free_bars_live_total_wage": free_bars_live_total_wage,
|
|
"free_bars_live_total_weight": free_bars_live_total_weight,
|
|
"free_bars_carcases_total_wage": free_bars_carcases_total_wage,
|
|
"free_bars_carcases_total_weight": free_bars_carcases_total_weight,
|
|
"shares": {
|
|
"union_total_weight": union_total_weight,
|
|
"union_total_wage": union_total_wage,
|
|
"union_total_paid_wage": union_total_paid_wage,
|
|
"union_total_unpaid_wage": union_total_unpaid_wage,
|
|
"union_province_kill_request_total_wage": union_province_kill_request_total_wage,
|
|
"union_kill_house_free_live_bar_total_wage": union_kill_house_free_live_bar_total_wage,
|
|
"union_kill_house_free_carcases_bar_total_wage": union_kill_house_free_carcases_bar_total_wage,
|
|
"union_chain_allocation_total_wage": union_chain_allocation_total_wage,
|
|
"union_province_kill_request_total_weight": union_province_kill_request_total_weight,
|
|
"union_kill_house_free_live_bar_total_weight": union_kill_house_free_live_bar_total_weight,
|
|
"union_kill_house_free_carcases_bar_total_weight": union_kill_house_free_carcases_bar_total_weight,
|
|
"union_chain_allocation_total_weight": union_chain_allocation_total_weight,
|
|
"freezing_union_province_kill_request_total_wage": freezing_union_province_kill_request_total_wage,
|
|
"freezing_union_province_kill_request_total_weight": freezing_union_province_kill_request_total_weight,
|
|
|
|
"company_total_weight": company_total_weight,
|
|
"company_total_wage": company_total_wage,
|
|
"company_total_paid_wage": company_total_paid_wage,
|
|
"company_total_unpaid_wage": company_total_unpaid_wage,
|
|
"company_province_kill_request_total_wage": company_province_kill_request_total_wage,
|
|
"company_kill_house_free_live_bar_total_wage": company_kill_house_free_live_bar_total_wage,
|
|
"company_kill_house_free_carcases_bar_total_wage": company_kill_house_free_carcases_bar_total_wage,
|
|
"company_chain_allocation_total_wage": company_chain_allocation_total_wage,
|
|
"company_province_kill_request_total_weight": company_province_kill_request_total_weight,
|
|
"company_kill_house_free_live_bar_total_weight": company_kill_house_free_live_bar_total_weight,
|
|
"company_kill_house_free_carcases_bar_total_weight": company_kill_house_free_carcases_bar_total_weight,
|
|
"company_chain_allocation_total_weight": company_chain_allocation_total_weight,
|
|
"freezing_company_province_kill_request_total_wage": freezing_company_province_kill_request_total_wage,
|
|
"freezing_company_province_kill_request_total_weight": freezing_company_province_kill_request_total_weight,
|
|
|
|
"guilds_total_weight": guilds_total_weight,
|
|
"guilds_total_wage": guilds_total_wage,
|
|
"guilds_total_paid_wage": guilds_total_paid_wage,
|
|
"guilds_total_unpaid_wage": guilds_total_unpaid_wage,
|
|
"guilds_province_kill_request_total_wage": guilds_province_kill_request_total_wage,
|
|
"guilds_kill_house_free_live_bar_total_wage": guilds_kill_house_free_live_bar_total_wage,
|
|
"guilds_kill_house_free_carcases_bar_total_wage": guilds_kill_house_free_carcases_bar_total_wage,
|
|
"guilds_chain_allocation_total_wage": guilds_chain_allocation_total_wage,
|
|
"guilds_province_kill_request_total_weight": guilds_province_kill_request_total_weight,
|
|
"guilds_kill_house_free_live_bar_total_weight": guilds_kill_house_free_live_bar_total_weight,
|
|
"guilds_kill_house_free_carcases_bar_total_weight": guilds_kill_house_free_carcases_bar_total_weight,
|
|
"guilds_chain_allocation_total_weight": guilds_chain_allocation_total_weight,
|
|
"freezing_guilds_province_kill_request_total_wage": freezing_guilds_province_kill_request_total_wage,
|
|
"freezing_guilds_province_kill_request_total_weight": freezing_guilds_province_kill_request_total_weight,
|
|
}
|
|
}
|
|
|
|
|
|
class VetKillHouseSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(read_only=True)
|
|
kill_houses = serializers.SerializerMethodField('get_kill_houses')
|
|
|
|
class Meta:
|
|
model = Vet
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
def get_kill_houses(self, instance):
|
|
kill_houses_list = []
|
|
kill_house_vets = KillHouseVet.objects.filter(vet=instance, trash=False).select_related(
|
|
'kill_house__kill_house_operator__user')
|
|
if kill_house_vets.count() > 0:
|
|
for kill_house_vet in kill_house_vets:
|
|
internal_dict = {
|
|
"Kill_house_key": kill_house_vet.kill_house.key,
|
|
"Kill_house_name": kill_house_vet.kill_house.name,
|
|
"Kill_house_user_full_name": kill_house_vet.kill_house.kill_house_operator.user.fullname,
|
|
"Kill_house_user_mobile": kill_house_vet.kill_house.kill_house_operator.user.mobile,
|
|
}
|
|
kill_houses_list.append(internal_dict)
|
|
|
|
return kill_houses_list
|
|
|
|
|
|
class VetFarmListSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(read_only=True)
|
|
farms = serializers.SerializerMethodField('get_farms')
|
|
|
|
class Meta:
|
|
model = Vet
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
def get_farms(self, instance):
|
|
farms_list = []
|
|
farms = VetFarm.objects.filter(vet=instance, trash=False).select_related('poultry', 'vet')
|
|
if farms.count() > 0:
|
|
for farm in farms:
|
|
internal_dict = {
|
|
"poultry_name": farm.poultry.unit_name,
|
|
"poultry_full_name": farm.poultry.user.fullname,
|
|
"poultry_mobile": farm.poultry.user.mobile,
|
|
"poultry_hall": farm.hall,
|
|
"vet_id": farm.vet.id,
|
|
"vet_farm_key": farm.key,
|
|
}
|
|
farms_list.append(internal_dict)
|
|
|
|
return farms_list
|
|
|
|
|
|
class KillHouseOperatorForBarDifferenceRequestSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseOperator
|
|
fields = ['user']
|
|
|
|
|
|
class KillHouseForBarDifferenceRequestSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForBarDifferenceRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['kill_house_operator', 'name', 'killer', 'key']
|
|
|
|
|
|
class BarDifferenceRequestSerializer(serializers.ModelSerializer):
|
|
hatching = PoultryHatchingForBarDifferenceRequestSerializer(read_only=True)
|
|
kill_house = KillHouseForBarDifferenceRequestSerializer(read_only=True)
|
|
bar_info = serializers.SerializerMethodField('get_bar_info')
|
|
|
|
class Meta:
|
|
model = BarDifferenceRequest
|
|
fields = '__all__'
|
|
|
|
def get_bar_info(self, obj):
|
|
total_quantity = 0
|
|
first_total_quantity = 0
|
|
difference_quantity = 0
|
|
total_weight = 0
|
|
Province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj.kill_house, trash=False,
|
|
state__in=('pending', 'accepted'),
|
|
return_to_province=False,
|
|
province_request__poultry_request__hatching=obj.hatching)
|
|
|
|
first_total_quantity = \
|
|
Province_kill_requests.aggregate(total=Sum('main_quantity'))[
|
|
'total'] or 0
|
|
|
|
total_quantity = \
|
|
Province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
|
'total'] or 0
|
|
total_weight = \
|
|
Province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
|
|
difference_quantity = first_total_quantity - total_quantity
|
|
# kill_house_requests = KillHouseRequest.objects.filter(Q(killhouse_user=obj.kill_house) | Q(killer=obj.kill_house),trash=False,
|
|
# province_request__poultry_request__hatching=obj.hatching)
|
|
#
|
|
#
|
|
# total_quantity +=\
|
|
# kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
|
# 'total'] or 0
|
|
# total_weight +=\
|
|
# kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
|
|
result = {
|
|
"first_total_quantity": first_total_quantity,
|
|
"total_quantity": total_quantity,
|
|
"difference_quantity": difference_quantity,
|
|
"total_weight": total_weight,
|
|
}
|
|
|
|
return result
|
|
|
|
|
|
class KillHouseOperatorForHatchingDetailSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForPoultryLocSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseOperator
|
|
fields = ['user', 'address']
|
|
|
|
|
|
class KillHouseForHatchingDetailSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForHatchingDetailSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['kill_house_operator', 'name']
|
|
|
|
|
|
class KillHouseRequestForHatchingDetailSerializer(serializers.ModelSerializer):
|
|
buyer = KillHouseForHatchingDetailSerializer(source='killhouse_user', read_only=True)
|
|
date = serializers.DateTimeField(source='kill_request.recive_date', read_only=True)
|
|
killer_info = KillHouseForHatchingDetailSerializer(source='killer', read_only=True)
|
|
product = serializers.CharField(default='مرغ گرم', read_only=True)
|
|
status = serializers.SerializerMethodField()
|
|
poultry_request = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = KillHouseRequest
|
|
fields = [
|
|
'bar_code', 'date', 'buyer', 'killer_info',
|
|
'product', 'clearance_code', 'accepted_real_quantity', 'accepted_real_weight', 'quarantine_quantity',
|
|
'status', 'ware_house_accepted_real_quantity', 'ware_house_accepted_real_weight', 'poultry_request'
|
|
]
|
|
read_only_fields = fields
|
|
|
|
def get_status(self, obj):
|
|
if obj.ware_house_confirmation == True:
|
|
status = 'ورود به انبار'
|
|
elif obj.assignment_state_archive == 'True' and obj.ware_house_confirmation == False:
|
|
status = 'در انتظار ورود به انبار'
|
|
elif obj.assignment_state_archive == 'True':
|
|
status = 'تخلیه شده'
|
|
else:
|
|
status = 'درانتظار تخلیه'
|
|
return status
|
|
|
|
def get_poultry_request(self, obj):
|
|
return PoultryRequestForBarMangementSerializer(obj.province_kill_request.province_request.poultry_request).data
|
|
|
|
|
|
class KillHouseForPerformanceDashboardSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForBarDifferenceRequestSerializer(read_only=True)
|
|
killing_info = serializers.SerializerMethodField('get_killing_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'kill_house_operator', 'killer', 'killing_info']
|
|
|
|
def get_killing_info(self, obj):
|
|
date1 = self.context.get('date1')
|
|
date2 = self.context.get('date2')
|
|
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, killhouse_user=obj,
|
|
state__in=('pending', 'accepted'),
|
|
return_to_province=False, archive_wage=False,
|
|
temporary_trash=False,
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
first_car_allocated_quantity=0)
|
|
kill_house_requests = KillHouseRequest.objects.filter(Q(killer=obj) | Q(killhouse_user=obj),
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
calculate_status=True, temporary_trash=False, trash=False)
|
|
kill_house_free_bar = KillHouseFreeBarInformation.objects.filter(kill_house=obj, calculate_status=True,
|
|
buy_type='live',
|
|
create_date__date__gte=date1,
|
|
create_date__date__lte=date2,
|
|
temporary_trash=False, trash=False)
|
|
|
|
province_kill_requests_aggregates = province_kill_requests.aggregate(
|
|
total_count=Count('id'),
|
|
total_weight=Sum('total_killed_weight'),
|
|
total_quantity=Sum('total_killed_quantity')
|
|
)
|
|
|
|
kill_house_requests_aggregates = kill_house_requests.aggregate(
|
|
total_count=Count('id'),
|
|
total_weight=Sum('accepted_real_weight'),
|
|
total_quantity=Sum('accepted_real_quantity')
|
|
)
|
|
kill_house_requests_ware_house_true = kill_house_requests.filter(ware_house_confirmation=True).aggregate(
|
|
total_count=Count('id'),
|
|
total_weight=Sum('accepted_real_weight'),
|
|
total_quantity=Sum('accepted_real_quantity')
|
|
)
|
|
kill_house_requests_ware_house_false = kill_house_requests.filter(ware_house_confirmation=False).aggregate(
|
|
total_count=Count('id'),
|
|
total_weight=Sum('accepted_real_weight'),
|
|
total_quantity=Sum('accepted_real_quantity')
|
|
)
|
|
|
|
kill_house_free_bar_aggregates = kill_house_free_bar.aggregate(
|
|
total_count=Count('id'),
|
|
total_weight=Sum('live_weight'),
|
|
total_quantity=Sum('quantity')
|
|
|
|
)
|
|
total_weight = (province_kill_requests_aggregates['total_weight'] or 0) + (
|
|
kill_house_requests_aggregates['total_weight'] or 0) + \
|
|
(kill_house_free_bar_aggregates['total_weight'] or 0)
|
|
total_quantity = (province_kill_requests_aggregates['total_quantity'] or 0) + \
|
|
(kill_house_requests_aggregates['total_quantity'] or 0) + \
|
|
(kill_house_free_bar_aggregates['total_quantity'] or 0)
|
|
total_avg_weight = round(total_weight / total_quantity, 1) if total_quantity > 0 else 0
|
|
return {
|
|
"province_kill_requests_count": province_kill_requests_aggregates['total_count'] or 0,
|
|
"province_kill_requests_quantity": province_kill_requests_aggregates['total_quantity'] or 0,
|
|
"province_kill_requests_weight": province_kill_requests_aggregates['total_weight'] or 0,
|
|
"kill_house_requests_count": kill_house_requests_aggregates['total_count'] or 0,
|
|
"kill_house_requests_quantity": kill_house_requests_aggregates['total_quantity'] or 0,
|
|
"kill_house_requests_weight": kill_house_requests_aggregates['total_weight'] or 0,
|
|
"kill_house_free_bar_count": kill_house_free_bar_aggregates['total_count'] or 0,
|
|
"kill_house_free_bar_quantity": kill_house_free_bar_aggregates['total_quantity'] or 0,
|
|
"kill_house_free_bar_weight": kill_house_free_bar_aggregates['total_weight'] or 0,
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
"total_avg_weight": total_avg_weight,
|
|
"total_count": province_kill_requests_aggregates['total_count'] or 0 + kill_house_requests_aggregates[
|
|
'total_count'] or 0 +
|
|
kill_house_free_bar_aggregates['total_count'] or 0,
|
|
"kill_house_requests_ware_house_true_quantity": kill_house_requests_ware_house_true['total_quantity'] or 0,
|
|
"kill_house_requests_ware_house_true_weight": kill_house_requests_ware_house_true['total_weight'] or 0,
|
|
"kill_house_requests_ware_house_false_quantity": kill_house_requests_ware_house_false[
|
|
'total_quantity'] or 0,
|
|
"kill_house_requests_ware_house_false_weight": kill_house_requests_ware_house_false['total_weight'] or 0,
|
|
|
|
}
|
|
|
|
|
|
class DirectBuyingPaymentSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = DirectBuyingPayment
|
|
fields = ['key', 'amount', 'image', 'date', 'payment_deadline_supporter_message']
|
|
|
|
|
|
class KillHouseForDirectBuyingSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['name', 'kill_house_operator']
|
|
|
|
|
|
class KillRequestForDirectBuyingTrueSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForDirectBuyingSerializer(read_only=True)
|
|
slaughter_house = KillHouseForDirectBuyingSerializer(read_only=True)
|
|
poultry = PoultryForPredictionSerializer(read_only=True)
|
|
poultry_request = PoultryRequestForMarketSerializer(read_only=True)
|
|
poultry_hatching = PoultryHatchingForLocSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillRequest
|
|
fields = ['key', 'create_date', 'recive_date', 'free_direct_buying', 'chicken_breed', 'kill_house',
|
|
'slaughter_house', 'poultry', 'poultry_request', 'payment_deadline_date', 'payment_deadline_days',
|
|
'kill_capacity', 'Index_weight', 'amount', 'market_final_accept', 'market_state', 'recive_time',
|
|
'market_code_status', 'market_code', 'input_market_code', 'direct_buying_state', 'free_direct_buying',
|
|
'poultry_hatching', 'automatic_accept', 'input_direct_buying_code']
|
|
|
|
|
|
class ReturnProvinceKillRequestSerializer(serializers.ModelSerializer):
|
|
killhouse_user = KillHouseForReturnBuyingSerializer(read_only=True)
|
|
poultry_unit_name = serializers.CharField(source='province_request.poultry_request.poultry.unit_name',
|
|
read_only=True)
|
|
poultry_fullname = serializers.CharField(source='province_request.poultry_request.poultry.user.fullname',
|
|
read_only=True)
|
|
poultry_mobile = serializers.CharField(source='province_request.poultry_request.poultry.user.mobile',
|
|
read_only=True)
|
|
poultry_city = serializers.CharField(source='province_request.poultry_request.poultry.user.city.name',
|
|
read_only=True)
|
|
killing_date = serializers.CharField(source='province_request.poultry_request.send_date', read_only=True)
|
|
order_code = serializers.CharField(source='province_request.poultry_request.order_code', read_only=True)
|
|
poultry_request_quantity = serializers.CharField(source='province_request.poultry_request.quantity', read_only=True)
|
|
poultry_amount = serializers.CharField(source='province_request.poultry_request.amount', read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceKillRequest
|
|
fields = '__all__'
|