Files
Rasadyar_Marzaki/panel/poultry/excel_processing.py
2026-01-18 11:45:53 +03:30

10772 lines
530 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import datetime
from io import BytesIO
import jdatetime
import openpyxl
from django.db.models import Sum, Q, F
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Alignment, Font
from openpyxl.utils import get_column_letter
from django.http import HttpResponse, QueryDict
from panel.KillHouse.serializers import BarDifferenceRequestSerializer
from panel.convert_date import convert_to_shamsi
from panel.filterset import PoultryHatchingFilterSet, PoultryManageFilterSet, BarDifferenceRequestFilterSet, \
PoultryRequestDirectBuyingFilterSet
from panel.helper import build_query
from panel.helper_excel import shamsi_date, create_header, excel_description, create_header_freez, create_value, \
add_chart, convert_str_to_date
from panel.models import Poultry, PoultryHatching, CityOperator, VetFarm, PoultryRequest, KillHouseRequest, \
ProvinceKillRequest, KillHouseAssignmentInformation, KillHouseVet, VetCheckRequest, BarDifferenceRequest, KillHouse, \
FreeSaleWithinprovince, ShowMarketRequest
from authentication.models import (
SystemUserProfile,
)
from panel.poultry.helpers import poultry_prediction_helper
from panel.poultry.serializers import PoultryHatchingForPredictionSerializer, PoultryRequestForDirectBuyingSerializer
def management_poultry(request):
filterset_class = PoultryManageFilterSet
poultreis = Poultry.objects.filter(trash=False).select_related('user', 'address__province', 'address__city')
if 'role' in request.GET:
user = SystemUserProfile.objects.get(key=request.GET['key'])
if request.GET['role'] == 'CityOperator':
city_operator = CityOperator.objects.get(trash=False, user=user)
poultrys = poultreis.filter(poultry__city_operator=city_operator.unit_name)
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
poultrys = poultreis.filter(poultry__user__city=user.city)
else:
poultrys = Poultry.objects.filter(trash=False).select_related('user', 'address__province', 'address__city')
else:
poultrys = poultreis
value = request.GET.get('value')
search = request.GET.get('search')
if value and search == 'filter':
if value != 'undefined' and value.strip():
poultrys = poultreis.filter(
build_query(filterset_class, value)
)
excel_options = [
'ردیف',
'نام واحد',
'مالک',
'تلفن',
'شناسه یکتا',
'کد اپیدمیولوژیک',
'کد بهداشتی',
'تعداد سالن',
'ظرفیت فارم',
'استان/شهر',
'تعاونی',
'دامپزشک فارم/موبایل',
'جوجه ریزی فعال',
'تعداد دوره جوجه ریزی',
'مجموع جوجه ریزی',
'میانگین جوجه ریزی',
'تعداد درخواست کشتار',
'حجم درخواست کشتار',
'تعداد بار',
'حجم بار',
'وزن بار',
'میانگین وزن',
'تعداد بار مستند',
'حجم بار مستند',
'وزن بار مستند',
'میانگین وزنی بار مستند',
'تعداد بار خارج استان',
'حجم بار خارج استان',
'وزن تقریبی بار',
'میانگین وزن',
'تعداد بار ورودی به انبار',
'حجم ورودی به انبار',
'وزن ورودی به انبار',
'میانگین درصد افت',
]
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
blue_fill = PatternFill(start_color="1E487B", fill_type="solid")
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
for col_num, option in enumerate(excel_options, 1):
col_letter = get_column_letter(col_num)
cell = worksheet.cell(row=5, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = blue_fill
cell.font = Font(size=10, bold=True, color='D9FFFFFF')
worksheet.column_dimensions[col_letter].width = 20.01
worksheet.row_dimensions[5].height = 18
worksheet.freeze_panes = worksheet['A6']
max_col = worksheet.max_column
range_str = f'A5:{get_column_letter(max_col)}{worksheet.max_row}'
worksheet.auto_filter.ref = range_str
header_list2 = [
'تعداد فارم ها',
'تعداد کل دوره جوجه ریزی ',
'میانگین کل دوره جوجه ریزی فارم ها ',
'حجم کل جوجه ریزی ',
'جوجه ریزی های فعال',
'حجم جوجه ریزی فعال ',
'حجم مانده در سالن فعال',
'تعداد کل درخواست کشتار',
'حجم کل درخواست کشتار',
'تعداد کل بار',
'حجم کل بار',
'وزن کل بار',
'میانگین کل وزن',
'تعداد کل بار مستند',
'حجم کل بار مستند',
'وزن کل بار مستند',
'میانگین وزنی کل بار مستند',
'تعداد کل بار خارج استان',
'حجم کل بار خارج استان',
'وزن کل تقریبی بار خارج استان',
'میانگین وزن کل بار خارج استان',
'تعداد بار ورودی به انبار',
'حجم ورودی به انبار',
'وزن ورودی به انبار',
'میانگین درصد افت',
]
for col_num, option in enumerate(header_list2, 3):
cell = worksheet.cell(row=2, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = PatternFill(start_color="00B050", fill_type="solid")
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
worksheet.row_dimensions[2].height = 20.8
l = 4
m = 1
all_hatching_pending = 0
all_total_quantity = 0
all_poultry_request = 0
all_kill_request = 0
all_kill_request_quantity = 0
all_kill_request_weight = 0
all_kill_request_has_assigment = 0
all_kill_request_quantity_assigment = 0
all_kill_request_weight_assigment = 0
all_total_quantity_poultry_hatching_pending = 0
all_total_left_over_poultry_hatching_pending = 0
all_total_quantity_poultry_request = 0
all_len_out_poultry_request = 0
all_total_out_quantity_poultry_request = 0
all_total_out_weight_poultry_request = 0
all_period = 0
len_werhouse_enter = 0
all_werhouse_enter_quantity = 0
all_werhouse_enter_weight = 0
all_all_weight_loss = 0
for poultry in poultrys:
user_mobile = poultry.user.mobile if poultry.user else '-'
user_name = poultry.user.fullname if poultry.user else '-'
city_operator = poultry.city_operator if poultry.city_operator else '-'
health_certificate_number = poultry.health_certificate_number if poultry.health_certificate_number else '-'
epidemiological_code = poultry.epidemiological_code if poultry.epidemiological_code else '-'
vet_farm = VetFarm.objects.filter(poultry=poultry, trash=False).select_related('vet__user').last()
vet_name = '-'
mobile_vet = '-'
if vet_farm:
vet_name = vet_farm.vet.user.fullname
mobile_vet = vet_farm.vet.user.mobile
poultry_hatching = PoultryHatching.objects.filter(poultry=poultry, trash=False).only('quantity', 'left_over'
)
poultry_hatching_pending = poultry_hatching.filter(state='pending', allow_hatching='pending',
archive=False).last()
if poultry_hatching_pending:
all_hatching_pending += 1
hatching = 'ندارد' if not poultry_hatching_pending else f'دارد'
period = 0
if poultry_hatching_pending:
period = poultry_hatching_pending.period
else:
if poultry_hatching:
period = poultry_hatching.last().period
all_period += period
poultry_hatching_pending1 = poultry_hatching.filter(state='pending', allow_hatching='pending',
archive=False)
total_quantity = \
poultry_hatching.aggregate(total=Sum('quantity'))[
'total'] or 0
total_quantity_poultry_hatching_pending = \
poultry_hatching_pending1.aggregate(total=Sum('quantity'))[
'total'] or 0
total_left_over_poultry_hatching_pending = \
poultry_hatching_pending1.aggregate(total=Sum('left_over'))[
'total'] or 0
all_total_quantity += total_quantity
all_total_quantity_poultry_hatching_pending += total_quantity_poultry_hatching_pending
all_total_left_over_poultry_hatching_pending += total_left_over_poultry_hatching_pending
poultry_request = PoultryRequest.objects.filter(trash=False, poultry=poultry,
state_process__in=('accepted', 'pending'),
province_state__in=('accepted', 'pending')).only('quantity',
'Index_weight')
kill_request = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__in=poultry_request).only(
'accepted_real_quantity', 'accepted_real_weight')
out_poultry_request = poultry_request.filter(out=True, out_province_request_cancel=False).only(
'quantity', 'Index_weight'
)
total_out_quantity_poultry_request = \
out_poultry_request.aggregate(total=Sum('quantity'))[
'total'] or 0
total_out_weight_poultry_request = \
out_poultry_request.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
'total'] or 0
all_total_out_quantity_poultry_request += total_out_quantity_poultry_request
all_total_out_weight_poultry_request += total_out_weight_poultry_request
all_len_out_poultry_request += len(out_poultry_request)
total_quantity_poultry_request = \
poultry_request.aggregate(total=Sum('quantity'))[
'total'] or 0
all_total_quantity_poultry_request += total_quantity_poultry_request
all_poultry_request += len(poultry_request)
all_kill_request += len(kill_request)
kill_request_quantity = kill_request.aggregate(
total=Sum('accepted_real_quantity'))[
'total'] or 0
all_kill_request_quantity += kill_request_quantity
kill_request_weight = kill_request.aggregate(
total=Sum('accepted_real_weight'))[
'total'] or 0
all_kill_request_weight += int(kill_request_weight)
kill_request_has_assigment = kill_request.filter(assignment_state_archive='True').only('accepted_real_quantity',
'accepted_real_weight')
all_kill_request_has_assigment += len(kill_request_has_assigment)
kill_request_quantity_assigment = kill_request_has_assigment.aggregate(
total=Sum('accepted_real_quantity'))[
'total'] or 0
all_kill_request_quantity_assigment += kill_request_quantity_assigment
kill_request_weight_assigment = kill_request_has_assigment.aggregate(
total=Sum('accepted_real_weight'))[
'total'] or 0
all_kill_request_weight_assigment += int(kill_request_weight_assigment)
werhouse_enter = kill_request.filter(ware_house_confirmation=True).only('ware_house_accepted_real_quantity',
'ware_house_accepted_real_weight',
'weight_loss')
werhouse_enter_quantity = werhouse_enter.aggregate(
total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
werhouse_enter_weight = werhouse_enter.aggregate(
total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
all_weight_loss = werhouse_enter.aggregate(
total_quantity=Sum('weight_loss')).get(
'total_quantity', 0) or 0
all_all_weight_loss += all_weight_loss
all_weight_loss = round(int(all_weight_loss) / len(werhouse_enter), 2) if len(werhouse_enter) > 0 else 0
len_werhouse_enter += len(werhouse_enter)
all_werhouse_enter_quantity += werhouse_enter_quantity
all_werhouse_enter_weight += int(werhouse_enter_weight)
province = poultry.user.province.name if poultry.user else '-'
city = poultry.user.city.name if poultry.user else '-'
list1 = [
m,
poultry.unit_name,
user_name,
user_mobile,
poultry.breeding_unique_id,
epidemiological_code,
health_certificate_number,
poultry.number_of_halls,
poultry.total_capacity,
province + '/' + city,
city_operator,
vet_name + '/' + mobile_vet,
hatching,
period,
total_quantity,
round(total_quantity / period) if period > 0 else 0,
len(poultry_request),
total_quantity_poultry_request,
len(kill_request),
kill_request_quantity,
int(kill_request_weight),
round(kill_request_weight / kill_request_quantity, 1) if kill_request_weight > 0 else 0,
len(kill_request_has_assigment),
kill_request_quantity_assigment,
int(kill_request_weight_assigment),
round(kill_request_weight_assigment / kill_request_quantity_assigment,
1) if kill_request_weight_assigment > 0 else 0,
len(out_poultry_request),
total_out_quantity_poultry_request,
int(total_out_weight_poultry_request),
str(round(total_out_weight_poultry_request / total_out_quantity_poultry_request,
1)) if total_out_quantity_poultry_request > 0 else 0,
len(werhouse_enter),
werhouse_enter_quantity,
int(werhouse_enter_weight),
f'%{all_weight_loss}',
]
l += 1
for item in range(len(list1)):
cell = worksheet.cell(row=l + 1, column=item + 1, value=list1[item])
value = list1[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
m += 1
row_1 = m - 1
value_header_list = [
m - 1,
all_period,
round(all_period / row_1) if m > 1 else 0,
all_total_quantity,
all_hatching_pending,
all_total_quantity_poultry_hatching_pending,
all_total_left_over_poultry_hatching_pending,
all_poultry_request,
all_total_quantity_poultry_request,
all_kill_request,
all_kill_request_quantity,
all_kill_request_weight,
(round(all_kill_request_weight / all_kill_request_quantity, 1)) if all_kill_request_quantity > 0 else 0,
all_kill_request_has_assigment,
all_kill_request_quantity_assigment,
all_kill_request_weight_assigment,
str(round(all_kill_request_weight_assigment / all_kill_request_quantity_assigment,
1)) if all_kill_request_quantity_assigment > 0 else 0,
all_len_out_poultry_request,
all_total_out_quantity_poultry_request,
int(all_total_out_weight_poultry_request),
str(round(all_total_out_weight_poultry_request / all_total_out_quantity_poultry_request,
1)) if all_total_out_quantity_poultry_request > 0 else 0,
len_werhouse_enter,
all_werhouse_enter_quantity,
all_werhouse_enter_weight,
f'%{round(int(all_all_weight_loss) / len_werhouse_enter, 2) if len_werhouse_enter > 0 else 0}',
]
for item in range(len(value_header_list)):
cell = worksheet.cell(row=3, column=item + 3, value=value_header_list[item])
value = value_header_list[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center')
cell.font = Font(size=10, bold=True)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_total_quantity,
'',
all_poultry_request,
all_total_quantity_poultry_request,
all_kill_request,
all_kill_request_quantity,
all_kill_request_weight,
'',
all_kill_request_has_assigment,
all_kill_request_quantity_assigment,
all_kill_request_weight_assigment,
'',
all_len_out_poultry_request,
all_total_out_quantity_poultry_request,
int(all_total_out_weight_poultry_request),
str(round(all_total_out_weight_poultry_request / all_total_out_quantity_poultry_request,
1)) if all_total_out_quantity_poultry_request > 0 else 0,
len_werhouse_enter,
all_werhouse_enter_quantity,
all_werhouse_enter_weight,
f'%{round(int(all_all_weight_loss) / len_werhouse_enter, 2) if len_werhouse_enter > 0 else 0}',
]
for item in range(len(list2)):
cell = worksheet.cell(row=l + 3, column=item + 1, value=list2[item])
value = list2[item]
if isinstance(value, (int)):
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center')
cell.font = Font(size=10, bold=True)
cell.font = Font(bold=True)
cell.fill = PatternFill(start_color="00B050", fill_type="solid")
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="مدیریت مرغداران.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def hatching_excel(request):
filterset_class = PoultryHatchingFilterSet
unknown = True if 'unknown' in request.GET else False
poultry_hatch = PoultryHatching.objects.filter(archive=False,
allow_hatching='pending',
trash=False,unknown=unknown).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
filterset_fields = [
'poultry__user__first_name',
'poultry__user__last_name',
'poultry__user__mobile',
'poultry__unit_name',
'poultry__address__city__name',
'chicken_age',
'poultry__breeding_unique_id',
]
if 'role' in request.GET:
user = SystemUserProfile.objects.get(key=request.GET['key'])
if request.GET['role'] in ['CityJahad', 'CityPoultry']:
filtered_poultry_hatch = poultry_hatch.filter(poultry__address__city=user.city)
elif request.GET['role'] == 'CityOperator':
city_operator = CityOperator.objects.get(user=user)
filtered_poultry_hatch = poultry_hatch.filter(poultry__city_operator=city_operator.unit_name)
elif request.GET['role'] == 'ProvinceOperator':
if 'chain' in request.GET:
filtered_poultry_hatch = poultry_hatch.filter(has_chain_company=True)
else:
filtered_poultry_hatch = poultry_hatch
else:
filtered_poultry_hatch = poultry_hatch
else:
filtered_poultry_hatch = poultry_hatch
if 'age2' in request.GET:
if int(request.GET.get('age2')) > 0:
age1 = int(request.GET.get('age1'))
age2 = int(request.GET.get('age2'))
filtered_poultry_hatch = filtered_poultry_hatch.filter(trash=False, chicken_age__gte=age1,
chicken_age__lte=age2)
else:
filtered_poultry_hatch = filtered_poultry_hatch
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
blue_fill = PatternFill(start_color="1E487B", fill_type="solid")
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
red_font = Font(color="C00000", bold=True)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False, final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False, province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'', # وضعیت
'', # شماره مجوز جوجه ریزی
'', # شناسه یکتا
'', # مجوز بهداشتی جوجه ریزی
'', # نام فارم
'', # مرغدار
'', # بهره برداری
'', # مالکیت
'', # ارتباط
'', # شهر/تعاونی
'', # دامپزشک فارم
'', # سالن
'', # دوره جوجه ریزی
'', # تاریخ ثبت جوجه ریزی
'', # تاریخ جوجه ریزی
'', # میانگین سن کشتار
'', # پیش بینی تاریخ کشتار
'', # نژاد
'', # سن ورود به بایگانی
'', # تاریخ ورود به بایگانی
'', # سن فعلی
all_quantity, # حجم جوجه ریزی
'', # حجم افزایشی
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="جوجه ریزی.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def get_vet_farm_name(poultry):
"""Get vet farm name for poultry"""
try:
from panel.models import VetFarm
vet_farm = VetFarm.objects.filter(poultry=poultry, trash=False).first()
if vet_farm and vet_farm.vet:
return vet_farm.vet.user.fullname
except:
pass
return '-'
def calculate_predicted_kill_date(poultry_hatching):
"""Calculate predicted kill date based on age and average kill age"""
try:
if poultry_hatching.poultry.killing_ave_age and poultry_hatching.chicken_age:
remaining_days = poultry_hatching.poultry.killing_ave_age - poultry_hatching.chicken_age
if remaining_days > 0:
predicted_date = poultry_hatching.date + datetime.timedelta(days=remaining_days)
return convert_to_shamsi(year=predicted_date.year, month=predicted_date.month, day=predicted_date.day)
except:
pass
return '-'
def calculate_current_age(poultry_hatching):
"""Calculate current age of chickens"""
try:
if poultry_hatching.date:
current_date = datetime.datetime.now().date()
age = (current_date - poultry_hatching.date.date()).days
return age
except:
pass
return poultry_hatching.chicken_age
def calculate_governmental_killed_weight(poultry_hatching):
"""Calculate governmental killed weight"""
try:
if poultry_hatching.governmental_killed_quantity and poultry_hatching.total_average_killed_weight:
return round(poultry_hatching.governmental_killed_quantity * poultry_hatching.total_average_killed_weight, 2)
except:
pass
return 0
def calculate_free_killed_weight(poultry_hatching):
"""Calculate free killed weight"""
try:
if poultry_hatching.free_killed_quantity and poultry_hatching.total_average_killed_weight:
return round(poultry_hatching.free_killed_quantity * poultry_hatching.total_average_killed_weight, 2)
except:
pass
return 0
def calculate_governmental_commitment_weight(poultry_hatching):
"""Calculate governmental commitment weight"""
try:
if poultry_hatching.governmental_quantity and poultry_hatching.total_average_killed_weight:
return round(poultry_hatching.governmental_quantity * poultry_hatching.total_average_killed_weight, 2)
except:
pass
return 0
def calculate_unloaded_allocations(poultry_hatching):
"""Calculate unloaded allocations count"""
try:
from panel.models import ProvinceKillRequest
unloaded = ProvinceKillRequest.objects.filter(
trash=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching,
first_car_allocated_quantity=0,
return_to_province=False
).count()
return unloaded
except:
pass
return 0
def calculate_unloaded_allocations_quantity(poultry_hatching):
"""Calculate unloaded allocations quantity"""
try:
from panel.models import ProvinceKillRequest
from django.db.models import Sum
quantity = ProvinceKillRequest.objects.filter(
trash=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching,
first_car_allocated_quantity=0,
return_to_province=False
).aggregate(total=Sum('total_killed_quantity'))['total'] or 0
return quantity
except:
pass
return 0
def calculate_unloaded_allocations_weight(poultry_hatching):
"""Calculate unloaded allocations weight"""
try:
from panel.models import ProvinceKillRequest
from django.db.models import Sum
weight = ProvinceKillRequest.objects.filter(
trash=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching,
first_car_allocated_quantity=0,
return_to_province=False
).aggregate(total=Sum('total_killed_weight'))['total'] or 0
return weight
except:
pass
return 0
def calculate_radar_discharge_confirmation(poultry_hatching):
"""Calculate radar discharge confirmation"""
# This would need to be implemented based on your specific radar system
return '-'
def calculate_active_kill_count(poultry_hatching):
"""Calculate active kill count"""
try:
from panel.models import PoultryRequest
active_count = PoultryRequest.objects.filter(
trash=False,
state_process__in=('pending', 'accepted'),
province_state__in=('pending', 'accepted'),
out_province_request_cancel=False,
hatching=poultry_hatching
).count()
return active_count
except:
pass
return 0
def calculate_kill_request_count(poultry_hatching):
"""Calculate total kill request count"""
try:
from panel.models import ProvinceKillRequest, KillHouseRequest
province_count = ProvinceKillRequest.objects.filter(
trash=False,
province_request__poultry_request__hatching=poultry_hatching
).count()
kill_house_count = KillHouseRequest.objects.filter(
trash=False,
province_request__poultry_request__hatching=poultry_hatching
).count()
return province_count + kill_house_count
except:
pass
return 0
def archive_hatching_excel(request):
filterset_class = PoultryHatchingFilterSet
filterset_fields = [
'poultry__user__first_name',
'poultry__user__last_name',
'poultry__user__mobile',
'poultry__unit_name',
'poultry__address__city__name',
'chicken_age',
'poultry__breeding_unique_id',
]
filtered_poultry_hatch = PoultryHatching.objects.filter(
Q(allow_hatching=True, state='complete') | Q(archive=True),
trash=False
).select_related('poultry', 'poultry__user').order_by('-create_date')
if 'date1' in request.GET:
date1 = datetime.datetime.strptime(request.GET['date1'], '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(request.GET['date2'], '%Y-%m-%d').date()
filtered_poultry_hatch = filtered_poultry_hatch.filter(date__date__gte=date1, date__date__lte=date2)
user = SystemUserProfile.objects.get(key=request.GET['key'])
if 'chain' in request.GET:
filtered_poultry_hatch = filtered_poultry_hatch.filter(has_chain_company=True)
if request.GET['role'] in ['CityJahad', 'CityPoultry']:
filtered_poultry_hatch = filtered_poultry_hatch.filter(poultry__address__city=user.city)
elif request.GET['role'] == 'CityOperator':
city_operator = CityOperator.objects.get(user=user)
filtered_poultry_hatch = filtered_poultry_hatch.filter(poultry__city_operator=city_operator.unit_name)
else:
filtered_poultry_hatch = filtered_poultry_hatch
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'دامپزشک فارم',
'سالن',
'دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیش بینی تاریخ کشتار',
'نژاد',
'سن ورود به بایگانی',
'تاریخ ورود به بایگانی',
'سن فعلی',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک',
'تلفات اتحادیه',
'تلفات کل',
'حجم تعهد دولتی',
'حجم تعهد آزاد',
'حجم کشتار دولتی',
'وزن کشتار دولتی',
'حجم کشتار آزاد',
'وزن کشتار شده آزاد',
'حجم فروش به خارج استان',
'وزن فروش به خارج استان',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'حجم کشتار شده',
'حجم مانده در سالن',
'تلفات',
'کشتار شده',
'باقی مانده در سالن',
'تایید تخلیه رصدیار',
'تایید تخلیه در سماصط',
'وزن تعهد دولتی',
'وزن کشتار دولتی',
'وزن کشتار آزاد',
'میانگین وزن کشتار',
'وزن کل کشتار شده',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بارها',
'حجم بارها',
'وزن بارها',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'بارهای ورودی به انبار',
'حجم لاشه های انبار',
'وزن لاشه های انبار',
'درصد افت بارها',
'آخرین تغییر',
'سازنده جوجه ریزی'
]
date1 = datetime.datetime.now().date()
from_date_1 = shamsi_date(date1)
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = convert_to_shamsi(year=poultry_hatching.create_date.year,
month=poultry_hatching.create_date.month,
day=poultry_hatching.create_date.day, )
date = convert_to_shamsi(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = poultry_hatching.chicken_age
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
list1 = [
m, # ردیف
farm_state, # وضعیت
poultry_hatching.licence_number, # شماره مجوز جوجه ریزی
poultry_hatching.poultry.breeding_unique_id, # شناسه یکتا
poultry_hatching.poultry.health_certificate_number if poultry_hatching.poultry.health_certificate_number else '-', # مجوز بهداشتی جوجه ریزی
poultry_hatching.poultry.unit_name, # نام فارم
poultry_hatching.poultry.user.fullname, # مرغدار
poultry_hatching.poultry.person_type if poultry_hatching.poultry.person_type else '-', # بهره برداری
'مالک' if not poultry_hatching.poultry.has_tenant else 'مستاجر', # مالکیت
poultry_hatching.poultry.communication_type if poultry_hatching.poultry.communication_type else '-', # ارتباط
f"{poultry_hatching.poultry.user.city.name}/{poultry_hatching.poultry.city_operator}" if poultry_hatching.poultry.city_operator else poultry_hatching.poultry.user.city.name, # شهر/تعاونی
get_vet_farm_name(poultry_hatching.poultry), # دامپزشک فارم
poultry_hatching.hall, # سالن
poultry_hatching.period, # دوره جوجه ریزی
str(create_date), # تاریخ ثبت جوجه ریزی
str(date), # تاریخ جوجه ریزی
poultry_hatching.poultry.killing_ave_age, # میانگین سن کشتار
calculate_predicted_kill_date(poultry_hatching), # پیش بینی تاریخ کشتار
poultry_hatching.chicken_breed, # نژاد
poultry_hatching.chicken_age, # سن ورود به بایگانی
convert_to_shamsi(year=poultry_hatching.archive_date.year, month=poultry_hatching.archive_date.month, day=poultry_hatching.archive_date.day) if poultry_hatching.archive_date else '-', # تاریخ ورود به بایگانی
calculate_current_age(poultry_hatching), # سن فعلی
poultry_hatching.quantity, # حجم جوجه ریزی
poultry_hatching.increase_quantity if hasattr(poultry_hatching, 'increase_quantity') else 0, # حجم افزایشی
poultry_hatching.losses, # تلفات دامپزشک
poultry_hatching.direct_losses, # تلفات اتحادیه
poultry_hatching.total_losses, # تلفات کل
poultry_hatching.total_commitment, # حجم تعهد دولتی
poultry_hatching.free_quantity, # حجم تعهد آزاد
poultry_hatching.governmental_killed_quantity, # حجم کشتار دولتی
calculate_governmental_killed_weight(poultry_hatching), # وزن کشتار دولتی
poultry_hatching.free_killed_quantity, # حجم کشتار آزاد
calculate_free_killed_weight(poultry_hatching), # وزن کشتار شده آزاد
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else 0, # حجم فروش به خارج استان
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else 0, # وزن فروش به خارج استان
calculate_unloaded_allocations(poultry_hatching), # تخصیصات بدون بار
calculate_unloaded_allocations_quantity(poultry_hatching), # حجم تخصیصات بدون بار
calculate_unloaded_allocations_weight(poultry_hatching), # وزن تخصیصات بدون بار
poultry_hatching.killed_quantity, # حجم کشتار شده
poultry_hatching.left_over, # حجم مانده در سالن
poultry_hatching.total_losses, # تلفات
poultry_hatching.killed_quantity, # کشتار شده
poultry_hatching.left_over, # باقی مانده در سالن
calculate_radar_discharge_confirmation(poultry_hatching), # تایید تخلیه رصدیار
poultry_hatching.samasat_discharge_percentage if hasattr(poultry_hatching, 'samasat_discharge_percentage') else 0, # تایید تخلیه در سماصط
calculate_governmental_commitment_weight(poultry_hatching), # وزن تعهد دولتی
calculate_governmental_killed_weight(poultry_hatching), # وزن کشتار دولتی
calculate_free_killed_weight(poultry_hatching), # وزن کشتار آزاد
str(poultry_hatching.total_average_killed_weight), # میانگین وزن کشتار
poultry_hatching.total_killed_weight, # وزن کل کشتار شده
calculate_active_kill_count(poultry_hatching), # تعداد کشتار فعال
calculate_kill_request_count(poultry_hatching), # تعداد درخواست کشتار
len(kill_house_requests), # تعداد بارها
first_quantity, # حجم بارها
first_weight, # وزن بارها
accepted_real_quantity_final, # حجم بارهای تحویلی
accepted_real_wight_final, # وزن بارهای تحویلی
poultry_hatching.chain_killed_quantity if hasattr(poultry_hatching, 'chain_killed_quantity') else 0, # حجم زنجیره
poultry_hatching.chain_killed_weight if hasattr(poultry_hatching, 'chain_killed_weight') else 0, # وزن زنجیره
poultry_hatching.export_killed_quantity if hasattr(poultry_hatching, 'export_killed_quantity') else 0, # حجم صادرات
poultry_hatching.export_killed_weight if hasattr(poultry_hatching, 'export_killed_weight') else 0, # وزن صادرات
len(ware_house_bars), # بارهای ورودی به انبار
ware_house_bars_quantity, # حجم لاشه های انبار
ware_house_bars_weight, # وزن لاشه های انبار
str(round(ware_house_bars_weight_lose / len(ware_house_bars), 2) if ware_house_bars else 0), # درصد افت بارها
shamsi_date(convert_str_to_date(poultry_hatching.last_change.get('date', ''))) if poultry_hatching.last_change and poultry_hatching.last_change.get('date') else '', # آخرین تغییر
creator, # سازنده جوجه ریزی
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_killed_quantity,
all_total_killed_weight,
all_left_over,
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename=" جوجه ریزی بایگانی شده.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def hatching_age_range_excel(request):
filtered_poultry_hatchs = PoultryHatching.objects.filter(state__in=('pending', 'complete'), archive=False,
allow_hatching='pending',
trash=False).order_by('-create_date').select_related(
'poultry')
if 'role' in request.GET:
user = SystemUserProfile.objects.get(key=request.GET['key'])
if request.GET['role'] == 'CityOperator':
city_operator = CityOperator.objects.get(trash=False, user=user)
filtered_poultry_hatch = filtered_poultry_hatchs.filter(poultry__city_operator=city_operator.unit_name)
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
filtered_poultry_hatch = filtered_poultry_hatchs.filter(poultry__user__city=user.city)
else:
filtered_poultry_hatch = filtered_poultry_hatchs
else:
filtered_poultry_hatch = filtered_poultry_hatchs
excel_options = [
'ردیف',
'نام فارم',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'نژاد',
'سن',
'تعداد جوجه ریزی',
'تلفات دوره',
'کشتار شده',
'مانده در سالن',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
blue_fill = PatternFill(start_color="1E487B", fill_type="solid")
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
header_list = [
'تعداد کل فارم ها',
'مجموع جوجه ریزی',
'مجموع کشتار شده',
'مجموع مانده در سالن',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
for col_num, option in enumerate(header_list, 3):
col_letter = get_column_letter(col_num)
cell = worksheet.cell(row=2, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = PatternFill(start_color="31869B", fill_type="solid")
cell.font = Font(size=10, bold=True, color='FFFFFF')
worksheet.row_dimensions[2].height = 30
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style='thin'),
right=openpyxl.styles.Side(style='thin'),
top=openpyxl.styles.Side(style='thin'),
bottom=openpyxl.styles.Side(style='thin')
)
for col_num, option in enumerate(excel_options, 1):
col_letter = get_column_letter(col_num)
cell = worksheet.cell(row=5, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = blue_fill
cell.font = Font(size=10, bold=True, color='D9FFFFFF')
worksheet.column_dimensions[col_letter].width = 20.01
worksheet.row_dimensions[1].height = 18
worksheet.freeze_panes = worksheet['A6']
max_col = worksheet.max_column
range_str = f'A5:{get_column_letter(max_col)}{worksheet.max_row}'
worksheet.auto_filter.ref = range_str
l = 4
m = 1
for poultry_hatching in filtered_poultry_hatch:
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
poultry_requests = PoultryRequest.objects.filter(hatching=poultry_hatching, trash=False).only('quantity')
age = (datetime.datetime.now().date() - poultry_hatching.date.date()).days + 1
quantity_sum = 0
for poultry_request in poultry_requests:
if poultry_request and hasattr(poultry_request, 'quantity'):
quantity_sum += poultry_request.quantity
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
list1 = [
m,
poultry_hatching.poultry.unit_name,
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.losses,
poultry_hatching.killed_quantity,
poultry_hatching.left_over,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
for item in range(len(list1)):
cell = worksheet.cell(row=l + 1, column=item + 1, value=list1[item])
cell.alignment = Alignment(horizontal='center')
value = list1[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
m += 1
total_poultry_hatchings_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity') or 0
total_poultry_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity') or 0
total_poultry_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity') or 0
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
value_list = [
m - 1,
total_poultry_hatchings_quantity,
total_poultry_killed_quantity,
total_poultry_left_over,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
]
for item in range(len(value_list)):
cell = worksheet.cell(row=3, column=item + 3, value=value_list[item])
cell.alignment = Alignment(horizontal='center')
value = value_list[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="موجودی جوجه ریزی (مانده در سالن) بر اساس بازه سنی.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def poultry_monitoring_excel(request):
poultreis = Poultry.objects.filter(trash=False, key=request.GET['key']).select_related('user', 'address__province',
'address__city').first()
hatchings = PoultryHatching.objects.filter(trash=False, poultry=poultreis).order_by('id')
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
workbook.remove(worksheet)
sheet_name = ['اطلاعات کلی', 'مدیریت بارها']
for sheet_names in sheet_name:
worksheet = workbook.create_sheet(sheet_names)
if sheet_names == 'اطلاعات کلی':
excel_options = [
' جوجه ریزی مرحله',
'نام واحد',
'نام مالک',
'تاریخ جوجه ریزی',
'تعداد جوجه ریزی',
'نود درصد جوجه ریزی',
'مجموع تلفات',
'مانده در سالن',
'متوسط سن کشتار',
'تعداد ثبت سفارش',
'تعداد درخواست کشتار (قطعه)',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد تخصیصی استان به خریدار(قطعه)',
'وزن تخصیصی استان به خریدار(کیلوگرم)',
'درصد کشتار نسبت به نود درصد',
'مجموع تخصیصی به ماشین(قطعه)',
'مجموع وزن تخصیصی به ماشین(کیلوگرم)',
'تعداد تخلیه شده دامپزشک',
'وزن تخلیه شده دامپزشک',
'تعداد نهایی در کشتارگاه',
'وزن نهایی در کشتار گاه',
'تعداد بار های وارد شده در انبار',
'مجموع تعداد لاشه',
'مجموع وزن لاشه',
'میانگین درصد افت لاشه',
'حجم کشتار',
'وزن کشتار',
'عملکرد فارم',
]
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
blue_fill = PatternFill(start_color="1E487B", fill_type="solid")
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
for col_num, option in enumerate(excel_options, 3):
col_letter = get_column_letter(col_num)
cell = worksheet.cell(row=3, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = PatternFill(start_color="31869B", fill_type="solid")
cell.font = Font(size=9, bold=True, color='FFFFFF')
worksheet.row_dimensions[3].height = 36
worksheet.column_dimensions[col_letter].width = 14
now = datetime.datetime.now().date()
now_date = jdatetime.date.fromgregorian(
year=now.year,
month=now.month,
day=now.day
).strftime('%Y-%m-%d')
reversed_date = reversed(now_date.split("-"))
separate = "-"
date_now = separate.join(reversed_date)
row_list2 = len(hatchings) + 10
row_city = len(hatchings) + 8
province = poultreis.user.province.name
worksheet[
f'F1'] = f'گزارش پایش اطلاعاتی {poultreis.unit_name} سامانه رصدیار استان {province} در تاریخ{date_now} '
worksheet[f'F1'].font = Font(color="C00000", bold=True, size=12)
worksheet[f'F1'].alignment = Alignment(horizontal='center', vertical='center',
wrap_text=True)
merge_range1 = f'F1:I2'
worksheet.merge_cells(merge_range1)
l = 4
all_quantity_of_car1 = 0
average_age_list1 = []
all_weight1 = []
all_weight_of_car1 = 0
all_main_quantity1 = 0
sum_all_quantity_vet_kill1 = 0
sum_all_wight_vet_kill1 = 0
sum_net_weight1 = 0
sum_real_quantity_assigment1 = 0
sum_accepted_real_quantity1 = 0
sum_accepted_real_weight1 = 0
all_loses1 = 0
all_all_quantity_of_request1 = 0
len_werhouse_enter1 = 0
all_werhouse_enter_quantity1 = 0
all_werhouse_enter_weight1 = 0
all_all_weight_loss1 = 0
for hatching in hatchings:
final_left_over = []
all_quantity_of_car = 0
average_age_list = []
all_percent = 0
m = 1
all_weight = []
all_quantity_of_car_vet_state_accepted = 0
request_weight = []
all_request_weight = []
all_free_sale_in_province_true = 0
all_kill_province_request_poultry_request_Index_weight = []
all_weight_of_car = 0
all_weight_of_car_vet_state_accepted = 0
all_main_quantity = 0
sum_quantity_qarantineh = 0
sum_all_quantity_vet_kill = 0
sum_all_wight_vet_kill = 0
sum_net_weight = 0
sum_real_quantity_assigment = 0
sum_accepted_real_quantity = 0
sum_accepted_real_weight = 0
all_free_sale_in_province_false = 0
all_loses = 0
all_province_quantity = 0
quantity = hatching.quantity
ninety_percent = hatching.quantity
all_len_werhouse_enter = 0
all_werhouse_enter_quantity = 0
all_werhouse_enter_weight = 0
all_all_weight_loss = 0
killed = 0
hatch_date = jdatetime.date.fromgregorian(
day=hatching.date.day,
month=hatching.date.month,
year=hatching.date.year
)
poultry_requests = PoultryRequest.objects.filter(out_province_request_cancel=False, trash=False,
hatching=hatching,
archive=False,
state_process__in=('accepted', 'pending')).order_by(
'id')
werhouse_enter1 = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=hatching,
ware_house_confirmation=True)
werhouse_enter_quantity1 = werhouse_enter1.aggregate(
total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
werhouse_enter_weight1 = werhouse_enter1.aggregate(
total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
all_weight_loss2 = werhouse_enter1.aggregate(
total_quantity=Sum('weight_loss')).get(
'total_quantity', 0) or 0
all_all_weight_loss1 += all_weight_loss2
all_weight_loss1 = round(int(all_weight_loss2) / len(werhouse_enter1), 2) if len(
werhouse_enter1) > 0 else 0
len_werhouse_enter1 += len(werhouse_enter1)
all_werhouse_enter_quantity1 += werhouse_enter_quantity1
all_werhouse_enter_weight1 += int(werhouse_enter_weight1)
excel_options = [
'ردیف',
'کد سفارش',
'تاریخ ثبت درخواست',
'تاریخ کشتار',
'سن کشتار',
'نوع درخواست',
'فروش',
'تعداد درخواست کشتار',
'میانگین وزنی درخواست',
'وزن کل درخواست ',
'ماهیت خریدار',
'خریدار',
'تلفن خریدار',
'تعداد تخصیصی استان به خریدار(قطعه)',
'وزن تخصیصی استان به خریدار',
'مانده در سالن',
' تعداد بار',
'تعداد بار قطعه',
'وزن بار',
'تعداد قطعه وارد شده در قرنطینه',
'تعداد تخلیه شده دامپزشک',
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
'تعداد نهایی در کشتارگاه',
'وزن نهایی در کشتار گاه',
'تعداد بار ورود به انبار',
'حجم بار ورود به انبار',
'وزن بار ورود به انبار',
'درصد افت',
'حجم کشتار',
'وزن کشتار',
]
if poultry_requests:
worksheet[f'E{row_list2 - 2}'] = f'اطلاعات جوجه ریزی {hatching.period}'
worksheet[f'E{row_list2 - 2}'].font = Font(color="C00000", bold=True, size=12)
worksheet[f'E{row_list2 - 2}'].alignment = Alignment(horizontal='center', vertical='center',
wrap_text=True)
merge_range1 = f'E{row_list2 - 2}:I{row_list2 - 1}'
worksheet.merge_cells(merge_range1)
for col_num, option in enumerate(excel_options, 1):
col_letter = get_column_letter(col_num)
cell = worksheet.cell(row=row_list2, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = blue_fill
cell.font = Font(size=10, bold=True, color='D9FFFFFF')
worksheet.column_dimensions[col_letter].width = 20
worksheet.row_dimensions[row_list2].height = 36
for poultry_request in poultry_requests:
all_loses += poultry_request.hatching.losses
all_loses1 += poultry_request.hatching.losses
kill_request = ProvinceKillRequest.objects.filter(
province_request__poultry_request=poultry_request,
trash=False,
state__in=('pending', 'accepted'),
return_to_province=False).select_related(
'killhouse_user', 'province_request__poultry_request').order_by('-create_date')
car_date = jdatetime.date.fromgregorian(
day=poultry_request.send_date.day,
month=poultry_request.send_date.month,
year=poultry_request.send_date.year
)
create_date = jdatetime.date.fromgregorian(
day=poultry_request.create_date.day,
month=poultry_request.create_date.month,
year=poultry_request.create_date.year
)
average_age = (poultry_request.send_date.date() - hatching.date.date()).days + 1
average_age_list.append(average_age)
average_age_list1.append(average_age)
if poultry_request.direct_buying == True:
type = 'خرید مستقیم'
else:
type = 'اتحادیه'
free_sale_in_province_false = 0
Index_weight_sale_in_province_false = 0
free_sale_in_province_true = 0
all_province_quantity += poultry_request.quantity
if poultry_request.out == True:
sale_type = 'خارج از استان'
elif poultry_request.free_sale_in_province == False:
free_sale_in_province_false = poultry_request.quantity
all_free_sale_in_province_false += free_sale_in_province_false
Index_weight_sale_in_province_false = poultry_request.Index_weight
sale_type = 'دولتی'
else:
sale_type = 'آزاد'
free_sale_in_province_true = poultry_request.quantity
all_free_sale_in_province_true += free_sale_in_province_true
all_request_weight.append(poultry_request.Index_weight * poultry_request.quantity)
list1 = [
m,
str(poultry_request.order_code),
str(create_date),
str(car_date),
average_age,
type,
sale_type,
poultry_request.quantity,
poultry_request.Index_weight,
round(poultry_request.quantity * poultry_request.Index_weight, 2),
# poultry_request.quantity,
]
m += 1
for item in range(len(list1)):
cell = worksheet.cell(row=row_list2 + 1, column=item + 1, value=list1[item])
value = list1[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style='thin'),
right=openpyxl.styles.Side(style='thin'),
top=openpyxl.styles.Side(style='thin'),
bottom=openpyxl.styles.Side(style='thin')
)
# worksheet.column_dimensions[get_column_letter(item + 1)].width = 17.01
worksheet.row_dimensions[row_list2 + 1].height = 21
if m % 2 == 0:
cell.fill = PatternFill(start_color="DAE1F6", fill_type="solid")
# l += 1
if kill_request.exists():
o = row_list2 + 1
if len(kill_request) > 1:
s = len(kill_request) - 1
for col in range(ord('A'), ord('J') + 1):
# rng = chr(col) + '7:{}'.format(r)
rng = f'{chr(col)}{o}:{chr(col)}{o + s}'
worksheet.merge_cells(rng)
worksheet[chr(col) + f'{o}'].alignment = Alignment(horizontal='center',
vertical='center')
for kill in kill_request:
all_main_quantity += kill.main_quantity
all_main_quantity1 += kill.main_quantity
state_s = ''
if kill.state == 'pending':
state_s = 'درانتظار تایید'
elif kill.state == 'accepted':
state_s = ' تایید شده'
quantity_of_car_vet_state_accepted = 0
weight_of_car_vet_state_accepted = 0
quantity_of_car = 0
weight_of_car = 0
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_kill_request=kill).order_by(
'id').only('create_date', 'vet_state')
all_net_weight = 0
all_real_quantity_assigment = 0
werhouse_enter = kill_house_requests.filter(ware_house_confirmation=True).only(
'ware_house_accepted_real_quantity',
'ware_house_accepted_real_weight',
'weight_loss')
len_werhouse_enter = len(werhouse_enter)
werhouse_enter_quantity = werhouse_enter.aggregate(
total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
werhouse_enter_weight = werhouse_enter.aggregate(
total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
all_weight_loss = werhouse_enter.aggregate(
total_quantity=Sum('weight_loss')).get(
'total_quantity', 0) or 0
all_len_werhouse_enter += len_werhouse_enter
all_werhouse_enter_quantity += werhouse_enter_quantity
all_werhouse_enter_weight += werhouse_enter_weight
all_all_weight_loss += all_weight_loss
all_weight_loss = round(int(all_weight_loss) / len(werhouse_enter), 2) if len(
werhouse_enter) > 0 else 0
if kill_house_requests:
for kill_house_request in kill_house_requests:
assignment = KillHouseAssignmentInformation.objects.filter(
kill_house_request=kill_house_request, trash=False).only('net_weight',
'real_quantity').first()
if assignment:
all_net_weight += assignment.net_weight if assignment.net_weight != None else 0
all_real_quantity_assigment += assignment.real_quantity if assignment.real_quantity != None else 0
quantity_of_car += kill_house_request.quantity
all_quantity_of_car += kill_house_request.quantity
all_quantity_of_car1 += kill_house_request.quantity
weight_of_car += int(
kill_house_request.quantity * kill_house_request.province_request.poultry_request.Index_weight)
if kill_house_request.vet_state == 'accepted':
quantity_of_car_vet_state_accepted += kill_house_request.quantity
weight_of_car_vet_state_accepted += kill_house_request.accepted_real_weight
all_quantity_of_car_vet_state_accepted += kill_house_request.quantity
killed += kill.main_quantity
all_quantity_qarantineh = kill_house_requests.aggregate(
total_quantity=Sum('quarantine_quantity')).get(
'total_quantity', 0)
all_quantity_vet_kill = kill_house_requests.aggregate(
total_quantity=Sum('vet_accepted_real_quantity')).get(
'total_quantity', 0)
all_weight_vet_kill = kill_house_requests.aggregate(
total_quantity=Sum('vet_accepted_real_weight')).get(
'total_quantity', 0)
all_accepted_real_quantity = kill_house_requests.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0)
all_accepted_real_weight = kill_house_requests.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity', 0)
sum_all_wight_vet_kill += all_weight_vet_kill if all_weight_vet_kill != None else 0
sum_all_wight_vet_kill1 += all_weight_vet_kill if all_weight_vet_kill != None else 0
sum_all_quantity_vet_kill += all_quantity_vet_kill if all_quantity_vet_kill != None else 0
sum_all_quantity_vet_kill1 += all_quantity_vet_kill if all_quantity_vet_kill != None else 0
sum_quantity_qarantineh += all_quantity_qarantineh if all_quantity_qarantineh != None else 0
sum_accepted_real_quantity += all_accepted_real_quantity if all_accepted_real_quantity != None else 0
sum_accepted_real_quantity1 += all_accepted_real_quantity if all_accepted_real_quantity != None else 0
sum_accepted_real_weight += all_accepted_real_weight if all_accepted_real_weight != None else 0
sum_accepted_real_weight1 += all_accepted_real_weight if all_accepted_real_weight != None else 0
left_over = (quantity - killed)
final_left_over.append(left_over)
percent_after_assigment = (quantity_of_car_vet_state_accepted * 100) / quantity
all_percent += percent_after_assigment
all_weight.append(
kill.main_quantity * kill.province_request.poultry_request.Index_weight)
all_weight1.append(
kill.main_quantity * kill.province_request.poultry_request.Index_weight)
killer = 'کشتارکن' if kill.killhouse_user.killer == True else 'کشتارگاه'
request_weight.append(Index_weight_sale_in_province_false)
all_kill_province_request_poultry_request_Index_weight.append(
kill.province_request.poultry_request.Index_weight)
all_weight_of_car_vet_state_accepted += weight_of_car_vet_state_accepted
all_weight_of_car += weight_of_car
all_weight_of_car1 += weight_of_car
list1 = [
killer,
kill.killhouse_user.name,
kill.killhouse_user.kill_house_operator.user.mobile,
kill.main_quantity,
kill.province_request.poultry_request.Index_weight,
left_over,
len(kill_house_requests) if kill_house_requests else 0,
quantity_of_car,
weight_of_car,
all_quantity_qarantineh if all_quantity_qarantineh else '-',
all_quantity_vet_kill if all_quantity_vet_kill else '-',
all_weight_vet_kill if all_weight_vet_kill else '-',
all_real_quantity_assigment if all_real_quantity_assigment > 0 else '-',
all_net_weight if all_net_weight > 0 else '-',
len_werhouse_enter,
werhouse_enter_quantity,
int(werhouse_enter_weight),
f'%{all_weight_loss}',
all_accepted_real_quantity if all_accepted_real_quantity else '-',
all_accepted_real_weight if all_accepted_real_weight else '-',
]
for item in range(len(list1)):
cell = worksheet.cell(row=row_list2 + 1, column=item + 11, value=list1[item])
value = list1[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style='thin'),
right=openpyxl.styles.Side(style='thin'),
top=openpyxl.styles.Side(style='thin'),
bottom=openpyxl.styles.Side(style='thin')
)
# worksheet.column_dimensions[get_column_letter(item + 11)].width = 17.01
# worksheet.column_dimensions[get_column_letter(item + 11)].height = 20.01
if m % 2 == 0:
cell.fill = PatternFill(start_color="DAE1F6", fill_type="solid")
row_list2 += 1
sum_net_weight += all_net_weight
sum_net_weight1 += all_net_weight
sum_real_quantity_assigment += all_real_quantity_assigment
sum_real_quantity_assigment1 += all_real_quantity_assigment
else:
if poultry_request.out == True:
left_over = (quantity - killed)
list1 = [
'خارج از استان',
poultry_request.buyer_fullname,
poultry_request.buyer_mobile,
poultry_request.quantity,
int(poultry_request.Index_weight),
left_over,
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
poultry_request.quantity,
int(poultry_request.quantity * poultry_request.Index_weight),
]
for item in range(len(list1)):
cell = worksheet.cell(row=row_list2 + 1, column=item + 11, value=list1[item])
value = list1[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style='thin'),
right=openpyxl.styles.Side(style='thin'),
top=openpyxl.styles.Side(style='thin'),
bottom=openpyxl.styles.Side(style='thin')
)
# worksheet.column_dimensions[get_column_letter(item + 11)].width = 17.01
# worksheet.column_dimensions[get_column_letter(item + 11)].height = 20.01
if m % 2 == 0:
cell.fill = PatternFill(start_color="DAE1F6", fill_type="solid")
sum_accepted_real_weight += int(
poultry_request.quantity * poultry_request.Index_weight)
sum_accepted_real_weight1 += int(
poultry_request.quantity * poultry_request.Index_weight)
sum_accepted_real_quantity += poultry_request.quantity
sum_accepted_real_quantity1 += poultry_request.quantity
else:
list1 = [
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
'-',
]
for item in range(len(list1)):
cell = worksheet.cell(row=row_list2 + 1, column=item + 11, value=list1[item])
value = list1[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style='thin'),
right=openpyxl.styles.Side(style='thin'),
top=openpyxl.styles.Side(style='thin'),
bottom=openpyxl.styles.Side(style='thin')
)
# worksheet.column_dimensions[get_column_letter(item + 11)].width = 17.01
# worksheet.column_dimensions[get_column_letter(item + 11)].height = 20.01
if m % 2 == 0:
cell.fill = PatternFill(start_color="DAE1F6", fill_type="solid")
row_list2 += 1
try:
dd = round(sum(all_kill_province_request_poultry_request_Index_weight) / len(
all_kill_province_request_poultry_request_Index_weight))
except:
dd = 0
list2 = [
'مجموع==>',
'',
'',
'',
f'',
'',
'',
int(all_province_quantity),
'',
int(sum(all_request_weight)),
'',
'',
'',
int(all_main_quantity),
int(dd),
f'',
'',
int(all_quantity_of_car),
int(all_weight_of_car),
int(sum_quantity_qarantineh),
int(sum_all_quantity_vet_kill),
int(sum_all_wight_vet_kill),
int(sum_real_quantity_assigment),
int(sum_net_weight),
all_len_werhouse_enter,
all_werhouse_enter_quantity,
all_werhouse_enter_weight,
f'%{round(int(all_all_weight_loss) / all_len_werhouse_enter, 2) if all_len_werhouse_enter > 0 else 0}',
int(sum_accepted_real_quantity),
int(sum_accepted_real_weight),
]
for item in range(len(list2)):
cell = worksheet.cell(row=row_list2 + 2, column=item + 1, value=list2[item])
value = list2[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center')
cell.font = Font(bold=True)
cell.fill = PatternFill(start_color="00B050", fill_type="solid")
row_list2 += 8
row_city += 6
try:
avrage_age1 = round((sum(average_age_list) / len(average_age_list)))
except:
avrage_age1 = 0
all_quantity_of_request = poultry_requests.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity') or 0
row_header = 1
all_all_quantity_of_request1 += all_quantity_of_request
value_header_list = [
hatching.period,
hatching.poultry.unit_name,
hatching.poultry.user.fullname,
str(hatch_date),
quantity,
ninety_percent,
all_loses,
hatching.left_over,
avrage_age1,
len(poultry_requests),
all_quantity_of_request,
hatching.out_province_killed_quantity,
hatching.out_province_killed_weight,
all_main_quantity,
sum(all_weight),
round((hatching.killed_quantity * 100) / ninety_percent),
all_quantity_of_car,
all_weight_of_car,
sum_all_quantity_vet_kill,
sum_all_wight_vet_kill,
sum_real_quantity_assigment,
int(sum_net_weight),
len(werhouse_enter1),
werhouse_enter_quantity1,
werhouse_enter_weight1,
f'%{round(all_weight_loss2 / len(werhouse_enter1), 2) if len(werhouse_enter1) > 0 else 0}',
sum_accepted_real_quantity,
sum_accepted_real_weight,
f'%{int((sum_accepted_real_quantity * 100) / quantity if quantity > 0 else 0)}',
]
for item in range(len(value_header_list)):
cell = worksheet.cell(row=l, column=item + 3, value=value_header_list[item])
value = value_header_list[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style='thin'),
right=openpyxl.styles.Side(style='thin'),
top=openpyxl.styles.Side(style='thin'),
bottom=openpyxl.styles.Side(style='thin')
)
# worksheet.column_dimensions[get_column_letter(item + 11)].width = 17.01
# worksheet.column_dimensions[get_column_letter(item + 11)].height = 20.01
l += 1
row_header += 1
else:
all_left_over = hatchings.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity') or 0
all_quantity = hatchings.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity') or 0
out_province_killed_quantity = hatchings.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity') or 0
out_province_killed_weight = hatchings.aggregate(total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity') or 0
ninety_percent = (all_quantity * 90) / 100
value_header_list = [
'مجموع==>',
'',
'',
'',
all_quantity,
ninety_percent,
all_loses1,
all_left_over,
'',
'',
all_all_quantity_of_request1,
out_province_killed_quantity,
out_province_killed_weight,
all_main_quantity1,
sum(all_weight1),
'',
all_quantity_of_car1,
all_weight_of_car1,
sum_all_quantity_vet_kill1,
sum_all_wight_vet_kill1,
sum_real_quantity_assigment1,
int(sum_net_weight1),
len_werhouse_enter1,
all_werhouse_enter_quantity1,
all_werhouse_enter_weight1,
'',
sum_accepted_real_quantity1,
sum_accepted_real_weight1,
'',
]
nn = len(hatchings) + 4
for item in range(len(value_header_list)):
cell = worksheet.cell(row=nn, column=item + 3, value=value_header_list[item])
value = value_header_list[item]
# Check if the value is a number before formatting
if isinstance(value, (int, float)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center')
cell.font = Font(bold=True)
cell.fill = PatternFill(start_color="00B050", fill_type="solid")
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style='thin'),
right=openpyxl.styles.Side(style='thin'),
top=openpyxl.styles.Side(style='thin'),
bottom=openpyxl.styles.Side(style='thin')
)
else:
filtered_kill_request = KillHouseRequest.objects.filter(
trash=False, province_request__poultry_request__poultry=poultreis
).order_by(
'-create_date').select_related(
'killhouse_user', 'province_request__poultry_request__poultry__user',
'province_request__poultry_request',
'province_request__poultry_request__poultry', 'add_car__driver',
'killhouse_user__system_address__city',
'kill_request__slaughter_house').only('ware_house_confirmation',
'document_status', 'ware_house_accepted_real_quantity',
'ware_house_accepted_real_weight', 'weight_loss', 'message',
'province_request__poultry_request__freezing',
'province_request__poultry_request', 'traffic_code',
'assignment_state_archive',
'province_request__poultry_request__hatching__chicken_age',
'killhouse_user__kill_house_operator__user__province__name',
'killhouse_user',
'killhouse_user__name',
'province_request__poultry_request__amount',
'killhouse_user__kill_house_operator__user__mobile',
'killhouse_user__system_address__city__name',
'killhouse_user__killer',
'kill_request__slaughter_house',
'kill_request__slaughter_house__name',
'province_request__poultry_request__poultry',
'province_request__poultry_request__order_code',
'province_request__poultry_request__chicken_breed',
'province_request__poultry_request__poultry__user__city__name',
'province_request__poultry_request__poultry__unit_name',
'province_request__poultry_request__poultry__user__mobile',
'province_request__poultry_request__send_date',
'province_kill_request__province_request__poultry_request__Index_weight',
'add_car__driver__driver_name',
'add_car__driver__driver_mobile',
'add_car__driver__type_car',
'add_car__driver__health_code',
'key',
'clearance_code',
'quantity',
'bar_code',
'accepted_real_weight',
'accepted_real_quantity',
'vet_state', 'vet_accepted_real_quantity',
'vet_accepted_real_weight', 'quarantine_quantity',
'province_kill_request__province_request__poultry_request__free_sale_in_province',
'province_kill_request__province_request__poultry_request__union',
'province_kill_request__province_request__poultry_request__direct_buying',
'quarantine_code_state',
'province_request__poultry_request__send_date',
'province_request__poultry_request__hatching__date',
'killer__kill_house_operator__user__mobile',
'killer__name',
'killhouse_user__type', 'killer').values('document_status',
'ware_house_confirmation',
'ware_house_accepted_real_quantity',
'ware_house_accepted_real_weight',
'weight_loss',
'message',
'province_request__poultry_request__freezing',
'province_request__poultry_request',
'killhouse_user',
'killhouse_user__name',
'killhouse_user__kill_house_operator__user__mobile',
'killhouse_user__system_address__city__name',
'killhouse_user__killer',
'kill_request__slaughter_house',
'kill_request__slaughter_house__name',
'province_request__poultry_request__poultry',
'province_request__poultry_request__order_code',
'province_request__poultry_request__chicken_breed',
'province_request__poultry_request__poultry__user__city__name',
'province_request__poultry_request__poultry__unit_name',
'province_request__poultry_request__poultry__user__mobile',
'province_request__poultry_request__send_date',
'add_car__driver__driver_name',
'add_car__driver__driver_mobile',
'add_car__driver__type_car',
'add_car__driver__health_code',
'key',
'province_kill_request__province_request__poultry_request__Index_weight',
'clearance_code',
'quantity',
'bar_code',
'accepted_real_weight',
'accepted_real_quantity',
'vet_state',
'vet_accepted_real_quantity',
'vet_accepted_real_weight',
'quarantine_quantity',
'killhouse_user__kill_house_operator__user__province__name',
'province_request__poultry_request__hatching__chicken_age',
'province_request__poultry_request__amount',
'assignment_state_archive',
'traffic_code',
'province_kill_request__province_request__poultry_request__free_sale_in_province',
'province_kill_request__province_request__poultry_request__union',
'province_kill_request__province_request__poultry_request__direct_buying',
'quarantine_code_state',
'province_request__poultry_request__send_date',
'province_request__poultry_request__hatching__date',
'killer__kill_house_operator__user__mobile',
'killer__name',
'killhouse_user__type',
'killer',
)
filtered_kill_reqs = filtered_kill_request
poultry_request = (PoultryRequest.objects.filter(trash=False, pk__in=filtered_kill_reqs.values(
'province_request__poultry_request'))
.only('quantity', 'Index_weight')).annotate(
total_quantity=Sum('quantity'),
total_weight=Sum(F('quantity') * F('Index_weight'))
)
total_requests_quantity = poultry_request.aggregate(total=Sum('total_quantity'))['total'] or 0
total_requests_weight = poultry_request.aggregate(total=Sum('total_weight'))['total'] or 0
excel_options = [
'ردیف',
'کد بار',
' تاریخ کشتار',
'کشتار',
'کدسفارش مرغدار',
'مرغدار',
'تلفن مرغدار',
' شهر مرغدار',
'فروش',
'سن مرغ',
'قیمت پیشنهادی مرغدار(ریال)',
' نژاد',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
' ماهیت خریدار',
'خریدار',
' تلفن خریدار',
' آدرس ',
'کشتارکن اختصاصی',
'تلفن کشتارکن اختصاصی',
' محل کشتار ',
'نوع تخصیص',
'دامپزشک کشتارگاه ',
' تلفن دامپزشک کشتارگاه ',
'راننده',
'موبایل راننده',
'نوع خودرو',
'کد بهداشتی حمل و نقل',
'تعداد قطعه بار ',
'وزن بار',
'کد رهگیری سامانه قرنطینه',
'تعداد قطعه وارد شده در قرنطینه',
'وضعیت تخلیه',
'تاریخ تخلیه (کشتارگاه)',
'تعداد تخلیه شده دامپزشک',
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
'تعداد نهایی در کشتارگاه',
'وزن نهایی در کشتار گاه',
'ملاک قطعه کشتار شده',
'ملاک وزن کشتار شده',
'وضعیت',
'وضعیت سند',
'وضعیت ورود انبار',
'تعداد لاشه',
'وزن لاشه',
'درصد افت',
]
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
blue_fill = PatternFill(start_color="1E487B", fill_type="solid")
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
red_font = Font(color="C00000", bold=True)
for col_num, option in enumerate(excel_options, 1):
col_letter = get_column_letter(col_num)
cell = worksheet.cell(row=6, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = blue_fill
cell.font = Font(size=10, bold=True, color='D9FFFFFF')
if len(option) > worksheet.column_dimensions[col_letter].width:
worksheet.column_dimensions[col_letter].width = len(option) + 3
# تنظیم ارتفاع سطر
# ارتفاع سطر را برابر با ارتفاع آخرین سطر قرار می‌دهیم
worksheet.row_dimensions[6].height = 19
worksheet.freeze_panes = worksheet['A7']
max_col = worksheet.max_column
range_str = f'A6:{get_column_letter(max_col)}{worksheet.max_row}'
worksheet.auto_filter.ref = range_str
header_list = [
'تعداد بارهای ایجاد شده',
'تعداد بارهای دارای کشتارکن اختصاصی',
'مجموع تعداد قطعه بارها',
'مجموع وزن بارها',
'تعداد بارهای دارای کد قرنطینه',
'تعداد بار احراز شده از قرنطینه',
'مجموع تعداد قطعه احراز شده از قرنطینه',
'تعداد تخلیه شده دامپزشک',
'مجموع تعداد تخلیه شده دامپزشک',
'مجموع وزن تخلیه شده دامپزشک',
'تعداد بارهای تکمیل شده',
'مجموع تعداد نهایی در کشتارگاه',
'مجموع وزن نهایی در کشتار گاه',
'ملاک قطعه کشتار شده',
'ملاک وزن کشتار شده',
'تعداد بار های وارد شده در انبار',
'مجموع تعداد لاشه',
'مجموع وزن لاشه',
'میانگین درصد افت لاشه',
]
for col_num, option in enumerate(header_list, 9):
cell = worksheet.cell(row=2, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = PatternFill(start_color="0070C0", fill_type="solid")
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
worksheet.row_dimensions[2].height = 20.8
header_list2 = [
'تعداد درخواست مرغداران',
' مجموع تعداد قطعه درخواست مرغداران',
' مجموع وزن درخواست مرغداران',
]
for col_num, option in enumerate(header_list2, 6):
cell = worksheet.cell(row=2, column=col_num, value=option)
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
cell.fill = PatternFill(start_color="00B050", fill_type="solid")
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
worksheet.row_dimensions[2].height = 20.8
worksheet['B1'] = f'گزارش بارهای ایجاد شده در فرآیند کشتار مرغ گوشتی'
if filtered_kill_reqs.exists():
name = filtered_kill_reqs.first()['killhouse_user__kill_house_operator__user__province__name']
worksheet['B2'] = f'استان {name}'
# worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
worksheet['B3'].alignment = Alignment(horizontal='center', vertical='center')
worksheet['B1'].alignment = Alignment(horizontal='center', vertical='center')
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center')
merge_range1 = 'B1:D1'
merge_range2 = 'B2:D2'
merge_range = 'B3:D3'
worksheet.merge_cells(merge_range1)
worksheet.merge_cells(merge_range)
worksheet.merge_cells(merge_range2)
worksheet['B1'].font = red_font
worksheet['B3'].font = Font(size=11)
worksheet['B2'].font = Font(size=10, bold=True, color="C00000")
l = 5
m = 1
all_quantity = 0
all_real_quantity = 0
all_net_weighte = 0
all_weighte = 0
all_vet_state_accepted = len(
filtered_kill_reqs.filter(vet_state='accepted'))
bar_complete = filtered_kill_reqs.filter(assignment_state_archive='True')
accepted_real_quantity = filtered_kill_reqs.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
accepted_real_wight = filtered_kill_reqs.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
all_kill_request_quantity = filtered_kill_reqs.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity') or 0
all_vet_accepted_real_quantity = filtered_kill_reqs.aggregate(
total_quantity=Sum('vet_accepted_real_quantity')).get(
'total_quantity') or 0
all_vet_accepted_real_weight = filtered_kill_reqs.aggregate(
total_quantity=Sum('vet_accepted_real_weight')).get(
'total_quantity') or 0
killer_exclusive = 0
all_assignment_state_archive_state = 0
len_weight_loss = 0
all_state_ware_house_confirmation = 0
if filtered_kill_reqs:
for kill in filtered_kill_reqs:
if (kill['assignment_state_archive'] == 'True' and kill['vet_state'] == 'pending') or kill[
'vet_state'] == 'accepted':
state = 'تخلیه شده'
else:
state = 'درانتظار تخلیه'
l += 1
date_of_inner_bar = '-'
vet_farm = VetFarm.objects.filter(
poultry=kill.get('province_request__poultry_request__poultry'),
trash=False).select_related('vet__user').only('vet__user__fullname',
'vet__user__mobile').values(
'vet__user__fullname',
'vet__user__mobile').first()
vet_farm_name = vet_farm.get('vet__user__fullname') if vet_farm else '-'
vet_farm_mobile = vet_farm.get('vet__user__mobile') if vet_farm else '-'
kil_house_vet = KillHouseVet.objects.filter(kill_house=kill.get('killhouse_user'),
trash=False).select_related(
'vet__user').only('vet__user__fullname',
'vet__user__mobile').values('vet__user__fullname',
'vet__user__mobile').first()
vet_checks = VetCheckRequest.objects.filter(trash=False,
kill_house_request__key=kill.get('key')).only(
'create_date').values(
'create_date').first()
kill_house_vet_name = kil_house_vet.get('vet__user__fullname') if kil_house_vet else '-'
kill_house_vet_mobile = kil_house_vet.get('vet__user__mobile') if kil_house_vet else '-'
code = kill.get('clearance_code') if kill.get('clearance_code') else '-'
if kill.get('quantity'):
quantity = kill.get('quantity')
else:
quantity = '-'
send_date = kill.get('province_request__poultry_request__send_date')
date_of_poultry_request = jdatetime.date.fromgregorian(
day=send_date.day,
month=send_date.month,
year=send_date.year
)
killers = 'کشتارکن'
name_killer_exclusive = '-'
mobile_killer_exclusive = '-'
if kill.get('killhouse_user__killer') == False:
killers = 'کشتارگاه'
if kill.get('killer') != None:
name_killer_exclusive = kill['killer__name']
mobile_killer_exclusive = str(kill['killer__kill_house_operator__user__mobile'])
killer_exclusive += 1
assignment = KillHouseAssignmentInformation.objects.filter(
kill_house_request__key=kill.get('key'), trash=False).only('create_date', 'net_weight',
'real_quantity').values(
'net_weight', 'real_quantity', 'create_date').first()
if assignment:
net_weighte = int(assignment.get('net_weight'))
real_quantity = assignment.get('real_quantity')
vet_check_date = assignment.get('create_date')
date_of_inner_bar = convert_to_shamsi(
datetime=vet_check_date
)
else:
net_weighte = '-'
real_quantity = '-'
if vet_checks:
vet_check_date = vet_checks.get('create_date')
date_of_inner_bar = convert_to_shamsi(
datetime=vet_check_date
)
if kill.get('kill_request__slaughter_house') is not None:
kill_place = kill.get('kill_request__slaughter_house__name')
else:
kill_place = '-'
vet_quantity = kill['vet_accepted_real_quantity'] if kill['vet_accepted_real_quantity'] else '-'
vet_wight = int(kill['vet_accepted_real_weight']) if kill['vet_accepted_real_weight'] else '-'
weight = int(kill.get('quantity') * kill.get(
'province_kill_request__province_request__poultry_request__Index_weight'))
quarantine_quantity = '-'
if kill['quarantine_quantity'] != None:
quarantine_quantity = kill['quarantine_quantity']
else:
if kill['quarantine_code_state'] == 'contradiction':
quarantine_quantity = 'مغایرت کد رهگیری'
elif kill['quarantine_code_state'] == 'noclearance':
quarantine_quantity = 'فاقد کد رهگیری'
elif kill['quarantine_code_state'] == 'notconfirmed':
quarantine_quantity = 'عدم تایید راهداری'
sale_type = 'دولتی' if kill[
'province_kill_request__province_request__poultry_request__free_sale_in_province'] == False else 'آزاد'
if kill['province_kill_request__province_request__poultry_request__union'] == True:
type = 'فروش آزاد'
elif kill['province_kill_request__province_request__poultry_request__direct_buying'] == True:
type = 'خرید مستقیم'
else:
type = 'اتحادیه'
age = (kill.get('province_request__poultry_request__send_date').date() -
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
freez_state = 'منجمد' if kill['province_request__poultry_request__freezing'] == True else 'عادی'
if kill['message'] is not None:
state_delete = 'بار حذف شده'
else:
state_delete = 'فعال'
all_quantity += quantity
all_weighte += weight
all_real_quantity += real_quantity if real_quantity != '-' else 0
all_net_weighte += net_weighte if net_weighte != '-' else 0
ware_house_accepted_real_quantity = kill['ware_house_accepted_real_quantity']
ware_house_accepted_real_weight = kill['ware_house_accepted_real_weight']
weight_loss = round(kill['weight_loss'], 2) if kill['weight_loss'] > 0 else 0
if weight_loss > 0:
len_weight_loss += 1
if kill['ware_house_confirmation'] == True:
state_ware_house_confirmation = 'ورود به انبار'
all_state_ware_house_confirmation += 1
else:
state_ware_house_confirmation = '-'
list1 = [
m,
str(kill.get('bar_code')),
str(date_of_poultry_request),
freez_state,
str(kill.get('province_request__poultry_request__order_code')),
kill.get('province_request__poultry_request__poultry__unit_name'),
str(kill.get('province_request__poultry_request__poultry__user__mobile')),
kill.get('province_request__poultry_request__poultry__user__city__name'),
sale_type,
age,
kill.get('province_request__poultry_request__amount') if kill.get(
'province_request__poultry_request__amount') else '-',
kill.get('province_request__poultry_request__chicken_breed'),
vet_farm_name,
vet_farm_mobile,
killers,
kill.get('killhouse_user__name'),
kill.get('killhouse_user__kill_house_operator__user__mobile'),
kill.get('killhouse_user__system_address__city__name'),
name_killer_exclusive,
mobile_killer_exclusive,
kill_place,
type,
kill_house_vet_name,
kill_house_vet_mobile,
kill.get('add_car__driver__driver_name'),
kill.get('add_car__driver__driver_mobile'),
kill.get('add_car__driver__type_car'),
str(kill.get('traffic_code')),
quantity,
weight,
code,
quarantine_quantity,
state,
str(date_of_inner_bar),
vet_quantity,
vet_wight,
real_quantity,
net_weighte,
kill['accepted_real_quantity'],
int(kill['accepted_real_weight']),
state_delete,
kill['document_status'] if kill['document_status'] else '-',
state_ware_house_confirmation,
ware_house_accepted_real_quantity,
int(ware_house_accepted_real_weight),
f'{weight_loss}%',
]
m += 1
for item in range(len(list1)):
cell = worksheet.cell(row=l + 1, column=item + 1, value=list1[item])
value = list1[item]
if isinstance(value, (int)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
if list1[40] == 'بار حذف شده':
cell.fill = PatternFill(start_color="FCDFDC", fill_type="solid")
worksheet.row_dimensions[l + 1].height = 20
cell.alignment = Alignment(horizontal='center', vertical='center')
has_code = len(filtered_kill_reqs.filter(clearance_code__isnull=False))
all_quarantine_quantity = filtered_kill_reqs.aggregate(total_quantity=Sum('quarantine_quantity')).get(
'total_quantity', 0)
has_qarantine = len(filtered_kill_reqs.filter(quarantine_quantity__isnull=False))
all_ware_house_accepted_real_quantity = filtered_kill_reqs.aggregate(
total_quantity=Sum('ware_house_accepted_real_quantity')).get(
'total_quantity') or 0
all_ware_house_accepted_real_weight = filtered_kill_reqs.aggregate(
total_quantity=Sum('ware_house_accepted_real_weight')).get(
'total_quantity', 0) or 0
all_weight_loss = filtered_kill_reqs.aggregate(
total_quantity=Sum('weight_loss')).get(
'total_quantity', 0) or 0
all_weight_loss = round(int(all_weight_loss) / len_weight_loss, 2) if len_weight_loss > 0 else 0
value_header_list = [
len(filtered_kill_reqs),
killer_exclusive,
all_quantity,
int(all_weighte),
has_code,
has_qarantine,
all_quarantine_quantity if all_quarantine_quantity != None else 0,
all_vet_state_accepted,
all_vet_accepted_real_quantity,
int(all_vet_accepted_real_weight),
len(bar_complete),
all_real_quantity,
int(all_net_weighte),
accepted_real_quantity if accepted_real_quantity != None else 0,
int(accepted_real_wight) if accepted_real_wight != None else 0,
all_state_ware_house_confirmation,
all_ware_house_accepted_real_quantity,
int(all_ware_house_accepted_real_weight),
f'%{all_weight_loss}'
]
for item in range(len(value_header_list)):
cell = worksheet.cell(row=3, column=item + 9, value=value_header_list[item])
value = value_header_list[item]
# Check if the value is a number before formatting
if isinstance(value, (int)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center')
cell.font = Font(size=10, bold=True)
value_header_list2 = [
len(poultry_request),
total_requests_quantity,
int(total_requests_weight)
]
for item in range(len(value_header_list2)):
cell = worksheet.cell(row=3, column=item + 6, value=value_header_list2[item])
value = value_header_list2[item]
# Check if the value is a number before formatting
if isinstance(value, (int)):
if value != 0:
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center')
cell.font = Font(size=10, bold=True)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_kill_request_quantity,
int(all_weighte),
'',
all_quarantine_quantity if all_quarantine_quantity != None else 0,
'',
'',
all_vet_accepted_real_quantity,
int(all_vet_accepted_real_weight),
all_real_quantity,
int(all_net_weighte),
accepted_real_quantity if accepted_real_quantity != None else 0,
int(accepted_real_wight) if accepted_real_wight != None else 0,
'',
'',
'',
all_ware_house_accepted_real_quantity,
int(all_ware_house_accepted_real_weight),
f'%{all_weight_loss}'
]
for item in range(len(list2)):
cell = worksheet.cell(row=l + 3, column=item + 1, value=list2[item])
value = list2[item]
if isinstance(value, (int)):
cell.number_format = '#,###' # Apply general number format
else:
cell.value = value # Keep as text for other values
cell.alignment = Alignment(horizontal='center')
cell.font = Font(size=10, bold=True)
cell.font = Font(bold=True)
cell.fill = PatternFill(start_color="00B050", fill_type="solid")
name = poultreis.unit_name
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="پایش کلی اطلاعاتی مرغدار {name}.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def poultry_hatching_prediction_chart_excel(request):
consumption_limit_type = request.GET.get('consumption_limit_type')
consumption_limit = request.GET.get('consumption_limit')
killing_age_external_type = request.GET.get('killing_age_external_type')
killing_age_internal_type = request.GET.get('killing_age_internal_type')
killing_age = request.GET.get('killing_age')
time_frame_type = request.GET.get('time_frame_type')
date1 = request.GET.get('date1')
date2 = request.GET.get('date2')
date_list = []
final_list = []
poultries = Poultry.objects.filter(killing_ave_age__gt=1, trash=False)
if killing_age_external_type == 'poultry_ave_killing_age':
if killing_age_internal_type == 'poultry':
if time_frame_type == 'all':
hatchings = PoultryHatching.objects.filter(trash=False, state='pending',
archive=False, temporary_trash=False,
temporary_deleted=False, predicate_date__isnull=False)
date_list = hatchings.values_list('predicate_date', flat=True).distinct()
for date in date_list:
n_hatchings = hatchings.filter(predicate_date=date)
poultries = Poultry.objects.filter(pk__in=n_hatchings.values_list('poultry', flat=True))
ages = poultries.values_list('killing_ave_age', flat=True).distinct()
index_weight = poultries.aggregate(total=Sum('real_killing_ave_weight'))[
'total'] or 0
quantity = n_hatchings.aggregate(total=Sum('left_over'))[
'total'] or 0
result = {
"date": date,
"quantity": quantity,
"poultry": len(poultries),
"age": ages,
"hatchings": n_hatchings.values_list('id', flat=True),
"weight": int(quantity * index_weight) if consumption_limit_type in (
'quantity', 'live_weight') else int((quantity * index_weight) * 0.75),
}
final_list.append(result)
else:
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
hatchings = PoultryHatching.objects.filter(trash=False, state='pending',
archive=False, temporary_trash=False,
temporary_deleted=False, predicate_date__date__gte=date1,
predicate_date__date__lte=date2)
# poultries = poultries.filter(date__gte=date1,date__lte=date2).order_by('date')
date_list = poultries.values_list('date', flat=True).distinct()
for date in date_list:
n_hatchings = hatchings.filter(predicate_date__date=date)
poultries = Poultry.objects.filter(pk__in=n_hatchings.values_list('poultry', flat=True))
ages = poultries.values_list('killing_ave_age', flat=True).distinct()
index_weight = poultries.aggregate(total=Sum('real_killing_ave_weight'))[
'total'] or 0
quantity = n_hatchings.aggregate(total=Sum('left_over'))[
'total'] or 0
result = {
"date": date,
"quantity": quantity,
"poultry": len(poultries.filter(date=date)),
"age": ages,
"hatchings": n_hatchings.values_list('id', flat=True),
"weight": int(quantity * index_weight) if consumption_limit_type in (
'quantity', 'live_weight') else int((quantity * index_weight) * 0.75),
}
final_list.append(result)
else:
sum_of_ages = poultries.aggregate(total=Sum('killing_ave_age'))[
'total'] or 0
ave_killing_age = int(sum_of_ages / len(poultries))
if time_frame_type == 'all':
final_list = poultry_prediction_helper(ave_killing_age, consumption_limit_type)
else:
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
final_list = poultry_prediction_helper(ave_killing_age, consumption_limit_type, date1, date2)
else:
if killing_age_internal_type == 'poultry':
if time_frame_type == 'all':
final_list = poultry_prediction_helper(int(killing_age), consumption_limit_type)
# poultries = poultries.filter(killing_ave_age=int(killing_age))
# date_list = poultries.values_list('date', flat=True).distinct()
# for date in date_list:
# index_weight = poultries.filter(date=date).aggregate(total=Sum('killing_ave_weight'))[
# 'total'] or 0
# quantity = poultries.filter(date=date).aggregate(total=Sum('active_left_over'))[
# 'total'] or 0
#
# result = {
# "date": date,
# "quantity": quantity,
# "poultry": len(poultries.filter(date=date)),
# "age": int(killing_age),
# "wight": quantity * index_weight,
# }
# final_list.append(result)
else:
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
final_list = poultry_prediction_helper(int(killing_age), consumption_limit_type, date1, date2)
# poultries = poultries.filter(killing_ave_age=int(killing_age),date__gte=date1,date__lte=date2)
# date_list = poultries.values_list('date', flat=True)
# for date in date_list:
# index_weight = poultries.filter(date=date).aggregate(total=Sum('killing_ave_weight'))[
# 'total'] or 0
# quantity = poultries.filter(date=date).aggregate(total=Sum('active_left_over'))[
# 'total'] or 0
#
# result = {
# "date": date,
# "quantity": quantity,
# "poultry": len(poultries.filter(date=date)),
# "age": int(killing_age),
# "wight": quantity * index_weight,
# }
# final_list.append(result)
else:
ave_killing_age = int(killing_age)
if time_frame_type == 'all':
final_list = poultry_prediction_helper(ave_killing_age, consumption_limit_type)
else:
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
final_list = poultry_prediction_helper(ave_killing_age, consumption_limit_type, date1, date2)
excel_options = [
'ردیف',
'تاریخ',
'تعداد مرغداران',
'حجم(قطعه)',
'وزن(کیلوگرم)',
'سن',
]
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
header_list = [
'تعداد مرغداران',
'مجموع حجم',
'مجموع وزن',
]
create_header(worksheet, header_list, 4, 2, height=20)
if "date1" in request.GET:
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
excel_description(worksheet, 'B1',
f'پیشبینی موجودی از تاریخ {shamsi_date(date1)} تا تاریخ {shamsi_date(date2)}', color='red',
row2='C3')
else:
excel_description(worksheet, 'B1', f'پیشبینی موجودی', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
l = 5
m = 1
if final_list:
for data in final_list:
if type(data['age']) is str or type(data['age']) is int:
age = data['age']
else:
if len(data['age']) > 1:
age = '-'.join(map(str, data['age']))
elif len(data['age']) == 1:
age = str(data['age'][0])
else:
age = ''
if type(data['date']) is str:
try:
str_date = datetime.datetime.strptime(str(data['date']), "%Y-%m-%dT%H:%M:%S").date()
except:
str_date = datetime.datetime.strptime(str(data['date']), '%Y-%m-%d').date()
date = convert_to_shamsi(date=str_date)
elif data['date'] is None:
date = '-'
else:
date = convert_to_shamsi(date=data['date'])
list1 = [
m,
date,
data['poultry'],
data['quantity'],
data['weight'],
age,
]
m += 1
l += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', width=15)
poultry = sum(item['poultry'] for item in final_list)
quantity = sum(item['quantity'] for item in final_list)
weight = sum(item['weight'] for item in final_list)
value_header_list = [
poultry,
quantity,
weight,
]
create_value(worksheet, value_header_list, 3, 4)
list2 = [
'مجموع==>',
'',
poultry,
quantity,
weight,
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
if consumption_limit_type == 'quantity':
data_columns = 4
y_axis_title = 'حجم موجودی (قطعه)'
else:
data_columns = 5
y_axis_title = "وزن موجودی (کیلوگرم)"
add_chart(
worksheet=worksheet,
chart_type='line',
data_columns=data_columns,
category_column=2,
start_row=7,
end_row=l + 1,
chart_position="H7",
chart_title="داده های تجمیعی",
x_axis_title="تاریخ",
y_axis_title=y_axis_title
)
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="پیشبینی موجودی.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def hatching_report_from_age_excel(request):
input_age1 = int(request.GET['age1'])
input_age2 = int(request.GET['age2'])
filtered_poultry_hatch = PoultryHatching.objects.filter(chicken_age__gte=input_age1, chicken_age__lte=input_age2,
archive=False,
allow_hatching='pending',
trash=False).select_related('poultry',
'poultry__user').order_by(
'create_date')
user = SystemUserProfile.objects.get(key=request.GET['key'])
if 'chain' in request.GET:
filtered_poultry_hatch = filtered_poultry_hatch.filter(has_chain_company=True)
if request.GET['role'] in ['CityJahad', 'CityPoultry']:
filtered_poultry_hatch = filtered_poultry_hatch.filter(poultry__address__city=user.city)
elif request.GET['role'] == 'CityOperator':
city_operator = CityOperator.objects.get(user=user)
filtered_poultry_hatch = filtered_poultry_hatch.filter(poultry__city_operator=city_operator.unit_name)
else:
filtered_poultry_hatch = filtered_poultry_hatch
excel_options = [
'ردیف',
'وضعیت فارم',
'زنجیره/شرکت',
'نام و خانوادگی',
'نام فارم',
'موبایل',
'شهرستان',
'کد یکتا',
'کد سیستمی واحد',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'نژاد',
'سن',
'تعداد جوجه ریزی',
'تلفات دوره',
'تعداد کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'تعداد کشتار خارج از استان(قطعه)',
'وزن کشتار خارج از استان(کیلوگرم)',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ ثبت گزارش',
]
date1 = datetime.datetime.now().date()
from_date = jdatetime.date.fromgregorian(
year=date1.year,
month=date1.month,
day=date1.day
).strftime('%Y-%m-%d')
reversed_date = reversed(from_date.split("-"))
separate = "-"
from_date_1 = separate.join(reversed_date)
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
blue_fill = PatternFill(start_color="1E487B", fill_type="solid")
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
red_font = Font(color="C00000", bold=True)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(وجود فارم فعال دیگر)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
list1 = [
m,
farm_state,
chain_company,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.mobile,
poultry_hatching.poultry.user.city.name,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.poultry.system_code,
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.losses,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_losses,
all_killed_quantity,
all_total_killed_weight,
all_left_over,
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="جوجه ریزی بر اساس بازه {input_age1} تا {input_age2} روز.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def poultry_hatching_prediction_excel(request):
filterset_class = PoultryHatchingFilterSet
filterset_fields = [
'poultry__user__first_name',
'poultry__user__last_name',
'poultry__user__mobile',
'poultry__unit_name',
'poultry__address__city__name',
'chicken_age',
'poultry__breeding_unique_id',
]
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
if 'hatching_list' in request.GET:
poultry_hatchings = PoultryHatching.objects.filter(id__in=(request.GET['hatching_list']).split(',')).order_by(
'date')
else:
if request.GET['role'] == 'CityOperator':
city_operator = CityOperator.objects.get(user=user, trash=False)
poultry_hatchings = PoultryHatching.objects.filter(archive=False, allow_hatching='pending', state='pending',
poultry__city_operator=city_operator.unit_name,
trash=False).order_by('date')
elif request.GET['role'] in ['CityJahad', 'CityPoultry', 'CityVet']:
poultry_hatchings = PoultryHatching.objects.filter(archive=False, allow_hatching='pending', state='pending',
poultry__address__city=user.city,
trash=False).order_by('date')
else:
poultry_hatchings = PoultryHatching.objects.filter(archive=False, allow_hatching='pending', state='pending',
trash=False).order_by('date')
if 'search' in request.GET:
hatching_list = []
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=poultry_hatchings
)
).filter():
ps = filterset_class(data=query, queryset=poultry_hatchings)
hatching_list = ps.filter()
poultry_hatchings = [] if len(hatching_list) == 0 else hatching_list
excel_options = [
'ردیف',
'نام واحد',
'مالک',
'موبایل',
'شهر',
'میانگین سن کشتار',
'میانگین وزن کشتار',
'دوره',
'تاریخ جوجه ریزی',
'حجم جوجه ریزی',
'سن',
'نژاد',
'حجم کشتار شده',
'وزن کشتار شده',
'تخصیص بدون بار',
'حجم تخصیص بدون بار',
'وزن تخصیص بدون بار',
'مانده سالن(حجم)',
'مانده سالن(وزن زنده)',
'مانده سالن(وزن لاشه)',
]
date1 = datetime.datetime.now().date()
from_date = jdatetime.date.fromgregorian(
year=date1.year,
month=date1.month,
day=date1.day
).strftime('%Y-%m-%d')
reversed_date = reversed(from_date.split("-"))
separate = "-"
from_date_1 = separate.join(reversed_date)
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
header_list = [
'',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'جزئیات پایش اطلاعات تاریخ {from_date_1}', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
l = 5
m = 1
serializer = PoultryHatchingForPredictionSerializer(poultry_hatchings, many=True).data
if serializer:
for data in serializer:
datetime_object = datetime.datetime.strptime(data['date'], "%Y-%m-%dT%H:%M:%S")
list1 = [
m,
data['poultry']['unit_name'],
data['poultry']['fullname'],
data['poultry']['mobile'],
data['poultry']['city'],
data['general_info']['ave_age'],
data['general_info']['ave_weight'],
data['period'],
convert_to_shamsi(date=datetime_object),
data['quantity'],
data['general_info']['age'],
data['chicken_breed'],
data['general_info']['total_quantity'],
data['general_info']['total_weight'],
data['general_info']['province_kill_requests'],
data['general_info']['province_kill_requests_quantity'],
data['general_info']['province_kill_requests_weight'],
data['left_over'],
round(data['left_over'] * data['poultry']['killing_ave_weight']),
round(data['left_over'] * data['poultry']['killing_ave_weight'] * 0.75),
]
m += 1
l += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin')
quantity = sum(
item['quantity'] for item in serializer)
total_quantity = sum(
item['general_info'].get('total_quantity', 0) for item in serializer)
total_weight = sum(
item['general_info'].get('total_weight', 0) for item in serializer)
province_kill_requests = sum(
item['general_info'].get('province_kill_requests', 0) for item in serializer)
province_kill_requests_quantity = sum(
item['general_info'].get('province_kill_requests_quantity', 0) for item in serializer)
province_kill_requests_weight = sum(
item['general_info'].get('province_kill_requests_weight', 0) for item in serializer)
killing_ave_weight = sum(
item['poultry'].get('killing_ave_weight', 0) for item in serializer)
killing_ave_weight = killing_ave_weight / len(serializer) if serializer else 0
left_over = sum(
item['left_over'] for item in serializer)
value_header_list = [
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
quantity,
'',
'',
total_quantity,
total_weight,
province_kill_requests,
province_kill_requests_quantity,
province_kill_requests_weight,
left_over,
round(left_over * killing_ave_weight),
round(left_over * killing_ave_weight * 0.75),
]
create_value(worksheet, list2, l + 3, 1, color='green')
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="جزئیات پایش اطلاعات تاریخ {from_date_1}.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def bar_difference_reques_excel(request):
filterset_class = BarDifferenceRequestFilterSet
filterset_fields = [
'kill_house__kill_house_operator__user__fullname',
'kill_house__kill_house_operator__user__mobile',
'hatching__poultry__user__fullname',
'hatching__poultry__user__mobile'
]
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
if request.GET['role'] == 'KillHouse':
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).select_related(
'system_address__province').first()
if request.GET['state'] == 'pending':
state = 'جدید'
bar_requests = BarDifferenceRequest.objects.filter(kill_house=kill_house, trash=False,
state='pending').order_by('id')
else:
state = 'بایگانی شده'
bar_requests = BarDifferenceRequest.objects.filter(kill_house=kill_house, trash=False,
state__in=('accepted', 'rejected')).order_by('id')
else:
if request.GET['state'] == 'pending':
state = 'جدید'
bar_requests = BarDifferenceRequest.objects.filter(trash=False, state='pending').order_by('id')
else:
bar_requests = BarDifferenceRequest.objects.filter(trash=False,
state__in=('accepted', 'rejected')).order_by('id')
state = 'بایگانی شده'
if 'search' in request.GET:
bar_requests_list = []
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=bar_requests
)
).filter():
ps = filterset_class(data=query, queryset=bar_requests)
bar_requests_list = ps.filter()
bar_requests = [] if len(bar_requests_list) == 0 else bar_requests_list
excel_options = [
'ردیف',
'وضعیت',
'ثبت کننده',
'تاریخ ثبت',
'مرغدار',
'کشتارگاه',
'حجم',
'حجم کم شده از سالن مرغدار',
'وزن تقریبی کشتار(کیلوگرم)',
'حجم سفارشات دریافتی توسط کشتارگاه',
'اختلاف کشتار(حجم)',
]
date1 = datetime.datetime.now().date()
from_date = jdatetime.date.fromgregorian(
year=date1.year,
month=date1.month,
day=date1.day
).strftime('%Y-%m-%d')
reversed_date = reversed(from_date.split("-"))
separate = "-"
from_date_1 = separate.join(reversed_date)
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
header_list = [
'حجم',
'حجم کم شده از سالن مرغدار',
'وزن تقریبی کشتار(کیلوگرم)',
'حجم سفارشات دریافتی توسط کشتارگاه',
'اختلاف کشتار(حجم)',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'اختلاف کشتار {state}', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
l = 5
m = 1
serializer = BarDifferenceRequestSerializer(bar_requests, many=True).data
if serializer:
for data in serializer:
datetime_object = datetime.datetime.strptime(data['create_date'], "%Y-%m-%dT%H:%M:%S.%f")
if data['state'] == 'pending':
status = 'در انتظار تایید'
elif data['state'] == 'accepted':
status = 'تایید شده'
else:
status = 'رد شده'
list1 = [
m,
status,
data['register_fullname'],
str(convert_to_shamsi(date=datetime_object.date())),
data['hatching']['poultry']['unit_name'] + '(' + data['hatching']['poultry']['user']['mobile'] + ')',
data['kill_house']['name'] + '(' + data['kill_house']['kill_house_operator']['user']['mobile'] + ')',
data['quantity'],
data['bar_info']['total_quantity'],
data['bar_info']['total_weight'],
data['bar_info']['first_total_quantity'],
data['bar_info']['difference_quantity'],
]
m += 1
l += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin')
quantity = sum(
item['quantity'] for item in serializer)
total_quantity = sum(
item['bar_info'].get('total_quantity', 0) for item in serializer)
total_weight = sum(
item['bar_info'].get('total_weight', 0) for item in serializer)
first_total_quantity = sum(
item['bar_info'].get('first_total_quantity', 0) for item in serializer)
difference_quantity = sum(
item['bar_info'].get('difference_quantity', 0) for item in serializer)
value_header_list = [
quantity,
total_quantity,
total_weight,
first_total_quantity,
difference_quantity,
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
quantity,
total_quantity,
total_weight,
first_total_quantity,
difference_quantity,
]
create_value(worksheet, list2, l + 3, 1, color='green')
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="اختلاف کشتار {state}.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def direct_buying_poultry_requests(request):
filterset_class = PoultryRequestDirectBuyingFilterSet
role = request.GET.get('role')
now = datetime.datetime.now()
show_market = ShowMarketRequest.objects.filter(trash=False, allow=True).first()
now_time = now.time().replace(second=0, microsecond=0)
if show_market and role == 'KillHouse':
if show_market.start_time < \
now_time < show_market.end_time:
queryset = PoultryRequest.objects.filter(
send_date__date=now.date(),
state_process='accepted',
province_state='accepted',
temporary_trash=False,
trash=False,
out=False,
final_state='pending',
market=True,
)
else:
queryset = []
else:
queryset = PoultryRequest.objects.filter(
send_date__date=now.date(),
state_process='accepted',
province_state='accepted',
temporary_trash=False,
trash=False,
out=False,
final_state='pending',
market=True,
)
breed = request.GET.get('breed')
city = request.GET.get('city')
remain = request.GET.get('remain')
min_amount = request.GET.get('min_amount')
max_amount = request.GET.get('max_amount')
weight = request.GET.get('weight')
min_age = request.GET.get('min_age')
max_age = request.GET.get('max_age')
value = request.GET.get('value')
search = request.GET.get('search')
if breed:
queryset = queryset.filter(chicken_breed__in=breed.split(','))
if city:
queryset = queryset.filter(poultry__user__city__name__in=city.split(','))
if remain == 'true':
queryset = queryset.filter(remain_quantity__gt=0)
if min_amount:
queryset = queryset.filter(amount__gte=min_amount)
if max_amount:
queryset = queryset.filter(amount__lte=max_amount)
if weight:
if weight == 'سبک':
queryset = queryset.filter(Index_weight__gte=2, Index_weight__lt=2.7)
elif weight == 'متوسط':
queryset = queryset.filter(Index_weight__gte=2.7, Index_weight__lt=3)
elif weight == 'سنگین':
queryset = queryset.filter(Index_weight__gte=3)
if min_age:
queryset = queryset.filter(hatching__chicken_age__gte=min_age)
if max_age:
queryset = queryset.filter(hatching__chicken_age__lte=max_age)
if value and search == 'filter' and value.strip() and value != 'undefined':
queryset = queryset.filter(build_query(filterset_class, value))
excel_options = [
"ردیف",
"نام و نام خانوادگی",
"تلفن",
"استان",
"شهر",
"نژاد",
"سن جوجه",
"میانگین وزنی (کیلوگرم)",
"تاریخ کشتار",
"تعداد قطعه",
"مانده قابل خرید",
"فروش رفته",
"مبلغ هر کیلو (ریال)",
]
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
cell = worksheet.cell(row=1, column=1)
cell.alignment = Alignment(horizontal='center', vertical='center')
header_list = [
'تعداد قطعه',
'مانده قابل خرید',
'فروش رفته',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'لیست اعلام کشتار های مرغداران', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
l = 5
m = 1
serializer = PoultryRequestForDirectBuyingSerializer(queryset, many=True).data
if serializer:
for data in serializer:
if type(data['send_date']) is str:
try:
str_date = datetime.datetime.strptime(str(data['send_date']), "%Y-%m-%dT%H:%M:%S").date()
except:
str_date = datetime.datetime.strptime(str(data['send_date']), '%Y-%m-%d').date()
date = shamsi_date(str_date, in_value=True)
elif data['send_date'] is None:
date = '-'
else:
date = shamsi_date(data['send_date'], in_value=True)
list1 = [
m,
data['poultry']['unit_name'],
data['poultry']['mobile'],
data['poultry']['province'],
data['poultry']['city'],
data['chicken_breed'],
data['age']['age'],
str(data['Index_weight']),
str(date),
data['quantity'],
data['remain_quantity'],
data['total_allocated'],
data['amount'],
]
m += 1
l += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin')
quantity = sum(
item['quantity'] for item in serializer)
remain_quantity = sum(
item['remain_quantity'] for item in serializer)
total_allocated = sum(
item['total_allocated'] for item in serializer)
value_header_list = [
quantity,
remain_quantity,
total_allocated,
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
quantity,
remain_quantity,
total_allocated,
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="لیست اعلام کشتار های مرغداران.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def hatching_for_every_age_range(request):
filterset_class = PoultryHatchingFilterSet
poultry_hatch = PoultryHatching.objects.filter(archive=False,
allow_hatching='pending',
trash=False).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
filterset_fields = [
'poultry__user__first_name',
'poultry__user__last_name',
'poultry__user__mobile',
'poultry__unit_name',
'poultry__address__city__name',
'chicken_age',
'poultry__breeding_unique_id',
]
date1 = datetime.datetime.now().date()
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
workbook.remove(worksheet)
sheet_name = [
"کمتر از 35 روز",
"بین 35 تا 40 روز",
"بین 40 تا 45 روز",
"بین 45 تا 50 روز",
"بین 50 تا 55 روز",
"بین 55 تا 60 روز",
"بین 60 تا 65 روز",
"بین 65 تا 70 روز",
"بیش از 70 روز"
]
for sheet_names in sheet_name:
worksheet = workbook.create_sheet(sheet_names)
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
if sheet_names == 'کمتر از 35 روز':
filtered_poultry_hatch =poultry_hatch.filter(chicken_age__lt=35).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بین 35 تا 40 روز':
filtered_poultry_hatch =poultry_hatch.filter(chicken_age__range=(35, 39)).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بین 40 تا 45 روز':
filtered_poultry_hatch =poultry_hatch.filter(chicken_age__range=(40, 44)).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بین 45 تا 50 روز':
filtered_poultry_hatch =poultry_hatch.filter(chicken_age__range=(45, 49)).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بین 45 تا 50 روز':
filtered_poultry_hatch =poultry_hatch.filter(chicken_age__range=(45, 49)).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بین 50 تا 55 روز':
filtered_poultry_hatch = poultry_hatch.filter(chicken_age__range=(50, 54)).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بین 55 تا 60 روز':
filtered_poultry_hatch = poultry_hatch.filter(chicken_age__range=(55, 59)).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بین 60 تا 65 روز':
filtered_poultry_hatch = poultry_hatch.filter(chicken_age__range=(60, 64)).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بین 65 تا 70 روز':
filtered_poultry_hatch = poultry_hatch.filter(chicken_age__range=(65, 70)).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
elif sheet_names == 'بیش از 70 روز':
filtered_poultry_hatch = poultry_hatch.filter(chicken_age__gt=70).select_related('poultry',
'poultry__user').order_by(
'-chicken_age')
if 'search' in request.GET:
if request.GET['search'] == 'filter':
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
for item in filterset_fields:
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
if (filterset_class(
data=query,
queryset=filtered_poultry_hatch
)
).filter():
ps = filterset_class(data=query, queryset=filtered_poultry_hatch)
filtered_poultry_hatch = ps.filter()
date1 = datetime.datetime.now().date()
excel_options = [
'ردیف',
'وضعیت',
'شماره مجوز جوجه ریزی',
'شناسه یکتا',
'مجوز بهداشتی جوجه ریزی',
'نام فارم',
'مرغدار',
'تلفن مرغدار',
'بهره برداری',
'مالکیت',
'ارتباط',
'شهر/تعاونی',
'سالن',
' دوره جوجه ریزی',
'تاریخ ثبت جوجه ریزی',
'تاریخ جوجه ریزی',
'میانگین سن کشتار',
'پیشبینی تاریخ کشتار',
'نژاد',
'سن',
'حجم جوجه ریزی',
'حجم افزایشی',
'تلفات دامپزشک(قطعه)',
'تلفات اتحادیه(قطعه)',
'تلفات کل(قطعه)',
'زنجیره/شرکت',
'دامپزشک فارم',
'تلفن دامپزشک فارم',
'کد سیستمی واحد',
'حجم کشتار شده(قطعه)',
'وزن کل کشتارشده(کیلوگرم)',
'مانده در سالن',
'درصد مانده در سالن',
'نود درصد جوجه ریزی',
'وزن تعهد دولتی(کیلوگرم)',
'تعداد کشتار دولتی(قطعه)',
'وزن کشتار دولتی(کیلوگرم)',
'وزن تعهد آزاد(کیلوگرم)',
'تعداد کشتار آزاد(قطعه)',
'وزن کشتار آزاد(کیلوگرم)',
'میانگین وزن کشتار(کیلوگرم)',
'سازنده جوجه ریزی',
'کد اپیدمیولوژیک',
'حجم فروش به خارج از استان(قطعه)',
'حجم فروش به خارج از استان(کیلوگرم)',
'تخصیصات بدون بار',
'حجم تخصیصات بدون بار',
'وزن تخصیصات بدون بار',
'تایید تخلیه در سماصط',
'تعداد کشتار فعال',
'تعداد درخواست کشتار',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بارهای تحویلی',
'حجم بارهای تحویلی',
'وزن بارهای تحویلی',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
'ثبت کننده گزارش',
'متن گزارش',
'تاریخ گزارش',
]
from_date_1 = shamsi_date(date1)
header_list = [
'تعداد فارم فعال',
'تعداد فارم دارای زنجیره فعال',
'مجموع جوجه ریزی',
'مجموع تلفات دامپزشک(قطعه)',
'مجموع تلفات اتحادیه(قطعه)',
'مجموع تلفات کل(قطعه)',
'مجموع قطعه کشتار شده',
'مجموع وزن کل کشتارشده',
'مانده در سالن(قطعه)',
'مانده در سالن از نود درصد(قطعه)',
'کمترین سن',
'بیشترین سن',
'مجموع وزن تعهد دولتی',
' مجموع قطعه کشتار دولتی',
' مجموع وزن کشتار دولتی',
' مجموع قطعه کشتار آزاد',
' مجموع وزن کشتار آزاد',
'مجموع تعداد کشتار خارج از استان',
'مجموع وزن کشتار خارج از استان',
'تعداد فارم های متخلف',
'تعداد بار ایجاد شده',
'حجم بار ایجاد شده',
'وزن بار ایجاد شده',
'تعداد بار کشتار شده',
'حجم بار کشتار شده',
'وزن بار کشتار شده',
'حجم زنجیره',
'وزن زنجیره',
'حجم صادرات',
'وزن صادرات',
'تعداد بار ورودی به انبار',
'حجم لاشه ها',
'وزن لاشه ها',
'درصد افت بارها',
]
create_header(worksheet, header_list, 5, 2, height=20)
excel_description(worksheet, 'B1', f'این گزارش در مورخ {from_date_1} صادر شده است.', color='red', row2='C3')
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
poultry_ids = poultry_hatch.values_list('poultry', flat=True).distinct()
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
vet_farm_mapping = {
vet_farm.poultry: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
for vet_farm in vet_farms
}
l = 5
m = 1
all_poultry_hatching_quantity = 0
all_poultry_hatching_killed_quantity = 0
all_poultry_hatching_left_over = 0
min_list = []
all_left_over_ninty_percent = 0
violation = 0
all_chain_company = 0
for poultry_hatching in filtered_poultry_hatch:
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
province_request__poultry_request__hatching=poultry_hatching)
governmental_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=False)
governmental_province_kill_requests_quantity = \
governmental_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
free_province_kill_requests = province_kill_requests.filter(
Q(province_request__poultry_request__direct_buying=False) | Q(
province_request__poultry_request__direct_buying=True),
province_request__poultry_request__free_sale_in_province=True)
free_province_kill_requests_quantity = \
free_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
'total'] or 0
out_poultry_requests = PoultryRequest.objects.filter(trash=False, out=True, state_process='accepted',
province_state='accepted',
out_province_request_cancel=False,
final_state='archive',
hatching=poultry_hatching)
out_poultry_requests_quantity = out_poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
free_sale_province = FreeSaleWithinprovince.objects.filter(trash=False).first()
if free_sale_province.allow == False:
left_total_free_commitment_quantity = poultry_hatching.left_over
elif poultry_hatching.total_free_commitment_quantity == 0:
left_total_free_commitment_quantity = 0
else:
if poultry_hatching.total_commitment_quantity == 0:
left_total_free_commitment_quantity = poultry_hatching.left_over
else:
left_total_free_commitment_quantity = poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity) if (
poultry_hatching.total_free_commitment_quantity - (
free_province_kill_requests_quantity + out_poultry_requests_quantity)) > 0 else 0
# return {
# "governmental_allocated_quantity": governmental_province_kill_requests_quantity,
# "total_commitment_quantity": obj.total_commitment_quantity,
# "free_allocated_quantity": free_province_kill_requests_quantity + out_poultry_requests_quantity,
# "total_free_commitment_quantity": obj.total_free_commitment_quantity,
# "left_total_free_commitment_quantity": left_total_free_commitment_quantity,
#
# }
vet_farm_id = poultry_hatching.poultry
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
all_poultry_hatching_quantity += poultry_hatching.quantity
all_poultry_hatching_killed_quantity += poultry_hatching.killed_quantity
all_poultry_hatching_left_over += poultry_hatching.left_over
if poultry_hatching.chicken_age not in min_list:
min_list.append(poultry_hatching.chicken_age)
l += 1
create_date = jdatetime.date.fromgregorian(
day=poultry_hatching.create_date.day,
month=poultry_hatching.create_date.month,
year=poultry_hatching.create_date.year
)
date = jdatetime.date.fromgregorian(
day=poultry_hatching.date.day,
month=poultry_hatching.date.month,
year=poultry_hatching.date.year
)
predicate_date = jdatetime.date.fromgregorian(
day=poultry_hatching.predicate_date.day,
month=poultry_hatching.predicate_date.month,
year=poultry_hatching.predicate_date.year
) if poultry_hatching.predicate_date else '-'
date1 = datetime.datetime.strptime(str(poultry_hatching.date), '%Y-%m-%d %H:%M:%S')
age = (datetime.datetime.now() - date1).days + 1
creator = '-'
if poultry_hatching.registrar:
if poultry_hatching.registrar['fullname'] != '':
creator = poultry_hatching.registrar['fullname']
else:
creator = 'پنجره واحد'
left_over_ninty_percent = ((poultry_hatching.quantity * 90) / 100)
all_left_over_ninty_percent += left_over_ninty_percent
farm_state = 'عادی'
if poultry_hatching.violation == True:
farm_state = 'متخلف' + ' ' + '(مانده در سالن بیش از حد مجاز)'
violation += 1
if poultry_hatching.chain_company:
chain_company = poultry_hatching.chain_company.name
all_chain_company += 1
else:
chain_company = '-'
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
violation_report_date = shamsi_date(
poultry_hatching.violation_report_date.date()) if poultry_hatching.violation_report_date else '-'
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
wothout_bar = province_kill_requests.filter(trash=False, return_to_province=False,
state__in=('pending', 'accepted'),
first_car_allocated_quantity=0)
province_kill_requests_quantity_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
province_kill_requests_weight_wothout_bar = \
wothout_bar.aggregate(total=Sum('total_killed_weight'))['total'] or 0
active_kill = 'ندارد'
count_of_request = 0
province_kill_request_active = ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='accepted')
if province_kill_request_active.count() > 0:
count_of_request = province_kill_request_active.count()
if ProvinceKillRequest.objects.filter(trash=False,
province_request__poultry_request__hatching=poultry_hatching,
state='pending').exists():
active_kill = 'دارد'
list1 = [
m,
farm_state,
poultry_hatching.licence_number,
poultry_hatching.poultry.breeding_unique_id,
poultry_hatching.CertId,
poultry_hatching.poultry.unit_name,
poultry_hatching.poultry.user.fullname,
poultry_hatching.poultry.user.mobile,
poultry_hatching.InteractTypeName,
poultry_hatching.PersonTypeName,
poultry_hatching.UnionTypeName,
f'{poultry_hatching.poultry.user.city.name if poultry_hatching.poultry.user.city else "-"} '
f'/ {poultry_hatching.poultry.city_operator if poultry_hatching.poultry.city_operator else "-"}',
poultry_hatching.hall,
poultry_hatching.period,
str(create_date),
str(date),
poultry_hatching.poultry.killing_ave_age,
str(predicate_date),
poultry_hatching.chicken_breed,
age,
poultry_hatching.quantity,
poultry_hatching.increase_quantity,
poultry_hatching.losses,
poultry_hatching.direct_losses,
poultry_hatching.total_losses,
chain_company,
# poultry_hatching.poultry.city_operator,
#
#
#
vet_farm_name,
vet_farm_mobile,
poultry_hatching.poultry.system_code,
poultry_hatching.killed_quantity,
poultry_hatching.total_killed_weight,
poultry_hatching.left_over,
f'{int(poultry_hatching.left_over * 100 / poultry_hatching.quantity)}%',
left_over_ninty_percent,
poultry_hatching.total_commitment,
poultry_hatching.governmental_quantity,
poultry_hatching.governmental_killed_quantity,
poultry_hatching.total_free_commitment_quantity,
poultry_hatching.free_quantity,
poultry_hatching.free_killed_quantity,
str(poultry_hatching.total_average_killed_weight),
creator,
poultry_hatching.poultry.epidemiological_code if poultry_hatching.poultry.epidemiological_code else '-',
poultry_hatching.out_province_killed_quantity if poultry_hatching.out_province_killed_quantity > 0 else '-',
poultry_hatching.out_province_killed_weight if poultry_hatching.out_province_killed_weight > 0 else '-',
len(wothout_bar),
province_kill_requests_quantity_wothout_bar,
province_kill_requests_weight_wothout_bar,
poultry_hatching.samasat_discharge_percentage,
active_kill,
count_of_request,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
poultry_hatching.chain_killed_quantity,
poultry_hatching.chain_killed_weight,
poultry_hatching.export_killed_quantity,
poultry_hatching.export_killed_weight,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
poultry_hatching.violation_reporter if poultry_hatching.violation_reporter else '-',
poultry_hatching.violation_report if poultry_hatching.violation_report else '-',
str(violation_report_date),
]
m += 1
create_value(worksheet, list1, l + 1, 1, border_style='thin', different_cell=1,
different_value='متخلف' + ' ' + '(وجود فارم فعال دیگر)')
min_list = sorted(min_list)
all_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('quantity')).get(
'total_quantity', 0)
all_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('losses')).get(
'total_quantity', 0)
all_direct_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('direct_losses')).get(
'total_quantity', 0)
all_total_losses = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_losses')).get(
'total_quantity', 0)
all_killed_quantity = filtered_poultry_hatch.aggregate(total_quantity=Sum('killed_quantity')).get(
'total_quantity', 0)
all_left_over = filtered_poultry_hatch.aggregate(total_quantity=Sum('left_over')).get(
'total_quantity', 0)
all_total_commitment = filtered_poultry_hatch.aggregate(total_quantity=Sum('total_commitment')).get(
'total_quantity', 0)
all_governmental_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_killed_quantity')).get(
'total_quantity', 0)
all_free_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_killed_quantity')).get(
'total_quantity', 0)
all_total_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_killed_weight')).get(
'total_quantity', 0)
all_governmental_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('governmental_quantity')).get(
'total_quantity', 0)
all_free_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('free_quantity')).get(
'total_quantity', 0)
all_out_province_killed_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_quantity')).get(
'total_quantity', 0)
all_out_province_killed_weight = filtered_poultry_hatch.aggregate(
total_quantity=Sum('out_province_killed_weight')).get(
'total_quantity', 0)
all_increase_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('increase_quantity')).get(
'total_quantity', 0)
all_total_free_commitment_quantity = filtered_poultry_hatch.aggregate(
total_quantity=Sum('total_free_commitment_quantity')).get(
'total_quantity', 0)
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
province_request__poultry_request__hatching__in=filtered_poultry_hatch)
first_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity') or 0
first_weight = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
ware_house_bars = kill_house_requests.filter(ware_house_confirmation=True)
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
'total'] or 0
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
'total'] or 0
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
'total'] or 0
bar_complete_with_kill_house = kill_house_requests.filter(
assignment_state_archive='True')
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_weight')).get(
'total_quantity') or 0
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
total_quantity=Sum('accepted_real_quantity')).get(
'total_quantity', 0) or 0
chain_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_weight')).get(
'total_quantity', 0) or 0
chain_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('chain_killed_quantity')).get(
'total_quantity', 0) or 0
extra_killed_quantity_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_quantity')).get(
'total_quantity', 0) or 0
export_killed_weight_final = filtered_poultry_hatch.aggregate(
total_quantity=Sum('export_killed_weight')).get(
'total_quantity', 0) or 0
value_header_list = [
len(filtered_poultry_hatch),
all_chain_company,
all_poultry_hatching_quantity,
all_losses,
all_direct_losses,
all_total_losses,
all_poultry_hatching_killed_quantity,
all_total_killed_weight,
all_poultry_hatching_left_over,
all_left_over_ninty_percent,
min_list[0] if len(min_list) > 0 else '-',
min_list[len(min_list) - 1] if len(min_list) > 0 else '-',
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_free_quantity,
all_free_killed_quantity,
all_out_province_killed_quantity,
all_out_province_killed_weight,
violation,
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0)
]
create_value(worksheet, value_header_list, 3, 5)
list2 = [
'مجموع==>',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
all_quantity,
all_increase_quantity,
all_losses,
all_direct_losses,
all_total_losses,
'',
'',
'',
'',
all_killed_quantity,
all_total_killed_weight,
all_left_over,
'',
all_left_over_ninty_percent,
all_total_commitment,
all_governmental_quantity,
all_governmental_killed_quantity,
all_total_free_commitment_quantity,
all_free_quantity,
all_free_killed_quantity,
'',
'',
'',
all_out_province_killed_quantity,
all_out_province_killed_weight,
'',
'',
'',
'',
'',
'',
len(kill_house_requests),
first_quantity,
first_weight,
len(bar_complete_with_kill_house),
accepted_real_quantity_final,
accepted_real_wight_final,
chain_killed_quantity_final,
chain_killed_weight_final,
extra_killed_quantity_final,
export_killed_weight_final,
len(ware_house_bars),
ware_house_bars_quantity,
ware_house_bars_weight,
str(round(ware_house_bars_weight_lose / len(
ware_house_bars), 2) if ware_house_bars else 0),
'',
'',
'',
]
create_value(worksheet, list2, l + 3, 1, color='green')
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="پایش کلی اطلاعاتی مرغداران با بازه سنی.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response