2026-01-18 11:45:53 +03:30
import datetime
import jdatetime
import requests
import uuid
from django . db . models import Sum , Q , Case , When , F , FloatField
from django . http import HttpResponse
from rest_framework . response import Response
from deposit_id import wage_counting_type , province_id , out_selling_ignore , new_out_selling_count_wage , \
new_out_selling_count_wage_date , before_out_buying_count_wage_amount , market_code_state
from general_urls import base_url_for_sms_report
from panel . models import KillHouseRequest , KillHouseFreeBarInformation , ColdHouseAllocations , \
KillHouseFreeSaleBarInformation , StewardAllocation , ProvinceKillRequest , WageType , InternalTransaction , KillHouse , \
BarDifferenceRequest , PercentageOfWageType , RolesProducts , KillHouseWareHouse , KillRequest , \
ProvinceCheckOperatorRequest , PoultryRequest , KillHousePercentage , IndexWeightCategory , PosSegmentation , \
WarehouseArchive
from ticket . models import TicketSupport , MessageSupport
def kill_house_requests_product_warehousing ( product ) :
# kill_house_requests = KillHouseRequest.objects.filter(killhouse_user=product.kill_house,input_warehouse=product.kill_house,
# ware_house_confirmation=True, trash=False,
# calculate_status=True,warehouse=True)
kill_house_requests = KillHouseRequest . objects . filter ( input_warehouse = product . kill_house ,
ware_house_confirmation = True , trash = False ,
calculate_status = True , warehouse = True )
governmental_kill_house_requests = kill_house_requests . filter (
province_request__poultry_request__free_sale_in_province = False )
free_kill_house_requests = kill_house_requests . filter ( province_request__poultry_request__free_sale_in_province = True )
# Q(province_request__poultry_request__free_sale_in_province=True) | Q(
# province_request__poultry_request__direct_buying=True))
product . province_governmental_carcasses_quantity = \
governmental_kill_house_requests . aggregate ( total = Sum ( ' ware_house_accepted_real_quantity ' ) ) [ ' total ' ] or 0
product . province_governmental_carcasses_weight = \
governmental_kill_house_requests . aggregate ( total = Sum ( ' ware_house_accepted_real_weight ' ) ) [
' total ' ] or 0
product . province_free_carcasses_quantity = \
free_kill_house_requests . aggregate ( total = Sum ( ' ware_house_accepted_real_quantity ' ) ) [ ' total ' ] or 0
product . province_free_carcasses_weight = \
free_kill_house_requests . aggregate ( total = Sum ( ' ware_house_accepted_real_weight ' ) ) [
' total ' ] or 0
product . save ( )
governmental_commitment_weight = \
governmental_kill_house_requests . aggregate ( total = Sum ( ' warehouse_commitment_weight ' ) ) [
' total ' ] or 0
free_commitment_weight = \
free_kill_house_requests . aggregate ( total = Sum ( ' warehouse_commitment_weight ' ) ) [ ' total ' ] or 0
product . kill_house . total_in_province_governmental_bars_weight = product . province_governmental_carcasses_weight
product . kill_house . total_in_province_free_bars_weight = product . province_free_carcasses_weight
product . kill_house . total_in_province_governmental_bars_commitment_weight = governmental_commitment_weight
product . kill_house . total_in_province_free_bars_commitment_weight = free_commitment_weight
product . kill_house . save ( )
def kill_house_free_buying_product_warehousing ( product ) :
# kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(kill_house=product.kill_house, trash=False,
# calculate_status=True,warehouse=True,input_warehouse=product.kill_house) \
# .exclude(entered_message='ورود به انبار مجازی')
kill_house_free_buying_bars = KillHouseFreeBarInformation . objects . filter ( trash = False ,
calculate_status = True , warehouse = True ,
input_warehouse = product . kill_house ) \
. exclude ( entered_message = ' ورود به انبار مجازی ' )
product . free_buying_carcasses_quantity = \
kill_house_free_buying_bars . aggregate ( total = Sum ( ' number_of_carcasses ' ) ) [ ' total ' ] or 0
product . free_buying_carcasses_weight = \
kill_house_free_buying_bars . aggregate ( total = Sum ( ' weight_of_carcasses ' ) ) [
' total ' ] or 0
product . save ( )
free_commitment_weight = \
kill_house_free_buying_bars . aggregate ( total = Sum ( ' warehouse_commitment_weight ' ) ) [
' total ' ] or 0
product . kill_house . total_out_province_buying_bars_weight = product . free_buying_carcasses_weight
product . kill_house . total_out_province_buying_bars_commitment_weight = free_commitment_weight
product . kill_house . save ( )
def kill_house_archive_warehousing ( kill_house ) :
product = RolesProducts . objects . filter ( kill_house = kill_house , trash = False , name = ' مرغ گرم ' ) . first ( )
archives = WarehouseArchive . objects . filter ( kill_house = kill_house , trash = False , warehouse = True )
archives_info = archives . aggregate (
archives_weight = Sum ( ' weight ' ) ,
archives_governmental_weight = Sum ( ' weight ' ,
filter = Q ( quota = ' governmental ' ) ) ,
archives_free_weight = Sum ( ' weight ' ,
filter = Q ( quota = ' free ' ) ) ,
)
archives_weight = archives_info [ ' archives_weight ' ] or 0
archives_governmental_weight = archives_info [ ' archives_governmental_weight ' ] or 0
archives_free_weight = archives_info [ ' archives_free_weight ' ] or 0
product . ware_house_archive_weight = archives_weight
product . save ( )
kill_house . ware_house_archive_governmental_weight = archives_governmental_weight
kill_house . ware_house_archive_free_weight = archives_free_weight
kill_house . save ( )
def kill_house_cold_house_allocations_product_warehousing ( product ) :
cold_house_allocations = ColdHouseAllocations . objects . filter ( kill_house = product . kill_house ,
state__in = ( ' pending ' , ' accepted ' ) ,
trash = False )
product . freezing_quantity = cold_house_allocations . aggregate ( total = Sum ( ' real_quantity ' ) ) [
' total ' ] or 0
product . freezing_weight = cold_house_allocations . aggregate ( total = Sum ( ' real_weight ' ) ) [
' total ' ] or 0
product . save ( )
def kill_house_cold_house_allocations ( cold_house ) :
cold_house_allocations = StewardAllocation . objects . filter ( kill_house = cold_house . kill_house ,
to_cold_house = cold_house , receiver_state = ' accepted ' ,
trash = False , warehouse = True )
cold_house . total_input_weight = cold_house_allocations . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
cold_house . save ( )
cold_house . kill_house . total_cold_house_governmental_weight = \
cold_house_allocations . filter ( quota = ' governmental ' ) . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
cold_house . kill_house . total_cold_house_free_weight = \
cold_house_allocations . filter ( quota = ' free ' ) . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
cold_house . kill_house . save ( )
def cold_house_warehousing ( cold_house ) :
cold_house_allocations = StewardAllocation . objects . filter (
Q ( to_cold_house = cold_house ) | Q ( other_cold_house = cold_house ) , receiver_state__in = ( ' accepted ' , ' pending ' ) ,
trash = False , warehouse = True )
input_allocations = cold_house_allocations . filter (
Q ( kill_house__isnull = False , to_cold_house = cold_house ) | Q (
kill_house__isnull = True , other_cold_house = cold_house ) ,
receiver_state = ' accepted ' )
output_allocations = cold_house_allocations . filter (
Q ( to_steward__isnull = False ) | Q ( to_guilds__isnull = False ) | Q ( other_cold_house__isnull = False ) ,
kill_house__isnull = True , to_cold_house = cold_house )
cold_house . total_input_weight = input_allocations . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
cold_house . total_allocated_weight = output_allocations . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
cold_house . save ( )
cold_house . kill_house . total_cold_house_governmental_weight = \
output_allocations . filter ( quota = ' governmental ' ) . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
cold_house . kill_house . total_cold_house_free_weight = \
output_allocations . filter ( quota = ' free ' ) . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
cold_house . kill_house . save ( )
def kill_house_allocations_product_warehousing ( product ) :
kill_house_allocations = StewardAllocation . objects . filter (
Q ( kill_house = product . kill_house ) | Q ( to_kill_house = product . kill_house ) , trash = False , calculate_status = True ,
warehouse = True )
kill_house_allocated = kill_house_allocations . filter ( kill_house__isnull = False , to_cold_house__isnull = True )
kill_house_governmental_allocated = kill_house_allocations . filter ( kill_house__isnull = False ,
to_cold_house__isnull = True , quota = ' governmental ' )
kill_house_free_allocated = kill_house_allocations . filter ( kill_house__isnull = False , to_cold_house__isnull = True ,
quota = ' free ' )
kill_house_allocated_from = kill_house_allocations . filter ( kill_house__isnull = True , to_cold_house__isnull = True )
governmental_kill_house_allocated_from = kill_house_allocated_from . filter ( approved_price_status = True )
free_kill_house_allocated_from = kill_house_allocated_from . filter ( approved_price_status = False )
cold_house_allocations = kill_house_allocations . filter ( to_cold_house__isnull = False ,
receiver_state__in = ( ' pending ' , ' accepted ' ) )
product . province_allocated_quantity = \
kill_house_allocated . filter ( receiver_state__in = ( ' pending ' , ' accepted ' ) ) . aggregate (
total = Sum ( ' real_number_of_carcasses ' ) ) [
' total ' ] or 0
product . province_allocated_weight = \
kill_house_allocated . filter ( receiver_state__in = ( ' pending ' , ' accepted ' ) ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
product . province_governmental_allocated_weight = \
kill_house_governmental_allocated . filter ( receiver_state__in = ( ' pending ' , ' accepted ' ) ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
product . province_free_allocated_weight = \
kill_house_free_allocated . filter ( receiver_state__in = ( ' pending ' , ' accepted ' ) ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
product . receive_governmental_carcasses_quantity = \
governmental_kill_house_allocated_from . filter ( receiver_state = ' accepted ' ) . aggregate (
total = Sum ( ' receiver_real_number_of_carcasses ' ) ) [
' total ' ] or 0
product . receive_governmental_carcasses_weight = \
governmental_kill_house_allocated_from . filter ( receiver_state = ' accepted ' ) . aggregate (
total = Sum ( ' receiver_real_weight_of_carcasses ' ) ) [
' total ' ] or 0
product . receive_free_carcasses_quantity = \
free_kill_house_allocated_from . filter ( receiver_state = ' accepted ' ) . aggregate (
total = Sum ( ' receiver_real_number_of_carcasses ' ) ) [
' total ' ] or 0
product . receive_free_carcasses_weight = \
free_kill_house_allocated_from . filter ( receiver_state = ' accepted ' ) . aggregate (
total = Sum ( ' receiver_real_weight_of_carcasses ' ) ) [
' total ' ] or 0
product . cold_house_allocated_weight = cold_house_allocations . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
product . save ( )
product . kill_house . total_selling_in_province_governmental_weight = product . province_governmental_allocated_weight
product . kill_house . total_selling_in_province_free_weight = product . province_free_allocated_weight
product . kill_house . save ( )
def kill_house_free_sale_product_warehousing ( product ) :
kill_house_free_sale_bars = KillHouseFreeSaleBarInformation . objects . filter ( kill_house = product . kill_house ,
trash = False , calculate_status = True ,
warehouse = True )
product . out_province_allocated_quantity = \
kill_house_free_sale_bars . aggregate ( total = Sum ( ' real_number_of_carcasses ' ) ) [
' total ' ] or 0
product . out_province_allocated_weight = kill_house_free_sale_bars . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
# return ({"len(1)":product.out_province_allocated_quantity,"2":product.out_province_allocated_weight})
product . save ( )
product . kill_house . total_selling_out_province_governmental_weight = \
kill_house_free_sale_bars . filter ( quota = ' governmental ' ) . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
product . kill_house . total_selling_out_province_free_weight = \
kill_house_free_sale_bars . filter ( quota = ' free ' ) . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
product . kill_house . save ( )
def get_new_wage_for_free_buying ( kill_house_free_sale_bar_info ) :
final_date = ' 2025-05-28 '
after_total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__gt = new_out_selling_count_wage_date ,
quarantine_weight_of_carcasses = 0 ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [ ' total ' ] or 0
after_new_total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__gt = new_out_selling_count_wage_date ,
quarantine_weight_of_carcasses__gt = 0 ) . aggregate (
total_weight = Sum (
Case (
When ( real_weight_of_carcasses__lt = F ( ' quarantine_weight_of_carcasses ' ) ,
then = F ( ' real_weight_of_carcasses ' ) ) ,
default = F ( ' quarantine_weight_of_carcasses ' ) ,
output_field = FloatField ( )
)
)
)
# before_total_out_selling_province_carcasses_weight = \
# kill_house_free_sale_bar_info.filter(date__date__lte=final_date).filter(date__date__lte=new_out_selling_count_wage_date,
# quarantine_weight_of_carcasses=0).aggregate(
# total=Sum('real_weight_of_carcasses'))['total'] or 0
before_total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__lte = final_date ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [ ' total ' ] or 0
# before_new_total_out_selling_province_carcasses_weight = \
# kill_house_free_sale_bar_info.filter(date__date__gt=final_date).filter(date__date__lte=new_out_selling_count_wage_date,
# quarantine_weight_of_carcasses__gt=0).aggregate(
# total_weight=Sum(
# Case(
# When(real_weight_of_carcasses__lt=F('quarantine_weight_of_carcasses'),
# then=F('real_weight_of_carcasses')),
# default=F('quarantine_weight_of_carcasses'),
# output_field=FloatField()
# )
# )
# )
before_new_total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__gte = final_date , date__date__lt = new_out_selling_count_wage_date ,
quarantine_weight_of_carcasses__gt = 0 ) . aggregate (
total_weight = Sum (
Case (
When ( real_weight_of_carcasses__lt = F ( ' quarantine_weight_of_carcasses ' ) ,
then = F ( ' real_weight_of_carcasses ' ) ) ,
default = F ( ' quarantine_weight_of_carcasses ' ) ,
output_field = FloatField ( )
)
)
)
before_new_out_selling = before_new_total_out_selling_province_carcasses_weight [ ' total_weight ' ] or 0
before_total_out_selling_province_carcasses_weight + = before_new_out_selling
after_new_out_selling = after_new_total_out_selling_province_carcasses_weight [ ' total_weight ' ] or 0
after_total_out_selling_province_carcasses_weight + = after_new_out_selling
return {
" before_new_out_selling " : before_new_out_selling ,
" before_total_out_selling_province_carcasses_weight " : before_total_out_selling_province_carcasses_weight ,
" after_new_out_selling " : after_new_out_selling ,
" after_total_out_selling_province_carcasses_weight " : after_total_out_selling_province_carcasses_weight ,
}
2026-01-24 22:17:42 +03:30
# def get_finance_info(kill_house, date1=None, date2=None):
# before_total_out_live_buying_province_carcasses_weight = 0
# after_total_out_live_buying_province_carcasses_weight = 0
# before_new_out_selling = 0
# after_new_out_selling = 0
# extra_company_amount = 0
# total_wage_type = WageType.objects.filter(trash=False)
# province_live_wage_type = total_wage_type.filter(en_name='province-kill-request', trash=False).first()
# free_buying_live_weight_wage_type = total_wage_type.filter(en_name='live-buy', trash=False).first()
# free_buying_carcesses_weight_wage_type = total_wage_type.filter(en_name='carcasse-buy', trash=False).first()
# free_sell_carcesses_weight_wage_type = total_wage_type.filter(en_name='carcasse-sell', trash=False).first()
# province_live_wage_type_amount = province_live_wage_type.amount if province_live_wage_type.status == True else 0
# 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
# free_buying_carcesses_weight_wage_type_amount = free_buying_carcesses_weight_wage_type.amount if free_buying_carcesses_weight_wage_type.status == True else 0
# free_sell_carcesses_weight_wage_type_amount = free_sell_carcesses_weight_wage_type.amount if free_sell_carcesses_weight_wage_type.status == True else 0
#
# if date1:
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house, trash=False,
# archive_wage=False, return_to_province=False,
# kill_request__recive_date__date__gte=date1,
# kill_request__recive_date__date__lte=date2,
# state__in=('pending', 'accepted'),
# first_car_allocated_quantity=0).order_by('id')
#
# return_province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house, trash=True,
# return_trash=True,
# archive_wage=False, return_to_province=False,
# kill_request__recive_date__date__gte=date1,
# kill_request__recive_date__date__lte=date2,
# state__in=('pending', 'accepted'),
# first_car_allocated_quantity=0).order_by(
# 'id')
# kill_house_requests = KillHouseRequest.objects.filter(
# Q(Q(killhouse_user=kill_house) & Q(killer=kill_house)) | Q(
# Q(killhouse_user=kill_house) & Q(killer__isnull=True)) | Q(
# Q(killhouse_user=kill_house) | Q(killer=kill_house)), archive_wage=False,
# kill_request__recive_date__date__gte=date1, kill_request__recive_date__date__lte=date2,
# trash=False, calculate_status=True
# )
#
# return_kill_house_requests = KillHouseRequest.objects.filter(
# Q(Q(killhouse_user=kill_house) & Q(killer=kill_house)) | Q(
# Q(killhouse_user=kill_house) & Q(killer__isnull=True)) | Q(
# Q(killhouse_user=kill_house) | Q(killer=kill_house)), archive_wage=False,
# kill_request__recive_date__date__gte=date1, kill_request__recive_date__date__lte=date2,
# trash=True, return_trash=True, calculate_status=True
# )
# kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(
# Q(kill_house=kill_house) | Q(exclusive_killer=kill_house),
# archive_wage=False,
# calculate_status=True, date__date__gte=date1, date__date__lte=date2,
# trash=False)
# kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
# kill_house=kill_house,
# archive_wage=False,
# calculate_status=True, date__date__gte=date1, date__date__lte=date2,
# trash=False)
# slaughter_transactions = InternalTransaction.objects.filter(
# kill_house=kill_house, status='completed', date__date__gte=date1, date__date__lte=date2,
# trash=False)
# difference_requests = BarDifferenceRequest.objects.filter(kill_house=kill_house, trash=False, state='accepted',
# create_date__date__gte=date1,
# create_date__date__lte=date2)
# else:
#
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house, trash=False,
# archive_wage=False, return_to_province=False,
# state__in=('pending', 'accepted'),
# first_car_allocated_quantity=0).order_by('id')
#
# return_province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house, trash=True,
# return_trash=True,
# archive_wage=False, return_to_province=False,
# state__in=('pending', 'accepted'),
# first_car_allocated_quantity=0).order_by(
# 'id')
# kill_house_requests = KillHouseRequest.objects.filter(
# Q(Q(killhouse_user=kill_house) & Q(killer=kill_house)) | Q(
# Q(killhouse_user=kill_house) & Q(killer__isnull=True)) | Q(
# Q(killhouse_user=kill_house) | Q(killer=kill_house)), archive_wage=False,
# trash=False, calculate_status=True
# )
# return_kill_house_requests = KillHouseRequest.objects.filter(
# Q(Q(killhouse_user=kill_house) & Q(killer=kill_house)) | Q(
# Q(killhouse_user=kill_house) & Q(killer__isnull=True)) | Q(
# Q(killhouse_user=kill_house) | Q(killer=kill_house)), archive_wage=False,
# trash=True, return_trash=True, calculate_status=True
# )
# kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(
# Q(kill_house=kill_house) | Q(exclusive_killer=kill_house),
# archive_wage=False,
# calculate_status=True,
# trash=False)
# kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
# kill_house=kill_house,
# archive_wage=False,
# calculate_status=True,
# trash=False)
# slaughter_transactions = InternalTransaction.objects.filter(
# kill_house=kill_house, status='completed',
# trash=False)
# difference_requests = BarDifferenceRequest.objects.filter(kill_house=kill_house, trash=False, state='accepted')
#
# total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
# 'total'] or 0
# total_province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))['total'] or 0
# total_province_live_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
# total_province_live_weight += \
# difference_requests.aggregate(total=Sum('weight'))['total'] or 0
# difference_requests_weight = \
# difference_requests.aggregate(total=Sum('weight'))['total'] or 0
# return_total_province_live_weight = return_province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
# 'total'] or 0
# return_total_province_live_weight += return_kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
# 'total'] or 0
#
# final_date = '2025-05-28'
# total_out_selling_province_carcasses_weight = \
# kill_house_free_sale_bar_info.filter(date__date__lte=final_date).aggregate(
# total=Sum('real_weight_of_carcasses'))['total'] or 0
# new_total_out_selling_province_carcasses_weight = \
# kill_house_free_sale_bar_info.filter(date__date__gt=final_date,
# quarantine_weight_of_carcasses__gt=0).aggregate(
# total_weight=Sum(
# Case(
# When(real_weight_of_carcasses__lt=F('quarantine_weight_of_carcasses'),
# then=F('real_weight_of_carcasses')),
# default=F('quarantine_weight_of_carcasses'),
# output_field=FloatField()
# )
# )
# )
# new_out_selling = new_total_out_selling_province_carcasses_weight['total_weight'] or 0
#
# total_out_selling_province_carcasses_weight += new_out_selling
#
# if wage_counting_type == 'live':
# total_province_carcasses_weight = total_province_live_weight
# total_pure_province_carcasses_weight = total_province_carcasses_weight
# else:
# return_total_province_live_weight = int(return_total_province_live_weight * 0.75)
# total_province_carcasses_weight = total_province_live_weight * 0.75
# difference_requests_weight = difference_requests_weight * 0.75
# total_out_carcasses_buying_for_pure_province_carcasses_weight = \
# kill_house_free_bar_info.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0
# out_selling_out_carcasses_buying_difference = total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight if (
# total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight) > 0 else 0
# total_pure_province_carcasses_weight = total_province_carcasses_weight - out_selling_out_carcasses_buying_difference
# total_out_live_buying_province_carcasses_weight = \
# kill_house_free_bar_info.filter(buy_type='live').aggregate(total=Sum('live_weight'))['total'] or 0
# real_total_out_live_buying_province_carcasses_weight = total_out_live_buying_province_carcasses_weight
# if new_out_selling_count_wage:
# if out_selling_ignore:
# before_total_out_live_buying_province_carcasses_weight = \
# kill_house_free_bar_info.filter(create_date__date__lt=new_out_selling_count_wage_date,
# buy_type='live').aggregate(total=Sum('live_weight'))['total'] or 0
# after_total_out_live_buying_province_carcasses_weight = \
# kill_house_free_bar_info.filter(create_date__date__gte=new_out_selling_count_wage_date,
# buy_type='live').aggregate(total=Sum('live_weight'))['total'] or 0
# get_new_wage = get_new_wage_for_free_buying(kill_house_free_sale_bar_info)
#
# before_new_out_selling = get_new_wage['before_new_out_selling']
# after_new_out_selling = get_new_wage['after_new_out_selling']
# max_amount = before_total_out_live_buying_province_carcasses_weight * 0.80
# if max_amount <= before_new_out_selling:
# before_total_out_live_buying_province_carcasses_weight -= max_amount
# else:
# before_total_out_live_buying_province_carcasses_weight -= before_new_out_selling
#
# if after_total_out_live_buying_province_carcasses_weight > after_new_out_selling:
# extra_company_amount = int(after_new_out_selling * extra_company_amount)
# after_total_out_live_buying_province_carcasses_weight -= after_new_out_selling
#
# else:
# extra_company_amount = int(after_total_out_live_buying_province_carcasses_weight * extra_company_amount)
#
# after_total_out_live_buying_province_carcasses_weight = 0
#
# total_out_live_buying_province_carcasses_weight = before_total_out_live_buying_province_carcasses_weight + after_total_out_live_buying_province_carcasses_weight
#
# else:
# if out_selling_ignore:
# max_amount = total_out_live_buying_province_carcasses_weight * 0.80
# if max_amount <= new_out_selling:
# total_out_live_buying_province_carcasses_weight -= max_amount
# else:
# total_out_live_buying_province_carcasses_weight -= new_out_selling
#
# # else:
# # total_out_live_buying_province_carcasses_weight -= total_out_selling_province_quarantine_carcasses_weight
# total_out_carcasses_buying_province_carcasses_weight = \
# kill_house_free_bar_info.filter(buy_type='carcass').aggregate(total=Sum('weight_of_carcasses'))['total'] or 0
#
# total_pure_province_carcasses_price = total_pure_province_carcasses_weight * province_live_wage_type_amount
# difference_requests_price = difference_requests_weight * province_live_wage_type_amount
# total_return_pure_province_carcasses_price = return_total_province_live_weight * province_live_wage_type_amount
# total_out_selling_province_carcasses_price = total_out_selling_province_carcasses_weight * free_sell_carcesses_weight_wage_type_amount
# if new_out_selling_count_wage:
# total_out_live_buying_province_carcasses_price = int(
# (before_total_out_live_buying_province_carcasses_weight * before_out_buying_count_wage_amount) + (
# after_total_out_live_buying_province_carcasses_weight * free_buying_live_weight_wage_type_amount))
# else:
# total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_wage_type_amount
#
# total_out_carcasses_buying_province_carcasses_price = total_out_carcasses_buying_province_carcasses_weight * free_buying_carcesses_weight_wage_type_amount
# total_price = total_pure_province_carcasses_price + total_out_selling_province_carcasses_price + total_out_live_buying_province_carcasses_price + total_out_carcasses_buying_province_carcasses_price + extra_company_amount + total_return_pure_province_carcasses_price
#
# return {
# "total_province_live_weight": total_province_live_weight,
# "total_province_carcasses_weight": total_province_carcasses_weight,
# "total_out_selling_province_carcasses_weight": total_out_selling_province_carcasses_weight,
# "total_pure_province_carcasses_weight": total_pure_province_carcasses_weight,
# "total_pure_province_carcasses_price": total_pure_province_carcasses_price,
# "total_out_selling_province_carcasses_price": total_out_selling_province_carcasses_price,
# "total_out_carcasses_buying_province_carcasses_weight": total_out_carcasses_buying_province_carcasses_weight,
# "total_out_carcasses_buying_province_carcasses_price": total_out_carcasses_buying_province_carcasses_price,
# "total_out_live_buying_province_carcasses_weight": real_total_out_live_buying_province_carcasses_weight,
# "total_out_live_buying_province_carcasses_price": total_out_live_buying_province_carcasses_price,
# "total_paid_wage": total_paid_wage,
# "total_price": total_price,
# "province_live_wage_amount": province_live_wage_type_amount,
# "free_buying_live_weight_amount": free_buying_live_weight_wage_type_amount,
# "free_buying_carcesses_weight_amount": free_buying_carcesses_weight_wage_type_amount,
# "free_sell_carcesses_weight_amount": free_sell_carcesses_weight_wage_type_amount,
# "extra_company_amount": extra_company_amount,
# "before_total_out_live_buying_province_carcasses_weight": before_total_out_live_buying_province_carcasses_weight,
# "after_total_out_live_buying_province_carcasses_weight": after_total_out_live_buying_province_carcasses_weight,
# "before_new_out_selling": before_new_out_selling,
# "after_new_out_selling": after_new_out_selling,
# "return_total_province_live_weight": return_total_province_live_weight,
# "total_return_pure_province_carcasses_price": total_return_pure_province_carcasses_price,
# "difference_requests_weight": difference_requests_weight,
# "difference_requests_price": difference_requests_price,
#
# }
2026-01-18 11:45:53 +03:30
def get_finance_info ( kill_house , date1 = None , date2 = None ) :
before_total_out_live_buying_province_carcasses_weight = 0
after_total_out_live_buying_province_carcasses_weight = 0
before_new_out_selling = 0
after_new_out_selling = 0
extra_company_amount = 0
total_wage_type = WageType . objects . filter ( trash = False )
province_live_wage_type = total_wage_type . filter ( en_name = ' province-kill-request ' , trash = False ) . first ( )
free_buying_live_weight_wage_type = total_wage_type . filter ( en_name = ' live-buy ' , trash = False ) . first ( )
free_buying_carcesses_weight_wage_type = total_wage_type . filter ( en_name = ' carcasse-buy ' , trash = False ) . first ( )
free_sell_carcesses_weight_wage_type = total_wage_type . filter ( en_name = ' carcasse-sell ' , trash = False ) . first ( )
province_live_wage_type_amount = province_live_wage_type . amount if province_live_wage_type . status == True else 0
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
free_buying_carcesses_weight_wage_type_amount = free_buying_carcesses_weight_wage_type . amount if free_buying_carcesses_weight_wage_type . status == True else 0
free_sell_carcesses_weight_wage_type_amount = free_sell_carcesses_weight_wage_type . amount if free_sell_carcesses_weight_wage_type . status == True else 0
if date1 :
province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user = kill_house , trash = False ,
archive_wage = False , return_to_province = False ,
kill_request__recive_date__date__gte = date1 ,
kill_request__recive_date__date__lte = date2 ,
state__in = ( ' pending ' , ' accepted ' ) ,
first_car_allocated_quantity = 0 ) . order_by ( ' id ' )
return_province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user = kill_house , trash = True ,
return_trash = True ,
archive_wage = False , return_to_province = False ,
kill_request__recive_date__date__gte = date1 ,
kill_request__recive_date__date__lte = date2 ,
state__in = ( ' pending ' , ' accepted ' ) ,
first_car_allocated_quantity = 0 ) . order_by (
' id ' )
2026-01-24 22:17:42 +03:30
if kill_house . killer and kill_house . type == ' public ' :
kill_house_requests = KillHouseRequest . objects . filter (
killhouse_user = kill_house , archive_wage = False ,
kill_request__recive_date__date__gte = date1 , kill_request__recive_date__date__lte = date2 ,
trash = False , calculate_status = True
)
2026-01-18 11:45:53 +03:30
2026-01-24 22:17:42 +03:30
return_kill_house_requests = KillHouseRequest . objects . filter (
killhouse_user = kill_house , archive_wage = False ,
kill_request__recive_date__date__gte = date1 , kill_request__recive_date__date__lte = date2 ,
trash = True , return_trash = True , calculate_status = True
)
else :
kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user = kill_house ) & Q ( killer = kill_house ) ) | Q (
Q ( killhouse_user = kill_house ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user = kill_house ) | Q ( killer = kill_house ) ) , archive_wage = False ,
kill_request__recive_date__date__gte = date1 , kill_request__recive_date__date__lte = date2 ,
trash = False , calculate_status = True
)
return_kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user = kill_house ) & Q ( killer = kill_house ) ) | Q (
Q ( killhouse_user = kill_house ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user = kill_house ) | Q ( killer = kill_house ) ) , archive_wage = False ,
kill_request__recive_date__date__gte = date1 , kill_request__recive_date__date__lte = date2 ,
trash = True , return_trash = True , calculate_status = True
)
2026-01-18 11:45:53 +03:30
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter (
Q ( kill_house = kill_house ) | Q ( exclusive_killer = kill_house ) ,
archive_wage = False ,
calculate_status = True , date__date__gte = date1 , date__date__lte = date2 ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True , date__date__gte = date1 , date__date__lte = date2 ,
trash = False )
slaughter_transactions = InternalTransaction . objects . filter (
kill_house = kill_house , status = ' completed ' , date__date__gte = date1 , date__date__lte = date2 ,
trash = False )
difference_requests = BarDifferenceRequest . objects . filter ( kill_house = kill_house , trash = False , state = ' accepted ' ,
create_date__date__gte = date1 ,
create_date__date__lte = date2 )
else :
province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user = kill_house , trash = False ,
archive_wage = False , return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
first_car_allocated_quantity = 0 ) . order_by ( ' id ' )
return_province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user = kill_house , trash = True ,
return_trash = True ,
archive_wage = False , return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
first_car_allocated_quantity = 0 ) . order_by (
' id ' )
2026-01-24 22:17:42 +03:30
if kill_house . killer and kill_house . type == ' public ' :
kill_house_requests = KillHouseRequest . objects . filter (
killhouse_user = kill_house , archive_wage = False ,
trash = False , calculate_status = True
)
return_kill_house_requests = KillHouseRequest . objects . filter (
killhouse_user = kill_house , archive_wage = False ,
trash = True , return_trash = True , calculate_status = True
)
else :
kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user = kill_house ) & Q ( killer = kill_house ) ) | Q (
Q ( killhouse_user = kill_house ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user = kill_house ) | Q ( killer = kill_house ) ) , archive_wage = False ,
trash = False , calculate_status = True
)
return_kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user = kill_house ) & Q ( killer = kill_house ) ) | Q (
Q ( killhouse_user = kill_house ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user = kill_house ) | Q ( killer = kill_house ) ) , archive_wage = False ,
trash = True , return_trash = True , calculate_status = True
)
2026-01-18 11:45:53 +03:30
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter (
Q ( kill_house = kill_house ) | Q ( exclusive_killer = kill_house ) ,
archive_wage = False ,
calculate_status = True ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False )
slaughter_transactions = InternalTransaction . objects . filter (
kill_house = kill_house , status = ' completed ' ,
trash = False )
difference_requests = BarDifferenceRequest . objects . filter ( kill_house = kill_house , trash = False , state = ' accepted ' )
total_paid_wage = slaughter_transactions . aggregate ( total = Sum ( ' amount ' ) ) [
' total ' ] or 0
total_province_live_weight = province_kill_requests . aggregate ( total = Sum ( ' total_killed_weight ' ) ) [ ' total ' ] or 0
total_province_live_weight + = kill_house_requests . aggregate ( total = Sum ( ' accepted_real_weight ' ) ) [ ' total ' ] or 0
total_province_live_weight + = \
difference_requests . aggregate ( total = Sum ( ' weight ' ) ) [ ' total ' ] or 0
difference_requests_weight = \
difference_requests . aggregate ( total = Sum ( ' weight ' ) ) [ ' total ' ] or 0
return_total_province_live_weight = return_province_kill_requests . aggregate ( total = Sum ( ' total_killed_weight ' ) ) [
' total ' ] or 0
return_total_province_live_weight + = return_kill_house_requests . aggregate ( total = Sum ( ' accepted_real_weight ' ) ) [
' total ' ] or 0
final_date = ' 2025-05-28 '
total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__lte = final_date ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [ ' total ' ] or 0
new_total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__gt = final_date ,
quarantine_weight_of_carcasses__gt = 0 ) . aggregate (
total_weight = Sum (
Case (
When ( real_weight_of_carcasses__lt = F ( ' quarantine_weight_of_carcasses ' ) ,
then = F ( ' real_weight_of_carcasses ' ) ) ,
default = F ( ' quarantine_weight_of_carcasses ' ) ,
output_field = FloatField ( )
)
)
)
new_out_selling = new_total_out_selling_province_carcasses_weight [ ' total_weight ' ] or 0
total_out_selling_province_carcasses_weight + = new_out_selling
if wage_counting_type == ' live ' :
total_province_carcasses_weight = total_province_live_weight
total_pure_province_carcasses_weight = total_province_carcasses_weight
else :
return_total_province_live_weight = int ( return_total_province_live_weight * 0.75 )
total_province_carcasses_weight = total_province_live_weight * 0.75
difference_requests_weight = difference_requests_weight * 0.75
total_out_carcasses_buying_for_pure_province_carcasses_weight = \
kill_house_free_bar_info . aggregate ( total = Sum ( ' weight_of_carcasses ' ) ) [ ' total ' ] or 0
out_selling_out_carcasses_buying_difference = total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight if (
total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight ) > 0 else 0
total_pure_province_carcasses_weight = total_province_carcasses_weight - out_selling_out_carcasses_buying_difference
total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
real_total_out_live_buying_province_carcasses_weight = total_out_live_buying_province_carcasses_weight
if new_out_selling_count_wage :
if out_selling_ignore :
before_total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( create_date__date__lt = new_out_selling_count_wage_date ,
buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
after_total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( create_date__date__gte = new_out_selling_count_wage_date ,
buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
get_new_wage = get_new_wage_for_free_buying ( kill_house_free_sale_bar_info )
before_new_out_selling = get_new_wage [ ' before_new_out_selling ' ]
after_new_out_selling = get_new_wage [ ' after_new_out_selling ' ]
max_amount = before_total_out_live_buying_province_carcasses_weight * 0.80
if max_amount < = before_new_out_selling :
before_total_out_live_buying_province_carcasses_weight - = max_amount
else :
before_total_out_live_buying_province_carcasses_weight - = before_new_out_selling
if after_total_out_live_buying_province_carcasses_weight > after_new_out_selling :
extra_company_amount = int ( after_new_out_selling * extra_company_amount )
after_total_out_live_buying_province_carcasses_weight - = after_new_out_selling
else :
extra_company_amount = int ( after_total_out_live_buying_province_carcasses_weight * extra_company_amount )
after_total_out_live_buying_province_carcasses_weight = 0
total_out_live_buying_province_carcasses_weight = before_total_out_live_buying_province_carcasses_weight + after_total_out_live_buying_province_carcasses_weight
else :
if out_selling_ignore :
max_amount = total_out_live_buying_province_carcasses_weight * 0.80
if max_amount < = new_out_selling :
total_out_live_buying_province_carcasses_weight - = max_amount
else :
total_out_live_buying_province_carcasses_weight - = new_out_selling
# else:
# total_out_live_buying_province_carcasses_weight -= total_out_selling_province_quarantine_carcasses_weight
total_out_carcasses_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( buy_type = ' carcass ' ) . aggregate ( total = Sum ( ' weight_of_carcasses ' ) ) [ ' total ' ] or 0
total_pure_province_carcasses_price = total_pure_province_carcasses_weight * province_live_wage_type_amount
difference_requests_price = difference_requests_weight * province_live_wage_type_amount
total_return_pure_province_carcasses_price = return_total_province_live_weight * province_live_wage_type_amount
total_out_selling_province_carcasses_price = total_out_selling_province_carcasses_weight * free_sell_carcesses_weight_wage_type_amount
if new_out_selling_count_wage :
total_out_live_buying_province_carcasses_price = int (
( before_total_out_live_buying_province_carcasses_weight * before_out_buying_count_wage_amount ) + (
after_total_out_live_buying_province_carcasses_weight * free_buying_live_weight_wage_type_amount ) )
else :
total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_wage_type_amount
total_out_carcasses_buying_province_carcasses_price = total_out_carcasses_buying_province_carcasses_weight * free_buying_carcesses_weight_wage_type_amount
total_price = total_pure_province_carcasses_price + total_out_selling_province_carcasses_price + total_out_live_buying_province_carcasses_price + total_out_carcasses_buying_province_carcasses_price + extra_company_amount + total_return_pure_province_carcasses_price
return {
" total_province_live_weight " : total_province_live_weight ,
" total_province_carcasses_weight " : total_province_carcasses_weight ,
" total_out_selling_province_carcasses_weight " : total_out_selling_province_carcasses_weight ,
" total_pure_province_carcasses_weight " : total_pure_province_carcasses_weight ,
" total_pure_province_carcasses_price " : total_pure_province_carcasses_price ,
" total_out_selling_province_carcasses_price " : total_out_selling_province_carcasses_price ,
" total_out_carcasses_buying_province_carcasses_weight " : total_out_carcasses_buying_province_carcasses_weight ,
" total_out_carcasses_buying_province_carcasses_price " : total_out_carcasses_buying_province_carcasses_price ,
" total_out_live_buying_province_carcasses_weight " : real_total_out_live_buying_province_carcasses_weight ,
" total_out_live_buying_province_carcasses_price " : total_out_live_buying_province_carcasses_price ,
" total_paid_wage " : total_paid_wage ,
" total_price " : total_price ,
" province_live_wage_amount " : province_live_wage_type_amount ,
" free_buying_live_weight_amount " : free_buying_live_weight_wage_type_amount ,
" free_buying_carcesses_weight_amount " : free_buying_carcesses_weight_wage_type_amount ,
" free_sell_carcesses_weight_amount " : free_sell_carcesses_weight_wage_type_amount ,
" extra_company_amount " : extra_company_amount ,
" before_total_out_live_buying_province_carcasses_weight " : before_total_out_live_buying_province_carcasses_weight ,
" after_total_out_live_buying_province_carcasses_weight " : after_total_out_live_buying_province_carcasses_weight ,
" before_new_out_selling " : before_new_out_selling ,
" after_new_out_selling " : after_new_out_selling ,
" return_total_province_live_weight " : return_total_province_live_weight ,
" total_return_pure_province_carcasses_price " : total_return_pure_province_carcasses_price ,
" difference_requests_weight " : difference_requests_weight ,
" difference_requests_price " : difference_requests_price ,
}
2026-01-28 08:41:09 +03:30
def get_kill_houses_out_buying_info ( kill_houses , date1 = None , date2 = None ) :
final_out_live_buying_province_carcasses_weight = 0
before_total_out_live_buying_province_carcasses_weight = 0
after_total_out_live_buying_province_carcasses_weight = 0
before_new_out_selling = 0
after_new_out_selling = 0
extra_company_amount = 0
total_wage_type = WageType . objects . filter ( trash = False )
province_live_wage_type = total_wage_type . filter ( en_name = ' province-kill-request ' , trash = False ) . first ( )
free_buying_live_weight_wage_type = total_wage_type . filter ( en_name = ' live-buy ' , trash = False ) . first ( )
free_buying_carcesses_weight_wage_type = total_wage_type . filter ( en_name = ' carcasse-buy ' , trash = False ) . first ( )
free_sell_carcesses_weight_wage_type = total_wage_type . filter ( en_name = ' carcasse-sell ' , trash = False ) . first ( )
province_live_wage_type_amount = province_live_wage_type . amount if province_live_wage_type . status == True else 0
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
free_buying_carcesses_weight_wage_type_amount = free_buying_carcesses_weight_wage_type . amount if free_buying_carcesses_weight_wage_type . status == True else 0
free_sell_carcesses_weight_wage_type_amount = free_sell_carcesses_weight_wage_type . amount if free_sell_carcesses_weight_wage_type . status == True else 0
for kill_house in kill_houses :
if date1 :
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter (
Q ( kill_house = kill_house ) | Q ( exclusive_killer = kill_house ) ,
archive_wage = False ,
calculate_status = True , date__date__gte = date1 , date__date__lte = date2 ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True , date__date__gte = date1 , date__date__lte = date2 ,
trash = False )
else :
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter (
Q ( kill_house = kill_house ) | Q ( exclusive_killer = kill_house ) ,
archive_wage = False ,
calculate_status = True ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False )
final_date = ' 2025-05-28 '
total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__lte = final_date ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [ ' total ' ] or 0
new_total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__gt = final_date ,
quarantine_weight_of_carcasses__gt = 0 ) . aggregate (
total_weight = Sum (
Case (
When ( real_weight_of_carcasses__lt = F ( ' quarantine_weight_of_carcasses ' ) ,
then = F ( ' real_weight_of_carcasses ' ) ) ,
default = F ( ' quarantine_weight_of_carcasses ' ) ,
output_field = FloatField ( )
)
)
)
new_out_selling = new_total_out_selling_province_carcasses_weight [ ' total_weight ' ] or 0
total_out_selling_province_carcasses_weight + = new_out_selling
total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
if new_out_selling_count_wage :
if out_selling_ignore :
before_total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( create_date__date__lt = new_out_selling_count_wage_date ,
buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
after_total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( create_date__date__gte = new_out_selling_count_wage_date ,
buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
get_new_wage = get_new_wage_for_free_buying ( kill_house_free_sale_bar_info )
before_new_out_selling = get_new_wage [ ' before_new_out_selling ' ]
after_new_out_selling = get_new_wage [ ' after_new_out_selling ' ]
max_amount = before_total_out_live_buying_province_carcasses_weight * 0.80
if max_amount < = before_new_out_selling :
before_total_out_live_buying_province_carcasses_weight - = max_amount
else :
before_total_out_live_buying_province_carcasses_weight - = before_new_out_selling
if after_total_out_live_buying_province_carcasses_weight > after_new_out_selling :
extra_company_amount = int ( after_new_out_selling * extra_company_amount )
after_total_out_live_buying_province_carcasses_weight - = after_new_out_selling
else :
extra_company_amount = int ( after_total_out_live_buying_province_carcasses_weight * extra_company_amount )
after_total_out_live_buying_province_carcasses_weight = 0
total_out_live_buying_province_carcasses_weight = before_total_out_live_buying_province_carcasses_weight + after_total_out_live_buying_province_carcasses_weight
else :
if out_selling_ignore :
max_amount = total_out_live_buying_province_carcasses_weight * 0.80
if max_amount < = new_out_selling :
total_out_live_buying_province_carcasses_weight - = max_amount
else :
total_out_live_buying_province_carcasses_weight - = new_out_selling
final_out_live_buying_province_carcasses_weight + = total_out_live_buying_province_carcasses_weight
print ( final_out_live_buying_province_carcasses_weight )
return final_out_live_buying_province_carcasses_weight
def get_total_wage_info ( kill_house ) :
total_wage = 0
total_paid_wage = 0
off = 0
total_unpaid_wage = 0
province_kill_requests_total_wage = 0
province_kill_requests_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
free_bars_out_province_carcases_total_wage = 0
free_bars_out_province_carcases_total_weight = 0
total_province_live_weight = 0
total_province_carcasses_weight = 0
province_live_wage_amount = 0
free_buying_live_weight_amount = 0
free_buying_carcesses_weight_amount = 0
free_sell_carcesses_weight_amount = 0
return_total_province_live_weight = 0
total_return_pure_province_carcasses_price = 0
total_pure_province_carcasses_price = 0
return_total_pure_province_carcasses_price = 0
total_out_selling_province_carcasses_price = 0
difference_requests_price = 0
before_total_out_live_buying_province_carcasses_price = 0
total_out_live_buying_province_carcasses_price = 0
total_out_carcasses_buying_province_carcasses_price = 0
guilds_difference_requests_price = 0
other_difference_requests_price = 0
guild_return_province_kill_request_wage = 0
other_return_province_kill_request_wage = 0
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_finance_info ( kill_house )
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_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 ' ]
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
result = {
" wage_counting_type " : wage_counting_type ,
" total_wage " : finance_info [ ' total_price ' ] ,
" total_paid_wage " : total_paid_wage ,
" off " : kill_house . off ,
" total_unpaid_wage " : finance_info [ ' total_price ' ] - ( total_paid_wage + kill_house . 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 ' ] ,
" extra_company_amount " : finance_info [ ' extra_company_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 ' ] ,
" union_province_kill_request_wage " : union_province_kill_request_wage ,
" return_union_province_kill_request_wage " : return_union_province_kill_request_wage ,
" union_free_buying_live_wage " : union_free_buying_live_wage ,
" union_free_buying_carcasses_wage " : union_free_buying_carcasses_wage ,
" union_free_sell_carcasses_wage " : union_free_sell_carcasses_wage ,
" union_total_wage " : union_total_wage ,
" union_total_paid_wage " : union_total_paid_wage ,
" union_total_unpaid_wage " : union_total_unpaid_wage ,
" company_province_kill_request_wage " : company_province_kill_request_wage ,
" return_company_province_kill_request_wage " : return_company_province_kill_request_wage ,
" company_free_buying_live_wage " : company_free_buying_live_wage ,
" company_free_buying_carcasses_wage " : company_free_buying_carcasses_wage ,
" company_free_sell_carcasses_wage " : company_free_sell_carcasses_wage ,
" company_total_wage " : company_total_wage ,
" company_total_paid_wage " : company_total_paid_wage ,
" company_total_unpaid_wage " : company_total_unpaid_wage ,
" guilds_province_kill_request_wage " : guilds_province_kill_request_wage ,
" return_guilds_province_kill_request_wage " : return_guilds_province_kill_request_wage ,
" guilds_free_buying_live_wage " : guilds_free_buying_live_wage ,
" guilds_free_buying_carcasses_wage " : guilds_free_buying_carcasses_wage ,
" guilds_free_sell_carcasses_wage " : guilds_free_sell_carcasses_wage ,
" guilds_total_wage " : guilds_total_wage ,
" guilds_total_paid_wage " : guilds_total_paid_wage ,
" guilds_total_unpaid_wage " : guilds_total_unpaid_wage ,
" other_province_kill_request_wage " : other_province_kill_request_wage ,
" return_other_province_kill_request_wage " : return_other_province_kill_request_wage ,
" other_free_buying_live_wage " : other_free_buying_live_wage ,
" other_free_buying_carcasses_wage " : other_free_buying_carcasses_wage ,
" other_free_sell_carcasses_wage " : other_free_sell_carcasses_wage ,
" other_total_wage " : other_total_wage ,
" other_total_paid_wage " : other_total_paid_wage ,
" other_total_unpaid_wage " : other_total_unpaid_wage ,
}
return result
2026-01-18 11:45:53 +03:30
def get_kill_house_finance_info ( kill_house , date1 = None , date2 = None ) :
before_total_out_live_buying_province_carcasses_weight = 0
after_total_out_live_buying_province_carcasses_weight = 0
before_new_out_selling = 0
after_new_out_selling = 0
extra_company_amount = 0
total_wage_type = WageType . objects . filter ( trash = False )
province_live_wage_type = total_wage_type . filter ( en_name = ' province-kill-request ' , trash = False ) . first ( )
free_buying_live_weight_wage_type = total_wage_type . filter ( en_name = ' live-buy ' , trash = False ) . first ( )
free_buying_carcesses_weight_wage_type = total_wage_type . filter ( en_name = ' carcasse-buy ' , trash = False ) . first ( )
free_sell_carcesses_weight_wage_type = total_wage_type . filter ( en_name = ' carcasse-sell ' , trash = False ) . first ( )
province_live_wage_type_amount = province_live_wage_type . amount if province_live_wage_type . status == True else 0
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
free_buying_carcesses_weight_wage_type_amount = free_buying_carcesses_weight_wage_type . amount if free_buying_carcesses_weight_wage_type . status == True else 0
free_sell_carcesses_weight_wage_type_amount = free_sell_carcesses_weight_wage_type . amount if free_sell_carcesses_weight_wage_type . status == True else 0
if date1 :
province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user = kill_house , trash = False ,
archive_wage = False , return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
kill_request__recive_date__date__gte = date1 ,
kill_request__recive_date__date__lte = date2 ,
first_car_allocated_quantity = 0 ) . order_by ( ' id ' )
return_province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user = kill_house , trash = True ,
return_trash = True ,
archive_wage = False , return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
kill_request__recive_date__date__gte = date1 ,
kill_request__recive_date__date__lte = date2 ,
first_car_allocated_quantity = 0 ) . order_by (
' id ' )
kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user = kill_house ) & Q ( killer = kill_house ) ) | Q (
Q ( killhouse_user = kill_house ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user = kill_house ) | Q ( killer = kill_house ) ) , archive_wage = False ,
trash = False , calculate_status = True , kill_request__recive_date__date__gte = date1 ,
kill_request__recive_date__date__lte = date2 ,
)
kill_house_requests = kill_house_requests . filter (
Q ( killhouse_user = kill_house , killer__isnull = True ) | Q ( killhouse_user = kill_house , killer = kill_house ) | Q (
killer = kill_house ) )
return_kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user = kill_house ) & Q ( killer = kill_house ) ) | Q (
Q ( killhouse_user = kill_house ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user = kill_house ) | Q ( killer = kill_house ) ) , archive_wage = False ,
trash = True , return_trash = True , calculate_status = True , kill_request__recive_date__date__gte = date1 ,
kill_request__recive_date__date__lte = date2 ,
)
return_kill_house_requests = return_kill_house_requests . filter (
Q ( killhouse_user = kill_house , killer__isnull = True ) | Q ( killhouse_user = kill_house , killer = kill_house ) | Q (
killer = kill_house ) )
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter (
Q ( kill_house = kill_house , exclusive_killer__isnull = True ) | Q ( exclusive_killer = kill_house ) ,
archive_wage = False ,
calculate_status = True , create_date__date__gte = date1 , create_date__date__lte = date2 ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True , date__date__gte = date1 , date__date__lte = date2 ,
trash = False )
slaughter_transactions = InternalTransaction . objects . filter (
kill_house = kill_house , status = ' completed ' , date__date__gte = date1 , date__date__lte = date2 ,
trash = False )
difference_requests = BarDifferenceRequest . objects . filter ( kill_house = kill_house , trash = False , state = ' accepted ' ,
create_date__date__gte = date1 ,
create_date__date__lte = date2 , )
else :
province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user = kill_house , trash = False ,
archive_wage = False , return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
first_car_allocated_quantity = 0 ) . order_by ( ' id ' )
return_province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user = kill_house , trash = True ,
return_trash = True ,
archive_wage = False , return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
first_car_allocated_quantity = 0 ) . order_by (
' id ' )
kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user = kill_house ) & Q ( killer = kill_house ) ) | Q (
Q ( killhouse_user = kill_house ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user = kill_house ) | Q ( killer = kill_house ) ) , archive_wage = False ,
trash = False , calculate_status = True
)
kill_house_requests = kill_house_requests . filter (
Q ( killhouse_user = kill_house , killer__isnull = True ) | Q ( killhouse_user = kill_house , killer = kill_house ) | Q (
killer = kill_house ) )
return_kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user = kill_house ) & Q ( killer = kill_house ) ) | Q (
Q ( killhouse_user = kill_house ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user = kill_house ) | Q ( killer = kill_house ) ) , archive_wage = False ,
trash = True , return_trash = True , calculate_status = True
)
return_kill_house_requests = return_kill_house_requests . filter (
Q ( killhouse_user = kill_house , killer__isnull = True ) | Q ( killhouse_user = kill_house , killer = kill_house ) | Q (
killer = kill_house ) )
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter (
Q ( kill_house = kill_house , exclusive_killer__isnull = True ) | Q ( exclusive_killer = kill_house ) ,
archive_wage = False ,
calculate_status = True ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False )
slaughter_transactions = InternalTransaction . objects . filter (
kill_house = kill_house , status = ' completed ' ,
trash = False )
difference_requests = BarDifferenceRequest . objects . filter ( kill_house = kill_house , trash = False , state = ' accepted ' )
total_paid_wage = slaughter_transactions . aggregate ( total = Sum ( ' amount ' ) ) [
' total ' ] or 0
total_province_live_weight = province_kill_requests . aggregate ( total = Sum ( ' total_killed_weight ' ) ) [ ' total ' ] or 0
total_province_live_weight + = kill_house_requests . aggregate ( total = Sum ( ' accepted_real_weight ' ) ) [ ' total ' ] or 0
# total_out_selling_province_carcasses_weight = \
# kill_house_free_sale_bar_info.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
# sum_quarantine_carcasses_weight = \
# kill_house_free_sale_bar_info.filter(quarantine_weight_of_carcasses__gt=0).aggregate(
# total_weight=Sum(
# Case(
# When(real_weight_of_carcasses__lt=F('quarantine_weight_of_carcasses'),
# then=F('real_weight_of_carcasses')),
# default=F('quarantine_weight_of_carcasses'),
# output_field=FloatField()
# )
# )
# )
# total_out_selling_province_quarantine_carcasses_weight = sum_quarantine_carcasses_weight['total_weight'] or 0
total_province_live_weight + = \
difference_requests . aggregate ( total = Sum ( ' weight ' ) ) [ ' total ' ] or 0
difference_requests_weight = \
difference_requests . aggregate ( total = Sum ( ' weight ' ) ) [ ' total ' ] or 0
return_total_province_live_weight = return_province_kill_requests . aggregate ( total = Sum ( ' total_killed_weight ' ) ) [
' total ' ] or 0
return_total_province_live_weight + = return_kill_house_requests . aggregate ( total = Sum ( ' accepted_real_weight ' ) ) [
' total ' ] or 0
final_date = ' 2025-05-28 '
total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__lte = final_date ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [ ' total ' ] or 0
new_total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__gt = final_date ,
quarantine_weight_of_carcasses__gt = 0 ) . aggregate (
total_weight = Sum (
Case (
When ( real_weight_of_carcasses__lt = F ( ' quarantine_weight_of_carcasses ' ) ,
then = F ( ' real_weight_of_carcasses ' ) ) ,
default = F ( ' quarantine_weight_of_carcasses ' ) ,
output_field = FloatField ( )
)
)
)
new_out_selling = new_total_out_selling_province_carcasses_weight [ ' total_weight ' ] or 0
total_out_selling_province_carcasses_weight + = new_out_selling
if wage_counting_type == ' live ' :
total_province_carcasses_weight = total_province_live_weight
total_pure_province_carcasses_weight = total_province_carcasses_weight
else :
return_total_province_live_weight = int ( return_total_province_live_weight * 0.75 )
total_province_carcasses_weight = total_province_live_weight * 0.75
difference_requests_weight = difference_requests_weight * 0.75
total_out_carcasses_buying_for_pure_province_carcasses_weight = \
kill_house_free_bar_info . aggregate ( total = Sum ( ' weight_of_carcasses ' ) ) [ ' total ' ] or 0
out_selling_out_carcasses_buying_difference = total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight if (
total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight ) > 0 else 0
total_pure_province_carcasses_weight = total_province_carcasses_weight - out_selling_out_carcasses_buying_difference
total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
real_total_out_live_buying_province_carcasses_weight = total_out_live_buying_province_carcasses_weight
if new_out_selling_count_wage :
if out_selling_ignore :
before_total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( create_date__date__lt = new_out_selling_count_wage_date ,
buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
after_total_out_live_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( create_date__date__gte = new_out_selling_count_wage_date ,
buy_type = ' live ' ) . aggregate ( total = Sum ( ' live_weight ' ) ) [ ' total ' ] or 0
get_new_wage = get_new_wage_for_free_buying ( kill_house_free_sale_bar_info )
before_new_out_selling = get_new_wage [ ' before_new_out_selling ' ]
after_new_out_selling = get_new_wage [ ' after_new_out_selling ' ]
max_amount = before_total_out_live_buying_province_carcasses_weight * 0.80
if max_amount < = before_new_out_selling :
before_total_out_live_buying_province_carcasses_weight - = max_amount
else :
before_total_out_live_buying_province_carcasses_weight - = before_new_out_selling
if after_total_out_live_buying_province_carcasses_weight > after_new_out_selling :
extra_company_amount = int ( after_new_out_selling * extra_company_amount )
after_total_out_live_buying_province_carcasses_weight - = after_new_out_selling
else :
extra_company_amount = int ( after_total_out_live_buying_province_carcasses_weight * extra_company_amount )
after_total_out_live_buying_province_carcasses_weight = 0
total_out_live_buying_province_carcasses_weight = before_total_out_live_buying_province_carcasses_weight + after_total_out_live_buying_province_carcasses_weight
else :
if out_selling_ignore :
max_amount = total_out_live_buying_province_carcasses_weight * 0.80
if max_amount < = new_out_selling :
total_out_live_buying_province_carcasses_weight - = max_amount
else :
total_out_live_buying_province_carcasses_weight - = new_out_selling
# else:
# total_out_live_buying_province_carcasses_weight -= total_out_selling_province_quarantine_carcasses_weight
total_out_carcasses_buying_province_carcasses_weight = \
kill_house_free_bar_info . filter ( buy_type = ' carcass ' ) . aggregate ( total = Sum ( ' weight_of_carcasses ' ) ) [ ' total ' ] or 0
total_pure_province_carcasses_price = total_pure_province_carcasses_weight * province_live_wage_type_amount
difference_requests_price = difference_requests_weight * province_live_wage_type_amount
total_return_pure_province_carcasses_price = return_total_province_live_weight * province_live_wage_type_amount
total_out_selling_province_carcasses_price = total_out_selling_province_carcasses_weight * free_sell_carcesses_weight_wage_type_amount
if new_out_selling_count_wage :
total_out_live_buying_province_carcasses_price = int (
( before_total_out_live_buying_province_carcasses_weight * before_out_buying_count_wage_amount ) + (
after_total_out_live_buying_province_carcasses_weight * free_buying_live_weight_wage_type_amount ) )
else :
total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_wage_type_amount
total_out_carcasses_buying_province_carcasses_price = total_out_carcasses_buying_province_carcasses_weight * free_buying_carcesses_weight_wage_type_amount
total_price = total_pure_province_carcasses_price + total_out_selling_province_carcasses_price + total_out_live_buying_province_carcasses_price + total_out_carcasses_buying_province_carcasses_price + extra_company_amount + total_return_pure_province_carcasses_price
return {
" total_province_live_weight " : total_province_live_weight ,
" total_province_carcasses_weight " : total_province_carcasses_weight ,
" total_out_selling_province_carcasses_weight " : total_out_selling_province_carcasses_weight ,
" total_pure_province_carcasses_weight " : total_pure_province_carcasses_weight ,
" total_pure_province_carcasses_price " : total_pure_province_carcasses_price ,
" total_out_selling_province_carcasses_price " : total_out_selling_province_carcasses_price ,
" total_out_carcasses_buying_province_carcasses_weight " : total_out_carcasses_buying_province_carcasses_weight ,
" total_out_carcasses_buying_province_carcasses_price " : total_out_carcasses_buying_province_carcasses_price ,
" total_out_live_buying_province_carcasses_weight " : real_total_out_live_buying_province_carcasses_weight ,
" total_out_live_buying_province_carcasses_price " : total_out_live_buying_province_carcasses_price ,
" total_paid_wage " : total_paid_wage ,
" total_price " : total_price ,
" province_live_wage_amount " : province_live_wage_type_amount ,
" free_buying_live_weight_amount " : free_buying_live_weight_wage_type_amount ,
" free_buying_carcesses_weight_amount " : free_buying_carcesses_weight_wage_type_amount ,
" free_sell_carcesses_weight_amount " : free_sell_carcesses_weight_wage_type_amount ,
" extra_company_amount " : extra_company_amount ,
" before_total_out_live_buying_province_carcasses_weight " : before_total_out_live_buying_province_carcasses_weight ,
" after_total_out_live_buying_province_carcasses_weight " : after_total_out_live_buying_province_carcasses_weight ,
" before_new_out_selling " : before_new_out_selling ,
" after_new_out_selling " : after_new_out_selling ,
" return_total_province_live_weight " : return_total_province_live_weight ,
" total_return_pure_province_carcasses_price " : total_return_pure_province_carcasses_price ,
" difference_requests_weight " : difference_requests_weight ,
" difference_requests_price " : difference_requests_price ,
}
def get_difference_carcasses_weight ( kill_houses , date1 = None , date2 = None ) :
difference_weight = 0
for kill_house in kill_houses :
if date1 :
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter ( kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False , date__date__gte = date1 ,
date__date__lte = date2 )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False , date__date__gte = date1 , date__date__lte = date2 )
else :
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter ( kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False )
total_out_carcasses_buying_for_pure_province_carcasses_weight = \
kill_house_free_bar_info . aggregate ( total = Sum ( ' weight_of_carcasses ' ) ) [ ' total ' ] or 0
# total_out_selling_province_carcasses_weight = \
# kill_house_free_sale_bar_info.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
final_date = ' 2025-05-28 '
total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__lte = final_date ) . aggregate (
total = Sum ( ' real_weight_of_carcasses ' ) ) [ ' total ' ] or 0
new_total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . filter ( date__date__gt = final_date ,
quarantine_weight_of_carcasses__gt = 0 ) . aggregate (
total_weight = Sum (
Case (
When ( real_weight_of_carcasses__lt = F ( ' quarantine_weight_of_carcasses ' ) ,
then = F ( ' real_weight_of_carcasses ' ) ) ,
default = F ( ' quarantine_weight_of_carcasses ' ) ,
output_field = FloatField ( )
)
)
)
total_out_selling_province_carcasses_weight + = new_total_out_selling_province_carcasses_weight [
' total_weight ' ] or 0
out_selling_out_carcasses_buying_difference = total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight if (
total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight ) > 0 else 0
difference_weight + = out_selling_out_carcasses_buying_difference
return difference_weight
def get_difference_carcasses_percent ( date1 = None , date2 = None ) :
different_percent = 0
kill_houses = KillHouse . objects . filter ( out_province = False , trash = False ) . order_by ( ' id ' )
if date1 :
total_province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user__in = kill_houses , trash = False ,
archive_wage = False , return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
kill_request__recive_date__date__gte = date1 ,
kill_request__recive_date__date__lte = date2 ,
first_car_allocated_quantity = 0 ) . order_by ( ' id ' )
total_kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user__in = kill_houses ) & Q ( killer__in = kill_houses ) ) | Q (
Q ( killhouse_user__in = kill_houses ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user__in = kill_houses ) | Q ( killer__in = kill_houses ) ) , archive_wage = False ,
trash = False , calculate_status = True ,
kill_request__recive_date__date__gte = date1 ,
kill_request__recive_date__date__lte = date2 ,
)
else :
total_province_kill_requests = ProvinceKillRequest . objects . filter ( killhouse_user__in = kill_houses , trash = False ,
archive_wage = False , return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
first_car_allocated_quantity = 0 ) . order_by ( ' id ' )
total_kill_house_requests = KillHouseRequest . objects . filter (
Q ( Q ( killhouse_user__in = kill_houses ) & Q ( killer__in = kill_houses ) ) | Q (
Q ( killhouse_user__in = kill_houses ) & Q ( killer__isnull = True ) ) | Q (
Q ( killhouse_user__in = kill_houses ) | Q ( killer__in = kill_houses ) ) , archive_wage = False ,
trash = False , calculate_status = True
)
total_province_live_weight = total_province_kill_requests . aggregate ( total = Sum ( ' total_killed_weight ' ) ) [
' total ' ] or 0
total_province_live_quantity = total_province_kill_requests . aggregate ( total = Sum ( ' total_killed_quantity ' ) ) [
' total ' ] or 0
total_province_live_weight + = total_kill_house_requests . aggregate ( total = Sum ( ' accepted_real_weight ' ) ) [ ' total ' ] or 0
total_province_live_quantity + = total_kill_house_requests . aggregate ( total = Sum ( ' accepted_real_quantity ' ) ) [
' total ' ] or 0
difference_requests = BarDifferenceRequest . objects . filter ( kill_house__in = kill_houses , trash = False , state = ' accepted ' )
total_province_live_weight + = \
difference_requests . aggregate ( total = Sum ( ' weight ' ) ) [ ' total ' ] or 0
total_province_carcasses_weight = total_province_live_weight * 0.75
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight (
kill_houses , date1 , date2 )
different_percent = total_pure_province_carcasses_weight / total_province_carcasses_weight
return different_percent
def generate_unique_bar_code ( ) :
shamsi_year = jdatetime . date . fromgregorian ( year = datetime . datetime . now ( ) . year , month = 1 , day = 1 ) . year
last_digit = str ( shamsi_year ) [ - 1 ]
while True :
code = int ( province_id + last_digit + str ( uuid . uuid4 ( ) . int ) [ : 5 ] )
if not KillHouseFreeBarInformation . objects . filter ( bar_code = code , trash = False ) . exists ( ) :
return code
def send_ticket_for_bar_difference_request ( user , kill_house , quantity , poultry ) :
new_ticket = TicketSupport (
user = user ,
title = " پیام سیستمی:درخواست رسیدگی اختلاف کشتار " ,
status = ' open ' ,
read_only = True ,
type_ticket = ' single ' ,
parent = None ,
last_message = ' Admin ' ,
)
new_ticket . save ( )
new_ticket . to_user . add ( kill_house )
message = ' با سلام و احترام این پیام از طرف سامانه میباشد. ' \
' \n ' \
f ' کاربر گرامی برای شما حجم { quantity } قطعه اختلاف کشتار از مرغدار { poultry } ثبت گردیده لطفا جهت تعیین تکلیف به بخش مدیریت بار قسمت اختلاف کشتار مراجعه نمایید.باتشکر سامانه رصدیار '
msg = MessageSupport (
ticket = new_ticket ,
message = message ,
created_by = user ,
sender = ' Admin '
)
msg . save ( )
def get_difference_carcasses_weight_kill ( kill_house , date1 = None , date2 = None ) :
if date1 :
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter ( kill_house = kill_house ,
archive_wage = False , date__date__gte = date1 ,
date__date__lte = date2 ,
calculate_status = True ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True , date__date__gte = date1 , date__date__lte = date2 ,
trash = False )
else :
kill_house_free_bar_info = KillHouseFreeBarInformation . objects . filter ( kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False )
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation . objects . filter (
kill_house = kill_house ,
archive_wage = False ,
calculate_status = True ,
trash = False )
total_out_carcasses_buying_for_pure_province_carcasses_weight = \
kill_house_free_bar_info . aggregate ( total = Sum ( ' weight_of_carcasses ' ) ) [ ' total ' ] or 0
total_out_selling_province_carcasses_weight = \
kill_house_free_sale_bar_info . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [ ' total ' ] or 0
out_selling_out_carcasses_buying_difference = total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight if (
total_out_selling_province_carcasses_weight - total_out_carcasses_buying_for_pure_province_carcasses_weight ) > 0 else 0
difference_weight = out_selling_out_carcasses_buying_difference
return difference_weight
def get_calculate_shares ( kill_house ) :
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
wage_info = get_finance_info ( kill_house )
slaughter_transactions = InternalTransaction . objects . filter (
Q ( kill_house = kill_house ) | Q ( parent_kill_house = kill_house ) , status = ' completed ' ,
trash = False )
total_paid_wage = slaughter_transactions . aggregate ( total = Sum ( ' amount ' ) ) [
' total ' ] or 0
# total_pure_province_carcasses_price = wage_info['total_pure_province_carcasses_price'] + wage_info[
# 'total_return_pure_province_carcasses_price']
total_pure_province_carcasses_price = wage_info [ ' total_pure_province_carcasses_price ' ]
total_out_selling_province_carcasses_price = wage_info [ ' total_out_selling_province_carcasses_price ' ]
difference_requests_price = wage_info [ ' difference_requests_price ' ]
total_return_pure_province_carcasses_price = wage_info [ ' total_return_pure_province_carcasses_price ' ]
if new_out_selling_count_wage :
total_out_live_buying_province_carcasses_price = int (
( wage_info [
' before_total_out_live_buying_province_carcasses_weight ' ] * before_out_buying_count_wage_amount ) + (
wage_info [
' after_total_out_live_buying_province_carcasses_weight ' ] * free_buying_live_weight_wage_type_amount ) )
before_total_out_live_buying_province_carcasses_price = wage_info [
' before_total_out_live_buying_province_carcasses_weight ' ] * before_out_buying_count_wage_amount
else :
total_out_live_buying_province_carcasses_price = wage_info [
' total_out_live_buying_province_carcasses_price ' ]
total_out_carcasses_buying_province_carcasses_price = wage_info [
' total_out_carcasses_buying_province_carcasses_price ' ]
total_price = wage_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
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
return_union_province_kill_request_wage = total_return_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
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 = total_return_pure_province_carcasses_price * guilds_province_kill_request_percent
other_return_province_kill_request_wage = total_return_pure_province_carcasses_price * other_province_kill_request_percent
# company_province_kill_request_wage = (
# total_pure_province_carcasses_price * company_province_kill_request_percent) + (
# guilds_difference_requests_price + other_difference_requests_price + guild_return_province_kill_request_wage + other_return_province_kill_request_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 = (
total_return_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 + guild_return_province_kill_request_wage )
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 + other_return_province_kill_request_wage )
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 ,
" 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 ,
" total_unpaid " : total_price - total_paid_wage ,
} ,
{
" name " : " شرکت " ,
" province_kill_request_wage " : 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 ,
" total_unpaid " : total_price - total_paid_wage ,
} ,
{
" name " : " صنف پروتئین " ,
" province_kill_request_wage " : 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 ,
" total_unpaid " : total_price - total_paid_wage ,
} ,
{
" name " : " دامپزشک " ,
" province_kill_request_wage " : 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 ,
" total_unpaid " : total_price - total_paid_wage ,
} ]
def get_kill_house_percent ( kill_house ) :
shares = get_calculate_shares ( kill_house )
union = shares [ 0 ] [ ' total_unpaid_wage ' ] if shares [ 0 ] [ ' total_unpaid_wage ' ] > 0 else 0
company = shares [ 1 ] [ ' total_unpaid_wage ' ] if shares [ 1 ] [ ' total_unpaid_wage ' ] > 0 else 0
guilds = shares [ 2 ] [ ' total_unpaid_wage ' ] if shares [ 2 ] [ ' total_unpaid_wage ' ] > 0 else 0
vet = shares [ 3 ] [ ' total_unpaid_wage ' ] if shares [ 3 ] [ ' total_unpaid_wage ' ] > 0 else 0
# if union >= company:
# return None
# else:
total = union + company + guilds + vet
if total == 0 :
return {
" union " : union ,
" company " : company ,
" guilds " : guilds ,
" vet " : vet ,
" total_percent " : total ,
}
union = int ( ( union / total ) * 100 )
company = int ( ( company / total ) * 100 )
guilds = int ( ( guilds / total ) * 100 )
vet = int ( ( vet / total ) * 100 )
total_percent = union + company + guilds + vet
if total_percent < 100 :
if base_url_for_sms_report == ' ma ' :
if union > = company :
union + = 100 - total_percent
else :
company + = 100 - total_percent
else :
company + = 100 - total_percent
return {
" union " : union ,
" company " : company ,
" guilds " : guilds ,
" vet " : vet ,
" total_percent " : total_percent ,
}
# def create_kill_house_free_bar(request):
# kill = KillHouse.objects.filter(trash=False, unique_identifier__isnull=False).order_by('id').values_list(
# 'unique_identifier', flat=True)
# kill_house_list = {
# "kill_house": list(kill)
# }
# response = requests.post('https://rsibackend.rasadyar.com/app/get_bar_info/', data=kill_house_list)
# try:
# bars = response.json()
# except ValueError:
# return
# if not isinstance(bars, list):
# return
# for bar in bars:
# try:
# if not isinstance(bar, dict):
# continue
# des_part_id_code = bar.get('DesPartIdCode')
# if not des_part_id_code:
# continue
# kill_house = KillHouse.objects.filter(trash=False, unique_identifier=des_part_id_code).first()
# if not kill_house:
# continue
# if KillHouseFreeBarInformation.objects.filter(trash=False, bar_clearance_code=bar.get('TrackingCode')).exists():
# continue
# product = RolesProducts.objects.filter(kill_house=kill_house, trash=False, name='مرغ گرم').first()
# formatted_str = str(bar.get('Date')).replace('T', ' ').replace('Z', '')
# date = datetime.datetime.strptime(formatted_str, '%Y-%m-%d %H:%M:%S').date()
# date = datetime.datetime(year=date.year, month=date.month, day=date.day, hour=10,
# minute=1,
# second=1)
# kill_house_free_bar_info = KillHouseFreeBarInformation(
# kill_house=kill_house,
# product=product,
# )
# kill_house_free_bar_info.driver_name = 'سیستمی'
# kill_house_free_bar_info.driver_mobile = '0'
# kill_house_free_bar_info.input_warehouse = kill_house
# kill_house_free_bar_info.poultry_name = bar.get('hatching', {}).get('poultry', {}).get('UnitName')
# kill_house_free_bar_info.poultry_mobile = bar.get('hatching', {}).get('poultry', {}).get('Mobile')
# kill_house_free_bar_info.province = bar.get('hatching', {}).get('poultry', {}).get('Province')
# kill_house_free_bar_info.city = bar.get('hatching', {}).get('poultry', {}).get('City')
# kill_house_free_bar_info.bar_clearance_code = bar.get('TrackingCode')
# kill_house_free_bar_info.quantity = bar.get('GoodAmount')
# kill_house_free_bar_info.live_weight = int(int(bar.get('GoodAmount')) * 2.5)
# kill_house_free_bar_info.buy_type = 'live'
# kill_house_free_bar_info.car = '0'
# kill_house_free_bar_info.register_type = 'automatic'
# kill_house_free_bar_info.date = datetime.datetime.now()
# kill_house_free_bar_info.bar_code = generate_unique_bar_code()
# kill_house_free_bar_info.save()
# wage = 0
# type = 'live-buy' if kill_house_free_bar_info.buy_type == 'live' else 'carcasse-buy'
# wage_type = WageType.objects.filter(en_name=type, trash=False).first()
# if wage_type and wage_type.status is True:
# wage = wage_type.amount
# kill_house_free_bar_info.wage = wage
# kill_house_free_bar_info.total_wage_amount = wage * int(
# kill_house_free_bar_info.live_weight) if kill_house_free_bar_info.buy_type == 'live' else wage * int(
# kill_house_free_bar_info.weight_of_carcasses)
# kill_house_free_bar_info.save()
# kill_house_free_bar_info.create_date = date
# kill_house_free_bar_info.register_date = datetime.datetime.now()
# kill_house_free_bar_info.save()
# kill_house_free_buying_product_warehousing(product)
# percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0,
# trash=False)
# if wage_type and wage_type.status is True and percentages_wage_type:
# for percentage_wage_type in percentages_wage_type:
# if percentage_wage_type.share_type.en_name == 'union':
# kill_house_free_bar_info.union_share = int(
# (percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
# kill_house_free_bar_info.union_share_percent = percentage_wage_type.percent
# kill_house_free_bar_info.save()
# elif percentage_wage_type.share_type.en_name == 'company':
# kill_house_free_bar_info.company_share = int(
# (percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
# kill_house_free_bar_info.company_share_percent = percentage_wage_type.percent
# kill_house_free_bar_info.save()
# elif percentage_wage_type.share_type.en_name == 'guilds':
# kill_house_free_bar_info.guilds_share = int(
# (percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
# kill_house_free_bar_info.guilds_share_percent = percentage_wage_type.percent
# kill_house_free_bar_info.save()
# elif percentage_wage_type.share_type.en_name == 'city':
# kill_house_free_bar_info.city_share = int(
# (percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
# kill_house_free_bar_info.city_share_percent = percentage_wage_type.percent
# kill_house_free_bar_info.save()
# elif percentage_wage_type.share_type.en_name == 'wallet':
# kill_house_free_bar_info.wallet_share = int(
# (percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
# kill_house_free_bar_info.wallet_share_percent = percentage_wage_type.percent
# kill_house_free_bar_info.save()
# else:
# kill_house_free_bar_info.other_share = int(
# (percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
# kill_house_free_bar_info.other_share_percent = percentage_wage_type.percent
# kill_house_free_bar_info.save()
# except Exception:
# continue
# return HttpResponse('ok')
def create_kill_house_free_bar ( request ) :
kill = KillHouse . objects . filter ( trash = False , unique_identifier__isnull = False ) . order_by ( ' id ' ) . values_list (
' unique_identifier ' , flat = True )
kill_house_list = {
" kill_house " : list ( kill )
}
response = requests . post ( ' https://rsibackend.rasadyar.com/app/get_bar_info/ ' , data = kill_house_list )
try :
bars = response . json ( )
except ValueError :
2026-02-02 10:49:08 +03:30
return HttpResponse ( ' ok ' )
2026-01-18 11:45:53 +03:30
if not isinstance ( bars , list ) :
2026-02-02 10:49:08 +03:30
return HttpResponse ( ' ok ' )
2026-01-18 11:45:53 +03:30
for bar in bars :
try :
if not isinstance ( bar , dict ) :
continue
des_part_id_code = bar . get ( ' jihadi_destination ' )
if not des_part_id_code :
continue
kill_house = KillHouse . objects . filter ( trash = False , unique_identifier = des_part_id_code ) . first ( )
if not kill_house :
continue
if KillHouseFreeBarInformation . objects . filter ( trash = False , bar_clearance_code = bar . get ( ' tracking ' ) ) . exists ( ) :
continue
product = RolesProducts . objects . filter ( kill_house = kill_house , trash = False , name = ' مرغ گرم ' ) . first ( )
formatted_str = str ( bar . get ( ' date ' ) ) . replace ( ' T ' , ' ' ) . replace ( ' Z ' , ' ' )
date = datetime . datetime . strptime ( formatted_str , ' % Y- % m- %d ' ) . date ( )
date = datetime . datetime ( year = date . year , month = date . month , day = date . day , hour = 10 ,
minute = 1 ,
second = 1 )
kill_house_free_bar_info = KillHouseFreeBarInformation (
kill_house = kill_house ,
product = product ,
)
kill_house_free_bar_info . driver_name = ' سیستمی '
kill_house_free_bar_info . driver_mobile = ' 0 '
kill_house_free_bar_info . input_warehouse = kill_house
kill_house_free_bar_info . poultry_name = bar . get ( ' hatching ' , { } ) . get ( ' poultry ' , { } ) . get ( ' UnitName ' )
kill_house_free_bar_info . poultry_mobile = bar . get ( ' hatching ' , { } ) . get ( ' poultry ' , { } ) . get ( ' Mobile ' )
kill_house_free_bar_info . province = bar . get ( ' hatching ' , { } ) . get ( ' poultry ' , { } ) . get ( ' Province ' )
kill_house_free_bar_info . city = bar . get ( ' hatching ' , { } ) . get ( ' poultry ' , { } ) . get ( ' City ' )
kill_house_free_bar_info . bar_clearance_code = bar . get ( ' tracking ' )
kill_house_free_bar_info . quantity = bar . get ( ' quantity ' )
kill_house_free_bar_info . live_weight = int ( int ( bar . get ( ' quantity ' ) ) * 2.5 )
kill_house_free_bar_info . buy_type = ' live '
kill_house_free_bar_info . car = ' 0 '
kill_house_free_bar_info . register_type = ' automatic '
kill_house_free_bar_info . date = datetime . datetime . now ( )
kill_house_free_bar_info . bar_code = generate_unique_bar_code ( )
kill_house_free_bar_info . save ( )
wage = 0
type = ' live-buy ' if kill_house_free_bar_info . buy_type == ' live ' else ' carcasse-buy '
wage_type = WageType . objects . filter ( en_name = type , trash = False ) . first ( )
if wage_type and wage_type . status is True :
wage = wage_type . amount
kill_house_free_bar_info . wage = wage
kill_house_free_bar_info . total_wage_amount = wage * int (
kill_house_free_bar_info . live_weight ) if kill_house_free_bar_info . buy_type == ' live ' else wage * int (
kill_house_free_bar_info . weight_of_carcasses )
kill_house_free_bar_info . save ( )
kill_house_free_bar_info . create_date = date
kill_house_free_bar_info . register_date = datetime . datetime . now ( )
kill_house_free_bar_info . save ( )
kill_house_free_buying_product_warehousing ( product )
percentages_wage_type = PercentageOfWageType . objects . filter ( wage_type = wage_type , percent__gt = 0 ,
trash = False )
if wage_type and wage_type . status is True and percentages_wage_type :
for percentage_wage_type in percentages_wage_type :
if percentage_wage_type . share_type . en_name == ' union ' :
kill_house_free_bar_info . union_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . union_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
elif percentage_wage_type . share_type . en_name == ' company ' :
kill_house_free_bar_info . company_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . company_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
elif percentage_wage_type . share_type . en_name == ' guilds ' :
kill_house_free_bar_info . guilds_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . guilds_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
elif percentage_wage_type . share_type . en_name == ' city ' :
kill_house_free_bar_info . city_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . city_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
elif percentage_wage_type . share_type . en_name == ' wallet ' :
kill_house_free_bar_info . wallet_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . wallet_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
else :
kill_house_free_bar_info . other_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . other_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
except Exception :
continue
return HttpResponse ( ' ok ' )
def create_kill_house_free_bar_cron ( ) :
kill = KillHouse . objects . filter ( trash = False , unique_identifier__isnull = False ) . order_by ( ' id ' ) . values_list (
' unique_identifier ' , flat = True )
kill_house_list = {
" kill_house " : list ( kill )
}
response = requests . post ( ' https://rsibackend.rasadyar.com/app/get_bar_info/ ' , data = kill_house_list )
try :
bars = response . json ( )
except ValueError :
return
if not isinstance ( bars , list ) :
return
for bar in bars :
try :
if not isinstance ( bar , dict ) :
continue
des_part_id_code = bar . get ( ' jihadi_destination ' )
if not des_part_id_code :
continue
kill_house = KillHouse . objects . filter ( trash = False , unique_identifier = des_part_id_code ) . first ( )
if not kill_house :
continue
if KillHouseFreeBarInformation . objects . filter ( trash = False , bar_clearance_code = bar . get ( ' tracking ' ) ) . exists ( ) :
continue
product = RolesProducts . objects . filter ( kill_house = kill_house , trash = False , name = ' مرغ گرم ' ) . first ( )
formatted_str = str ( bar . get ( ' date ' ) ) . replace ( ' T ' , ' ' ) . replace ( ' Z ' , ' ' )
date = datetime . datetime . strptime ( formatted_str , ' % Y- % m- %d ' ) . date ( )
date = datetime . datetime ( year = date . year , month = date . month , day = date . day , hour = 10 ,
minute = 1 ,
second = 1 )
kill_house_free_bar_info = KillHouseFreeBarInformation (
kill_house = kill_house ,
product = product ,
)
kill_house_free_bar_info . driver_name = ' سیستمی '
kill_house_free_bar_info . driver_mobile = ' 0 '
kill_house_free_bar_info . input_warehouse = kill_house
kill_house_free_bar_info . poultry_name = bar . get ( ' hatching ' , { } ) . get ( ' poultry ' , { } ) . get ( ' UnitName ' )
kill_house_free_bar_info . poultry_mobile = bar . get ( ' hatching ' , { } ) . get ( ' poultry ' , { } ) . get ( ' Mobile ' )
kill_house_free_bar_info . province = bar . get ( ' hatching ' , { } ) . get ( ' poultry ' , { } ) . get ( ' Province ' )
kill_house_free_bar_info . city = bar . get ( ' hatching ' , { } ) . get ( ' poultry ' , { } ) . get ( ' City ' )
kill_house_free_bar_info . bar_clearance_code = bar . get ( ' tracking ' )
kill_house_free_bar_info . quantity = bar . get ( ' quantity ' )
kill_house_free_bar_info . live_weight = int ( int ( bar . get ( ' quantity ' ) ) * 2.5 )
kill_house_free_bar_info . buy_type = ' live '
kill_house_free_bar_info . car = ' 0 '
kill_house_free_bar_info . register_type = ' automatic '
kill_house_free_bar_info . date = datetime . datetime . now ( )
kill_house_free_bar_info . bar_code = generate_unique_bar_code ( )
kill_house_free_bar_info . save ( )
wage = 0
type = ' live-buy ' if kill_house_free_bar_info . buy_type == ' live ' else ' carcasse-buy '
wage_type = WageType . objects . filter ( en_name = type , trash = False ) . first ( )
if wage_type and wage_type . status is True :
wage = wage_type . amount
kill_house_free_bar_info . wage = wage
kill_house_free_bar_info . total_wage_amount = wage * int (
kill_house_free_bar_info . live_weight ) if kill_house_free_bar_info . buy_type == ' live ' else wage * int (
kill_house_free_bar_info . weight_of_carcasses )
kill_house_free_bar_info . save ( )
kill_house_free_bar_info . create_date = date
kill_house_free_bar_info . register_date = datetime . datetime . now ( )
kill_house_free_bar_info . save ( )
kill_house_free_buying_product_warehousing ( product )
percentages_wage_type = PercentageOfWageType . objects . filter ( wage_type = wage_type , percent__gt = 0 ,
trash = False )
if wage_type and wage_type . status is True and percentages_wage_type :
for percentage_wage_type in percentages_wage_type :
if percentage_wage_type . share_type . en_name == ' union ' :
kill_house_free_bar_info . union_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . union_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
elif percentage_wage_type . share_type . en_name == ' company ' :
kill_house_free_bar_info . company_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . company_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
elif percentage_wage_type . share_type . en_name == ' guilds ' :
kill_house_free_bar_info . guilds_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . guilds_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
elif percentage_wage_type . share_type . en_name == ' city ' :
kill_house_free_bar_info . city_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . city_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
elif percentage_wage_type . share_type . en_name == ' wallet ' :
kill_house_free_bar_info . wallet_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . wallet_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
else :
kill_house_free_bar_info . other_share = int (
( percentage_wage_type . percent / 100 ) * kill_house_free_bar_info . total_wage_amount )
kill_house_free_bar_info . other_share_percent = percentage_wage_type . percent
kill_house_free_bar_info . save ( )
except Exception :
continue
def market_poultry_request_remain_quantity ( poultry_request ) :
province_check = ProvinceCheckOperatorRequest . objects . get ( poultry_request = poultry_request )
province_kill_reqs = ProvinceKillRequest . objects . filter ( trash = False ,
province_request__poultry_request = poultry_request ,
market = False ,
return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
temporary_trash = False ) . only ( ' total_killed_quantity ' ) \
. aggregate ( total = Sum ( ' total_killed_quantity ' ) )
kill_requests = KillRequest . objects . filter ( trash = False , market = True , market_state__in = ( ' pending ' , ' accepted ' ) ,
poultry_request = poultry_request ) . only ( ' kill_capacity ' ) \
. aggregate ( total = Sum ( ' kill_capacity ' ) )
new_remain = poultry_request . quantity - ( ( kill_requests [ ' total ' ] or 0 ) + ( province_kill_reqs [ ' total ' ] or 0 ) )
new_quantity = poultry_request . quantity - ( ( kill_requests [ ' total ' ] or 0 ) + ( province_kill_reqs [ ' total ' ] or 0 ) )
poultry_request . remain_quantity = new_remain if new_remain > 0 else 0
poultry_request . save ( )
province_check . quantity = new_quantity if new_quantity > 0 else 0
province_check . save ( )
# def market_calculate_light_weight(kill_house, total_poultry_requests_quantity,
# total_poultry_requests_quantity_light_weight):
# real_total_light_weight_quantity = 0
# kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
# 'kill_house', flat=True)
# kill_houses = KillHouse.objects.filter(out_province=False, market_buying=True, market_light_capacity=True,
# trash=False).exclude(
# id__in=kill_house_ids).order_by('id', 'killer')
# for kill_house_obj in kill_houses:
# kill_house_share = int((kill_house_obj.market_capacity_percent / 100) * total_poultry_requests_quantity)
# kill_house_light_weight_quantity = int(kill_house_share * (kill_house_obj.market_light_capacity_percent / 100))
# real_total_light_weight_quantity += kill_house_light_weight_quantity
# kill_house_share = 0
# kill_house_light_weight_quantity = 0
#
# kill_house_share = int((kill_house.market_capacity_percent / 100) * total_poultry_requests_quantity)
#
# kill_house_light_weight_quantity = int(kill_house_share * (kill_house.market_light_capacity_percent / 100))
#
# kill_house_real_percent = int((
# kill_house_light_weight_quantity / real_total_light_weight_quantity) * 100) if real_total_light_weight_quantity > 0 else 0
#
# kill_house_real_light_weight = int((kill_house_real_percent / 100) * total_poultry_requests_quantity_light_weight)
#
# return kill_house_real_light_weight
#
#
# def market_kill_request_share_quantity(kill_house, date1=None, date2=None):
# if kill_house.market_buying:
# now = datetime.datetime.now().date()
# market_light_capacity = kill_house.market_light_capacity
# market_light_capacity_percent = kill_house.market_light_capacity_percent
# market_light_share = 0
#
# index_weight_category = IndexWeightCategory.objects.filter(trash=False).order_by('id')
# light = index_weight_category.filter(name='سبک').first()
# heavy = index_weight_category.filter(name='سنگین').first()
#
# if date1:
# poultry_requests = PoultryRequest.objects.filter(
# send_date__date__gte=date1,
# send_date__date__lte=date2,
# state_process='accepted',
# province_state='accepted',
# temporary_trash=False,
# trash=False,
# out=False,
# final_state__in=('pending', 'accepted'),
# market=True,
# )
#
# kill_house_market_kill_requests = KillRequest.objects.filter(trash=False, recive_date__date__gte=date1,
# recive_date__date__lte=date2,
# kill_house=kill_house, market=True,
# market_state__in=('pending', 'accepted'))
# else:
# poultry_requests = PoultryRequest.objects.filter(
# send_date__date=now,
# state_process='accepted',
# province_state='accepted',
# temporary_trash=False,
# trash=False,
# out=False,
# final_state__in=('pending', 'accepted'),
# market=True,
# )
#
# kill_house_market_kill_requests = KillRequest.objects.filter(trash=False, recive_date__date=now,
# kill_house=kill_house, market=True,
# market_state__in=('pending', 'accepted'))
#
# total_poultry_requests_quantity = poultry_requests.aggregate(total=Sum('quantity'))['total'] or 0
#
# total_poultry_requests_quantity_light_weight = \
# poultry_requests.filter(Index_weight__gte=light.min_value, Index_weight__lt=light.max_value).aggregate(
# total=Sum('quantity'))['total'] or 0
# total_remain_poultry_requests_quantity_light_weight = \
# poultry_requests.filter(Index_weight__gte=light.min_value, Index_weight__lt=light.max_value).aggregate(
# total=Sum('remain_quantity'))['total'] or 0
#
# light_real_quantity = market_calculate_light_weight(kill_house, total_poultry_requests_quantity,
# total_poultry_requests_quantity_light_weight)
#
# if kill_house.market_buying_limitation:
# if kill_house.market_buying_capacity_percent_status:
# kill_house_today_share = int(
# (kill_house.market_capacity_percent / 100) * total_poultry_requests_quantity)
#
# else:
# kill_house_today_share = int(
# kill_house.total_kill_capacity * (kill_house.total_kill_capacity_percent / 100))
#
#
#
# else:
# kill_house_today_share = total_poultry_requests_quantity
#
# kill_house_market_kill_requests_quantity = \
# kill_house_market_kill_requests.aggregate(total=Sum('kill_capacity'))[
# 'total'] or 0
# kill_house_market_kill_requests_quantity_weight = \
# kill_house_market_kill_requests.aggregate(total=Sum(F('kill_capacity') * F('Index_weight')))[
# 'total'] or 0
# kill_house_market_kill_requests_quantity_first = \
# kill_house_market_kill_requests.filter(market_final_accept=False).aggregate(total=Sum('kill_capacity'))[
# 'total'] or 0
#
# kill_house_market_kill_requests_quantity_first_weight = \
# kill_house_market_kill_requests.filter(market_final_accept=False).aggregate(
# total=Sum(F('kill_capacity') * F('Index_weight')))[
# 'total'] or 0
# kill_house_market_kill_requests_quantity_final = \
# kill_house_market_kill_requests.filter(market_final_accept=True).aggregate(total=Sum('kill_capacity'))[
# 'total'] or 0
# kill_house_market_kill_requests_quantity_final_weight = \
# kill_house_market_kill_requests.filter(market_final_accept=True).aggregate(
# total=Sum(F('kill_capacity') * F('Index_weight')))[
# 'total'] or 0
#
# total_kill_house_market_kill_requests_quantity_agreement_light_weight = \
# kill_house_market_kill_requests.filter(Index_weight__lt=light.min_value).aggregate(
# total=Sum('kill_capacity'))[
# 'total'] or 0
#
# total_kill_house_market_kill_requests_quantity_light_weight = \
# kill_house_market_kill_requests.filter(Index_weight__gte=light.min_value,
# Index_weight__lt=light.max_value).aggregate(
# total=Sum('kill_capacity'))[
# 'total'] or 0
#
# total_kill_house_market_kill_requests_quantity_heavy_weight = \
# kill_house_market_kill_requests.filter(Index_weight__gte=heavy.min_value,
# Index_weight__lte=heavy.max_value).aggregate(
# total=Sum('kill_capacity'))[
# 'total'] or 0
#
# if market_code_state:
# kill_house_market_kill_requests_quantity_light_weight = \
# kill_house_market_kill_requests.filter(market_final_accept=True, market_code_status=True,
# input_market_code__isnull=False,
# Index_weight__lt=light.max_value).aggregate(
# total=Sum('kill_capacity'))[
# 'total'] or 0
# else:
# kill_house_market_kill_requests_quantity_light_weight = \
# kill_house_market_kill_requests.filter(market_final_accept=True,
# Index_weight__lt=light.max_value).aggregate(
# total=Sum('kill_capacity'))[
# 'total'] or 0
#
# if market_light_capacity:
# # market_light_share = int(kill_house_today_share * (market_light_capacity_percent / 100))
# market_light_share = light_real_quantity
#
# kill_house_today_left_share = kill_house_today_share - kill_house_market_kill_requests_quantity if (
# kill_house_today_share - kill_house_market_kill_requests_quantity) > 0 else 0
#
# else:
# total_poultry_requests_quantity = 0
# total_poultry_requests_quantity_light_weight = 0
# total_remain_poultry_requests_quantity_light_weight = 0
# kill_house_today_share = 0
# market_light_share = 0
# kill_house_market_kill_requests_quantity_light_weight = 0
# kill_house_market_kill_requests_quantity = 0
# kill_house_today_left_share = 0
# kill_house_market_kill_requests_quantity_first = 0
# kill_house_market_kill_requests_quantity_final = 0
# light_real_quantity = 0
# kill_house_market_kill_requests_quantity_weight = 0
# kill_house_market_kill_requests_quantity_first_weight = 0
# kill_house_market_kill_requests_quantity_final_weight = 0
# total_kill_house_market_kill_requests_quantity_agreement_light_weight = 0
# total_kill_house_market_kill_requests_quantity_light_weight = 0
# total_kill_house_market_kill_requests_quantity_heavy_weight = 0
#
# result = {
# "total_poultry_requests_quantity": total_poultry_requests_quantity,
# "total_poultry_requests_quantity_light_weight": total_poultry_requests_quantity_light_weight,
# "total_remain_poultry_requests_quantity_light_weight": total_remain_poultry_requests_quantity_light_weight,
# "kill_house_today_share": kill_house_today_share,
# "market_light_share": market_light_share,
# "kill_house_market_kill_requests_quantity_light_weight": kill_house_market_kill_requests_quantity_light_weight,
# "kill_house_market_kill_requests_quantity": kill_house_market_kill_requests_quantity,
# "kill_house_market_kill_requests_quantity_first": kill_house_market_kill_requests_quantity_first,
# "kill_house_market_kill_requests_quantity_final": kill_house_market_kill_requests_quantity_final,
# "kill_house_today_left_share": kill_house_today_left_share,
# "light_real_quantity": light_real_quantity,
# "kill_house_market_kill_requests_quantity_weight": kill_house_market_kill_requests_quantity_weight,
# "kill_house_market_kill_requests_quantity_first_weight": kill_house_market_kill_requests_quantity_first_weight,
# "kill_house_market_kill_requests_quantity_final_weight": kill_house_market_kill_requests_quantity_final_weight,
# "total_kill_house_market_kill_requests_quantity_agreement_light_weight": total_kill_house_market_kill_requests_quantity_agreement_light_weight,
# "total_kill_house_market_kill_requests_quantity_light_weight": total_kill_house_market_kill_requests_quantity_light_weight,
# "total_kill_house_market_kill_requests_quantity_heavy_weight": total_kill_house_market_kill_requests_quantity_heavy_weight,
# }
#
# return result
def market_calculate_light_weight ( kill_house , total_kill_houses , total_poultry_requests_quantity ,
total_poultry_requests_quantity_light_weight ) :
shares = total_kill_houses . annotate (
kill_share = F ( ' market_capacity_percent ' ) * total_poultry_requests_quantity / 100.0 ,
light_share = F ( ' market_capacity_percent ' ) * total_poultry_requests_quantity / 100.0 * F (
' market_light_capacity_percent ' ) / 100.0
) . values_list ( ' id ' , ' light_share ' )
real_total_light_weight_quantity = sum ( [ ls [ 1 ] for ls in shares ] )
kill_house_light_share = next ( ( ls [ 1 ] for ls in shares if ls [ 0 ] == kill_house . id ) , 0 )
kill_house_real_percent = int ( (
kill_house_light_share / real_total_light_weight_quantity ) * 100 ) if real_total_light_weight_quantity > 0 else 0
kill_house_real_light_weight = int ( ( kill_house_real_percent / 100 ) * total_poultry_requests_quantity_light_weight )
return kill_house_real_light_weight
# def market_kill_request_share_quantity(kill_house, date1=None, date2=None, total_kill_houses=None):
# result = {
# "total_poultry_requests_quantity": 0,
# "total_poultry_requests_quantity_light_weight": 0,
# "total_remain_poultry_requests_quantity_light_weight": 0,
# "kill_house_today_share": 0,
# "market_light_share": 0,
# "kill_house_market_kill_requests_quantity_light_weight": 0,
# "kill_house_market_kill_requests_quantity": 0,
# "kill_house_market_kill_requests_quantity_first": 0,
# "kill_house_market_kill_requests_quantity_final": 0,
# "kill_house_today_left_share": 0,
# "light_real_quantity": 0,
# "kill_house_market_kill_requests_quantity_weight": 0,
# "kill_house_market_kill_requests_quantity_first_weight": 0,
# "kill_house_market_kill_requests_quantity_final_weight": 0,
# "total_kill_house_market_kill_requests_quantity_agreement_light_weight": 0,
# "total_kill_house_market_kill_requests_quantity_light_weight": 0,
# "total_kill_house_market_kill_requests_quantity_heavy_weight": 0,
# }
#
# if not kill_house.market_buying:
# return result
#
# now = datetime.datetime.now().date()
# date_filter = Q(send_date__date=now)
# kill_request_date_filter = Q(recive_date__date=now)
#
# if date1:
# date_filter = Q(send_date__date__gte=date1, send_date__date__lte=date2)
# kill_request_date_filter = Q(recive_date__date__gte=date1, recive_date__date__lte=date2)
#
# weights = IndexWeightCategory.objects.filter(trash=False)
# light = weights.filter(name='سبک').first()
# heavy = weights.filter(name='سنگین').first()
#
# poultry_requests = PoultryRequest.objects.filter(
# date_filter,
# state_process='accepted',
# province_state='accepted',
# temporary_trash=False,
# trash=False,
# out=False,
# final_state__in=('pending', 'accepted'),
# market=True,
# )
#
# total_poultry_requests_quantity = poultry_requests.aggregate(total=Sum('quantity'))['total'] or 0
# total_light_quantity = poultry_requests.filter(
# Index_weight__gte=light.min_value,
# Index_weight__lt=light.max_value
# ).aggregate(total=Sum('quantity'))['total'] or 0
# total_remain_light_quantity = poultry_requests.filter(
# Index_weight__gte=light.min_value,
# Index_weight__lt=light.max_value
# ).aggregate(total=Sum('remain_quantity'))['total'] or 0
#
# kill_requests = KillRequest.objects.filter(
# kill_request_date_filter,
# trash=False,
# kill_house=kill_house,
# market=True,
# market_state__in=('pending', 'accepted')
# )
#
# kill_house_today_share = total_poultry_requests_quantity
# if kill_house.market_buying_limitation:
# if kill_house.market_buying_capacity_percent_status:
# kill_house_today_share = int(kill_house.market_capacity_percent / 100 * total_poultry_requests_quantity)
# else:
# kill_house_today_share = int(kill_house.total_kill_capacity * kill_house.total_kill_capacity_percent / 100)
#
# agg = kill_requests.aggregate(
# total_kill_capacity=Sum('kill_capacity') or 0,
# total_weight=Sum(F('kill_capacity') * F('Index_weight')) or 0,
# total_first=Sum('kill_capacity', filter=Q(market_final_accept=False)) or 0,
# total_first_weight=Sum(F('kill_capacity') * F('Index_weight'), filter=Q(market_final_accept=False)) or 0,
# total_final=Sum('kill_capacity', filter=Q(market_final_accept=True)) or 0,
# total_final_weight=Sum(F('kill_capacity') * F('Index_weight'), filter=Q(market_final_accept=True)) or 0,
# total_agreement_light=Sum('kill_capacity', filter=Q(Index_weight__lt=light.min_value)) or 0,
# total_light=Sum('kill_capacity',
# filter=Q(Index_weight__gte=light.min_value, Index_weight__lt=light.max_value)) or 0,
# total_heavy=Sum('kill_capacity',
# filter=Q(Index_weight__gte=heavy.min_value, Index_weight__lte=heavy.max_value)) or 0,
# )
#
# light_real_quantity = market_calculate_light_weight(kill_house, total_kill_houses, total_poultry_requests_quantity,
# total_light_quantity)
# market_light_share = light_real_quantity if kill_house.market_light_capacity else 0
# kill_house_today_left_share = max(0, kill_house_today_share - (agg['total_kill_capacity'] or 0))
#
# result.update({
# "total_poultry_requests_quantity": total_poultry_requests_quantity or 0,
# "total_poultry_requests_quantity_light_weight": total_light_quantity or 0,
# "total_remain_poultry_requests_quantity_light_weight": total_remain_light_quantity or 0,
# "kill_house_today_share": kill_house_today_share or 0,
# "market_light_share": market_light_share or 0,
# "kill_house_market_kill_requests_quantity_light_weight": agg['total_light'] or 0,
# "kill_house_market_kill_requests_quantity": agg['total_kill_capacity'] or 0,
# "kill_house_market_kill_requests_quantity_first": agg['total_first'] or 0,
# "kill_house_market_kill_requests_quantity_final": agg['total_final'] or 0,
# "kill_house_today_left_share": kill_house_today_left_share or 0,
# "light_real_quantity": light_real_quantity or 0,
# "kill_house_market_kill_requests_quantity_weight": agg['total_weight'] or 0,
# "kill_house_market_kill_requests_quantity_first_weight": agg['total_first_weight'] or 0,
# "kill_house_market_kill_requests_quantity_final_weight": agg['total_final_weight'] or 0,
# "total_kill_house_market_kill_requests_quantity_agreement_light_weight": agg['total_agreement_light'] or 0,
# "total_kill_house_market_kill_requests_quantity_light_weight": agg['total_light'] or 0,
# "total_kill_house_market_kill_requests_quantity_heavy_weight": agg['total_heavy'] or 0,
# })
#
# return result
def market_kill_request_share_quantity (
kill_house ,
date1 = None ,
date2 = None ,
total_kill_houses = None ,
weights = None ,
precomputed_poultry = None
) :
result = {
" total_poultry_requests_quantity " : 0 ,
" total_poultry_requests_quantity_light_weight " : 0 ,
" total_remain_poultry_requests_quantity_light_weight " : 0 ,
" kill_house_today_share " : 0 ,
" market_light_share " : 0 ,
" kill_house_market_kill_requests_quantity_light_weight " : 0 ,
" kill_house_market_kill_requests_quantity " : 0 ,
" kill_house_market_kill_requests_quantity_first " : 0 ,
" kill_house_market_kill_requests_quantity_final " : 0 ,
" kill_house_today_left_share " : 0 ,
" light_real_quantity " : 0 ,
" kill_house_market_kill_requests_quantity_weight " : 0 ,
" kill_house_market_kill_requests_quantity_first_weight " : 0 ,
" kill_house_market_kill_requests_quantity_final_weight " : 0 ,
" total_kill_house_market_kill_requests_quantity_agreement_light_weight " : 0 ,
" total_kill_house_market_kill_requests_quantity_light_weight " : 0 ,
" total_kill_house_market_kill_requests_quantity_heavy_weight " : 0 ,
}
if not kill_house . market_buying :
return result
now = datetime . date . today ( )
date_filter = Q ( send_date__date = now )
kill_request_date_filter = Q ( recive_date__date = now )
if date1 :
date_filter = Q ( send_date__date__gte = date1 , send_date__date__lte = date2 )
kill_request_date_filter = Q ( recive_date__date__gte = date1 , recive_date__date__lte = date2 )
if weights is None :
weights = IndexWeightCategory . objects . filter ( trash = False )
light = weights . filter ( name = ' سبک ' ) . first ( )
heavy = weights . filter ( name = ' سنگین ' ) . first ( )
poultry_requests = PoultryRequest . objects . filter (
date_filter ,
state_process = ' accepted ' ,
province_state = ' accepted ' ,
temporary_trash = False ,
trash = False ,
out = False ,
final_state__in = ( ' pending ' , ' accepted ' ) ,
market = True ,
)
poultry_agg = poultry_requests . aggregate (
total = Sum ( ' quantity ' ) ,
total_light = Sum ( ' quantity ' , filter = Q ( Index_weight__gte = light . min_value , Index_weight__lt = light . max_value ) ) ,
total_remain_light = Sum ( ' remain_quantity ' ,
filter = Q ( Index_weight__gte = light . min_value , Index_weight__lt = light . max_value ) ) ,
)
total_poultry_requests_quantity = poultry_agg [ ' total ' ] or 0
total_light_quantity = poultry_agg [ ' total_light ' ] or 0
total_remain_light_quantity = poultry_agg [ ' total_remain_light ' ] or 0
kill_requests = KillRequest . objects . filter (
kill_request_date_filter ,
trash = False ,
kill_house = kill_house ,
market = True ,
market_state__in = ( ' pending ' , ' accepted ' )
)
agg = kill_requests . aggregate (
total_kill_capacity = Sum ( ' kill_capacity ' ) ,
total_weight = Sum ( F ( ' kill_capacity ' ) * F ( ' Index_weight ' ) ) ,
total_first = Sum ( ' kill_capacity ' , filter = Q ( market_final_accept = False ) ) ,
total_first_weight = Sum ( F ( ' kill_capacity ' ) * F ( ' Index_weight ' ) , filter = Q ( market_final_accept = False ) ) ,
total_final = Sum ( ' kill_capacity ' , filter = Q ( market_final_accept = True ) ) ,
total_final_weight = Sum ( F ( ' kill_capacity ' ) * F ( ' Index_weight ' ) , filter = Q ( market_final_accept = True ) ) ,
total_agreement_light = Sum ( ' kill_capacity ' , filter = Q ( Index_weight__lt = light . min_value ) ) ,
total_light = Sum ( ' kill_capacity ' , filter = Q ( Index_weight__gte = light . min_value , Index_weight__lt = light . max_value ) ) ,
total_heavy = Sum ( ' kill_capacity ' ,
filter = Q ( Index_weight__gte = heavy . min_value , Index_weight__lte = heavy . max_value ) ) ,
)
kill_house_today_share = total_poultry_requests_quantity
if kill_house . market_buying_limitation :
if kill_house . market_buying_capacity_percent_status :
kill_house_today_share = int ( kill_house . market_capacity_percent / 100 * total_poultry_requests_quantity )
else :
kill_house_today_share = int ( kill_house . total_kill_capacity * kill_house . total_kill_capacity_percent / 100 )
light_real_quantity = market_calculate_light_weight (
kill_house , total_kill_houses , total_poultry_requests_quantity , total_light_quantity
)
market_light_share = light_real_quantity if kill_house . market_light_capacity else 0
kill_house_today_left_share = max ( 0 , kill_house_today_share - ( agg [ ' total_kill_capacity ' ] or 0 ) )
result . update ( {
" total_poultry_requests_quantity " : total_poultry_requests_quantity ,
" total_poultry_requests_quantity_light_weight " : total_light_quantity ,
" total_remain_poultry_requests_quantity_light_weight " : total_remain_light_quantity ,
" kill_house_today_share " : kill_house_today_share ,
" market_light_share " : market_light_share ,
" kill_house_market_kill_requests_quantity_light_weight " : agg [ ' total_light ' ] or 0 ,
" kill_house_market_kill_requests_quantity " : agg [ ' total_kill_capacity ' ] or 0 ,
" kill_house_market_kill_requests_quantity_first " : agg [ ' total_first ' ] or 0 ,
" kill_house_market_kill_requests_quantity_final " : agg [ ' total_final ' ] or 0 ,
" kill_house_today_left_share " : kill_house_today_left_share ,
" light_real_quantity " : light_real_quantity ,
" kill_house_market_kill_requests_quantity_weight " : agg [ ' total_weight ' ] or 0 ,
" kill_house_market_kill_requests_quantity_first_weight " : agg [ ' total_first_weight ' ] or 0 ,
" kill_house_market_kill_requests_quantity_final_weight " : agg [ ' total_final_weight ' ] or 0 ,
" total_kill_house_market_kill_requests_quantity_agreement_light_weight " : agg [ ' total_agreement_light ' ] or 0 ,
" total_kill_house_market_kill_requests_quantity_light_weight " : agg [ ' total_light ' ] or 0 ,
" total_kill_house_market_kill_requests_quantity_heavy_weight " : agg [ ' total_heavy ' ] or 0 ,
} )
return result
def calculate_governmental_quota ( kill_house ) :
kill_house_governmental_share = 0
if kill_house . quota :
now = datetime . datetime . now ( ) . date ( )
if kill_house . quota_max_kill_limit :
kill_house_governmental_share = int ( ( kill_house . governmental_quota / 100 ) * kill_house . total_kill_capacity )
elif kill_house . quota_request :
poultry_requests = PoultryRequest . objects . filter (
send_date__date = now ,
state_process = ' accepted ' ,
province_state = ' accepted ' ,
temporary_trash = False ,
trash = False ,
out = False ,
free_sale_in_province = False ,
final_state__in = ( ' pending ' , ' accepted ' )
)
poultry_requests_quantity = poultry_requests . aggregate ( total = Sum ( ' remain_quantity ' ) ) [ ' total ' ] or 0
kill_house_governmental_share = int ( ( kill_house . governmental_quota / 100 ) * poultry_requests_quantity )
else :
if kill_house . quota_custom :
kill_house_governmental_share = kill_house . quota_custom_quantity
province_kill_requests = ProvinceKillRequest . objects . filter ( trash = False , temporary_trash = False ,
killhouse_user = kill_house ,
return_to_province = False ,
state__in = ( ' pending ' , ' accepted ' ) ,
kill_request__recive_date__date = now )
kill_house_market_kill_requests = KillRequest . objects . filter ( trash = False , recive_date__date = now ,
kill_house = kill_house , market = True ,
market_state__in = ( ' pending ' , ' accepted ' ) )
province_kill_requests_governmental_quantity = \
province_kill_requests . filter ( province_request__poultry_request__free_sale_in_province = False ) . aggregate (
total = Sum ( ' total_killed_quantity ' ) ) [ ' total ' ] or 0
kill_house_market_kill_requests_governmental_quantity = \
kill_house_market_kill_requests . filter ( poultry_request__free_sale_in_province = False ) . aggregate (
total = Sum ( ' kill_capacity ' ) ) [ ' total ' ] or 0
total_governmental_quantity = province_kill_requests_governmental_quantity + kill_house_market_kill_requests_governmental_quantity
if total_governmental_quantity < kill_house_governmental_share :
return ' not_allowed '
return None
# def check_kill_house_remain_limitation_weight(kill_house):
# yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
# today = datetime.datetime.now().date()
# kill_house_requests = KillHouseRequest.objects.filter(input_warehouse=kill_house,
# province_request__poultry_request__free_sale_in_province=False,
# kill_request__recive_date__date=yesterday.date(),
# ware_house_confirmation=True, trash=False,
# calculate_status=True, warehouse=True)
#
# kill_house_allocations = StewardAllocation.objects.filter(
# kill_house=kill_house, trash=False, calculate_status=True, warehouse=True, system_registration_code=True,
# receiver_state__in=('pending', 'accepted'), date__date=today, quota='governmental')
#
# kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(kill_house=kill_house,
# quota='governmental',
# date__date=today, trash=False,
# calculate_status=True, warehouse=True)
# segmentations = PosSegmentation.objects.filter(kill_house=kill_house, date__date=today, trash=False, warehouse=True,
# quota='governmental')
#
# kill_house_requests_weight = kill_house_requests.aggregate(total=Sum('ware_house_accepted_real_weight'))[
# 'total'] or 0
# kill_house_allocations_weight = \
# kill_house_allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
# kill_house_free_sale_bars_weight = kill_house_free_sale_bars.aggregate(total=Sum('real_weight_of_carcasses'))[
# 'total'] or 0
#
# segmentation_weight = \
# segmentations.aggregate(total=Sum('weight'))[
# 'total'] or 0
#
# total_input = kill_house_requests_weight
# total_output = kill_house_allocations_weight + kill_house_free_sale_bars_weight + segmentation_weight
# total_remain = total_input - total_output
#
# if total_remain <= 0:
# return True
# else:
# if kill_house.ware_house_remaining_percent_limitation_status:
# if (total_input * (kill_house.ware_house_remaining_percent_limitation / 100)) > total_remain:
# return True
# else:
# return False
# else:
# return True
def check_kill_house_remain_limitation_weight ( kill_house ) :
production_date = ( datetime . datetime . now ( ) - datetime . timedelta ( days = 3 ) ) . date ( )
kill_house_requests = KillHouseRequest . objects . filter ( input_warehouse = kill_house ,
province_request__poultry_request__free_sale_in_province = False ,
kill_request__recive_date__date = production_date ,
ware_house_confirmation = True , trash = False ,
calculate_status = True , warehouse = True )
kill_house_allocations = StewardAllocation . objects . filter (
kill_house = kill_house , trash = False , calculate_status = True , warehouse = True , system_registration_code = True ,
receiver_state__in = ( ' pending ' , ' accepted ' ) , production_date__date = production_date , quota = ' governmental ' )
kill_house_free_sale_bars = KillHouseFreeSaleBarInformation . objects . filter ( kill_house = kill_house ,
quota = ' governmental ' ,
production_date__date = production_date , trash = False ,
calculate_status = True , warehouse = True )
segmentations = PosSegmentation . objects . filter ( kill_house = kill_house , production_date__date = production_date , trash = False , warehouse = True ,
quota = ' governmental ' )
kill_house_requests_weight = kill_house_requests . aggregate ( total = Sum ( ' ware_house_accepted_real_weight ' ) ) [
' total ' ] or 0
kill_house_allocations_weight = \
kill_house_allocations . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [ ' total ' ] or 0
kill_house_free_sale_bars_weight = kill_house_free_sale_bars . aggregate ( total = Sum ( ' real_weight_of_carcasses ' ) ) [
' total ' ] or 0
segmentation_weight = \
segmentations . aggregate ( total = Sum ( ' weight ' ) ) [
' total ' ] or 0
archives = WarehouseArchive . objects . filter ( kill_house = kill_house , date__date = production_date , quota = ' governmental ' , trash = False )
archives_governmental_weight = \
archives . aggregate ( total = Sum ( ' weight ' ) ) [
' total ' ] or 0
total_input = kill_house_requests_weight
total_output = kill_house_allocations_weight + kill_house_free_sale_bars_weight + segmentation_weight + archives_governmental_weight
total_remain = total_input - total_output
if total_remain < = 0 :
return True
else :
if kill_house . ware_house_remaining_percent_limitation_status :
if ( total_input * ( kill_house . ware_house_remaining_percent_limitation / 100 ) ) > total_remain :
return True
else :
return False
else :
return True