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