10772 lines
530 KiB
Python
10772 lines
530 KiB
Python
|
|
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
|