261 lines
18 KiB
Python
261 lines
18 KiB
Python
from django.db.models import Sum, F, Q
|
|
|
|
from panel.KillHouse.helpers import get_difference_carcasses_percent
|
|
from panel.models import PoultryRequest, ProvinceKillRequest, KillHouse, KillHouseRequest, PercentageOfWageType, \
|
|
WageType, SubSectorTransactions, BarDifferenceRequest
|
|
|
|
|
|
def get_vet_sub_sector_finance_info(vet,date1,date2):
|
|
total_quantity = 0
|
|
total_weight = 0
|
|
total_wage = 0
|
|
total_wage_type = WageType.objects.filter(trash=False)
|
|
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
|
free_sell_carcasses_wage_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
|
out_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
|
trash=False).first().amount
|
|
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
other_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='other').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
|
|
|
|
other_out_poultry_request_percent = percentages_wage_type.filter(wage_type__en_name='poultry-sell-out-province',
|
|
share_type__en_name='other').first().percent / 100
|
|
other_province_kill_request_amount = province_live_wage_amount * other_province_kill_request_percent
|
|
other_free_sell_carcasses_amount = free_sell_carcasses_wage_amount * other_free_sell_carcasses_percent
|
|
|
|
other_out_poultry_request_amount = out_poultry_request_wage_amount * other_out_poultry_request_percent
|
|
|
|
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
|
if date1:
|
|
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
|
province_state__in=('pending', 'accepted'), out=True,
|
|
out_province_request_cancel=False, temporary_trash=False,
|
|
wage_pay=True, has_wage=True,
|
|
temporary_deleted=False, vet_farm=vet,
|
|
send_date__date__gte=date1,
|
|
send_date__date__lte=date2)
|
|
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,
|
|
province_request__poultry_request__vet_farm=vet,
|
|
clearance_code__isnull=False,
|
|
# clearance_code__isnull=False,
|
|
trash=False, calculate_status=True, kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2
|
|
)
|
|
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet=vet, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
|
state='accepted', acceptor_date__date__gte=date1,
|
|
acceptor_date__date__lte=date2)
|
|
else:
|
|
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
|
province_state__in=('pending', 'accepted'), out=True,
|
|
out_province_request_cancel=False, temporary_trash=False,
|
|
wage_pay=True, has_wage=True,
|
|
temporary_deleted=False, vet_farm=vet,
|
|
)
|
|
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,
|
|
province_request__poultry_request__vet_farm=vet,
|
|
clearance_code__isnull=False,
|
|
# clearance_code__isnull=False,
|
|
trash=False, calculate_status=True
|
|
)
|
|
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
|
state='accepted')
|
|
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet=vet)
|
|
|
|
# quarantine_code__isnull=False)
|
|
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
|
'total'] or 0
|
|
out_province_poultry_request_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
'total'] or 0
|
|
|
|
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
|
# archive_wage=False, return_to_province=False,
|
|
# state__in=('pending', 'accepted'),
|
|
# province_request__poultry_request__vet_farm=vet,
|
|
# province_request__poultry_request__quarantine_code__isnull=False,
|
|
#
|
|
# first_car_allocated_quantity=0).order_by('id')
|
|
|
|
# province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# province_live_quantity = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
|
# 'total'] or 0
|
|
province_live_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
|
province_live_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
|
'total'] or 0
|
|
province_live_weight += \
|
|
difference_requests.aggregate(total=Sum('weight'))['total'] or 0
|
|
total_quantity += province_live_quantity + out_province_poultry_request_quantity
|
|
total_weight += province_live_weight + out_province_poultry_request_weight
|
|
|
|
province_carcasses_weight = province_live_weight * 0.75
|
|
if date1:
|
|
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent(date1,date2)
|
|
else:
|
|
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent()
|
|
|
|
external_pure_province_carcasses_weight = province_carcasses_weight - internal_pure_province_carcasses_weight
|
|
|
|
total_pure_internal_province_carcasses_amount = internal_pure_province_carcasses_weight * other_province_kill_request_amount
|
|
total_pure_external_province_carcasses_amount = external_pure_province_carcasses_weight * other_free_sell_carcasses_amount
|
|
out_province_poultry_request_amount = out_province_poultry_request_weight * other_out_poultry_request_amount
|
|
|
|
vet_deposit_amount = vet_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
|
total_wage += total_pure_internal_province_carcasses_amount + total_pure_external_province_carcasses_amount + out_province_poultry_request_amount
|
|
total_remain_wage = total_wage - vet_deposit_amount
|
|
|
|
result = {
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
"out_province_poultry_request_quantity": out_province_poultry_request_quantity,
|
|
"out_province_poultry_request_weight": out_province_poultry_request_weight,
|
|
"province_live_quantity": province_live_quantity,
|
|
"province_live_weight": province_live_weight,
|
|
"province_carcasses_weight": province_carcasses_weight,
|
|
"internal_pure_province_carcasses_weight": internal_pure_province_carcasses_weight,
|
|
"external_pure_province_carcasses_weight": external_pure_province_carcasses_weight,
|
|
"total_pure_internal_province_carcasses_amount": total_pure_internal_province_carcasses_amount,
|
|
"total_pure_external_province_carcasses_amount": total_pure_external_province_carcasses_amount,
|
|
"out_province_poultry_request_amount": out_province_poultry_request_amount,
|
|
"total_wage": total_wage,
|
|
"number_of_deposit": len(vet_deposit),
|
|
"vet_deposit_amount": vet_deposit_amount,
|
|
"total_remain_wage": total_remain_wage,
|
|
}
|
|
return result
|
|
|
|
|
|
def get_vet_sub_sector_finance_info_with_date(vet,date1,date2):
|
|
total_quantity = 0
|
|
total_weight = 0
|
|
total_wage = 0
|
|
total_wage_type = WageType.objects.filter(trash=False)
|
|
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
|
free_sell_carcasses_wage_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
|
out_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
|
trash=False).first().amount
|
|
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
other_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='other').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
|
|
|
|
other_out_poultry_request_percent = percentages_wage_type.filter(wage_type__en_name='poultry-sell-out-province',
|
|
share_type__en_name='other').first().percent / 100
|
|
other_province_kill_request_amount = province_live_wage_amount * other_province_kill_request_percent
|
|
other_free_sell_carcasses_amount = free_sell_carcasses_wage_amount * other_free_sell_carcasses_percent
|
|
|
|
other_out_poultry_request_amount = out_poultry_request_wage_amount * other_out_poultry_request_percent
|
|
|
|
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
|
if date1:
|
|
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
|
province_state__in=('pending', 'accepted'), out=True,
|
|
out_province_request_cancel=False, temporary_trash=False,
|
|
wage_pay=True, has_wage=True,
|
|
temporary_deleted=False, vet_farm=vet, send_date__date__gte=date1,
|
|
send_date__date__lte=date2)
|
|
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,
|
|
province_request__poultry_request__vet_farm=vet,
|
|
clearance_code__isnull=False,
|
|
# clearance_code__isnull=False,
|
|
trash=False, calculate_status=True, kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2
|
|
)
|
|
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet=vet, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
|
state='accepted',acceptor_date__date__gte=date1,acceptor_date__date__lte=date2)
|
|
else:
|
|
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
|
province_state__in=('pending', 'accepted'), out=True,
|
|
out_province_request_cancel=False, temporary_trash=False,
|
|
wage_pay=True, has_wage=True,
|
|
temporary_deleted=False, vet_farm=vet,
|
|
)
|
|
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,
|
|
province_request__poultry_request__vet_farm=vet,
|
|
clearance_code__isnull=False,
|
|
# clearance_code__isnull=False,
|
|
trash=False, calculate_status=True
|
|
)
|
|
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
|
state='accepted')
|
|
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet=vet)
|
|
|
|
# quarantine_code__isnull=False)
|
|
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
|
'total'] or 0
|
|
out_province_poultry_request_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
'total'] or 0
|
|
|
|
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
|
# archive_wage=False, return_to_province=False,
|
|
# state__in=('pending', 'accepted'),
|
|
# province_request__poultry_request__vet_farm=vet,
|
|
# province_request__poultry_request__quarantine_code__isnull=False,
|
|
#
|
|
# first_car_allocated_quantity=0).order_by('id')
|
|
|
|
|
|
# province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# province_live_quantity = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
|
# 'total'] or 0
|
|
province_live_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
|
province_live_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
|
'total'] or 0
|
|
province_live_weight += \
|
|
difference_requests.aggregate(total=Sum('weight'))['total'] or 0
|
|
total_quantity += province_live_quantity + out_province_poultry_request_quantity
|
|
total_weight += province_live_weight + out_province_poultry_request_weight
|
|
|
|
province_carcasses_weight = province_live_weight * 0.75
|
|
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent(date1,date2)
|
|
external_pure_province_carcasses_weight = province_carcasses_weight - internal_pure_province_carcasses_weight
|
|
|
|
total_pure_internal_province_carcasses_amount = internal_pure_province_carcasses_weight * other_province_kill_request_amount
|
|
total_pure_external_province_carcasses_amount = external_pure_province_carcasses_weight * other_free_sell_carcasses_amount
|
|
out_province_poultry_request_amount = out_province_poultry_request_weight * other_out_poultry_request_amount
|
|
|
|
vet_deposit_amount = vet_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
|
total_wage += total_pure_internal_province_carcasses_amount + total_pure_external_province_carcasses_amount + out_province_poultry_request_amount
|
|
total_remain_wage = total_wage - vet_deposit_amount
|
|
|
|
result = {
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
"out_province_poultry_request_quantity": out_province_poultry_request_quantity,
|
|
"out_province_poultry_request_weight": out_province_poultry_request_weight,
|
|
"province_live_quantity": province_live_quantity,
|
|
"province_live_weight": province_live_weight,
|
|
"province_carcasses_weight": province_carcasses_weight,
|
|
"internal_pure_province_carcasses_weight": internal_pure_province_carcasses_weight,
|
|
"external_pure_province_carcasses_weight": external_pure_province_carcasses_weight,
|
|
"total_pure_internal_province_carcasses_amount": total_pure_internal_province_carcasses_amount,
|
|
"total_pure_external_province_carcasses_amount": total_pure_external_province_carcasses_amount,
|
|
"out_province_poultry_request_amount": out_province_poultry_request_amount,
|
|
"total_wage": total_wage,
|
|
"number_of_deposit": len(vet_deposit),
|
|
"vet_deposit_amount": vet_deposit_amount,
|
|
"total_remain_wage": total_remain_wage,
|
|
}
|
|
return result
|