2720 lines
170 KiB
Python
2720 lines
170 KiB
Python
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,
|
|
}
|
|
|
|
|
|
# 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,
|
|
#
|
|
# }
|
|
|
|
|
|
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')
|
|
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
|
|
)
|
|
|
|
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
|
|
)
|
|
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')
|
|
|
|
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
|
|
)
|
|
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,
|
|
|
|
}
|
|
|
|
|
|
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
|
|
|
|
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:
|
|
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
|
|
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
|