25023 lines
1.2 MiB
25023 lines
1.2 MiB
from io import BytesIO
|
||
import openpyxl
|
||
import datetime
|
||
import jdatetime
|
||
from itertools import chain
|
||
from django.db.models import Case, When
|
||
from django.db.models import Value
|
||
|
||
import requests
|
||
from oauth2_provider.models import AccessToken
|
||
from rest_framework.throttling import AnonRateThrottle, UserRateThrottle
|
||
from rest_framework.views import APIView
|
||
from rest_framework.response import Response
|
||
|
||
from deposit_id import wage_counting_type
|
||
from general_urls import base_url_for_sms_report
|
||
from panel.CityOperator.serializers import CityOperatorForSubSectorTransactionsSerializer, \
|
||
CityOperatorForSubSectorSerializer, CityOperatorForSubSectorSerializerForExcel
|
||
from panel.KillHouse.helpers import get_difference_carcasses_weight, get_kill_house_finance_info, \
|
||
get_difference_carcasses_percent
|
||
from panel.ProvinceOperator.serializers import \
|
||
GuildsPosMachineForTransactionsSerializer, PosMachineTransactionsForInspectionSerializer, \
|
||
TotalWageInformationSerializer, CityGuildForSubSectorSerializerForExcel, InProvinceAllocationSerializer, \
|
||
StewardFreeSaleBarInformationSerializer, RealGuildsForDashboardSerializer, \
|
||
GuildsPosMachineForTransactionsNewSerializer
|
||
from panel.VetFarm.serializers import VetForSubSectorSerializer, VetForSubSectorSerializerForExcel
|
||
from panel.helper import build_query
|
||
from panel.helper_excel import Alignment_CELL, create_header, create_header_freez, excel_description, \
|
||
create_value, merge_cells, cell_color_changer, get_kill_house_finance_info_by_date, \
|
||
get_kill_house_distribution_info, get_kill_house_distribution_out_province_info, \
|
||
all_get_kill_house_distribution_info, GREEN_CELL, VERY_LIGHT_GREEN_CELL, LIGHT_GREEN_CELL, \
|
||
RED_CELL, convert_str_to_date
|
||
from django.http import HttpResponse, QueryDict
|
||
from openpyxl import Workbook
|
||
from openpyxl.styles import PatternFill, Alignment, Font
|
||
from openpyxl.utils import get_column_letter
|
||
from django.db.models import Q, Sum, F, Count, Avg
|
||
|
||
from panel.KillHouse.serializers import \
|
||
KillHouseForNewWageInormationSerializer, KillHouseFreeSaleBarInformationSerializer, \
|
||
KillHouseForPerformanceDashboardSerializer, KillHouseForProvinceWareHouseDashboardSerializer, \
|
||
KillRequestForDirectBuyingSerializer, ReturnProvinceKillRequestSerializer
|
||
from panel.ReportingPanel.helper import poultry_request_new_fields
|
||
from panel.convert_date import convert_to_shamsi
|
||
from panel.filterset import KillHouseFilterSet, KillHouseRequestFilterSet, InternalTransactionFilterSet, \
|
||
PoultryRequestFilterSet, OutProvincePoultryRequestBuyerFilterSet, ChainCompanyFilterSet, ChainAllocationFilterSet, \
|
||
StewardAllocationDashboardFilterSet, KillHouseFreeSaleBarInformationFilterSet, \
|
||
StewardFreeSaleBarInformationFilterSet, KillRequestFilterSet, ReturnProvinceKillRequestFilterSet, \
|
||
GuildsForPostationFilterSet
|
||
from panel.helper_excel import shamsi_date
|
||
from panel.models import ProvinceKillRequest, \
|
||
ChainAllocation, KillHouseFreeBarInformation, InternalTransaction, ChainCompany, \
|
||
KillHousePercentage, KillHouseRequest, PoultryRequest, KillHouseVet, VetCheckRequest, \
|
||
KillHouseAssignmentInformation, VetFarm, Poultry, CityOperator, OutProvincePoultryRequestBuyer, Vet, \
|
||
PoultryHatching, KillHouseFreeSaleBarInformation, WageType, PercentageOfWageType, KillHouseWareHouse, \
|
||
StewardAllocation, RolesProducts, Guilds, SubSectorPercentageOfWageType, SubSectorTransactions, \
|
||
StewardFreeBarInformation, StewardFreeSaleBarInformation, PosMachineTransactions, CityGuild, TotalWageInformation, \
|
||
BarDifferenceRequest, BarDocumentStatus, KillRequest, POSTransactions, POSMachine, PosSegmentation, \
|
||
ProductsTransactions, WarehouseArchive
|
||
from authentication.models import (
|
||
SystemUserProfile, City,
|
||
)
|
||
from panel.models import (
|
||
KillHouse,
|
||
)
|
||
|
||
|
||
def kill_house_total_transactions_wage_payid_super_admin_excel(request):
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
kill_house_list = []
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'تاریخ پرداخت',
|
||
'نوع پرداخت',
|
||
'نام پرداخت کننده',
|
||
'تلفن پرداخت کننده',
|
||
'شماره درخواست',
|
||
'شماره پیگیری',
|
||
'کد سفارش',
|
||
'شماره کارت',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
'سهم شرکت(ریال)',
|
||
'سهم اصناف(ریال)',
|
||
'سهم دامپزشک(ریال)',
|
||
|
||
]
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
sheet_name = 'اطلاعات کلی'
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
|
||
if sheet_name == 'اطلاعات کلی':
|
||
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')
|
||
if 'date1' in request.GET:
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
worksheet['B2'] = f'اطلاعات کلی تعرفه {from_date_1} تا {from_date_2}'
|
||
merge_range1 = 'B2:C2'
|
||
worksheet.merge_cells(merge_range1)
|
||
|
||
worksheet['B2'].font = Font(color="C00000", bold=True)
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
worksheet['B5'] = f'جزئیات {from_date_1} تا {from_date_2}'
|
||
|
||
worksheet['B5'].font = Font(color="C00000", bold=True)
|
||
worksheet['B5'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
else:
|
||
# worksheet['B2'] = 'اطلاعات کلی تعرفه(از 1403/01/01 به بعد)'
|
||
|
||
worksheet['B2'].font = Font(color="C00000")
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
merge_range1 = 'B2:C2'
|
||
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['B5'] = f'جزئیات'
|
||
|
||
worksheet['B5'].font = Font(color="C00000", bold=True)
|
||
worksheet['B5'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
worksheet['C9'] = 'اتحادیه'
|
||
worksheet['C9'].font = Font(color="C00000")
|
||
worksheet['C9'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
worksheet['C9'].fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
worksheet['C9'].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['C10'] = 'شرکت'
|
||
worksheet['C10'].font = Font(color="C00000")
|
||
worksheet['C10'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
worksheet['C10'].fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
worksheet['C10'].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['C11'] = 'صنف'
|
||
worksheet['C11'].font = Font(color="C00000")
|
||
worksheet['C11'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
worksheet['C11'].fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
worksheet['C11'].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['C12'] = 'دامپزشک'
|
||
worksheet['C12'].font = Font(color="C00000")
|
||
worksheet['C12'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
worksheet['C12'].fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
worksheet['C12'].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')
|
||
)
|
||
header_list1 = [
|
||
'کل تعرفه (ریال)',
|
||
'کل تعرفه پرداخت شده (ریال)',
|
||
'تخفیف (ریال)',
|
||
'کل تعرفه پرداخت نشده (ریال)',
|
||
|
||
]
|
||
|
||
header_list2 = [
|
||
'کل وزن زنده کشتار داخل استان(کیلوگرم)',
|
||
'وزن لاشه کشتار داخل استان(کیلوگرم)',
|
||
'وزن توزیع لاشه کشتار داخل استان(کیلوگرم)',
|
||
'تعرفه توزیع لاشه کشتار داخل استان(ریال)',
|
||
'وزن توزیع لاشه به خارج استان(کیلوگرم)',
|
||
'تعرفه توزیع لاشه به خارج استان(ریال)',
|
||
'وزن لاشه ورودی به استان(کیلوگرم)',
|
||
'تعرفه لاشه ورودی به استان(ریال)',
|
||
'وزن مرغ زنده ورودی به استان(کیلوگرم)',
|
||
'تعرفه مرغ زنده ورودی به استان(ریال)',
|
||
|
||
]
|
||
header_list = [
|
||
'ردیف',
|
||
'ماهیت',
|
||
'خریدار',
|
||
'کل تعرفه(ریال)',
|
||
'کل تعرفه پرداخت شده(ریال)',
|
||
'تخفیف(ریال)',
|
||
'کل تعرفه پرداخت نشده(ریال)',
|
||
'کل وزن زنده کشتار داخل استان(کیلوگرم)',
|
||
'کل وزن لاشه کشتار داخل استان(کیلوگرم)',
|
||
'کل توزیع لاشه داخل استان(کیلوگرم)',
|
||
'تعرفه لاشه داخل استان(ریال)',
|
||
'وزن توزیع لاشه به خارج استان(کیلوگرم)',
|
||
'تعرفه توزیع لاشه به خارج استان(ریال)',
|
||
'وزن لاشه ورودی به استان(کیلوگرم)',
|
||
'تعرفه لاشه ورودی به استان(ریال)',
|
||
'وزن مرغ زنده ورودی به استان(کیلوگرم)',
|
||
'تعرفه مرغ زنده ورودی به استان(ریال)',
|
||
|
||
]
|
||
for col_num, option in enumerate(header_list, 1):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=14, column=col_num, value=option)
|
||
if option in ['کل تعرفه پرداخت نشده(ریال)']:
|
||
cell.fill = PatternFill(start_color="76933C", fill_type="solid")
|
||
else:
|
||
cell.fill = PatternFill(start_color="31869B", fill_type="solid")
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
cell.font = Font(size=10, bold=True, color='FFFFFF')
|
||
worksheet.row_dimensions[13].height = 45
|
||
worksheet.column_dimensions[col_letter].width = 27
|
||
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')
|
||
)
|
||
|
||
header_list5 = [
|
||
'سهم',
|
||
'تعرفه توزیع لاشه داخل استان(ریال)',
|
||
'تعرفه توزیع لاشه خارج استان(ریال)',
|
||
'تعرفه لاشه ورودی به استان(ریال)',
|
||
'تعرفه مرغ زنده ورودی به استان(ریال)',
|
||
'تعرفه کل(ریال)',
|
||
'تعرفه پرداخت شده(ریال)',
|
||
'تعرفه پرداخت نشده(ریال)',
|
||
|
||
]
|
||
create_header(worksheet, header_list5, 3, 8, height=35, width=18, border_style='thin')
|
||
|
||
create_header(worksheet, header_list1, 4, 3, height=35, width=18, border_style='thin')
|
||
create_header(worksheet, header_list2, 3, 5, height=35, width=18, border_style='thin')
|
||
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request').first()
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
union_wage_percent = percentage_wage_type.percent / 100
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
company_wage_percent = percentage_wage_type.percent / 100
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
guilds_wage_percent = percentage_wage_type.percent / 100
|
||
elif percentage_wage_type.share_type.en_name in ['city', 'wallet']:
|
||
pass
|
||
else:
|
||
other_wage_percent = percentage_wage_type.percent / 100
|
||
type = 'total_wage_amount'
|
||
share_type = 'amount'
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||
free_buying_live_weight_amount = total_wage_type.filter(en_name='live-buy', trash=False).first().amount
|
||
free_buying_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-buy', trash=False).first().amount
|
||
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||
if 'date1' in request.GET:
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
||
archive_wage=False, return_to_province=False,
|
||
state__in=('pending', 'accepted'),
|
||
first_car_allocated_quantity=0,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).order_by(
|
||
'id')
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
trash=False, calculate_status=True, kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2
|
||
)
|
||
|
||
chain_allocations = ChainAllocation.objects.filter(date__date__gte=date1, date__date__lte=date2,
|
||
trash=False, state='accepted')
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
kill_house__in=kill_houses,
|
||
archive_wage=False,
|
||
calculate_status=True,
|
||
trash=False)
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
kill_house__in=kill_houses,
|
||
archive_wage=False,
|
||
calculate_status=True,
|
||
trash=False)
|
||
|
||
slaughter_transactions = InternalTransaction.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
kill_house__in=kill_houses, status='completed',
|
||
trash=False)
|
||
|
||
off = kill_houses.aggregate(total=Sum('off'))[
|
||
'total'] or 0
|
||
|
||
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
|
||
total_province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
total_province_live_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
total_out_selling_province_carcasses_weight = \
|
||
kill_house_free_sale_bar_info.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
total_province_carcasses_weight = total_province_live_weight * 0.75
|
||
total_out_carcasses_buying_for_pure_province_carcasses_weight = \
|
||
kill_house_free_bar_info.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0
|
||
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight(
|
||
kill_houses)
|
||
total_out_live_buying_province_carcasses_weight = \
|
||
kill_house_free_bar_info.filter(buy_type='live').aggregate(total=Sum('live_weight'))['total'] or 0
|
||
total_out_carcasses_buying_province_carcasses_weight = \
|
||
kill_house_free_bar_info.filter(buy_type='carcass').aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_pure_province_carcasses_price = total_pure_province_carcasses_weight * province_live_wage_amount
|
||
total_out_selling_province_carcasses_price = total_out_selling_province_carcasses_weight * free_sell_carcesses_weight_amount
|
||
total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_amount
|
||
total_out_carcasses_buying_province_carcasses_price = total_out_carcasses_buying_province_carcasses_weight * free_buying_carcesses_weight_amount
|
||
total_price = total_pure_province_carcasses_price + total_out_selling_province_carcasses_price + total_out_live_buying_province_carcasses_price + total_out_carcasses_buying_province_carcasses_price
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||
union_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
||
company_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='company').first().percent / 100
|
||
guilds_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='guilds').first().percent / 100
|
||
other_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
||
|
||
union_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
||
share_type__en_name='union').first().percent / 100
|
||
union_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
||
share_type__en_name='union').first().percent / 100
|
||
company_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
||
share_type__en_name='company').first().percent / 100
|
||
company_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
||
share_type__en_name='company').first().percent / 100
|
||
guilds_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
||
share_type__en_name='guilds').first().percent / 100
|
||
guilds_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
||
share_type__en_name='guilds').first().percent / 100
|
||
other_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
||
share_type__en_name='other').first().percent / 100
|
||
other_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
||
share_type__en_name='other').first().percent / 100
|
||
|
||
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='union').first().percent / 100
|
||
company_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='company').first().percent / 100
|
||
guilds_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='guilds').first().percent / 100
|
||
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='other').first().percent / 100
|
||
|
||
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
||
union_free_buying_live_wage = total_out_live_buying_province_carcasses_price * union_free_buying_live_percent
|
||
union_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * union_free_buying_carcasses_percent
|
||
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
||
union_total_wage = union_province_kill_request_wage + union_free_buying_live_wage + union_free_buying_carcasses_wage + union_free_sell_carcasses_wage
|
||
union_total_paid_wage = slaughter_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
||
union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
||
|
||
company_province_kill_request_wage = total_pure_province_carcasses_price * company_province_kill_request_percent
|
||
company_free_buying_live_wage = total_out_live_buying_province_carcasses_price * company_free_buying_live_percent
|
||
company_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * company_free_buying_carcasses_percent
|
||
company_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * company_free_sell_carcasses_percent
|
||
company_total_wage = company_province_kill_request_wage + company_free_buying_live_wage + company_free_buying_carcasses_wage + company_free_sell_carcasses_wage
|
||
company_total_paid_wage = slaughter_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
||
# company_total_pure_paid_wage = company_total_paid_wage - (company_total_paid_wage * 0.08))
|
||
company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
||
|
||
guilds_province_kill_request_wage = total_pure_province_carcasses_price * guilds_province_kill_request_percent
|
||
guilds_free_buying_live_wage = total_out_live_buying_province_carcasses_price * guilds_free_buying_live_percent
|
||
guilds_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * guilds_free_buying_carcasses_percent
|
||
guilds_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * guilds_free_sell_carcasses_percent
|
||
guilds_total_wage = guilds_province_kill_request_wage + guilds_free_buying_live_wage + guilds_free_buying_carcasses_wage + guilds_free_sell_carcasses_wage
|
||
guilds_total_paid_wage = slaughter_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
||
guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
||
|
||
other_province_kill_request_wage = total_pure_province_carcasses_price * other_province_kill_request_percent
|
||
other_free_buying_live_wage = total_out_live_buying_province_carcasses_price * other_free_buying_live_percent
|
||
other_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * other_free_buying_carcasses_percent
|
||
other_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * other_free_sell_carcasses_percent
|
||
other_total_wage = other_province_kill_request_wage + other_free_buying_live_wage + other_free_buying_carcasses_wage + other_free_sell_carcasses_wage
|
||
other_total_paid_wage = slaughter_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
||
other_total_unpaid_wage = other_total_wage - other_total_paid_wage
|
||
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
||
archive_wage=False, return_to_province=False,
|
||
state__in=('pending', 'accepted'),
|
||
first_car_allocated_quantity=0).order_by('id')
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
trash=False, calculate_status=True
|
||
)
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house__in=kill_houses,
|
||
archive_wage=False,
|
||
calculate_status=True,
|
||
trash=False)
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
archive_wage=False, calculate_status=True,
|
||
trash=False)
|
||
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house__in=kill_houses, status='completed',
|
||
trash=False)
|
||
|
||
off = kill_houses.aggregate(total=Sum('off'))[
|
||
'total'] or 0
|
||
|
||
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
|
||
total_province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
total_province_live_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
total_out_selling_province_carcasses_weight = \
|
||
kill_house_free_sale_bar_info.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
total_province_carcasses_weight = total_province_live_weight * 0.75
|
||
total_out_carcasses_buying_for_pure_province_carcasses_weight = \
|
||
kill_house_free_bar_info.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0
|
||
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight(
|
||
kill_houses)
|
||
total_out_live_buying_province_carcasses_weight = \
|
||
kill_house_free_bar_info.filter(buy_type='live').aggregate(total=Sum('live_weight'))['total'] or 0
|
||
total_out_carcasses_buying_province_carcasses_weight = \
|
||
kill_house_free_bar_info.filter(buy_type='carcass').aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_pure_province_carcasses_price = total_pure_province_carcasses_weight * province_live_wage_amount
|
||
total_out_selling_province_carcasses_price = total_out_selling_province_carcasses_weight * free_sell_carcesses_weight_amount
|
||
total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_amount
|
||
total_out_carcasses_buying_province_carcasses_price = total_out_carcasses_buying_province_carcasses_weight * free_buying_carcesses_weight_amount
|
||
total_price = total_pure_province_carcasses_price + total_out_selling_province_carcasses_price + total_out_live_buying_province_carcasses_price + total_out_carcasses_buying_province_carcasses_price
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||
union_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
||
company_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='company').first().percent / 100
|
||
guilds_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='guilds').first().percent / 100
|
||
other_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
||
|
||
union_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
||
share_type__en_name='union').first().percent / 100
|
||
union_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
||
share_type__en_name='union').first().percent / 100
|
||
company_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
||
share_type__en_name='company').first().percent / 100
|
||
company_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
||
share_type__en_name='company').first().percent / 100
|
||
guilds_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
||
share_type__en_name='guilds').first().percent / 100
|
||
guilds_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
||
share_type__en_name='guilds').first().percent / 100
|
||
other_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
||
share_type__en_name='other').first().percent / 100
|
||
other_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
||
share_type__en_name='other').first().percent / 100
|
||
|
||
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='union').first().percent / 100
|
||
company_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='company').first().percent / 100
|
||
guilds_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='guilds').first().percent / 100
|
||
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='other').first().percent / 100
|
||
|
||
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
||
union_free_buying_live_wage = total_out_live_buying_province_carcasses_price * union_free_buying_live_percent
|
||
union_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * union_free_buying_carcasses_percent
|
||
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
||
union_total_wage = union_province_kill_request_wage + union_free_buying_live_wage + union_free_buying_carcasses_wage + union_free_sell_carcasses_wage
|
||
union_total_paid_wage = slaughter_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
||
union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
||
|
||
company_province_kill_request_wage = total_pure_province_carcasses_price * company_province_kill_request_percent
|
||
company_free_buying_live_wage = total_out_live_buying_province_carcasses_price * company_free_buying_live_percent
|
||
company_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * company_free_buying_carcasses_percent
|
||
company_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * company_free_sell_carcasses_percent
|
||
company_total_wage = company_province_kill_request_wage + company_free_buying_live_wage + company_free_buying_carcasses_wage + company_free_sell_carcasses_wage
|
||
company_total_paid_wage = slaughter_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
||
# company_total_pure_paid_wage = company_total_paid_wage - (company_total_paid_wage * 0.08))
|
||
company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
||
|
||
guilds_province_kill_request_wage = total_pure_province_carcasses_price * guilds_province_kill_request_percent
|
||
guilds_free_buying_live_wage = total_out_live_buying_province_carcasses_price * guilds_free_buying_live_percent
|
||
guilds_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * guilds_free_buying_carcasses_percent
|
||
guilds_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * guilds_free_sell_carcasses_percent
|
||
guilds_total_wage = guilds_province_kill_request_wage + guilds_free_buying_live_wage + guilds_free_buying_carcasses_wage + guilds_free_sell_carcasses_wage
|
||
guilds_total_paid_wage = slaughter_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
||
guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
||
|
||
other_province_kill_request_wage = total_pure_province_carcasses_price * other_province_kill_request_percent
|
||
other_free_buying_live_wage = total_out_live_buying_province_carcasses_price * other_free_buying_live_percent
|
||
other_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * other_free_buying_carcasses_percent
|
||
other_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * other_free_sell_carcasses_percent
|
||
other_total_wage = other_province_kill_request_wage + other_free_buying_live_wage + other_free_buying_carcasses_wage + other_free_sell_carcasses_wage
|
||
other_total_paid_wage = slaughter_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
||
other_total_unpaid_wage = other_total_wage - other_total_paid_wage
|
||
|
||
values_list = [
|
||
total_price,
|
||
total_paid_wage,
|
||
off,
|
||
total_price - (total_paid_wage + off)
|
||
|
||
]
|
||
create_value(worksheet, values_list, 4, 4, border_style='thin')
|
||
|
||
values_list2 = [
|
||
total_province_live_weight,
|
||
total_province_carcasses_weight,
|
||
total_pure_province_carcasses_weight,
|
||
total_pure_province_carcasses_price,
|
||
total_out_selling_province_carcasses_weight,
|
||
total_out_selling_province_carcasses_price,
|
||
total_out_carcasses_buying_province_carcasses_weight,
|
||
total_out_carcasses_buying_province_carcasses_price,
|
||
total_out_live_buying_province_carcasses_weight,
|
||
total_out_live_buying_province_carcasses_price,
|
||
|
||
]
|
||
create_value(worksheet, values_list2, 6, 3, border_style='thin')
|
||
|
||
values_union = [
|
||
union_province_kill_request_wage,
|
||
union_free_sell_carcasses_wage,
|
||
union_free_buying_carcasses_wage,
|
||
union_free_buying_live_wage,
|
||
union_total_wage,
|
||
union_total_paid_wage,
|
||
union_total_unpaid_wage,
|
||
|
||
]
|
||
create_value(worksheet, values_union, 9, 4, border_style='thin')
|
||
|
||
values_company = [
|
||
company_province_kill_request_wage,
|
||
company_free_sell_carcasses_wage,
|
||
company_free_buying_carcasses_wage,
|
||
company_free_buying_live_wage,
|
||
company_total_wage,
|
||
company_total_paid_wage,
|
||
company_total_unpaid_wage,
|
||
|
||
]
|
||
create_value(worksheet, values_company, 10, 4, border_style='thin')
|
||
|
||
values_guild = [
|
||
guilds_province_kill_request_wage,
|
||
guilds_free_sell_carcasses_wage,
|
||
guilds_free_buying_carcasses_wage,
|
||
guilds_free_buying_live_wage,
|
||
guilds_total_wage,
|
||
guilds_total_paid_wage,
|
||
guilds_total_unpaid_wage,
|
||
|
||
]
|
||
create_value(worksheet, values_guild, 11, 4, border_style='thin')
|
||
|
||
values_others = [
|
||
other_province_kill_request_wage,
|
||
other_free_sell_carcasses_wage,
|
||
other_free_buying_carcasses_wage,
|
||
other_free_buying_live_wage,
|
||
other_total_wage,
|
||
other_total_paid_wage,
|
||
other_total_unpaid_wage,
|
||
|
||
]
|
||
create_value(worksheet, values_others, 12, 4, border_style='thin')
|
||
|
||
l = 15
|
||
m = 1
|
||
|
||
kill_houses = KillHouse.objects.filter(trash=False).exclude(out_province=True).order_by('id')
|
||
|
||
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=kill_houses
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=kill_houses)
|
||
kill_houses = ps.filter()
|
||
else:
|
||
kill_houses = kill_houses
|
||
all_finance_info_total_price = 0
|
||
all_total_paid_wage = 0
|
||
all_off = 0
|
||
all_unpaid = 0
|
||
finance_info_total_province_live_weight = 0
|
||
finance_info_total_province_carcasses_weight = 0
|
||
finance_info_total_pure_province_carcasses_price = 0
|
||
finance_info_total_out_selling_province_carcasses_weight = 0
|
||
finance_info_total_out_selling_province_carcasses_price = 0
|
||
finance_info_total_out_carcasses_buying_province_carcasses_weight = 0
|
||
finance_info_total_out_carcasses_buying_province_carcasses_price = 0
|
||
finance_info_total_out_live_buying_province_carcasses_weight = 0
|
||
finance_info_total_out_live_buying_province_carcasses_price = 0
|
||
finance_info_total_pure_province_carcasses_weight = 0
|
||
|
||
for obj in kill_houses:
|
||
killer = 'کشتارگاه' if obj.killer == False else 'کشتارکن'
|
||
if obj.killer == True and obj.type == 'exclusive':
|
||
parent = KillHousePercentage.objects.get(kill_house=obj, trash=False)
|
||
killer_type = f'کشتارکن اختصاصی {parent.kill_house_for_killer.name}'
|
||
elif obj.killer == True and obj.type == 'public':
|
||
killer_type = 'کشتارکن عمومی'
|
||
else:
|
||
killer_type = 'کشتارگاه'
|
||
total_paid_wage = 0
|
||
if 'date1' in request.GET:
|
||
|
||
finance_info = get_kill_house_finance_info_by_date(obj, date1, date2)
|
||
else:
|
||
finance_info = get_kill_house_finance_info(obj)
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house=obj, status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
|
||
if 'date1' in request.GET:
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
||
state__in=('pending', 'accepted'),
|
||
trash=False,
|
||
return_to_province=False,
|
||
first_car_allocated_quantity=0,
|
||
archive_wage=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2
|
||
).exclude(union_share=0, company_share=0,
|
||
guilds_share=0).only(
|
||
'total_killed_weight', 'union_share', 'company_share',
|
||
'guilds_share', 'total_wage_amount', 'total_killed_quantity')
|
||
freezing_province_kill_requests = province_kill_requests.filter(
|
||
province_request__poultry_request__freezing=True).only('total_killed_weight', 'union_share',
|
||
'company_share',
|
||
'guilds_share', 'total_wage_amount',
|
||
'total_killed_quantity')
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killer=obj) & Q(killhouse_user=obj)) | Q(
|
||
Q(killer__isnull=True) & Q(killhouse_user=obj)) | Q(
|
||
Q(killer__isnull=True) | Q(killer=obj)),
|
||
archive_wage=False,
|
||
trash=False, kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2
|
||
).select_related('province_kill_request').only('accepted_real_weight',
|
||
'province_kill_request__union_share_percent',
|
||
'province_kill_request__wage', 'accepted_real_weight',
|
||
'province_kill_request__guilds_share_percent',
|
||
'province_kill_request__company_share_percent',
|
||
'accepted_real_quantity', 'accepted_real_quantity')
|
||
|
||
kill_house_requests = kill_house_requests.filter(Q(killer=obj) | Q(killhouse_user=obj)).select_related(
|
||
'province_kill_request').only('accepted_real_weight', 'province_kill_request__union_share_percent',
|
||
'province_kill_request__wage', 'accepted_real_weight',
|
||
'province_kill_request__guilds_share_percent',
|
||
'province_kill_request__company_share_percent',
|
||
'accepted_real_quantity')
|
||
|
||
freezing_kill_house_requests = kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=True).select_related(
|
||
'province_kill_request').only('accepted_real_weight', 'province_kill_request__union_share_percent',
|
||
'province_kill_request__wage', 'accepted_real_weight',
|
||
'province_kill_request__guilds_share_percent',
|
||
'province_kill_request__company_share_percent',
|
||
'accepted_real_quantity')
|
||
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2, kill_house=obj,
|
||
archive_wage=False,
|
||
trash=False).only('live_weight', 'union_share',
|
||
'weight_of_carcasses',
|
||
'company_share',
|
||
'guilds_share',
|
||
'total_wage_amount')
|
||
free_bars_live = free_bars.filter(buy_type='live', trash=False).only('live_weight', 'union_share',
|
||
'weight_of_carcasses',
|
||
'company_share',
|
||
'guilds_share',
|
||
'total_wage_amount')
|
||
free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False).only('live_weight',
|
||
'union_share',
|
||
'weight_of_carcasses',
|
||
'company_share',
|
||
'guilds_share',
|
||
'total_wage_amount'
|
||
)
|
||
|
||
slaughter_transactions = InternalTransaction.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
kill_house=obj, status='completed',
|
||
trash=False).only('union_share',
|
||
'company_share',
|
||
'guilds_share', 'amount')
|
||
|
||
else:
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=obj,
|
||
state__in=('pending', 'accepted'),
|
||
trash=False,
|
||
return_to_province=False,
|
||
first_car_allocated_quantity=0,
|
||
archive_wage=False,
|
||
).exclude(union_share=0, company_share=0,
|
||
guilds_share=0).only(
|
||
'total_killed_weight', 'union_share', 'company_share',
|
||
'guilds_share', 'total_wage_amount', 'total_killed_quantity')
|
||
freezing_province_kill_requests = province_kill_requests.filter(
|
||
province_request__poultry_request__freezing=True).only('total_killed_weight', 'union_share',
|
||
'company_share',
|
||
'guilds_share', 'total_wage_amount',
|
||
'total_killed_quantity')
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killer=obj) & Q(killhouse_user=obj)) | Q(
|
||
Q(killer__isnull=True) & Q(killhouse_user=obj)) | Q(
|
||
Q(killer__isnull=True) | Q(killer=obj)),
|
||
archive_wage=False,
|
||
trash=False
|
||
).select_related('province_kill_request').only('accepted_real_weight',
|
||
'province_kill_request__union_share_percent',
|
||
'province_kill_request__wage', 'accepted_real_weight',
|
||
'province_kill_request__guilds_share_percent',
|
||
'province_kill_request__company_share_percent',
|
||
'accepted_real_quantity', 'accepted_real_quantity')
|
||
kill_house_requests = kill_house_requests.filter(Q(killer=obj) | Q(killhouse_user=obj)).select_related(
|
||
'province_kill_request').only(
|
||
'accepted_real_weight', 'province_kill_request__union_share_percent',
|
||
'province_kill_request__wage', 'accepted_real_weight',
|
||
'province_kill_request__guilds_share_percent',
|
||
'province_kill_request__company_share_percent', 'accepted_real_quantity')
|
||
|
||
freezing_kill_house_requests = kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=True).select_related(
|
||
'province_kill_request').only('accepted_real_weight', 'province_kill_request__union_share_percent',
|
||
'province_kill_request__wage', 'accepted_real_weight',
|
||
'province_kill_request__guilds_share_percent',
|
||
'province_kill_request__company_share_percent',
|
||
'accepted_real_quantity')
|
||
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=obj, archive_wage=False,
|
||
trash=False).only('live_weight', 'union_share',
|
||
'weight_of_carcasses',
|
||
'company_share',
|
||
'guilds_share',
|
||
'total_wage_amount')
|
||
free_bars_live = free_bars.filter(buy_type='live', trash=False).only('live_weight', 'union_share',
|
||
'weight_of_carcasses',
|
||
'company_share',
|
||
'guilds_share',
|
||
'total_wage_amount')
|
||
free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False).only('live_weight',
|
||
'union_share',
|
||
'weight_of_carcasses',
|
||
'company_share',
|
||
'guilds_share',
|
||
'total_wage_amount'
|
||
)
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house=obj, status='completed',
|
||
trash=False).only('union_share', 'company_share', 'guilds_share', 'amount')
|
||
|
||
all_finance_info_total_price += finance_info['total_price']
|
||
all_total_paid_wage += total_paid_wage
|
||
all_off += obj.off
|
||
all_unpaid += finance_info['total_price'] - (total_paid_wage + obj.off)
|
||
finance_info_total_province_live_weight += finance_info['total_province_live_weight']
|
||
finance_info_total_province_carcasses_weight += finance_info['total_province_carcasses_weight']
|
||
finance_info_total_pure_province_carcasses_weight += finance_info['total_pure_province_carcasses_weight']
|
||
finance_info_total_pure_province_carcasses_price += finance_info['total_pure_province_carcasses_price']
|
||
finance_info_total_out_selling_province_carcasses_weight += finance_info[
|
||
'total_out_selling_province_carcasses_weight']
|
||
finance_info_total_out_selling_province_carcasses_price += finance_info[
|
||
'total_out_selling_province_carcasses_price']
|
||
finance_info_total_out_carcasses_buying_province_carcasses_weight += finance_info[
|
||
'total_out_carcasses_buying_province_carcasses_weight']
|
||
finance_info_total_out_carcasses_buying_province_carcasses_price += finance_info[
|
||
'total_out_carcasses_buying_province_carcasses_price']
|
||
finance_info_total_out_live_buying_province_carcasses_weight += finance_info[
|
||
'total_out_live_buying_province_carcasses_weight']
|
||
finance_info_total_out_live_buying_province_carcasses_price += finance_info[
|
||
'total_out_live_buying_province_carcasses_price']
|
||
values_list3 = [
|
||
m,
|
||
killer_type,
|
||
killer + '(' + obj.name + ')',
|
||
finance_info['total_price'],
|
||
total_paid_wage,
|
||
obj.off,
|
||
finance_info['total_price'] - (total_paid_wage + obj.off),
|
||
finance_info['total_province_live_weight'],
|
||
finance_info['total_province_carcasses_weight'],
|
||
finance_info['total_pure_province_carcasses_weight'],
|
||
finance_info['total_pure_province_carcasses_price'],
|
||
finance_info['total_out_selling_province_carcasses_weight'],
|
||
finance_info['total_out_selling_province_carcasses_price'],
|
||
finance_info['total_out_carcasses_buying_province_carcasses_weight'],
|
||
finance_info['total_out_carcasses_buying_province_carcasses_price'],
|
||
finance_info['total_out_live_buying_province_carcasses_weight'],
|
||
finance_info['total_out_live_buying_province_carcasses_price'],
|
||
|
||
]
|
||
create_value(worksheet, values_list3, l, 1, border_style='thin')
|
||
|
||
l += 1
|
||
m += 1
|
||
if slaughter_transactions:
|
||
if obj not in kill_house_list:
|
||
kill_house_list.append(obj)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
all_finance_info_total_price,
|
||
all_total_paid_wage,
|
||
all_off,
|
||
all_unpaid,
|
||
finance_info_total_province_live_weight,
|
||
finance_info_total_province_carcasses_weight,
|
||
finance_info_total_pure_province_carcasses_weight,
|
||
finance_info_total_pure_province_carcasses_price,
|
||
finance_info_total_out_selling_province_carcasses_weight,
|
||
finance_info_total_out_selling_province_carcasses_price,
|
||
finance_info_total_out_carcasses_buying_province_carcasses_weight,
|
||
finance_info_total_out_carcasses_buying_province_carcasses_price,
|
||
finance_info_total_out_live_buying_province_carcasses_weight,
|
||
finance_info_total_out_live_buying_province_carcasses_price,
|
||
|
||
]
|
||
create_value(worksheet, list2, l, 1, border_style='thin', color='yellow')
|
||
|
||
for kill_house in kill_house_list:
|
||
sheet_name = kill_house.name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
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=2, 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[2].height = 27
|
||
worksheet.freeze_panes = worksheet['A3']
|
||
max_col = worksheet.max_column
|
||
range_str = f'A2:{get_column_letter(max_col)}{worksheet.max_row}'
|
||
worksheet.auto_filter.ref = range_str
|
||
l = 1
|
||
m = 1
|
||
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()
|
||
|
||
kill_house = KillHouse.objects.get(id=kill_house.id, trash=False)
|
||
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).exclude(guilds_share=0, company_share=0, union_share=0).order_by('id')
|
||
else:
|
||
kill_house = KillHouse.objects.get(key=kill_house.key, trash=False)
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
status='completed',
|
||
trash=False).exclude(guilds_share=0, company_share=0, union_share=0).order_by('id')
|
||
|
||
for transaction in transactions:
|
||
if transaction.kill_house != None:
|
||
fullname = transaction.kill_house.kill_house_operator.user.fullname
|
||
mobile = transaction.kill_house.kill_house_operator.user.mobile
|
||
else:
|
||
fullname = transaction.chain_company.user.fullname
|
||
mobile = transaction.chain_company.user.mobile
|
||
date = convert_to_shamsi(
|
||
datetime=transaction.date
|
||
)
|
||
type = 'دستی' if transaction.transaction_type == 'wage-gateway-manual' else 'آنلاین'
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
amout = transaction.union_share
|
||
elif request.GET['role'] == 'Company':
|
||
amout = transaction.company_share
|
||
elif request.GET['role'] == 'Guilds':
|
||
amout = transaction.guilds_share
|
||
else:
|
||
amout = transaction.amount
|
||
list1 = [
|
||
m,
|
||
date,
|
||
type,
|
||
fullname,
|
||
mobile,
|
||
transaction.orderId,
|
||
transaction.saleReferenceId,
|
||
transaction.orderId,
|
||
transaction.cardHolderPan,
|
||
amout,
|
||
transaction.union_share,
|
||
transaction.company_share,
|
||
transaction.guilds_share,
|
||
transaction.other_share,
|
||
|
||
]
|
||
l += 1
|
||
for item in range(len(list1)):
|
||
cell = worksheet.cell(row=l + 1, column=item + 1, value=list1[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10)
|
||
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
|
||
|
||
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 kill_house_total_transactions_wage_payid_excel(request):
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
kill_house_list = []
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'ماهیت تراکنش',
|
||
'نوع تراکنش',
|
||
'تاریخ پرداخت',
|
||
'شماره پیگیری',
|
||
'شماره درخواست',
|
||
'پرداخت کننده',
|
||
'تلفن پرداخت کننده',
|
||
'شماره کارت',
|
||
'مبلغ کل',
|
||
'سهم اتحادیه(ریال)',
|
||
'سهم صنف(ریال)',
|
||
'سهم شرکت(ریال)',
|
||
'سهم دامپزشک(ریال)',
|
||
|
||
]
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
sheet_name = 'اطلاعات کلی'
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
|
||
if sheet_name == 'اطلاعات کلی':
|
||
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')
|
||
if 'date1' in request.GET:
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
|
||
worksheet['B2'] = f'اطلاعات کلی تعرفه {from_date_1} تا {from_date_2}'
|
||
merge_range1 = 'B2:C2'
|
||
worksheet.merge_cells(merge_range1)
|
||
|
||
worksheet['B2'].font = Font(color="C00000", bold=True)
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
worksheet['B5'] = f'جزئیات '
|
||
|
||
worksheet['B5'].font = Font(color="C00000", bold=True)
|
||
worksheet['B5'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
else:
|
||
# worksheet['B2'] = 'اطلاعات کلی تعرفه(از 1403/01/01 به بعد)'
|
||
|
||
worksheet['B2'].font = Font(color="C00000")
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
merge_range1 = 'B2:C2'
|
||
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['B5'] = f'جزئیات'
|
||
|
||
worksheet['B5'].font = Font(color="C00000", bold=True)
|
||
worksheet['B5'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
merge_range1 = 'B8:C8'
|
||
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['B8'] = 'پرداختی های کشتارگاه ها'
|
||
|
||
worksheet['B8'].font = Font(color="C00000", bold=True)
|
||
worksheet['B8'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
header_list1 = [
|
||
'کل وزن',
|
||
'کل تعرفه (ریال)',
|
||
'کل تعرفه پرداخت شده (ریال)',
|
||
'کل تعرفه پرداخت نشده (ریال)',
|
||
|
||
]
|
||
|
||
header_list2 = [
|
||
'وزن کشتار روزانه (کیلوگرم)',
|
||
'تعرفه کشتار روزانه (ریال)',
|
||
'وزن منجمد (کیلوگرم)',
|
||
'تعرفه منجمد (ریال)',
|
||
'وزن زنجیره ها (کیلوگرم)',
|
||
'تعرفه زنجیره ها (ریال)',
|
||
'وزن مرغ زنده آزاد',
|
||
'تعرفه مرغ زنده آزاد',
|
||
'وزن لاشه آزاد',
|
||
'تعرفه لاشه آزاد',
|
||
]
|
||
header_list = [
|
||
'ردیف',
|
||
'خریدار',
|
||
'نام و نام خانوادگی مالک',
|
||
'تلفن مالک',
|
||
'شهر',
|
||
'تعداد تراکنش ',
|
||
'سهم شما از واریزی(ریال)',
|
||
|
||
]
|
||
for col_num, option in enumerate(header_list, 4):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=8, 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[8].height = 45
|
||
worksheet.column_dimensions[col_letter].width = 27
|
||
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(header_list1, 4):
|
||
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 = blue_fill
|
||
cell.font = Font(size=10, bold=True, color='FFFFFF')
|
||
worksheet.row_dimensions[2].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 18
|
||
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(header_list2, 3):
|
||
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='FFFFFF')
|
||
worksheet.row_dimensions[5].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 18
|
||
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')
|
||
)
|
||
|
||
total_weight = 0
|
||
total_wage = 0
|
||
total_paid_wage = 0
|
||
|
||
union_total_paid_wage = 0
|
||
|
||
company_total_paid_wage = 0
|
||
|
||
guilds_total_paid_wage = 0
|
||
|
||
freezing_province_kill_requests_total_wage = 0
|
||
freezing_province_kill_requests_total_weight = 0
|
||
|
||
free_bars_live_total_wage = 0
|
||
free_bars_live_total_weight = 0
|
||
free_bars_carcases_total_wage = 0
|
||
free_bars_carcases_total_weight = 0
|
||
role = request.GET['role']
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'])
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
|
||
state__in=('pending', 'accepted'), trash=False,
|
||
return_to_province=False,
|
||
first_car_allocated_quantity=0,
|
||
archive_wage=False,
|
||
)
|
||
freezing_province_kill_requests = province_kill_requests.filter(
|
||
province_request__poultry_request__freezing=True)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user=kill_house) & Q(killer=kill_house)) | Q(
|
||
Q(killhouse_user=kill_house) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house)), archive_wage=False,
|
||
trash=False
|
||
)
|
||
freezing_kill_house_requests = kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=True)
|
||
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house, archive_wage=False,
|
||
trash=False)
|
||
free_bars_live = free_bars.filter(buy_type='live', trash=False)
|
||
free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False)
|
||
province_kill_requests_total_wage = \
|
||
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
freezing_province_kill_request_total_wage = \
|
||
freezing_province_kill_requests.aggregate(total=Sum('total_wage_amount'))['total'] or 0
|
||
|
||
total_wage += province_kill_requests_total_wage + freezing_province_kill_request_total_wage
|
||
province_kill_requests_total_weight = \
|
||
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
freezing_province_kill_request_total_weight = \
|
||
freezing_province_kill_requests.aggregate(total=Sum('total_killed_weight'))['total'] or 0
|
||
total_weight += province_kill_requests_total_weight + freezing_province_kill_request_total_weight
|
||
kill_house_reqest_total_wage = \
|
||
kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
||
'total'] or 0
|
||
freezing_kill_house_reqest_total_wage = \
|
||
freezing_kill_house_requests.aggregate(
|
||
total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
||
'total'] or 0
|
||
total_wage += kill_house_reqest_total_wage + freezing_kill_house_reqest_total_wage
|
||
|
||
kill_house_reqest_total_weight = kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
freezing_kill_house_reqest_total_weight = \
|
||
freezing_kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
total_weight += kill_house_reqest_total_weight + freezing_kill_house_reqest_total_weight
|
||
|
||
free_bars_live_total_wage = free_bars_live.aggregate(total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
total_wage += free_bars_live_total_wage
|
||
free_bars_live_total_weight = free_bars_live.aggregate(total=Sum('live_weight'))[
|
||
'total'] or 0
|
||
total_weight += free_bars_live_total_weight
|
||
free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
total_wage += free_bars_carcases_total_wage
|
||
free_bars_carcases_total_weight = free_bars_carcases.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_weight += free_bars_carcases_total_weight
|
||
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
|
||
|
||
elif role == 'ChainCompany':
|
||
chain_company = ChainCompany.objects.get(user=user, trash=False)
|
||
chain_allocations = ChainAllocation.objects.filter(chain_company=chain_company, state='accepted',
|
||
trash=False)
|
||
chain_allocations_total_wage = chain_allocations.aggregate(total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
total_wage += chain_allocations_total_wage
|
||
chain_allocations_total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
total_weight += chain_allocations_total_weight
|
||
|
||
chain_company_transactions = InternalTransaction.objects.filter(chain_company=chain_company,
|
||
status='completed', trash=False)
|
||
total_paid_wage += chain_company_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
|
||
|
||
|
||
else:
|
||
|
||
if role == 'ProvinceOperator':
|
||
type = 'union_share'
|
||
share_type = 'union_share'
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
state__in=('pending', 'accepted'), trash=False,
|
||
first_car_allocated_quantity=0,
|
||
return_to_province=False, archive_wage=False, union_share__gt=0)
|
||
freezing_province_kill_requests = province_kill_requests.filter(
|
||
province_request__poultry_request__freezing=True)
|
||
kill_house_requests = KillHouseRequest.objects.filter(trash=False, archive_wage=False,
|
||
province_kill_request__union_share__gt=0)
|
||
freezing_kill_house_requests = kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=True)
|
||
|
||
chain_allocations = ChainAllocation.objects.filter(union_share__gt=0, state='accepted', trash=False)
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(union_share__gt=0, archive_wage=False,
|
||
trash=False)
|
||
province_kill_requests_total_wage = \
|
||
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(type))[
|
||
'total'] or 0
|
||
province_kill_requests_total_wage += \
|
||
kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__union_share_percent') / 100)))[
|
||
'total'] or 0
|
||
|
||
freezing_province_kill_requests_total_wage = freezing_province_kill_requests.aggregate(total=Sum(type))[
|
||
'total'] or 0
|
||
freezing_province_kill_requests_total_wage += \
|
||
freezing_kill_house_requests.aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__union_share_percent') / 100)))[
|
||
'total'] or 0
|
||
|
||
|
||
|
||
elif role == 'Guilds':
|
||
type = 'guilds_share'
|
||
share_type = 'guilds_share'
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
state__in=('pending', 'accepted'), trash=False,
|
||
first_car_allocated_quantity=0,
|
||
|
||
return_to_province=False, archive_wage=False, guilds_share__gt=0)
|
||
freezing_province_kill_requests = province_kill_requests.filter(
|
||
province_request__poultry_request__freezing=True)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(trash=False, archive_wage=False,
|
||
province_kill_request__guilds_share__gt=0)
|
||
freezing_kill_house_requests = kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=True)
|
||
|
||
chain_allocations = ChainAllocation.objects.filter(guilds_share__gt=0, state='accepted', trash=False)
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(guilds_share__gt=0, archive_wage=False,
|
||
trash=False)
|
||
|
||
province_kill_requests_total_wage = \
|
||
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(type))[
|
||
'total'] or 0
|
||
province_kill_requests_total_wage += \
|
||
kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__guilds_share_percent') / 100)))[
|
||
'total'] or 0
|
||
|
||
freezing_province_kill_requests_total_wage = freezing_province_kill_requests.aggregate(total=Sum(type))[
|
||
'total'] or 0
|
||
freezing_province_kill_requests_total_wage += \
|
||
freezing_kill_house_requests.aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__guilds_share_percent') / 100)))[
|
||
'total'] or 0
|
||
|
||
|
||
elif role == 'Company':
|
||
type = 'company_share'
|
||
share_type = 'company_share'
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
state__in=('pending', 'accepted'), trash=False,
|
||
first_car_allocated_quantity=0,
|
||
return_to_province=False, archive_wage=False, company_share__gt=0)
|
||
freezing_province_kill_requests = province_kill_requests.filter(
|
||
province_request__poultry_request__freezing=True)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(trash=False, archive_wage=False,
|
||
province_kill_request__company_share__gt=0)
|
||
freezing_kill_house_requests = kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=True)
|
||
|
||
chain_allocations = ChainAllocation.objects.filter(company_share__gt=0, state='accepted', trash=False)
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(company_share__gt=0, archive_wage=False,
|
||
trash=False)
|
||
province_kill_requests_total_wage = \
|
||
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(type))[
|
||
'total'] or 0
|
||
province_kill_requests_total_wage += \
|
||
kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__company_share_percent') / 100)))[
|
||
'total'] or 0
|
||
|
||
freezing_province_kill_requests_total_wage = freezing_province_kill_requests.aggregate(total=Sum(type))[
|
||
'total'] or 0
|
||
freezing_province_kill_requests_total_wage += \
|
||
freezing_kill_house_requests.aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__company_share_percent') / 100)))[
|
||
'total'] or 0
|
||
|
||
else:
|
||
type = 'total_wage_amount'
|
||
share_type = 'amount'
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
state__in=('pending', 'accepted'), trash=False, archive_wage=False,
|
||
first_car_allocated_quantity=0,
|
||
return_to_province=False).exclude(union_share=0, company_share=0, guilds_share=0)
|
||
freezing_province_kill_requests = province_kill_requests.filter(
|
||
province_request__poultry_request__freezing=True)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(trash=False, archive_wage=False).exclude(
|
||
province_kill_request__union_share=0, province_kill_request__company_share=0,
|
||
province_kill_request__guilds_share=0)
|
||
freezing_kill_house_requests = kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=True)
|
||
|
||
chain_allocations = ChainAllocation.objects.filter(trash=False, state='accepted')
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(archive_wage=False, trash=False)
|
||
total_slaughter_transactions = InternalTransaction.objects.filter(payer_type='kill_house',
|
||
status='completed',
|
||
trash=False)
|
||
total_chain_company_transactions = InternalTransaction.objects.filter(payer_type='chain_company',
|
||
status='completed', trash=False)
|
||
|
||
union_province_kill_request_total_weight = \
|
||
province_kill_requests.filter(union_share__gt=0,
|
||
province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
freezing_union_province_kill_request_total_weight = \
|
||
freezing_province_kill_requests.filter(union_share__gt=0).aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
union_province_kill_request_total_weight += \
|
||
kill_house_requests.filter(province_kill_request__union_share__gt=0,
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
freezing_union_province_kill_request_total_weight += \
|
||
freezing_kill_house_requests.filter(province_kill_request__union_share__gt=0).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
union_province_kill_request_total_wage = \
|
||
province_kill_requests.filter(union_share__gt=0,
|
||
province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('union_share'))[
|
||
'total'] or 0
|
||
union_province_kill_request_total_wage += \
|
||
kill_house_requests.filter(province_kill_request__union_share__gt=0,
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__union_share_percent') / 100)))[
|
||
'total'] or 0
|
||
|
||
freezing_union_province_kill_request_total_wage = \
|
||
freezing_province_kill_requests.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
freezing_union_province_kill_request_total_wage += \
|
||
freezing_kill_house_requests.filter(province_kill_request__union_share__gt=0).aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__union_share_percent') / 100)))[
|
||
'total'] or 0
|
||
union_chain_allocation_total_weight = \
|
||
chain_allocations.filter(union_share__gt=0).aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
union_chain_allocation_total_wage = \
|
||
chain_allocations.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
union_kill_house_free_live_bar_total_weight = \
|
||
free_bars.filter(buy_type='live', union_share__gt=0).aggregate(total=Sum('live_weight'))[
|
||
'total'] or 0
|
||
union_kill_house_free_live_bar_total_wage = \
|
||
free_bars.filter(buy_type='live', union_share__gt=0).aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
|
||
union_kill_house_free_carcases_bar_total_weight = \
|
||
free_bars.filter(buy_type='carcass', union_share__gt=0).aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
union_kill_house_free_carcases_bar_total_wage = \
|
||
free_bars.filter(buy_type='carcass', union_share__gt=0).aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
union_total_paid_wage += \
|
||
total_slaughter_transactions.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
union_total_paid_wage += \
|
||
total_chain_company_transactions.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
union_total_weight = union_province_kill_request_total_weight + freezing_union_province_kill_request_total_weight + union_chain_allocation_total_weight + union_kill_house_free_live_bar_total_weight + union_kill_house_free_carcases_bar_total_weight
|
||
union_total_wage = union_province_kill_request_total_wage + freezing_union_province_kill_request_total_wage + union_chain_allocation_total_wage + union_kill_house_free_live_bar_total_wage + union_kill_house_free_carcases_bar_total_wage
|
||
union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
||
|
||
company_province_kill_request_total_weight = \
|
||
province_kill_requests.filter(company_share__gt=0,
|
||
province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
company_province_kill_request_total_weight += \
|
||
kill_house_requests.filter(province_kill_request__company_share__gt=0,
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
freezing_company_province_kill_request_total_weight = \
|
||
freezing_province_kill_requests.filter(company_share__gt=0).aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
freezing_company_province_kill_request_total_weight += \
|
||
freezing_kill_house_requests.filter(province_kill_request__company_share__gt=0).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
company_province_kill_request_total_wage = \
|
||
province_kill_requests.filter(company_share__gt=0,
|
||
province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('company_share'))[
|
||
'total'] or 0
|
||
company_province_kill_request_total_wage += \
|
||
kill_house_requests.filter(province_kill_request__company_share__gt=0,
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__company_share_percent') / 100)))[
|
||
'total'] or 0
|
||
freezing_company_province_kill_request_total_wage = \
|
||
freezing_province_kill_requests.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
||
'total'] or 0
|
||
freezing_company_province_kill_request_total_wage += \
|
||
freezing_kill_house_requests.filter(province_kill_request__company_share__gt=0).aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__company_share_percent') / 100)))[
|
||
'total'] or 0
|
||
company_chain_allocation_total_weight = \
|
||
chain_allocations.filter(company_share__gt=0).aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
company_chain_allocation_total_wage = \
|
||
chain_allocations.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
||
'total'] or 0
|
||
company_kill_house_free_live_bar_total_weight = \
|
||
free_bars.filter(buy_type='live', company_share__gt=0).aggregate(total=Sum('live_weight'))[
|
||
'total'] or 0
|
||
company_kill_house_free_live_bar_total_wage = \
|
||
free_bars.filter(buy_type='live', company_share__gt=0).aggregate(total=Sum('company_share'))[
|
||
'total'] or 0
|
||
|
||
company_kill_house_free_carcases_bar_total_weight = \
|
||
free_bars.filter(buy_type='carcass', company_share__gt=0).aggregate(
|
||
total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
company_kill_house_free_carcases_bar_total_wage = \
|
||
free_bars.filter(buy_type='carcass', company_share__gt=0).aggregate(total=Sum('company_share'))[
|
||
'total'] or 0
|
||
company_total_paid_wage += \
|
||
total_slaughter_transactions.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
||
'total'] or 0
|
||
company_total_paid_wage += \
|
||
total_chain_company_transactions.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
||
'total'] or 0
|
||
company_total_weight = company_province_kill_request_total_weight + freezing_company_province_kill_request_total_weight + company_chain_allocation_total_weight + company_kill_house_free_live_bar_total_weight + company_kill_house_free_carcases_bar_total_weight
|
||
company_total_wage = company_province_kill_request_total_wage + freezing_company_province_kill_request_total_wage + company_chain_allocation_total_wage + company_kill_house_free_live_bar_total_wage + company_kill_house_free_carcases_bar_total_wage
|
||
company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
||
|
||
guilds_province_kill_request_total_weight = \
|
||
province_kill_requests.filter(guilds_share__gt=0,
|
||
province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
guilds_province_kill_request_total_weight += \
|
||
kill_house_requests.filter(province_kill_request__guilds_share__gt=0,
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
freezing_guilds_province_kill_request_total_weight = \
|
||
freezing_province_kill_requests.filter(guilds_share__gt=0).aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
freezing_guilds_province_kill_request_total_weight += \
|
||
freezing_kill_house_requests.filter(province_kill_request__guilds_share__gt=0).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
guilds_province_kill_request_total_wage = \
|
||
province_kill_requests.filter(guilds_share__gt=0,
|
||
province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('guilds_share'))[
|
||
'total'] or 0
|
||
guilds_province_kill_request_total_wage += \
|
||
kill_house_requests.filter(province_kill_request__guilds_share__gt=0,
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__guilds_share_percent') / 100)))[
|
||
'total'] or 0
|
||
freezing_guilds_province_kill_request_total_wage = \
|
||
freezing_province_kill_requests.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
||
'total'] or 0
|
||
freezing_guilds_province_kill_request_total_wage += \
|
||
freezing_kill_house_requests.filter(province_kill_request__guilds_share__gt=0).aggregate(total=Sum(
|
||
F('accepted_real_weight') * F('province_kill_request__wage') * (
|
||
F('province_kill_request__guilds_share_percent') / 100)))[
|
||
'total'] or 0
|
||
guilds_chain_allocation_total_weight = \
|
||
chain_allocations.filter(guilds_share__gt=0).aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
guilds_chain_allocation_total_wage = \
|
||
chain_allocations.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
||
'total'] or 0
|
||
guilds_kill_house_free_live_bar_total_weight = \
|
||
free_bars.filter(buy_type='live', guilds_share__gt=0).aggregate(total=Sum('live_weight'))[
|
||
'total'] or 0
|
||
guilds_kill_house_free_live_bar_total_wage = \
|
||
free_bars.filter(buy_type='live', guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
||
'total'] or 0
|
||
|
||
guilds_kill_house_free_carcases_bar_total_weight = \
|
||
free_bars.filter(buy_type='carcass', guilds_share__gt=0).aggregate(
|
||
total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
guilds_kill_house_free_carcases_bar_total_wage = \
|
||
free_bars.filter(buy_type='carcass', guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
||
'total'] or 0
|
||
guilds_total_paid_wage += \
|
||
total_slaughter_transactions.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
||
'total'] or 0
|
||
guilds_total_paid_wage += \
|
||
total_chain_company_transactions.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
||
'total'] or 0
|
||
guilds_total_weight = guilds_province_kill_request_total_weight + freezing_guilds_province_kill_request_total_weight + guilds_chain_allocation_total_weight + guilds_kill_house_free_live_bar_total_weight + guilds_kill_house_free_carcases_bar_total_weight
|
||
guilds_total_wage = guilds_province_kill_request_total_wage + freezing_guilds_province_kill_request_total_wage + guilds_chain_allocation_total_wage + guilds_kill_house_free_live_bar_total_wage + guilds_kill_house_free_carcases_bar_total_wage
|
||
guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
||
|
||
province_kill_requests_total_wage = \
|
||
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(type))[
|
||
'total'] or 0
|
||
province_kill_requests_total_wage += \
|
||
kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
||
'total'] or 0
|
||
|
||
freezing_province_kill_requests_total_wage = freezing_province_kill_requests.aggregate(total=Sum(type))[
|
||
'total'] or 0
|
||
freezing_province_kill_requests_total_wage += \
|
||
freezing_kill_house_requests.aggregate(
|
||
total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
||
'total'] or 0
|
||
|
||
free_bars_live = free_bars.filter(buy_type='live', trash=False)
|
||
free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False)
|
||
|
||
total_wage += province_kill_requests_total_wage + freezing_province_kill_requests_total_wage
|
||
|
||
province_kill_requests_total_weight = \
|
||
province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
province_kill_requests_total_weight += kill_house_requests.filter(
|
||
province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
freezing_province_kill_requests_total_weight = \
|
||
freezing_province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
freezing_province_kill_requests_total_weight += \
|
||
freezing_kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
total_weight += province_kill_requests_total_weight + freezing_province_kill_requests_total_weight
|
||
|
||
chain_allocations_total_wage = chain_allocations.aggregate(total=Sum(type))[
|
||
'total'] or 0
|
||
total_wage += chain_allocations_total_wage
|
||
chain_allocations_total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
total_weight += chain_allocations_total_weight
|
||
free_bars_live_total_wage = free_bars_live.aggregate(total=Sum(type))[
|
||
'total'] or 0
|
||
total_wage += free_bars_live_total_wage
|
||
free_bars_live_total_weight = free_bars_live.aggregate(total=Sum('live_weight'))[
|
||
'total'] or 0
|
||
total_weight += free_bars_live_total_weight
|
||
free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum(type))[
|
||
'total'] or 0
|
||
total_wage += free_bars_carcases_total_wage
|
||
free_bars_carcases_total_weight = free_bars_carcases.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_weight += free_bars_carcases_total_weight
|
||
slaughter_transactions = InternalTransaction.objects.filter(payer_type='kill_house', status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage += slaughter_transactions.aggregate(total=Sum(share_type))[
|
||
'total'] or 0
|
||
chain_company_transactions = InternalTransaction.objects.filter(payer_type='chain_company',
|
||
status='completed', trash=False)
|
||
total_paid_wage += chain_company_transactions.aggregate(total=Sum(share_type))[
|
||
'total'] or 0
|
||
|
||
values_list = [
|
||
total_weight,
|
||
total_wage,
|
||
total_paid_wage,
|
||
total_wage - total_paid_wage,
|
||
|
||
]
|
||
for item in range(len(values_list)):
|
||
cell = worksheet.cell(row=3, column=item + 4, value=values_list[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_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.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')
|
||
)
|
||
|
||
values_list2 = [
|
||
province_kill_requests_total_weight,
|
||
province_kill_requests_total_wage,
|
||
freezing_province_kill_requests_total_weight,
|
||
freezing_province_kill_requests_total_wage,
|
||
chain_allocations_total_weight,
|
||
chain_allocations_total_wage,
|
||
free_bars_live_total_weight,
|
||
free_bars_live_total_wage,
|
||
free_bars_carcases_total_weight,
|
||
free_bars_carcases_total_wage,
|
||
|
||
]
|
||
for item in range(len(values_list2)):
|
||
cell = worksheet.cell(row=6, column=item + 3, value=values_list2[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_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.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')
|
||
)
|
||
l = 9
|
||
m = 1
|
||
|
||
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()
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
union_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
company_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
guilds_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
payer_type='kill_house',
|
||
status='completed',
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
union_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
company_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
guilds_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
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=kill_houses
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=kill_houses)
|
||
kill_houses = ps.filter()
|
||
else:
|
||
kill_houses = kill_houses
|
||
for obj in kill_houses:
|
||
if 'date1' in request.GET:
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
else:
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=obj) | Q(parent_kill_house=obj),
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
total_paid_wage = 0
|
||
|
||
role = request.GET['role']
|
||
if role in ['KillHouse', 'SuperAdmin', 'AdminX', 'Supporter']:
|
||
wage_type = 'amount'
|
||
transactions = transactions
|
||
elif role == 'ProvinceOperator':
|
||
wage_type = 'union_share'
|
||
transactions = transactions.filter(
|
||
|
||
union_share__gt=0,
|
||
).order_by('id')
|
||
elif role == 'Company':
|
||
wage_type = 'company_share'
|
||
transactions = transactions.filter(
|
||
|
||
company_share__gt=0,
|
||
).order_by('id')
|
||
elif role == 'Guilds':
|
||
wage_type = 'guilds_share'
|
||
transactions = transactions.filter(
|
||
guilds_share__gt=0,
|
||
).order_by('id')
|
||
else:
|
||
transactions = transactions
|
||
wage_type = 'wallet_share'
|
||
if transactions:
|
||
if obj not in kill_house_list:
|
||
kill_house_list.append(obj)
|
||
total_paid_wage += transactions.aggregate(total=Sum(wage_type))[
|
||
'total'] or 0
|
||
|
||
killer = 'کشتارگاه' if obj.killer == False else 'کشتارکن'
|
||
values_list3 = [
|
||
m,
|
||
killer + '(' + obj.name + ')',
|
||
obj.kill_house_operator.user.fullname,
|
||
obj.kill_house_operator.user.mobile,
|
||
obj.kill_house_operator.user.city.name,
|
||
len(transactions),
|
||
total_paid_wage,
|
||
|
||
]
|
||
for item in range(len(values_list3)):
|
||
cell = worksheet.cell(row=l, column=item + 4, value=values_list3[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_list3[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.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')
|
||
)
|
||
l += 1
|
||
m += 1
|
||
for kill_house in kill_house_list:
|
||
sheet_name = kill_house.name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
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')
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22, width=20.01)
|
||
|
||
l = 5
|
||
m = 1
|
||
header_list = [
|
||
'تعداد کل تراکنش ها',
|
||
'مبلغ کل تراکنش(ریال)',
|
||
'سهم کل اتحادیه(ریال)',
|
||
'سهم کل صنف(ریال)',
|
||
'سهم کل شرکت(ریال)',
|
||
'سهم کل دامپزشک(ریال)',
|
||
|
||
]
|
||
|
||
create_header(worksheet, header_list, 5, 2, height=20)
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'])
|
||
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()
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).exclude(guilds_share=0, company_share=0, union_share=0).order_by('id')
|
||
|
||
elif request.GET['role'] == 'ChainCompany':
|
||
chain_company = ChainCompany.objects.get(user=user, trash=False)
|
||
|
||
transactions = InternalTransaction.objects.filter(
|
||
chain_company=chain_company,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).exclude(guilds_share=0, company_share=0, union_share=0).order_by('id')
|
||
|
||
else:
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
union_share__gt=0,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'Company':
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
company_share__gt=0,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'Guilds':
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
guilds_share__gt=0,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'SuperAdmin':
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).exclude(guilds_share=0, company_share=0, union_share=0).order_by('id')
|
||
else:
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
|
||
else:
|
||
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
|
||
elif request.GET['role'] == 'ChainCompany':
|
||
chain_company = ChainCompany.objects.get(user=user, trash=False)
|
||
|
||
transactions = InternalTransaction.objects.filter(
|
||
chain_company=chain_company,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
|
||
else:
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
union_share__gt=0,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'Company':
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
company_share__gt=0,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
|
||
elif request.GET['role'] == 'Guilds':
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
guilds_share__gt=0,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'SuperAdmin':
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
status='completed',
|
||
trash=False).exclude(guilds_share=0, company_share=0, union_share=0).order_by('id')
|
||
|
||
else:
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
|
||
for transaction in transactions:
|
||
if transaction.kill_house:
|
||
killer_type = 'کشتارگاه' if transaction.kill_house.killer == False else 'کشتارکن'
|
||
elif transaction.chain_company:
|
||
killer_type = 'شرکت زنجیره'
|
||
else:
|
||
killer_type = 'خارج استان'
|
||
l += 1
|
||
payer_date = jdatetime.date.fromgregorian(
|
||
day=transaction.date.day,
|
||
month=transaction.date.month,
|
||
year=transaction.date.year
|
||
)
|
||
|
||
if transaction.kill_house != None:
|
||
fullname = transaction.kill_house.kill_house_operator.user.fullname
|
||
mobile = transaction.kill_house.kill_house_operator.user.mobile
|
||
elif transaction.chain_company is not None:
|
||
fullname = transaction.chain_company.user.fullname
|
||
mobile = transaction.chain_company.user.mobile
|
||
else:
|
||
fullname = transaction.user.fullname
|
||
mobile = transaction.user.mobile
|
||
type = 'دستی' if transaction.transaction_type == 'wage-gateway-manual' else 'آنلاین'
|
||
|
||
list1 = [
|
||
m,
|
||
killer_type,
|
||
type,
|
||
str(payer_date),
|
||
transaction.refId,
|
||
transaction.orderId,
|
||
fullname,
|
||
mobile,
|
||
transaction.cardHolderPan,
|
||
transaction.amount,
|
||
transaction.union_share,
|
||
transaction.guilds_share,
|
||
transaction.company_share,
|
||
transaction.other_share
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
total_amount = \
|
||
transactions.aggregate(total=Sum('amount'))['total'] or 0
|
||
total_union_share = \
|
||
transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
||
total_guilds_share = \
|
||
transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
||
total_company_share = \
|
||
transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
||
total_other_share = \
|
||
transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
||
|
||
value_header_list = [
|
||
m - 1,
|
||
total_amount,
|
||
total_union_share,
|
||
total_guilds_share,
|
||
total_company_share,
|
||
total_other_share,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 5)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_amount,
|
||
total_union_share,
|
||
total_guilds_share,
|
||
total_company_share,
|
||
total_other_share,
|
||
|
||
]
|
||
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 kill_house_total_wage_excel_new(request):
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'])
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
sheet_names2 = [
|
||
'اطلاعات کلی',
|
||
'تخصیصات بدون بار',
|
||
'بارهای روزانه',
|
||
'مرغ زنده خارج استان',
|
||
'خرید لاشه خارج استان',
|
||
# 'فروش لاشه خارج استان',
|
||
]
|
||
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request').first()
|
||
total_check_wage = wage_type.amount
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
union_wage_percent = percentage_wage_type.percent / 100
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
company_wage_percent = percentage_wage_type.percent / 100
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
guilds_wage_percent = percentage_wage_type.percent / 100
|
||
elif percentage_wage_type.share_type.en_name in ['city', 'wallet']:
|
||
pass
|
||
else:
|
||
other_wage_percent = percentage_wage_type.percent / 100
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||
free_buying_live_weight_amount = total_wage_type.filter(en_name='live-buy', trash=False).first().amount
|
||
free_buying_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-buy', trash=False).first().amount
|
||
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||
total_wage_information = TotalWageInformation.objects.filter(trash=False).first()
|
||
if not total_wage_information:
|
||
total_wage_information = TotalWageInformation.objects.create()
|
||
serialized_wage_data = TotalWageInformationSerializer(
|
||
total_wage_information,
|
||
context={'request': request}
|
||
).data.get('wage_info', {})
|
||
serializer_finance_info = serialized_wage_data.get('finance_info')
|
||
effective_wage_counting_type = serialized_wage_data.get('wage_counting_type', wage_counting_type)
|
||
for name in sheet_names2:
|
||
sheet_name = name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
|
||
if sheet_name == 'اطلاعات کلی':
|
||
finance_info = serializer_finance_info or {}
|
||
if not finance_info and date1 and date2:
|
||
finance_info = get_kill_house_finance_info_by_date(kill_house, date1, date2)
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
if 'date1' in request.GET:
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
excel_description(worksheet, 'A3', f'اطلاعات کلی تعرفه از تاریخ{from_date_1} تا {from_date_2}',
|
||
color='red', row2='C3')
|
||
excel_description(worksheet, 'A4', f'{kill_house.name}', color='red', row2='B4')
|
||
|
||
if effective_wage_counting_type == 'carcass':
|
||
header_list1 = [
|
||
'کل وزن لاشه داخل استان',
|
||
'وزن مر غ زنده خارج از استان',
|
||
'وزن لاشه خرید خارج از استان',
|
||
'کل تعرفه',
|
||
|
||
]
|
||
create_header(worksheet, header_list1, 4, 4, height=50, width=19, border_style='thin', color='C4D79B')
|
||
value_list1 = [
|
||
finance_info.get('total_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_live_buying_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_carcasses_buying_province_carcasses_weight', 0),
|
||
finance_info.get('total_price', 0),
|
||
]
|
||
create_value(worksheet, value_list1, 5, 4, border_style='thin')
|
||
|
||
header_list2 = [
|
||
'تعرفه کشتار و توزیع داخل استان',
|
||
'تعرفه کشتار و توزیع خارج استان استان',
|
||
'تعرفه خرید لاشه خارج استان',
|
||
'تعرفه خرید مرغ زنده خارج استان',
|
||
'کل وزن زنده کشتار داخل استان(کیلوگرم)',
|
||
'وزن لاشه کشتار داخل استان(کیلوگرم)',
|
||
'وزن توزیع لاشه داخل استان(کیلوگرم)',
|
||
'تعرفه توزیع لاشه داخل استان(ریال)',
|
||
'وزن توزیع لاشه به خارج استان(کیلوگرم)',
|
||
'تعرفه توزیع لاشه به خارج استان(ریال)',
|
||
'وزن لاشه ورودی به استان(کیلوگرم)',
|
||
'تعرفه لاشه ورودی به استان(ریال)',
|
||
'وزن مرغ زنده ورودی به استان(کیلوگرم)',
|
||
'تعرفه مرغ زنده ورودی به استان(کیلوگرم)',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 1, 9, height=50, width=19, border_style='thin', color='E26B0A')
|
||
value_list2 = [
|
||
finance_info.get('province_live_wage_amount', 0),
|
||
finance_info.get('free_sell_carcesses_weight_amount', 0),
|
||
finance_info.get('free_buying_carcesses_weight_amount', 0),
|
||
finance_info.get('free_buying_live_weight_amount', 0),
|
||
|
||
finance_info.get('total_province_live_weight', 0),
|
||
finance_info.get('total_province_carcasses_weight', 0),
|
||
|
||
finance_info.get('total_pure_province_carcasses_weight', 0),
|
||
finance_info.get('total_pure_province_carcasses_price', 0),
|
||
finance_info.get('total_out_selling_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_selling_province_carcasses_price', 0),
|
||
finance_info.get('total_out_carcasses_buying_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_carcasses_buying_province_carcasses_price', 0),
|
||
finance_info.get('total_out_live_buying_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_live_buying_province_carcasses_price', 0),
|
||
|
||
]
|
||
create_value(worksheet, value_list2, 10, 1, border_style='thin')
|
||
else:
|
||
header_list1 = [
|
||
'کل وزن لاشه داخل استان',
|
||
'وزن مر غ زنده خارج از استان',
|
||
'وزن لاشه خرید خارج از استان',
|
||
'کل تعرفه',
|
||
|
||
]
|
||
create_header(worksheet, header_list1, 4, 4, height=50, width=19, border_style='thin', color='C4D79B')
|
||
value_list1 = [
|
||
finance_info.get('total_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_live_buying_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_carcasses_buying_province_carcasses_weight', 0),
|
||
finance_info.get('total_price', 0),
|
||
]
|
||
create_value(worksheet, value_list1, 5, 4, border_style='thin')
|
||
|
||
header_list2 = [
|
||
'تعرفه کشتار و توزیع داخل استان',
|
||
'تعرفه کشتار و توزیع خارج استان استان',
|
||
'تعرفه خرید لاشه خارج استان',
|
||
'تعرفه خرید مرغ زنده خارج استان',
|
||
'کل وزن زنده کشتار داخل استان(کیلوگرم)',
|
||
# 'وزن لاشه کشتار داخل استان(کیلوگرم)',
|
||
# 'وزن توزیع لاشه داخل استان(کیلوگرم)',
|
||
'تعرفه کشتار داخل استان(ریال)',
|
||
'وزن توزیع لاشه به خارج استان(کیلوگرم)',
|
||
'تعرفه توزیع لاشه به خارج استان(ریال)',
|
||
'وزن لاشه ورودی به استان(کیلوگرم)',
|
||
'تعرفه لاشه ورودی به استان(ریال)',
|
||
'وزن مرغ زنده ورودی به استان(کیلوگرم)',
|
||
'تعرفه مرغ زنده ورودی به استان(کیلوگرم)',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 1, 9, height=50, width=19, border_style='thin', color='E26B0A')
|
||
value_list2 = [
|
||
finance_info.get('province_live_wage_amount', 0),
|
||
finance_info.get('free_sell_carcesses_weight_amount', 0),
|
||
finance_info.get('free_buying_carcesses_weight_amount', 0),
|
||
finance_info.get('free_buying_live_weight_amount', 0),
|
||
|
||
finance_info.get('total_province_live_weight', 0),
|
||
# finance_info['total_province_carcasses_weight'],
|
||
|
||
finance_info.get('total_pure_province_carcasses_price', 0),
|
||
# finance_info['total_pure_province_carcasses_price'],
|
||
finance_info.get('total_out_selling_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_selling_province_carcasses_price', 0),
|
||
finance_info.get('total_out_carcasses_buying_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_carcasses_buying_province_carcasses_price', 0),
|
||
finance_info.get('total_out_live_buying_province_carcasses_weight', 0),
|
||
finance_info.get('total_out_live_buying_province_carcasses_price', 0),
|
||
|
||
]
|
||
create_value(worksheet, value_list2, 10, 1, border_style='thin')
|
||
# excel_description(worksheet, 'D13', 'اطلاعات بار', size='16', row2='F13')
|
||
# header_list3 = [
|
||
# 'تعداد بارهای ایجاد شده',
|
||
# 'مجموع تعداد قطعه بارها',
|
||
# 'مجموع وزن زنده بارها',
|
||
# 'مجموع تعداد نهایی در کشتارگاه',
|
||
# 'مجموع وزن نهایی در کشتار گاه',
|
||
# 'ملاک قطعه کشتار شده',
|
||
# 'ملاک وزن زنده کشتار شده',
|
||
# 'تعرفه پایه',
|
||
# 'وزن لاشه',
|
||
# 'مجموع تعرفه های بار',
|
||
#
|
||
# ]
|
||
# create_header(worksheet, header_list3, 1, 14, height=50, width=19, border_style='thin', color='0070C0')
|
||
# kill_house_requests_quantity = \
|
||
# kill_house_requests.aggregate(total=Sum('quantity'))['total'] or 0
|
||
# kill_house_requests_accepted_real_weight = \
|
||
# kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
# kill_house_requests_accepted_real_quantity = \
|
||
# kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0
|
||
# kill_house_requests_wight = \
|
||
# kill_house_requests.aggregate(total=Sum(
|
||
# F('quantity') * F('province_kill_request__province_request__poultry_request__Index_weight')))[
|
||
# 'total'] or 0
|
||
#
|
||
# kill_house_requests_accepted_real_wight = \
|
||
# kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
# assignment = KillHouseAssignmentInformation.objects.filter(
|
||
# kill_house_request__in=kill_house_requests, trash=False)
|
||
#
|
||
# assignment_net_weight = \
|
||
# assignment.aggregate(total=Sum('net_weight'))['total'] or 0
|
||
# assignment_real_quantity = \
|
||
# assignment.aggregate(total=Sum('real_quantity'))['total'] or 0
|
||
# value_list3 = [
|
||
# len(kill_house_requests),
|
||
# kill_house_requests_quantity,
|
||
# kill_house_requests_wight,
|
||
# assignment_real_quantity,
|
||
# assignment_net_weight,
|
||
# kill_house_requests_accepted_real_quantity,
|
||
# kill_house_requests_accepted_real_weight,
|
||
# province_live_wage_type.amount,
|
||
# kill_house_requests_accepted_real_wight * 0.75,
|
||
# province_live_wage_type.amount * (kill_house_requests_accepted_real_wight * 0.75),
|
||
#
|
||
# ]
|
||
# create_value(worksheet, value_list3, 15, 1, border_style='thin')
|
||
#
|
||
# excel_description(worksheet, 'B17', 'تخصیصات بدون بار', size='16', row2='F17')
|
||
# header_list4 = [
|
||
# 'تعداد سفارشات',
|
||
# 'تعداد کل',
|
||
# 'وزن کل',
|
||
# 'تعرفه',
|
||
# 'وزن لاشه ملاک تعرفه',
|
||
# 'کل تعرفه',
|
||
#
|
||
# ]
|
||
# create_header(worksheet, header_list4, 2, 18, height=50, width=19, border_style='thin', color='00B050')
|
||
#
|
||
# province_kill_request = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
|
||
# state__in=('pending', 'accepted'),
|
||
# return_to_province=False,
|
||
# archive_wage=False,
|
||
# first_car_allocated_quantity=0,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# trash=False).order_by(
|
||
# 'kill_request__recive_date')
|
||
#
|
||
# total_weight = \
|
||
# province_kill_request.aggregate(total=Sum('total_killed_weight'))[
|
||
# 'total'] or 0
|
||
# total_killed_quantity = \
|
||
# province_kill_request.aggregate(total=Sum('total_killed_quantity'))[
|
||
# 'total'] or 0
|
||
#
|
||
# value_list4 = [
|
||
# len(province_kill_request),
|
||
# total_killed_quantity,
|
||
# total_weight,
|
||
# province_live_wage_type.amount,
|
||
# total_weight * 0.75,
|
||
# province_live_wage_type.amount * (total_weight * 0.75),
|
||
#
|
||
# ]
|
||
# create_value(worksheet, value_list4, 19, 2, border_style='thin')
|
||
#
|
||
# excel_description(worksheet, 'C22', 'فروش لاشه خارج استان', size='16', row2='F22')
|
||
# header_list5 = [
|
||
# 'تعداد کل لاشه',
|
||
# 'حجم کل لاشه',
|
||
# 'وزن کل لاشه',
|
||
# 'تعرفه',
|
||
# 'مبلغ کل تعرفه',
|
||
#
|
||
# ]
|
||
# create_header(worksheet, header_list5, 3, 23, height=50, width=19, border_style='thin', color='B1A0C7')
|
||
# free_sales = KillHouseFreeSaleBarInformation.objects.filter(trash=False, date__date__gte=date1,
|
||
# date__date__lte=date2,
|
||
# kill_house=kill_house).order_by('-date')
|
||
#
|
||
# total_quantity = free_sales.aggregate(total=Sum('number_of_carcasses'))[
|
||
# 'total'] or 0
|
||
# total_weight = free_sales.aggregate(total=Sum('weight_of_carcasses'))[
|
||
# 'total'] or 0
|
||
#
|
||
# value_list5 = [
|
||
# len(free_sales),
|
||
# total_quantity,
|
||
# total_weight,
|
||
# free_sell_carcesses_weight_wage_type.amount,
|
||
# total_weight * free_sell_carcesses_weight_wage_type.amount,
|
||
# ]
|
||
# create_value(worksheet, value_list5, 24, 3, border_style='thin')
|
||
#
|
||
# excel_description(worksheet, 'C26', 'خرید مرغ زنده خارج استان', size='16', row2='F26')
|
||
# header_list6 = [
|
||
# 'تعداد خریداران',
|
||
# 'تعداد کل',
|
||
# 'وزن کل',
|
||
# 'تعرفه',
|
||
# 'مبلغ کل',
|
||
#
|
||
# ]
|
||
# create_header(worksheet, header_list6, 3, 27, height=50, width=19, border_style='thin')
|
||
# kill_house_free_bar_info_live = kill_house_free_bar_info.filter(buy_type='live')
|
||
#
|
||
# total_quantity = \
|
||
# kill_house_free_bar_info_live.aggregate(total=Sum('quantity'))[
|
||
# 'total'] or 0
|
||
# total_weight = \
|
||
# kill_house_free_bar_info_live.aggregate(total=Sum('live_weight'))[
|
||
# 'total'] or 0
|
||
#
|
||
# value_list6 = [
|
||
# len(kill_house_free_bar_info_live),
|
||
# total_quantity,
|
||
# total_weight,
|
||
# free_buying_live_weight_wage_type.amount,
|
||
# total_weight * free_buying_live_weight_wage_type.amount,
|
||
# ]
|
||
# create_value(worksheet, value_list6, 28, 3, border_style='thin')
|
||
#
|
||
# excel_description(worksheet, 'C30', 'خرید لاشه خارج استان', size='16', row2='F30')
|
||
# header_list7 = [
|
||
# 'تعداد خرید',
|
||
# 'وزن کل',
|
||
# 'تعرفه',
|
||
# 'مبلغ کل',
|
||
#
|
||
# ]
|
||
# create_header(worksheet, header_list7, 3, 31, height=50, width=19, border_style='thin', color='C4D79B')
|
||
# kill_house_free_bar_info_carcass = kill_house_free_bar_info.filter(buy_type='carcass')
|
||
# total_weight = \
|
||
# kill_house_free_bar_info_carcass.aggregate(total=Sum('weight_of_carcasses'))[
|
||
# 'total'] or 0
|
||
#
|
||
# value_list7 = [
|
||
# len(kill_house_free_bar_info_carcass),
|
||
# total_weight,
|
||
# free_buying_carcesses_weight_wage_type.amount,
|
||
# total_weight * free_buying_carcesses_weight_wage_type.amount,
|
||
#
|
||
# ]
|
||
# create_value(worksheet, value_list7, 32, 3, border_style='thin')
|
||
elif sheet_name == 'تخصیصات بدون بار':
|
||
worksheet['H3'] = 'در این قسمت تخصیصات فاقد بار نمایش داده میشود'
|
||
merge_range1 = 'H3:K3'
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['H3'].font = Font(color="C00000", bold=True)
|
||
worksheet['H3'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
if 'date1' in request.GET:
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
first_car_allocated_quantity=0,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=False).order_by(
|
||
'kill_request__recive_date')
|
||
else:
|
||
province_kill_request = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
|
||
state__in=('pending', 'accepted'),
|
||
wage_pay=False,
|
||
archive_wage=False,
|
||
return_to_province=False,
|
||
first_car_allocated_quantity=0,
|
||
trash=False).order_by(
|
||
'kill_request__recive_date')
|
||
if effective_wage_counting_type == 'carcass':
|
||
header_list = [
|
||
'تعداد سفارشات',
|
||
'تعداد کل',
|
||
'وزن کل',
|
||
'وزن لاشه ملاک تعرفه',
|
||
'جمع کل تعرفه',
|
||
]
|
||
else:
|
||
header_list = [
|
||
'تعداد سفارشات',
|
||
'تعداد کل',
|
||
'وزن کل',
|
||
'وزن ملاک تعرفه',
|
||
'جمع کل تعرفه',
|
||
]
|
||
for col_num, option in enumerate(header_list, 3):
|
||
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="00B050", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[3].height = 20.8
|
||
if effective_wage_counting_type == 'carcass':
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد سفارش',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
'شهر',
|
||
'تاریخ کشتار',
|
||
'محل کشتار',
|
||
'نژاد',
|
||
'تعداد(قطعه)',
|
||
'وزن(کیلوگرم)',
|
||
'میانگین وزنی(کیلوگرم)',
|
||
'وزن لاشه ملاک تعرفه ',
|
||
'تعرفه (ریال)',
|
||
'تعرفه تخصیص(ریال)',
|
||
|
||
]
|
||
else:
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد سفارش',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
'شهر',
|
||
'تاریخ کشتار',
|
||
'محل کشتار',
|
||
'نژاد',
|
||
'تعداد(قطعه)',
|
||
'وزن(کیلوگرم)',
|
||
'میانگین وزنی(کیلوگرم)',
|
||
'وزن ملاک تعرفه ',
|
||
'تعرفه (ریال)',
|
||
'تعرفه تخصیص(ریال)',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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
|
||
l = 6
|
||
m = 1
|
||
for province_kill in province_kill_request:
|
||
|
||
kill_date_1 = shamsi_date(province_kill.province_request.poultry_request.send_date)
|
||
|
||
if province_kill.kill_request.slaughter_house is not None:
|
||
kill_place = province_kill.kill_request.slaughter_house.name
|
||
else:
|
||
kill_place = province_kill.kill_request.kill_house.name
|
||
|
||
total_amount = province_kill.total_wage_amount
|
||
if effective_wage_counting_type == 'carcass':
|
||
list1 = [
|
||
m,
|
||
str(province_kill.province_request.poultry_request.order_code),
|
||
province_kill.province_request.poultry_request.poultry.unit_name,
|
||
province_kill.province_request.poultry_request.poultry.user.mobile,
|
||
province_kill.province_request.poultry_request.poultry.address.city.name,
|
||
str(kill_date_1),
|
||
kill_place,
|
||
province_kill.province_request.poultry_request.hatching.chicken_breed,
|
||
province_kill.total_killed_quantity,
|
||
province_kill.total_killed_weight,
|
||
province_kill.province_request.poultry_request.Index_weight,
|
||
province_kill.total_killed_weight * 0.75,
|
||
province_live_wage_amount,
|
||
(province_kill.total_killed_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
list1 = [
|
||
m,
|
||
str(province_kill.province_request.poultry_request.order_code),
|
||
province_kill.province_request.poultry_request.poultry.unit_name,
|
||
province_kill.province_request.poultry_request.poultry.user.mobile,
|
||
province_kill.province_request.poultry_request.poultry.address.city.name,
|
||
str(kill_date_1),
|
||
kill_place,
|
||
province_kill.province_request.poultry_request.hatching.chicken_breed,
|
||
province_kill.total_killed_quantity,
|
||
province_kill.total_killed_weight,
|
||
province_kill.province_request.poultry_request.Index_weight,
|
||
province_kill.total_killed_weight,
|
||
province_live_wage_amount,
|
||
(province_kill.total_killed_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
l += 1
|
||
m += 1
|
||
total_weight = \
|
||
province_kill_request.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
total_killed_quantity = \
|
||
province_kill_request.aggregate(total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
total_wage_amount = \
|
||
province_kill_request.aggregate(total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
if effective_wage_counting_type == 'carcass':
|
||
value_list = [
|
||
m - 1,
|
||
total_killed_quantity,
|
||
total_weight,
|
||
total_weight * 0.75,
|
||
(total_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
value_list = [
|
||
m - 1,
|
||
total_killed_quantity,
|
||
total_weight,
|
||
total_weight,
|
||
(total_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
for item in range(len(value_list)):
|
||
cell = worksheet.cell(row=4, column=item + 3, value=value_list[item])
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
if effective_wage_counting_type == 'carcass':
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_killed_quantity,
|
||
total_weight,
|
||
'',
|
||
total_weight * 0.75,
|
||
province_live_wage_amount,
|
||
(total_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_killed_quantity,
|
||
total_weight,
|
||
'',
|
||
total_weight,
|
||
province_live_wage_amount,
|
||
(total_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
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, float)):
|
||
cell.number_format = '#,##0' # 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")
|
||
elif sheet_name == 'بارهای روزانه':
|
||
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
trash=False,
|
||
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).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('province_kill_request__wage', '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('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',
|
||
'province_kill_request__wage',
|
||
)
|
||
|
||
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_kill_reqs
|
||
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=filtered_kill_reqs)
|
||
filtered_kill_reqs = ps.filter()
|
||
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']
|
||
total_requests_weight = poultry_request.aggregate(total=Sum('total_weight'))['total']
|
||
if effective_wage_counting_type == 'carcass':
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'کشتار',
|
||
'کدسفارش مرغدار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
'کشتارکن اختصاصی',
|
||
'تلفن کشتارکن اختصاصی',
|
||
' محل کشتار ',
|
||
'نوع تخصیص',
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'وزن ملاک تعرفه',
|
||
'تعرفه(ریال)',
|
||
'تعرفه کل بار',
|
||
|
||
]
|
||
else:
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'کشتار',
|
||
'کدسفارش مرغدار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
'کشتارکن اختصاصی',
|
||
'تلفن کشتارکن اختصاصی',
|
||
' محل کشتار ',
|
||
'نوع تخصیص',
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'وزن ملاک تعرفه',
|
||
'تعرفه(ریال)',
|
||
'تعرفه کل بار',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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
|
||
if effective_wage_counting_type == 'carcass':
|
||
header_list = [
|
||
'تعداد بارهای ایجاد شده',
|
||
'تعداد بارهای دارای کشتارکن اختصاصی',
|
||
'مجموع تعداد قطعه بارها',
|
||
'مجموع وزن بارها',
|
||
'مجموع تعداد نهایی در کشتارگاه',
|
||
'مجموع وزن نهایی در کشتار گاه',
|
||
' قطعه کشتار شده',
|
||
' وزن کشتار شده',
|
||
'وزن لاشه ملاک تعرفه',
|
||
'مجموع تعرفه های بار',
|
||
|
||
]
|
||
else:
|
||
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
|
||
|
||
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', 0)
|
||
accepted_real_wight = filtered_kill_reqs.aggregate(total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity', 0)
|
||
|
||
all_kill_request_quantity = filtered_kill_reqs.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
all_vet_accepted_real_quantity = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_vet_accepted_real_weight = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_weight')).get(
|
||
'total_quantity', 0)
|
||
killer_exclusive = 0
|
||
total_amount = 0
|
||
weight_amount = 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')
|
||
all_quantity += 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 = assignment.get('net_weight')
|
||
all_net_weighte += net_weighte
|
||
real_quantity = assignment.get('real_quantity')
|
||
all_real_quantity += 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 = kill['vet_accepted_real_weight'] if kill['vet_accepted_real_weight'] else '-'
|
||
|
||
weight = kill.get('quantity') * kill.get(
|
||
'province_kill_request__province_request__poultry_request__Index_weight')
|
||
all_weighte += 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 = 'عدم تایید راهداری'
|
||
elif kill['quarantine_code_state'] == 'merge':
|
||
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 = 'فعال'
|
||
if effective_wage_counting_type == 'carcass':
|
||
accepted_real_weight_kill = kill['accepted_real_weight'] * 0.75
|
||
total_amount += (kill['accepted_real_weight'] * 0.75) * province_live_wage_amount
|
||
weight_amount += kill['accepted_real_weight'] * 0.75
|
||
else:
|
||
total_amount += (kill['accepted_real_weight']) * province_live_wage_amount
|
||
weight_amount += kill['accepted_real_weight']
|
||
accepted_real_weight_kill = kill['accepted_real_weight']
|
||
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'],
|
||
kill['accepted_real_weight'],
|
||
accepted_real_weight_kill,
|
||
province_live_wage_amount,
|
||
(accepted_real_weight_kill) * province_live_wage_amount,
|
||
|
||
]
|
||
m += 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
|
||
|
||
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))
|
||
|
||
value_header_list = [
|
||
len(filtered_kill_reqs),
|
||
killer_exclusive,
|
||
all_quantity,
|
||
all_weighte,
|
||
all_real_quantity,
|
||
all_net_weighte,
|
||
accepted_real_quantity if accepted_real_quantity != None else 0,
|
||
accepted_real_wight if accepted_real_wight != None else 0,
|
||
weight_amount,
|
||
total_amount
|
||
|
||
]
|
||
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, 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_kill_request_quantity,
|
||
all_weighte,
|
||
'',
|
||
all_quarantine_quantity if all_quarantine_quantity != None else 0,
|
||
'',
|
||
'',
|
||
all_vet_accepted_real_quantity,
|
||
all_vet_accepted_real_weight,
|
||
all_real_quantity,
|
||
all_net_weighte,
|
||
accepted_real_quantity if accepted_real_quantity != None else 0,
|
||
accepted_real_wight if accepted_real_wight != None else 0,
|
||
weight_amount,
|
||
province_live_wage_amount,
|
||
total_amount,
|
||
|
||
]
|
||
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, float)):
|
||
cell.number_format = '#,##0' # 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")
|
||
|
||
elif sheet_name == 'مرغ زنده خارج استان':
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
type = 'live'
|
||
date_type = 'buy'
|
||
bar_state = request.GET.get('bar_state')
|
||
kill_house_free_bar_info_list = []
|
||
role = request.GET.get('role')
|
||
kill_houses = None
|
||
order_by_type = 'create_date'
|
||
|
||
if role in ['KillHouse', 'KillHouseVet']:
|
||
if role == 'KillHouse':
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
else:
|
||
kill_house_ids = KillHouseVet.objects.filter(vet__user=user, trash=False).values_list('kill_house',
|
||
flat=True)
|
||
kill_houses = KillHouse.objects.filter(id__in=kill_house_ids, trash=False)
|
||
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()
|
||
|
||
filters = {
|
||
'register_date__date__gte': date1,
|
||
'register_date__date__lte': date2,
|
||
'trash': False,
|
||
}
|
||
else:
|
||
filters = {
|
||
'trash': False
|
||
}
|
||
|
||
if kill_houses is not None:
|
||
filters['kill_house__in'] = kill_houses
|
||
|
||
if type:
|
||
filters['buy_type'] = type
|
||
if type == 'live':
|
||
if bar_state:
|
||
if bar_state == 'entered':
|
||
filters['weight_of_carcasses__gt'] = 0
|
||
else:
|
||
filters['weight_of_carcasses'] = 0
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(**filters).order_by(order_by_type)
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'کدسفارش',
|
||
'تاریخ خرید',
|
||
'ماهیت خریدار',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'فروشنده',
|
||
'تلفن فروشنده',
|
||
'نوع خرید',
|
||
'استان/شهر',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
'وضعیت دامپزشک',
|
||
'ماشین',
|
||
'راننده',
|
||
'تلفن راننده',
|
||
'کدقرنطینه',
|
||
'تعداد قطعه زنده',
|
||
'وزن زنده (کیلوگرم)',
|
||
'تعداد لاشه',
|
||
'وزن لاشه (کیلوگرم)',
|
||
'حجم تایید شده',
|
||
'وزن تایید شده',
|
||
'تایید/رد کننده',
|
||
'تاریخ تایید/ رد',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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_list2 = [
|
||
'تعداد بارها',
|
||
' تعداد بار های درانتظار تایید',
|
||
'مجموع قطعه زنده در انتظار تایید',
|
||
'مجموع وزن زنده (کیلوگرم) درانتظار تایید',
|
||
'مجموع تعداد لاشه درانتظار تایید',
|
||
'مجموع وزن لاشه (کیلوگرم) درانتظار تایید',
|
||
|
||
' تعداد بار های رد شده',
|
||
'مجموع قطعه زنده رد شده',
|
||
'مجموع وزن زنده (کیلوگرم) رد شده',
|
||
'مجموع تعداد لاشه رد شده',
|
||
'مجموع وزن لاشه (کیلوگرم) رد شده',
|
||
|
||
' تعداد بار های تایید شده',
|
||
'مجموع قطعه زنده تایید شده',
|
||
'مجموع وزن زنده (کیلوگرم) تایید شده',
|
||
'مجموع تعداد لاشه تایید شده',
|
||
'مجموع وزن لاشه (کیلوگرم) تایید شده',
|
||
'حجم تایید شده دامپزشک',
|
||
'وزن تایید شده دامپزشک',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
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
|
||
type1 = 'زنده' if type == 'live' else 'لاشه'
|
||
worksheet['B1'] = f'گزارش بار {type1} خرید از استان'
|
||
|
||
if kill_house_free_bar_info.exists():
|
||
name = kill_house_free_bar_info.first().kill_house.kill_house_operator.user.province.name \
|
||
if kill_house_free_bar_info.first() else ''
|
||
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
|
||
|
||
if kill_house_free_bar_info:
|
||
for kill in kill_house_free_bar_info:
|
||
l += 1
|
||
|
||
if kill.kill_house_vet_state == 'accepted':
|
||
state = 'تایید شده'
|
||
elif kill.kill_house_vet_state == 'pending':
|
||
state = 'درانتظار تایید'
|
||
else:
|
||
state = 'رد شده'
|
||
|
||
if kill.buy_type == 'live':
|
||
buy_type = 'زنده'
|
||
else:
|
||
buy_type = 'لاشه'
|
||
|
||
date_of_buy = jdatetime.date.fromgregorian(
|
||
day=kill.date.day,
|
||
month=kill.date.month,
|
||
year=kill.date.year
|
||
)
|
||
|
||
if kill.date_of_accept_reject:
|
||
date_of_reject_accepted = jdatetime.date.fromgregorian(
|
||
day=kill.date_of_accept_reject.day,
|
||
month=kill.date_of_accept_reject.month,
|
||
year=kill.date_of_accept_reject.year
|
||
)
|
||
else:
|
||
date_of_reject_accepted = '-'
|
||
if kill.exclusive_killer:
|
||
killer_type = f'کشتارکن اختصاصی {kill.kill_house.name}'
|
||
kill_house_name = kill.exclusive_killer.name
|
||
kill_house_mobile = kill.exclusive_killer.kill_house_operator.user.mobile
|
||
|
||
elif kill.kill_house.killer == True and kill.kill_house.type == 'public':
|
||
killer_type = 'کشتارکن عمومی'
|
||
kill_house_name = kill.kill_house.name
|
||
kill_house_mobile = kill.kill_house.kill_house_operator.user.mobile
|
||
|
||
else:
|
||
killer_type = 'کشتارگاه'
|
||
kill_house_name = kill.kill_house.name
|
||
kill_house_mobile = kill.kill_house.kill_house_operator.user.mobile
|
||
bar_code = str(kill.bar_code) if kill.bar_code else '-'
|
||
list1 = [
|
||
m,
|
||
bar_code,
|
||
str(date_of_buy),
|
||
killer_type,
|
||
kill_house_name,
|
||
kill_house_mobile,
|
||
kill.poultry_name,
|
||
kill.poultry_mobile,
|
||
buy_type,
|
||
f'{kill.province} / {kill.city}',
|
||
kill.vet_farm_name,
|
||
kill.vet_farm_mobile,
|
||
state,
|
||
kill.car,
|
||
kill.driver_name,
|
||
kill.driver_mobile,
|
||
kill.bar_clearance_code,
|
||
kill.quantity,
|
||
kill.live_weight,
|
||
kill.number_of_carcasses,
|
||
kill.weight_of_carcasses,
|
||
kill.kill_house_vet_quantity,
|
||
kill.kill_house_vet_weight,
|
||
kill.acceptor_rejector,
|
||
str(date_of_reject_accepted)
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
bar_pending = kill_house_free_bar_info.filter(kill_house_vet_state='pending')
|
||
bar_pending_quantity = bar_pending.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_live_weight = bar_pending.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_number_of_carcasses = bar_pending.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_weight_of_carcasses = bar_pending.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_rejected = kill_house_free_bar_info.filter(kill_house_vet_state='rejected')
|
||
bar_rejected_quantity = bar_rejected.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_live_weight = bar_rejected.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_number_of_carcasses = bar_rejected.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_weight_of_carcasses = bar_rejected.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_accepted = kill_house_free_bar_info.filter(kill_house_vet_state='accepted')
|
||
bar_accepted_quantity = bar_accepted.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_live_weight = bar_accepted.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_number_of_carcasses = bar_accepted.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_weight_of_carcasses = bar_accepted.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_kill_house_vet_quantity = bar_accepted.aggregate(
|
||
total_quantity=Sum('kill_house_vet_quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_kill_house_vet_weight = bar_accepted.aggregate(
|
||
total_quantity=Sum('kill_house_vet_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_live_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_number_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_weight_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_kill_house_vet_quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('kill_house_vet_quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_kill_house_vet_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('kill_house_vet_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
value_header_list2 = [
|
||
m - 1,
|
||
len(bar_pending),
|
||
int(bar_pending_quantity),
|
||
int(bar_pending_live_weight),
|
||
int(bar_pending_number_of_carcasses),
|
||
int(bar_pending_weight_of_carcasses),
|
||
|
||
len(bar_rejected),
|
||
int(bar_rejected_quantity),
|
||
int(bar_rejected_live_weight),
|
||
int(bar_rejected_number_of_carcasses),
|
||
int(bar_rejected_weight_of_carcasses),
|
||
|
||
len(bar_accepted),
|
||
int(bar_accepted_quantity),
|
||
int(bar_accepted_live_weight),
|
||
int(bar_accepted_number_of_carcasses),
|
||
int(bar_accepted_weight_of_carcasses),
|
||
int(bar_accepted_kill_house_vet_quantity),
|
||
int(bar_accepted_kill_house_vet_weight)
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
bar_quantity,
|
||
bar_live_weight,
|
||
int(bar_number_of_carcasses),
|
||
int(bar_weight_of_carcasses),
|
||
int(bar_kill_house_vet_quantity),
|
||
bar_kill_house_vet_weight,
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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")
|
||
elif sheet_name == 'خرید لاشه خارج استان':
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
type = 'carcass'
|
||
date_type = 'buy'
|
||
bar_state = request.GET.get('bar_state')
|
||
kill_house_free_bar_info_list = []
|
||
role = request.GET.get('role')
|
||
kill_houses = None
|
||
order_by_type = 'create_date'
|
||
|
||
if role in ['KillHouse', 'KillHouseVet']:
|
||
if role == 'KillHouse':
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
else:
|
||
kill_house_ids = KillHouseVet.objects.filter(vet__user=user, trash=False).values_list('kill_house',
|
||
flat=True)
|
||
kill_houses = KillHouse.objects.filter(id__in=kill_house_ids, trash=False)
|
||
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()
|
||
|
||
filters = {
|
||
'create_date__date__gte': date1,
|
||
'create_date__date__lte': date2,
|
||
'trash': False,
|
||
}
|
||
else:
|
||
filters = {
|
||
'trash': False
|
||
}
|
||
|
||
if kill_houses is not None:
|
||
filters['kill_house__in'] = kill_houses
|
||
|
||
if type:
|
||
filters['buy_type'] = type
|
||
if type == 'live':
|
||
if bar_state:
|
||
if bar_state == 'entered':
|
||
filters['weight_of_carcasses__gt'] = 0
|
||
else:
|
||
filters['weight_of_carcasses'] = 0
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(**filters).order_by(order_by_type)
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'کدسفارش',
|
||
'تاریخ خرید',
|
||
'ماهیت خریدار',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'فروشنده',
|
||
'تلفن فروشنده',
|
||
'نوع خرید',
|
||
'استان/شهر',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
'وضعیت دامپزشک',
|
||
'ماشین',
|
||
'راننده',
|
||
'تلفن راننده',
|
||
'کدقرنطینه',
|
||
'تعداد قطعه زنده',
|
||
'وزن زنده (کیلوگرم)',
|
||
'تعداد لاشه',
|
||
'وزن لاشه (کیلوگرم)',
|
||
'حجم تایید شده',
|
||
'وزن تایید شده',
|
||
'تایید/رد کننده',
|
||
'تاریخ تایید/ رد',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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_list2 = [
|
||
'تعداد بارها',
|
||
' تعداد بار های درانتظار تایید',
|
||
'مجموع قطعه زنده در انتظار تایید',
|
||
'مجموع وزن زنده (کیلوگرم) درانتظار تایید',
|
||
'مجموع تعداد لاشه درانتظار تایید',
|
||
'مجموع وزن لاشه (کیلوگرم) درانتظار تایید',
|
||
|
||
' تعداد بار های رد شده',
|
||
'مجموع قطعه زنده رد شده',
|
||
'مجموع وزن زنده (کیلوگرم) رد شده',
|
||
'مجموع تعداد لاشه رد شده',
|
||
'مجموع وزن لاشه (کیلوگرم) رد شده',
|
||
|
||
' تعداد بار های تایید شده',
|
||
'مجموع قطعه زنده تایید شده',
|
||
'مجموع وزن زنده (کیلوگرم) تایید شده',
|
||
'مجموع تعداد لاشه تایید شده',
|
||
'مجموع وزن لاشه (کیلوگرم) تایید شده',
|
||
'حجم تایید شده دامپزشک',
|
||
'وزن تایید شده دامپزشک',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
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
|
||
type1 = 'زنده' if type == 'live' else 'لاشه'
|
||
worksheet['B1'] = f'گزارش بار {type1} خرید از استان'
|
||
|
||
if kill_house_free_bar_info.exists():
|
||
name = kill_house_free_bar_info.first().kill_house.kill_house_operator.user.province.name \
|
||
if kill_house_free_bar_info.first() else ''
|
||
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
|
||
|
||
if kill_house_free_bar_info:
|
||
for kill in kill_house_free_bar_info:
|
||
l += 1
|
||
|
||
if kill.kill_house_vet_state == 'accepted':
|
||
state = 'تایید شده'
|
||
elif kill.kill_house_vet_state == 'pending':
|
||
state = 'درانتظار تایید'
|
||
else:
|
||
state = 'رد شده'
|
||
|
||
if kill.buy_type == 'live':
|
||
buy_type = 'زنده'
|
||
else:
|
||
buy_type = 'لاشه'
|
||
|
||
date_of_buy = jdatetime.date.fromgregorian(
|
||
day=kill.date.day,
|
||
month=kill.date.month,
|
||
year=kill.date.year
|
||
)
|
||
|
||
if kill.date_of_accept_reject:
|
||
date_of_reject_accepted = jdatetime.date.fromgregorian(
|
||
day=kill.date_of_accept_reject.day,
|
||
month=kill.date_of_accept_reject.month,
|
||
year=kill.date_of_accept_reject.year
|
||
)
|
||
else:
|
||
date_of_reject_accepted = '-'
|
||
if kill.exclusive_killer:
|
||
killer_type = f'کشتارکن اختصاصی {kill.kill_house.name}'
|
||
kill_house_name = kill.exclusive_killer.name
|
||
kill_house_mobile = kill.exclusive_killer.kill_house_operator.user.mobile
|
||
|
||
elif kill.kill_house.killer == True and kill.kill_house.type == 'public':
|
||
killer_type = 'کشتارکن عمومی'
|
||
kill_house_name = kill.kill_house.name
|
||
kill_house_mobile = kill.kill_house.kill_house_operator.user.mobile
|
||
|
||
else:
|
||
killer_type = 'کشتارگاه'
|
||
kill_house_name = kill.kill_house.name
|
||
kill_house_mobile = kill.kill_house.kill_house_operator.user.mobile
|
||
bar_code = str(kill.bar_code) if kill.bar_code else '-'
|
||
list1 = [
|
||
m,
|
||
bar_code,
|
||
str(date_of_buy),
|
||
killer_type,
|
||
kill_house_name,
|
||
kill_house_mobile,
|
||
kill.poultry_name,
|
||
kill.poultry_mobile,
|
||
buy_type,
|
||
f'{kill.province} / {kill.city}',
|
||
kill.vet_farm_name,
|
||
kill.vet_farm_mobile,
|
||
state,
|
||
kill.car,
|
||
kill.driver_name,
|
||
kill.driver_mobile,
|
||
kill.bar_clearance_code,
|
||
kill.quantity,
|
||
kill.live_weight,
|
||
kill.number_of_carcasses,
|
||
kill.weight_of_carcasses,
|
||
kill.kill_house_vet_quantity,
|
||
kill.kill_house_vet_weight,
|
||
kill.acceptor_rejector,
|
||
str(date_of_reject_accepted)
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
bar_pending = kill_house_free_bar_info.filter(kill_house_vet_state='pending')
|
||
bar_pending_quantity = bar_pending.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_live_weight = bar_pending.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_number_of_carcasses = bar_pending.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_weight_of_carcasses = bar_pending.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_rejected = kill_house_free_bar_info.filter(kill_house_vet_state='rejected')
|
||
bar_rejected_quantity = bar_rejected.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_live_weight = bar_rejected.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_number_of_carcasses = bar_rejected.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_weight_of_carcasses = bar_rejected.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_accepted = kill_house_free_bar_info.filter(kill_house_vet_state='accepted')
|
||
bar_accepted_quantity = bar_accepted.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_live_weight = bar_accepted.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_number_of_carcasses = bar_accepted.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_weight_of_carcasses = bar_accepted.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_kill_house_vet_quantity = bar_accepted.aggregate(
|
||
total_quantity=Sum('kill_house_vet_quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_kill_house_vet_weight = bar_accepted.aggregate(
|
||
total_quantity=Sum('kill_house_vet_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_live_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_number_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_weight_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_kill_house_vet_quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('kill_house_vet_quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_kill_house_vet_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('kill_house_vet_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
value_header_list2 = [
|
||
m - 1,
|
||
len(bar_pending),
|
||
int(bar_pending_quantity),
|
||
int(bar_pending_live_weight),
|
||
int(bar_pending_number_of_carcasses),
|
||
int(bar_pending_weight_of_carcasses),
|
||
|
||
len(bar_rejected),
|
||
int(bar_rejected_quantity),
|
||
int(bar_rejected_live_weight),
|
||
int(bar_rejected_number_of_carcasses),
|
||
int(bar_rejected_weight_of_carcasses),
|
||
|
||
len(bar_accepted),
|
||
int(bar_accepted_quantity),
|
||
int(bar_accepted_live_weight),
|
||
int(bar_accepted_number_of_carcasses),
|
||
int(bar_accepted_weight_of_carcasses),
|
||
int(bar_accepted_kill_house_vet_quantity),
|
||
int(bar_accepted_kill_house_vet_weight)
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
bar_quantity,
|
||
bar_live_weight,
|
||
int(bar_number_of_carcasses),
|
||
int(bar_weight_of_carcasses),
|
||
int(bar_kill_house_vet_quantity),
|
||
bar_kill_house_vet_weight,
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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="کارمزدهای کشتارگاه {kill_house.name}.xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def payment_transactions_province_excel(request):
|
||
filterset_class = InternalTransactionFilterSet
|
||
filterset_fields = [
|
||
'saleReferenceId',
|
||
'refId',
|
||
'orderId',
|
||
'cardHolderPan',
|
||
|
||
]
|
||
|
||
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()
|
||
transactions = InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed', payer_type='kill_house',
|
||
trash=False).order_by('-date')
|
||
else:
|
||
transactions = InternalTransaction.objects.filter(
|
||
status='completed', payer_type='kill_house',
|
||
trash=False).order_by('-date')
|
||
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
transactions = transactions.filter(union_share__gt=0)
|
||
elif request.GET['role'] == 'Company':
|
||
transactions = transactions.filter(company_share__gt=0)
|
||
elif request.GET['role'] == 'Guilds':
|
||
transactions = transactions.filter(guilds_share__gt=0)
|
||
elif request.GET['role'] == 'SuperAdmin':
|
||
transactions = transactions.filter().exclude(guilds_share=0, company_share=0, union_share=0)
|
||
else:
|
||
transactions = transactions
|
||
|
||
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=transactions
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=transactions)
|
||
transactions = ps.filter()
|
||
|
||
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 = [
|
||
'تعداد کل تراکنش ها',
|
||
'مبلغ کل تراکنش(ریال)',
|
||
'سهم کل اتحادیه(ریال)',
|
||
'سهم کل صنف(ریال)',
|
||
'سهم کل شرکت(ریال)',
|
||
'سهم کل دامپزشک(ریال)',
|
||
|
||
]
|
||
if base_url_for_sms_report == 'ha':
|
||
province = 'همدان'
|
||
elif base_url_for_sms_report == 'ku':
|
||
province = 'کردستان'
|
||
elif base_url_for_sms_report == 'ma':
|
||
province = 'مرکزی'
|
||
elif base_url_for_sms_report == 'bu':
|
||
province = 'بوشهر'
|
||
else:
|
||
province = 'تست'
|
||
|
||
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()
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
from_date_2 = shamsi_date(date2)
|
||
|
||
excel_description(worksheet, 'B2',
|
||
f'گزارش ریز تراکنش ها استان {province} از تاریخ {from_date_1} تا {from_date_2}', color='red',
|
||
row2='C3')
|
||
|
||
|
||
|
||
else:
|
||
excel_description(worksheet, 'B2', f'گزارش ریز تراکنش ها استان {province}', color='red',
|
||
row2='C3')
|
||
|
||
create_header(worksheet, header_list, 5, 2, height=20)
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22, width=20.01)
|
||
|
||
l = 5
|
||
m = 1
|
||
role = request.GET['role']
|
||
for transaction in transactions:
|
||
if transaction.kill_house:
|
||
killer_type = 'کشتارگاه' if transaction.kill_house.killer == False else 'کشتارکن'
|
||
elif transaction.chain_company:
|
||
killer_type = 'شرکت زنجیره'
|
||
else:
|
||
killer_type = 'خارج استان'
|
||
l += 1
|
||
payer_date = jdatetime.date.fromgregorian(
|
||
day=transaction.date.day,
|
||
month=transaction.date.month,
|
||
year=transaction.date.year
|
||
)
|
||
|
||
if transaction.kill_house != None:
|
||
fullname = transaction.kill_house.kill_house_operator.user.fullname
|
||
mobile = transaction.kill_house.kill_house_operator.user.mobile
|
||
elif transaction.chain_company is not None:
|
||
fullname = transaction.chain_company.user.fullname
|
||
mobile = transaction.chain_company.user.mobile
|
||
else:
|
||
fullname = transaction.user.fullname
|
||
mobile = transaction.user.mobile
|
||
type = 'دستی' if transaction.transaction_type == 'wage-gateway-manual' else 'آنلاین'
|
||
|
||
list1 = [
|
||
m,
|
||
killer_type,
|
||
type,
|
||
str(payer_date),
|
||
transaction.refId,
|
||
transaction.orderId,
|
||
fullname,
|
||
mobile,
|
||
transaction.cardHolderPan,
|
||
transaction.amount,
|
||
transaction.union_share,
|
||
transaction.guilds_share,
|
||
transaction.company_share,
|
||
transaction.other_share
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
total_amount = \
|
||
transactions.aggregate(total=Sum('amount'))['total'] or 0
|
||
total_union_share = \
|
||
transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
||
total_guilds_share = \
|
||
transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
||
total_company_share = \
|
||
transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
||
total_other_share = \
|
||
transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
||
|
||
value_header_list = [
|
||
m - 1,
|
||
total_amount,
|
||
total_union_share,
|
||
total_guilds_share,
|
||
total_company_share,
|
||
total_other_share,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 5)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_amount,
|
||
total_union_share,
|
||
total_guilds_share,
|
||
total_company_share,
|
||
total_other_share,
|
||
|
||
]
|
||
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 general_free_bar_excel(request):
|
||
value_header_list2_pending1 = []
|
||
value_header_list2_accepted = []
|
||
value_header_list2_rejected = []
|
||
filterset_class = PoultryRequestFilterSet
|
||
filterset_fields = [
|
||
'order_code',
|
||
'poultry__user__mobile',
|
||
'poultry__user__fullname',
|
||
'poultry__user__first_name',
|
||
'poultry__user__last_name',
|
||
'poultry__address__city__name',
|
||
|
||
]
|
||
now = datetime.datetime.now().date()
|
||
date1 = datetime.datetime.strptime(request.GET['date1'],
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.datetime.strptime(request.GET['date2'],
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
excel_options = [
|
||
|
||
'درخواست های جدید',
|
||
'تایید شده',
|
||
'رد شده',
|
||
|
||
]
|
||
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
header_list_main = [
|
||
'تعداد بارها',
|
||
'مجموع تعداد قطعه بارها',
|
||
'مجموع وزن بارها',
|
||
'کمترین سن مرغ',
|
||
'بیشترین سن مرغ',
|
||
'تعداد بارهای دارای کد قرنطینه',
|
||
|
||
]
|
||
|
||
for name in excel_options:
|
||
sheet_name = name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
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')
|
||
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'])
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out_province_request_cancel=False,
|
||
trash=False, out=True).order_by('-send_date')
|
||
if sheet_name == 'درخواست های جدید':
|
||
if request.GET['role'] == 'VetFarm':
|
||
vet_farms = VetFarm.objects.filter(vet__user=user, trash=False)
|
||
poultries = Poultry.objects.filter(
|
||
pk__in=vet_farms.values('poultry')
|
||
)
|
||
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
poultry__in=poultries
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user)
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
poultry__city_operator=city_operator.unit_name,
|
||
out=True,
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
poultry__address__city=user.city,
|
||
|
||
out=True,
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX', 'Supporter']:
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
out=True
|
||
).order_by('-send_date')
|
||
else:
|
||
poultry_requests = poultry_requests
|
||
|
||
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=poultry_requests
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=poultry_requests)
|
||
poultry_requests = ps.filter()
|
||
|
||
poultry_requests_accepted = poultry_requests
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت',
|
||
'پرداخت کننده',
|
||
'کدسفارش مرغدار',
|
||
' تاریخ ثبت درخواست',
|
||
' تاریخ کشتار',
|
||
' کشتار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
' استان مرغدار',
|
||
'سن مرغ',
|
||
' نژاد',
|
||
'تعداد درخواست',
|
||
'میانگین وزنی',
|
||
'وزن درخواست',
|
||
'مانده در سالن',
|
||
'جوجه ریزی اولیه',
|
||
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
' شهر خریدار',
|
||
'استان خریدار',
|
||
'محل کشتار',
|
||
'کد یکتای کشتارگاه',
|
||
'شهر محل کشتار',
|
||
|
||
'نوع خودرو',
|
||
'پلاک',
|
||
|
||
'نام راننده',
|
||
'موبایل راننده',
|
||
'کد بهداشتی حمل و نقل',
|
||
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'ثبت کننده کد قرنطینه',
|
||
'تاریخ ثبت کد قرنطینه',
|
||
'سازنده',
|
||
|
||
]
|
||
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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, 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="0070C0", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[2].height = 20.8
|
||
|
||
worksheet['B1'] = f'گزارش بارهای جدید خارج از استان'
|
||
if poultry_requests.exists():
|
||
name = poultry_requests.first().poultry.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 = 6
|
||
m = 1
|
||
|
||
all_weighte = 0
|
||
all_chicken_quantity = 0
|
||
all_age = []
|
||
all_quantity = poultry_requests_accepted.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
|
||
all_weighte = poultry_requests_accepted.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total']
|
||
|
||
has_code = 0
|
||
if poultry_requests:
|
||
for poultry_request in poultry_requests:
|
||
|
||
# if ProvinceKillRequest.objects.filter(
|
||
# province_request__city_request_Poultry__poultry_request=poultry_request,
|
||
# state='accepted').exists():
|
||
# age = (poultry_request.send_date - poultry_request.hatching.date).days + 1
|
||
# else:
|
||
age = (poultry_request.send_date - poultry_request.hatching.date).days + 1
|
||
all_age.append(age)
|
||
all_chicken_quantity += poultry_request.hatching.quantity
|
||
create_date_of_poultry_request = jdatetime.date.fromgregorian(
|
||
day=poultry_request.create_date.day,
|
||
month=poultry_request.create_date.month,
|
||
year=poultry_request.create_date.year
|
||
)
|
||
date_of_kill_request = jdatetime.date.fromgregorian(
|
||
day=poultry_request.send_date.day,
|
||
month=poultry_request.send_date.month,
|
||
year=poultry_request.send_date.year
|
||
)
|
||
if poultry_request.quarantine_code_registrar is not None:
|
||
date_code = poultry_request.quarantine_code_registrar['date'].split('-')
|
||
|
||
date_of_create_code = jdatetime.date.fromgregorian(
|
||
day=int(date_code[2]),
|
||
month=int(date_code[1]),
|
||
year=int(date_code[0])
|
||
)
|
||
full_name = poultry_request.quarantine_code_registrar['fullname']
|
||
mobile = poultry_request.quarantine_code_registrar['mobile']
|
||
else:
|
||
date_of_create_code = '-'
|
||
full_name = '-'
|
||
mobile = '-'
|
||
|
||
killing_place = '-'
|
||
killing_place_city = '-'
|
||
uniq_id = '-'
|
||
if poultry_request.out_province_poultry_request_buyer:
|
||
if poultry_request.out_province_poultry_request_buyer.type == 'killhouse':
|
||
is_killer = 'کشتارگاه'
|
||
uniq_id = poultry_request.out_province_poultry_request_buyer.kill_house_unique_id if poultry_request.out_province_poultry_request_buyer.kill_house_unique_id else '-'
|
||
|
||
else:
|
||
is_killer = 'کشتارکن'
|
||
killing_place = poultry_request.killer_kill_house_unit_name \
|
||
if poultry_request.killer_kill_house_unit_name is not None \
|
||
else '-'
|
||
killing_place_city = poultry_request.killer_kill_house_province \
|
||
+ '(' + poultry_request.killer_kill_house_city \
|
||
+ ')' if poultry_request.killer_kill_house_province \
|
||
and poultry_request.killer_kill_house_city is not None \
|
||
else '-'
|
||
uniq_id = poultry_request.kill_house_unique_id if poultry_request.kill_house_unique_id else '-'
|
||
else:
|
||
is_killer = 'کشتارگاه' if poultry_request.buyer is not None and poultry_request.buyer[
|
||
'buyerType'] == 'killhouse' else 'کشتارکن'
|
||
if poultry_request.quarantine_code:
|
||
code = poultry_request.quarantine_code
|
||
has_code += 1
|
||
else:
|
||
code = '-'
|
||
|
||
freez_state = 'منجمد' if poultry_request.freezing == True else 'عادی'
|
||
|
||
if poultry_request.out_province_poultry_request_buyer is not None:
|
||
full_name_buyer = poultry_request.out_province_poultry_request_buyer.fullname
|
||
mobile_buyer = poultry_request.out_province_poultry_request_buyer.user.mobile
|
||
city_buyer = poultry_request.out_province_poultry_request_buyer.user.city.name
|
||
province_buyer = poultry_request.out_province_poultry_request_buyer.user.province.name
|
||
|
||
else:
|
||
full_name_buyer = poultry_request.buyer['firstName']
|
||
mobile_buyer = poultry_request.buyer['mobile']
|
||
city_buyer = poultry_request.buyer['city']
|
||
province_buyer = poultry_request.buyer['province']
|
||
|
||
if poultry_request.province_state == 'rejected':
|
||
state1 = 'رد شده'
|
||
elif poultry_request.province_state == 'pending' and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'در انتظار تایید'
|
||
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == True and poultry_request.wage_pay == False and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'در انتظار پرداخت'
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == False and poultry_request.wage_pay == False and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'تایید شده'
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == True and poultry_request.wage_pay == True and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'پرداخت شده'
|
||
else:
|
||
state1 = 'لغو شده'
|
||
|
||
list1 = [
|
||
m,
|
||
state1,
|
||
poultry_request.payer_fullname if poultry_request.payer_fullname else '-',
|
||
str(poultry_request.order_code),
|
||
str(create_date_of_poultry_request),
|
||
str(date_of_kill_request),
|
||
freez_state,
|
||
poultry_request.poultry.user.fullname,
|
||
poultry_request.poultry.user.mobile,
|
||
poultry_request.poultry.user.city.name,
|
||
poultry_request.poultry.user.province.name,
|
||
age,
|
||
poultry_request.hatching.chicken_breed,
|
||
poultry_request.quantity,
|
||
poultry_request.Index_weight,
|
||
int(poultry_request.quantity * poultry_request.Index_weight),
|
||
poultry_request.hatching.left_over,
|
||
poultry_request.hatching.quantity,
|
||
is_killer,
|
||
full_name_buyer,
|
||
mobile_buyer,
|
||
city_buyer,
|
||
province_buyer,
|
||
killing_place,
|
||
uniq_id,
|
||
killing_place_city,
|
||
poultry_request.out_province_driver_info[
|
||
'driverCar'] if poultry_request.out_province_driver_info != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverPelak'] if poultry_request.out_province_driver_info != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverName'] if poultry_request.out_province_driver_info != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverMobile'] if poultry_request.out_province_driver_info != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverhealthCode'] if poultry_request.out_province_driver_info != None else '-',
|
||
code,
|
||
full_name + '(' + mobile + ')',
|
||
str(date_of_create_code),
|
||
poultry_request.registrar['fullname'] if poultry_request.registrar else '-'
|
||
]
|
||
|
||
m += 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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
l += 1
|
||
|
||
# last_age=sorted(reversed(all_age))
|
||
all_age = sorted(all_age)
|
||
value_header_list2 = [
|
||
len(poultry_requests_accepted),
|
||
all_quantity if all_quantity != None else 0,
|
||
all_weighte if all_weighte != None else 0,
|
||
all_age[0] if len(all_age) > 0 else None,
|
||
all_age[len(all_age) - 1] if len(all_age) > 0 else None,
|
||
has_code,
|
||
|
||
]
|
||
value_header_list2_accepted.extend(value_header_list2)
|
||
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, 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_quantity if all_quantity != None else 0,
|
||
'',
|
||
all_weighte,
|
||
'',
|
||
all_chicken_quantity,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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")
|
||
elif sheet_name == 'تایید شده':
|
||
if request.GET['role'] == 'VetFarm':
|
||
vet_farms = VetFarm.objects.filter(vet__user=user, trash=False)
|
||
poultries = Poultry.objects.filter(
|
||
pk__in=vet_farms.values('poultry')
|
||
)
|
||
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True) | Q(state_process='accepted', province_state='accepted', final_state='archive',
|
||
has_wage=False, wage_pay=False),
|
||
poultry__in=poultries).order_by('-send_date')
|
||
|
||
elif request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user)
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True) | Q(state_process='accepted', province_state='accepted', final_state='archive',
|
||
has_wage=False, wage_pay=False),
|
||
poultry__city_operator=city_operator.unit_name,
|
||
).order_by('-send_date')
|
||
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True) | Q(state_process='accepted', province_state='accepted', final_state='archive',
|
||
has_wage=False, wage_pay=False),
|
||
poultry__address__city=user.city,
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX', 'Supporter']:
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True) | Q(state_process='accepted', province_state='accepted', final_state='archive',
|
||
has_wage=False, wage_pay=False),
|
||
).order_by('-send_date')
|
||
|
||
else:
|
||
poultry_requests = poultry_requests
|
||
|
||
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=poultry_requests
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=poultry_requests)
|
||
poultry_requests = ps.filter()
|
||
|
||
poultry_requests_accepted = poultry_requests
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت',
|
||
'پرداخت کننده',
|
||
'کدسفارش مرغدار',
|
||
' تاریخ ثبت درخواست',
|
||
' تاریخ کشتار',
|
||
' کشتار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
' استان مرغدار',
|
||
'سن مرغ',
|
||
' نژاد',
|
||
'تعداد درخواست',
|
||
'میانگین وزنی',
|
||
'وزن درخواست',
|
||
'مانده در سالن',
|
||
'جوجه ریزی اولیه',
|
||
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
' شهر خریدار',
|
||
'استان خریدار',
|
||
'محل کشتار',
|
||
'کد یکتای کشتارگاه',
|
||
'شهر محل کشتار',
|
||
|
||
'نوع خودرو',
|
||
'پلاک',
|
||
|
||
'نام راننده',
|
||
'موبایل راننده',
|
||
'کد بهداشتی حمل و نقل',
|
||
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'ثبت کننده کد قرنطینه',
|
||
'تاریخ ثبت کد قرنطینه',
|
||
'سازنده',
|
||
|
||
]
|
||
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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, 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="0070C0", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[2].height = 20.8
|
||
|
||
worksheet['B1'] = f'گزارش بارهای تایید شده خارج از استان'
|
||
if poultry_requests.exists():
|
||
name = poultry_requests.first().poultry.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 = 6
|
||
m = 1
|
||
|
||
all_weighte = 0
|
||
all_chicken_quantity = 0
|
||
all_age = []
|
||
all_quantity = poultry_requests_accepted.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
|
||
all_weighte = poultry_requests_accepted.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total']
|
||
|
||
has_code = 0
|
||
if poultry_requests:
|
||
for poultry_request in poultry_requests:
|
||
|
||
if ProvinceKillRequest.objects.filter(
|
||
province_request__city_request_Poultry__poultry_request=poultry_request,
|
||
state='accepted').exists():
|
||
age = (poultry_request.send_date - poultry_request.hatching.date).days + 1
|
||
else:
|
||
age = (datetime.datetime.now() - poultry_request.hatching.date).days + 1
|
||
all_age.append(age)
|
||
all_chicken_quantity += poultry_request.hatching.quantity
|
||
create_date_of_poultry_request = jdatetime.date.fromgregorian(
|
||
day=poultry_request.create_date.day,
|
||
month=poultry_request.create_date.month,
|
||
year=poultry_request.create_date.year
|
||
)
|
||
date_of_kill_request = jdatetime.date.fromgregorian(
|
||
day=poultry_request.send_date.day,
|
||
month=poultry_request.send_date.month,
|
||
year=poultry_request.send_date.year
|
||
)
|
||
if poultry_request.quarantine_code_registrar is not None:
|
||
date_code = poultry_request.quarantine_code_registrar['date'].split('-')
|
||
|
||
date_of_create_code = jdatetime.date.fromgregorian(
|
||
day=int(date_code[2]),
|
||
month=int(date_code[1]),
|
||
year=int(date_code[0])
|
||
)
|
||
full_name = poultry_request.quarantine_code_registrar['fullname']
|
||
mobile = poultry_request.quarantine_code_registrar['mobile']
|
||
else:
|
||
date_of_create_code = '-'
|
||
full_name = '-'
|
||
mobile = '-'
|
||
|
||
killing_place = '-'
|
||
killing_place_city = '-'
|
||
uniq_id = '-'
|
||
if poultry_request.out_province_poultry_request_buyer:
|
||
if poultry_request.out_province_poultry_request_buyer.type == 'killhouse':
|
||
is_killer = 'کشتارگاه'
|
||
uniq_id = poultry_request.out_province_poultry_request_buyer.kill_house_unique_id if poultry_request.out_province_poultry_request_buyer.kill_house_unique_id else '-'
|
||
|
||
else:
|
||
is_killer = 'کشتارکن'
|
||
killing_place = poultry_request.killer_kill_house_unit_name \
|
||
if poultry_request.killer_kill_house_unit_name is not None \
|
||
else '-'
|
||
killing_place_city = poultry_request.killer_kill_house_province \
|
||
+ '(' + poultry_request.killer_kill_house_city \
|
||
+ ')' if poultry_request.killer_kill_house_province \
|
||
and poultry_request.killer_kill_house_city is not None \
|
||
else '-'
|
||
uniq_id = poultry_request.kill_house_unique_id if poultry_request.kill_house_unique_id else '-'
|
||
else:
|
||
is_killer = 'کشتارگاه' if poultry_request.buyer is not None and poultry_request.buyer[
|
||
'buyerType'] == 'killhouse' else 'کشتارکن'
|
||
if poultry_request.quarantine_code:
|
||
code = poultry_request.quarantine_code
|
||
has_code += 1
|
||
else:
|
||
code = '-'
|
||
|
||
freez_state = 'منجمد' if poultry_request.freezing == True else 'عادی'
|
||
|
||
if poultry_request.out_province_poultry_request_buyer is not None:
|
||
full_name_buyer = poultry_request.out_province_poultry_request_buyer.fullname
|
||
mobile_buyer = poultry_request.out_province_poultry_request_buyer.user.mobile
|
||
city_buyer = poultry_request.out_province_poultry_request_buyer.user.city.name
|
||
province_buyer = poultry_request.out_province_poultry_request_buyer.user.province.name
|
||
|
||
else:
|
||
full_name_buyer = poultry_request.buyer['firstName']
|
||
mobile_buyer = poultry_request.buyer['mobile']
|
||
city_buyer = poultry_request.buyer['city']
|
||
province_buyer = poultry_request.buyer['province']
|
||
|
||
if poultry_request.province_state == 'rejected':
|
||
state1 = 'رد شده'
|
||
elif poultry_request.province_state == 'pending' and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'در انتظار تایید'
|
||
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == True and poultry_request.wage_pay == False and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'در انتظار پرداخت'
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == False and poultry_request.wage_pay == False and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'تایید شده'
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == True and poultry_request.wage_pay == True and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'پرداخت شده'
|
||
else:
|
||
state1 = 'لغو شده'
|
||
|
||
list1 = [
|
||
m,
|
||
state1,
|
||
poultry_request.payer_fullname if poultry_request.payer_fullname else '-',
|
||
str(poultry_request.order_code),
|
||
str(create_date_of_poultry_request),
|
||
str(date_of_kill_request),
|
||
freez_state,
|
||
poultry_request.poultry.user.fullname,
|
||
poultry_request.poultry.user.mobile,
|
||
poultry_request.poultry.user.city.name,
|
||
poultry_request.poultry.user.province.name,
|
||
age,
|
||
poultry_request.hatching.chicken_breed,
|
||
poultry_request.quantity,
|
||
poultry_request.Index_weight,
|
||
int(poultry_request.quantity * poultry_request.Index_weight),
|
||
poultry_request.hatching.left_over,
|
||
poultry_request.hatching.quantity,
|
||
is_killer,
|
||
full_name_buyer,
|
||
mobile_buyer,
|
||
city_buyer,
|
||
province_buyer,
|
||
killing_place,
|
||
uniq_id,
|
||
killing_place_city,
|
||
poultry_request.out_province_driver_info[
|
||
'driverCar'] if poultry_request.out_province_driver_info or \
|
||
poultry_request.out_province_driver_info['driverCar'] != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverPelak'] if poultry_request.out_province_driver_info \
|
||
or poultry_request.out_province_driver_info[
|
||
'driverPelak'] != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverName'] if poultry_request.out_province_driver_info \
|
||
or poultry_request.out_province_driver_info['driverName'] != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverMobile'] if poultry_request.out_province_driver_info or \
|
||
poultry_request.out_province_driver_info[
|
||
'driverMobile'] != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverhealthCode'] if poultry_request.out_province_driver_info or \
|
||
poultry_request.out_province_driver_info[
|
||
'driverhealthCode'] != None else '-',
|
||
code,
|
||
full_name + '(' + mobile + ')',
|
||
str(date_of_create_code),
|
||
poultry_request.registrar['fullname'] if poultry_request.registrar else '-'
|
||
]
|
||
|
||
m += 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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
l += 1
|
||
|
||
# last_age=sorted(reversed(all_age))
|
||
all_age = sorted(all_age)
|
||
value_header_list2 = [
|
||
len(poultry_requests_accepted),
|
||
all_quantity if all_quantity != None else 0,
|
||
all_weighte if all_weighte != None else 0,
|
||
all_age[0] if len(all_age) > 0 else None,
|
||
all_age[len(all_age) - 1] if len(all_age) > 0 else None,
|
||
has_code,
|
||
|
||
]
|
||
value_header_list2_pending1.extend(value_header_list2)
|
||
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, 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_quantity if all_quantity != None else 0,
|
||
'',
|
||
all_weighte,
|
||
'',
|
||
all_chicken_quantity,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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")
|
||
elif sheet_name == 'رد شده':
|
||
if request.GET['role'] == 'VetFarm':
|
||
vet_farms = VetFarm.objects.filter(vet__user=user, trash=False)
|
||
poultries = Poultry.objects.filter(
|
||
pk__in=vet_farms.values('poultry')
|
||
)
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='rejected', province_state='rejected', final_state='archive', has_wage=True,
|
||
wage_pay=False, out_province_request_cancel=False) | Q(state_process='rejected',
|
||
province_state='rejected',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False) | Q(
|
||
state_process='pending', province_state='pending', final_state='pending',
|
||
has_wage=False, wage_pay=False, out_province_request_cancel=True),
|
||
poultry__in=poultries, ).order_by('-send_date')
|
||
elif request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user)
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='rejected', province_state='rejected', final_state='archive', has_wage=True,
|
||
wage_pay=False, out_province_request_cancel=False) | Q(state_process='rejected',
|
||
province_state='rejected',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False) | Q(
|
||
state_process='pending', province_state='pending', final_state='pending',
|
||
has_wage=False, wage_pay=False, out_province_request_cancel=True),
|
||
poultry__city_operator=city_operator.unit_name,
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='rejected', province_state='rejected', final_state='archive', has_wage=True,
|
||
wage_pay=False, out_province_request_cancel=False) | Q(state_process='rejected',
|
||
province_state='rejected',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False) | Q(
|
||
state_process='pending', province_state='pending', final_state='pending',
|
||
has_wage=False, wage_pay=False, out_province_request_cancel=True),
|
||
poultry__address__city=user.city,
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX', 'Supporter']:
|
||
poultry_requests = poultry_requests.filter(
|
||
Q(state_process='rejected', province_state='rejected', final_state='archive', has_wage=True,
|
||
wage_pay=False, out_province_request_cancel=False) | Q(state_process='rejected',
|
||
province_state='rejected',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False) | Q(
|
||
state_process='pending', province_state='pending', final_state='pending',
|
||
has_wage=False, wage_pay=False, out_province_request_cancel=True)).order_by('-send_date')
|
||
else:
|
||
poultry_requests = poultry_requests
|
||
|
||
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=poultry_requests
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=poultry_requests)
|
||
poultry_requests = ps.filter()
|
||
|
||
poultry_requests_accepted = poultry_requests
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت',
|
||
'پرداخت کننده',
|
||
'کدسفارش مرغدار',
|
||
' تاریخ ثبت درخواست',
|
||
' تاریخ کشتار',
|
||
' کشتار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
' استان مرغدار',
|
||
'سن مرغ',
|
||
' نژاد',
|
||
'تعداد درخواست',
|
||
'میانگین وزنی',
|
||
'وزن درخواست',
|
||
'مانده در سالن',
|
||
'جوجه ریزی اولیه',
|
||
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
' شهر خریدار',
|
||
'استان خریدار',
|
||
'محل کشتار',
|
||
'کد یکتای کشتارگاه',
|
||
'شهر محل کشتار',
|
||
|
||
'نوع خودرو',
|
||
'پلاک',
|
||
|
||
'نام راننده',
|
||
'موبایل راننده',
|
||
'کد بهداشتی حمل و نقل',
|
||
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'ثبت کننده کد قرنطینه',
|
||
'تاریخ ثبت کد قرنطینه',
|
||
'سازنده',
|
||
|
||
]
|
||
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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, 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="0070C0", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[2].height = 20.8
|
||
|
||
worksheet['B1'] = f'گزارش بارهای حذف /رد شده خارج از استان'
|
||
if poultry_requests.exists():
|
||
name = poultry_requests.first().poultry.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 = 6
|
||
m = 1
|
||
|
||
all_weighte = 0
|
||
all_chicken_quantity = 0
|
||
all_age = []
|
||
all_quantity = poultry_requests_accepted.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
|
||
all_weighte = poultry_requests_accepted.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total']
|
||
|
||
has_code = 0
|
||
if poultry_requests:
|
||
for poultry_request in poultry_requests:
|
||
|
||
if ProvinceKillRequest.objects.filter(
|
||
province_request__city_request_Poultry__poultry_request=poultry_request,
|
||
state='accepted').exists():
|
||
age = (poultry_request.send_date - poultry_request.hatching.date).days + 1
|
||
else:
|
||
age = (datetime.datetime.now() - poultry_request.hatching.date).days + 1
|
||
all_age.append(age)
|
||
all_chicken_quantity += poultry_request.hatching.quantity
|
||
create_date_of_poultry_request = jdatetime.date.fromgregorian(
|
||
day=poultry_request.create_date.day,
|
||
month=poultry_request.create_date.month,
|
||
year=poultry_request.create_date.year
|
||
)
|
||
date_of_kill_request = jdatetime.date.fromgregorian(
|
||
day=poultry_request.send_date.day,
|
||
month=poultry_request.send_date.month,
|
||
year=poultry_request.send_date.year
|
||
)
|
||
if poultry_request.quarantine_code_registrar is not None:
|
||
date_code = poultry_request.quarantine_code_registrar['date'].split('-')
|
||
|
||
date_of_create_code = jdatetime.date.fromgregorian(
|
||
day=int(date_code[2]),
|
||
month=int(date_code[1]),
|
||
year=int(date_code[0])
|
||
)
|
||
full_name = poultry_request.quarantine_code_registrar['fullname']
|
||
mobile = poultry_request.quarantine_code_registrar['mobile']
|
||
else:
|
||
date_of_create_code = '-'
|
||
full_name = '-'
|
||
mobile = '-'
|
||
|
||
killing_place = '-'
|
||
killing_place_city = '-'
|
||
uniq_id = '-'
|
||
if poultry_request.out_province_poultry_request_buyer:
|
||
if poultry_request.out_province_poultry_request_buyer.type == 'killhouse':
|
||
is_killer = 'کشتارگاه'
|
||
uniq_id = poultry_request.out_province_poultry_request_buyer.kill_house_unique_id if poultry_request.out_province_poultry_request_buyer.kill_house_unique_id else '-'
|
||
|
||
else:
|
||
is_killer = 'کشتارکن'
|
||
killing_place = poultry_request.killer_kill_house_unit_name \
|
||
if poultry_request.killer_kill_house_unit_name is not None \
|
||
else '-'
|
||
killing_place_city = poultry_request.killer_kill_house_province \
|
||
+ '(' + poultry_request.killer_kill_house_city \
|
||
+ ')' if poultry_request.killer_kill_house_province \
|
||
and poultry_request.killer_kill_house_city is not None \
|
||
else '-'
|
||
uniq_id = poultry_request.kill_house_unique_id if poultry_request.kill_house_unique_id else '-'
|
||
else:
|
||
is_killer = 'کشتارگاه' if poultry_request.buyer is not None and poultry_request.buyer[
|
||
'buyerType'] == 'killhouse' else 'کشتارکن'
|
||
if poultry_request.quarantine_code:
|
||
code = poultry_request.quarantine_code
|
||
has_code += 1
|
||
else:
|
||
code = '-'
|
||
|
||
freez_state = 'منجمد' if poultry_request.freezing == True else 'عادی'
|
||
|
||
if poultry_request.out_province_poultry_request_buyer is not None:
|
||
full_name_buyer = poultry_request.out_province_poultry_request_buyer.fullname
|
||
mobile_buyer = poultry_request.out_province_poultry_request_buyer.user.mobile
|
||
city_buyer = poultry_request.out_province_poultry_request_buyer.user.city.name
|
||
province_buyer = poultry_request.out_province_poultry_request_buyer.user.province.name
|
||
|
||
else:
|
||
full_name_buyer = poultry_request.buyer['firstName']
|
||
mobile_buyer = poultry_request.buyer['mobile']
|
||
city_buyer = poultry_request.buyer['city']
|
||
province_buyer = poultry_request.buyer['province']
|
||
|
||
if poultry_request.province_state == 'rejected':
|
||
state1 = 'رد شده'
|
||
elif poultry_request.province_state == 'pending' and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'در انتظار تایید'
|
||
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == True and poultry_request.wage_pay == False and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'در انتظار پرداخت'
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == False and poultry_request.wage_pay == False and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'تایید شده'
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == True and poultry_request.wage_pay == True and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'پرداخت شده'
|
||
else:
|
||
state1 = 'لغو شده'
|
||
|
||
list1 = [
|
||
m,
|
||
state1,
|
||
poultry_request.payer_fullname if poultry_request.payer_fullname else '-',
|
||
str(poultry_request.order_code),
|
||
str(create_date_of_poultry_request),
|
||
str(date_of_kill_request),
|
||
freez_state,
|
||
poultry_request.poultry.user.fullname,
|
||
poultry_request.poultry.user.mobile,
|
||
poultry_request.poultry.user.city.name,
|
||
poultry_request.poultry.user.province.name,
|
||
age,
|
||
poultry_request.hatching.chicken_breed,
|
||
poultry_request.quantity,
|
||
poultry_request.Index_weight,
|
||
int(poultry_request.quantity * poultry_request.Index_weight),
|
||
poultry_request.hatching.left_over,
|
||
poultry_request.hatching.quantity,
|
||
is_killer,
|
||
full_name_buyer,
|
||
mobile_buyer,
|
||
city_buyer,
|
||
province_buyer,
|
||
killing_place,
|
||
uniq_id,
|
||
killing_place_city,
|
||
poultry_request.out_province_driver_info[
|
||
'driverCar'] if poultry_request.out_province_driver_info or \
|
||
poultry_request.out_province_driver_info['driverCar'] != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverPelak'] if poultry_request.out_province_driver_info \
|
||
or poultry_request.out_province_driver_info[
|
||
'driverPelak'] != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverName'] if poultry_request.out_province_driver_info \
|
||
or poultry_request.out_province_driver_info['driverName'] != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverMobile'] if poultry_request.out_province_driver_info or \
|
||
poultry_request.out_province_driver_info[
|
||
'driverMobile'] != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverhealthCode'] if poultry_request.out_province_driver_info or \
|
||
poultry_request.out_province_driver_info[
|
||
'driverhealthCode'] != None else '-',
|
||
code,
|
||
full_name + '(' + mobile + ')',
|
||
str(date_of_create_code),
|
||
poultry_request.registrar['fullname'] if poultry_request.registrar else '-'
|
||
]
|
||
|
||
m += 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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
l += 1
|
||
|
||
# last_age=sorted(reversed(all_age))
|
||
all_age = sorted(all_age)
|
||
value_header_list2 = [
|
||
len(poultry_requests_accepted),
|
||
all_quantity if all_quantity != None else 0,
|
||
all_weighte if all_weighte != None else 0,
|
||
all_age[0] if len(all_age) > 0 else None,
|
||
all_age[len(all_age) - 1] if len(all_age) > 0 else None,
|
||
has_code,
|
||
|
||
]
|
||
value_header_list2_rejected.extend(value_header_list2)
|
||
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, 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_quantity if all_quantity != None else 0,
|
||
'',
|
||
all_weighte,
|
||
'',
|
||
all_chicken_quantity,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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")
|
||
sheet_name = 'اطلاعات کلی'
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
if sheet_name == 'اطلاعات کلی':
|
||
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')
|
||
if 'date1' in request.GET:
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
worksheet['E3'] = f'اطلاعات بارهای جدید خارج استان از تاریخ {from_date_1} تا {from_date_2}'
|
||
merge_range1 = 'E3:J3'
|
||
worksheet.merge_cells(merge_range1)
|
||
|
||
worksheet['E3'].font = Font(color="C00000", bold=True)
|
||
worksheet['E3'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
worksheet['E8'] = f'اطلاعات بارهای تایید شده خارج استان از تاریخ {from_date_1} تا {from_date_2}'
|
||
merge_range2 = 'E8:J8'
|
||
worksheet.merge_cells(merge_range2)
|
||
|
||
worksheet['E8'].font = Font(color="C00000", bold=True)
|
||
worksheet['E8'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
worksheet['E13'] = f'اطلاعات بارهای رد شده خارج استان از تاریخ {from_date_1} تا {from_date_2}'
|
||
merge_range3 = 'E13:J13'
|
||
worksheet.merge_cells(merge_range3)
|
||
|
||
worksheet['E13'].font = Font(color="C00000", bold=True)
|
||
worksheet['E13'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
for col_num, option in enumerate(header_list_main, 5):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=4, 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[4].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 18
|
||
|
||
for col_num, option in enumerate(header_list_main, 5):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=9, 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[9].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 18
|
||
|
||
for col_num, option in enumerate(header_list_main, 5):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=14, 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[14].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 18
|
||
|
||
for item in range(len(value_header_list2_pending1)):
|
||
cell = worksheet.cell(row=5, column=item + 5, value=value_header_list2_pending1[item])
|
||
value = value_header_list2_pending1[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)
|
||
|
||
for item in range(len(value_header_list2_accepted)):
|
||
cell = worksheet.cell(row=10, column=item + 5, value=value_header_list2_accepted[item])
|
||
value = value_header_list2_accepted[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)
|
||
for item in range(len(value_header_list2_rejected)):
|
||
cell = worksheet.cell(row=15, column=item + 5, value=value_header_list2_rejected[item])
|
||
value = value_header_list2_rejected[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)
|
||
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 out_province_poultry_request_buyers_excel(request):
|
||
filterset_class = OutProvincePoultryRequestBuyerFilterSet
|
||
filterset_fields = [
|
||
'user__national_id',
|
||
'user__base_order',
|
||
'user__mobile',
|
||
'user__first_name',
|
||
'user__last_name',
|
||
'user__fullname',
|
||
'unit_name',
|
||
|
||
]
|
||
|
||
buyers = OutProvincePoultryRequestBuyer.objects.filter(trash=False).order_by('id')
|
||
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=buyers
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=buyers)
|
||
buyers = ps.filter()
|
||
|
||
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 = [
|
||
'تعداد کل خریداران',
|
||
'مجموع تعداد درخواست ها',
|
||
'مجموع حجم درخواست ها',
|
||
'مجموع وزن درخواست ها',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list, 5):
|
||
cell = worksheet.cell(row=2, column=col_num, value=option)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
cell.fill = blue_fill
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[2].height = 20
|
||
|
||
worksheet['B2'] = f'این گزارش در مورخ {from_date_1} صادر شده است.'
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center')
|
||
merge_range1 = 'B2:C3'
|
||
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['B2'].font = red_font
|
||
|
||
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')
|
||
worksheet.column_dimensions[col_letter].width = 20.01
|
||
worksheet.row_dimensions[6].height = 22
|
||
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
|
||
|
||
l = 5
|
||
m = 1
|
||
all_poultry_requests = 0
|
||
all_total_quantity = 0
|
||
all_total_weight = 0
|
||
for buyer in buyers:
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True, out_province_request_cancel=False) | Q(state_process='accepted', province_state='accepted',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False), trash=False,
|
||
out=True, out_province_poultry_request_buyer=buyer)
|
||
all_poultry_requests += len(poultry_requests)
|
||
total_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
all_total_quantity += total_quantity
|
||
total_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
all_total_weight += total_weight
|
||
l += 1
|
||
active = 'فعال' if buyer.active == True else 'غیرفعال'
|
||
type = 'کشتارکن' if buyer.type == 'killer' else 'کشتارگاه'
|
||
list1 = [
|
||
m,
|
||
buyer.user.fullname,
|
||
buyer.user.mobile,
|
||
buyer.user.province.name,
|
||
buyer.user.city.name,
|
||
type,
|
||
buyer.unit_name if buyer.unit_name is not None else '-',
|
||
len(poultry_requests),
|
||
total_quantity,
|
||
total_weight,
|
||
active
|
||
]
|
||
m += 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)
|
||
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')
|
||
)
|
||
|
||
value_header_list = [
|
||
len(buyers),
|
||
all_poultry_requests,
|
||
all_total_quantity,
|
||
all_total_weight
|
||
]
|
||
for item in range(len(value_header_list)):
|
||
cell = worksheet.cell(row=3, column=item + 5, 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_poultry_requests,
|
||
all_total_quantity,
|
||
all_total_weight,
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,###'
|
||
else:
|
||
cell.value = value
|
||
cell.alignment = Alignment(horizontal='center')
|
||
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 chain_company_buyers_excel(request):
|
||
filterset_class = ChainCompanyFilterSet
|
||
filterset_fields = [
|
||
'user__national_id',
|
||
'user__mobile',
|
||
'user__first_name',
|
||
'user__last_name',
|
||
'user__fullname',
|
||
'name',
|
||
|
||
]
|
||
|
||
chain_companies = ChainCompany.objects.filter(trash=False).order_by('id')
|
||
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=chain_companies
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=chain_companies)
|
||
chain_companies = ps.filter()
|
||
|
||
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 = [
|
||
'تعداد شرکت ها',
|
||
'مجموع تعداد سفارشات',
|
||
'مجموع حجم سفارشات',
|
||
'مجموع وزن سفارشات',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list, 5):
|
||
cell = worksheet.cell(row=2, column=col_num, value=option)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
cell.fill = blue_fill
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[2].height = 20
|
||
|
||
worksheet['B2'] = f'این گزارش در مورخ {from_date_1} صادر شده است.'
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center')
|
||
merge_range1 = 'B2:C3'
|
||
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['B2'].font = red_font
|
||
|
||
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')
|
||
worksheet.column_dimensions[col_letter].width = 20.01
|
||
worksheet.row_dimensions[6].height = 22
|
||
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
|
||
|
||
l = 5
|
||
m = 1
|
||
all_poultry_requests = 0
|
||
all_total_quantity = 0
|
||
all_total_weight = 0
|
||
for buyer in chain_companies:
|
||
|
||
chain_allocations = ChainAllocation.objects.filter(chain_company=buyer, state='accepted', trash=False).order_by(
|
||
'-id')
|
||
|
||
total_quantity = chain_allocations.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
all_poultry_requests += len(chain_allocations)
|
||
|
||
all_total_quantity += total_quantity
|
||
|
||
all_total_weight += total_weight
|
||
l += 1
|
||
|
||
list1 = [
|
||
m,
|
||
buyer.name,
|
||
buyer.user.fullname,
|
||
buyer.user.mobile,
|
||
buyer.user.city.name,
|
||
len(chain_allocations),
|
||
total_quantity,
|
||
total_weight
|
||
|
||
]
|
||
m += 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)
|
||
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')
|
||
)
|
||
|
||
value_header_list = [
|
||
len(chain_companies),
|
||
all_poultry_requests,
|
||
all_total_quantity,
|
||
all_total_weight
|
||
]
|
||
for item in range(len(value_header_list)):
|
||
cell = worksheet.cell(row=3, column=item + 5, 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_poultry_requests,
|
||
all_total_quantity,
|
||
all_total_weight,
|
||
|
||
]
|
||
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, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,###'
|
||
else:
|
||
cell.value = value
|
||
cell.alignment = Alignment(horizontal='center')
|
||
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 bar_chain_excel(request):
|
||
now = datetime.datetime.now()
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
filterset_class = ChainAllocationFilterSet
|
||
filterset_fields = [
|
||
'poultry_hatching__poultry__breeding_unique_id',
|
||
'poultry_hatching__poultry__user__mobile',
|
||
'poultry_hatching__poultry__user__fullname',
|
||
'poultry_hatching__poultry__user__first_name',
|
||
'poultry_hatching__poultry__user__last_name',
|
||
'poultry_hatching__poultry__unit_name',
|
||
'chain_company__name',
|
||
|
||
]
|
||
chain_allocations = ChainAllocation.objects.filter(date__date__gte=date1, date__date__lte=date2,
|
||
).order_by('id')
|
||
if request.GET['state'] == 'accepted':
|
||
if request.GET['role'] == "ChainCompany":
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
chain_allocations = chain_allocations.filter(chain_company__user=user,
|
||
state__in=('accepted', 'pending'),
|
||
trash=False).order_by('-id')
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
chain_allocations = chain_allocations.filter(poultry_hatching__poultry__address__city=user.city,
|
||
state__in=('accepted', 'pending'),
|
||
trash=False).order_by('-id')
|
||
elif request.GET['role'] == "CityOperator":
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
city_operator = CityOperator.objects.get(user=user, trash=False)
|
||
chain_allocations = chain_allocations.filter(
|
||
poultry_hatching__poultry__city_operator=city_operator.unit_name,
|
||
state__in=('accepted', 'pending'),
|
||
trash=False).order_by('-id')
|
||
elif request.GET['role'] == "VetFarm":
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
vet = Vet.objects.get(user=user, trash=False)
|
||
poultry_ids = VetFarm.objects.filter(vet=vet, trash=False).select_related('poultry').only(
|
||
'poultry').values_list('poultry', flat=True).distinct()
|
||
poultry = Poultry.objects.filter(id__in=poultry_ids)
|
||
chain_allocations = chain_allocations.filter(poultry_hatching__poultry__in=poultry,
|
||
state__in=('accepted', 'pending'),
|
||
trash=False).order_by('-id')
|
||
else:
|
||
chain_allocations = chain_allocations.filter(state__in=('accepted', 'pending'),
|
||
trash=False).order_by('-id')
|
||
state1 = 'تایید شده'
|
||
else:
|
||
if request.GET['role'] == "ChainCompany":
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
chain_allocations = chain_allocations.filter(chain_company__user=user,
|
||
state__in=('rejected', 'deleted'),
|
||
trash__in=(False, True), temporary_trash=False,
|
||
temporary_deleted=False).order_by('-id')
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
chain_allocations = chain_allocations.filter(poultry_hatching__poultry__address__city=user.city,
|
||
state__in=('rejected', 'deleted'),
|
||
trash__in=(False, True), temporary_trash=False,
|
||
temporary_deleted=False).order_by('-id')
|
||
elif request.GET['role'] == "CityOperator":
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
city_operator = CityOperator.objects.get(user=user, trash=False)
|
||
chain_allocations = chain_allocations.filter(
|
||
poultry_hatching__poultry__city_operator=city_operator.unit_name,
|
||
state__in=('rejected', 'deleted'),
|
||
trash__in=(False, True), temporary_trash=False, temporary_deleted=False).order_by('-id')
|
||
elif request.GET['role'] == "VetFarm":
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
vet = Vet.objects.get(user=user, trash=False)
|
||
poultry_ids = VetFarm.objects.filter(vet=vet, trash=False).select_related('poultry').only(
|
||
'poultry').values_list('poultry', flat=True).distinct()
|
||
poultry = Poultry.objects.filter(id__in=poultry_ids)
|
||
chain_allocations = chain_allocations.filter(
|
||
poultry_hatching__poultry__in=poultry,
|
||
state__in=('rejected', 'deleted'),
|
||
trash__in=(False, True), temporary_trash=False, temporary_deleted=False).order_by('-id')
|
||
else:
|
||
chain_allocations = chain_allocations.filter(
|
||
state__in=('rejected', 'deleted'),
|
||
trash__in=(False, True), temporary_trash=False, temporary_deleted=False).order_by('-id')
|
||
state1 = 'رد شده'
|
||
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=chain_allocations
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=chain_allocations)
|
||
chain_allocations = ps.filter()
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت',
|
||
' تاریخ سفارش',
|
||
'نوع فروش',
|
||
'ثبت کننده سفارش',
|
||
'تلفن ثبت کننده سفارش',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'مرغداری',
|
||
'تلفن مرغداری',
|
||
'شرکت زنجیره',
|
||
' تلفن شرکت زنجیره',
|
||
'کد بهداشتی',
|
||
'کد قرنطینه',
|
||
'راننده ',
|
||
'تلفن راننده ',
|
||
'خودرو',
|
||
'پلاک',
|
||
'حجم',
|
||
'میانگین وزن',
|
||
'وزن',
|
||
'حذف/رد کننده',
|
||
'تلفن حذف/رد کننده',
|
||
]
|
||
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_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)
|
||
if state1 == 'تایید شده':
|
||
for col_num, option in enumerate(excel_options[:21], 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
|
||
else:
|
||
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, 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="0070C0", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[2].height = 20.8
|
||
|
||
worksheet['B1'] = f'گزارش بارهای {state1} شرکت زنجیره'
|
||
if chain_allocations.exists():
|
||
name = chain_allocations.first().poultry_hatching.poultry.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 = 6
|
||
m = 1
|
||
|
||
all_age = []
|
||
|
||
all_quantity = chain_allocations.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
all_weighte = chain_allocations.aggregate(
|
||
total=Sum('weight'))[
|
||
'total'] or 0
|
||
has_code = 0
|
||
if chain_allocations:
|
||
for chain_allocation in chain_allocations:
|
||
age = (chain_allocation.poultry_hatching.chicken_age)
|
||
all_age.append(age)
|
||
chain_date = jdatetime.date.fromgregorian(
|
||
day=chain_allocation.date.day,
|
||
month=chain_allocation.date.month,
|
||
year=chain_allocation.date.year
|
||
)
|
||
|
||
if chain_allocation.quarantine_code:
|
||
has_code += 1
|
||
|
||
remover_fullname = '-'
|
||
remover_mobile = '-'
|
||
if chain_allocation.state == 'accepted':
|
||
state = 'تایید شده'
|
||
elif chain_allocation.state == 'rejected':
|
||
state = 'رد شده'
|
||
remover_fullname = chain_allocation.seconder['fullname'] if chain_allocation.seconder else None
|
||
remover_mobile = chain_allocation.seconder['mobile'] if chain_allocation.seconder else None
|
||
elif chain_allocation.state == 'pending':
|
||
state = 'در انتظار تایید'
|
||
else:
|
||
state = 'حذف شده'
|
||
remover_fullname = chain_allocation.remover['fullname'] if chain_allocation.remover else None
|
||
remover_mobile = chain_allocation.remover['mobile'] if chain_allocation.remover else None
|
||
out_province = 'خارج استان' if chain_allocation.out_province == True else 'داخل استان'
|
||
|
||
full_name_registerer = chain_allocation.registerer['fullname'] if chain_allocation.registerer else '-'
|
||
mobile_registerer = chain_allocation.registerer['mobile'] if chain_allocation.registerer else '-'
|
||
|
||
if chain_allocation.kill_house is not None:
|
||
buyer_fullname = chain_allocation.kill_house.name
|
||
buyer_mobile = chain_allocation.kill_house.kill_house_operator.user.mobile
|
||
else:
|
||
buyer_fullname = chain_allocation.buyer_name
|
||
buyer_mobile = chain_allocation.buyer_mobile
|
||
|
||
list1 = [
|
||
m,
|
||
state,
|
||
str(chain_date),
|
||
out_province,
|
||
full_name_registerer,
|
||
mobile_registerer,
|
||
buyer_fullname,
|
||
buyer_mobile,
|
||
chain_allocation.poultry_hatching.poultry.unit_name,
|
||
chain_allocation.poultry_hatching.poultry.user.mobile,
|
||
chain_allocation.company_name,
|
||
chain_allocation.company_user_mobile,
|
||
chain_allocation.health_code if chain_allocation.health_code else '-',
|
||
chain_allocation.quarantine_code if chain_allocation.quarantine_code else '-',
|
||
chain_allocation.driver_name if chain_allocation.driver_name else '-',
|
||
chain_allocation.driver_mobile if chain_allocation.driver_mobile else '-',
|
||
chain_allocation.type_car if chain_allocation.type_car else '-',
|
||
chain_allocation.pelak if chain_allocation.pelak else '-',
|
||
chain_allocation.quantity,
|
||
chain_allocation.index_weight,
|
||
chain_allocation.weight,
|
||
remover_fullname,
|
||
remover_mobile,
|
||
]
|
||
m += 1
|
||
if state1 == 'تایید شده':
|
||
for item in range(len(list1) - 2):
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
else:
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
l += 1
|
||
|
||
# last_age=sorted(reversed(all_age))
|
||
all_age = sorted(all_age)
|
||
value_header_list2 = [
|
||
len(chain_allocations),
|
||
all_quantity,
|
||
all_weighte,
|
||
all_age[0] if len(all_age) > 0 else None,
|
||
all_age[len(all_age) - 1] if len(all_age) > 0 else None,
|
||
has_code,
|
||
|
||
]
|
||
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, 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)
|
||
cell.font = Font(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
all_quantity,
|
||
'',
|
||
all_weighte,
|
||
'',
|
||
'',
|
||
|
||
]
|
||
if state1 == 'تایید شده':
|
||
for item in range(len(list2) - 2):
|
||
cell = worksheet.cell(row=l + 3, column=item + 1, value=list2[item])
|
||
value = list2[item]
|
||
if isinstance(value, (int, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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")
|
||
else:
|
||
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, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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 general_city_operator(request):
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
city_operator_list = []
|
||
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
sheet_name = 'اطلاعات کلی'
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
|
||
if sheet_name == 'اطلاعات کلی':
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
city_operators = CityOperator.objects.filter(trash=False).exclude(unit_name='اتحادیه استان (فاقد تعاونی)')
|
||
|
||
row_list2 = len(city_operators) + 7
|
||
province = city_operators.last().user.province.name
|
||
worksheet[f'F1'] = f'گزارش اطلاعات کلی جوجه ریزی و کشتار تعاونی های استان {province}'
|
||
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)
|
||
|
||
worksheet[f'D{row_list2}'] = f'اطلاعات کشتار به تفکیک تعاونی ها از تاریخ {from_date_1} تا {from_date_2}'
|
||
worksheet[f'D{row_list2}'].font = Font(color="C00000", bold=True, size=12)
|
||
worksheet[f'D{row_list2}'].alignment = Alignment(horizontal='center', vertical='center',
|
||
wrap_text=True)
|
||
merge_range1 = f'D{row_list2}:J{row_list2 + 1}'
|
||
worksheet.merge_cells(merge_range1)
|
||
|
||
header_list1 = [
|
||
'تعاونی',
|
||
'شهر',
|
||
'کاربر',
|
||
'تلفن کاربر',
|
||
'تعداد فارم',
|
||
'تعداد کل جوجه ریزی',
|
||
'حجم کل جوجه ریزی',
|
||
'حجم کل کشتارشده',
|
||
'وزن کل کشتارشده',
|
||
'میانگین وزنی',
|
||
'حجم کل فروش خارج از استان',
|
||
'وزن کل فروش خارج از استان',
|
||
'وزن کل لاشه',
|
||
'تعداد جوجه ریزی فعال',
|
||
'حجم جوجه ریزی فعال',
|
||
'مانده در سالن',
|
||
|
||
'تعداد درخواست کشتار تعاونی',
|
||
'حجم درخواست کشتار تعاونی',
|
||
'درصد نسبت به حجم کل',
|
||
'تعداد خرید مستقیم',
|
||
'حجم خرید مستقیم',
|
||
'درصد نسبت به حجم کل',
|
||
'تعداد درخواست کشتار کاربر سایر',
|
||
'حجم کشتار کاربر سایر',
|
||
'درصد نسبت به حجم کل',
|
||
'تعداد گزارشات کاربر تعاونی',
|
||
'تعداد گزارشات کاربر ادمین',
|
||
'کل گزارشات',
|
||
'درصد فعالیت کاربر نسبت به جوجه ریزی ها',
|
||
'درصد فعالیت ادمین نسبت به جوجه ریزی ها',
|
||
'درصد فعالیت نسبت به کل گزارشات کاربران',
|
||
'درصد فعالیت نسبت به کاربر ادمین',
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list1, 2):
|
||
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=10, bold=True, color='FFFFFF')
|
||
|
||
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')
|
||
)
|
||
|
||
l = 4
|
||
row_list = len(city_operators) + 12
|
||
row_city = len(city_operators) + 10
|
||
len_poultry = 0
|
||
len_all_hatching = 0
|
||
all_hathcing_quantitya_all = 0
|
||
all_province_requests_quantity = 0
|
||
all_province_requests_weight = 0
|
||
len_hatching = 0
|
||
all_hatching_quantity = 0
|
||
all_hatching_lest_over = 0
|
||
all_out_poultry_request_quantity = 0
|
||
all_out_poultry_request_weight = 0
|
||
city_operator_poultry_request_quantity_all = 0
|
||
city_operator_poultry_request_weight_all = 0
|
||
direct_bying_poultry_request_quantity_all = 0
|
||
direct_bying_poultry_request_weight_all = 0
|
||
province_operaor_poultry_request_quantity_all = 0
|
||
province_operaor_poultry_request_weight_all = 0
|
||
city_operator_name = city_operators.values_list('user__fullname', flat=True).distinct()
|
||
city_operator_all_violation_all = PoultryHatching.objects.filter(trash=False, violation_reporter__isnull=False,
|
||
violation_reporter__in=city_operator_name).count()
|
||
all_admin_all_violation = 0
|
||
for city_operator in city_operators:
|
||
poultry_request = PoultryRequest.objects.filter(trash=False,
|
||
out_province_request_cancel=False,
|
||
province_state='accepted',
|
||
poultry__city_operator=city_operator.unit_name)
|
||
poultry = Poultry.objects.filter(trash=False, city_operator=city_operator.unit_name)
|
||
out_poultry_request = poultry_request.filter(out=True)
|
||
city_operator_poultry_request = poultry_request.filter(direct_buying=False, registrar__role='CityOperator')
|
||
province_operaor_poultry_request = poultry_request.filter(~Q(registrar__role='CityOperator'),
|
||
direct_buying=False)
|
||
direct_bying_poultry_request = poultry_request.filter(direct_buying=True)
|
||
|
||
province_requests = ProvinceKillRequest.objects.filter(trash=False,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name
|
||
, return_to_province=False,
|
||
state__in=('accepted', 'pending'))
|
||
|
||
province_requests_quantity = \
|
||
province_requests.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
|
||
province_requests_weight = \
|
||
province_requests.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
|
||
kill_requests = KillHouseRequest.objects.filter(trash=False, province_kill_request__in=province_requests)
|
||
all_hatching = PoultryHatching.objects.filter(trash=False, poultry__in=poultry)
|
||
all_violation = all_hatching.filter(violation_reporter__isnull=False)
|
||
city_operator_all_violation = all_violation.filter(violation_reporter=city_operator.user.fullname).count()
|
||
admin_all_violation = all_violation.filter(~Q(violation_reporter=city_operator.user.fullname)).count()
|
||
|
||
hathcing_quantity_all = \
|
||
all_hatching.aggregate(
|
||
total=Sum(F('quantity')))[
|
||
'total'] or 0
|
||
out_poultry_request_quantity_all = \
|
||
out_poultry_request.aggregate(
|
||
total=Sum(F('quantity')))[
|
||
'total'] or 0
|
||
out_poultry_request_weight_all = \
|
||
out_poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
hatching = all_hatching.filter(archive=False, allow_hatching='pending')
|
||
hatching_quantity = \
|
||
hatching.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
hatching_lest_over = \
|
||
hatching.aggregate(
|
||
total=Sum('left_over'))[
|
||
'total'] or 0
|
||
city_operator_poultry_request_quantity = \
|
||
city_operator_poultry_request.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
city_operator_poultry_request_weight = \
|
||
city_operator_poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
quantity_all = \
|
||
poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
direct_bying_poultry_request_quantity = \
|
||
direct_bying_poultry_request.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
direct_bying_poultry_request_weight = \
|
||
direct_bying_poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
province_operaor_poultry_request_quantity = \
|
||
province_operaor_poultry_request.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
province_operaor_poultry_request_weight = \
|
||
province_operaor_poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
all_report = city_operator_all_violation + admin_all_violation
|
||
all_admin_all_violation += admin_all_violation
|
||
list1 = [
|
||
city_operator.unit_name,
|
||
city_operator.user.city.name,
|
||
city_operator.user.fullname,
|
||
city_operator.user.mobile,
|
||
len(poultry),
|
||
len(all_hatching),
|
||
hathcing_quantity_all,
|
||
province_requests_quantity,
|
||
province_requests_weight,
|
||
round(province_requests_weight / province_requests_quantity,
|
||
1) if province_requests_quantity > 0 else 0,
|
||
out_poultry_request_quantity_all,
|
||
out_poultry_request_weight_all,
|
||
province_requests_weight * 0.75,
|
||
len(hatching),
|
||
hatching_quantity,
|
||
hatching_lest_over,
|
||
city_operator_poultry_request_quantity,
|
||
city_operator_poultry_request_weight,
|
||
round((city_operator_poultry_request_weight * 100) / quantity_all) if quantity_all > 0 else 0,
|
||
direct_bying_poultry_request_quantity,
|
||
direct_bying_poultry_request_weight,
|
||
round((direct_bying_poultry_request_weight * 100) / quantity_all) if quantity_all > 0 else 0,
|
||
province_operaor_poultry_request_quantity,
|
||
province_operaor_poultry_request_weight,
|
||
round((province_operaor_poultry_request_weight * 100) / quantity_all) if quantity_all > 0 else 0,
|
||
city_operator_all_violation,
|
||
admin_all_violation,
|
||
city_operator_all_violation + admin_all_violation,
|
||
str(round(city_operator_all_violation * 100 / len(all_hatching), 1) if len(all_hatching) > 0 else 0),
|
||
str(round(admin_all_violation * 100 / len(all_hatching), 1) if len(all_hatching) > 0 else 0),
|
||
str(round(city_operator_all_violation * 100 / city_operator_all_violation_all,
|
||
1) if city_operator_all_violation_all > 0 else 0),
|
||
str(round(city_operator_all_violation * 100 / all_report, 1) if all_report > 0 else 0),
|
||
|
||
]
|
||
for item in range(len(list1)):
|
||
cell = worksheet.cell(row=l, column=item + 2, value=list1[item])
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
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.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')
|
||
)
|
||
l += 1
|
||
len_poultry += len(poultry)
|
||
len_all_hatching += len(all_hatching)
|
||
all_hathcing_quantitya_all += hathcing_quantity_all
|
||
all_province_requests_quantity += province_requests_quantity
|
||
all_province_requests_weight += province_requests_weight
|
||
len_hatching += len(hatching)
|
||
all_hatching_quantity += hatching_quantity
|
||
all_hatching_lest_over += hatching_lest_over
|
||
all_out_poultry_request_quantity += out_poultry_request_quantity_all
|
||
all_out_poultry_request_weight += out_poultry_request_weight_all
|
||
province_requests_date = province_requests.filter(
|
||
province_request__poultry_request__send_date__date__gte=date1
|
||
, province_request__poultry_request__send_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name
|
||
)
|
||
city_operator_poultry_request_quantity_all += city_operator_poultry_request_quantity
|
||
city_operator_poultry_request_weight_all += city_operator_poultry_request_weight
|
||
direct_bying_poultry_request_quantity_all += direct_bying_poultry_request_quantity
|
||
direct_bying_poultry_request_weight_all += direct_bying_poultry_request_weight
|
||
province_operaor_poultry_request_quantity_all += province_operaor_poultry_request_quantity
|
||
province_operaor_poultry_request_weight_all += province_operaor_poultry_request_weight
|
||
|
||
list2 = [
|
||
'ردیف',
|
||
'ماهیت',
|
||
'خریدار',
|
||
'نام و نام خانوادگی مالک',
|
||
'تلفن مالک',
|
||
'شهر',
|
||
'تعداد سفارش',
|
||
'حجم سفارش',
|
||
'تعداد بار ',
|
||
'حجم بار',
|
||
'وزن بار',
|
||
'وزن لاشه',
|
||
]
|
||
if province_requests_date:
|
||
if city_operator not in city_operator_list:
|
||
city_operator_list.append(city_operator)
|
||
kill_houses1 = province_requests_date.values_list('killhouse_user', flat=True).distinct()
|
||
|
||
for col_num, option in enumerate(list2, 2):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=row_list, 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')
|
||
if option in ['تعداد سفارش', 'حجم سفارش', 'تعداد بار ', 'حجم بار', 'وزن بار', 'وزن لاشه']:
|
||
cell.fill = PatternFill(start_color="FF0000", fill_type="solid")
|
||
# worksheet.row_dimensions[row_list].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 17
|
||
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')
|
||
)
|
||
m = 1
|
||
kill_houses = KillHouse.objects.filter(id__in=kill_houses1)
|
||
len_province_requests_kill = 0
|
||
all_province_quantity = 0
|
||
len_kill_requests_date = 0
|
||
all_accepted_assignment_real_quantity = 0
|
||
all_accepted_assignment_real_weight = 0
|
||
all_ware_house_accepted_real_weight = 0
|
||
for kill_house in kill_houses:
|
||
province_requests_kill = province_requests_date.filter(killhouse_user=kill_house)
|
||
|
||
province_quantity = \
|
||
province_requests_kill.aggregate(
|
||
total=Sum('main_quantity'))[
|
||
'total'] or 0
|
||
|
||
kill_requests_date = kill_requests.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
killhouse_user=kill_house,
|
||
province_kill_request__in=province_requests_kill)
|
||
|
||
accepted_assignment_real_quantity = \
|
||
kill_requests_date.aggregate(
|
||
total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
accepted_assignment_real_weight = \
|
||
kill_requests_date.aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
len_province_requests_kill += len(province_requests_kill)
|
||
all_province_quantity += province_quantity
|
||
len_kill_requests_date += len(kill_requests_date)
|
||
all_accepted_assignment_real_quantity += accepted_assignment_real_quantity
|
||
all_accepted_assignment_real_weight += int(accepted_assignment_real_weight)
|
||
all_ware_house_accepted_real_weight += int(accepted_assignment_real_weight) * 0.75
|
||
# killer='کشتارگاه' if kill_house.killer == False else 'کشتارکن'
|
||
if kill_house.killer == True and kill_house.type == 'exclusive':
|
||
parent = KillHousePercentage.objects.get(kill_house=kill_house, trash=False)
|
||
killer_type = f'کشتارکن اختصاصی {parent.kill_house_for_killer.name}'
|
||
elif kill_house.killer == True and kill_house.type == 'public':
|
||
killer_type = 'کشتارکن عمومی'
|
||
else:
|
||
killer_type = 'کشتارگاه'
|
||
list1 = [
|
||
m,
|
||
killer_type,
|
||
kill_house.name,
|
||
kill_house.kill_house_operator.user.fullname,
|
||
kill_house.kill_house_operator.user.mobile,
|
||
kill_house.kill_house_operator.user.city.name,
|
||
len(province_requests_kill),
|
||
province_quantity,
|
||
len(kill_requests_date),
|
||
accepted_assignment_real_quantity,
|
||
int(accepted_assignment_real_weight),
|
||
int(accepted_assignment_real_weight) * 0.75,
|
||
]
|
||
for item in range(len(list1)):
|
||
cell = worksheet.cell(row=row_list + 1, column=item + 2, value=list1[item])
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
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.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')
|
||
)
|
||
row_list += 1
|
||
m += 1
|
||
|
||
else:
|
||
row_list += 5
|
||
worksheet[f'F{row_city}'] = f'{city_operator.unit_name}'
|
||
worksheet[f'F{row_city}'].font = Font(color="C00000", bold=True, size=12)
|
||
worksheet[f'F{row_city}'].alignment = Alignment(horizontal='center', vertical='center',
|
||
wrap_text=True)
|
||
merge_range1 = f'F{row_city}:H{row_city + 1}'
|
||
worksheet.merge_cells(merge_range1)
|
||
|
||
row_city += len(kill_houses) + 5
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
len_province_requests_kill,
|
||
all_province_quantity,
|
||
len_kill_requests_date,
|
||
all_accepted_assignment_real_quantity,
|
||
all_accepted_assignment_real_weight,
|
||
all_ware_house_accepted_real_weight,
|
||
|
||
]
|
||
for item in range(len(list2)):
|
||
cell = worksheet.cell(row=row_city - 2, column=item + 2, value=list2[item])
|
||
value = list2[item]
|
||
cell.font = Font(size=10, bold=True, color='FFFFFF')
|
||
if isinstance(value, (int, float)):
|
||
cell.number_format = '#,###' # Apply general number format
|
||
else:
|
||
cell.value = value # Keep as text for other values
|
||
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.fill = PatternFill(start_color="00B050", fill_type="solid")
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
len_poultry,
|
||
len_all_hatching,
|
||
all_hathcing_quantitya_all,
|
||
all_province_requests_quantity,
|
||
all_province_requests_weight,
|
||
round(all_province_requests_weight / all_province_requests_quantity,
|
||
1) if all_province_requests_quantity > 0 else 0,
|
||
all_out_poultry_request_quantity,
|
||
all_out_poultry_request_weight,
|
||
all_province_requests_weight * 0.75,
|
||
len_hatching,
|
||
all_hatching_quantity,
|
||
all_hatching_lest_over,
|
||
city_operator_poultry_request_quantity_all,
|
||
city_operator_poultry_request_weight_all,
|
||
'',
|
||
direct_bying_poultry_request_quantity_all,
|
||
direct_bying_poultry_request_weight_all,
|
||
'',
|
||
province_operaor_poultry_request_quantity_all,
|
||
province_operaor_poultry_request_weight_all,
|
||
'',
|
||
city_operator_all_violation_all,
|
||
all_admin_all_violation,
|
||
all_admin_all_violation + city_operator_all_violation_all,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 1, 2, color='green')
|
||
for city_operator in city_operator_list:
|
||
sheet_name = city_operator.unit_name
|
||
sheet_name1 = sheet_name.split(' ')[-2] + ' ' + sheet_name.split(' ')[-1]
|
||
worksheet = workbook.create_sheet(f'تعاونی {sheet_name1}')
|
||
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')
|
||
|
||
filtered_kill_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name).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_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(
|
||
'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',
|
||
)
|
||
if 'key' in request.GET:
|
||
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_kill_reqs = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name)
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
filtered_kill_reqs = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__user__city=user.city)
|
||
elif request.GET['role'] == 'VetFarm':
|
||
vet = Vet.objects.filter(user=user, trash=False)
|
||
poultries = []
|
||
if vet.count() > 0:
|
||
vet = vet.last()
|
||
vet_farms = VetFarm.objects.filter(vet=vet, trash=False)
|
||
if vet_farms.count() > 0:
|
||
|
||
for vet_farm in vet_farms:
|
||
if vet_farm.poultry in poultries:
|
||
pass
|
||
else:
|
||
poultries.append(vet_farm.poultry)
|
||
filtered_kill_reqs = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__in=poultries)
|
||
|
||
elif request.GET['role'] == 'KillHouse':
|
||
filtered_kill_reqs = filtered_kill_request.filter(
|
||
killhouse_user__kill_house_operator__user=user)
|
||
else:
|
||
filtered_kill_reqs = filtered_kill_request
|
||
else:
|
||
filtered_kill_reqs = filtered_kill_request
|
||
|
||
else:
|
||
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']
|
||
total_requests_weight = poultry_request.aggregate(total=Sum('total_weight'))['total']
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'کشتار',
|
||
'کدسفارش مرغدار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
'کشتارکن اختصاصی',
|
||
'تلفن کشتارکن اختصاصی',
|
||
' محل کشتار ',
|
||
'نوع تخصیص',
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'وضعیت',
|
||
'وضعیت سند',
|
||
'وضعیت ورود انبار',
|
||
'تعداد لاشه',
|
||
'وزن لاشه',
|
||
'درصد افت در لحظه',
|
||
'درصد افت ورود به انبار',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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'گزارش بارهای ایجاد شده در فرآیند کشتار مرغ گوشتی {sheet_name}'
|
||
|
||
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})'
|
||
red_font = Font(color="C00000", bold=True)
|
||
|
||
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:F1'
|
||
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', 0)
|
||
accepted_real_wight = filtered_kill_reqs.aggregate(total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity', 0)
|
||
|
||
all_kill_request_quantity = filtered_kill_reqs.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
all_vet_accepted_real_quantity = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_vet_accepted_real_weight = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_weight')).get(
|
||
'total_quantity', 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 = 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 = kill['vet_accepted_real_weight'] if kill['vet_accepted_real_weight'] else '-'
|
||
|
||
weight = 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 = 'عدم تایید راهداری'
|
||
elif kill['quarantine_code_state'] == 'merge':
|
||
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
|
||
|
||
if kill['assignment_state_archive'] == 'True':
|
||
all_assignment_state_archive_state += 1
|
||
assignment_state_archive_state = 'وارد شده است'
|
||
else:
|
||
assignment_state_archive_state = 'وارد نشده است'
|
||
|
||
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 = '-'
|
||
|
||
weight_loss1 = kill['accepted_real_weight'] - kill['ware_house_accepted_real_weight'] if kill[
|
||
'ware_house_accepted_real_weight'] > 0 else 0
|
||
if weight_loss1 < 0:
|
||
weight_loss1 = weight_loss1 * -1
|
||
total_weight_loss = (weight_loss1 / kill['accepted_real_weight']) * 100 if kill[
|
||
'accepted_real_weight'] != 0 else 0
|
||
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'],
|
||
kill['accepted_real_weight'],
|
||
|
||
state_delete,
|
||
assignment_state_archive_state,
|
||
state_ware_house_confirmation,
|
||
ware_house_accepted_real_quantity,
|
||
ware_house_accepted_real_weight,
|
||
f'%{round(total_weight_loss, 2)}',
|
||
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(all_weight_loss / len_weight_loss, 2) if all_weight_loss > 0 else 0
|
||
value_header_list = [
|
||
len(filtered_kill_reqs),
|
||
killer_exclusive,
|
||
all_quantity,
|
||
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,
|
||
all_vet_accepted_real_weight,
|
||
len(bar_complete),
|
||
all_real_quantity,
|
||
all_net_weighte,
|
||
accepted_real_quantity if accepted_real_quantity != None else 0,
|
||
accepted_real_wight if accepted_real_wight != None else 0,
|
||
all_assignment_state_archive_state,
|
||
all_state_ware_house_confirmation,
|
||
all_ware_house_accepted_real_quantity,
|
||
all_ware_house_accepted_real_weight,
|
||
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, 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)
|
||
value_header_list2 = [
|
||
len(poultry_request),
|
||
total_requests_quantity,
|
||
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, 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_kill_request_quantity,
|
||
all_weighte,
|
||
'',
|
||
all_quarantine_quantity if all_quarantine_quantity != None else 0,
|
||
'',
|
||
'',
|
||
all_vet_accepted_real_quantity,
|
||
all_vet_accepted_real_weight,
|
||
all_real_quantity,
|
||
all_net_weighte,
|
||
accepted_real_quantity if accepted_real_quantity != None else 0,
|
||
accepted_real_wight if accepted_real_wight != None else 0,
|
||
'',
|
||
'',
|
||
'',
|
||
all_ware_house_accepted_real_quantity,
|
||
all_ware_house_accepted_real_weight,
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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 kill_house_total_transactions_wage_payid_admin_x_excel(request):
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
kill_house_list = []
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'تاریخ پرداخت',
|
||
'نوع پرداخت',
|
||
'نام پرداخت کننده',
|
||
'تلفن پرداخت کننده',
|
||
'شماره درخواست',
|
||
'شماره پیگیری',
|
||
'کد سفارش',
|
||
'شماره کارت',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
'سهم شرکت(ریال)',
|
||
'سهم اصناف(ریال)',
|
||
'سهم دامپزشک(ریال)',
|
||
|
||
]
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
sheet_name = 'اطلاعات کلی'
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
|
||
if sheet_name == 'اطلاعات کلی':
|
||
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')
|
||
if 'date1' in request.GET:
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
worksheet['B2'] = f'اطلاعات کلی تعرفه {from_date_1} تا {from_date_2}'
|
||
merge_range1 = 'B2:C2'
|
||
worksheet.merge_cells(merge_range1)
|
||
|
||
worksheet['B2'].font = Font(color="C00000", bold=True)
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
worksheet['B5'] = f'جزئیات {from_date_1} تا {from_date_2}'
|
||
|
||
worksheet['B5'].font = Font(color="C00000", bold=True)
|
||
worksheet['B5'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
else:
|
||
# worksheet['B2'] = 'اطلاعات کلی تعرفه(از 1403/01/01 به بعد)'
|
||
|
||
worksheet['B2'].font = Font(color="C00000")
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
merge_range1 = 'B2:C2'
|
||
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['B5'] = f'جزئیات'
|
||
|
||
worksheet['B5'].font = Font(color="C00000", bold=True)
|
||
worksheet['B5'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
header_list1 = [
|
||
'کل تعرفه (ریال)',
|
||
'سهم اتحادیه',
|
||
'سهم شرکت',
|
||
'سهم صنف',
|
||
'سهم دامپزشک',
|
||
'کل تعرفه پرداخت شده (ریال)',
|
||
'سهم پرداخت شده اتحادیه (ریال)',
|
||
'سهم پرداخت شده شرکت (ریال)',
|
||
'سهم پرداخت شده اصناف (ریال)',
|
||
'سهم پرداخت شده دامپزشک (ریال)',
|
||
'مجموع تخفیفات (ریال)',
|
||
'کل تعرفه پرداخت نشده (ریال)',
|
||
|
||
'سهم پرداخت نشده اتحادیه (ریال)',
|
||
'سهم پرداخت نشده شرکت (ریال)',
|
||
'سهم پرداخت نشده اصناف (ریال)',
|
||
'سهم پرداخت نشده دامپزشک (ریال)',
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list1, 4):
|
||
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 = blue_fill
|
||
cell.font = Font(size=10, bold=True, color='FFFFFF')
|
||
worksheet.row_dimensions[2].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 18
|
||
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')
|
||
)
|
||
|
||
try:
|
||
total_wage = TotalWageInformation.objects.get(trash=False)
|
||
except:
|
||
total_wage = TotalWageInformation()
|
||
total_wage.save()
|
||
serializer_total_wage_information = TotalWageInformationSerializer(total_wage,
|
||
context={'request': request}).data
|
||
|
||
wage_info = serializer_total_wage_information.get('wage_info', {})
|
||
shares = wage_info.get('shares', [])
|
||
company_data = next((item for item in shares if item["name"] == "شرکت"), None)
|
||
etehadiye_data = next((item for item in shares if item["name"] == "اتحادیه"), None)
|
||
sanf_protein_data = next((item for item in shares if item["name"] == "صنف پروتئین"), None)
|
||
dampezshk_data = next((item for item in shares if item["name"] == "دامپزشک"), None)
|
||
|
||
values_list = [
|
||
wage_info.get('total_wage', 0),
|
||
etehadiye_data['total_wage'],
|
||
company_data['total_wage'],
|
||
sanf_protein_data['total_wage'],
|
||
dampezshk_data['total_wage'],
|
||
wage_info.get('total_paid_wage', 0),
|
||
etehadiye_data['total_paid_wage'],
|
||
company_data['total_paid_wage'],
|
||
sanf_protein_data['total_paid_wage'],
|
||
dampezshk_data['total_paid_wage'],
|
||
wage_info.get('off', 0),
|
||
wage_info.get('total_unpaid_wage', 0),
|
||
etehadiye_data['total_unpaid_wage'],
|
||
company_data['total_unpaid_wage'],
|
||
sanf_protein_data['total_unpaid_wage'],
|
||
dampezshk_data['total_unpaid_wage'],
|
||
]
|
||
create_value(worksheet, values_list, 3, 4, border_style='thin')
|
||
kill_houses = KillHouse.objects.filter(trash=False).exclude(out_province=True).order_by('id')
|
||
|
||
kill_houses = KillHouseForNewWageInormationSerializer(kill_houses, many=True, context={'request': request}).data
|
||
if wage_info['wage_counting_type'] == 'carcass':
|
||
l = 15
|
||
m = 1
|
||
header_list2 = [
|
||
"وزن کل فروش به خارج از استان ",
|
||
"تعرفه کل فروش به خارج از استان(ریال)",
|
||
"کل وزن زنده کشتار داخل استان(کیلوگرم)",
|
||
"کل وزن لاشه کشتار داخل استان(کیلوگرم)",
|
||
"وزن توزیع لاشه داخل استان(کیلوگرم)",
|
||
"تعرفه توزیع لاشه داخل استان(ریال)",
|
||
"وزن توزیع لاشه به خارج از استان(کیلوگرم)",
|
||
"تعرفه توزیع لاشه به خارج از استان(ریال)",
|
||
"وزن لاشه ورودی به استان(کیلوگرم)",
|
||
"تعرفه لاشه ورودی به استان(ریال)",
|
||
"وزن مرغ زنده ورودی به استان(کیلوگرم)",
|
||
"تعرفه مرغ زنده ورودی به استان(ریال)",
|
||
"وزن خرید های بازگشتی(کیلوگرم)",
|
||
"تعرفه خرید های بازگشتی(ریال)",
|
||
|
||
]
|
||
values_list2 = [
|
||
wage_info.get('out_province_poultry_request_weight', 0),
|
||
wage_info.get('out_province_poultry_request_wage', 0),
|
||
wage_info.get('total_province_live_weight', 0),
|
||
wage_info.get('total_province_carcasses_weight', 0),
|
||
wage_info.get('province_kill_requests_total_weight', 0),
|
||
wage_info.get('province_kill_requests_total_wage', 0),
|
||
wage_info.get('free_bars_out_province_carcases_total_weight', 0),
|
||
wage_info.get('free_bars_out_province_carcases_total_wage', 0),
|
||
wage_info.get('free_bars_carcases_total_weight', 0),
|
||
wage_info.get('free_bars_carcases_total_wage', 0),
|
||
wage_info.get('free_bars_live_total_weight', 0),
|
||
wage_info.get('free_bars_live_total_wage', 0),
|
||
wage_info.get('return_total_province_live_weight', 0),
|
||
wage_info.get('total_return_pure_province_carcasses_price', 0),
|
||
|
||
]
|
||
header_list5 = [
|
||
'سهم',
|
||
'تعرفه فروش مرغ زنده به خارج از استان(ریال)',
|
||
'تعرفه توزیع لاشه به داخل استان(ریال)',
|
||
'تعرفه توزیع لاشه خارج استان(ریال)',
|
||
'تعرفه لاشه ورودی به استان(ریال)',
|
||
'تعرفه مرغ زنده ورودی به استان(ریال)',
|
||
'تعرفه کل(ریال)',
|
||
'تعرفه پرداخت شده(ریال)',
|
||
'تعرفه پرداخت نشده(ریال)',
|
||
|
||
]
|
||
header_list = [
|
||
'ردیف',
|
||
'کشتارگاه',
|
||
'کل تعرفه (ریال)',
|
||
'سهم اتحادیه (ریال)',
|
||
'سهم شرکت (ریال)',
|
||
'سهم صنف (ریال)',
|
||
'سهم دامپزشک (ریال)',
|
||
|
||
'کل تعرفه پرداخت شده (ریال)',
|
||
'سهم اتحادیه از واریزی(ریال)',
|
||
'سهم شرکت از واریزی(ریال)',
|
||
'سهم اصناف از واریزی(ریال)',
|
||
'سهم دامپزشک از واریزی(ریال)',
|
||
'تخفیفات (ریال)',
|
||
|
||
'کل تعرفه پرداخت نشده (ریال)',
|
||
' سهم اتحادیه پرداخت نشده',
|
||
' سهم شرکت پرداخت نشده',
|
||
'سهم صنف پرداخت نشده',
|
||
'سهم دامپزشک پرداخت نشده',
|
||
'کل وزن زنده کشتار داخل استان',
|
||
'وزن لاشه کشتار داخل استان',
|
||
'وزن توزیع لاشه کشتار داخل استان',
|
||
'تعرفه توزیع لاشه کشتار داخل استان',
|
||
'وزن توزیع لاشه به خارج استان',
|
||
'تعرفه توزیع لاشه به خارج استان',
|
||
'وزن لاشه ورودی به استان',
|
||
'تعرفه لاشه ورودی به استان',
|
||
'وزن مرغ زنده ورودی به استان',
|
||
'تعرفه مرغ زنده ورودی به استان',
|
||
'وزن خریدهای بازگشتی',
|
||
'تعرفه خریدهای بازگشتی',
|
||
|
||
]
|
||
|
||
for kill_house in kill_houses:
|
||
wage_info2 = kill_house.get('wage_info', {})
|
||
shares2 = kill_house.get('shares', [])
|
||
company_data2 = next((item for item in shares2 if item["name"] == "شرکت"), None)
|
||
etehadiye_data2 = next((item for item in shares2 if item["name"] == "اتحادیه"), None)
|
||
sanf_protein_data2 = next((item for item in shares2 if item["name"] == "صنف پروتئین"), None)
|
||
dampezshk_data2 = next((item for item in shares2 if item["name"] == "دامپزشک"), None)
|
||
values_list3 = [
|
||
m,
|
||
kill_house['name'],
|
||
wage_info2['total_wage'],
|
||
etehadiye_data2['total_wage'],
|
||
company_data2['total_wage'],
|
||
sanf_protein_data2['total_wage'],
|
||
dampezshk_data2['total_wage'],
|
||
wage_info2.get('total_paid_wage', 0),
|
||
etehadiye_data2['total_paid_wage'],
|
||
company_data2['total_paid_wage'],
|
||
sanf_protein_data2['total_paid_wage'],
|
||
dampezshk_data2['total_paid_wage'],
|
||
wage_info2.get('off', 0),
|
||
wage_info2.get('total_unpaid_wage', 0),
|
||
etehadiye_data2['total_unpaid_wage'],
|
||
company_data2['total_unpaid_wage'],
|
||
sanf_protein_data2['total_unpaid_wage'],
|
||
dampezshk_data2['total_unpaid_wage'],
|
||
wage_info2.get('total_province_live_weight', 0),
|
||
wage_info2.get('total_province_carcasses_weight', 0),
|
||
wage_info2.get('province_kill_requests_total_weight', 0),
|
||
wage_info2.get('province_kill_requests_total_wage', 0),
|
||
wage_info2.get('free_bars_out_province_carcases_total_weight', 0),
|
||
wage_info2.get('free_bars_out_province_carcases_total_wage', 0),
|
||
wage_info2.get('free_bars_carcases_total_weight', 0),
|
||
wage_info2.get('free_bars_carcases_total_wage', 0),
|
||
wage_info2.get('free_bars_live_total_weight', 0),
|
||
wage_info2.get('free_bars_live_total_wage', 0),
|
||
wage_info2.get('return_total_province_live_weight', 0),
|
||
wage_info2.get('total_return_pure_province_carcasses_price', 0),
|
||
|
||
]
|
||
for item in range(len(values_list3)):
|
||
cell = worksheet.cell(row=l, column=item + 1, value=values_list3[item])
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_list3[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.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')
|
||
)
|
||
l += 1
|
||
m += 1
|
||
if int(wage_info2.get('total_paid_wage')) > 0:
|
||
if kill_house not in kill_house_list:
|
||
kill_house_list.append({"name": kill_house['name']})
|
||
list2 = [
|
||
"مجموع==>", "",
|
||
sum(kill_house.get('wage_info', {}).get('total_wage', 0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_wage", 0) for item in kill_house.get("shares", []) if item["name"] == "اتحادیه"),
|
||
0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_wage", 0) for item in kill_house.get("shares", []) if item["name"] == "شرکت"),
|
||
0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "صنف پروتئین"), 0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_wage", 0) for item in kill_house.get("shares", []) if item["name"] == "دامپزشک"),
|
||
0) for kill_house in kill_houses),
|
||
|
||
sum(kill_house.get('wage_info', {}).get('total_paid_wage', 0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_paid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "اتحادیه"), 0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_paid_wage", 0) for item in kill_house.get("shares", []) if item["name"] == "شرکت"),
|
||
0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_paid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "صنف پروتئین"), 0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_paid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "دامپزشک"), 0) for kill_house in kill_houses),
|
||
|
||
sum(kill_house.get('wage_info', {}).get('off', 0) for kill_house in kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('total_unpaid_wage', 0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_unpaid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "اتحادیه"), 0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_unpaid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "شرکت"), 0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_unpaid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "صنف پروتئین"), 0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_unpaid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "دامپزشک"), 0) for kill_house in kill_houses),
|
||
|
||
sum(kill_house.get('wage_info', {}).get('total_province_live_weight', 0) for kill_house in kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('total_province_carcasses_weight', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('province_kill_requests_total_weight', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('province_kill_requests_total_wage', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_out_province_carcases_total_weight', 0) for
|
||
kill_house in kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_out_province_carcases_total_wage', 0) for kill_house
|
||
in kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_carcases_total_weight', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_carcases_total_wage', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_live_total_weight', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_live_total_wage', 0) for kill_house in kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('return_total_province_live_weight', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('total_return_pure_province_carcasses_price', 0) for kill_house
|
||
in kill_houses),
|
||
]
|
||
else:
|
||
l = 15
|
||
m = 1
|
||
header_list2 = [
|
||
"وزن کل فروش به خارج از استان ",
|
||
"تعرفه کل فروش به خارج از استان(ریال)",
|
||
"کل وزن زنده کشتار داخل استان(کیلوگرم)",
|
||
"تعرفه کشتار داخل استان(کیلوگرم)",
|
||
"وزن توزیع لاشه به خارج از استان(کیلوگرم)",
|
||
"تعرفه توزیع لاشه به خارج از استان(ریال)",
|
||
"وزن لاشه ورودی به استان(کیلوگرم)",
|
||
"تعرفه لاشه ورودی به استان(ریال)",
|
||
"وزن مرغ زنده ورودی به استان(کیلوگرم)",
|
||
"تعرفه مرغ زنده ورودی به استان(ریال)",
|
||
"وزن خرید های بازگشتی(کیلوگرم)",
|
||
"تعرفه خرید های بازگشتی(ریال)",
|
||
|
||
]
|
||
values_list2 = [
|
||
wage_info.get('out_province_poultry_request_weight', 0),
|
||
wage_info.get('out_province_poultry_request_wage', 0),
|
||
wage_info.get('total_province_live_weight', 0),
|
||
wage_info.get('province_kill_requests_total_wage', 0),
|
||
wage_info.get('free_bars_out_province_carcases_total_weight', 0),
|
||
wage_info.get('free_bars_out_province_carcases_total_wage', 0),
|
||
wage_info.get('free_bars_carcases_total_weight', 0),
|
||
wage_info.get('free_bars_carcases_total_wage', 0),
|
||
wage_info.get('free_bars_live_total_weight', 0),
|
||
wage_info.get('free_bars_live_total_wage', 0),
|
||
wage_info.get('return_total_province_live_weight', 0),
|
||
wage_info.get('total_return_pure_province_carcasses_price', 0),
|
||
|
||
]
|
||
header_list5 = [
|
||
'سهم',
|
||
'تعرفه فروش مرغ زنده به خارج از استان(ریال)',
|
||
'تعرفه کشتار داخل استان(ریال)',
|
||
'تعرفه توزیع لاشه خارج استان(ریال)',
|
||
'تعرفه لاشه ورودی به استان(ریال)',
|
||
'تعرفه مرغ زنده ورودی به استان(ریال)',
|
||
'تعرفه کل(ریال)',
|
||
'تعرفه پرداخت شده(ریال)',
|
||
'تعرفه پرداخت نشده(ریال)',
|
||
|
||
]
|
||
header_list = [
|
||
'ردیف',
|
||
'کشتارگاه',
|
||
'کل تعرفه (ریال)',
|
||
'سهم اتحادیه (ریال)',
|
||
'سهم شرکت (ریال)',
|
||
'سهم صنف (ریال)',
|
||
'سهم دامپزشک (ریال)',
|
||
|
||
'کل تعرفه پرداخت شده (ریال)',
|
||
'سهم اتحادیه از واریزی(ریال)',
|
||
'سهم شرکت از واریزی(ریال)',
|
||
'سهم اصناف از واریزی(ریال)',
|
||
'سهم دامپزشک از واریزی(ریال)',
|
||
'تخفیفات (ریال)',
|
||
|
||
'کل تعرفه پرداخت نشده (ریال)',
|
||
' سهم اتحادیه پرداخت نشده',
|
||
' سهم شرکت پرداخت نشده',
|
||
'سهم صنف پرداخت نشده',
|
||
'سهم دامپزشک پرداخت نشده',
|
||
|
||
'کل وزن زنده کشتار داخل استان',
|
||
'تعرفه کشتار داخل استان',
|
||
'وزن توزیع لاشه به خارج استان',
|
||
'تعرفه توزیع لاشه به خارج استان',
|
||
'وزن لاشه ورودی به استان',
|
||
'تعرفه لاشه ورودی به استان',
|
||
'وزن مرغ زنده ورودی به استان',
|
||
'تعرفه مرغ زنده ورودی به استان',
|
||
'وزن خریدهای بازگشتی',
|
||
'تعرفه خریدهای بازگشتی',
|
||
|
||
]
|
||
for kill_house in kill_houses:
|
||
wage_info2 = kill_house.get('wage_info', {})
|
||
shares2 = kill_house.get('shares', [])
|
||
company_data2 = next((item for item in shares2 if item["name"] == "شرکت"), None)
|
||
etehadiye_data2 = next((item for item in shares2 if item["name"] == "اتحادیه"), None)
|
||
sanf_protein_data2 = next((item for item in shares2 if item["name"] == "صنف پروتئین"), None)
|
||
dampezshk_data2 = next((item for item in shares2 if item["name"] == "دامپزشک"), None)
|
||
values_list3 = [
|
||
m,
|
||
kill_house['name'],
|
||
wage_info2['total_wage'],
|
||
etehadiye_data2['total_wage'],
|
||
company_data2['total_wage'],
|
||
sanf_protein_data2['total_wage'],
|
||
dampezshk_data2['total_wage'],
|
||
wage_info2.get('total_paid_wage', 0),
|
||
etehadiye_data2['total_paid_wage'],
|
||
company_data2['total_paid_wage'],
|
||
sanf_protein_data2['total_paid_wage'],
|
||
dampezshk_data2['total_paid_wage'],
|
||
wage_info2.get('off', 0),
|
||
wage_info2.get('total_unpaid_wage', 0),
|
||
etehadiye_data2['total_unpaid_wage'],
|
||
company_data2['total_unpaid_wage'],
|
||
sanf_protein_data2['total_unpaid_wage'],
|
||
dampezshk_data2['total_unpaid_wage'],
|
||
|
||
wage_info2.get('total_province_live_weight', 0),
|
||
wage_info2.get('province_kill_requests_total_wage', 0),
|
||
wage_info2.get('free_bars_out_province_carcases_total_weight', 0),
|
||
wage_info2.get('free_bars_out_province_carcases_total_wage', 0),
|
||
wage_info2.get('free_bars_carcases_total_weight', 0),
|
||
wage_info2.get('free_bars_carcases_total_wage', 0),
|
||
wage_info2.get('free_bars_live_total_weight', 0),
|
||
wage_info2.get('free_bars_live_total_wage', 0),
|
||
wage_info2.get('return_total_province_live_weight', 0),
|
||
wage_info2.get('total_return_pure_province_carcasses_price', 0),
|
||
|
||
]
|
||
for item in range(len(values_list3)):
|
||
cell = worksheet.cell(row=l, column=item + 1, value=values_list3[item])
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_list3[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.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')
|
||
)
|
||
l += 1
|
||
m += 1
|
||
if int(wage_info2.get('total_paid_wage')) > 0:
|
||
if kill_house not in kill_house_list:
|
||
kill_house_list.append({"name": kill_house['name']})
|
||
list2 = [
|
||
"مجموع==>",
|
||
"",
|
||
sum(kill_house.get('wage_info', {}).get('total_wage', 0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_wage", 0) for item in kill_house.get("shares", []) if item["name"] == "اتحادیه"),
|
||
0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_wage", 0) for item in kill_house.get("shares", []) if item["name"] == "شرکت"),
|
||
0)
|
||
for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "صنف پروتئین"),
|
||
0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_wage", 0) for item in kill_house.get("shares", []) if item["name"] == "دامپزشک"),
|
||
0) for kill_house in kill_houses),
|
||
|
||
sum(kill_house.get('wage_info', {}).get('total_paid_wage', 0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_paid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "اتحادیه"),
|
||
0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_paid_wage", 0) for item in kill_house.get("shares", []) if item["name"] == "شرکت"),
|
||
0)
|
||
for kill_house in kill_houses),
|
||
sum(next((item.get("total_paid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "صنف پروتئین"), 0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_paid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "دامپزشک"),
|
||
0) for kill_house in kill_houses),
|
||
|
||
sum(kill_house.get('wage_info', {}).get('off', 0) for kill_house in kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('total_unpaid_wage', 0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_unpaid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "اتحادیه"), 0) for kill_house in kill_houses),
|
||
sum(next(
|
||
(item.get("total_unpaid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "شرکت"),
|
||
0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_unpaid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "صنف پروتئین"), 0) for kill_house in kill_houses),
|
||
sum(next((item.get("total_unpaid_wage", 0) for item in kill_house.get("shares", []) if
|
||
item["name"] == "دامپزشک"), 0) for kill_house in kill_houses),
|
||
|
||
sum(kill_house.get('wage_info', {}).get('total_province_live_weight', 0) for kill_house in kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('province_kill_requests_total_wage', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_out_province_carcases_total_weight', 0) for
|
||
kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_out_province_carcases_total_wage', 0) for kill_house
|
||
in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_carcases_total_weight', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_carcases_total_wage', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_live_total_weight', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('free_bars_live_total_wage', 0) for kill_house in kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('return_total_province_live_weight', 0) for kill_house in
|
||
kill_houses),
|
||
sum(kill_house.get('wage_info', {}).get('total_return_pure_province_carcasses_price', 0) for kill_house
|
||
in kill_houses),
|
||
]
|
||
|
||
for item in range(len(list2)):
|
||
cell = worksheet.cell(row=l, column=item + 1, value=list2[item])
|
||
value = list2[item]
|
||
if isinstance(value, (int, float)):
|
||
cell.number_format = '#,##0' # Apply general number format
|
||
else:
|
||
cell.value = value # Keep as text for other values
|
||
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=9, bold=True)
|
||
cell.fill = PatternFill(start_color="FFFF00", fill_type="solid")
|
||
for col_num, option in enumerate(header_list, 1):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=14, column=col_num, value=option)
|
||
if option in ['کل تعرفه (ریال)', 'سهم شرکت (ریال)', 'سهم اتحادیه (ریال)', 'سهم صنف (ریال)',
|
||
'سهم دامپزشک (ریال)']:
|
||
cell.fill = PatternFill(start_color="76933C", fill_type="solid")
|
||
elif option in ['کل تعرفه پرداخت نشده (ریال)', 'کل تعرفه پرداخت نشده (ریال)', ' سهم شرکت پرداخت نشده',
|
||
'سهم دامپزشک پرداخت نشده',
|
||
' سهم اتحادیه پرداخت نشده', 'سهم صنف پرداخت نشده']:
|
||
cell.fill = PatternFill(start_color="E26B0A", fill_type="solid")
|
||
elif option in ['تعداد بار', 'حجم بار', 'وزن بار']:
|
||
cell.fill = PatternFill(start_color="163CB6", fill_type="solid")
|
||
elif option in ['تعداد تخصیص بدون بار', 'حجم تخصیص بدون بار', 'وزن تخصیص بدون بار', ]:
|
||
cell.fill = PatternFill(start_color="476DE7", fill_type="solid")
|
||
else:
|
||
cell.fill = PatternFill(start_color="31869B", fill_type="solid")
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
cell.font = Font(size=10, bold=True, color='FFFFFF')
|
||
worksheet.row_dimensions[14].height = 45
|
||
worksheet.column_dimensions[col_letter].width = 27
|
||
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')
|
||
)
|
||
|
||
create_value(worksheet, values_list2, 6, 3, border_style='thin')
|
||
for col_num, option in enumerate(header_list2, 3):
|
||
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='FFFFFF')
|
||
worksheet.row_dimensions[5].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 18
|
||
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(header_list5, 1):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=8, column=col_num, value=option)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
cell.fill = PatternFill(start_color="1E487B", fill_type="solid")
|
||
cell.font = Font(size=10, bold=True, color='FFFFFF')
|
||
worksheet.row_dimensions[8].height = 25
|
||
worksheet.column_dimensions[col_letter].width = 20
|
||
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')
|
||
)
|
||
values_union = [
|
||
etehadiye_data['name'],
|
||
etehadiye_data['out_province_poultry_request_wage'],
|
||
etehadiye_data['province_kill_request_wage'],
|
||
etehadiye_data['free_sell_carcasses_wage'],
|
||
etehadiye_data['free_buying_carcasses_wage'],
|
||
etehadiye_data['free_buying_live_wage'],
|
||
etehadiye_data['total_wage'],
|
||
etehadiye_data['total_paid_wage'],
|
||
etehadiye_data['total_unpaid_wage'],
|
||
|
||
]
|
||
for item in range(len(values_union)):
|
||
cell = worksheet.cell(row=9, column=item + 1, value=values_union[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_union[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.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')
|
||
)
|
||
|
||
values_company = [
|
||
company_data['name'],
|
||
company_data['out_province_poultry_request_wage'],
|
||
company_data['province_kill_request_wage'],
|
||
company_data['free_sell_carcasses_wage'],
|
||
company_data['free_buying_carcasses_wage'],
|
||
company_data['free_buying_live_wage'],
|
||
company_data['total_wage'],
|
||
company_data['total_paid_wage'],
|
||
company_data['total_unpaid_wage'],
|
||
|
||
]
|
||
for item in range(len(values_company)):
|
||
cell = worksheet.cell(row=10, column=item + 1, value=values_company[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_company[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.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')
|
||
)
|
||
|
||
values_guild = [
|
||
sanf_protein_data['name'],
|
||
sanf_protein_data['out_province_poultry_request_wage'],
|
||
sanf_protein_data['province_kill_request_wage'],
|
||
sanf_protein_data['free_sell_carcasses_wage'],
|
||
sanf_protein_data['free_buying_carcasses_wage'],
|
||
sanf_protein_data['free_buying_live_wage'],
|
||
sanf_protein_data['total_wage'],
|
||
sanf_protein_data['total_paid_wage'],
|
||
sanf_protein_data['total_unpaid_wage'],
|
||
|
||
]
|
||
for item in range(len(values_guild)):
|
||
cell = worksheet.cell(row=11, column=item + 1, value=values_guild[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_guild[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.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')
|
||
)
|
||
|
||
values_other = [
|
||
dampezshk_data['name'],
|
||
dampezshk_data['out_province_poultry_request_wage'],
|
||
dampezshk_data['province_kill_request_wage'],
|
||
dampezshk_data['free_sell_carcasses_wage'],
|
||
dampezshk_data['free_buying_carcasses_wage'],
|
||
dampezshk_data['free_buying_live_wage'],
|
||
dampezshk_data['total_wage'],
|
||
dampezshk_data['total_paid_wage'],
|
||
dampezshk_data['total_unpaid_wage'],
|
||
|
||
]
|
||
for item in range(len(values_other)):
|
||
cell = worksheet.cell(row=12, column=item + 1, value=values_other[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
value = values_other[item]
|
||
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.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 kill_house in kill_house_list:
|
||
sheet_name = kill_house['name']
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
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=2, 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[2].height = 27
|
||
worksheet.freeze_panes = worksheet['A3']
|
||
max_col = worksheet.max_column
|
||
range_str = f'A2:{get_column_letter(max_col)}{worksheet.max_row}'
|
||
worksheet.auto_filter.ref = range_str
|
||
l = 1
|
||
m = 1
|
||
kill_house = KillHouse.objects.get(name=sheet_name, trash=False)
|
||
|
||
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()
|
||
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
else:
|
||
transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
status='completed',
|
||
trash=False).order_by('id')
|
||
|
||
for transaction in transactions:
|
||
if transaction.kill_house != None:
|
||
fullname = transaction.kill_house.kill_house_operator.user.fullname
|
||
mobile = transaction.kill_house.kill_house_operator.user.mobile
|
||
else:
|
||
fullname = transaction.chain_company.user.fullname
|
||
mobile = transaction.chain_company.user.mobile
|
||
date = convert_to_shamsi(
|
||
datetime=transaction.date
|
||
)
|
||
type = 'دستی' if transaction.transaction_type == 'wage-gateway-manual' else 'آنلاین'
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
amout = transaction.union_share
|
||
elif request.GET['role'] == 'Company':
|
||
amout = transaction.company_share
|
||
elif request.GET['role'] == 'Guilds':
|
||
amout = transaction.guilds_share
|
||
else:
|
||
amout = transaction.amount
|
||
list1 = [
|
||
m,
|
||
date,
|
||
type,
|
||
fullname,
|
||
mobile,
|
||
transaction.orderId,
|
||
transaction.saleReferenceId,
|
||
transaction.orderId,
|
||
transaction.cardHolderPan,
|
||
amout,
|
||
transaction.union_share,
|
||
transaction.company_share,
|
||
transaction.guilds_share,
|
||
transaction.other_share,
|
||
|
||
]
|
||
l += 1
|
||
for item in range(len(list1)):
|
||
cell = worksheet.cell(row=l + 1, column=item + 1, value=list1[item])
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.font = Font(size=10)
|
||
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
|
||
|
||
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 buy_outside_the_province_excel(request):
|
||
now = datetime.datetime.now().date()
|
||
date1 = datetime.datetime.strptime(str(request.GET['start']), '%Y-%m-%d').date() if 'start' in request.GET else now
|
||
date2 = datetime.datetime.strptime(str(request.GET['end']), '%Y-%m-%d').date() if 'end' in request.GET else now
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
filtered_kill_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).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('kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing', '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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'killer__name',
|
||
'killhouse_user__type', 'killer').values('kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'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',
|
||
)
|
||
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'])
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(trash=False, user=user)
|
||
filtered_kill_reqs = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name)
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
filtered_kill_reqs = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__user__city=user.city)
|
||
elif request.GET['role'] == 'VetFarm':
|
||
vet = Vet.objects.filter(user=user, trash=False)
|
||
poultries = []
|
||
if vet.count() > 0:
|
||
vet = vet.last()
|
||
vet_farms = VetFarm.objects.filter(vet=vet, trash=False)
|
||
if vet_farms.count() > 0:
|
||
|
||
for vet_farm in vet_farms:
|
||
if vet_farm.poultry in poultries:
|
||
pass
|
||
else:
|
||
poultries.append(vet_farm.poultry)
|
||
filtered_kill_reqs = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__in=poultries)
|
||
|
||
elif request.GET['role'] == 'KillHouse':
|
||
filtered_kill_reqs = filtered_kill_request.filter(killhouse_user__kill_house_operator__user=user)
|
||
else:
|
||
filtered_kill_reqs = filtered_kill_request
|
||
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
|
||
elif request.GET['role'] == 'KillHouseVet':
|
||
kill_house_vets = KillHouseVet.objects.filter(vet__user=user, trash=False).select_related('kill_house')
|
||
kill_house = kill_house_vets.values_list('kill_house', flat=True).distinct()
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province, trash=False)
|
||
|
||
if 'state' in request.GET:
|
||
if request.GET['state'] == 'completed':
|
||
filtered_kill_reqs = filtered_kill_reqs.filter(assignment_state_archive='True')
|
||
elif request.GET['state'] == 'bar_pending':
|
||
filtered_kill_reqs = filtered_kill_reqs.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house) | Q(
|
||
killer__in=kill_house)), assignment_state_archive='pending')
|
||
else:
|
||
filtered_kill_reqs = filtered_kill_reqs
|
||
else:
|
||
filtered_kill_reqs = filtered_kill_reqs
|
||
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_kill_reqs
|
||
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=filtered_kill_reqs)
|
||
filtered_kill_reqs = ps.filter()
|
||
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 = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'نوع کشتار',
|
||
'کدسفارش مرغدار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
'کشتارکن اختصاصی',
|
||
'تلفن کشتارکن اختصاصی',
|
||
' محل کشتار ',
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'وضعیت',
|
||
'وضعیت سند',
|
||
'وضعیت ورود انبار',
|
||
'تعداد لاشه',
|
||
'وزن لاشه',
|
||
'درصد افت',
|
||
'کشور مقصد',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_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 = [
|
||
'تعداد بارهای ایجاد شده',
|
||
'تعداد بارهای دارای کشتارکن اختصاصی',
|
||
'مجموع حجم بارها',
|
||
'مجموع وزن بارها',
|
||
'میانگین وزن ',
|
||
'کمترین سن',
|
||
'بیشترین سن',
|
||
'میانگین سنی',
|
||
'تعداد بارهای دارای کد قرنطینه',
|
||
'حجم بارهای دارای کد قرنطینه',
|
||
'تعداد بار احراز شده از قرنطینه',
|
||
'مجموع تعداد قطعه احراز شده از قرنطینه',
|
||
'تعداد بار فاقد قرنطینه',
|
||
'حجم بار فاقد قرنطینه',
|
||
' تعداد بارهایی که در قرنطینه و رصدیار اختلاف دارند',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'مجموع تعداد تخلیه شده دامپزشک',
|
||
'مجموع وزن تخلیه شده دامپزشک',
|
||
'تعداد بارهای تکمیل شده',
|
||
'مجموع تعداد نهایی در کشتارگاه',
|
||
'مجموع وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'تعداد بار های وارد شده در انبار',
|
||
'مجموع تعداد لاشه',
|
||
'مجموع وزن لاشه',
|
||
'میانگین درصد افت لاشه',
|
||
|
||
]
|
||
|
||
header_list2 = [
|
||
'تعداد درخواست مرغداران',
|
||
' مجموع تعداد قطعه درخواست مرغداران',
|
||
' مجموع وزن درخواست مرغداران',
|
||
|
||
]
|
||
|
||
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
|
||
|
||
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
|
||
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
|
||
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_age = []
|
||
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:
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
if age not in all_age:
|
||
all_age.append(age)
|
||
|
||
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 = 'عدم تایید راهداری'
|
||
elif kill['quarantine_code_state'] == 'merge':
|
||
quarantine_quantity = 'ادغام'
|
||
export_country = '-'
|
||
|
||
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__out'] == True:
|
||
type = 'خارج از استان'
|
||
elif kill['province_kill_request__province_request__poultry_request__direct_buying'] == True:
|
||
type = 'خرید مستقیم'
|
||
elif kill['province_request__poultry_request__freezing'] == True:
|
||
type = 'انجماد'
|
||
elif kill['province_request__poultry_request__export'] == True:
|
||
type = 'صادرات'
|
||
export_country = kill['kill_request__export_country']
|
||
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),
|
||
type,
|
||
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,
|
||
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}',
|
||
export_country,
|
||
|
||
]
|
||
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')
|
||
|
||
all_age1 = sorted(all_age)
|
||
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') or 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
|
||
has_code1 = filtered_kill_reqs.filter(clearance_code__isnull=False)
|
||
all_quarantine_quantity_has_code = has_code1.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
hasnt_code = filtered_kill_reqs.filter(clearance_code__isnull=True)
|
||
all_quarantine_quantity_hasnt_code = hasnt_code.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
difference_bar = len(filtered_kill_reqs.filter(
|
||
Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity'))))
|
||
value_header_list = [
|
||
len(filtered_kill_reqs),
|
||
killer_exclusive,
|
||
all_quantity,
|
||
int(all_weighte),
|
||
round(all_weighte / all_quantity, 1) if all_weighte > 0 and all_quantity > 0 else 0,
|
||
all_age1[0] if len(all_age1) > 0 else '-',
|
||
all_age1[len(all_age1) - 1] if len(all_age1) > 0 else '-',
|
||
int((sum(all_age1)) / len(all_age1)) if len(all_age1) > 0 else '-',
|
||
has_code,
|
||
all_quarantine_quantity_has_code,
|
||
has_qarantine,
|
||
all_quarantine_quantity,
|
||
len(hasnt_code),
|
||
all_quarantine_quantity_hasnt_code,
|
||
difference_bar,
|
||
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")
|
||
workbook.save(output)
|
||
output.seek(0)
|
||
|
||
response = HttpResponse(
|
||
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
||
if request.GET['role'] == 'KillHouse':
|
||
name = filtered_kill_request.first()['killhouse_user__name']
|
||
response[
|
||
'Content-Disposition'] = f'attachment; filename="مدیریت بارهای کشتارگاه {name}.xlsx"'.encode(
|
||
'utf-8')
|
||
elif 'state' in request.GET:
|
||
if request.GET['state'] == 'bar_pending':
|
||
response[
|
||
'Content-Disposition'] = f'attachment; filename="مدیریت بارهای تکمیل نشده.xlsx"'.encode(
|
||
'utf-8')
|
||
else:
|
||
response[
|
||
'Content-Disposition'] = f'attachment; filename="مدیریت بارهای تکمیل شده.xlsx"'.encode(
|
||
'utf-8')
|
||
else:
|
||
response[
|
||
'Content-Disposition'] = f'attachment; filename="مدیریت بارها.xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def poultry_request_report_excel(request):
|
||
date1 = datetime.datetime.strptime(str(request.GET['start']), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(request.GET['end']), '%Y-%m-%d').date()
|
||
filterset_class = PoultryRequestFilterSet
|
||
filterset_fields = poultry_request_new_fields
|
||
filtered_poultry_request = PoultryRequest.objects.filter(
|
||
trash=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2
|
||
).select_related('poultry', 'poultry__user', 'hatching', 'poultry__user__city').only('freezing', 'remain_quantity',
|
||
'amount',
|
||
'key', 'poultry',
|
||
'send_date',
|
||
'hatching__date',
|
||
'create_date', 'order_code',
|
||
'poultry__unit_name',
|
||
'poultry__user__fullname',
|
||
'poultry__user__mobile',
|
||
'poultry__user__city__name',
|
||
'hatching__quantity',
|
||
'quantity',
|
||
'hatching__left_over',
|
||
'hatching__chicken_breed',
|
||
'poultry__address__province__name',
|
||
'Index_weight',
|
||
'hatching__quantity', 'union',
|
||
'direct_buying',
|
||
'free_sale_in_province',
|
||
'export').values(
|
||
'key', 'poultry', 'remain_quantity',
|
||
'send_date',
|
||
'hatching__date',
|
||
'create_date', 'order_code',
|
||
'poultry__unit_name',
|
||
'poultry__user__fullname',
|
||
'poultry__user__mobile',
|
||
'poultry__user__city__name',
|
||
'hatching__quantity',
|
||
'quantity',
|
||
'hatching__left_over',
|
||
'hatching__chicken_breed', 'poultry__address__province__name', 'Index_weight', 'amount', 'hatching__quantity',
|
||
'union', 'direct_buying', 'free_sale_in_province', 'freezing', 'export').order_by(
|
||
'-send_date')
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'])
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(trash=False, user=user)
|
||
filtered_poultry_reqs = filtered_poultry_request.filter(poultry__city_operator=city_operator.unit_name)
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
filtered_poultry_reqs = filtered_poultry_request.filter(poultry__user__city=user.city)
|
||
else:
|
||
filtered_poultry_reqs = filtered_poultry_request
|
||
|
||
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_reqs
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=filtered_poultry_reqs)
|
||
filtered_poultry_reqs = ps.filter()
|
||
|
||
excel_options = [
|
||
'ردیف', 'کد سفارش', 'نام واحد', 'نام و نام خانوادگی مرغدار', 'موبایل', 'آدرس', 'تاریخ جوجه ریزی',
|
||
'تعداد کل جوجه ریزی', 'سن مرغ', 'تعداد درخواست کشتار', 'وزن درخواست کشتار', 'میانگین وزنی', 'فروش',
|
||
'کشتار', 'قیمت مرغ زنده', 'تعداد تخصیصی به خریدار', 'مانده قابل تخصیص', 'تعداد قطعه باقی مانده در سالن',
|
||
'نژاد', 'تاریخ درخواست کشتار', 'دامپزشک فارم', 'تلفن دامپزشک فارم', 'وضعیت درخواست', 'خریدار',
|
||
'تعداد تخصیصی قطعه', 'وزن تخصیصی', 'تاریخ تخصیص', 'نوع تخصیص', 'آدرس', 'محل کشتار', 'وضعییت تخصیص به خریدار',
|
||
'تعداد بار ایجاد شده', 'تعداد قطعه تخصیصی به بار', 'وزن تخصیصی به بار', 'مانده قطعه قابل تخصیص',
|
||
'مانده وزن قابل تخصیص', 'ماشین', 'راننده', 'تلفن', 'کد بهداشتی حمل و نقل', 'کد رهگیری سامانه قرنطینه',
|
||
'تعداد ثبت شده در قرنطینه', 'تعداد قطعه بار', 'وزن بار', 'وضعیت بار', 'تعداد تخلیه', 'وزن تخلیه',
|
||
'تاریخ تخلیه کشتارگاه', 'دامپزشک کشتارگاه', 'تلفن دامپزشک کشتارگاه', 'اطلاعات تکمیلی قطعه',
|
||
'اطلاعات تکمیلی وزن', 'کاربر کشتارگاه', 'تلفن کاربرکشتارگاه',
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
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_CELL
|
||
|
||
header_list = [
|
||
'تعداد درخواست های کشتار', 'مجموع قطعه درخواست های کشتار', 'مجموع وزن درخواست های کشتار',
|
||
'تعداد تخصیص به خریداران', 'تعداد قطعه تخصیصی به خریداران', 'وزن تخصیصی به خریداران',
|
||
'مانده قابل تخصیص', 'تعداد بار ایجاد شده', 'تعداد قطعه بار های ایجاد شده',
|
||
'وزن بارهای ایجاد شده', 'تعداد قطعه قابل تخصیص به بار', 'تعداد بارهای دارای کد قرنطینه',
|
||
'مجموع تعداد قطعه ثبت شده در قرنطینه', 'تعداد بارهای تخلیه شده', 'تعداد قطعه بارهای تخلیه شده',
|
||
'وزن بارهای تخلیه شده', 'تعداد بار های تکمیل شده', 'تعداد قطعه بارهای تکمیل شده',
|
||
'وزن بارهای تکمیل شده',
|
||
]
|
||
|
||
# برای بالای هدر
|
||
|
||
create_header(worksheet, header_list, 4, 2, 21, 16.01)
|
||
|
||
if filtered_poultry_reqs.exists():
|
||
province = filtered_poultry_reqs.first()['poultry__address__province__name']
|
||
excel_description(worksheet, 'A2', f' استان {province}', color='red')
|
||
|
||
excel_description(worksheet, 'A1', 'گزارش روند پرونده های کشتار مرغ گوشتی', size=11, color='red', row2='C1')
|
||
excel_description(worksheet, 'A3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='C3')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
bar_list2 = 0
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
province_request__poultry_request__key__in=filtered_poultry_reqs.values('key'),
|
||
trash=False, return_to_province=False, state__in=('pending', 'accepted')).select_related(
|
||
'kill_request__kill_house', 'killhouse_user__kill_house_operator',
|
||
'killhouse_user__kill_house_operator__user', 'killhouse_user__kill_house_operator__address',
|
||
'killhouse_user').only('kill_request__slaughter_house', 'kill_request__slaughter_house__name', 'state',
|
||
'key', 'create_date',
|
||
'kill_request__kill_house', 'main_quantity', 'killhouse_user__name',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'killhouse_user__kill_house_operator__address__city__name', 'killhouse_user__killer',
|
||
'province_request__poultry_request__Index_weight', 'quantity',
|
||
'province_request__poultry_request__union',
|
||
'province_request__poultry_request__direct_buying', ).values(
|
||
'kill_request__slaughter_house', 'kill_request__slaughter_house__name', 'key', 'create_date',
|
||
'kill_request__kill_house',
|
||
'main_quantity',
|
||
'killhouse_user__name',
|
||
'killhouse_user__killer',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'killhouse_user__kill_house_operator__address__city__name',
|
||
'province_request__poultry_request__Index_weight',
|
||
'province_request__poultry_request__union',
|
||
'province_request__poultry_request__direct_buying',
|
||
'state', 'quantity')
|
||
|
||
kill_house_requestss = KillHouseRequest.objects.filter(
|
||
province_kill_request__key__in=province_kill_requests.values('key'),
|
||
trash=False).select_related('add_car__driver',
|
||
'killhouse_user').only(
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'killhouse_user__kill_house_operator__user__fullname', 'killhouse_user',
|
||
'province_kill_request__province_request__poultry_request__Index_weight', 'key',
|
||
'add_car__driver__driver_name',
|
||
'add_car__driver__driver_mobile',
|
||
'add_car__driver__type_car',
|
||
'traffic_code', 'create_date',
|
||
'clearance_code',
|
||
'killhouse_user__killer',
|
||
'accepted_real_quantity', 'accepted_real_weight',
|
||
'quantity', 'province_request__poultry_request__Index_weight', 'vet_state',
|
||
'assignment_state_archive', 'vet_accepted_real_weight', 'vet_accepted_real_quantity',
|
||
'vet_state', 'accepted_real_weight', 'accepted_assignment_real_weight',
|
||
'accepted_assignment_real_quantity').values('vet_state', 'vet_accepted_real_weight',
|
||
'vet_accepted_real_quantity',
|
||
'quarantine_quantity', 'vet_state', 'assignment_state_archive',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'key',
|
||
'add_car__driver__driver_name',
|
||
'add_car__driver__driver_mobile',
|
||
'add_car__driver__type_car',
|
||
'traffic_code',
|
||
'create_date',
|
||
'clearance_code',
|
||
'killhouse_user__killer',
|
||
'accepted_real_quantity',
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user',
|
||
'accepted_real_weight',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'quantity', 'quarantine_quantity',
|
||
'province_request__poultry_request__Index_weight',
|
||
'accepted_real_weight', 'accepted_assignment_real_weight',
|
||
'accepted_assignment_real_quantity')
|
||
poultry_ids = [req.get('poultry') for req in filtered_poultry_reqs]
|
||
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
|
||
vet_farm_mapping = {
|
||
vet_farm.poultry_id: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
|
||
for vet_farm in vet_farms
|
||
}
|
||
for filtered_poultry_req in filtered_poultry_reqs:
|
||
|
||
state_p = 'در انتظار تخصیص استان'
|
||
if filtered_poultry_req.get('quantity') != filtered_poultry_req.get('remain_quantity'):
|
||
state_p = 'تخصیص داده شد'
|
||
vet_farm_id = filtered_poultry_req.get('poultry')
|
||
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
|
||
|
||
age = (filtered_poultry_req.get('send_date').date() - filtered_poultry_req.get(
|
||
"hatching__date").date()).days + 1
|
||
gregorian_date = convert_to_shamsi(day=filtered_poultry_req.get("hatching__date").day,
|
||
month=filtered_poultry_req.get("hatching__date").month,
|
||
year=filtered_poultry_req.get("hatching__date").year
|
||
)
|
||
date_of_kill = convert_to_shamsi(day=filtered_poultry_req.get('create_date').day,
|
||
month=filtered_poultry_req.get('create_date').month,
|
||
year=filtered_poultry_req.get('create_date').year)
|
||
|
||
if filtered_poultry_req['free_sale_in_province'] == False:
|
||
|
||
sale_type = 'دولتی'
|
||
elif filtered_poultry_req['export']:
|
||
sale_type = 'صادرات'
|
||
|
||
else:
|
||
sale_type = 'آزاد'
|
||
|
||
province_kill_reqs = province_kill_requests.filter(
|
||
province_request__poultry_request__key=filtered_poultry_req.get('key'))
|
||
freez_state = 'منجمد' if filtered_poultry_req['freezing'] == True else 'عادی'
|
||
list1 = [
|
||
m,
|
||
str(filtered_poultry_req.get('order_code')),
|
||
filtered_poultry_req.get('poultry__unit_name'),
|
||
filtered_poultry_req.get('poultry__user__fullname'),
|
||
filtered_poultry_req.get('poultry__user__mobile'),
|
||
filtered_poultry_req.get('poultry__user__city__name'),
|
||
str(gregorian_date),
|
||
filtered_poultry_req.get('hatching__quantity'),
|
||
str(age),
|
||
filtered_poultry_req.get('quantity'),
|
||
int(filtered_poultry_req.get('quantity') * filtered_poultry_req.get('Index_weight')),
|
||
filtered_poultry_req.get('Index_weight'),
|
||
sale_type,
|
||
freez_state,
|
||
filtered_poultry_req.get('amount'),
|
||
filtered_poultry_req.get('quantity') - filtered_poultry_req.get('remain_quantity'),
|
||
filtered_poultry_req.get('remain_quantity'),
|
||
filtered_poultry_req.get('hatching__left_over'),
|
||
|
||
filtered_poultry_req.get('hatching__chicken_breed'),
|
||
str(date_of_kill),
|
||
vet_farm_name,
|
||
vet_farm_mobile,
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=20)
|
||
|
||
state_s = 'در انتظار تخصیص استان'
|
||
m += 1
|
||
|
||
if province_kill_reqs.exists():
|
||
quantity_kill_house_request = kill_house_requestss.filter(province_request__poultry_request__key=
|
||
filtered_poultry_req['key'])
|
||
|
||
if len(province_kill_reqs) > 1:
|
||
if len(quantity_kill_house_request) <= 1:
|
||
s = len(province_kill_reqs) - 1
|
||
merge_cells(worksheet, l, s, cell1='A', cell2='V')
|
||
|
||
# TODO : جایی که باید انجام بشه
|
||
if quantity_kill_house_request.exists():
|
||
if len(quantity_kill_house_request) > 1:
|
||
s = len(quantity_kill_house_request) - 1
|
||
merge_cells(worksheet, l, s, cell1='A', cell2='V')
|
||
|
||
for province_kill_req in province_kill_reqs:
|
||
|
||
if province_kill_req['state'] == 'pending':
|
||
state_s = 'درانتظار تایید'
|
||
|
||
elif province_kill_req['state'] == 'accepted':
|
||
state_s = ' تایید شده'
|
||
elif province_kill_req['state'] == 'rejected':
|
||
state_s = 'رد شده'
|
||
|
||
date_of_inner_bar = '-'
|
||
|
||
code = '-'
|
||
|
||
time = convert_to_shamsi(day=province_kill_req.get('create_date').day,
|
||
month=province_kill_req.get('create_date').month,
|
||
year=province_kill_req.get('create_date').year)
|
||
|
||
if province_kill_req.get('killhouse_user__killer') == False:
|
||
killers = 'کشتارگاه'
|
||
else:
|
||
killers = 'کشتارکن'
|
||
|
||
kill_house_requests = kill_house_requestss.filter(
|
||
province_kill_request__key=province_kill_req['key'])
|
||
|
||
all_quantity_of_bar = kill_house_requests.aggregate(
|
||
total_quantity=Sum('quantity'))['total_quantity'] or 0
|
||
|
||
bar_weight = int(all_quantity_of_bar * province_kill_req[
|
||
'province_request__poultry_request__Index_weight']) if all_quantity_of_bar > 0 else 0
|
||
remain_province = int(province_kill_req.get('quantity') * province_kill_req[
|
||
'province_request__poultry_request__Index_weight'])
|
||
|
||
if province_kill_req['province_request__poultry_request__union'] == True:
|
||
type = 'فروش آزاد'
|
||
elif province_kill_req[
|
||
'province_request__poultry_request__direct_buying'] == True:
|
||
type = 'خرید مستقیم'
|
||
else:
|
||
type = 'اتحادیه'
|
||
|
||
slaughter_house__name = province_kill_req.get(
|
||
'kill_request__slaughter_house__name') if province_kill_req.get(
|
||
'kill_request__slaughter_house') is not None else '-'
|
||
list1 = [
|
||
state_p,
|
||
killers + '(' + province_kill_req.get('killhouse_user__name') + ')',
|
||
province_kill_req.get('main_quantity'),
|
||
int(province_kill_req.get('main_quantity') * province_kill_req.get(
|
||
'province_request__poultry_request__Index_weight')),
|
||
str(time),
|
||
type,
|
||
province_kill_req.get('killhouse_user__kill_house_operator__address__city__name'),
|
||
slaughter_house__name,
|
||
state_s,
|
||
len(kill_house_requests),
|
||
all_quantity_of_bar,
|
||
bar_weight,
|
||
province_kill_req.get('quantity'),
|
||
remain_province,
|
||
]
|
||
|
||
create_value(worksheet, list1, l, 23, border_style='thin', m=m - 1, height=20)
|
||
|
||
if kill_house_requests.exists():
|
||
|
||
if len(kill_house_requests) > 1:
|
||
s = len(kill_house_requests) - 1
|
||
|
||
letters = ["W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ"]
|
||
merge_cells(worksheet, l, s, lst=letters)
|
||
|
||
for kill_house_request in kill_house_requests:
|
||
|
||
bar_list2 += 1
|
||
kil_house_vet = KillHouseVet.objects.filter(
|
||
kill_house=kill_house_request.get('killhouse_user')).select_related(
|
||
'vet__user').only('vet__user__fullname',
|
||
'vet__user__mobile').values('vet__user__fullname',
|
||
'vet__user__mobile').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 '-'
|
||
if (kill_house_request['assignment_state_archive'] == 'True' and kill_house_request[
|
||
'vet_state'] == 'pending') or kill_house_request[
|
||
'vet_state'] == 'accepted':
|
||
state = 'تخلیه شده'
|
||
else:
|
||
state = 'درانتظار تخلیه'
|
||
all_quantity_of_bar += kill_house_request['quantity']
|
||
vet_quantity = kill_house_request['vet_accepted_real_quantity']
|
||
vet_wight = kill_house_request['vet_accepted_real_weight']
|
||
kill_house_driver_name = kill_house_request.get('add_car__driver__driver_name')
|
||
kill_house_driver_mobile = kill_house_request.get('add_car__driver__driver_mobile')
|
||
kill_house_driver_type_car = kill_house_request.get('add_car__driver__type_car')
|
||
kill_house_traffic_code = kill_house_request.get('traffic_code')
|
||
vet_checks = VetCheckRequest.objects.filter(
|
||
kill_house_request__key=kill_house_request.get('key')).only(
|
||
'create_date').values('create_date').first()
|
||
|
||
if vet_checks:
|
||
vet_check_date = vet_checks.get('create_date')
|
||
date_of_inner_bar = convert_to_shamsi(
|
||
datetime=vet_check_date
|
||
)
|
||
|
||
assignment = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__key=kill_house_request.get('key')).only('real_quantity',
|
||
'net_weight',
|
||
'create_date').values(
|
||
'real_quantity', 'net_weight', 'create_date').first()
|
||
if assignment:
|
||
vet_check_date = assignment.get('create_date')
|
||
date_of_inner_bar = convert_to_shamsi(
|
||
datetime=vet_check_date
|
||
)
|
||
if kill_house_request.get('clearance_code'):
|
||
code = kill_house_request.get('clearance_code')
|
||
|
||
quarantine_quantity = kill_house_request['quarantine_quantity'] if kill_house_request[
|
||
'quarantine_quantity'] else '-'
|
||
|
||
list1 = [
|
||
kill_house_driver_type_car,
|
||
kill_house_driver_name,
|
||
kill_house_driver_mobile,
|
||
kill_house_traffic_code,
|
||
code,
|
||
quarantine_quantity,
|
||
kill_house_request['quantity'],
|
||
int(kill_house_request['accepted_real_weight']),
|
||
state,
|
||
vet_quantity,
|
||
vet_wight,
|
||
str(date_of_inner_bar),
|
||
kill_house_vet_name,
|
||
kill_house_vet_mobile,
|
||
kill_house_request['accepted_assignment_real_quantity'],
|
||
int(kill_house_request['accepted_assignment_real_weight']),
|
||
kill_house_request['killhouse_user__kill_house_operator__user__fullname'],
|
||
kill_house_request['killhouse_user__kill_house_operator__user__mobile'],
|
||
]
|
||
create_value(worksheet, list1, l, 37, border_style='thin', m=m - 1)
|
||
l += 1
|
||
else:
|
||
list1 = ['-'] * 18
|
||
create_value(worksheet, list1, l, 37, border_style='thin', m=m - 1)
|
||
l += 1
|
||
|
||
|
||
else:
|
||
list1 = ['-'] * 32
|
||
create_value(worksheet, list1, l, 23, border_style='thin', m=m - 1)
|
||
l += 1
|
||
|
||
aggregates = filtered_poultry_reqs.aggregate(
|
||
total_quantity=Sum('quantity'),
|
||
total_remain_quantity=Sum('remain_quantity'),
|
||
total_weight=Sum(F('quantity') * F('Index_weight')),
|
||
total_hatching=Sum('hatching__quantity'),
|
||
total_left_over=Sum('hatching__left_over'),
|
||
)
|
||
all_poultry_request = aggregates['total_quantity'] or 0
|
||
all_remain_quantity = aggregates['total_remain_quantity'] or 0
|
||
all_wight = aggregates['total_weight'] or 0
|
||
all_hatching = aggregates['total_hatching'] or 0
|
||
all_hatching_left_over = aggregates['total_left_over'] or 0
|
||
sum_province_to_kill_house = all_poultry_request - all_remain_quantity
|
||
|
||
aggregates_province_kill_req = province_kill_requests.aggregate(
|
||
total_main_quantity=Sum('main_quantity'),
|
||
total_weight=Sum(F('main_quantity') * F('province_request__poultry_request__Index_weight')),
|
||
total_quantity=Sum('quantity')
|
||
)
|
||
all_main_quantity = aggregates_province_kill_req['total_main_quantity'] or 0
|
||
all_wight_killer = aggregates_province_kill_req['total_weight'] or 0
|
||
sum_all_remain_quantity_of_bar = aggregates_province_kill_req['total_quantity'] or 0
|
||
|
||
bar_list = len(kill_house_requestss)
|
||
aggregates_kill_req = kill_house_requestss.aggregate(
|
||
total_quantity=Sum('quantity'),
|
||
total_weight=Sum('quantity'),
|
||
total_quarantine_quantity=Sum('quarantine_quantity'),
|
||
total_vet_accepted_real_quantity=Sum('vet_accepted_real_quantity'),
|
||
total_vet_accepted_real_weight=Sum('vet_accepted_real_weight'),
|
||
)
|
||
|
||
sum_all_quantity_of_bar = aggregates_kill_req['total_quantity'] or 0
|
||
sum_all_weight_of_bar = aggregates_kill_req['total_weight'] or 0
|
||
all_qarantine = aggregates_kill_req['total_quarantine_quantity'] or 0
|
||
all_kill_house_request_has_qarantite = len(kill_house_requestss.filter(clearance_code__isnull=False))
|
||
all_vet_quantity = aggregates_kill_req['total_vet_accepted_real_quantity'] or 0
|
||
all_vet_wight = aggregates_kill_req['total_vet_accepted_real_weight'] or 0
|
||
|
||
all_assigment = kill_house_requestss.filter(assignment_state_archive='True')
|
||
|
||
vet_state_accepted = len(kill_house_requestss.filter(vet_state='accepted'))
|
||
|
||
all_assignment_quantity = all_assigment.aggregate(
|
||
total_quantity=Sum('accepted_assignment_real_quantity'))['total_quantity'] or 0
|
||
|
||
all_assignment_weight = all_assigment.aggregate(
|
||
total_quantity=Sum('accepted_assignment_real_weight'))['total_quantity'] or 0
|
||
all_reamin_province = sum_all_remain_quantity_of_bar
|
||
|
||
value_header_list = [
|
||
len(filtered_poultry_reqs),
|
||
all_poultry_request,
|
||
all_wight,
|
||
len(province_kill_requests),
|
||
all_main_quantity,
|
||
all_wight_killer,
|
||
all_remain_quantity,
|
||
bar_list,
|
||
sum_all_quantity_of_bar,
|
||
sum_all_weight_of_bar,
|
||
sum_all_remain_quantity_of_bar,
|
||
all_kill_house_request_has_qarantite,
|
||
all_qarantine,
|
||
vet_state_accepted,
|
||
all_vet_quantity,
|
||
all_vet_wight,
|
||
len(all_assigment),
|
||
all_assignment_quantity,
|
||
all_assignment_weight,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
all_hatching,
|
||
'',
|
||
all_poultry_request,
|
||
all_wight,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
sum_province_to_kill_house,
|
||
all_remain_quantity,
|
||
all_hatching_left_over,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
all_main_quantity,
|
||
all_wight_killer,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
sum_all_quantity_of_bar,
|
||
sum_all_weight_of_bar,
|
||
sum_all_remain_quantity_of_bar,
|
||
all_reamin_province,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
all_qarantine,
|
||
sum_all_quantity_of_bar,
|
||
sum_all_weight_of_bar,
|
||
'',
|
||
all_vet_quantity,
|
||
all_vet_wight,
|
||
'',
|
||
'',
|
||
'',
|
||
all_assignment_quantity,
|
||
all_assignment_weight,
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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 transacion_out_request_excel(request):
|
||
filterset_class = InternalTransactionFilterSet
|
||
filterset_fields = [
|
||
'saleReferenceId',
|
||
'refId',
|
||
'orderId',
|
||
'cardHolderPan',
|
||
'payer_fullname',
|
||
'payer_mobile',
|
||
'user__fullname',
|
||
'user__first_name',
|
||
'user__last_name',
|
||
'user__mobile',
|
||
'poultry__user__fullname',
|
||
'poultry__user__first_name',
|
||
'poultry__user__last_name',
|
||
'poultry__user__mobile',
|
||
'out_province_poultry_request_buyer__user__fullname',
|
||
'out_province_poultry_request_buyer__user__first_name',
|
||
'out_province_poultry_request_buyer__user__last_name',
|
||
'out_province_poultry_request_buyer__user__mobile',
|
||
|
||
]
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if request.GET['type'] == 'poultry':
|
||
transactions = InternalTransaction.objects.filter(
|
||
payer_type='poultry',
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).order_by('-date')
|
||
type_transactions = 'مرغدار'
|
||
|
||
else:
|
||
transactions = InternalTransaction.objects.filter(
|
||
payer_type='buyer',
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
trash=False).order_by('-date')
|
||
type_transactions = 'خریدار'
|
||
|
||
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=transactions
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=transactions)
|
||
transactions = ps.filter()
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد سفارش',
|
||
'پرداخت کننده',
|
||
'تلفن پرداخت کننده',
|
||
'تاریخ پرداخت',
|
||
'مبلغ کل تراکنش(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
'سهم شرکت(ریال)',
|
||
'سهم صنف(ریال)',
|
||
'سهم دیگر(ریال)',
|
||
'شماره پیگیری',
|
||
'شماره سفارش',
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
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_CELL
|
||
|
||
header_list = [
|
||
'تعداد تراکنش ها',
|
||
'مبلغ کل(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
'سهم شرکت(ریال)',
|
||
'سهم صنف(ریال)',
|
||
'سهم دیگر(ریال)',
|
||
]
|
||
|
||
# برای بالای هدر
|
||
|
||
create_header(worksheet, header_list, 4, 2, 21, 16.01)
|
||
|
||
excel_description(worksheet, 'A1', f'تراکنش های خارج از استان {type_transactions}', size=11, color='red', row2='C1')
|
||
excel_description(worksheet, 'A3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='C3')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
new_row = 7
|
||
for transaction in transactions:
|
||
if transaction.kill_house != None:
|
||
fullname = transaction.kill_house.kill_house_operator.user.fullname
|
||
mobile = transaction.kill_house.kill_house_operator.user.mobile
|
||
elif transaction.out_province_poultry_request_buyer != None:
|
||
fullname = transaction.out_province_poultry_request_buyer.user.fullname
|
||
mobile = transaction.out_province_poultry_request_buyer.user.mobile
|
||
elif transaction.chain_company != None:
|
||
fullname = transaction.chain_company.user.fullname
|
||
mobile = transaction.chain_company.user.mobile
|
||
|
||
else:
|
||
fullname = transaction.user.fullname
|
||
mobile = transaction.user.mobile
|
||
|
||
order_codes = transaction.poultry_request.filter(trash=False)
|
||
|
||
if order_codes:
|
||
|
||
for order in order_codes:
|
||
|
||
list11 = [
|
||
m,
|
||
str(order.order_code),
|
||
]
|
||
create_value(worksheet, list11, new_row, 1, m=m, border_style='thin', height=25)
|
||
|
||
if len(order_codes) > 1:
|
||
merge_cells(worksheet, l, len(order_codes) - 1, cell1='C', cell2='L')
|
||
print(l)
|
||
list1 = [
|
||
fullname,
|
||
mobile,
|
||
str(convert_to_shamsi(datetime=transaction.date)),
|
||
transaction.amount,
|
||
transaction.union_share,
|
||
transaction.company_share,
|
||
transaction.guilds_share,
|
||
transaction.other_share,
|
||
str(transaction.refId),
|
||
str(transaction.orderId),
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 3, m=m, border_style='thin', height=25)
|
||
m += 1
|
||
new_row = new_row + 1
|
||
|
||
|
||
|
||
else:
|
||
list1 = [
|
||
m,
|
||
'-',
|
||
fullname,
|
||
mobile,
|
||
str(convert_to_shamsi(datetime=transaction.date)),
|
||
transaction.amount,
|
||
transaction.union_share,
|
||
transaction.company_share,
|
||
transaction.guilds_share,
|
||
transaction.other_share,
|
||
str(transaction.refId),
|
||
str(transaction.orderId),
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=20)
|
||
m += 1
|
||
l += len(order_codes)
|
||
|
||
all_amount = \
|
||
transactions.aggregate(
|
||
total=Sum('amount'))[
|
||
'total'] or 0
|
||
all_union_share = \
|
||
transactions.aggregate(
|
||
total=Sum('union_share'))[
|
||
'total'] or 0
|
||
all_company_share = \
|
||
transactions.aggregate(
|
||
total=Sum('company_share'))[
|
||
'total'] or 0
|
||
all_guilds_share = \
|
||
transactions.aggregate(
|
||
total=Sum('guilds_share'))[
|
||
'total'] or 0
|
||
all_other_share = \
|
||
transactions.aggregate(
|
||
total=Sum('other_share'))[
|
||
'total'] or 0
|
||
value_header_list = [
|
||
len(transactions),
|
||
all_amount,
|
||
all_union_share,
|
||
all_company_share,
|
||
all_guilds_share,
|
||
all_other_share
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
all_amount,
|
||
all_union_share,
|
||
all_company_share,
|
||
all_guilds_share,
|
||
all_other_share,
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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=" تراکنش های خارج استان {type_transactions} .xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def from_allocation_to_distribution_excel(request):
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_houses = KillHouse.objects.filter(trash=False, active=True).order_by('id')
|
||
province_requests = ProvinceKillRequest.objects.filter(trash=False, state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2)
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
province_kill_request__key__in=province_requests.values('key'),
|
||
trash=False)
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(
|
||
date__date__gte=date1, date__date__lte=date2,
|
||
trash=False)
|
||
steward_allocations = StewardAllocation.objects.filter(
|
||
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
||
ware_house__in=kill_house_ware_houses, receiver_state__in=('pending', 'accepted'),
|
||
trash=False).order_by(
|
||
'id')
|
||
kill_house_free_bars = KillHouseFreeSaleBarInformation.objects.filter(trash=False, date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
sheet_name = 'اطلاعات کلی'
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
|
||
killhouse_user = kill_house_requests.values_list('killhouse_user__id', flat=True).distinct()
|
||
if sheet_name == 'اطلاعات کلی':
|
||
excel_options = [
|
||
'ردیف',
|
||
'نام واحد',
|
||
'مالک',
|
||
'تلفن مالک',
|
||
'ماهیت',
|
||
'تعداد سفارشات',
|
||
'حجم سفارشات',
|
||
'وزن سفارشات',
|
||
'تعداد تخصیصات دولتی',
|
||
'حجم تخصیصات دولتی',
|
||
'وزن تخصیصات دولتی',
|
||
' میانگین وزن تخصیصات دولتی',
|
||
' تعداد تخصیصات آزاد',
|
||
'حجم تخصیصات آزاد',
|
||
' وزن تخصیصات آزاد',
|
||
' میانگین وزن تخصیصات آزاد',
|
||
|
||
'تعداد خرید مستقیم',
|
||
'حجم خرید مستقیم',
|
||
'وزن خرید مستقیم',
|
||
' میانگین وزن خرید مستقیم',
|
||
'تعداد بار ایجاد شده',
|
||
'حجم بار ایجاد شده',
|
||
'وزن بار ایجاد شده',
|
||
' میانگین وزن بار ایجاد شده',
|
||
'تعداد بار تخلیه شده',
|
||
'حجم بار تخلیه شده',
|
||
'وزن بار تخلیه شده',
|
||
' میانگین وزن بار تخلیه شده',
|
||
'تعداد بار ورودی به انبار',
|
||
'حجم تقریبی بار ورودی به انبار',
|
||
'وزن بار ورودی به انبار',
|
||
' میانگین وزن بار ورودی به انبار',
|
||
'تعداد توزیع درون استان',
|
||
'حجم تقریبی توزیع درون استان',
|
||
'وزن توزیع درون استان',
|
||
' میانگین وزن توزیع درون استان',
|
||
'تعداد توزیع خارج استان',
|
||
'حجم تقریبی توزیع خارج استان',
|
||
'وزن توزیع خارج استان',
|
||
' میانگین وزن توزیع خارج استان',
|
||
|
||
'حجم تقریبی مانده در انبار',
|
||
'وزن مانده در انبار',
|
||
' میانگین وزن مانده در انبار',
|
||
|
||
]
|
||
header_list = [
|
||
'ردیف',
|
||
'نام واحد',
|
||
'مالک',
|
||
'تلفن مالک',
|
||
'ماهیت',
|
||
'تعداد سفارشات',
|
||
'حجم سفارشات',
|
||
'وزن سفارشات',
|
||
'میانگین وزن سفارشات',
|
||
'تعداد بار ایجاد شده',
|
||
'حجم بار ایجاد شده',
|
||
'وزن بار ایجاد شده',
|
||
|
||
'تعداد بار ورودی به انبار',
|
||
'حجم تقریبی بار ورودی به انبار',
|
||
'وزن بار ورودی به انبار',
|
||
'تعداد توزیع درون استان',
|
||
'حجم تقریبی توزیع درون استان',
|
||
'وزن توزیع درون استان',
|
||
'تعداد توزیع خارج استان',
|
||
'حجم تقریبی توزیع خارج استان',
|
||
'وزن توزیع خارج استان',
|
||
|
||
'حجم تقریبی مانده در انبار',
|
||
'وزن مانده در انبار',
|
||
]
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
create_header(worksheet, header_list, 4, 2, 21, 16.01, color='blue')
|
||
province = kill_houses.first().kill_house_operator.user.province.name
|
||
excel_description(worksheet, 'A1', f' گزارش عملکرد خریداران استان {province}', size=11, color='red', row2='C1')
|
||
excel_description(worksheet, 'A3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='C3')
|
||
|
||
m = 1
|
||
header_row = 3
|
||
l = 3
|
||
excel_description(worksheet, 'I1', 'اطلاعات کلی کشتار', color='red', row2='K1')
|
||
all_len_province_kill_request = 0
|
||
all_quantity_province_kill_request = 0
|
||
all_weight_province_kill_request = 0
|
||
for kill_house in kill_houses:
|
||
cell_color_changer(worksheet, l, 5, 8, 'FBFEE2')
|
||
percentage = KillHousePercentage.objects.filter(kill_house=kill_house).select_related(
|
||
'kill_house_for_killer',
|
||
'kill_house').first()
|
||
if percentage:
|
||
if percentage.kill_house_for_killer != None:
|
||
place = percentage.kill_house_for_killer.name
|
||
else:
|
||
place = percentage.kill_house.name
|
||
else:
|
||
place = kill_house.name
|
||
killer_type = 'کشتارگاه'
|
||
if kill_house.killer == True:
|
||
type = 'کشتارکن'
|
||
if kill_house.type == 'public':
|
||
killer_type = f'{type} عمومی '
|
||
else:
|
||
killer_type = f' {type} اختصاصی ({place})'
|
||
|
||
# all
|
||
province_kill_request = province_requests.filter(killhouse_user=kill_house)
|
||
|
||
# goveerment
|
||
province_kill_request_goverment = province_kill_request.filter(
|
||
province_request__poultry_request__free_sale_in_province=False)
|
||
quantity_province_kill_request_goverment = \
|
||
province_kill_request_goverment.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_goverment = \
|
||
province_kill_request_goverment.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
# cell_color_changer(worksheet, l, 9, 13, 'EBF1DE')
|
||
# free
|
||
province_kill_request_free = province_kill_request.filter(
|
||
province_request__poultry_request__free_sale_in_province=True)
|
||
quantity_province_kill_request_free = \
|
||
province_kill_request_free.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_free = \
|
||
province_kill_request_free.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
# cell_color_changer(worksheet, l, 13, 17, 'DDD9C4')
|
||
# direct_buying
|
||
province_kill_request_direct_buying = province_kill_request.filter(
|
||
province_request__poultry_request__direct_buying=True)
|
||
quantity_province_kill_request_direct_buying = \
|
||
province_kill_request_direct_buying.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_direct_buying = \
|
||
province_kill_request_direct_buying.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
# cell_color_changer(worksheet, l, 17, 21, 'C5D9F1')
|
||
# all
|
||
len_province_kill_request = len(province_kill_request_goverment) + \
|
||
len(province_kill_request_free) + len(province_kill_request_direct_buying)
|
||
quantity_province_kill_request = quantity_province_kill_request_goverment + quantity_province_kill_request_free + \
|
||
quantity_province_kill_request_direct_buying
|
||
|
||
weight_province_kill_request = weight_province_kill_request_goverment + weight_province_kill_request_free + \
|
||
weight_province_kill_request_direct_buying
|
||
# cell_color_changer(worksheet, l, 6, 9, 'C5D9F1')
|
||
# all_len_province_kill_request += len_province_kill_request
|
||
# all_quantity_province_kill_request += quantity_province_kill_request
|
||
# all_weight_province_kill_request += weight_province_kill_request
|
||
# bar
|
||
kill_house_request = kill_house_requests.filter(Q(Q(killer=kill_house) & Q(killhouse_user=kill_house)) | Q(
|
||
Q(killer__isnull=True) & Q(killhouse_user=kill_house)) | Q(
|
||
Q(killer__isnull=True) | Q(killer=kill_house)))
|
||
|
||
kill_house_request = kill_house_request.filter(Q(killer=kill_house) | Q(killhouse_user=kill_house))
|
||
quantity_kill_house_request = \
|
||
kill_house_request.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
weight_kill_house_request = \
|
||
kill_house_request.aggregate(
|
||
total=Sum(F('quantity') * F('province_request__poultry_request__Index_weight')))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l, 13, 16, 'D8E4BC')
|
||
|
||
# ware_house_confirmation
|
||
ware_house_confirmation = kill_house_request.filter(ware_house_confirmation=True)
|
||
quantity_kill_house_request_ware_house = \
|
||
ware_house_confirmation.aggregate(
|
||
total=Sum('ware_house_accepted_real_quantity'))[
|
||
'total'] or 0
|
||
weight_kill_house_request_ware_house = \
|
||
ware_house_confirmation.aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
cell_color_changer(worksheet, l, 16, 19, 'E6B8B7')
|
||
# in_province
|
||
kill_house_ware_house = kill_house_ware_houses.filter(kill_house=kill_house)
|
||
steward_allocation = steward_allocations.filter(ware_house__in=kill_house_ware_house)
|
||
total_allocated_quantity = \
|
||
steward_allocation.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_allocated_weight = \
|
||
steward_allocation.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
# cell_color_changer(worksheet, l, 19, 22, 'EBF1DE')
|
||
# out_province
|
||
kill_house_free_bar = kill_house_free_bars.filter(kill_house=kill_house)
|
||
total_quantity = kill_house_free_bar.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_weight = kill_house_free_bar.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l, 22, 25, '95B3D7')
|
||
# remain_
|
||
|
||
total_remain_quantity = \
|
||
kill_house_ware_house.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_remain_weight = \
|
||
kill_house_ware_house.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l, 25, 27, 'DA9694')
|
||
value_header_list = [
|
||
m,
|
||
kill_house.name,
|
||
kill_house.kill_house_operator.user.fullname,
|
||
kill_house.kill_house_operator.user.mobile,
|
||
killer_type,
|
||
len_province_kill_request,
|
||
quantity_province_kill_request,
|
||
weight_province_kill_request,
|
||
str(round(weight_province_kill_request / quantity_province_kill_request,
|
||
1) if weight_province_kill_request > 0 else 0),
|
||
len(kill_house_request),
|
||
quantity_kill_house_request,
|
||
weight_kill_house_request,
|
||
|
||
len(ware_house_confirmation),
|
||
quantity_kill_house_request_ware_house,
|
||
weight_kill_house_request_ware_house,
|
||
|
||
len(steward_allocation),
|
||
total_allocated_quantity,
|
||
total_allocated_weight,
|
||
|
||
len(kill_house_free_bar),
|
||
total_quantity,
|
||
total_weight,
|
||
|
||
total_remain_quantity,
|
||
total_remain_weight,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, l, 4, border_style='thin')
|
||
l += 1
|
||
header_row += 1
|
||
m += 1
|
||
l += 3
|
||
create_header_freez(worksheet, excel_options, 1, l, l + 1, 20)
|
||
m = 1
|
||
excel_description(worksheet, f'I{l - 1}', 'جزئیات کشتار', color='red', row2=f'K{l - 1}')
|
||
for kill_house in kill_houses:
|
||
percentage = KillHousePercentage.objects.filter(kill_house=kill_house).select_related(
|
||
'kill_house_for_killer',
|
||
'kill_house').first()
|
||
if percentage:
|
||
if percentage.kill_house_for_killer != None:
|
||
place = percentage.kill_house_for_killer.name
|
||
else:
|
||
place = percentage.kill_house.name
|
||
else:
|
||
place = kill_house.name
|
||
killer_type = 'کشتارگاه'
|
||
if kill_house.killer == True:
|
||
type = 'کشتارکن'
|
||
if kill_house.type == 'public':
|
||
killer_type = f'{type} عمومی '
|
||
else:
|
||
killer_type = f' {type} اختصاصی ({place})'
|
||
|
||
# all
|
||
province_kill_request = province_requests.filter(killhouse_user=kill_house)
|
||
|
||
# goveerment
|
||
province_kill_request_goverment = province_kill_request.filter(
|
||
province_request__poultry_request__free_sale_in_province=False)
|
||
quantity_province_kill_request_goverment = \
|
||
province_kill_request_goverment.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_goverment = \
|
||
province_kill_request_goverment.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l + 1, 9, 13, 'EBF1DE')
|
||
# free
|
||
province_kill_request_free = province_kill_request.filter(
|
||
province_request__poultry_request__free_sale_in_province=True)
|
||
quantity_province_kill_request_free = \
|
||
province_kill_request_free.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_free = \
|
||
province_kill_request_free.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l + 1, 13, 17, 'DDD9C4')
|
||
# direct_buying
|
||
province_kill_request_direct_buying = province_kill_request.filter(
|
||
province_request__poultry_request__direct_buying=True)
|
||
quantity_province_kill_request_direct_buying = \
|
||
province_kill_request_direct_buying.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_direct_buying = \
|
||
province_kill_request_direct_buying.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l + 1, 17, 21, 'C5D9F1')
|
||
# all
|
||
len_province_kill_request = len(province_kill_request_goverment) + \
|
||
len(province_kill_request_free) + len(province_kill_request_direct_buying)
|
||
quantity_province_kill_request = quantity_province_kill_request_goverment + quantity_province_kill_request_free + \
|
||
quantity_province_kill_request_direct_buying
|
||
|
||
weight_province_kill_request = weight_province_kill_request_goverment + weight_province_kill_request_free + \
|
||
weight_province_kill_request_direct_buying
|
||
cell_color_changer(worksheet, l + 1, 6, 9, 'C5D9F1')
|
||
all_len_province_kill_request += len_province_kill_request
|
||
all_quantity_province_kill_request += quantity_province_kill_request
|
||
all_weight_province_kill_request += weight_province_kill_request
|
||
# bar
|
||
kill_house_request = kill_house_requests.filter(Q(Q(killer=kill_house) & Q(killhouse_user=kill_house)) | Q(
|
||
Q(killer__isnull=True) & Q(killhouse_user=kill_house)) | Q(
|
||
Q(killer__isnull=True) | Q(killer=kill_house)))
|
||
|
||
kill_house_request = kill_house_request.filter(Q(killer=kill_house) | Q(killhouse_user=kill_house))
|
||
quantity_kill_house_request = \
|
||
kill_house_request.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
weight_kill_house_request = \
|
||
kill_house_request.aggregate(
|
||
total=Sum(F('quantity') * F('province_request__poultry_request__Index_weight')))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l + 1, 21, 25, 'EBF1DE')
|
||
# assignment_state_archive
|
||
assignment_state_archive = kill_house_request.filter(assignment_state_archive='True')
|
||
quantity_kill_house_request_assignment = \
|
||
assignment_state_archive.aggregate(
|
||
total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
weight_kill_house_request_assignment = \
|
||
assignment_state_archive.aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l + 1, 25, 29, 'DDD9C4')
|
||
# ware_house_confirmation
|
||
ware_house_confirmation = kill_house_request.filter(ware_house_confirmation=True)
|
||
quantity_kill_house_request_ware_house = \
|
||
ware_house_confirmation.aggregate(
|
||
total=Sum('ware_house_accepted_real_quantity'))[
|
||
'total'] or 0
|
||
weight_kill_house_request_ware_house = \
|
||
ware_house_confirmation.aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
cell_color_changer(worksheet, l + 1, 29, 33, 'C5D9F1')
|
||
# in_province
|
||
kill_house_ware_house = kill_house_ware_houses.filter(kill_house=kill_house)
|
||
steward_allocation = steward_allocations.filter(ware_house__in=kill_house_ware_house)
|
||
total_allocated_quantity = \
|
||
steward_allocation.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_allocated_weight = \
|
||
steward_allocation.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l + 1, 33, 37, 'EBF1DE')
|
||
# out_province
|
||
kill_house_free_bar = kill_house_free_bars.filter(kill_house=kill_house)
|
||
total_quantity = kill_house_free_bar.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_weight = kill_house_free_bar.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l + 1, 37, 41, 'DDD9C4')
|
||
# remain_
|
||
|
||
total_remain_quantity = \
|
||
kill_house_ware_house.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_remain_weight = \
|
||
kill_house_ware_house.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
cell_color_changer(worksheet, l + 1, 41, 44, 'C5D9F1')
|
||
list1 = [
|
||
m,
|
||
kill_house.name,
|
||
kill_house.kill_house_operator.user.fullname,
|
||
kill_house.kill_house_operator.user.mobile,
|
||
killer_type,
|
||
len_province_kill_request,
|
||
quantity_province_kill_request,
|
||
weight_province_kill_request,
|
||
|
||
len(province_kill_request_goverment),
|
||
quantity_province_kill_request_goverment,
|
||
weight_province_kill_request_goverment,
|
||
str(round(weight_province_kill_request_goverment / quantity_province_kill_request_goverment,
|
||
1) if weight_province_kill_request_goverment > 0 else 0),
|
||
len(province_kill_request_free),
|
||
quantity_province_kill_request_free,
|
||
weight_province_kill_request_free,
|
||
str(round(weight_province_kill_request_free / quantity_province_kill_request_free,
|
||
1) if weight_province_kill_request_free > 0 else 0),
|
||
len(province_kill_request_direct_buying),
|
||
quantity_province_kill_request_direct_buying,
|
||
weight_province_kill_request_direct_buying,
|
||
str(round(weight_province_kill_request_direct_buying / quantity_province_kill_request_direct_buying,
|
||
1) if weight_province_kill_request_direct_buying > 0 else 0),
|
||
len(kill_house_request),
|
||
quantity_kill_house_request,
|
||
weight_kill_house_request,
|
||
str(round(weight_kill_house_request / quantity_kill_house_request,
|
||
1) if weight_kill_house_request > 0 else 0),
|
||
len(assignment_state_archive),
|
||
quantity_kill_house_request_assignment,
|
||
weight_kill_house_request_assignment,
|
||
str(round(weight_kill_house_request_assignment / quantity_kill_house_request_assignment,
|
||
1) if weight_kill_house_request_assignment > 0 else 0),
|
||
len(ware_house_confirmation),
|
||
quantity_kill_house_request_ware_house,
|
||
weight_kill_house_request_ware_house,
|
||
str(round(weight_kill_house_request_ware_house / quantity_kill_house_request_ware_house,
|
||
1) if weight_kill_house_request_ware_house > 0 else 0),
|
||
len(steward_allocation),
|
||
total_allocated_quantity,
|
||
total_allocated_weight,
|
||
str(round(total_allocated_weight / total_allocated_quantity,
|
||
1) if total_allocated_weight > 0 else 0),
|
||
len(kill_house_free_bar),
|
||
total_quantity,
|
||
total_weight,
|
||
str(round(int(total_weight) / total_quantity,
|
||
1) if total_weight > 0 and total_quantity > 0 else 0),
|
||
total_remain_quantity,
|
||
total_remain_weight,
|
||
str(round(total_remain_weight / total_remain_quantity,
|
||
1) if total_remain_weight > 0 else 0),
|
||
|
||
]
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin', height=25)
|
||
|
||
m += 1
|
||
|
||
l += 1
|
||
province_kill_request_goverment1 = province_requests.filter(
|
||
province_request__poultry_request__free_sale_in_province=False)
|
||
quantity_province_kill_request_goverment = \
|
||
province_kill_request_goverment1.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_goverment = \
|
||
province_kill_request_goverment1.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
province_kill_request_free = province_requests.filter(
|
||
province_request__poultry_request__free_sale_in_province=True)
|
||
quantity_province_kill_request_free = \
|
||
province_kill_request_free.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_free = \
|
||
province_kill_request_free.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
province_kill_request_direct_buying = province_requests.filter(
|
||
province_request__poultry_request__direct_buying=True)
|
||
quantity_province_kill_request_direct_buying = \
|
||
province_kill_request_direct_buying.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
weight_province_kill_request_direct_buying = \
|
||
province_kill_request_direct_buying.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
quantity_kill_house_request = \
|
||
kill_house_requests.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
weight_kill_house_request = \
|
||
kill_house_requests.aggregate(
|
||
total=Sum(F('quantity') * F('province_request__poultry_request__Index_weight')))[
|
||
'total'] or 0
|
||
# assignment_state_archive
|
||
assignment_state_archive = kill_house_requests.filter(assignment_state_archive='True')
|
||
quantity_kill_house_request_assignment = \
|
||
assignment_state_archive.aggregate(
|
||
total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
weight_kill_house_request_assignment = \
|
||
assignment_state_archive.aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
ware_house_confirmation = kill_house_requests.filter(ware_house_confirmation=True)
|
||
quantity_kill_house_request_ware_house = \
|
||
ware_house_confirmation.aggregate(
|
||
total=Sum('ware_house_accepted_real_quantity'))[
|
||
'total'] or 0
|
||
weight_kill_house_request_ware_house = \
|
||
ware_house_confirmation.aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
total_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_quantity = kill_house_free_bars.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_weight = kill_house_free_bars.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_remain_quantity = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_remain_weight = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
all_len_province_kill_request,
|
||
all_quantity_province_kill_request,
|
||
all_weight_province_kill_request,
|
||
len(province_kill_request_goverment1),
|
||
quantity_province_kill_request_goverment,
|
||
weight_province_kill_request_goverment,
|
||
str(round(weight_province_kill_request_goverment / quantity_province_kill_request_goverment,
|
||
1) if weight_province_kill_request_goverment > 0 else 0),
|
||
len(province_kill_request_free),
|
||
quantity_province_kill_request_free,
|
||
weight_province_kill_request_free,
|
||
str(round(weight_province_kill_request_free / quantity_province_kill_request_free,
|
||
1) if weight_province_kill_request_free > 0 else 0),
|
||
len(province_kill_request_direct_buying),
|
||
quantity_province_kill_request_direct_buying,
|
||
weight_province_kill_request_direct_buying,
|
||
str(round(weight_province_kill_request_direct_buying / quantity_province_kill_request_direct_buying,
|
||
1) if weight_province_kill_request_direct_buying > 0 else 0),
|
||
len(kill_house_requests),
|
||
quantity_kill_house_request,
|
||
weight_kill_house_request,
|
||
str(round(weight_kill_house_request / quantity_kill_house_request,
|
||
1) if weight_kill_house_request > 0 else 0),
|
||
len(assignment_state_archive),
|
||
quantity_kill_house_request_assignment,
|
||
weight_kill_house_request_assignment,
|
||
str(round(weight_kill_house_request_assignment / quantity_kill_house_request_assignment,
|
||
1) if weight_kill_house_request_assignment > 0 else 0),
|
||
len(ware_house_confirmation),
|
||
quantity_kill_house_request_ware_house,
|
||
weight_kill_house_request_ware_house,
|
||
str(round(weight_kill_house_request_ware_house / quantity_kill_house_request_ware_house,
|
||
1) if weight_kill_house_request_ware_house > 0 else 0),
|
||
len(steward_allocations),
|
||
total_allocated_quantity,
|
||
total_allocated_weight,
|
||
str(round(total_allocated_weight / total_allocated_quantity,
|
||
1) if total_allocated_weight > 0 else 0),
|
||
len(kill_house_free_bars),
|
||
total_quantity,
|
||
total_weight,
|
||
str(round(total_weight / total_quantity,
|
||
1) if total_weight > 0 else 0),
|
||
total_remain_quantity,
|
||
total_remain_weight,
|
||
str(round(total_remain_weight / total_remain_quantity,
|
||
1) if total_remain_weight > 0 else 0),
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 1, 1, color='green')
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
all_len_province_kill_request,
|
||
all_quantity_province_kill_request,
|
||
all_weight_province_kill_request,
|
||
str(round(all_weight_province_kill_request / all_quantity_province_kill_request,
|
||
1) if all_weight_province_kill_request > 0 else 0),
|
||
|
||
len(kill_house_requests),
|
||
quantity_kill_house_request,
|
||
weight_kill_house_request,
|
||
|
||
len(ware_house_confirmation),
|
||
quantity_kill_house_request_ware_house,
|
||
weight_kill_house_request_ware_house,
|
||
|
||
len(steward_allocations),
|
||
total_allocated_quantity,
|
||
total_allocated_weight,
|
||
|
||
len(kill_house_free_bars),
|
||
total_quantity,
|
||
total_weight,
|
||
|
||
total_remain_quantity,
|
||
total_remain_weight,
|
||
|
||
]
|
||
create_value(worksheet, list2, header_row - 1, 4, color='blue')
|
||
for kill_house_id in killhouse_user:
|
||
kill_house = KillHouse.objects.get(trash=False, id=kill_house_id)
|
||
sheet_name = kill_house.name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
filtered_kill_reqs = kill_house_requests.filter(
|
||
killhouse_user=kill_house).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('province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing', '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__poultry__user__fullname',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'killer__name',
|
||
'killhouse_user__type', 'killer', 'bar_document_status',
|
||
'bar_document_status__title').values(
|
||
'province_request__poultry_request__poultry__user__fullname', 'province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'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', 'bar_document_status',
|
||
'bar_document_status__title'
|
||
)
|
||
|
||
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'))
|
||
)
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'نوع کشتار',
|
||
'کدسفارش مرغدار',
|
||
'نام و نام خانوادگی مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'نام فارم',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
'کشتارکن اختصاصی',
|
||
'تلفن کشتارکن اختصاصی',
|
||
' محل کشتار ',
|
||
'قیمت کشتارگاه(ریال)',
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'وضعیت',
|
||
'وضعیت سند',
|
||
'وضعیت ورود انبار',
|
||
'تعداد لاشه',
|
||
'وزن لاشه',
|
||
'درصد افت',
|
||
'کشور مقصد',
|
||
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
header_list = [
|
||
'تعداد بارهای ایجاد شده',
|
||
'تعداد بارهای دارای کشتارکن اختصاصی',
|
||
'مجموع حجم بارها',
|
||
'مجموع وزن بارها',
|
||
'میانگین وزن ',
|
||
'کمترین سن',
|
||
'بیشترین سن',
|
||
'میانگین سنی',
|
||
'تعداد بارهای دارای کد قرنطینه',
|
||
'حجم بارهای دارای کد قرنطینه',
|
||
'تعداد بار احراز شده از قرنطینه',
|
||
'مجموع تعداد قطعه احراز شده از قرنطینه',
|
||
'تعداد بار فاقد قرنطینه',
|
||
'حجم بار فاقد قرنطینه',
|
||
' تعداد بارهایی که در قرنطینه و رصدیار اختلاف دارند',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'مجموع تعداد تخلیه شده دامپزشک',
|
||
'مجموع وزن تخلیه شده دامپزشک',
|
||
'تعداد بارهای تکمیل شده',
|
||
'مجموع تعداد نهایی در کشتارگاه',
|
||
'مجموع وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'تعداد بار های وارد شده در انبار',
|
||
'مجموع تعداد لاشه',
|
||
'مجموع وزن لاشه',
|
||
'میانگین درصد افت لاشه',
|
||
|
||
]
|
||
|
||
header_list2 = [
|
||
'تعداد درخواست مرغداران',
|
||
' مجموع تعداد قطعه درخواست مرغداران',
|
||
' مجموع وزن درخواست مرغداران',
|
||
|
||
]
|
||
header_list3 = [
|
||
'درصد بارهای دارای کد قرنطینه',
|
||
'درصد تعداد بارهای احراز شده از قرنطینه',
|
||
'درصد تعداد بارهای تکمیل شده کشتارگاه',
|
||
'درصد وزن نهایی در کشتارگاه نسبت به وزن کل',
|
||
'درصد بارهای فاقد کد قرنطینه',
|
||
'درصد بارهای اختلاف دار در قرنطینه و رصدیار',
|
||
'درصد تعداد بارهای ورودی به انبار',
|
||
'درصد وزن لاشه ها در انبار نسبت به وزن کل',
|
||
'درصد وزن لاشه در انبار نسبت به وزن نهایی در کشتارگاه',
|
||
|
||
]
|
||
create_header(worksheet, header_list, 9, 2, height=21.8)
|
||
|
||
create_header(worksheet, header_list2, 6, 2, height=21.8, color='green')
|
||
|
||
create_header(worksheet, header_list3, 6, 5, height=43, color='orange', text_color='0D0D0D')
|
||
create_header_freez(worksheet, excel_options, 1, 8, 9, height=21, len_with=True)
|
||
|
||
excel_description(worksheet, 'B1',
|
||
f'گزارش بارهای ایجاد شده کشتارگاه {kill_house.name} در فرآیند کشتار مرغ گوشتی', color='red',
|
||
row2='E1')
|
||
|
||
kill_keys = [kill.get('key') for kill in filtered_kill_reqs]
|
||
|
||
vet_checks = VetCheckRequest.objects.filter(
|
||
trash=False, kill_house_request__key__in=kill_keys
|
||
).only('create_date', 'kill_house_request__key').values(
|
||
'create_date', 'kill_house_request__key')
|
||
|
||
assignments = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__key__in=kill_keys, trash=False
|
||
).only('create_date', 'net_weight', 'real_quantity', 'kill_house_request__key')
|
||
|
||
vet_check_mapping = {vc['kill_house_request__key']: vc['create_date'] for vc in vet_checks}
|
||
assignment_mapping = {
|
||
assignment.kill_house_request.key: (
|
||
int(assignment.net_weight), assignment.real_quantity, assignment.create_date)
|
||
for assignment in assignments
|
||
}
|
||
if filtered_kill_reqs.exists():
|
||
name = filtered_kill_reqs.first()['killhouse_user__kill_house_operator__user__province__name']
|
||
worksheet['B2'] = f'استان {name}'
|
||
excel_description(worksheet, 'B2', f'استان {name}', color='red', row2='D2')
|
||
excel_description(worksheet, 'B3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='D3')
|
||
|
||
l = 8
|
||
m = 1
|
||
all_age = []
|
||
|
||
all_real_quantity = 0
|
||
all_net_weighte = 0
|
||
all_weighte = 0
|
||
poultry_ids = [req.get('province_request__poultry_request__poultry') for req in filtered_kill_reqs]
|
||
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
|
||
vet_farm_mapping = {
|
||
vet_farm.poultry_id: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
|
||
for vet_farm in vet_farms
|
||
}
|
||
if filtered_kill_reqs:
|
||
for kill in filtered_kill_reqs:
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
if age not in all_age:
|
||
all_age.append(age)
|
||
|
||
if (kill['assignment_state_archive']) == 'True' or kill[
|
||
'vet_state'] == 'accepted':
|
||
state = 'تخلیه شده'
|
||
else:
|
||
state = 'درانتظار تخلیه'
|
||
l += 1
|
||
vet_farm_id = kill.get('province_request__poultry_request__poultry')
|
||
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
|
||
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()
|
||
|
||
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 = convert_to_shamsi(year=send_date.year, month=send_date.month,
|
||
day=send_date.day, )
|
||
|
||
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'])
|
||
key = kill.get('key')
|
||
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 '-'
|
||
net_weighte, real_quantity, vet_check_date = assignment_mapping.get(key, ('-', '-', None))
|
||
all_real_quantity += real_quantity if real_quantity != '-' else 0
|
||
all_net_weighte += net_weighte if net_weighte != '-' else 0
|
||
vet_check_date = vet_check_mapping.get(key, vet_check_date)
|
||
date_of_inner_bar = convert_to_shamsi(datetime=vet_check_date) if vet_check_date else '-'
|
||
|
||
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 = 'عدم تایید راهداری'
|
||
elif kill['quarantine_code_state'] == 'merge':
|
||
quarantine_quantity = 'ادغام'
|
||
export_country = '-'
|
||
|
||
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__out'] == True:
|
||
type = 'خارج از استان'
|
||
elif kill['province_kill_request__province_request__poultry_request__direct_buying'] == True:
|
||
type = 'خرید مستقیم'
|
||
elif kill['province_request__poultry_request__freezing'] == True:
|
||
type = 'انجماد'
|
||
elif kill['province_request__poultry_request__export'] == True:
|
||
type = 'صادرات'
|
||
export_country = kill['kill_request__export_country']
|
||
else:
|
||
type = 'عادی'
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
|
||
if kill['message'] is not None:
|
||
state_delete = 'بار حذف شده'
|
||
else:
|
||
state_delete = 'فعال'
|
||
all_weighte += weight
|
||
|
||
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 kill['ware_house_confirmation'] == True:
|
||
state_ware_house_confirmation = 'ورود به انبار'
|
||
|
||
else:
|
||
state_ware_house_confirmation = '-'
|
||
|
||
list1 = [
|
||
m,
|
||
str(kill.get('bar_code')),
|
||
str(date_of_poultry_request),
|
||
type,
|
||
str(kill.get('province_request__poultry_request__order_code')),
|
||
kill.get('province_request__poultry_request__poultry__user__fullname'),
|
||
str(kill.get('province_request__poultry_request__poultry__user__mobile')),
|
||
kill.get('province_request__poultry_request__poultry__user__city__name'),
|
||
kill.get('province_request__poultry_request__poultry__unit_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,
|
||
kill.get('province_kill_request__kill_house_price'),
|
||
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['bar_document_status__title'] if kill['bar_document_status'] else '-',
|
||
state_ware_house_confirmation,
|
||
ware_house_accepted_real_quantity,
|
||
int(ware_house_accepted_real_weight),
|
||
f'%{weight_loss}',
|
||
export_country,
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l, 1, height=20, different_cell=40, different_value='بار حذف شده')
|
||
killer_exclusive = len(filtered_kill_reqs.filter(killer__isnull=False))
|
||
all_state_ware_house_confirmation = len(filtered_kill_reqs.filter(ware_house_confirmation=True))
|
||
|
||
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
|
||
|
||
aggregate_filtered_kill_reqs = filtered_kill_reqs.aggregate(
|
||
total_accepted_real_quantity=Sum('accepted_real_quantity'),
|
||
total_accepted_real_weight=Sum('accepted_real_weight'),
|
||
total_quantity=Sum('quantity'),
|
||
total_vet_accepted_real_quantity=Sum('vet_accepted_real_quantity'),
|
||
total_vet_accepted_real_weight=Sum('vet_accepted_real_weight'),
|
||
total_quarantine_quantity=Sum('quarantine_quantity'),
|
||
total_ware_house_accepted_real_quantity=Sum('ware_house_accepted_real_quantity'),
|
||
total_ware_house_accepted_real_weight=Sum('ware_house_accepted_real_weight'),
|
||
total_weight_loss=Sum('weight_loss'),
|
||
|
||
)
|
||
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 = aggregate_filtered_kill_reqs['total_accepted_real_quantity'] or 0
|
||
|
||
accepted_real_wight = aggregate_filtered_kill_reqs['total_accepted_real_weight'] or 0
|
||
all_kill_request_quantity = aggregate_filtered_kill_reqs['total_quantity'] or 0
|
||
all_quarantine_quantity = aggregate_filtered_kill_reqs['total_quarantine_quantity'] or 0
|
||
all_vet_accepted_real_quantity = aggregate_filtered_kill_reqs['total_vet_accepted_real_quantity'] or 0
|
||
all_vet_accepted_real_weight = aggregate_filtered_kill_reqs['total_vet_accepted_real_weight'] or 0
|
||
has_qarantine = len(filtered_kill_reqs.filter(quarantine_quantity__isnull=False))
|
||
all_ware_house_accepted_real_quantity = aggregate_filtered_kill_reqs[
|
||
'total_ware_house_accepted_real_quantity'] or 0
|
||
all_ware_house_accepted_real_weight = aggregate_filtered_kill_reqs['total_ware_house_accepted_real_weight'] or 0
|
||
all_weight_loss = aggregate_filtered_kill_reqs['total_weight_loss'] or 0
|
||
has_code1 = filtered_kill_reqs.filter(clearance_code__isnull=False).aggregate(
|
||
total_quantity=Sum('quantity'),
|
||
)
|
||
all_quarantine_quantity_has_code = has_code1['total_quantity'] or 0
|
||
hasnt_code1 = filtered_kill_reqs.filter(clearance_code__isnull=True)
|
||
hasnt_code = hasnt_code1.aggregate(
|
||
total_quantity=Sum('quantity')
|
||
)
|
||
all_quarantine_quantity_hasnt_code = hasnt_code['total_quantity'] or 0
|
||
difference_bar = len(filtered_kill_reqs.filter(
|
||
Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity'))))
|
||
all_weight_loss = round(int(all_weight_loss) / all_state_ware_house_confirmation,
|
||
2) if all_weight_loss > 0 else 0
|
||
|
||
all_age1 = sorted(all_age)
|
||
has_code = len(filtered_kill_reqs.filter(clearance_code__isnull=False))
|
||
value_header_list = [
|
||
len(poultry_request),
|
||
total_requests_quantity,
|
||
int(total_requests_weight),
|
||
len(filtered_kill_reqs),
|
||
killer_exclusive,
|
||
all_kill_request_quantity,
|
||
int(all_weighte),
|
||
round(all_weighte / all_kill_request_quantity,
|
||
1) if all_weighte > 0 and all_kill_request_quantity > 0 else 0,
|
||
all_age1[0] if len(all_age1) > 0 else '-',
|
||
all_age1[len(all_age1) - 1] if len(all_age1) > 0 else '-',
|
||
int((sum(all_age1)) / len(all_age1)) if len(all_age1) > 0 else '-',
|
||
has_code,
|
||
all_quarantine_quantity_has_code,
|
||
has_qarantine,
|
||
all_quarantine_quantity,
|
||
len(hasnt_code1),
|
||
all_quarantine_quantity_hasnt_code,
|
||
difference_bar,
|
||
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}'
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 6)
|
||
value_header_list2 = [
|
||
f'%{round((has_code * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((has_qarantine * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((len(bar_complete) * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((int(all_net_weighte) * 100) / int(all_weighte), 2) if int(all_weighte) > 0 else 0}',
|
||
f'%{round((len(hasnt_code1) * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((difference_bar * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((all_state_ware_house_confirmation * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((int(all_ware_house_accepted_real_weight) * 100) / int(all_weighte), 2) if int(all_weighte) > 0 else 0}',
|
||
f'%{round((int(all_ware_house_accepted_real_weight) * 100) / int(all_net_weighte), 2) if int(all_net_weighte) > 0 else 0}'
|
||
]
|
||
create_value(worksheet, value_header_list2, 6, 6)
|
||
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}',
|
||
''
|
||
|
||
]
|
||
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 all_distribution_province(request):
|
||
sheet_names2 = [
|
||
'اطلاعات کلی',
|
||
'تخصیصات کشتارگاه به مباشر و صنف',
|
||
'تخصیصات مباشر به صنف',
|
||
# 'تخصیصات مباشر به مباشر',
|
||
'تخصیصات صنف به صنف',
|
||
'تخصیصات سرد خانه',
|
||
'عملکرد مباشرین',
|
||
'تراکنش های صنوف',
|
||
|
||
]
|
||
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
for name in sheet_names2:
|
||
sheet_name = name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
|
||
if sheet_name == 'اطلاعات کلی':
|
||
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='E2')
|
||
excel_description(worksheet, 'B1', f'اطلاعات کلی', row2='E1')
|
||
header_list2 = [
|
||
'ماهیت',
|
||
'اطلاعات فروشنده',
|
||
'مانده در انبار قبل از توزیع',
|
||
'وزن ورودی به انبار فروشنده ',
|
||
'تعداد کل توزیع شده',
|
||
' وزن کل خروجی از انبار (توزیع شده)',
|
||
'کل وزن فروش به خارج از استان',
|
||
'تعداد توزیع به مباشرین',
|
||
'وزن توزیع به مباشرین',
|
||
'تعداد توزیع به صنف',
|
||
'وزن توزیع به صنف',
|
||
'درصد توزیع فروشنده',
|
||
'مانده انبار',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 3, 4, border_style='thin', width=20)
|
||
|
||
kill_houses = KillHouse.objects.filter(trash=False, out_province=False)
|
||
l = 5
|
||
for kill_house in kill_houses:
|
||
if kill_house.killer == True and kill_house.type == 'exclusive':
|
||
parent = KillHousePercentage.objects.get(kill_house=kill_house, trash=False)
|
||
killer_type = f'کشتارکن اختصاصی {parent.kill_house_for_killer.name}'
|
||
elif kill_house.killer == True and kill_house.type == 'public':
|
||
killer_type = 'کشتارکن عمومی'
|
||
else:
|
||
killer_type = 'کشتارگاه'
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house_request = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
ware_house_confirmation=True, trash=False,
|
||
calculate_status=True
|
||
, kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2)
|
||
kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(
|
||
kill_house=kill_house, trash=False,
|
||
calculate_status=True, date__date__gte=date1,
|
||
date__date__lte=date2, ware_house=True)
|
||
allocations = StewardAllocation.objects.filter(
|
||
receiver_state__in=('pending', 'accepted'),
|
||
trash=False, date__date__gte=date1,
|
||
date__date__lte=date2, kill_house=kill_house).order_by('id')
|
||
kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_house,
|
||
trash=False, calculate_status=True, date__date__gte=date1,
|
||
date__date__lte=date2, )
|
||
else:
|
||
kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_house,
|
||
|
||
trash=False, calculate_status=True)
|
||
kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(
|
||
kill_house=kill_house, trash=False,
|
||
calculate_status=True, ware_house=True)
|
||
kill_house_request = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
ware_house_confirmation=True, trash=False,
|
||
calculate_status=True
|
||
)
|
||
allocations = StewardAllocation.objects.filter(
|
||
trash=False, kill_house=kill_house, receiver_state__in=('pending', 'accepted')).order_by('id')
|
||
kill_house_to_stw = allocations.filter(allocation_type='killhouse_steward')
|
||
quantity_allocations = allocations.aggregate(
|
||
total_quantity=Sum('real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
quantity_kill_house_free_sale_bars = kill_house_free_sale_bars.aggregate(
|
||
total_quantity=Sum('real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
weight_allocations = allocations.aggregate(
|
||
total_quantity=Sum('real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_kill_house_free_sale_bars = kill_house_free_sale_bars.aggregate(
|
||
total_quantity=Sum('real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
quantity_kill_house_to_stw = kill_house_to_stw.aggregate(
|
||
total_quantity=Sum('real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_kill_house_to_stw = kill_house_to_stw.aggregate(
|
||
total_quantity=Sum('real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
kill_house_to_guild = allocations.filter(allocation_type='killhouse_guild')
|
||
quantity_kill_house_to_guild = kill_house_to_guild.aggregate(
|
||
total_quantity=Sum('real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
weight_kill_house_to_guild = kill_house_to_guild.aggregate(
|
||
total_quantity=Sum('real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
ware_house_accepted_real_weight = kill_house_request.aggregate(
|
||
total_quantity=Sum('ware_house_accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
weight_of_carcasses = kill_house_free_buying_bars.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
product = RolesProducts.objects.filter(trash=False, kill_house=kill_house).first()
|
||
if product:
|
||
total_remain_weight = product.total_remain_weight
|
||
else:
|
||
total_remain_weight = 0
|
||
|
||
list1 = [
|
||
killer_type,
|
||
f"{kill_house.name}-{kill_house.kill_house_operator.user.mobile}-{kill_house.kill_house_operator.user.city.name}",
|
||
((weight_allocations + weight_kill_house_free_sale_bars) - (
|
||
ware_house_accepted_real_weight + weight_of_carcasses) + total_remain_weight),
|
||
ware_house_accepted_real_weight + weight_of_carcasses,
|
||
len(allocations),
|
||
weight_allocations + weight_kill_house_free_sale_bars,
|
||
weight_kill_house_free_sale_bars,
|
||
len(kill_house_to_stw),
|
||
weight_kill_house_to_stw,
|
||
len(kill_house_to_guild),
|
||
weight_kill_house_to_guild,
|
||
f"%{int((weight_allocations + weight_kill_house_free_sale_bars) * 100 / (ware_house_accepted_real_weight + weight_of_carcasses)) if (ware_house_accepted_real_weight + weight_of_carcasses) > 0 else 0}",
|
||
total_remain_weight
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 3, border_style='thin', width=20)
|
||
l += 1
|
||
l += 7
|
||
create_header(worksheet, header_list2, 3, l, border_style='thin', width=20)
|
||
stewards = Guilds.objects.filter(trash=False, steward=True)
|
||
for steward in stewards:
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
Q(to_steward=steward) | Q(steward=steward),
|
||
trash=False, date__date__gte=date1,
|
||
date__date__lte=date2, calculate_status=True
|
||
).order_by('id')
|
||
guild_steward_free_buying_bars = StewardFreeBarInformation.objects.filter(
|
||
Q(guild=steward) | Q(steward=steward), trash=False, date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
guild_steward_free_sale_bars = StewardFreeSaleBarInformation.objects.filter(
|
||
Q(guild=steward) | Q(steward=steward), trash=False, date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
else:
|
||
allocations = StewardAllocation.objects.filter(
|
||
Q(to_steward=steward) | Q(steward=steward),
|
||
trash=False, calculate_status=True).order_by('id')
|
||
|
||
guild_steward_free_buying_bars = StewardFreeBarInformation.objects.filter(
|
||
Q(guild=steward) | Q(steward=steward), trash=False)
|
||
guild_steward_free_sale_bars = StewardFreeSaleBarInformation.objects.filter(
|
||
Q(guild=steward) | Q(steward=steward), trash=False)
|
||
product = RolesProducts.objects.filter(trash=False, guild=steward).first()
|
||
if product:
|
||
total_remain_weight = product.total_remain_weight
|
||
else:
|
||
total_remain_weight = 0
|
||
recive_allocation = allocations.filter(to_steward=steward, receiver_state='accepted')
|
||
allocate_allocation = allocations.filter(steward=steward)
|
||
real_weight_of_carcasses = recive_allocation.aggregate(
|
||
total_quantity=Sum('real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses_guild_steward_free_buying_bars = guild_steward_free_buying_bars.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_guild_steward_free_buying_bars = guild_steward_free_sale_bars.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses_guild_steward_free_buying_bars = guild_steward_free_sale_bars.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
real_number_of_carcasses_allocate_allocation = allocate_allocation.aggregate(
|
||
total_quantity=Sum('real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
real_weight_of_carcasses_allocate_allocation = allocate_allocation.aggregate(
|
||
total_quantity=Sum('real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
kill_house_to_stw = allocations.filter(allocation_type='steward_steward')
|
||
quantity_kill_house_to_stw = kill_house_to_stw.aggregate(
|
||
total_quantity=Sum('real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_kill_house_to_stw = kill_house_to_stw.aggregate(
|
||
total_quantity=Sum('real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
kill_house_to_guild = allocations.filter(allocation_type='steward_guild')
|
||
quantity_kill_house_to_guild = kill_house_to_guild.aggregate(
|
||
total_quantity=Sum('real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_kill_house_to_guild = kill_house_to_guild.aggregate(
|
||
total_quantity=Sum('real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
if real_weight_of_carcasses + real_weight_of_carcasses_allocate_allocation > 0:
|
||
list1 = [
|
||
'مباشر',
|
||
f"{steward.guilds_name}-{steward.user.mobile}-{steward.user.city.name}",
|
||
((real_weight_of_carcasses + weight_guild_steward_free_buying_bars) - (
|
||
real_weight_of_carcasses_allocate_allocation + number_of_carcasses_guild_steward_free_buying_bars) + total_remain_weight),
|
||
real_weight_of_carcasses + weight_guild_steward_free_buying_bars,
|
||
len(allocations),
|
||
real_weight_of_carcasses_allocate_allocation + number_of_carcasses_guild_steward_free_buying_bars,
|
||
weight_guild_steward_free_buying_bars,
|
||
len(kill_house_to_stw),
|
||
weight_kill_house_to_stw,
|
||
len(kill_house_to_guild),
|
||
weight_kill_house_to_guild,
|
||
f"%{int((real_weight_of_carcasses_allocate_allocation + number_of_carcasses_guild_steward_free_buying_bars) * 100 / (real_weight_of_carcasses + weight_guild_steward_free_buying_bars)) if (real_weight_of_carcasses + weight_guild_steward_free_buying_bars) > 0 else 0}",
|
||
total_remain_weight
|
||
|
||
]
|
||
create_value(worksheet, list1, l + 1, 3, border_style='thin', width=20)
|
||
l += 1
|
||
l += 5
|
||
list5 = ['شهر']
|
||
kill_house_name = KillHouse.objects.filter(trash=False, out_province=False).order_by('id').values_list(
|
||
'name', flat=True)
|
||
list5.extend(kill_house_name)
|
||
list5.append('مجموع')
|
||
create_header(worksheet, list5, 3, l, border_style='thin', width=20)
|
||
cities = City.objects.filter(trash=False).order_by('id')
|
||
for city in cities:
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
result = get_kill_house_distribution_info(city, date1, date2)
|
||
result1 = all_get_kill_house_distribution_info(city, date1, date2)
|
||
else:
|
||
result = get_kill_house_distribution_info(city)
|
||
result1 = all_get_kill_house_distribution_info(city)
|
||
|
||
create_value(worksheet, result, l + 1, 3, border_style='thin', width=20)
|
||
create_value(worksheet, [result1], l + 1, int(len(list5) + 2), border_style='thin', width=20)
|
||
l += 1
|
||
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()
|
||
result = get_kill_house_distribution_out_province_info(date1, date2)
|
||
else:
|
||
result = get_kill_house_distribution_out_province_info()
|
||
create_value(worksheet, result, l + 1, 3, border_style='thin', width=20)
|
||
|
||
elif sheet_name == 'تخصیصات کشتارگاه به مباشر و صنف':
|
||
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type__in=('killhouse_steward', 'killhouse_guild'),
|
||
trash=False, date__date__gte=date1,
|
||
date__date__lte=date2, kill_house__isnull=False, calculate_status=True).order_by('id')
|
||
else:
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type__in=('killhouse_steward', 'killhouse_guild'),
|
||
trash=False, kill_house__isnull=False, calculate_status=True).order_by('id')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'نام کشتارگاه',
|
||
'نام مالک',
|
||
'شماره مالک',
|
||
'شهر مالک',
|
||
'تاریخ ثبت',
|
||
'نوع تخصیص',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'شهر خریدار',
|
||
'نوع فروش',
|
||
'قیمت هر کیلو(ریال)',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
'کد احراز',
|
||
'وضعیت کد احراز',
|
||
'وضعیت',
|
||
|
||
]
|
||
|
||
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)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد تخصیصات',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'تخصیصات کشتارگاه به مباشرین ', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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
|
||
|
||
if allocations:
|
||
for allocation in allocations:
|
||
l += 1
|
||
if allocation.allocation_type == 'killhouse_steward':
|
||
allocation_type = 'کشتارگاه به مباشر'
|
||
buyer_name = allocation.to_steward.guilds_name
|
||
buyer_mobile = allocation.to_steward.user.mobile
|
||
buyer_city = allocation.to_steward.user.city.name
|
||
elif allocation.allocation_type == 'killhouse_guild':
|
||
allocation_type = 'کشتارگاه به صنف'
|
||
buyer_name = allocation.to_guilds.guilds_name if allocation.to_guilds else '-'
|
||
buyer_mobile = allocation.to_guilds.user.mobile if allocation.to_guilds else '-'
|
||
buyer_city = allocation.to_guilds.user.city.name if allocation.to_guilds else '-'
|
||
|
||
else:
|
||
allocation_type = ''
|
||
buyer_name = ''
|
||
buyer_mobile = ''
|
||
buyer_city = ''
|
||
|
||
if allocation.sell_type == 'exclusive':
|
||
sell_type = 'اختصاصی'
|
||
else:
|
||
sell_type = ''
|
||
system_registration_code = 'ارسال شده' if allocation.system_registration_code == True else 'ارسال نشده'
|
||
state = 'در انتظار تایید' if allocation.state == 'pending' else 'تایید شده'
|
||
list1 = [
|
||
m,
|
||
allocation.kill_house.name,
|
||
allocation.kill_house.kill_house_operator.user.fullname,
|
||
allocation.kill_house.kill_house_operator.user.mobile,
|
||
allocation.kill_house.kill_house_operator.user.city.name,
|
||
str(convert_to_shamsi(datetime=allocation.date)),
|
||
allocation_type,
|
||
buyer_name,
|
||
buyer_mobile,
|
||
buyer_city,
|
||
sell_type,
|
||
allocation.amount,
|
||
allocation.total_amount,
|
||
allocation.weight_of_carcasses,
|
||
allocation.receiver_real_weight_of_carcasses,
|
||
allocation.registration_code,
|
||
system_registration_code,
|
||
state,
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
total_amount_allocations = allocations.aggregate(
|
||
total_quantity=Sum('total_amount')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
value_header_list2 = [
|
||
len(allocations),
|
||
total_amount_allocations,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_amount_allocations,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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")
|
||
elif sheet_name == 'تخصیصات سرد خانه':
|
||
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type='ColdHouse',
|
||
trash=False, date__date__gte=date1,
|
||
date__date__lte=date2, kill_house__isnull=False, calculate_status=True).order_by('id')
|
||
else:
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type='ColdHouse',
|
||
trash=False, kill_house__isnull=False, calculate_status=True).order_by('id')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'فروشنده',
|
||
'نام فروشنده',
|
||
'شماره فروشنده',
|
||
'شهر فروشنده',
|
||
'تاریخ ثبت',
|
||
'نوع تخصیص',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'شهر خریدار',
|
||
'نوع فروش',
|
||
'قیمت هر کیلو(ریال)',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
'کد احراز',
|
||
'وضعیت کد احراز',
|
||
'وضعیت',
|
||
|
||
]
|
||
|
||
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)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد تخصیصات',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'تخصیصات سردخانه', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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
|
||
|
||
if allocations:
|
||
for allocation in allocations:
|
||
l += 1
|
||
if allocation.allocation_type == 'killhouse_steward':
|
||
allocation_type = 'کشتارگاه به مباشر'
|
||
buyer_name = allocation.to_steward.guilds_name
|
||
buyer_mobile = allocation.to_steward.user.mobile
|
||
buyer_city = allocation.to_steward.user.city.name
|
||
elif allocation.allocation_type == 'killhouse_guild':
|
||
allocation_type = 'کشتارگاه به صنف'
|
||
buyer_name = allocation.to_guilds.guilds_name
|
||
buyer_mobile = allocation.to_guilds.user.mobile
|
||
buyer_city = allocation.to_guilds.user.city.name
|
||
elif allocation.allocation_type == 'ColdHouse':
|
||
allocation_type = 'کشتارگاه به سردخانه'
|
||
if allocation.to_cold_house.kill_house:
|
||
buyer_name = allocation.to_cold_house.kill_house.name
|
||
buyer_mobile = allocation.to_cold_house.kill_house.kill_house_operator.user.mobile
|
||
buyer_city = allocation.to_cold_house.kill_house.kill_house_operator.user.city.name
|
||
else:
|
||
buyer_name = allocation.to_cold_house.live_stock_support.user.name
|
||
buyer_mobile = allocation.to_cold_house.live_stock_support.user.mobile
|
||
buyer_city = allocation.to_cold_house.live_stock_support.user.city.name
|
||
elif allocation.allocation_type == 'killhouse_killhouse':
|
||
allocation_type = 'کشتارگاه به کشتارگاه'
|
||
buyer_name = allocation.to_kill_house.kill_house.name
|
||
buyer_mobile = allocation.to_kill_house.kill_house_operator.user.mobile
|
||
buyer_city = allocation.to_kill_house.kill_house_operator.user.city.name
|
||
else:
|
||
allocation_type = ''
|
||
buyer_name = ''
|
||
buyer_mobile = ''
|
||
buyer_city = ''
|
||
|
||
if allocation.sell_type == 'exclusive':
|
||
sell_type = 'اختصاصی'
|
||
else:
|
||
sell_type = 'آزاد'
|
||
system_registration_code = 'ارسال شده' if allocation.system_registration_code == True else 'ارسال نشده'
|
||
state = 'در انتظار تایید' if allocation.state == 'pending' else 'تایید شده'
|
||
list1 = [
|
||
m,
|
||
allocation.kill_house.name,
|
||
allocation.kill_house.kill_house_operator.user.fullname,
|
||
allocation.kill_house.kill_house_operator.user.mobile,
|
||
allocation.kill_house.kill_house_operator.user.city.name,
|
||
str(convert_to_shamsi(datetime=allocation.date)),
|
||
allocation_type,
|
||
buyer_name,
|
||
buyer_mobile,
|
||
buyer_city,
|
||
sell_type,
|
||
allocation.amount,
|
||
allocation.total_amount,
|
||
allocation.weight_of_carcasses,
|
||
allocation.receiver_real_weight_of_carcasses,
|
||
allocation.registration_code,
|
||
system_registration_code,
|
||
state,
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
total_amount_allocations = allocations.aggregate(
|
||
total_quantity=Sum('total_amount')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
value_header_list2 = [
|
||
len(allocations),
|
||
total_amount_allocations,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_amount_allocations,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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")
|
||
elif sheet_name == 'تخصیصات مباشر به صنف':
|
||
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type='steward_guild',
|
||
trash=False, date__date__gte=date1,
|
||
date__date__lte=date2, calculate_status=True).order_by('id')
|
||
else:
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type='steward_guild',
|
||
trash=False, calculate_status=True).order_by('id')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'فروشنده',
|
||
'نام فروشنده',
|
||
'شماره فروشنده',
|
||
'شهر فروشنده',
|
||
'تاریخ ثبت',
|
||
'نوع تخصیص',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'شهر خریدار',
|
||
'نوع فروش',
|
||
'قیمت هر کیلو(ریال)',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
'کد احراز',
|
||
'وضعیت کد احراز',
|
||
'وضعیت',
|
||
|
||
]
|
||
|
||
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)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد تخصیصات',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'تخصیصات مباشر به صنف ', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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
|
||
|
||
if allocations:
|
||
for allocation in allocations:
|
||
l += 1
|
||
if allocation.allocation_type == 'killhouse_steward':
|
||
allocation_type = 'کشتارگاه به مباشر'
|
||
buyer_name = allocation.to_steward.guilds_name
|
||
buyer_mobile = allocation.to_steward.user.mobile
|
||
buyer_city = allocation.to_steward.user.city.name
|
||
elif allocation.allocation_type == 'killhouse_guild' or allocation.allocation_type == 'steward_guild':
|
||
allocation_type = 'مباشر به صنف'
|
||
buyer_name = allocation.to_guilds.guilds_name
|
||
buyer_mobile = allocation.to_guilds.user.mobile
|
||
buyer_city = allocation.to_guilds.user.city.name
|
||
|
||
else:
|
||
allocation_type = ''
|
||
buyer_name = ''
|
||
buyer_mobile = ''
|
||
buyer_city = ''
|
||
|
||
if allocation.sell_type == 'exclusive':
|
||
sell_type = 'اختصاصی'
|
||
else:
|
||
sell_type = ''
|
||
system_registration_code = 'ارسال شده' if allocation.system_registration_code == True else 'ارسال نشده'
|
||
state = 'در انتظار تایید' if allocation.state == 'pending' else 'تایید شده'
|
||
list1 = [
|
||
m,
|
||
allocation.steward.guilds_name,
|
||
allocation.steward.user.fullname,
|
||
allocation.steward.user.mobile,
|
||
allocation.steward.user.city.name,
|
||
str(convert_to_shamsi(datetime=allocation.date)),
|
||
allocation_type,
|
||
buyer_name,
|
||
buyer_mobile,
|
||
buyer_city,
|
||
sell_type,
|
||
allocation.amount,
|
||
allocation.total_amount,
|
||
allocation.weight_of_carcasses,
|
||
allocation.receiver_real_weight_of_carcasses,
|
||
allocation.registration_code,
|
||
system_registration_code,
|
||
state,
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
total_amount_allocations = allocations.aggregate(
|
||
total_quantity=Sum('total_amount')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
value_header_list2 = [
|
||
len(allocations),
|
||
total_amount_allocations,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_amount_allocations,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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")
|
||
elif sheet_name == 'تخصیصات صنف به صنف':
|
||
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type='guild_guild',
|
||
trash=False, date__date__gte=date1,
|
||
date__date__lte=date2, calculate_status=True).order_by('id')
|
||
else:
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type='guild_guild',
|
||
trash=False, calculate_status=True).order_by('id')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'فروشنده',
|
||
'نام فروشنده',
|
||
'شماره فروشنده',
|
||
'شهر فروشنده',
|
||
'تاریخ ثبت',
|
||
'نوع تخصیص',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'شهر خریدار',
|
||
'نوع فروش',
|
||
'قیمت هر کیلو(ریال)',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
'کد احراز',
|
||
'وضعیت کد احراز',
|
||
'وضعیت',
|
||
|
||
]
|
||
|
||
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)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد تخصیصات',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'تخصیصات صنف به صنف ', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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
|
||
|
||
if allocations:
|
||
for allocation in allocations:
|
||
l += 1
|
||
if allocation.allocation_type == 'killhouse_steward':
|
||
allocation_type = 'کشتارگاه به مباشر'
|
||
buyer_name = allocation.to_steward.guilds_name
|
||
buyer_mobile = allocation.to_steward.user.mobile
|
||
buyer_city = allocation.to_steward.user.city.name
|
||
elif allocation.allocation_type == 'killhouse_guild' or allocation.allocation_type == 'steward_guild' or \
|
||
allocation.allocation_type == 'guild_guild':
|
||
allocation_type = 'صنف به صنف'
|
||
buyer_name = allocation.to_guilds.guilds_name
|
||
buyer_mobile = allocation.to_guilds.user.mobile
|
||
buyer_city = allocation.to_guilds.user.city.name
|
||
|
||
else:
|
||
allocation_type = ''
|
||
buyer_name = ''
|
||
buyer_mobile = ''
|
||
buyer_city = ''
|
||
|
||
if allocation.sell_type == 'exclusive':
|
||
sell_type = 'اختصاصی'
|
||
else:
|
||
sell_type = ''
|
||
system_registration_code = 'ارسال شده' if allocation.system_registration_code == True else 'ارسال نشده'
|
||
state = 'در انتظار تایید' if allocation.state == 'pending' else 'تایید شده'
|
||
list1 = [
|
||
m,
|
||
allocation.steward.guilds_name,
|
||
allocation.steward.user.fullname,
|
||
allocation.steward.user.mobile,
|
||
allocation.steward.user.city.name,
|
||
str(convert_to_shamsi(datetime=allocation.date)),
|
||
allocation_type,
|
||
buyer_name,
|
||
buyer_mobile,
|
||
buyer_city,
|
||
sell_type,
|
||
allocation.amount,
|
||
allocation.total_amount,
|
||
allocation.weight_of_carcasses,
|
||
allocation.receiver_real_weight_of_carcasses,
|
||
allocation.registration_code,
|
||
system_registration_code,
|
||
state,
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
total_amount_allocations = allocations.aggregate(
|
||
total_quantity=Sum('total_amount')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
value_header_list2 = [
|
||
len(allocations),
|
||
total_amount_allocations,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_amount_allocations,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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")
|
||
# elif sheet_name == 'تخصیصات مباشر به مباشر':
|
||
#
|
||
# if 'date1' in request.GET and request.GET['date1']:
|
||
#
|
||
# date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
#
|
||
# date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
#
|
||
# allocations = StewardAllocation.objects.filter(
|
||
# allocation_type='steward_guild',
|
||
# trash=False, date__date__gte=date1,
|
||
# date__date__lte=date2, kill_house__isnull=False, calculate_status=True).order_by('id')
|
||
# else:
|
||
# allocations = StewardAllocation.objects.filter(
|
||
# allocation_type='steward_guild',
|
||
# trash=False, kill_house__isnull=False, calculate_status=True).order_by('id')
|
||
#
|
||
# excel_options = [
|
||
# 'ردیف',
|
||
# 'نام کشتارگاه',
|
||
# 'نام مالک',
|
||
# 'شماره مالک',
|
||
# 'شهر مالک',
|
||
# 'تاریخ ثبت',
|
||
# 'نوع تخصیص',
|
||
# 'خریدار',
|
||
# 'تلفن خریدار',
|
||
# 'شهر خریدار',
|
||
# 'نوع فروش',
|
||
# 'قیمت هر کیلو(ریال)',
|
||
# 'قیمت کل',
|
||
# 'حجم تخصیصی',
|
||
# 'وزن تخصیصی',
|
||
# 'حجم تایید شده',
|
||
# 'وزن تایید شده',
|
||
# 'کد احراز',
|
||
# 'وضعیت کد احراز',
|
||
# 'وضعیت',
|
||
#
|
||
# ]
|
||
#
|
||
# 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)
|
||
# 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()
|
||
# from_date_1 = shamsi_date(date1)
|
||
# to_date_1 = shamsi_date(date2)
|
||
# worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
# header_list2 = [
|
||
# 'تعداد تخصیصات',
|
||
# 'قیمت کل',
|
||
# 'حجم تخصیصی',
|
||
# 'وزن تخصیصی',
|
||
# 'حجم تایید شده',
|
||
# 'وزن تایید شده',
|
||
#
|
||
# ]
|
||
#
|
||
# for col_num, option in enumerate(header_list2, 5):
|
||
# 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
|
||
# create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
#
|
||
# excel_description(worksheet, 'A1', f'تخصیصات مباشر به صنف ', size=11, color='red',
|
||
# row2='D1')
|
||
#
|
||
# 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
|
||
#
|
||
# if allocations:
|
||
# for allocation in allocations:
|
||
# l += 1
|
||
# if allocation.allocation_type == 'killhouse_steward' :
|
||
# allocation_type = 'کشتارگاه به مباشر'
|
||
# buyer_name = allocation.to_steward.guilds_name
|
||
# buyer_mobile = allocation.to_steward.user.mobile
|
||
# buyer_city = allocation.to_steward.user.city.name
|
||
# elif allocation.allocation_type == 'killhouse_guild' or allocation.allocation_type == 'steward_guild':
|
||
# allocation_type = 'کشتارگاه به صنف'
|
||
# buyer_name = allocation.to_guilds.guilds_name
|
||
# buyer_mobile = allocation.to_guilds.user.mobile
|
||
# buyer_city = allocation.to_guilds.user.city.name
|
||
#
|
||
# else:
|
||
# allocation_type = ''
|
||
# buyer_name = ''
|
||
# buyer_mobile = ''
|
||
# buyer_city = ''
|
||
#
|
||
# if allocation.sell_type == 'exclusive':
|
||
# sell_type = 'اختصاصی'
|
||
# else:
|
||
# sell_type = ''
|
||
# system_registration_code = 'ارسال شده' if allocation.system_registration_code == True else 'ارسال نشده'
|
||
# state = 'در انتظار تایید' if allocation.state == 'pending' else 'تایید شده'
|
||
# list1 = [
|
||
# m,
|
||
# allocation.kill_house.name,
|
||
# allocation.kill_house.kill_house_operator.user.fullname,
|
||
# allocation.kill_house.kill_house_operator.user.mobile,
|
||
# allocation.kill_house.kill_house_operator.user.city.name,
|
||
# str(convert_to_shamsi(datetime=allocation.date)),
|
||
# allocation_type,
|
||
# buyer_name,
|
||
# buyer_mobile,
|
||
# buyer_city,
|
||
# sell_type,
|
||
# allocation.amount,
|
||
# allocation.total_amount,
|
||
# allocation.number_of_carcasses,
|
||
# allocation.weight_of_carcasses,
|
||
# allocation.receiver_real_number_of_carcasses,
|
||
# allocation.receiver_real_weight_of_carcasses,
|
||
# allocation.registration_code,
|
||
# system_registration_code,
|
||
# state,
|
||
#
|
||
# ]
|
||
# m += 1
|
||
# create_value(worksheet,list1,l+1,1,height=20,width=30)
|
||
#
|
||
# total_amount_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('total_amount')).get(
|
||
# 'total_quantity') or 0
|
||
# number_of_carcasses_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('number_of_carcasses')).get(
|
||
# 'total_quantity') or 0
|
||
# weight_of_carcasses_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('weight_of_carcasses')).get(
|
||
# 'total_quantity') or 0
|
||
# receiver_real_number_of_carcasses_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('receiver_real_number_of_carcasses')).get(
|
||
# 'total_quantity') or 0
|
||
# receiver_real_weight_of_carcasses_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('receiver_real_weight_of_carcasses')).get(
|
||
# 'total_quantity') or 0
|
||
#
|
||
# value_header_list2 = [
|
||
# len(allocations),
|
||
# total_amount_allocations,
|
||
# number_of_carcasses_allocations,
|
||
# weight_of_carcasses_allocations,
|
||
# receiver_real_number_of_carcasses_allocations,
|
||
# receiver_real_weight_of_carcasses_allocations,
|
||
#
|
||
# ]
|
||
# for item in range(len(value_header_list2)):
|
||
# cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
# value = value_header_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(size=10, bold=True)
|
||
# list2 = [
|
||
# 'مجموع==>',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# total_amount_allocations,
|
||
# number_of_carcasses_allocations,
|
||
# weight_of_carcasses_allocations,
|
||
# receiver_real_number_of_carcasses_allocations,
|
||
# receiver_real_weight_of_carcasses_allocations,
|
||
# '',
|
||
# '',
|
||
# '',
|
||
#
|
||
# ]
|
||
# 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, float)):
|
||
# 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")
|
||
elif sheet_name == 'عملکرد مباشرین':
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type__in=('killhouse_steward', 'killhouse_guild'),
|
||
trash=False, date__date__gte=date1,
|
||
date__date__lte=date2, calculate_status=True).order_by('id')
|
||
else:
|
||
allocations = StewardAllocation.objects.filter(
|
||
allocation_type__in=('killhouse_steward', 'killhouse_guild'),
|
||
trash=False, calculate_status=True).order_by('id')
|
||
user_value = list(allocations.values_list('to_steward__user__user', flat=True).distinct())
|
||
user_value2 = list(allocations.values_list('to_guilds__user__user', flat=True).distinct())
|
||
user_value3 = list(set(user_value + user_value2))
|
||
excel_options = [
|
||
'ردیف',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'شهر خریدار',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
'تخصیص دهنده',
|
||
|
||
]
|
||
|
||
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)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد مباشرین',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'عملکرد مباشرین', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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
|
||
|
||
if allocations:
|
||
for user in user_value3:
|
||
user_new = SystemUserProfile.objects.filter(trash=False, user=user).first()
|
||
guilds = Guilds.objects.filter(trash=False, user=user_new).first()
|
||
new_allocation = allocations.filter(Q(to_steward=guilds) | Q(to_guilds=guilds))
|
||
kill_house_name = new_allocation.values_list('kill_house__name', flat=True).distinct()
|
||
kill_house_names = [str(name) for name in kill_house_name if name is not None]
|
||
|
||
if kill_house_names:
|
||
kill_house_name_str = ' / '.join(set(kill_house_names))
|
||
else:
|
||
kill_house_name_str = '-'
|
||
weight_of_carcasses_allocations = new_allocation.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_number_of_carcasses_allocations = new_allocation.aggregate(
|
||
total_quantity=Sum('receiver_real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_weight_of_carcasses_allocations = new_allocation.aggregate(
|
||
total_quantity=Sum('receiver_real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
if guilds:
|
||
l += 1
|
||
|
||
list1 = [
|
||
m,
|
||
guilds.guilds_name if guilds else '-',
|
||
user_new.mobile if user_new else '-',
|
||
user_new.city.name if user_new else '-',
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
kill_house_name_str
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_number_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
receiver_real_weight_of_carcasses_allocations = allocations.aggregate(
|
||
total_quantity=Sum('receiver_real_weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
#
|
||
value_header_list2 = [
|
||
len(user_value3),
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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")
|
||
|
||
|
||
|
||
# elif sheet_name == 'تخصیصات مباشرین به صنوف':
|
||
#
|
||
# if 'date1' in request.GET and request.GET['date1']:
|
||
#
|
||
# date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
#
|
||
# date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
#
|
||
# allocations = StewardAllocation.objects.filter(allocation_type__in=('steward_guild', 'steward_steward'),
|
||
# trash=False, date__date__gte=date1,
|
||
# date__date__lte=date2, calculate_status=True
|
||
# ).order_by('id')
|
||
# else:
|
||
# allocations = StewardAllocation.objects.filter(allocation_type__in=('steward_guild', 'steward_steward'),
|
||
# trash=False, calculate_status=True).order_by('id')
|
||
#
|
||
# excel_options = [
|
||
# 'ردیف',
|
||
# 'ماهیت',
|
||
# 'نام مالک',
|
||
# 'شماره مالک',
|
||
# 'شهر مالک',
|
||
# 'تاریخ ثبت',
|
||
# 'نوع تخصیص',
|
||
# 'خریدار',
|
||
# 'تلفن خریدار',
|
||
# 'شهر خریدار',
|
||
# 'نوع فروش',
|
||
# 'قیمت هر کیلو(ریال)',
|
||
# 'قیمت کل',
|
||
# 'حجم تخصیصی',
|
||
# 'وزن تخصیصی',
|
||
# 'حجم تایید شده',
|
||
# 'وزن تایید شده',
|
||
# 'کد احراز',
|
||
# 'وضعیت کد احراز',
|
||
# 'وضعیت',
|
||
#
|
||
# ]
|
||
#
|
||
# cell = worksheet.cell(row=1, column=1)
|
||
# cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
# red_font = Font(color="C00000", bold=True)
|
||
# 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()
|
||
# from_date_1 = shamsi_date(date1)
|
||
# to_date_1 = shamsi_date(date2)
|
||
# worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
# header_list2 = [
|
||
# 'تعداد تخصیصات',
|
||
# 'قیمت کل',
|
||
# 'حجم تخصیصی',
|
||
# 'وزن تخصیصی',
|
||
# 'حجم تایید شده',
|
||
# 'وزن تایید شده',
|
||
#
|
||
# ]
|
||
#
|
||
# for col_num, option in enumerate(header_list2, 5):
|
||
# 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
|
||
# create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
#
|
||
# excel_description(worksheet, 'A1', f'تخصیصات کشتارگاه به صنف ', size=11, color='red',
|
||
# row2='D1')
|
||
#
|
||
# 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
|
||
#
|
||
# if allocations:
|
||
# for allocation in allocations:
|
||
# l += 1
|
||
# if allocation.allocation_type == 'killhouse_steward':
|
||
# allocation_type = 'کشتارگاه به مباشر'
|
||
# buyer_name = allocation.to_steward.guilds_name
|
||
# buyer_mobile = allocation.to_steward.user.mobile
|
||
# buyer_city = allocation.to_steward.user.city.name
|
||
# elif allocation.allocation_type == 'killhouse_guild':
|
||
# allocation_type = 'کشتارگاه به صنف'
|
||
# buyer_name = allocation.to_guilds.guilds_name
|
||
# buyer_mobile = allocation.to_guilds.user.mobile
|
||
# buyer_city = allocation.to_guilds.user.city.name
|
||
# elif allocation.allocation_type == 'steward_guild':
|
||
# allocation_type = 'مباشر به صنف'
|
||
# buyer_name = allocation.to_guilds.guilds_name
|
||
# buyer_mobile = allocation.to_guilds.user.mobile
|
||
# buyer_city = allocation.to_guilds.user.city.name
|
||
# elif allocation.allocation_type == 'steward_steward':
|
||
# allocation_type = 'مباشر به مباشر'
|
||
# buyer_name = allocation.to_steward.guilds_name
|
||
# buyer_mobile = allocation.to_steward.user.mobile
|
||
# buyer_city = allocation.to_steward.user.city.name
|
||
# else:
|
||
# allocation_type = ''
|
||
# buyer_name = ''
|
||
# buyer_mobile = ''
|
||
# buyer_city = ''
|
||
#
|
||
# if allocation.sell_type == 'exclusive':
|
||
# sell_type = 'اختصاصی'
|
||
# else:
|
||
# sell_type = ''
|
||
# system_registration_code = 'ارسال شده' if allocation.system_registration_code == True else 'ارسال نشده'
|
||
# state = 'در انتظار تایید' if allocation.state == 'pending' else 'تایید شده'
|
||
# type = 'مباشر' if allocation.steward.steward == True else 'صنف'
|
||
# list1 = [
|
||
# m,
|
||
# type,
|
||
# allocation.steward.user.fullname,
|
||
# allocation.steward.user.mobile,
|
||
# allocation.steward.user.city.name,
|
||
# str(convert_to_shamsi(datetime=allocation.date)),
|
||
# allocation_type,
|
||
# buyer_name,
|
||
# buyer_mobile,
|
||
# buyer_city,
|
||
# sell_type,
|
||
# allocation.amount,
|
||
# allocation.total_amount,
|
||
# allocation.number_of_carcasses,
|
||
# allocation.weight_of_carcasses,
|
||
# allocation.receiver_real_number_of_carcasses,
|
||
# allocation.receiver_real_weight_of_carcasses,
|
||
# allocation.registration_code,
|
||
# system_registration_code,
|
||
# state,
|
||
#
|
||
# ]
|
||
# m += 1
|
||
# create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
#
|
||
# total_amount_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('total_amount')).get(
|
||
# 'total_quantity') or 0
|
||
# number_of_carcasses_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('number_of_carcasses')).get(
|
||
# 'total_quantity') or 0
|
||
# weight_of_carcasses_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('weight_of_carcasses')).get(
|
||
# 'total_quantity') or 0
|
||
# receiver_real_number_of_carcasses_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('receiver_real_number_of_carcasses')).get(
|
||
# 'total_quantity') or 0
|
||
# receiver_real_weight_of_carcasses_allocations = allocations.aggregate(
|
||
# total_quantity=Sum('receiver_real_weight_of_carcasses')).get(
|
||
# 'total_quantity') or 0
|
||
#
|
||
# value_header_list2 = [
|
||
# len(allocations),
|
||
# total_amount_allocations,
|
||
# number_of_carcasses_allocations,
|
||
# weight_of_carcasses_allocations,
|
||
# receiver_real_number_of_carcasses_allocations,
|
||
# receiver_real_weight_of_carcasses_allocations,
|
||
#
|
||
# ]
|
||
# for item in range(len(value_header_list2)):
|
||
# cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
# value = value_header_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(size=10, bold=True)
|
||
# list2 = [
|
||
# 'مجموع==>',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# total_amount_allocations,
|
||
# number_of_carcasses_allocations,
|
||
# weight_of_carcasses_allocations,
|
||
# receiver_real_number_of_carcasses_allocations,
|
||
# receiver_real_weight_of_carcasses_allocations,
|
||
# '',
|
||
# '',
|
||
# '',
|
||
#
|
||
# ]
|
||
# 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, float)):
|
||
# 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")
|
||
elif sheet_name == 'تراکنش های صنوف':
|
||
|
||
if 'date1' in request.GET and 'date2' 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()
|
||
guilds = Guilds.objects.filter(
|
||
id__in=PosMachineTransactions.objects.filter(
|
||
trash=False,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
pos__guild__isnull=False,
|
||
paid=True
|
||
).values_list('pos__guild__id', flat=True).distinct()
|
||
)
|
||
else:
|
||
guilds = Guilds.objects.filter(
|
||
id__in=PosMachineTransactions.objects.filter(
|
||
trash=False,
|
||
pos__guild__isnull=False,
|
||
paid=True
|
||
).values_list('pos__guild__id', flat=True).distinct()
|
||
)
|
||
|
||
serializer = GuildsPosMachineForTransactionsSerializer(guilds, many=True, context={'request': request})
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'نام واحد صنفی',
|
||
'موبایل',
|
||
'شهر',
|
||
'تعداد تراکنش ها',
|
||
'مبلغ کل تراکنش ها',
|
||
'کل ورودی به انبار(کیلوگرم)',
|
||
'کل فروش(کیلوگرم)',
|
||
'مانده انبار(کیلوگرم)',
|
||
|
||
]
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
red_font = Font(color="C00000", bold=True)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد تراکنش ها',
|
||
'تعداد صنوف',
|
||
'مبلغ کل تراکنش ها',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'تراکنش های صنف ', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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
|
||
|
||
if serializer.data:
|
||
for data in serializer.data:
|
||
l += 1
|
||
|
||
list1 = [
|
||
m,
|
||
data['guilds_name'],
|
||
data['user']['mobile'],
|
||
data['user']['city']['name'],
|
||
data['transaction']['len_transaction'],
|
||
data['transaction']['total_price'],
|
||
data['transaction']['total_carcasses_weight'],
|
||
data['transaction']['real_allocated_weight'],
|
||
data['transaction']['total_remain_weight'],
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
pos = PosMachineTransactions.objects.filter(trash=False, pos__guild__in=guilds, paid=True)
|
||
total_price = pos.aggregate(total=Sum('price'))[
|
||
'total'] or 0
|
||
|
||
value_header_list2 = [
|
||
len(pos),
|
||
len(guilds),
|
||
total_price,
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
len_transaction = sum(item['transaction'].get('len_transaction', 0) for item in serializer.data)
|
||
total_price = sum(item['transaction'].get('total_price', 0) for item in serializer.data)
|
||
total_carcasses_weight = sum(
|
||
item['transaction'].get('total_carcasses_weight', 0) for item in serializer.data)
|
||
real_allocated_weight = sum(item['transaction'].get('real_allocated_weight', 0) for item in serializer.data)
|
||
total_remain_weight = sum(item['transaction'].get('total_remain_weight', 0) for item in serializer.data)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
len_transaction,
|
||
total_price,
|
||
total_carcasses_weight,
|
||
real_allocated_weight,
|
||
total_remain_weight,
|
||
|
||
]
|
||
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, float)):
|
||
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 login_user_excel(request):
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
accesstokens = AccessToken.objects.filter(created__date__gte=date1, created__date__lte=date2).select_related(
|
||
'user').order_by('-id')
|
||
else:
|
||
accesstokens = AccessToken.objects.filter(created__date__gt='2024-12-15').select_related('user').order_by('-id')
|
||
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_CELL
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 1, 2, 20, width=30)
|
||
|
||
l = 2
|
||
for accesstoken in accesstokens:
|
||
user = SystemUserProfile.objects.get(user=accesstoken.user)
|
||
role_list = [role.name for role in user.role.all()]
|
||
date = convert_to_shamsi(datetime=accesstoken.created)
|
||
list1 = [
|
||
m,
|
||
user.fullname,
|
||
user.mobile,
|
||
str(date),
|
||
accesstoken.token,
|
||
str(role_list),
|
||
user.city.name if user.city else '-'
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=20)
|
||
m += 1
|
||
l += 1
|
||
|
||
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 sub_section_of_cooperative_share_detail(request):
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
||
archive_wage=False, return_to_province=False,
|
||
state__in=('pending', 'accepted'),
|
||
first_car_allocated_quantity=0).order_by('id')
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
trash=False, calculate_status=True
|
||
)
|
||
|
||
total_province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
total_province_live_quantity = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
total_province_live_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
total_province_live_quantity += kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0
|
||
|
||
total_province_carcasses_weight = total_province_live_weight * 0.75
|
||
|
||
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight(
|
||
kill_houses)
|
||
|
||
# return Response(total_pure_province_carcasses_weight)
|
||
internal_total_pure_province_carcasses_weight = (
|
||
total_pure_province_carcasses_weight / total_province_carcasses_weight) * total_province_carcasses_weight
|
||
external_total_pure_province_carcasses_weight = total_province_carcasses_weight - internal_total_pure_province_carcasses_weight
|
||
|
||
total_pure_province_carcasses_price = internal_total_pure_province_carcasses_weight * province_live_wage_amount
|
||
total_out_selling_province_carcasses_price = external_total_pure_province_carcasses_weight * free_sell_carcesses_weight_amount
|
||
|
||
poultries = Poultry.objects.filter(trash=False, city_operator__isnull=False).order_by('id')
|
||
hatchings = PoultryHatching.objects.filter(poultry__in=poultries, killed_quantity__gt=0, trash=False).order_by(
|
||
'poultry')
|
||
|
||
hatching_quantity = hatchings.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'), out=True,
|
||
out_province_request_cancel=False, temporary_trash=False,
|
||
has_wage=True, wage_pay=True,
|
||
temporary_deleted=False, hatching__in=hatchings)
|
||
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
out_province_poultry_request_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
|
||
union_out_province_poultry_request_amount = poultry_requests.aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||
union_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
||
|
||
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='union').first().percent / 100
|
||
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
||
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
||
|
||
city_percent_province_kill_request = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='province-kill-request').first().percent / 100
|
||
city_percent_out_poultry_request = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='poultry-sell-out-province').first().percent / 100
|
||
city_percent_out_sell_carcasses = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='carcasse-sell').first().percent / 100
|
||
|
||
union_total_wage = union_province_kill_request_wage + union_out_province_poultry_request_amount + union_free_sell_carcasses_wage
|
||
hatching_killing_percent = ((
|
||
out_province_poultry_request_quantity + total_province_live_quantity) / hatching_quantity) * 100
|
||
|
||
city_province_kill_request_wage = union_province_kill_request_wage * city_percent_province_kill_request
|
||
city_out_province_poultry_request = union_out_province_poultry_request_amount * city_percent_out_poultry_request
|
||
city_out_province_sell_carcasses = union_free_sell_carcasses_wage * city_percent_out_sell_carcasses
|
||
city_total_wage = city_province_kill_request_wage + city_out_province_poultry_request + city_out_province_sell_carcasses
|
||
city_operator_deposit = SubSectorTransactions.objects.filter(trash=False)
|
||
city_deposit = city_operator_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
||
city_total_remain_wage_amount = city_total_wage - city_deposit
|
||
|
||
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_CELL
|
||
|
||
header_list = [
|
||
'تعداد فارم',
|
||
'تعداد کل جوجه ریزی',
|
||
'حجم کل جوجه ریزی',
|
||
'حجم کل کشتارشده داخل استان',
|
||
'وزن کل کشتار شده داخل استان',
|
||
'وزن لاشه کشتار شده داخل استان',
|
||
'وزن کل لاشه توزیع داخل استان',
|
||
'وزن کل لاشه توزیع خارج استان',
|
||
'حجم کل فروش به خارج استان',
|
||
'وزن کل فروش به خارج از استان',
|
||
'حجم کل کشتار شده',
|
||
'درصد کشتار شده نسبت به جوجه ریزی',
|
||
'تعرفه زنده خارج از استان(اتحادیه)',
|
||
'تعرفه کشتار و توزیع داخل استان(اتحادیه)',
|
||
'تعرفه کشتار و توزیع خارج ازاستان(اتحادیه)',
|
||
'کل تعرفه سهم اتحادیه استان',
|
||
'تعرفه سهم زیر بخش ها',
|
||
'واریزی اتحادیه به زیر بخش ها',
|
||
'مانده تعرفه',
|
||
]
|
||
create_header(worksheet, header_list, 4, 2, 21, 16.01)
|
||
|
||
excel_description(worksheet, 'A1', 'گزارش جزئیات تعرفه سهم تعاونی ها', size=11, color='red', row2='C1')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
city_operators = CityOperator.objects.filter(address__province=user.province, trash=False)
|
||
if 'operators' in request.GET:
|
||
|
||
serializer = CityOperatorForSubSectorTransactionsSerializer(city_operators, many=True,
|
||
context={'request': request})
|
||
else:
|
||
serializer = CityOperatorForSubSectorSerializer(city_operators, many=True, context={'request': request})
|
||
for data in serializer.data:
|
||
list1 = [
|
||
m,
|
||
data['unit_name'],
|
||
data['user']['city'],
|
||
data['user']['fullname'],
|
||
data['user']['mobile'],
|
||
data['wage_info']['poultries'],
|
||
data['wage_info']['hatchings'],
|
||
data['wage_info']['hatchings_quantity'],
|
||
data['wage_info']['total_province_kill_requests_quantity'],
|
||
data['wage_info']['total_province_kill_requests_weight'],
|
||
data['wage_info']['total_province_carcasses_weight'],
|
||
data['wage_info']['total_pure_internal_province_carcasses_weight'],
|
||
data['wage_info']['total_pure_external_province_carcasses_weight'],
|
||
data['wage_info']['out_province_poultry_request_quantity'],
|
||
data['wage_info']['out_province_poultry_request_weight'],
|
||
data['wage_info']['total_killed_quantity'],
|
||
data['wage_info']['hatching_killing_percent'],
|
||
data['wage_info']['out_province_poultry_request_amount'],
|
||
data['wage_info']['total_pure_internal_province_carcasses_amount'],
|
||
data['wage_info']['total_pure_external_province_carcasses_amount'],
|
||
data['wage_info']['total_wage_amount'],
|
||
data['wage_info']['city_deposit'],
|
||
data['wage_info']['total_remain_wage_amount'],
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
|
||
value_header_list = [
|
||
len(poultries),
|
||
len(hatchings),
|
||
hatching_quantity,
|
||
total_province_live_quantity,
|
||
total_province_live_weight,
|
||
total_province_carcasses_weight,
|
||
internal_total_pure_province_carcasses_weight,
|
||
external_total_pure_province_carcasses_weight,
|
||
out_province_poultry_request_quantity,
|
||
out_province_poultry_request_weight,
|
||
out_province_poultry_request_quantity + total_province_live_quantity,
|
||
hatching_killing_percent,
|
||
union_free_sell_carcasses_wage,
|
||
|
||
union_province_kill_request_wage,
|
||
union_out_province_poultry_request_amount,
|
||
|
||
union_total_wage,
|
||
city_total_wage,
|
||
city_deposit,
|
||
city_total_remain_wage_amount,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4)
|
||
|
||
poultries = sum(item['wage_info'].get('poultries', 0) for item in serializer.data)
|
||
hatchings = sum(item['wage_info'].get('hatchings', 0) for item in serializer.data)
|
||
hatchings_quantity = sum(item['wage_info'].get('hatchings_quantity', 0) for item in serializer.data)
|
||
total_province_kill_requests_quantity = sum(
|
||
item['wage_info'].get('total_province_kill_requests_quantity', 0) for item in serializer.data)
|
||
total_province_kill_requests_weight = sum(
|
||
item['wage_info'].get('total_province_kill_requests_weight', 0) for item in serializer.data)
|
||
total_province_carcasses_weight = sum(
|
||
item['wage_info'].get('total_province_carcasses_weight', 0) for item in serializer.data)
|
||
total_pure_internal_province_carcasses_weight = sum(
|
||
item['wage_info'].get('total_pure_internal_province_carcasses_weight', 0) for item in serializer.data)
|
||
total_pure_external_province_carcasses_weight = sum(
|
||
item['wage_info'].get('total_pure_external_province_carcasses_weight', 0) for item in serializer.data)
|
||
out_province_poultry_request_quantity = sum(
|
||
item['wage_info'].get('out_province_poultry_request_quantity', 0) for item in serializer.data)
|
||
out_province_poultry_request_weight = sum(
|
||
item['wage_info'].get('out_province_poultry_request_weight', 0) for item in serializer.data)
|
||
total_killed_quantity = sum(item['wage_info'].get('total_killed_quantity', 0) for item in serializer.data)
|
||
hatching_killing_percent = sum(item['wage_info'].get('hatching_killing_percent', 0) for item in serializer.data)
|
||
out_province_poultry_request_amount = sum(
|
||
item['wage_info'].get('out_province_poultry_request_amount', 0) for item in serializer.data)
|
||
total_pure_internal_province_carcasses_amount = sum(
|
||
item['wage_info'].get('total_pure_internal_province_carcasses_amount', 0) for item in serializer.data)
|
||
total_pure_external_province_carcasses_amount = sum(
|
||
item['wage_info'].get('total_pure_external_province_carcasses_amount', 0) for item in serializer.data)
|
||
total_wage_amount = sum(item['wage_info'].get('total_wage_amount', 0) for item in serializer.data)
|
||
city_deposit = sum(item['wage_info'].get('city_deposit', 0) for item in serializer.data)
|
||
total_remain_wage_amount = sum(item['wage_info'].get('total_remain_wage_amount', 0) for item in serializer.data)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
poultries,
|
||
hatchings,
|
||
hatchings_quantity,
|
||
total_province_kill_requests_quantity,
|
||
total_province_kill_requests_weight,
|
||
total_province_carcasses_weight,
|
||
total_pure_internal_province_carcasses_weight,
|
||
total_pure_external_province_carcasses_weight,
|
||
out_province_poultry_request_quantity,
|
||
out_province_poultry_request_weight,
|
||
total_killed_quantity,
|
||
hatching_killing_percent,
|
||
out_province_poultry_request_amount,
|
||
total_pure_internal_province_carcasses_amount,
|
||
total_pure_external_province_carcasses_amount,
|
||
total_wage_amount,
|
||
city_deposit,
|
||
total_remain_wage_amount,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 1, 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 city_operator_for_sub_sector_excel(request):
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
sheet_name = 'اطلاعات کلی'
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
city_operators = CityOperator.objects.filter(address__province=user.province, trash=False)
|
||
if sheet_name == 'اطلاعات کلی':
|
||
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=25, width=25, border_style='thin', color='C00000')
|
||
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
||
archive_wage=False, return_to_province=False,
|
||
state__in=('pending', 'accepted'),
|
||
first_car_allocated_quantity=0).order_by('id')
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
trash=False, calculate_status=True
|
||
)
|
||
|
||
total_province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
total_province_live_quantity = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
total_province_live_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
total_province_live_quantity += kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0
|
||
|
||
total_province_carcasses_weight = total_province_live_weight * 0.75
|
||
|
||
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight(
|
||
kill_houses)
|
||
|
||
internal_total_pure_province_carcasses_weight = (
|
||
total_pure_province_carcasses_weight / total_province_carcasses_weight) * total_province_carcasses_weight
|
||
external_total_pure_province_carcasses_weight = total_province_carcasses_weight - internal_total_pure_province_carcasses_weight
|
||
|
||
total_pure_province_carcasses_price = internal_total_pure_province_carcasses_weight * province_live_wage_amount
|
||
total_out_selling_province_carcasses_price = external_total_pure_province_carcasses_weight * free_sell_carcesses_weight_amount
|
||
|
||
poultries = Poultry.objects.filter(trash=False, city_operator__isnull=False).order_by('id')
|
||
hatchings = PoultryHatching.objects.filter(poultry__in=poultries, killed_quantity__gt=0, trash=False).order_by(
|
||
'poultry')
|
||
|
||
hatching_quantity = hatchings.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'), out=True,
|
||
out_province_request_cancel=False, temporary_trash=False,
|
||
has_wage=True, wage_pay=True,
|
||
temporary_deleted=False, hatching__in=hatchings)
|
||
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
out_province_poultry_request_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
|
||
union_out_province_poultry_request_amount = poultry_requests.aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||
union_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
||
|
||
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='union').first().percent / 100
|
||
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
||
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
||
|
||
city_percent_province_kill_request = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='province-kill-request').first().percent / 100
|
||
city_percent_out_poultry_request = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='poultry-sell-out-province').first().percent / 100
|
||
city_percent_out_sell_carcasses = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='carcasse-sell').first().percent / 100
|
||
|
||
union_total_wage = union_province_kill_request_wage + union_out_province_poultry_request_amount + union_free_sell_carcasses_wage
|
||
hatching_killing_percent = ((
|
||
out_province_poultry_request_quantity + total_province_live_quantity) / hatching_quantity) * 100
|
||
|
||
city_province_kill_request_wage = union_province_kill_request_wage * city_percent_province_kill_request
|
||
city_out_province_poultry_request = union_out_province_poultry_request_amount * city_percent_out_poultry_request
|
||
city_out_province_sell_carcasses = union_free_sell_carcasses_wage * city_percent_out_sell_carcasses
|
||
city_total_wage = city_province_kill_request_wage + city_out_province_poultry_request + city_out_province_sell_carcasses
|
||
city_operator_deposit = SubSectorTransactions.objects.filter(trash=False)
|
||
city_deposit = city_operator_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
||
city_total_remain_wage_amount = city_total_wage - city_deposit
|
||
|
||
value_header_list = [
|
||
city_out_province_poultry_request,
|
||
city_province_kill_request_wage,
|
||
city_out_province_sell_carcasses,
|
||
city_total_wage,
|
||
city_deposit,
|
||
city_total_remain_wage_amount,
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4, border_style='thin')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'تعاونی',
|
||
'شهر',
|
||
'کاربر',
|
||
'موبایل کاربر',
|
||
|
||
'تعرفه زنده خارج از استان',
|
||
'تعرفه کشتار و توزیع داخل استان',
|
||
'تعرفه کشتار و توزیع خارج از استان',
|
||
'مجموع تعرفه',
|
||
' تعداد دفعات واریز',
|
||
'مجموع واریزی اتحادیه',
|
||
'مانده تعرفه',
|
||
]
|
||
|
||
# excel_description(worksheet, 'A1', 'گزارش جزئیات تعرفه سهم تعاونی ها', size=11, color='red', row2='C1')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
|
||
if 'operators' in request.GET:
|
||
serializer = CityOperatorForSubSectorTransactionsSerializer(city_operators, many=True,
|
||
context={'request': request})
|
||
else:
|
||
serializer = CityOperatorForSubSectorSerializer(city_operators, many=True, context={'request': request})
|
||
# todo:مقادیر باید درست شه
|
||
for data in serializer.data:
|
||
list1 = [
|
||
m,
|
||
data['unit_name'],
|
||
data['user']['city'],
|
||
data['user']['fullname'],
|
||
data['user']['mobile'],
|
||
|
||
data['wage_info']['out_province_poultry_request_amount'],
|
||
data['wage_info']['total_pure_internal_province_carcasses_amount'],
|
||
data['wage_info']['total_pure_external_province_carcasses_weight'],
|
||
data['wage_info']['total_wage_amount'],
|
||
data['wage_info']['number_of_city_deposit'],
|
||
data['wage_info']['city_deposit'],
|
||
data['wage_info']['total_remain_wage_amount'],
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
for city_operator in city_operators:
|
||
if SubSectorTransactions.objects.filter(trash=False, city_operator=city_operator).exists():
|
||
sheet_name = city_operator.unit_name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
role_type = request.GET['type']
|
||
excel_options = [
|
||
'ردیف',
|
||
'تعاونی',
|
||
'شهر',
|
||
'کاربر',
|
||
'موبایل کاربر',
|
||
'تاریخ واریز',
|
||
'شماره حساب مبدا',
|
||
'شماره حساب مقصد',
|
||
'نوع تراکنش',
|
||
'مبلغ تراکنش',
|
||
]
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22, width=20.01)
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
excel_description(worksheet, 'A3',
|
||
f'واریزی های {city_operator.unit_name} از تاریخ{from_date_1} تا {from_date_2}',
|
||
color='red', row2='C3')
|
||
if role_type == 'city':
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
city_operator__isnull=False,
|
||
trash=False,
|
||
city_operator=city_operator).order_by(
|
||
'-date')
|
||
elif role_type == 'vet':
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
vet__isnull=False,
|
||
trash=False).order_by('-date')
|
||
else:
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
city_guild__isnull=False,
|
||
trash=False,
|
||
city_operator=city_operator).order_by(
|
||
'-date')
|
||
|
||
|
||
else:
|
||
excel_description(worksheet, 'A4', f'{city_operator.unit_name}', color='red', row2='B4')
|
||
|
||
if role_type == 'city':
|
||
operator_transactions = SubSectorTransactions.objects.filter(city_operator__isnull=False,
|
||
trash=False,
|
||
city_operator=city_operator).order_by(
|
||
'-date')
|
||
|
||
elif role_type == 'vet':
|
||
operator_transactions = SubSectorTransactions.objects.filter(vet__isnull=False,
|
||
trash=False).order_by(
|
||
'-date')
|
||
else:
|
||
operator_transactions = SubSectorTransactions.objects.filter(city_guild__isnull=False,
|
||
trash=False).order_by('-date')
|
||
l = 7
|
||
m = 1
|
||
for operator_transaction in operator_transactions:
|
||
if operator_transaction.type == 'online':
|
||
type = "آنلاین"
|
||
elif operator_transaction.type == 'bank':
|
||
type = "توسط بانک"
|
||
else:
|
||
type = 'دستی'
|
||
list1 = [
|
||
m,
|
||
operator_transaction.city_operator.unit_name,
|
||
operator_transaction.city_operator.user.city.name,
|
||
operator_transaction.city_operator.user.fullname,
|
||
operator_transaction.city_operator.user.mobile,
|
||
str(shamsi_date(operator_transaction.date)),
|
||
operator_transaction.from_account,
|
||
operator_transaction.to_account,
|
||
type,
|
||
operator_transaction.amount,
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
amount = operator_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
header_list1 = [
|
||
'تعداد تراکنش ها',
|
||
'مبلغ تراکنش ها',
|
||
|
||
]
|
||
create_header(worksheet, header_list1, 5, 3, border_style='thin', color='C4D79B', height=25)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
amount,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 1, 1, border_style='thin', color='yellow')
|
||
list3 = [
|
||
len(operator_transactions),
|
||
amount,
|
||
|
||
]
|
||
create_value(worksheet, list3, 4, 5, border_style='thin')
|
||
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 vet_for_sub_sector_excel(request):
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
sheet_list = [
|
||
'اطلاعات کلی',
|
||
'واریزی ها'
|
||
]
|
||
|
||
for sheet_name in sheet_list:
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
if sheet_name == 'اطلاعات کلی':
|
||
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=25, width=25, border_style='thin', color='C00000')
|
||
|
||
total_quantity = 0
|
||
total_weight = 0
|
||
total_wage = 0
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request',
|
||
trash=False).first().amount
|
||
free_sell_carcasses_wage_amount = total_wage_type.filter(en_name='carcasse-sell',
|
||
trash=False).first().amount
|
||
out_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
||
trash=False).first().amount
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'), out=True,
|
||
out_province_request_cancel=False,
|
||
temporary_trash=False,
|
||
wage_pay=True, has_wage=True,
|
||
temporary_deleted=False, vet_farm__isnull=False,
|
||
quarantine_code__isnull=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2)
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
province_request__poultry_request__vet_farm__isnull=False,
|
||
clearance_code__isnull=False,
|
||
trash=False, calculate_status=True, kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2
|
||
)
|
||
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet__isnull=False,
|
||
date__date__gte=date1, date__date__lte=date2)
|
||
|
||
else:
|
||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'), out=True,
|
||
out_province_request_cancel=False,
|
||
temporary_trash=False,
|
||
wage_pay=True, has_wage=True,
|
||
temporary_deleted=False, vet_farm__isnull=False,
|
||
quarantine_code__isnull=False)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
province_request__poultry_request__vet_farm__isnull=False,
|
||
clearance_code__isnull=False,
|
||
trash=False, calculate_status=True
|
||
)
|
||
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet__isnull=False)
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||
other_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
||
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='other').first().percent / 100
|
||
|
||
other_out_poultry_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='poultry-sell-out-province',
|
||
share_type__en_name='other').first().percent / 100
|
||
other_province_kill_request_amount = province_live_wage_amount * other_province_kill_request_percent
|
||
other_free_sell_carcasses_amount = free_sell_carcasses_wage_amount * other_free_sell_carcasses_percent
|
||
|
||
other_out_poultry_request_amount = out_poultry_request_wage_amount * other_out_poultry_request_percent
|
||
|
||
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
out_province_poultry_request_weight = \
|
||
poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
|
||
province_live_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
province_live_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
total_quantity += province_live_quantity + out_province_poultry_request_quantity
|
||
total_weight += province_live_weight + out_province_poultry_request_weight
|
||
|
||
province_carcasses_weight = province_live_weight * 0.75
|
||
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent()
|
||
external_pure_province_carcasses_weight = province_carcasses_weight - internal_pure_province_carcasses_weight
|
||
|
||
total_pure_internal_province_carcasses_amount = internal_pure_province_carcasses_weight * other_province_kill_request_amount
|
||
total_pure_external_province_carcasses_amount = external_pure_province_carcasses_weight * other_free_sell_carcasses_amount
|
||
out_province_poultry_request_amount = out_province_poultry_request_weight * other_out_poultry_request_amount
|
||
|
||
vet_deposit_amount = vet_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
||
total_wage += total_pure_internal_province_carcasses_amount + total_pure_external_province_carcasses_amount + out_province_poultry_request_amount
|
||
total_remain_wage = total_wage - vet_deposit_amount
|
||
|
||
value_header_list = [
|
||
total_pure_internal_province_carcasses_amount,
|
||
total_pure_external_province_carcasses_amount,
|
||
out_province_poultry_request_amount,
|
||
total_wage,
|
||
vet_deposit_amount,
|
||
total_remain_wage,
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4, border_style='thin')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'کاربر',
|
||
'موبایل کاربر',
|
||
'شهر',
|
||
|
||
'حجم کشتار (دارای کد قرنطینه)',
|
||
'وزن کشتار (دارای کد قرنطینه)',
|
||
'تعرفه کشتار و توزیع داخل استان (ریال)',
|
||
'تعرفه کشتار و توزیع خارج استان (ریال)',
|
||
'تعرفه فروش به خارج استان (ریال)',
|
||
'مجموع تعرفه (ریال)',
|
||
'تعداد دفعات واریز',
|
||
'مجموع واریزی اتحادیه(ریال)',
|
||
'مانده تعرفه(ریال)',
|
||
|
||
]
|
||
|
||
# excel_description(worksheet, 'A1', 'گزارش جزئیات تعرفه سهم تعاونی ها', size=11, color='red', row2='C1')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
|
||
vet = Vet.objects.filter(pk__in=VetFarm.objects.all().values_list('vet', flat=True), trash=False).order_by(
|
||
'id')
|
||
serializer = VetForSubSectorSerializerForExcel(vet, many=True, context={'request': request})
|
||
for data in serializer.data:
|
||
list1 = [
|
||
m,
|
||
data['user']['fullname'],
|
||
data['user']['mobile'],
|
||
data['user']['city'],
|
||
data['wage_info']['total_quantity'],
|
||
data['wage_info']['total_weight'],
|
||
data['wage_info']['total_pure_internal_province_carcasses_amount'],
|
||
data['wage_info']['total_pure_external_province_carcasses_amount'],
|
||
data['wage_info']['out_province_poultry_request_amount'],
|
||
data['wage_info']['total_wage'],
|
||
data['wage_info']['number_of_deposit'],
|
||
data['wage_info']['vet_deposit_amount'],
|
||
data['wage_info']['total_remain_wage'],
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
else:
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
role_type = request.GET['type']
|
||
excel_options = [
|
||
'ردیف',
|
||
'کاربر',
|
||
'موبایل کاربر',
|
||
'شهر',
|
||
'تاریخ واریز',
|
||
'شماره حساب مبدا',
|
||
'شماره حساب مقصد',
|
||
'نوع تراکنش',
|
||
'مبلغ تراکنش',
|
||
]
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22, width=20.01)
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
excel_description(worksheet, 'A3',
|
||
f'واریزی ها از تاریخ{from_date_1} تا {from_date_2}',
|
||
color='red', row2='C3')
|
||
if role_type == 'city':
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
city_operator__isnull=False,
|
||
trash=False,
|
||
).order_by(
|
||
'-date')
|
||
elif role_type == 'vet':
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
vet__isnull=False,
|
||
trash=False).order_by('-date')
|
||
else:
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
city_guild__isnull=False,
|
||
trash=False,
|
||
).order_by(
|
||
'-date')
|
||
|
||
|
||
else:
|
||
excel_description(worksheet, 'A4', f'واریزی های سهم دامپزشک', color='red', row2='B4')
|
||
|
||
if role_type == 'city':
|
||
operator_transactions = SubSectorTransactions.objects.filter(city_operator__isnull=False,
|
||
trash=False,
|
||
).order_by(
|
||
'-date')
|
||
|
||
elif role_type == 'vet':
|
||
operator_transactions = SubSectorTransactions.objects.filter(vet__isnull=False,
|
||
trash=False).order_by(
|
||
'-date')
|
||
else:
|
||
operator_transactions = SubSectorTransactions.objects.filter(city_guild__isnull=False,
|
||
trash=False).order_by('-date')
|
||
l = 7
|
||
m = 1
|
||
for operator_transaction in operator_transactions:
|
||
if operator_transaction.type == 'online':
|
||
type = "آنلاین"
|
||
elif operator_transaction.type == 'bank':
|
||
type = "توسط بانک"
|
||
else:
|
||
type = 'دستی'
|
||
list1 = [
|
||
m,
|
||
operator_transaction.vet.user.fullname,
|
||
operator_transaction.vet.user.mobile,
|
||
operator_transaction.vet.user.city.name,
|
||
str(shamsi_date(operator_transaction.date)),
|
||
operator_transaction.from_account,
|
||
operator_transaction.to_account,
|
||
type,
|
||
operator_transaction.amount,
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
amount = operator_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
header_list1 = [
|
||
'تعداد تراکنش ها',
|
||
'مبلغ تراکنش ها',
|
||
|
||
]
|
||
create_header(worksheet, header_list1, 5, 3, border_style='thin', color='C4D79B', height=25)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
amount,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 1, 1, border_style='thin', color='yellow')
|
||
list3 = [
|
||
len(operator_transactions),
|
||
amount,
|
||
|
||
]
|
||
create_value(worksheet, list3, 4, 5, border_style='thin')
|
||
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 guild_for_sub_sector_excel(request):
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
sheet_list = [
|
||
'اطلاعات کلی',
|
||
'واریزی ها'
|
||
]
|
||
|
||
for sheet_name in sheet_list:
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
if sheet_name == 'اطلاعات کلی':
|
||
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=25, width=25, border_style='thin', color='C00000')
|
||
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request',
|
||
trash=False).first().amount
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||
other_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
||
if date1:
|
||
|
||
allocations = StewardAllocation.objects.filter(trash=False, to_guilds__isnull=False,
|
||
calculate_status=True,
|
||
temporary_trash=False, temporary_deleted=False,
|
||
receiver_state='accepted', date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
transactions = PosMachineTransactions.objects.filter(paid=True, trash=False, date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
sub_transactions = SubSectorTransactions.objects.filter(trash=False, city_guild__isnull=False,
|
||
date__date__gte=date1, date__date__lte=date2)
|
||
else:
|
||
allocations = StewardAllocation.objects.filter(trash=False, to_guilds__isnull=False,
|
||
calculate_status=True,
|
||
temporary_trash=False, temporary_deleted=False,
|
||
receiver_state='accepted')
|
||
transactions = PosMachineTransactions.objects.filter(paid=True, trash=False)
|
||
sub_transactions = SubSectorTransactions.objects.filter(trash=False, city_guild__isnull=False)
|
||
allocations_weight = allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
transactions_weight = transactions.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
transactions_weight = transactions_weight / 1000 if transactions_weight > 0 else 0
|
||
total_wage = transactions_weight * (province_live_wage_amount * other_province_kill_request_percent)
|
||
|
||
sub_transactions_amount = sub_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
remain_wage = total_wage - sub_transactions_amount
|
||
|
||
value_header_list = [
|
||
allocations_weight,
|
||
transactions_weight,
|
||
total_wage,
|
||
sub_transactions_amount,
|
||
remain_wage
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4, border_style='thin')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'کاربر',
|
||
'موبایل کاربر',
|
||
'شهر',
|
||
'کل وزن دریافتی',
|
||
'کل وزن فروش رفته',
|
||
'مجموع تعرفه (ریال)',
|
||
'مجموع واریزی اتحادیه(ریال)',
|
||
'مانده تعرفه(ریال)',
|
||
|
||
]
|
||
|
||
# excel_description(worksheet, 'A1', 'گزارش جزئیات تعرفه سهم تعاونی ها', size=11, color='red', row2='C1')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
|
||
city_guilds = CityGuild.objects.filter(trash=False)
|
||
serializer = CityGuildForSubSectorSerializerForExcel(city_guilds, many=True, context={'request': request})
|
||
for data in serializer.data:
|
||
list1 = [
|
||
m,
|
||
data['user']['fullname'],
|
||
data['user']['mobile'],
|
||
data['user']['city'],
|
||
data['wage_info']['buy_weight'],
|
||
data['wage_info']['sell_weight'],
|
||
data['wage_info']['total_wage'],
|
||
data['wage_info']['guild_deposit'],
|
||
data['wage_info']['remain_wage'],
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
else:
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
role_type = request.GET['type']
|
||
excel_options = [
|
||
'ردیف',
|
||
'کاربر',
|
||
'موبایل کاربر',
|
||
'شهر',
|
||
'تاریخ واریز',
|
||
'شماره حساب مبدا',
|
||
'شماره حساب مقصد',
|
||
'نوع تراکنش',
|
||
'مبلغ تراکنش',
|
||
]
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22, width=20.01)
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date1 = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
from_date_2 = separate.join(reversed_date1)
|
||
excel_description(worksheet, 'A3',
|
||
f'واریزی ها از تاریخ{from_date_1} تا {from_date_2}',
|
||
color='red', row2='C3')
|
||
if role_type == 'city':
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
city_operator__isnull=False,
|
||
trash=False,
|
||
).order_by(
|
||
'-date')
|
||
elif role_type == 'vet':
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
vet__isnull=False,
|
||
trash=False).order_by('-date')
|
||
else:
|
||
operator_transactions = SubSectorTransactions.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
city_guild__isnull=False,
|
||
trash=False,
|
||
).order_by(
|
||
'-date')
|
||
|
||
|
||
else:
|
||
excel_description(worksheet, 'A4', f'واریزی های سهم صنف', color='red', row2='B4')
|
||
|
||
if role_type == 'city':
|
||
operator_transactions = SubSectorTransactions.objects.filter(city_operator__isnull=False,
|
||
trash=False,
|
||
).order_by(
|
||
'-date')
|
||
|
||
elif role_type == 'vet':
|
||
operator_transactions = SubSectorTransactions.objects.filter(vet__isnull=False,
|
||
trash=False).order_by(
|
||
'-date')
|
||
else:
|
||
operator_transactions = SubSectorTransactions.objects.filter(city_guild__isnull=False,
|
||
trash=False).order_by('-date')
|
||
l = 7
|
||
m = 1
|
||
for operator_transaction in operator_transactions:
|
||
if operator_transaction.type == 'online':
|
||
type = "آنلاین"
|
||
elif operator_transaction.type == 'bank':
|
||
type = "توسط بانک"
|
||
else:
|
||
type = 'دستی'
|
||
list1 = [
|
||
m,
|
||
operator_transaction.city_guild.user.fullname,
|
||
operator_transaction.city_guild.user.mobile,
|
||
operator_transaction.city_guild.user.city.name,
|
||
str(shamsi_date(operator_transaction.date)),
|
||
operator_transaction.from_account,
|
||
operator_transaction.to_account,
|
||
type,
|
||
operator_transaction.amount,
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
amount = operator_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
header_list1 = [
|
||
'تعداد تراکنش ها',
|
||
'مبلغ تراکنش ها',
|
||
|
||
]
|
||
create_header(worksheet, header_list1, 5, 3, border_style='thin', color='C4D79B', height=25)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
amount,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 1, 1, border_style='thin', color='yellow')
|
||
list3 = [
|
||
len(operator_transactions),
|
||
amount,
|
||
|
||
]
|
||
create_value(worksheet, list3, 4, 5, border_style='thin')
|
||
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 all_guilds_transaction_excel(request):
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
filterset_class = GuildsForPostationFilterSet
|
||
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
|
||
if date1 and date2:
|
||
date1 = datetime.datetime.strptime(date1, '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(date2, '%Y-%m-%d').date()
|
||
|
||
guilds = Guilds.objects.filter(
|
||
Q(
|
||
id__in=PosMachineTransactions.objects.filter(
|
||
trash=False,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
pos__guild__isnull=False,
|
||
paid=True
|
||
).values_list('pos__guild__id', flat=True)
|
||
) |
|
||
Q(
|
||
id__in=StewardAllocation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
to_guilds__isnull=False,
|
||
to_cold_house__isnull=True,
|
||
temporary_trash=False,
|
||
trash=False,
|
||
calculate_status=True
|
||
).values_list('to_guilds__id', flat=True)
|
||
)
|
||
).annotate(
|
||
transaction_count=Count(
|
||
'guild_pos__roles_products_pos_transactions',
|
||
filter=Q(
|
||
guild_pos__roles_products_pos_transactions__trash=False,
|
||
guild_pos__roles_products_pos_transactions__paid=True,
|
||
guild_pos__roles_products_pos_transactions__date__date__gte=date1,
|
||
guild_pos__roles_products_pos_transactions__date__date__lte=date2
|
||
),
|
||
distinct=True
|
||
)
|
||
).order_by('-transaction_count')
|
||
|
||
else:
|
||
guilds = Guilds.objects.filter(
|
||
Q(
|
||
id__in=PosMachineTransactions.objects.filter(
|
||
trash=False,
|
||
paid=True,
|
||
pos__guild__isnull=False
|
||
).values_list('pos__guild__id', flat=True)
|
||
) |
|
||
Q(
|
||
id__in=StewardAllocation.objects.filter(
|
||
to_guilds__isnull=False,
|
||
to_cold_house__isnull=True,
|
||
temporary_trash=False,
|
||
trash=False,
|
||
calculate_status=True
|
||
).values_list('to_guilds__id', flat=True)
|
||
)
|
||
).annotate(
|
||
transaction_count=Count(
|
||
'guild_pos__roles_products_pos_transactions',
|
||
filter=Q(
|
||
guild_pos__roles_products_pos_transactions__trash=False,
|
||
guild_pos__roles_products_pos_transactions__paid=True
|
||
),
|
||
distinct=True
|
||
)
|
||
).order_by('-transaction_count')
|
||
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
guilds = guilds.filter(
|
||
build_query(filterset_class.Meta.fields, value)
|
||
)
|
||
serializer = GuildsPosMachineForTransactionsNewSerializer(guilds, many=True, context={'request': request})
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'نام واحد صنفی',
|
||
'موبایل',
|
||
'شهر',
|
||
'کل ورودی به انبار(کیلوگرم)',
|
||
'کل فروش(کیلوگرم)',
|
||
'مانده انبار(کیلوگرم)',
|
||
'تعداد تراکنش ها',
|
||
'مبلغ کل تراکنش ها',
|
||
|
||
]
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
red_font = Font(color="C00000", bold=True)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='D3')
|
||
header_list2 = [
|
||
'کل ورودی به انبار(کیلوگرم)',
|
||
'کل فروش(کیلوگرم)',
|
||
'مانده انبار(کیلوگرم)',
|
||
'تعداد تراکنش ها',
|
||
'مبلغ کل تراکنش ها',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'مدیریت انبار صنوف', size=11, color='red',
|
||
row2='D1')
|
||
l = 5
|
||
m = 1
|
||
datas = serializer.data
|
||
|
||
datas = sorted(datas, key=lambda x: x['transaction']['total_carcasses_weight'], reverse=True)
|
||
for data in datas:
|
||
l += 1
|
||
|
||
list1 = [
|
||
m,
|
||
data['guilds_name'],
|
||
data['user']['mobile'],
|
||
data['user']['city']['name'],
|
||
data['transaction']['total_carcasses_weight'],
|
||
str(data['transaction']['real_allocated_weight']),
|
||
data['transaction']['total_remain_weight'],
|
||
data['transaction']['len_transaction'],
|
||
data['transaction']['total_price'],
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
len_transaction = sum(item['transaction'].get('len_transaction', 0) for item in serializer.data)
|
||
total_price = sum(item['transaction'].get('total_price', 0) for item in serializer.data)
|
||
total_carcasses_weight = sum(item['transaction'].get('total_carcasses_weight', 0) for item in serializer.data)
|
||
real_allocated_weight = sum(item['transaction'].get('real_allocated_weight', 0) for item in serializer.data)
|
||
total_remain_weight = sum(item['transaction'].get('total_remain_weight', 0) for item in serializer.data)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
total_carcasses_weight,
|
||
real_allocated_weight,
|
||
total_remain_weight,
|
||
len_transaction,
|
||
total_price,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 3, 1, color='green')
|
||
|
||
value_header_list2 = [
|
||
total_carcasses_weight,
|
||
real_allocated_weight,
|
||
total_remain_weight,
|
||
len_transaction,
|
||
total_price,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list2, 3, 5)
|
||
|
||
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 detail_guilds_transaction_excel(request):
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
guild = Guilds.objects.get(key=request.GET['key'])
|
||
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()
|
||
transactions = PosMachineTransactions.objects.filter(trash=False, date__date__gte=date1,
|
||
date__date__lte=date2, pos__guild=guild,
|
||
paid=True).order_by('-date')
|
||
else:
|
||
transactions = PosMachineTransactions.objects.filter(trash=False, pos__guild=guild,
|
||
paid=True).order_by('-date')
|
||
|
||
serializer = PosMachineTransactionsForInspectionSerializer(transactions, many=True)
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت تراکنش',
|
||
'تاریخ تراکنش',
|
||
'محصول',
|
||
'قیمت واحد',
|
||
'وزن (گرم)',
|
||
'مبلغ(ریال)',
|
||
'از سرویس',
|
||
|
||
]
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
red_font = Font(color="C00000", bold=True)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='D3')
|
||
header_list2 = [
|
||
'تعداد تراکنش ها',
|
||
'وزن کل(گرم)',
|
||
'مبلغ کل تراکنش ها(ریال)',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
if guild:
|
||
name = guild.guilds_name
|
||
else:
|
||
name = ''
|
||
excel_description(worksheet, 'A1', f'تراکنش های صنف {name}', size=11, color='red',
|
||
row2='D1')
|
||
|
||
l = 5
|
||
m = 1
|
||
|
||
for data in serializer.data:
|
||
l += 1
|
||
paid = 'موفق' if data['paid'] == True else 'ناموفق'
|
||
posProvider = 'سامان کیش' if data['posProvider'] == "SEP" else '-'
|
||
date = '-'
|
||
if data['date']:
|
||
try:
|
||
date = datetime.datetime.strptime(str(data['date']), '%Y-%m-%dT%H:%M:%S.%f')
|
||
except ValueError:
|
||
date = datetime.datetime.strptime(str(data['date']), '%Y-%m-%dT%H:%M:%S')
|
||
date = shamsi_date(date, in_value=True)
|
||
list1 = [
|
||
m,
|
||
paid,
|
||
str(date),
|
||
(data.get('product') or {}).get('name') or '-',
|
||
data.get('price') or 0,
|
||
data.get('weight') or 0,
|
||
data.get('current_price') or 0,
|
||
posProvider,
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
pos = PosMachineTransactions.objects.filter(trash=False, pos__guild=guild, paid=True)
|
||
total_price = pos.aggregate(total=Sum('price'))[
|
||
'total'] or 0
|
||
weight = sum(item['weight'] for item in serializer.data)
|
||
|
||
value_header_list2 = [
|
||
len(pos),
|
||
weight,
|
||
total_price,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list2, 3, 5)
|
||
|
||
len_transaction = sum(item['price'] for item in serializer.data)
|
||
total_carcasses_weight = sum(item['current_price'] for item in serializer.data)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
len_transaction,
|
||
weight,
|
||
total_carcasses_weight,
|
||
''
|
||
|
||
]
|
||
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
|
||
|
||
|
||
class GetExcel(APIView):
|
||
throttle_classes = [AnonRateThrottle, UserRateThrottle]
|
||
|
||
def get(self, request):
|
||
excel_name = request.GET.get('name')
|
||
return Response(f'https://{base_url_for_sms_report}backend.rasadyaar.ir/{excel_name}/?{request.query_params}')
|
||
|
||
|
||
def management_hatching_excel(request):
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
|
||
poultry_hatching = PoultryHatching.objects.filter(state__in=('pending', 'complete'), archive=False,
|
||
allow_hatching='pending',
|
||
trash=False).order_by('-chicken_age').select_related(
|
||
'poultry')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'شهرستان',
|
||
'نام واحد',
|
||
'نام مالک',
|
||
'تاریخ جوجه ریزی',
|
||
'تعداد جوجه ریزی',
|
||
'سن',
|
||
'نود درصد جوجه ریزی',
|
||
'مانده در سالن',
|
||
|
||
]
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='D3')
|
||
header_list2 = [
|
||
'تعداد کل جوجه ریزی',
|
||
'تعداد قطعه بین 42تا 50روزگی',
|
||
'تعداد قطعه بین 51تا 54روزگی',
|
||
'تعداد قطعه بین 55تا 60روزگی',
|
||
'تعداد قطعه بالای 60روزگی',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 9, 10, 20)
|
||
|
||
# excel_description(worksheet, 'A1', f'تراکنش های صنف {name}', size=11, color='red',
|
||
# row2='D1')
|
||
|
||
l = 8
|
||
m = 1
|
||
|
||
for data in poultry_hatching:
|
||
l += 1
|
||
age = data.chicken_age
|
||
if age > 60:
|
||
color = RED_CELL
|
||
elif 60 > age > 54:
|
||
color = LIGHT_GREEN_CELL
|
||
elif 54 > age > 49:
|
||
color = GREEN_CELL
|
||
elif 49 > age > 47:
|
||
color = VERY_LIGHT_GREEN_CELL
|
||
else:
|
||
color = None
|
||
list1 = [
|
||
m,
|
||
data.poultry.address.city.name,
|
||
data.poultry.unit_name,
|
||
data.poultry.user.fullname,
|
||
convert_to_shamsi(date=data.date),
|
||
data.quantity,
|
||
data.chicken_age,
|
||
int(data.quantity * 0.9),
|
||
data.left_over
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, m=m, item_num=6, item_color=color, border_style='thin')
|
||
|
||
quantity = poultry_hatching.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
beetwen_43_50 = poultry_hatching.filter(chicken_age__range=(43, 50)).aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
beetwen_51_54 = poultry_hatching.filter(chicken_age__range=(51, 54)).aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
beetwen_55_60 = poultry_hatching.filter(chicken_age__range=(55, 60)).aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
gt_60 = poultry_hatching.filter(chicken_age__gt=60).aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
value_header_list2 = [
|
||
quantity,
|
||
beetwen_43_50,
|
||
beetwen_51_54,
|
||
beetwen_55_60,
|
||
gt_60
|
||
|
||
]
|
||
create_value(worksheet, value_header_list2, 3, 5)
|
||
#
|
||
# len_transaction = sum(item['price'] for item in serializer.data)
|
||
# total_carcasses_weight = sum(item['current_price'] for item in serializer.data)
|
||
#
|
||
|
||
left_over = poultry_hatching.aggregate(total=Sum('left_over'))[
|
||
'total'] or 0
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
quantity,
|
||
'',
|
||
int(quantity * 0.9),
|
||
left_over
|
||
|
||
]
|
||
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 user_without_role_excel(request):
|
||
users = SystemUserProfile.objects.filter(role__isnull=True, trash=False).only('fullname', 'create_date',
|
||
'fullname').order_by('-create_date')
|
||
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_CELL
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 1, 2, 20, width=30)
|
||
|
||
l = 2
|
||
for user in users:
|
||
list1 = [
|
||
m,
|
||
user.fullname,
|
||
user.mobile,
|
||
convert_to_shamsi(date=user.create_date),
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=20)
|
||
m += 1
|
||
l += 1
|
||
|
||
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 sub_section_of_cooperative_share_detail_with_date_excel(request):
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
||
archive_wage=False, return_to_province=False,
|
||
state__in=('pending', 'accepted'),
|
||
first_car_allocated_quantity=0,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).order_by(
|
||
'id')
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
trash=False, calculate_status=True, kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2
|
||
)
|
||
|
||
total_province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
total_province_live_quantity = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
total_province_live_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
total_province_live_quantity += kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0
|
||
|
||
total_province_carcasses_weight = total_province_live_weight * 0.75
|
||
|
||
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight(
|
||
kill_houses)
|
||
|
||
# return Response(total_pure_province_carcasses_weight)
|
||
internal_total_pure_province_carcasses_weight = ((
|
||
total_pure_province_carcasses_weight / total_province_carcasses_weight) if total_province_carcasses_weight > 0 else 0) * total_province_carcasses_weight
|
||
external_total_pure_province_carcasses_weight = total_province_carcasses_weight - internal_total_pure_province_carcasses_weight
|
||
|
||
total_pure_province_carcasses_price = internal_total_pure_province_carcasses_weight * province_live_wage_amount
|
||
total_out_selling_province_carcasses_price = external_total_pure_province_carcasses_weight * free_sell_carcesses_weight_amount
|
||
|
||
poultries = Poultry.objects.filter(trash=False, city_operator__isnull=False).order_by('id')
|
||
hatchings = PoultryHatching.objects.filter(poultry__in=poultries, killed_quantity__gt=0, trash=False).order_by(
|
||
'poultry')
|
||
|
||
hatching_quantity = hatchings.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'), out=True,
|
||
out_province_request_cancel=False, temporary_trash=False,
|
||
has_wage=True, wage_pay=True,
|
||
temporary_deleted=False, hatching__in=hatchings,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2)
|
||
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
out_province_poultry_request_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
|
||
union_out_province_poultry_request_amount = poultry_requests.aggregate(total=Sum('union_share'))[
|
||
'total'] or 0
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||
union_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
||
|
||
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='union').first().percent / 100
|
||
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
||
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
||
|
||
city_percent_province_kill_request = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='province-kill-request').first().percent / 100
|
||
city_percent_out_poultry_request = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='poultry-sell-out-province').first().percent / 100
|
||
city_percent_out_sell_carcasses = SubSectorPercentageOfWageType.objects.filter(
|
||
percentage_of_wage_type__wage_type__en_name='carcasse-sell').first().percent / 100
|
||
|
||
union_total_wage = union_province_kill_request_wage + union_out_province_poultry_request_amount + union_free_sell_carcasses_wage
|
||
hatching_killing_percent = ((
|
||
out_province_poultry_request_quantity + total_province_live_quantity) / hatching_quantity) * 100
|
||
|
||
city_province_kill_request_wage = union_province_kill_request_wage * city_percent_province_kill_request
|
||
city_out_province_poultry_request = union_out_province_poultry_request_amount * city_percent_out_poultry_request
|
||
city_out_province_sell_carcasses = union_free_sell_carcasses_wage * city_percent_out_sell_carcasses
|
||
city_total_wage = city_province_kill_request_wage + city_out_province_poultry_request + city_out_province_sell_carcasses
|
||
city_operator_deposit = SubSectorTransactions.objects.filter(trash=False, date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
city_deposit = city_operator_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
||
city_total_remain_wage_amount = city_total_wage - city_deposit
|
||
|
||
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_CELL
|
||
|
||
header_list = [
|
||
'تعداد فارم',
|
||
'تعداد کل جوجه ریزی',
|
||
'حجم کل جوجه ریزی',
|
||
'حجم کل کشتارشده داخل استان',
|
||
'وزن کل کشتار شده داخل استان',
|
||
'وزن لاشه کشتار شده داخل استان',
|
||
'وزن کل لاشه توزیع داخل استان',
|
||
'وزن کل لاشه توزیع خارج استان',
|
||
'حجم کل فروش به خارج استان',
|
||
'وزن کل فروش به خارج از استان',
|
||
'حجم کل کشتار شده',
|
||
'درصد کشتار شده نسبت به جوجه ریزی',
|
||
'تعرفه زنده خارج از استان(اتحادیه)',
|
||
'تعرفه کشتار و توزیع داخل استان(اتحادیه)',
|
||
'تعرفه کشتار و توزیع خارج ازاستان(اتحادیه)',
|
||
'کل تعرفه سهم اتحادیه استان',
|
||
'تعرفه سهم زیر بخش ها',
|
||
'واریزی اتحادیه به زیر بخش ها',
|
||
'مانده تعرفه',
|
||
]
|
||
create_header(worksheet, header_list, 4, 2, 21, 16.01)
|
||
from_date_1 = shamsi_date(date1)
|
||
from_date_2 = shamsi_date(date2)
|
||
excel_description(worksheet, 'A1',
|
||
f'گزارش جزئیات تعرفه سهم تعاونی ها ار تاریخ {from_date_1} تا تاریخ {from_date_2}', size=11,
|
||
color='red', row2='E1')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
# user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
city_operators = CityOperator.objects.filter(trash=False)
|
||
if 'operators' in request.GET:
|
||
|
||
serializer = CityOperatorForSubSectorTransactionsSerializer(city_operators, many=True,
|
||
context={'request': request})
|
||
else:
|
||
serializer = CityOperatorForSubSectorSerializerForExcel(city_operators, many=True, context={'request': request})
|
||
if serializer.data:
|
||
for data in serializer.data:
|
||
list1 = [
|
||
m,
|
||
data['unit_name'],
|
||
data['user']['city'],
|
||
data['user']['fullname'],
|
||
data['user']['mobile'],
|
||
data['wage_info']['poultries'],
|
||
data['wage_info']['hatchings'],
|
||
data['wage_info']['hatchings_quantity'],
|
||
data['wage_info']['total_province_kill_requests_quantity'],
|
||
data['wage_info']['total_province_kill_requests_weight'],
|
||
data['wage_info']['total_province_carcasses_weight'],
|
||
data['wage_info']['total_pure_internal_province_carcasses_weight'],
|
||
data['wage_info']['total_pure_external_province_carcasses_weight'],
|
||
data['wage_info']['out_province_poultry_request_quantity'],
|
||
data['wage_info']['out_province_poultry_request_weight'],
|
||
data['wage_info']['total_killed_quantity'],
|
||
data['wage_info']['hatching_killing_percent'],
|
||
data['wage_info']['out_province_poultry_request_amount'],
|
||
data['wage_info']['total_pure_internal_province_carcasses_amount'],
|
||
data['wage_info']['total_pure_external_province_carcasses_amount'],
|
||
data['wage_info']['total_wage_amount'],
|
||
data['wage_info']['city_deposit'],
|
||
data['wage_info']['total_remain_wage_amount'],
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
|
||
value_header_list = [
|
||
len(poultries),
|
||
len(hatchings),
|
||
hatching_quantity,
|
||
total_province_live_quantity,
|
||
total_province_live_weight,
|
||
total_province_carcasses_weight,
|
||
internal_total_pure_province_carcasses_weight,
|
||
external_total_pure_province_carcasses_weight,
|
||
out_province_poultry_request_quantity,
|
||
out_province_poultry_request_weight,
|
||
out_province_poultry_request_quantity + total_province_live_quantity,
|
||
hatching_killing_percent,
|
||
union_free_sell_carcasses_wage,
|
||
|
||
union_province_kill_request_wage,
|
||
union_out_province_poultry_request_amount,
|
||
|
||
union_total_wage,
|
||
city_total_wage,
|
||
city_deposit,
|
||
city_total_remain_wage_amount,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4)
|
||
|
||
poultries = sum(item['wage_info'].get('poultries', 0) for item in serializer.data)
|
||
hatchings = sum(item['wage_info'].get('hatchings', 0) for item in serializer.data)
|
||
hatchings_quantity = sum(item['wage_info'].get('hatchings_quantity', 0) for item in serializer.data)
|
||
total_province_kill_requests_quantity = sum(
|
||
item['wage_info'].get('total_province_kill_requests_quantity', 0) for item in serializer.data)
|
||
total_province_kill_requests_weight = sum(
|
||
item['wage_info'].get('total_province_kill_requests_weight', 0) for item in serializer.data)
|
||
total_province_carcasses_weight = sum(
|
||
item['wage_info'].get('total_province_carcasses_weight', 0) for item in serializer.data)
|
||
total_pure_internal_province_carcasses_weight = sum(
|
||
item['wage_info'].get('total_pure_internal_province_carcasses_weight', 0) for item in serializer.data)
|
||
total_pure_external_province_carcasses_weight = sum(
|
||
item['wage_info'].get('total_pure_external_province_carcasses_weight', 0) for item in serializer.data)
|
||
out_province_poultry_request_quantity = sum(
|
||
item['wage_info'].get('out_province_poultry_request_quantity', 0) for item in serializer.data)
|
||
out_province_poultry_request_weight = sum(
|
||
item['wage_info'].get('out_province_poultry_request_weight', 0) for item in serializer.data)
|
||
total_killed_quantity = sum(item['wage_info'].get('total_killed_quantity', 0) for item in serializer.data)
|
||
hatching_killing_percent = sum(item['wage_info'].get('hatching_killing_percent', 0) for item in serializer.data)
|
||
out_province_poultry_request_amount = sum(
|
||
item['wage_info'].get('out_province_poultry_request_amount', 0) for item in serializer.data)
|
||
total_pure_internal_province_carcasses_amount = sum(
|
||
item['wage_info'].get('total_pure_internal_province_carcasses_amount', 0) for item in serializer.data)
|
||
total_pure_external_province_carcasses_amount = sum(
|
||
item['wage_info'].get('total_pure_external_province_carcasses_amount', 0) for item in serializer.data)
|
||
total_wage_amount = sum(item['wage_info'].get('total_wage_amount', 0) for item in serializer.data)
|
||
city_deposit = sum(item['wage_info'].get('city_deposit', 0) for item in serializer.data)
|
||
total_remain_wage_amount = sum(item['wage_info'].get('total_remain_wage_amount', 0) for item in serializer.data)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
poultries,
|
||
hatchings,
|
||
hatchings_quantity,
|
||
total_province_kill_requests_quantity,
|
||
total_province_kill_requests_weight,
|
||
total_province_carcasses_weight,
|
||
total_pure_internal_province_carcasses_weight,
|
||
total_pure_external_province_carcasses_weight,
|
||
out_province_poultry_request_quantity,
|
||
out_province_poultry_request_weight,
|
||
total_killed_quantity,
|
||
hatching_killing_percent,
|
||
out_province_poultry_request_amount,
|
||
total_pure_internal_province_carcasses_amount,
|
||
total_pure_external_province_carcasses_amount,
|
||
total_wage_amount,
|
||
city_deposit,
|
||
total_remain_wage_amount,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 1, 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 vet_for_sub_sector_with_date_excel(request):
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else None
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else None
|
||
vet = Vet.objects.filter(pk__in=VetFarm.objects.all().values_list('vet', flat=True), trash=False).order_by('id')
|
||
serializer = VetForSubSectorSerializer(vet, many=True, context={'request': request})
|
||
|
||
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_CELL
|
||
|
||
header_list = [
|
||
'تعرفه کشتار و توزیع داخل استان',
|
||
'تعرفه کشتار و توزیع خارج استان',
|
||
'تعرفه فروش به خارج استان',
|
||
'مجموع تعرفه',
|
||
'واریزی اتحادیه',
|
||
'مانده تعرفه'
|
||
]
|
||
create_header(worksheet, header_list, 4, 2, 21, 16.01)
|
||
from_date_1 = shamsi_date(date1)
|
||
from_date_2 = shamsi_date(date2)
|
||
excel_description(worksheet, 'A1',
|
||
f'گزارش جزئیات تعرفه سهم تعاونی ها ار تاریخ {from_date_1} تا تاریخ {from_date_2}', size=11,
|
||
color='red', row2='E1')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
# user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
|
||
if serializer.data:
|
||
for data in serializer.data:
|
||
list1 = [
|
||
m,
|
||
data['user']['fullname'], # کاربر
|
||
data['user']['city'], # شهر
|
||
data['wage_info']['province_live_quantity'], # حجم کشتار (دارای کد قرنطینه) 🔺
|
||
data['wage_info']['province_live_weight'], # وزن کشتار (دارای کد قرنطینه)
|
||
data['wage_info']['total_pure_internal_province_carcasses_amount'],
|
||
# تعرفه کشتارو توزیع داخل استان (ریال)
|
||
data['wage_info']['total_pure_external_province_carcasses_amount'],
|
||
# تعرفه کشتارو توزیع خارج از استان (ریال)
|
||
data['wage_info']['out_province_poultry_request_amount'], # تعرفه فروش به خارج از استان (ریال)
|
||
data['wage_info']['total_wage'], # مجموع تعرفه (ریال)
|
||
data['wage_info']['number_of_deposit'], # تعداد دفعات واریز
|
||
data['wage_info']['vet_deposit_amount'], # مجموع واریزی اتحادیه (ریال)
|
||
data['wage_info']['total_remain_wage'] # مانده تعرفه (ریال)
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
total_quantity = 0
|
||
total_weight = 0
|
||
total_wage = 0
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||
free_sell_carcasses_wage_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||
out_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
||
trash=False).first().amount
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||
other_province_kill_request_percent = percentages_wage_type.filter(
|
||
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
||
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||
share_type__en_name='other').first().percent / 100
|
||
|
||
other_out_poultry_request_percent = percentages_wage_type.filter(wage_type__en_name='poultry-sell-out-province',
|
||
share_type__en_name='other').first().percent / 100
|
||
other_province_kill_request_amount = province_live_wage_amount * other_province_kill_request_percent
|
||
other_free_sell_carcasses_amount = free_sell_carcasses_wage_amount * other_free_sell_carcasses_percent
|
||
|
||
other_out_poultry_request_amount = out_poultry_request_wage_amount * other_out_poultry_request_percent
|
||
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'), out=True,
|
||
out_province_request_cancel=False, temporary_trash=False,
|
||
wage_pay=True, has_wage=True,
|
||
temporary_deleted=False, vet_farm__isnull=False,
|
||
)
|
||
# quarantine_code__isnull=False)
|
||
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
||
'total'] or 0
|
||
out_province_poultry_request_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
province_request__poultry_request__vet_farm__isnull=False,
|
||
# clearance_code__isnull=False,
|
||
clearance_code__isnull=False,
|
||
trash=False, calculate_status=True
|
||
)
|
||
|
||
province_live_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
province_live_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
||
state='accepted')
|
||
province_live_weight += \
|
||
difference_requests.aggregate(total=Sum('weight'))['total'] or 0
|
||
total_quantity += province_live_quantity + out_province_poultry_request_quantity
|
||
total_weight += province_live_weight + out_province_poultry_request_weight
|
||
|
||
province_carcasses_weight = province_live_weight * 0.75
|
||
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent()
|
||
external_pure_province_carcasses_weight = province_carcasses_weight - internal_pure_province_carcasses_weight
|
||
|
||
total_pure_internal_province_carcasses_amount = internal_pure_province_carcasses_weight * other_province_kill_request_amount
|
||
total_pure_external_province_carcasses_amount = external_pure_province_carcasses_weight * other_free_sell_carcasses_amount
|
||
out_province_poultry_request_amount = out_province_poultry_request_weight * other_out_poultry_request_amount
|
||
|
||
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet__isnull=False)
|
||
vet_deposit_amount = vet_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
||
total_wage += total_pure_internal_province_carcasses_amount + total_pure_external_province_carcasses_amount + out_province_poultry_request_amount
|
||
total_remain_wage = total_wage - vet_deposit_amount
|
||
value_header_list = [
|
||
total_pure_internal_province_carcasses_amount, # تعرفه کشتار و توزیع داخل استان
|
||
total_pure_external_province_carcasses_amount, # تعرفه کشتار و توزیع خارج استان
|
||
out_province_poultry_request_amount, # تعرفه فروش به خارج استان
|
||
total_wage, # مجموع تعرفه
|
||
vet_deposit_amount, # واریزی اتحادیه
|
||
total_remain_wage # مانده تعرفه
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4)
|
||
|
||
# list2 = [
|
||
# 'مجموع==>',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# poultries,
|
||
# hatchings,
|
||
# hatchings_quantity,
|
||
# total_province_kill_requests_quantity,
|
||
# total_province_kill_requests_weight,
|
||
# total_province_carcasses_weight,
|
||
# total_pure_internal_province_carcasses_weight,
|
||
# total_pure_external_province_carcasses_weight,
|
||
# out_province_poultry_request_quantity,
|
||
# out_province_poultry_request_weight,
|
||
# total_killed_quantity,
|
||
# hatching_killing_percent,
|
||
# out_province_poultry_request_amount,
|
||
# total_pure_internal_province_carcasses_amount,
|
||
# total_pure_external_province_carcasses_amount,
|
||
# total_wage_amount,
|
||
# city_deposit,
|
||
# total_remain_wage_amount,
|
||
#
|
||
# ]
|
||
# create_value(worksheet, list2, l + 1, 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 dashboard_monitoring_bar_and_killing_excel(request):
|
||
now = datetime.datetime.now().date()
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment_CELL
|
||
sheet_names2 = ['اطلاعات کشتار', 'اطلاعات بار', 'تخصیصات بدون بار', 'خرید زنده خارج از استان',
|
||
'خرید لاشه خارج استان',
|
||
'فروش زنده به خارج استان', 'اطلاعات کشتارگاه ها']
|
||
for name in sheet_names2:
|
||
sheet_name = name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
|
||
if sheet_name == 'اطلاعات کشتار':
|
||
filtered_province_kill_reqs = PoultryRequest.objects.filter(state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2).select_related(
|
||
'poultry', 'poultry__user').order_by(
|
||
'-send_date')
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد سفارش',
|
||
'تاریخ ثبت درخواست',
|
||
'تاریخ کشتار',
|
||
'فروش',
|
||
'نام و نام خانوادگی مرغدار',
|
||
'نام فارم',
|
||
'موبایل',
|
||
'کشتارگاه های پیشنهادی',
|
||
'آدرس',
|
||
'سن مرغ',
|
||
'تعداد درخواست کشتار',
|
||
'مانده در سالن',
|
||
'میانگین وزنی هر قطعه(کیلوگرم)',
|
||
'وزن کل درخواست(کیلوگرم)',
|
||
'قیمت هرکیلو مرغ زنده(ریال)',
|
||
'تایید شده',
|
||
]
|
||
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=17)
|
||
|
||
excel_description(worksheet, 'A2', 'درخواست کشتار مرغداران', size=11, row2='B2')
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
excel_description(worksheet, 'A3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', color='red',
|
||
row2='C3')
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 5, 6, height=23, width=21.01)
|
||
l = 4
|
||
all_quantity = 0
|
||
all_wight = 0
|
||
all_left_over = 0
|
||
all_age = []
|
||
if filtered_province_kill_reqs:
|
||
for filtered_poultry_kill_request in filtered_province_kill_reqs:
|
||
all_quantity += filtered_poultry_kill_request.quantity
|
||
all_wight += int(
|
||
filtered_poultry_kill_request.quantity * filtered_poultry_kill_request.Index_weight)
|
||
l += 1
|
||
date_of_create = jdatetime.date.fromgregorian(
|
||
day=filtered_poultry_kill_request.create_date.day,
|
||
month=filtered_poultry_kill_request.create_date.month,
|
||
year=filtered_poultry_kill_request.create_date.year
|
||
)
|
||
date_of_kill = jdatetime.date.fromgregorian(
|
||
day=filtered_poultry_kill_request.send_date.day,
|
||
month=filtered_poultry_kill_request.send_date.month,
|
||
year=filtered_poultry_kill_request.send_date.year
|
||
)
|
||
state = 'تایید شده'
|
||
if filtered_poultry_kill_request.state == 'pending':
|
||
state = 'در انتظار تایید'
|
||
kill_house = '-'
|
||
if filtered_poultry_kill_request.kill_house_list is not None:
|
||
for name in filtered_poultry_kill_request.kill_house_list:
|
||
kill_house += name + '/'
|
||
age = (
|
||
filtered_poultry_kill_request.send_date.date() - filtered_poultry_kill_request.hatching.date.date()).days + 1
|
||
|
||
if age not in all_age:
|
||
all_age.append(age)
|
||
|
||
sale_type = 'دولتی' if filtered_poultry_kill_request.free_sale_in_province == False else 'آزاد'
|
||
all_left_over += filtered_poultry_kill_request.hatching.left_over
|
||
|
||
list1 = [
|
||
m,
|
||
str(filtered_poultry_kill_request.order_code),
|
||
str(date_of_create),
|
||
str(date_of_kill),
|
||
sale_type,
|
||
filtered_poultry_kill_request.poultry.user.fullname,
|
||
filtered_poultry_kill_request.poultry.unit_name,
|
||
filtered_poultry_kill_request.poultry.user.mobile,
|
||
kill_house,
|
||
filtered_poultry_kill_request.poultry.address.city.name,
|
||
str(age),
|
||
filtered_poultry_kill_request.quantity,
|
||
filtered_poultry_kill_request.hatching.left_over,
|
||
filtered_poultry_kill_request.Index_weight,
|
||
int(filtered_poultry_kill_request.quantity * filtered_poultry_kill_request.Index_weight),
|
||
filtered_poultry_kill_request.amount,
|
||
state
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1)
|
||
all_age1 = sorted(all_age)
|
||
value_header_list = [
|
||
len(filtered_province_kill_reqs),
|
||
all_quantity,
|
||
all_wight,
|
||
all_left_over,
|
||
int((sum(all_age1)) / len(all_age1)) if len(all_age1) > 0 else '-',
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4)
|
||
elif sheet_name == 'اطلاعات بار':
|
||
filtered_kill_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).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('province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing', '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__poultry__user__fullname',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'province_kill_request__kill_house_price',
|
||
'price',
|
||
'killer__name',
|
||
'killhouse_user__type', 'killer', 'bar_document_status',
|
||
'bar_document_status__title').values(
|
||
'province_request__poultry_request__poultry__user__fullname', 'province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'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', 'bar_document_status',
|
||
'province_kill_request__kill_house_price',
|
||
'price',
|
||
'bar_document_status__title'
|
||
)
|
||
|
||
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'))
|
||
)
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'نوع کشتار',
|
||
'کدسفارش مرغدار',
|
||
'نام و نام خانوادگی مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'نام فارم',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
'قیمت پیشنهادی کشتارگاه(ریال)',
|
||
'قیمت تعاونی(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
'کشتارکن اختصاصی',
|
||
'تلفن کشتارکن اختصاصی',
|
||
' محل کشتار ',
|
||
'قیمت کشتارگاه(ریال)',
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'وضعیت',
|
||
'وضعیت سند',
|
||
'وضعیت ورود انبار',
|
||
'تعداد لاشه',
|
||
'وزن لاشه',
|
||
'درصد افت در لحظه',
|
||
'درصد افت ورود به انبار',
|
||
'کشور مقصد',
|
||
'اختلاف مجوز',
|
||
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
|
||
header_list = [
|
||
'تعداد بارهای ایجاد شده',
|
||
'تعداد بارهای دارای کشتارکن اختصاصی',
|
||
'مجموع حجم بارها',
|
||
'مجموع وزن بارها',
|
||
'میانگین وزن ',
|
||
'کمترین سن',
|
||
'بیشترین سن',
|
||
'میانگین سنی',
|
||
'تعداد بارهای دارای کد قرنطینه',
|
||
'حجم بارهای دارای کد قرنطینه',
|
||
'تعداد بار احراز شده از قرنطینه',
|
||
'مجموع تعداد قطعه احراز شده از قرنطینه',
|
||
'تعداد بار فاقد قرنطینه',
|
||
'حجم بار فاقد قرنطینه',
|
||
' تعداد بارهایی که در قرنطینه و رصدیار اختلاف دارند',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'مجموع تعداد تخلیه شده دامپزشک',
|
||
'مجموع وزن تخلیه شده دامپزشک',
|
||
'تعداد بارهای تکمیل شده',
|
||
'مجموع تعداد نهایی در کشتارگاه',
|
||
'مجموع وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'تعداد بار های وارد شده در انبار',
|
||
'مجموع تعداد لاشه',
|
||
'مجموع وزن لاشه',
|
||
'میانگین درصد افت لاشه ورود به انبار',
|
||
|
||
]
|
||
|
||
header_list2 = [
|
||
'تعداد درخواست مرغداران',
|
||
' مجموع تعداد قطعه درخواست مرغداران',
|
||
' مجموع وزن درخواست مرغداران',
|
||
|
||
]
|
||
header_list3 = [
|
||
'درصد بارهای دارای کد قرنطینه',
|
||
'درصد تعداد بارهای احراز شده از قرنطینه',
|
||
'درصد تعداد بارهای تکمیل شده کشتارگاه',
|
||
'درصد وزن نهایی در کشتارگاه نسبت به وزن کل',
|
||
'درصد بارهای فاقد کد قرنطینه',
|
||
'درصد بارهای اختلاف دار در قرنطینه و رصدیار',
|
||
'درصد تعداد بارهای ورودی به انبار',
|
||
'درصد وزن لاشه ها در انبار نسبت به وزن کل',
|
||
'درصد وزن لاشه در انبار نسبت به وزن نهایی در کشتارگاه',
|
||
|
||
]
|
||
create_header(worksheet, header_list, 9, 2, height=21.8)
|
||
|
||
create_header(worksheet, header_list2, 6, 2, height=21.8, color='green')
|
||
|
||
create_header(worksheet, header_list3, 6, 5, height=43, color='orange', text_color='0D0D0D')
|
||
create_header_freez(worksheet, excel_options, 1, 8, 9, height=21, len_with=True)
|
||
|
||
excel_description(worksheet, 'B1', 'گزارش بارهای ایجاد شده در فرآیند کشتار مرغ گوشتی', color='red',
|
||
row2='D1')
|
||
|
||
kill_keys = [kill.get('key') for kill in filtered_kill_reqs]
|
||
|
||
vet_checks = VetCheckRequest.objects.filter(
|
||
trash=False, kill_house_request__key__in=kill_keys
|
||
).only('create_date', 'kill_house_request__key').values(
|
||
'create_date', 'kill_house_request__key')
|
||
|
||
assignments = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__key__in=kill_keys, trash=False
|
||
).only('create_date', 'net_weight', 'real_quantity', 'kill_house_request__key')
|
||
|
||
vet_check_mapping = {vc['kill_house_request__key']: vc['create_date'] for vc in vet_checks}
|
||
assignment_mapping = {
|
||
assignment.kill_house_request.key: (
|
||
int(assignment.net_weight), assignment.real_quantity, assignment.create_date)
|
||
for assignment in assignments
|
||
}
|
||
if filtered_kill_reqs.exists():
|
||
name = filtered_kill_reqs.first()['killhouse_user__kill_house_operator__user__province__name']
|
||
worksheet['B2'] = f'استان {name}'
|
||
excel_description(worksheet, 'B2', f'استان {name}', color='red', row2='D2')
|
||
excel_description(worksheet, 'B3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='D3')
|
||
|
||
l = 8
|
||
m = 1
|
||
all_age = []
|
||
|
||
all_real_quantity = 0
|
||
all_net_weighte = 0
|
||
all_weighte = 0
|
||
poultry_ids = [req.get('province_request__poultry_request__poultry') for req in filtered_kill_reqs]
|
||
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
|
||
vet_farm_mapping = {
|
||
vet_farm.poultry_id: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
|
||
for vet_farm in vet_farms
|
||
}
|
||
if filtered_kill_reqs:
|
||
for kill in filtered_kill_reqs:
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
if age not in all_age:
|
||
all_age.append(age)
|
||
|
||
if (kill['assignment_state_archive']) == 'True' or kill[
|
||
'vet_state'] == 'accepted':
|
||
state = 'تخلیه شده'
|
||
else:
|
||
state = 'درانتظار تخلیه'
|
||
l += 1
|
||
vet_farm_id = kill.get('province_request__poultry_request__poultry')
|
||
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
|
||
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()
|
||
|
||
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 = convert_to_shamsi(year=send_date.year, month=send_date.month,
|
||
day=send_date.day, )
|
||
|
||
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'])
|
||
key = kill.get('key')
|
||
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 '-'
|
||
net_weighte, real_quantity, vet_check_date = assignment_mapping.get(key, ('-', '-', None))
|
||
all_real_quantity += real_quantity if real_quantity != '-' else 0
|
||
all_net_weighte += net_weighte if net_weighte != '-' else 0
|
||
vet_check_date = vet_check_mapping.get(key, vet_check_date)
|
||
date_of_inner_bar = convert_to_shamsi(datetime=vet_check_date) if vet_check_date else '-'
|
||
|
||
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 = 'عدم تایید راهداری'
|
||
elif kill['quarantine_code_state'] == 'merge':
|
||
quarantine_quantity = 'ادغام'
|
||
export_country = '-'
|
||
|
||
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__out'] == True:
|
||
type = 'خارج از استان'
|
||
elif kill['province_kill_request__province_request__poultry_request__direct_buying'] == True:
|
||
type = 'خرید مستقیم'
|
||
elif kill['province_request__poultry_request__freezing'] == True:
|
||
type = 'انجماد'
|
||
elif kill['province_request__poultry_request__export'] == True:
|
||
type = 'صادرات'
|
||
export_country = kill['kill_request__export_country']
|
||
else:
|
||
type = 'عادی'
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
|
||
if kill['message'] is not None:
|
||
state_delete = 'بار حذف شده'
|
||
else:
|
||
state_delete = 'فعال'
|
||
all_weighte += weight
|
||
|
||
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 kill['ware_house_confirmation'] == True:
|
||
state_ware_house_confirmation = 'ورود به انبار'
|
||
|
||
else:
|
||
state_ware_house_confirmation = '-'
|
||
|
||
weight_loss1 = kill['accepted_real_weight'] - kill['ware_house_accepted_real_weight'] if kill[
|
||
'ware_house_accepted_real_weight'] > 0 else 0
|
||
if weight_loss1 < 0:
|
||
weight_loss1 = weight_loss1 * -1
|
||
total_weight_loss = (weight_loss1 / kill['accepted_real_weight']) * 100 if weight_loss1 != 0 else 0
|
||
list1 = [
|
||
m,
|
||
str(kill.get('bar_code')),
|
||
str(date_of_poultry_request),
|
||
type,
|
||
str(kill.get('province_request__poultry_request__order_code')),
|
||
kill.get('province_request__poultry_request__poultry__user__fullname'),
|
||
str(kill.get('province_request__poultry_request__poultry__user__mobile')),
|
||
kill.get('province_request__poultry_request__poultry__user__city__name'),
|
||
kill.get('province_request__poultry_request__poultry__unit_name'),
|
||
sale_type,
|
||
age,
|
||
kill.get('province_request__poultry_request__amount') if kill.get(
|
||
'province_request__poultry_request__amount') else '-',
|
||
|
||
kill.get('province_kill_request__kill_house_price') if kill.get(
|
||
'province_kill_request__kill_house_price') else '-',
|
||
|
||
kill.get('price') if kill.get(
|
||
'price') 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,
|
||
kill.get('province_kill_request__kill_house_price'),
|
||
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['bar_document_status__title'] if kill['bar_document_status'] else '-',
|
||
state_ware_house_confirmation,
|
||
ware_house_accepted_real_quantity,
|
||
int(ware_house_accepted_real_weight),
|
||
f'%{round(total_weight_loss, 2)}',
|
||
f'%{weight_loss}',
|
||
export_country,
|
||
kill['accepted_real_quantity'] - quarantine_quantity if kill[
|
||
'quarantine_quantity'] != None else quarantine_quantity
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l, 1, height=20, different_cell=40, different_value='بار حذف شده')
|
||
killer_exclusive = len(filtered_kill_reqs.filter(killer__isnull=False))
|
||
all_state_ware_house_confirmation = len(filtered_kill_reqs.filter(ware_house_confirmation=True))
|
||
|
||
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
|
||
|
||
aggregate_filtered_kill_reqs = filtered_kill_reqs.aggregate(
|
||
total_accepted_real_quantity=Sum('accepted_real_quantity'),
|
||
total_accepted_real_weight=Sum('accepted_real_weight'),
|
||
total_quantity=Sum('quantity'),
|
||
total_vet_accepted_real_quantity=Sum('vet_accepted_real_quantity'),
|
||
total_vet_accepted_real_weight=Sum('vet_accepted_real_weight'),
|
||
total_quarantine_quantity=Sum('quarantine_quantity'),
|
||
total_ware_house_accepted_real_quantity=Sum('ware_house_accepted_real_quantity'),
|
||
total_ware_house_accepted_real_weight=Sum('ware_house_accepted_real_weight'),
|
||
total_weight_loss=Sum('weight_loss'),
|
||
|
||
)
|
||
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 = aggregate_filtered_kill_reqs['total_accepted_real_quantity'] or 0
|
||
|
||
accepted_real_wight = aggregate_filtered_kill_reqs['total_accepted_real_weight'] or 0
|
||
all_kill_request_quantity = aggregate_filtered_kill_reqs['total_quantity'] or 0
|
||
all_quarantine_quantity = aggregate_filtered_kill_reqs['total_quarantine_quantity'] or 0
|
||
all_vet_accepted_real_quantity = aggregate_filtered_kill_reqs['total_vet_accepted_real_quantity'] or 0
|
||
all_vet_accepted_real_weight = aggregate_filtered_kill_reqs['total_vet_accepted_real_weight'] or 0
|
||
has_qarantine = len(filtered_kill_reqs.filter(quarantine_quantity__isnull=False))
|
||
all_ware_house_accepted_real_quantity = aggregate_filtered_kill_reqs[
|
||
'total_ware_house_accepted_real_quantity'] or 0
|
||
all_ware_house_accepted_real_weight = aggregate_filtered_kill_reqs[
|
||
'total_ware_house_accepted_real_weight'] or 0
|
||
all_weight_loss = aggregate_filtered_kill_reqs['total_weight_loss'] or 0
|
||
has_code1 = filtered_kill_reqs.filter(clearance_code__isnull=False).aggregate(
|
||
total_quantity=Sum('quantity'),
|
||
)
|
||
all_quarantine_quantity_has_code = has_code1['total_quantity'] or 0
|
||
hasnt_code1 = filtered_kill_reqs.filter(clearance_code__isnull=True)
|
||
hasnt_code = hasnt_code1.aggregate(
|
||
total_quantity=Sum('quantity')
|
||
)
|
||
all_quarantine_quantity_hasnt_code = hasnt_code['total_quantity'] or 0
|
||
difference_bar = len(filtered_kill_reqs.filter(
|
||
Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity'))))
|
||
all_weight_loss = round(int(all_weight_loss) / all_state_ware_house_confirmation,
|
||
2) if all_weight_loss > 0 else 0
|
||
|
||
all_age1 = sorted(all_age)
|
||
has_code = len(filtered_kill_reqs.filter(clearance_code__isnull=False))
|
||
value_header_list = [
|
||
len(poultry_request),
|
||
total_requests_quantity,
|
||
int(total_requests_weight),
|
||
len(filtered_kill_reqs),
|
||
killer_exclusive,
|
||
all_kill_request_quantity,
|
||
int(all_weighte),
|
||
round(all_weighte / all_kill_request_quantity,
|
||
1) if all_weighte > 0 and all_kill_request_quantity > 0 else 0,
|
||
all_age1[0] if len(all_age1) > 0 else '-',
|
||
all_age1[len(all_age1) - 1] if len(all_age1) > 0 else '-',
|
||
int((sum(all_age1)) / len(all_age1)) if len(all_age1) > 0 else '-',
|
||
has_code,
|
||
all_quarantine_quantity_has_code,
|
||
has_qarantine,
|
||
all_quarantine_quantity,
|
||
len(hasnt_code1),
|
||
all_quarantine_quantity_hasnt_code,
|
||
difference_bar,
|
||
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}'
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 6)
|
||
value_header_list2 = [
|
||
f'%{round((has_code * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((has_qarantine * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((len(bar_complete) * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((int(all_net_weighte) * 100) / int(all_weighte), 2) if int(all_weighte) > 0 else 0}',
|
||
f'%{round((len(hasnt_code1) * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((difference_bar * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((all_state_ware_house_confirmation * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((int(all_ware_house_accepted_real_weight) * 100) / int(all_weighte), 2) if int(all_weighte) > 0 else 0}',
|
||
f'%{round((int(all_ware_house_accepted_real_weight) * 100) / int(all_net_weighte), 2) if int(all_net_weighte) > 0 else 0}'
|
||
]
|
||
create_value(worksheet, value_header_list2, 6, 6)
|
||
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),
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 3, 1, color='green')
|
||
elif sheet_name == 'تخصیصات بدون بار':
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request').first()
|
||
total_check_wage = wage_type.amount
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
union_wage_percent = percentage_wage_type.percent / 100
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
company_wage_percent = percentage_wage_type.percent / 100
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
guilds_wage_percent = percentage_wage_type.percent / 100
|
||
elif percentage_wage_type.share_type.en_name in ['city', 'wallet']:
|
||
pass
|
||
else:
|
||
other_wage_percent = percentage_wage_type.percent / 100
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request',
|
||
trash=False).first().amount
|
||
free_buying_live_weight_amount = total_wage_type.filter(en_name='live-buy', trash=False).first().amount
|
||
free_buying_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-buy',
|
||
trash=False).first().amount
|
||
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell',
|
||
trash=False).first().amount
|
||
worksheet['H3'] = 'در این قسمت تخصیصات فاقد بار نمایش داده میشود'
|
||
merge_range1 = 'H3:K3'
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['H3'].font = Font(color="C00000", bold=True)
|
||
worksheet['H3'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.filter(
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
first_car_allocated_quantity=0,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=False).order_by(
|
||
'kill_request__recive_date')
|
||
|
||
if wage_counting_type == 'carcass':
|
||
header_list = [
|
||
'تعداد سفارشات',
|
||
'تعداد کل',
|
||
'وزن کل',
|
||
'وزن لاشه ملاک تعرفه',
|
||
'جمع کل تعرفه',
|
||
]
|
||
else:
|
||
header_list = [
|
||
'تعداد سفارشات',
|
||
'تعداد کل',
|
||
'وزن کل',
|
||
'وزن ملاک تعرفه',
|
||
'جمع کل تعرفه',
|
||
]
|
||
for col_num, option in enumerate(header_list, 3):
|
||
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="00B050", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[3].height = 20.8
|
||
if wage_counting_type == 'carcass':
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد سفارش',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
'شهر',
|
||
'تاریخ کشتار',
|
||
'محل کشتار',
|
||
'نژاد',
|
||
'تعداد(قطعه)',
|
||
'وزن(کیلوگرم)',
|
||
'میانگین وزنی(کیلوگرم)',
|
||
'وزن لاشه ملاک تعرفه ',
|
||
'تعرفه (ریال)',
|
||
'تعرفه تخصیص(ریال)',
|
||
|
||
]
|
||
else:
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد سفارش',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
'شهر',
|
||
'تاریخ کشتار',
|
||
'محل کشتار',
|
||
'نژاد',
|
||
'تعداد(قطعه)',
|
||
'وزن(کیلوگرم)',
|
||
'میانگین وزنی(کیلوگرم)',
|
||
'وزن ملاک تعرفه ',
|
||
'تعرفه (ریال)',
|
||
'تعرفه تخصیص(ریال)',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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
|
||
l = 6
|
||
m = 1
|
||
for province_kill in province_kill_request:
|
||
|
||
kill_date_1 = shamsi_date(province_kill.province_request.poultry_request.send_date)
|
||
|
||
if province_kill.kill_request.slaughter_house is not None:
|
||
kill_place = province_kill.kill_request.slaughter_house.name
|
||
else:
|
||
kill_place = province_kill.kill_request.kill_house.name
|
||
|
||
total_amount = province_kill.total_wage_amount
|
||
if wage_counting_type == 'carcass':
|
||
list1 = [
|
||
m,
|
||
str(province_kill.province_request.poultry_request.order_code),
|
||
province_kill.province_request.poultry_request.poultry.unit_name,
|
||
province_kill.province_request.poultry_request.poultry.user.mobile,
|
||
province_kill.province_request.poultry_request.poultry.address.city.name,
|
||
str(kill_date_1),
|
||
kill_place,
|
||
province_kill.province_request.poultry_request.hatching.chicken_breed,
|
||
province_kill.total_killed_quantity,
|
||
province_kill.total_killed_weight,
|
||
province_kill.province_request.poultry_request.Index_weight,
|
||
province_kill.total_killed_weight * 0.75,
|
||
province_live_wage_amount,
|
||
(province_kill.total_killed_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
list1 = [
|
||
m,
|
||
str(province_kill.province_request.poultry_request.order_code),
|
||
province_kill.province_request.poultry_request.poultry.unit_name,
|
||
province_kill.province_request.poultry_request.poultry.user.mobile,
|
||
province_kill.province_request.poultry_request.poultry.address.city.name,
|
||
str(kill_date_1),
|
||
kill_place,
|
||
province_kill.province_request.poultry_request.hatching.chicken_breed,
|
||
province_kill.total_killed_quantity,
|
||
province_kill.total_killed_weight,
|
||
province_kill.province_request.poultry_request.Index_weight,
|
||
province_kill.total_killed_weight,
|
||
province_live_wage_amount,
|
||
(province_kill.total_killed_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
l += 1
|
||
m += 1
|
||
total_weight = \
|
||
province_kill_request.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
total_killed_quantity = \
|
||
province_kill_request.aggregate(total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
total_wage_amount = \
|
||
province_kill_request.aggregate(total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
if wage_counting_type == 'carcass':
|
||
value_list = [
|
||
m - 1,
|
||
total_killed_quantity,
|
||
total_weight,
|
||
total_weight * 0.75,
|
||
(total_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
value_list = [
|
||
m - 1,
|
||
total_killed_quantity,
|
||
total_weight,
|
||
total_weight,
|
||
(total_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
for item in range(len(value_list)):
|
||
cell = worksheet.cell(row=4, column=item + 3, value=value_list[item])
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
if wage_counting_type == 'carcass':
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_killed_quantity,
|
||
total_weight,
|
||
'',
|
||
total_weight * 0.75,
|
||
province_live_wage_amount,
|
||
(total_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_killed_quantity,
|
||
total_weight,
|
||
'',
|
||
total_weight,
|
||
province_live_wage_amount,
|
||
(total_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
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, float)):
|
||
cell.number_format = '#,##0' # 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")
|
||
elif sheet_name == 'خرید زنده خارج از استان':
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
type = 'live'
|
||
if request.GET['role'] in ['KillHouse', 'KillHouseVet']:
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
else:
|
||
kill_house_ids = KillHouseVet.objects.filter(vet__user=user, trash=False).values_list('kill_house',
|
||
flat=True)
|
||
kill_houses = KillHouse.objects.filter(id__in=kill_house_ids, trash=False)
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house__in=kill_houses,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type=type,
|
||
trash=False).order_by('-date')
|
||
else:
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type=type,
|
||
trash=False).order_by('-date')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'کدسفارش',
|
||
'تاریخ خرید',
|
||
'ماهیت خریدار',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'فروشنده',
|
||
'تلفن فروشنده',
|
||
'نوع خرید',
|
||
'استان/شهر',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
'وضعیت دامپزشک',
|
||
'ماشین',
|
||
'راننده',
|
||
'تلفن راننده',
|
||
'کدقرنطینه',
|
||
'تعداد قطعه زنده',
|
||
'وزن زنده (کیلوگرم)',
|
||
'تعداد لاشه',
|
||
'وزن لاشه (کیلوگرم)',
|
||
'حجم تایید شده',
|
||
'وزن تایید شده',
|
||
'تایید/رد کننده',
|
||
'تاریخ تایید/ رد',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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_list2 = [
|
||
'تعداد بارها',
|
||
' تعداد بار های درانتظار تایید',
|
||
'مجموع قطعه زنده در انتظار تایید',
|
||
'مجموع وزن زنده (کیلوگرم) درانتظار تایید',
|
||
'مجموع تعداد لاشه درانتظار تایید',
|
||
'مجموع وزن لاشه (کیلوگرم) درانتظار تایید',
|
||
|
||
' تعداد بار های رد شده',
|
||
'مجموع قطعه زنده رد شده',
|
||
'مجموع وزن زنده (کیلوگرم) رد شده',
|
||
'مجموع تعداد لاشه رد شده',
|
||
'مجموع وزن لاشه (کیلوگرم) رد شده',
|
||
|
||
' تعداد بار های تایید شده',
|
||
'مجموع قطعه زنده تایید شده',
|
||
'مجموع وزن زنده (کیلوگرم) تایید شده',
|
||
'مجموع تعداد لاشه تایید شده',
|
||
'مجموع وزن لاشه (کیلوگرم) تایید شده',
|
||
'حجم تایید شده دامپزشک',
|
||
'وزن تایید شده دامپزشک',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
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
|
||
type = 'زنده' if type == 'live' else 'لاشه'
|
||
worksheet['B1'] = f'گزارش بار {type} خرید از استان'
|
||
|
||
if kill_house_free_bar_info.exists():
|
||
name = kill_house_free_bar_info.first().kill_house.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
|
||
|
||
if kill_house_free_bar_info:
|
||
for kill in kill_house_free_bar_info:
|
||
l += 1
|
||
|
||
if kill.kill_house_vet_state == 'accepted':
|
||
state = 'تایید شده'
|
||
elif kill.kill_house_vet_state == 'pending':
|
||
state = 'درانتظار تایید'
|
||
else:
|
||
state = 'رد شده'
|
||
|
||
if kill.buy_type == 'live':
|
||
buy_type = 'زنده'
|
||
else:
|
||
buy_type = 'لاشه'
|
||
|
||
date_of_buy = jdatetime.date.fromgregorian(
|
||
day=kill.date.day,
|
||
month=kill.date.month,
|
||
year=kill.date.year
|
||
)
|
||
|
||
if kill.date_of_accept_reject:
|
||
date_of_reject_accepted = jdatetime.date.fromgregorian(
|
||
day=kill.date_of_accept_reject.day,
|
||
month=kill.date_of_accept_reject.month,
|
||
year=kill.date_of_accept_reject.year
|
||
)
|
||
else:
|
||
date_of_reject_accepted = '-'
|
||
if kill.exclusive_killer:
|
||
killer_type = f'کشتارکن اختصاصی {kill.kill_house.name}'
|
||
kill_house_name = kill.exclusive_killer.name
|
||
kill_house_mobile = kill.exclusive_killer.kill_house_operator.user.mobile
|
||
|
||
elif kill.kill_house.killer == True and kill.kill_house.type == 'public':
|
||
killer_type = 'کشتارکن عمومی'
|
||
kill_house_name = kill.kill_house.name
|
||
kill_house_mobile = kill.kill_house.kill_house_operator.user.mobile
|
||
|
||
else:
|
||
killer_type = 'کشتارگاه'
|
||
kill_house_name = kill.kill_house.name
|
||
kill_house_mobile = kill.kill_house.kill_house_operator.user.mobile
|
||
bar_code = str(kill.bar_code) if kill.bar_code else '-'
|
||
list1 = [
|
||
m,
|
||
bar_code,
|
||
str(date_of_buy),
|
||
killer_type,
|
||
kill_house_name,
|
||
kill_house_mobile,
|
||
kill.poultry_name,
|
||
kill.poultry_mobile,
|
||
buy_type,
|
||
f'{kill.province} / {kill.city}',
|
||
kill.vet_farm_name,
|
||
kill.vet_farm_mobile,
|
||
state,
|
||
kill.car,
|
||
kill.driver_name,
|
||
kill.driver_mobile,
|
||
kill.bar_clearance_code,
|
||
kill.quantity,
|
||
kill.live_weight,
|
||
kill.number_of_carcasses,
|
||
kill.weight_of_carcasses,
|
||
kill.kill_house_vet_quantity,
|
||
kill.kill_house_vet_weight,
|
||
kill.acceptor_rejector,
|
||
str(date_of_reject_accepted)
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l + 1, 1, height=20, width=30)
|
||
|
||
bar_pending = kill_house_free_bar_info.filter(kill_house_vet_state='pending')
|
||
bar_pending_quantity = bar_pending.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_live_weight = bar_pending.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_number_of_carcasses = bar_pending.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_weight_of_carcasses = bar_pending.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_rejected = kill_house_free_bar_info.filter(kill_house_vet_state='rejected')
|
||
bar_rejected_quantity = bar_rejected.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_live_weight = bar_rejected.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_number_of_carcasses = bar_rejected.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_weight_of_carcasses = bar_rejected.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_accepted = kill_house_free_bar_info.filter(kill_house_vet_state='accepted')
|
||
bar_accepted_quantity = bar_accepted.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_live_weight = bar_accepted.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_number_of_carcasses = bar_accepted.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_weight_of_carcasses = bar_accepted.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_kill_house_vet_quantity = bar_accepted.aggregate(
|
||
total_quantity=Sum('kill_house_vet_quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_kill_house_vet_weight = bar_accepted.aggregate(
|
||
total_quantity=Sum('kill_house_vet_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_live_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_number_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_weight_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_kill_house_vet_quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('kill_house_vet_quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_kill_house_vet_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('kill_house_vet_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
value_header_list2 = [
|
||
m - 1,
|
||
len(bar_pending),
|
||
int(bar_pending_quantity),
|
||
int(bar_pending_live_weight),
|
||
int(bar_pending_number_of_carcasses),
|
||
int(bar_pending_weight_of_carcasses),
|
||
|
||
len(bar_rejected),
|
||
int(bar_rejected_quantity),
|
||
int(bar_rejected_live_weight),
|
||
int(bar_rejected_number_of_carcasses),
|
||
int(bar_rejected_weight_of_carcasses),
|
||
|
||
len(bar_accepted),
|
||
int(bar_accepted_quantity),
|
||
int(bar_accepted_live_weight),
|
||
int(bar_accepted_number_of_carcasses),
|
||
int(bar_accepted_weight_of_carcasses),
|
||
int(bar_accepted_kill_house_vet_quantity),
|
||
int(bar_accepted_kill_house_vet_weight)
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
bar_quantity,
|
||
bar_live_weight,
|
||
int(bar_number_of_carcasses),
|
||
int(bar_weight_of_carcasses),
|
||
int(bar_kill_house_vet_quantity),
|
||
bar_kill_house_vet_weight,
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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")
|
||
elif sheet_name == 'خرید لاشه خارج استان':
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
type = 'carcass'
|
||
if request.GET['role'] in ['KillHouse', 'KillHouseVet']:
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
else:
|
||
kill_house_ids = KillHouseVet.objects.filter(vet__user=user, trash=False).values_list('kill_house',
|
||
flat=True)
|
||
kill_houses = KillHouse.objects.filter(id__in=kill_house_ids, trash=False)
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house__in=kill_houses,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type=type,
|
||
trash=False).order_by('-date')
|
||
else:
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type=type,
|
||
trash=False).order_by('-date')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت دامپزشک',
|
||
'کشتارگاه',
|
||
'فروشنده',
|
||
'نوع خرید',
|
||
'استان/شهر',
|
||
'تاریخ خرید',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
'ماشین',
|
||
'راننده',
|
||
'تلفن راننده',
|
||
'کدقرنطینه',
|
||
'تعداد قطعه زنده',
|
||
'وزن زنده (کیلوگرم)',
|
||
'تعداد لاشه',
|
||
'وزن لاشه (کیلوگرم)',
|
||
'حجم تایید شده',
|
||
'وزن تایید شده',
|
||
'تایید/رد کننده',
|
||
'تاریخ تایید/ رد',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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_list2 = [
|
||
'تعداد بارها',
|
||
' تعداد بار های درانتظار تایید',
|
||
'مجموع قطعه زنده در انتظار تایید',
|
||
'مجموع وزن زنده (کیلوگرم) درانتظار تایید',
|
||
'مجموع تعداد لاشه درانتظار تایید',
|
||
'مجموع وزن لاشه (کیلوگرم) درانتظار تایید',
|
||
|
||
' تعداد بار های رد شده',
|
||
'مجموع قطعه زنده رد شده',
|
||
'مجموع وزن زنده (کیلوگرم) رد شده',
|
||
'مجموع تعداد لاشه رد شده',
|
||
'مجموع وزن لاشه (کیلوگرم) رد شده',
|
||
|
||
' تعداد بار های تایید شده',
|
||
'مجموع قطعه زنده تایید شده',
|
||
'مجموع وزن زنده (کیلوگرم) تایید شده',
|
||
'مجموع تعداد لاشه تایید شده',
|
||
'مجموع وزن لاشه (کیلوگرم) تایید شده',
|
||
'حجم تایید شده دامپزشک',
|
||
'وزن تایید شده دامپزشک',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
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
|
||
type = 'زنده' if type == 'live' else 'لاشه'
|
||
worksheet['B1'] = f'گزارش بار {type} خرید از استان'
|
||
|
||
if kill_house_free_bar_info.exists():
|
||
name = kill_house_free_bar_info.first().kill_house.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
|
||
|
||
if kill_house_free_bar_info:
|
||
for kill in kill_house_free_bar_info:
|
||
l += 1
|
||
|
||
if kill.kill_house_vet_state == 'accepted':
|
||
state = 'تایید شده'
|
||
elif kill.kill_house_vet_state == 'pending':
|
||
state = 'درانتظار تایید'
|
||
else:
|
||
state = 'رد شده'
|
||
|
||
if kill.buy_type == 'live':
|
||
buy_type = 'زنده'
|
||
else:
|
||
buy_type = 'لاشه'
|
||
|
||
date_of_buy = jdatetime.date.fromgregorian(
|
||
day=kill.date.day,
|
||
month=kill.date.month,
|
||
year=kill.date.year
|
||
)
|
||
|
||
if kill.date_of_accept_reject:
|
||
date_of_reject_accepted = jdatetime.date.fromgregorian(
|
||
day=kill.date_of_accept_reject.day,
|
||
month=kill.date_of_accept_reject.month,
|
||
year=kill.date_of_accept_reject.year
|
||
)
|
||
else:
|
||
date_of_reject_accepted = '-'
|
||
|
||
list1 = [
|
||
m,
|
||
state,
|
||
kill.kill_house.name,
|
||
kill.poultry_name,
|
||
buy_type,
|
||
f'{kill.province} / {kill.city}',
|
||
str(date_of_buy),
|
||
kill.vet_farm_name,
|
||
kill.vet_farm_mobile,
|
||
kill.car,
|
||
kill.driver_name,
|
||
kill.driver_mobile,
|
||
kill.bar_clearance_code,
|
||
kill.quantity,
|
||
kill.live_weight,
|
||
kill.number_of_carcasses,
|
||
kill.weight_of_carcasses,
|
||
kill.kill_house_vet_quantity,
|
||
kill.kill_house_vet_weight,
|
||
kill.acceptor_rejector,
|
||
str(date_of_reject_accepted)
|
||
|
||
]
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
bar_pending = kill_house_free_bar_info.filter(kill_house_vet_state='pending')
|
||
bar_pending_quantity = bar_pending.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_live_weight = bar_pending.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_number_of_carcasses = bar_pending.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_pending_weight_of_carcasses = bar_pending.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_rejected = kill_house_free_bar_info.filter(kill_house_vet_state='rejected')
|
||
bar_rejected_quantity = bar_rejected.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_live_weight = bar_rejected.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_number_of_carcasses = bar_rejected.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_rejected_weight_of_carcasses = bar_rejected.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_accepted = kill_house_free_bar_info.filter(kill_house_vet_state='accepted')
|
||
bar_accepted_quantity = bar_accepted.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_live_weight = bar_accepted.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_number_of_carcasses = bar_accepted.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_weight_of_carcasses = bar_accepted.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_kill_house_vet_quantity = bar_accepted.aggregate(
|
||
total_quantity=Sum('kill_house_vet_quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_accepted_kill_house_vet_weight = bar_accepted.aggregate(
|
||
total_quantity=Sum('kill_house_vet_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_live_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_number_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_weight_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
bar_kill_house_vet_quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('kill_house_vet_quantity')).get(
|
||
'total_quantity') or 0
|
||
bar_kill_house_vet_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('kill_house_vet_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
value_header_list2 = [
|
||
m - 1,
|
||
len(bar_pending),
|
||
int(bar_pending_quantity),
|
||
int(bar_pending_live_weight),
|
||
int(bar_pending_number_of_carcasses),
|
||
int(bar_pending_weight_of_carcasses),
|
||
|
||
len(bar_rejected),
|
||
int(bar_rejected_quantity),
|
||
int(bar_rejected_live_weight),
|
||
int(bar_rejected_number_of_carcasses),
|
||
int(bar_rejected_weight_of_carcasses),
|
||
|
||
len(bar_accepted),
|
||
int(bar_accepted_quantity),
|
||
int(bar_accepted_live_weight),
|
||
int(bar_accepted_number_of_carcasses),
|
||
int(bar_accepted_weight_of_carcasses),
|
||
int(bar_accepted_kill_house_vet_quantity),
|
||
int(bar_accepted_kill_house_vet_weight)
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
bar_quantity,
|
||
bar_live_weight,
|
||
int(bar_number_of_carcasses),
|
||
int(bar_weight_of_carcasses),
|
||
int(bar_kill_house_vet_quantity),
|
||
bar_kill_house_vet_weight,
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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")
|
||
elif sheet_name == 'فروش زنده به خارج استان':
|
||
|
||
state = 'accepted'
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'])
|
||
name_bar = ''
|
||
if request.GET['role'] == 'VetFarm':
|
||
vet_farms = VetFarm.objects.filter(vet__user=user, trash=False)
|
||
poultries = Poultry.objects.filter(
|
||
pk__in=vet_farms.values('poultry')
|
||
)
|
||
if state == 'pending':
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
poultry__in=poultries, send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
elif state == 'accepted':
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True) | Q(state_process='accepted', province_state='accepted', final_state='archive',
|
||
has_wage=False, wage_pay=False),
|
||
poultry__in=poultries, send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
else:
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='rejected', province_state='rejected', final_state='archive', has_wage=True,
|
||
wage_pay=False, out_province_request_cancel=False) | Q(state_process='rejected',
|
||
province_state='rejected',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False) | Q(
|
||
state_process='pending', province_state='pending', final_state='pending',
|
||
has_wage=False, wage_pay=False, out_province_request_cancel=True),
|
||
poultry__in=poultries, send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
trash=False).order_by('-send_date')
|
||
|
||
elif request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user)
|
||
if state == 'pending':
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
poultry__city_operator=city_operator.unit_name,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out=True,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
name_bar = 'جدید'
|
||
elif state == 'accepted':
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True) | Q(state_process='accepted', province_state='accepted', final_state='archive',
|
||
has_wage=False, wage_pay=False),
|
||
poultry__city_operator=city_operator.unit_name,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out=True,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
name_bar = 'تایید شده'
|
||
else:
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='rejected', province_state='rejected', final_state='archive', has_wage=True,
|
||
wage_pay=False, out_province_request_cancel=False) | Q(state_process='rejected',
|
||
province_state='rejected',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False) | Q(
|
||
state_process='pending', province_state='pending', final_state='pending',
|
||
has_wage=False, wage_pay=False, out_province_request_cancel=True),
|
||
poultry__city_operator=city_operator.unit_name,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out=True,
|
||
trash=False).order_by('-send_date')
|
||
|
||
name_bar = 'حذف/رد شده'
|
||
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
if state == 'pending':
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
poultry__address__city=user.city,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out=True,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
name_bar = 'جدید'
|
||
elif state == 'accepted':
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True) | Q(state_process='accepted', province_state='accepted', final_state='archive',
|
||
has_wage=False, wage_pay=False),
|
||
poultry__address__city=user.city,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out=True,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
name_bar = 'تایید شده'
|
||
else:
|
||
name_bar = 'حذف/رد شده'
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='rejected', province_state='rejected', final_state='archive', has_wage=True,
|
||
wage_pay=False, out_province_request_cancel=False) | Q(state_process='rejected',
|
||
province_state='rejected',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False) | Q(
|
||
state_process='pending', province_state='pending', final_state='pending',
|
||
has_wage=False, wage_pay=False, out_province_request_cancel=True),
|
||
poultry__address__city=user.city,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out=True,
|
||
trash=False).order_by('-send_date')
|
||
|
||
|
||
elif request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX']:
|
||
if state == 'pending':
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2, out=True,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
name_bar = 'جدید'
|
||
elif state == 'accepted':
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=True) | Q(state_process='accepted', province_state='accepted', final_state='archive',
|
||
has_wage=False, wage_pay=False),
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2, out=True,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
name_bar = 'تایید شده'
|
||
else:
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='rejected', province_state='rejected', final_state='archive', has_wage=True,
|
||
wage_pay=False, out_province_request_cancel=False) | Q(state_process='rejected',
|
||
province_state='rejected',
|
||
final_state='archive',
|
||
has_wage=False, wage_pay=False,
|
||
out_province_request_cancel=False) | Q(
|
||
state_process='pending', province_state='pending', final_state='pending',
|
||
has_wage=False, wage_pay=False, out_province_request_cancel=True),
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2, out=True,
|
||
trash=False).order_by('-send_date')
|
||
name_bar = 'رد شده'
|
||
else:
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
Q(state_process='accepted', province_state='accepted', final_state='archive', has_wage=True,
|
||
wage_pay=False) | Q(state_process='pending', province_state='pending', final_state='pending',
|
||
wage_pay=False),
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
out_province_request_cancel=False,
|
||
trash=False).order_by('-send_date')
|
||
|
||
poultry_requests_accepted = poultry_requests.filter(province_state='accepted')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت',
|
||
'پرداخت کننده',
|
||
'کدسفارش مرغدار',
|
||
' تاریخ ثبت درخواست',
|
||
' تاریخ کشتار',
|
||
' کشتار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
' استان مرغدار',
|
||
'سن مرغ',
|
||
' نژاد',
|
||
'تعداد درخواست',
|
||
'میانگین وزنی',
|
||
'وزن درخواست',
|
||
'مانده در سالن',
|
||
'جوجه ریزی اولیه',
|
||
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
' شهر خریدار',
|
||
'استان خریدار',
|
||
'محل کشتار',
|
||
'کد یکتای کشتارگاه',
|
||
'شهر محل کشتار',
|
||
|
||
'نوع خودرو',
|
||
'پلاک',
|
||
|
||
'نام راننده',
|
||
'موبایل راننده',
|
||
'کد بهداشتی حمل و نقل',
|
||
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'ثبت کننده کد قرنطینه',
|
||
'تاریخ ثبت کد قرنطینه',
|
||
'سازنده',
|
||
|
||
]
|
||
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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, 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="0070C0", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[2].height = 20.8
|
||
|
||
worksheet['B1'] = f'گزارش بارهای {name_bar} خارج از استان'
|
||
if poultry_requests.exists():
|
||
name = poultry_requests.first().poultry.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 = 6
|
||
m = 1
|
||
|
||
all_weighte = 0
|
||
all_chicken_quantity = 0
|
||
all_age = []
|
||
all_quantity = poultry_requests_accepted.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
|
||
all_weighte = poultry_requests_accepted.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total']
|
||
|
||
has_code = 0
|
||
if poultry_requests:
|
||
for poultry_request in poultry_requests:
|
||
|
||
if ProvinceKillRequest.objects.filter(
|
||
province_request__city_request_Poultry__poultry_request=poultry_request,
|
||
state='accepted').exists():
|
||
age = (poultry_request.send_date - poultry_request.hatching.date).days + 1
|
||
else:
|
||
age = (datetime.datetime.now() - poultry_request.hatching.date).days + 1
|
||
all_age.append(age)
|
||
all_chicken_quantity += poultry_request.hatching.quantity
|
||
create_date_of_poultry_request = jdatetime.date.fromgregorian(
|
||
day=poultry_request.create_date.day,
|
||
month=poultry_request.create_date.month,
|
||
year=poultry_request.create_date.year
|
||
)
|
||
date_of_kill_request = jdatetime.date.fromgregorian(
|
||
day=poultry_request.send_date.day,
|
||
month=poultry_request.send_date.month,
|
||
year=poultry_request.send_date.year
|
||
)
|
||
if poultry_request.quarantine_code_registrar is not None:
|
||
date_code = poultry_request.quarantine_code_registrar['date'].split('-')
|
||
|
||
date_of_create_code = jdatetime.date.fromgregorian(
|
||
day=int(date_code[2]),
|
||
month=int(date_code[1]),
|
||
year=int(date_code[0])
|
||
)
|
||
full_name = poultry_request.quarantine_code_registrar['fullname']
|
||
mobile = poultry_request.quarantine_code_registrar['mobile']
|
||
else:
|
||
date_of_create_code = '-'
|
||
full_name = '-'
|
||
mobile = '-'
|
||
|
||
killing_place = '-'
|
||
killing_place_city = '-'
|
||
uniq_id = '-'
|
||
if poultry_request.out_province_poultry_request_buyer:
|
||
if poultry_request.out_province_poultry_request_buyer.type == 'killhouse':
|
||
is_killer = 'کشتارگاه'
|
||
uniq_id = poultry_request.out_province_poultry_request_buyer.kill_house_unique_id if poultry_request.out_province_poultry_request_buyer.kill_house_unique_id else '-'
|
||
|
||
else:
|
||
is_killer = 'کشتارکن'
|
||
killing_place = poultry_request.killer_kill_house_unit_name \
|
||
if poultry_request.killer_kill_house_unit_name is not None \
|
||
else '-'
|
||
killing_place_city = poultry_request.killer_kill_house_province \
|
||
+ '(' + poultry_request.killer_kill_house_city \
|
||
+ ')' if poultry_request.killer_kill_house_province \
|
||
and poultry_request.killer_kill_house_city is not None \
|
||
else '-'
|
||
uniq_id = poultry_request.kill_house_unique_id if poultry_request.kill_house_unique_id else '-'
|
||
else:
|
||
is_killer = 'کشتارگاه' if poultry_request.buyer is not None and poultry_request.buyer[
|
||
'buyerType'] == 'killhouse' else 'کشتارکن'
|
||
if poultry_request.quarantine_code:
|
||
code = poultry_request.quarantine_code
|
||
has_code += 1
|
||
else:
|
||
code = '-'
|
||
|
||
freez_state = 'منجمد' if poultry_request.freezing == True else 'عادی'
|
||
|
||
if poultry_request.out_province_poultry_request_buyer is not None:
|
||
full_name_buyer = poultry_request.out_province_poultry_request_buyer.fullname
|
||
mobile_buyer = poultry_request.out_province_poultry_request_buyer.user.mobile
|
||
city_buyer = poultry_request.out_province_poultry_request_buyer.user.city.name
|
||
province_buyer = poultry_request.out_province_poultry_request_buyer.user.province.name
|
||
|
||
else:
|
||
full_name_buyer = poultry_request.buyer['firstName']
|
||
mobile_buyer = poultry_request.buyer['mobile']
|
||
city_buyer = poultry_request.buyer['city']
|
||
province_buyer = poultry_request.buyer['province']
|
||
|
||
if poultry_request.province_state == 'rejected':
|
||
state1 = 'رد شده'
|
||
elif poultry_request.province_state == 'pending' and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'در انتظار تایید'
|
||
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == True and poultry_request.wage_pay == False and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'در انتظار پرداخت'
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == False and poultry_request.wage_pay == False and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'تایید شده'
|
||
elif poultry_request.province_state == 'accepted' and poultry_request.has_wage == True and poultry_request.wage_pay == True and poultry_request.out_province_request_cancel == False and poultry_request.out_province_request_cancel == False:
|
||
state1 = 'پرداخت شده'
|
||
else:
|
||
state1 = 'لغو شده'
|
||
|
||
list1 = [
|
||
m,
|
||
state1,
|
||
poultry_request.payer_fullname if poultry_request.payer_fullname else '-',
|
||
str(poultry_request.order_code),
|
||
str(create_date_of_poultry_request),
|
||
str(date_of_kill_request),
|
||
freez_state,
|
||
poultry_request.poultry.user.fullname,
|
||
poultry_request.poultry.user.mobile,
|
||
poultry_request.poultry.user.city.name,
|
||
poultry_request.poultry.user.province.name,
|
||
age,
|
||
poultry_request.hatching.chicken_breed,
|
||
poultry_request.quantity,
|
||
poultry_request.Index_weight,
|
||
int(poultry_request.quantity * poultry_request.Index_weight),
|
||
poultry_request.hatching.left_over,
|
||
poultry_request.hatching.quantity,
|
||
is_killer,
|
||
full_name_buyer,
|
||
mobile_buyer,
|
||
city_buyer,
|
||
province_buyer,
|
||
killing_place,
|
||
uniq_id,
|
||
killing_place_city,
|
||
poultry_request.out_province_driver_info[
|
||
'driverCar'] if poultry_request.out_province_driver_info != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverPelak'] if poultry_request.out_province_driver_info != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverName'] if poultry_request.out_province_driver_info != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverMobile'] if poultry_request.out_province_driver_info != None else '-',
|
||
poultry_request.out_province_driver_info[
|
||
'driverhealthCode'] if poultry_request.out_province_driver_info != None else '-',
|
||
code,
|
||
full_name + '(' + mobile + ')',
|
||
str(date_of_create_code),
|
||
poultry_request.registrar['fullname'] if poultry_request.registrar else '-'
|
||
]
|
||
|
||
m += 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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
l += 1
|
||
|
||
# last_age=sorted(reversed(all_age))
|
||
all_age = sorted(all_age)
|
||
value_header_list2 = [
|
||
len(poultry_requests_accepted),
|
||
all_quantity if all_quantity != None else 0,
|
||
all_weighte if all_weighte != None else 0,
|
||
all_age[0] if len(all_age) > 0 else None,
|
||
all_age[len(all_age) - 1] if len(all_age) > 0 else None,
|
||
has_code,
|
||
|
||
]
|
||
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, 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_quantity if all_quantity != None else 0,
|
||
'',
|
||
all_weighte,
|
||
'',
|
||
all_chicken_quantity,
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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")
|
||
else:
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
'kill_house', flat=True)
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).exclude(
|
||
id__in=kill_house_ids).order_by(
|
||
'id')
|
||
|
||
serializer = KillHouseForPerformanceDashboardSerializer(kill_houses, many=True,
|
||
context={'date1': date1, 'date2': date2, }).data
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'ماهیت',
|
||
'کشتارگاه / کشتارکن',
|
||
'مالک',
|
||
'تلفن',
|
||
'شهر',
|
||
'تعداد بار داخل استان',
|
||
'حجم بار داخل استان',
|
||
'وزن بار داخل استان',
|
||
'تعداد بار خارج استان',
|
||
'حجم بار خارج استان',
|
||
'وزن بار خارج استان',
|
||
'وزن تخصیصات بدون بار',
|
||
|
||
]
|
||
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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, 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="0070C0", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[2].height = 20.8
|
||
|
||
worksheet['B1'] = f'اطلاعات کشتارگاه ها'
|
||
|
||
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 = 6
|
||
m = 1
|
||
|
||
if serializer:
|
||
for data in serializer:
|
||
killer = 'کشتارگاه' if data['killer'] == False else 'کشتارکن'
|
||
list1 = [
|
||
m,
|
||
killer,
|
||
data['name'],
|
||
data['kill_house_operator']['user']['fullname'],
|
||
data['kill_house_operator']['user']['mobile'],
|
||
data['kill_house_operator']['user']['city'],
|
||
data['killing_info']['kill_house_requests_count'],
|
||
data['killing_info']['kill_house_requests_quantity'],
|
||
data['killing_info']['kill_house_requests_weight'],
|
||
data['killing_info']['kill_house_free_bar_count'],
|
||
data['killing_info']['kill_house_free_bar_quantity'],
|
||
data['killing_info']['kill_house_free_bar_weight'],
|
||
data['killing_info']['province_kill_requests_quantity'],
|
||
|
||
]
|
||
|
||
m += 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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
l += 1
|
||
total_kill_house_requests_count = sum(
|
||
data.get('killing_info', {}).get('kill_house_requests_count', 0) for data in serializer
|
||
)
|
||
total_kill_house_requests_quantity = sum(
|
||
data.get('killing_info', {}).get('kill_house_requests_quantity', 0) for data in serializer
|
||
)
|
||
total_kill_house_requests_weight = sum(
|
||
data.get('killing_info', {}).get('kill_house_requests_weight', 0) for data in serializer
|
||
)
|
||
total_kill_house_free_bar_count = sum(
|
||
data.get('killing_info', {}).get('kill_house_free_bar_count', 0) for data in serializer
|
||
)
|
||
total_kill_house_free_bar_quantity = sum(
|
||
data.get('killing_info', {}).get('kill_house_free_bar_quantity', 0) for data in serializer
|
||
)
|
||
total_kill_house_free_bar_weight = sum(
|
||
data.get('killing_info', {}).get('kill_house_free_bar_weight', 0) for data in serializer
|
||
)
|
||
total_province_kill_requests_quantity = sum(
|
||
data.get('killing_info', {}).get('province_kill_requests_quantity', 0) for data in serializer
|
||
)
|
||
|
||
# ایجاد لیست از مقادیر جمعزده شده
|
||
totals_list = [
|
||
total_kill_house_requests_count,
|
||
total_kill_house_requests_quantity,
|
||
total_kill_house_requests_weight,
|
||
total_kill_house_free_bar_count,
|
||
total_kill_house_free_bar_quantity,
|
||
total_kill_house_free_bar_weight,
|
||
total_province_kill_requests_quantity
|
||
]
|
||
for item in range(len(totals_list)):
|
||
cell = worksheet.cell(row=3, column=item + 6, value=totals_list[item])
|
||
value = totals_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 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_kill_house_requests_count,
|
||
total_kill_house_requests_quantity,
|
||
total_kill_house_requests_weight,
|
||
total_kill_house_free_bar_count,
|
||
total_kill_house_free_bar_quantity,
|
||
total_kill_house_free_bar_weight,
|
||
total_province_kill_requests_quantity
|
||
|
||
]
|
||
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, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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( # noqa
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def steward_allocation_excel(request):
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
role = request.GET.get('role')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
kill_house_key = request.GET.get('kill_house_key')
|
||
steward_key = request.GET.get('steward_key')
|
||
allocations_type = request.GET.get('type')
|
||
trash = request.GET.get('trash')
|
||
return_trash = request.GET.get('return_trash')
|
||
filters = {
|
||
'to_cold_house__isnull': True,
|
||
'calculate_status': True,
|
||
}
|
||
if trash == 'true':
|
||
filters['trash'] = True
|
||
filters['active_expire_date_time'] = True
|
||
else:
|
||
filters['trash'] = False
|
||
if allocations_type == 'KillHouse':
|
||
filters['kill_house__isnull'] = False
|
||
elif allocations_type == 'Steward':
|
||
filters['steward__isnull'] = False
|
||
if return_trash == 'true':
|
||
filters['return_trash'] = True
|
||
filters['trash'] = False
|
||
if kill_house_key and kill_house_key != 'all':
|
||
filters['kill_house__key'] = kill_house_key
|
||
if steward_key and steward_key != 'all':
|
||
filters['steward__key'] = steward_key
|
||
|
||
if date1:
|
||
filters['date__date__gte'] = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
filters['date__date__lte'] = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
filters['kill_house'] = kill_house
|
||
elif role == 'Steward':
|
||
steward = Guilds.objects.get(user=user, trash=False)
|
||
filters['steward'] = steward
|
||
allocations = StewardAllocation.objects.filter(**filters).order_by('-date')
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
allocations = allocations.filter(
|
||
build_query(StewardAllocationDashboardFilterSet, value)
|
||
)
|
||
serializer = InProvinceAllocationSerializer(allocations, many=True).data
|
||
|
||
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')
|
||
red_font = Font(color="C00000", bold=True)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد توزیع',
|
||
'وزن کل توزیع',
|
||
'وزن توزیع به مباشر',
|
||
'وزن توزیع به صنف',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
if trash == 'true':
|
||
excel_description(worksheet, 'A1', f'تخصیصات حذف شده', size=11, color='red',
|
||
row2='D1')
|
||
elif return_trash == 'true':
|
||
excel_description(worksheet, 'A1', f'تخصیصات برگشت داده شده', size=11, color='red',
|
||
row2='D1')
|
||
else:
|
||
excel_description(worksheet, 'A1', f'تخصیصات صورت گرفته', size=11, color='red',
|
||
row2='D1')
|
||
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
|
||
|
||
if serializer:
|
||
for allocation in serializer:
|
||
l += 1
|
||
|
||
allocation_type = allocation.get('allocation_type', '')
|
||
|
||
seller_name = ''
|
||
seller_mobile = ''
|
||
seller_city = ''
|
||
buyer_name = ''
|
||
buyer_mobile = ''
|
||
buyer_city = ''
|
||
|
||
kill_house = (allocation or {}).get('kill_house', {}) or {}
|
||
steward = allocation.get('steward', {}) or {}
|
||
kill_house_operator = kill_house.get('kill_house_operator', {}) or {}
|
||
kill_house_user = kill_house_operator.get('user', {}) or {}
|
||
kill_house_user_city = kill_house_user.get('city', {}) or {}
|
||
|
||
if allocation_type == 'killhouse_steward':
|
||
seller_name = kill_house.get('name', '')
|
||
seller_mobile = kill_house_user.get('mobile', '')
|
||
seller_city = kill_house_user_city.get('city_name', '')
|
||
allocation_type = 'کشتارگاه به مباشر'
|
||
|
||
to_steward = allocation.get('to_steward', {})
|
||
buyer_name = to_steward.get('guilds_name', '')
|
||
buyer_mobile = to_steward.get('user', {}).get('mobile', '')
|
||
buyer_city = to_steward.get('user', {}).get('city_name', '')
|
||
|
||
elif allocation_type == 'killhouse_guild':
|
||
seller_name = kill_house.get('name', '')
|
||
seller_mobile = kill_house_user.get('mobile', '')
|
||
seller_city = kill_house_user_city.get('city_name', '')
|
||
allocation_type = 'کشتارگاه به صنف'
|
||
|
||
to_guilds = allocation.get('to_guilds', {})
|
||
if to_guilds:
|
||
buyer_name = to_guilds.get('guilds_name', '')
|
||
buyer_mobile = to_guilds.get('user', {}).get('mobile', '')
|
||
buyer_city = to_guilds.get('user', {}).get('city_name', '')
|
||
elif allocation_type == 'steward_guild':
|
||
seller_name = steward.get('guilds_name', '')
|
||
seller_mobile = steward.get('user', {}).get('mobile', '')
|
||
seller_city = steward.get('user', {}).get('city_name', '')
|
||
allocation_type = 'مباشر به صنف'
|
||
|
||
to_guilds = allocation.get('to_guilds', {})
|
||
if to_guilds:
|
||
buyer_name = to_guilds.get('guilds_name', '')
|
||
buyer_mobile = to_guilds.get('user', {}).get('mobile', '')
|
||
buyer_city = to_guilds.get('user', {}).get('city_name', '')
|
||
elif allocation_type == 'steward_steward':
|
||
seller_name = steward.get('guilds_name', '')
|
||
seller_mobile = steward.get('user', {}).get('mobile', '')
|
||
seller_city = steward.get('user', {}).get('city_name', '')
|
||
allocation_type = 'مباشر به مباشر'
|
||
|
||
to_steward = allocation.get('to_steward', {})
|
||
buyer_name = to_steward.get('guilds_name', '')
|
||
buyer_mobile = to_steward.get('user', {}).get('mobile', '')
|
||
buyer_city = to_steward.get('user', {}).get('city_name', '')
|
||
|
||
elif allocation_type == 'killhouse_killhouse':
|
||
seller_name = kill_house.get('name', '')
|
||
seller_mobile = kill_house_user.get('mobile', '')
|
||
seller_city = kill_house_user_city.get('city_name', '')
|
||
allocation_type = 'کشتارگاه به کشتارگاه'
|
||
|
||
to_kill_house = allocation.get('to_kill_house', {})
|
||
buyer_name = to_kill_house.get('name', '')
|
||
buyer_mobile = to_kill_house.get('kill_house_operator', {}).get('user', {}).get('mobile', '')
|
||
buyer_city = to_kill_house.get('kill_house_operator', {}).get('user', {}).get('city', {}).get(
|
||
'city_name', '')
|
||
|
||
if allocation['sell_type'] == 'exclusive':
|
||
sell_type = 'اختصاصی'
|
||
else:
|
||
sell_type = 'آزاد'
|
||
system_registration_code = 'ارسال شده' if allocation['system_registration_code'] == True else 'ارسال نشده'
|
||
if allocation['state'] == 'pending':
|
||
state = 'در انتظار تایید'
|
||
elif trash == 'true':
|
||
state = 'حذف شده'
|
||
elif return_trash == 'true':
|
||
state = 'برگشت داده شده'
|
||
else:
|
||
state = 'تایید شده'
|
||
try:
|
||
date = datetime.datetime.strptime(allocation['date'], '%Y-%m-%dT%H:%M:%S.%f')
|
||
except ValueError:
|
||
date = datetime.datetime.strptime(allocation['date'], '%Y-%m-%dT%H:%M:%S')
|
||
list1 = [
|
||
m,
|
||
str(shamsi_date(date, set_datetime=True)),
|
||
allocation_type,
|
||
seller_name,
|
||
seller_mobile,
|
||
seller_city,
|
||
buyer_name,
|
||
buyer_mobile,
|
||
allocation.get('interface_number') or '-',
|
||
buyer_city,
|
||
allocation.get('steward_pos_status') or 'ندارد',
|
||
allocation.get('guild_pos_status') or 'ندارد',
|
||
sell_type,
|
||
allocation.get('amount', 0),
|
||
allocation.get('total_amount', 0),
|
||
allocation.get('weight_of_carcasses', 0),
|
||
allocation.get('receiver_real_weight_of_carcasses', 0),
|
||
str(allocation.get('registration_code') or '-'),
|
||
system_registration_code,
|
||
state,
|
||
|
||
]
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
total_amount = sum(
|
||
allocation.get('total_amount', 0) for allocation in serializer)
|
||
|
||
weight_of_carcasses_allocations = sum(
|
||
allocation.get('weight_of_carcasses', 0) for allocation in serializer)
|
||
|
||
receiver_real_weight_of_carcasses_allocations = sum(
|
||
allocation.get('receiver_real_weight_of_carcasses', 0) for allocation in serializer)
|
||
|
||
allocations_aggregates = allocations.aggregate(
|
||
total_count=Count('id'),
|
||
total_weight=Sum('real_weight_of_carcasses'),
|
||
total_steward_weight=Sum('real_weight_of_carcasses', filter=Q(to_steward__isnull=False)),
|
||
total_guild_weight=Sum('real_weight_of_carcasses', filter=Q(to_guilds__isnull=False)),
|
||
)
|
||
|
||
value_header_list2 = [
|
||
allocations_aggregates['total_count'] or 0,
|
||
int(allocations_aggregates['total_weight'] or 0),
|
||
int(allocations_aggregates['total_steward_weight'] or 0),
|
||
int(allocations_aggregates['total_guild_weight'] or 0),
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_amount,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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 sevrence_kill_house_steward_allocation_excel(request):
|
||
filterset_class = StewardAllocationDashboardFilterSet
|
||
|
||
role = request.GET.get('role')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
allocations_type = request.GET.get('type')
|
||
filters = {
|
||
'trash': False,
|
||
'to_cold_house__isnull': True
|
||
}
|
||
if allocations_type == 'KillHouse':
|
||
filters['kill_house__isnull'] = False
|
||
elif allocations_type == 'Steward':
|
||
filters['steward__isnull'] = False
|
||
|
||
if date1:
|
||
filters['date__date__gte'] = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
filters['date__date__lte'] = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
allocations = StewardAllocation.objects.filter(**filters)
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
allocations = allocations.filter(
|
||
build_query(filterset_class, value)
|
||
)
|
||
serializer = InProvinceAllocationSerializer(allocations, many=True).data
|
||
|
||
kill_house_names = list({(allocation.get('kill_house') or {}).get('name')
|
||
for allocation in serializer if (allocation.get('kill_house') or {}).get('name')})
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'تاریخ ثبت',
|
||
'نوع تخصیص',
|
||
'فروشنده',
|
||
'تلفن فروشنده',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'نوع فروش',
|
||
'قیمت هر کیلو(ریال)',
|
||
'قیمت کل',
|
||
'وزن تخصیصی',
|
||
'وزن تایید شده',
|
||
'کد احراز',
|
||
'وضعیت کد احراز',
|
||
'وضعیت',
|
||
|
||
]
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
l = 5
|
||
m = 1
|
||
|
||
if serializer:
|
||
for kill_house_name in kill_house_names:
|
||
kill_house = KillHouse.objects.get(trash=False, name=kill_house_name)
|
||
sheet_name = kill_house.name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد توزیع',
|
||
'وزن کل توزیع',
|
||
'وزن توزیع به مباشر',
|
||
'وزن توزیع به صنف',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'توزیع داخل استان کشتارگاه {sheet_name}', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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)
|
||
red_font = Font(color="C00000", bold=True)
|
||
|
||
worksheet['B1'].font = red_font
|
||
worksheet['B3'].font = Font(size=11)
|
||
worksheet['B2'].font = Font(size=10, bold=True, color="C00000")
|
||
allocations = allocations.filter(kill_house=kill_house)
|
||
serializer1 = InProvinceAllocationSerializer(allocations, many=True).data
|
||
for allocation in serializer1:
|
||
l += 1
|
||
|
||
allocation_type = allocation.get('allocation_type', '')
|
||
|
||
seller_name = ''
|
||
seller_mobile = ''
|
||
buyer_name = ''
|
||
buyer_mobile = ''
|
||
|
||
kill_house = allocation.get('kill_house', {})
|
||
kill_house_operator = kill_house.get('kill_house_operator', {})
|
||
kill_house_user = kill_house_operator.get('user', {})
|
||
|
||
if allocation_type == 'killhouse_steward':
|
||
seller_name = kill_house.get('name', '')
|
||
seller_mobile = kill_house_user.get('mobile', '')
|
||
allocation_type = 'کشتارگاه به مباشر'
|
||
|
||
to_steward = allocation.get('to_steward', {})
|
||
buyer_name = to_steward.get('guilds_name', '')
|
||
buyer_mobile = to_steward.get('user', {}).get('mobile', '')
|
||
|
||
elif allocation_type == 'killhouse_guild':
|
||
seller_name = kill_house.get('name', '')
|
||
seller_mobile = kill_house_user.get('mobile', '')
|
||
allocation_type = 'کشتارگاه به صنف'
|
||
|
||
to_guilds = allocation.get('to_guilds', {})
|
||
if to_guilds:
|
||
buyer_name = to_guilds.get('guilds_name', '')
|
||
buyer_mobile = to_guilds.get('user', {}).get('mobile', '')
|
||
|
||
elif allocation_type == 'killhouse_killhouse':
|
||
seller_name = kill_house.get('name', '')
|
||
seller_mobile = kill_house_user.get('mobile', '')
|
||
allocation_type = 'کشتارگاه به کشتارگاه'
|
||
|
||
to_kill_house = allocation.get('to_kill_house', {})
|
||
buyer_name = to_kill_house.get('name', '')
|
||
buyer_mobile = to_kill_house.get('kill_house_operator', {}).get('user', {}).get('mobile', '')
|
||
|
||
if allocation['sell_type'] == 'exclusive':
|
||
sell_type = 'اختصاصی'
|
||
else:
|
||
sell_type = 'آزاد'
|
||
system_registration_code = 'ارسال شده' if allocation[
|
||
'system_registration_code'] == True else 'ارسال نشده'
|
||
state = 'در انتظار تایید' if allocation['state'] == 'pending' else 'تایید شده'
|
||
try:
|
||
date = datetime.datetime.strptime(allocation['date'], '%Y-%m-%dT%H:%M:%S.%f')
|
||
except ValueError:
|
||
date = datetime.datetime.strptime(allocation['date'], '%Y-%m-%dT%H:%M:%S')
|
||
list1 = [
|
||
m,
|
||
str(shamsi_date(date)),
|
||
allocation_type,
|
||
seller_name,
|
||
seller_mobile,
|
||
buyer_name,
|
||
buyer_mobile,
|
||
sell_type,
|
||
allocation.get('amount', 0),
|
||
allocation.get('total_amount', 0),
|
||
allocation.get('weight_of_carcasses', 0),
|
||
allocation.get('receiver_real_weight_of_carcasses', 0),
|
||
str(allocation.get('registration_code') or '-'),
|
||
system_registration_code,
|
||
state,
|
||
|
||
]
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
total_amount = sum(
|
||
allocation.get('total_amount', 0) for allocation in serializer1)
|
||
|
||
weight_of_carcasses_allocations = sum(
|
||
allocation.get('weight_of_carcasses', 0) for allocation in serializer1)
|
||
|
||
receiver_real_weight_of_carcasses_allocations = sum(
|
||
allocation.get('receiver_real_weight_of_carcasses', 0) for allocation in serializer1)
|
||
|
||
allocations_aggregates = allocations.aggregate(
|
||
total_count=Count('id'),
|
||
total_weight=Sum('real_weight_of_carcasses'),
|
||
total_steward_weight=Sum('real_weight_of_carcasses', filter=Q(to_steward__isnull=False)),
|
||
total_guild_weight=Sum('real_weight_of_carcasses', filter=Q(to_guilds__isnull=False)),
|
||
)
|
||
|
||
value_header_list2 = [
|
||
allocations_aggregates['total_count'] or 0,
|
||
int(allocations_aggregates['total_weight'] or 0),
|
||
int(allocations_aggregates['total_steward_weight'] or 0),
|
||
int(allocations_aggregates['total_guild_weight'] or 0),
|
||
|
||
]
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_amount,
|
||
weight_of_carcasses_allocations,
|
||
receiver_real_weight_of_carcasses_allocations,
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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, float)):
|
||
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 free_sale_out_province_excel(request):
|
||
filterset_fields = [
|
||
'type_car',
|
||
'pelak',
|
||
'clearance_code',
|
||
'kill_house__name',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__first_name',
|
||
'kill_house__kill_house_operator__user__last_name',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'buyer__fullname',
|
||
'buyer__first_name',
|
||
'buyer__last_name',
|
||
'buyer__mobile',
|
||
'buyer__unit_name',
|
||
'buyer_name',
|
||
'buyer_mobile',
|
||
'province',
|
||
'city',
|
||
|
||
]
|
||
|
||
filterset_class = KillHouseFreeSaleBarInformationFilterSet
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
if 'type' in request.GET:
|
||
role = request.GET['role']
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
if role in ['ProvinceOperator', 'Commerce', 'ProvinceSupervisor''GuildRoom', 'SuperAdmin',
|
||
'ImprovingLivestock', 'AdminX', 'Supporter']:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False)
|
||
|
||
elif role in ['CityJahad', 'CityPoultry', 'CityOperator']:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False)
|
||
|
||
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_house,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False)
|
||
buyers = len(kill_house_free_sale_bar_info.values_list('buyer', flat=True).distinct())
|
||
|
||
else:
|
||
if role in ['ProvinceOperator', 'Commerce', 'ProvinceSupervisor''GuildRoom', 'SuperAdmin',
|
||
'ImprovingLivestock', 'AdminX', 'Supporter']:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
trash=False)
|
||
|
||
|
||
elif role in ['CityJahad', 'CityPoultry', 'CityOperator']:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
trash=False)
|
||
|
||
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_house,
|
||
trash=False)
|
||
buyers = len(kill_house_free_sale_bar_info.values_list('buyer', flat=True).distinct())
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_free_sale_bar_info_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined' and request.GET['value'].strip():
|
||
|
||
for item in filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (filterset_class(
|
||
data=query,
|
||
queryset=kill_house_free_sale_bar_info
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=kill_house_free_sale_bar_info)
|
||
kill_house_free_sale_bar_info_list = ps.filter()
|
||
kill_house_free_sale_bar_info = [] if len(
|
||
kill_house_free_sale_bar_info_list) == 0 else kill_house_free_sale_bar_info_list
|
||
|
||
|
||
else:
|
||
now = datetime.datetime.now().date()
|
||
date = datetime.datetime.strptime(str(request.GET['date']),
|
||
'%Y-%m-%d').date() if 'date' in request.GET else now
|
||
kill_house = KillHouse.objects.get(key=request.GET['kill_house_key'])
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(kill_house=kill_house,
|
||
date__year=date.year,
|
||
date__month=date.month,
|
||
date__day=date.day,
|
||
trash=False)
|
||
buyers = len(kill_house_free_sale_bar_info.values_list('buyer', flat=True).distinct())
|
||
|
||
serializer = KillHouseFreeSaleBarInformationSerializer(kill_house_free_sale_bar_info, many=True).data
|
||
|
||
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')
|
||
red_font = Font(color="C00000", bold=True)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد فروش',
|
||
'خریدار',
|
||
'وزن کل لاشه',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'فروش به خارج از استان', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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
|
||
|
||
if serializer:
|
||
for allocation in serializer:
|
||
l += 1
|
||
date = datetime.datetime.strptime(allocation['date'], '%Y-%m-%dT%H:%M:%S')
|
||
kill_house = allocation.get('kill_house', {})
|
||
kill_house_operator = kill_house.get('kill_house_operator', {})
|
||
kill_house_user = kill_house_operator.get('user', {})
|
||
buyer = allocation.get('buyer', {})
|
||
|
||
list1 = [
|
||
m,
|
||
str(shamsi_date(date)),
|
||
kill_house.get('name', ''),
|
||
kill_house_user.get('mobile', ''),
|
||
buyer.get('fullname', ''),
|
||
buyer.get('mobile', ''),
|
||
buyer.get('unit_name', ''),
|
||
buyer.get('province', ''),
|
||
buyer.get('city', ''),
|
||
allocation.get('clearance_code', ''),
|
||
allocation.get('quarantine_weight_of_carcasses', 0),
|
||
allocation.get('real_weight_of_carcasses', 0),
|
||
]
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
total_quarantine_weight = sum(
|
||
allocation.get('quarantine_weight_of_carcasses', 0) for allocation in serializer
|
||
)
|
||
|
||
total_real_weight = sum(
|
||
allocation.get('real_weight_of_carcasses', 0) for allocation in serializer
|
||
)
|
||
total_real_weight = sum(
|
||
allocation.get('real_weight_of_carcasses', 0) for allocation in serializer
|
||
)
|
||
|
||
value_header_list2 = [
|
||
len(kill_house_free_sale_bar_info),
|
||
buyers,
|
||
total_real_weight,
|
||
|
||
]
|
||
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_quarantine_weight,
|
||
total_real_weight,
|
||
|
||
]
|
||
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, float)):
|
||
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 steward_free_sale_out_province_excel(request):
|
||
filterset_class = StewardFreeSaleBarInformationFilterSet
|
||
filterset_fields = [
|
||
'steward__user__fullname',
|
||
'steward__user__first_name',
|
||
'steward__user__last_name',
|
||
'steward__user__mobile',
|
||
'buyer__user__fullname',
|
||
'buyer__user__first_name',
|
||
'buyer__user__last_name',
|
||
'buyer__user__mobile',
|
||
'province',
|
||
'city',
|
||
'province'
|
||
'buyer_name'
|
||
'buyer_mobile'
|
||
|
||
]
|
||
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
filters = {'trash': False}
|
||
role = request.GET.get('role')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
if role == 'Steward':
|
||
steward = Guilds.objects.get(user=user, trash=False)
|
||
filters['steward'] = steward
|
||
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
filters['date__date__gte'] = date1
|
||
filters['date__date__lte'] = date2
|
||
|
||
bars = StewardFreeSaleBarInformation.objects.filter(**filters).order_by('-date')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
bars = bars.filter(
|
||
build_query(filterset_class, value)
|
||
)
|
||
|
||
serializer = StewardFreeSaleBarInformationSerializer(bars, many=True).data
|
||
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')
|
||
red_font = Font(color="C00000", bold=True)
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
worksheet['B3'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
header_list2 = [
|
||
'تعداد فروش',
|
||
'خریدار',
|
||
'وزن کل لاشه',
|
||
|
||
]
|
||
|
||
for col_num, option in enumerate(header_list2, 5):
|
||
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
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
excel_description(worksheet, 'A1', f'فروش به خارج از استان مباشرین', size=11, color='red',
|
||
row2='D1')
|
||
|
||
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
|
||
|
||
if serializer:
|
||
for allocation in serializer:
|
||
l += 1
|
||
date = datetime.datetime.strptime(allocation['date'], '%Y-%m-%dT%H:%M:%S')
|
||
steward = allocation.get('steward', {})
|
||
steward_user = steward.get('user', {})
|
||
|
||
buyer = allocation.get('buyer', {})
|
||
|
||
list1 = [
|
||
m,
|
||
str(shamsi_date(date, in_value=True)),
|
||
steward.get('guilds_name', ''),
|
||
steward_user.get('mobile', ''),
|
||
buyer.get('fullname', ''),
|
||
buyer.get('mobile', ''),
|
||
buyer.get('unit_name', ''),
|
||
buyer.get('province', ''),
|
||
buyer.get('city', ''),
|
||
allocation.get('clearance_code', ''),
|
||
allocation.get('quarantine_weight_of_carcasses', 0),
|
||
allocation.get('weight_of_carcasses', 0),
|
||
]
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
buyers = len(set(bars.values_list('buyer', flat=True).distinct()))
|
||
|
||
total_quarantine_weight = sum(
|
||
allocation.get('quarantine_weight_of_carcasses', 0) for allocation in serializer
|
||
)
|
||
|
||
total_real_weight = sum(
|
||
allocation.get('weight_of_carcasses', 0) for allocation in serializer
|
||
)
|
||
|
||
value_header_list2 = [
|
||
len(bars),
|
||
buyers,
|
||
bars.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0,
|
||
|
||
]
|
||
|
||
for item in range(len(value_header_list2)):
|
||
cell = worksheet.cell(row=3, column=item + 5, value=value_header_list2[item])
|
||
value = value_header_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(size=10, bold=True)
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_quarantine_weight,
|
||
total_real_weight,
|
||
|
||
]
|
||
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, float)):
|
||
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 total_steward_dashboard_excel(request):
|
||
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)
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
stewards = Guilds.objects.filter(trash=False, steward=True, active=True).select_related('user').only('user',
|
||
'guilds_name',
|
||
'steward').order_by(
|
||
'id')
|
||
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
allocation_stewards = stewards.annotate(
|
||
allocation_count=Count(
|
||
'allocation_to_steward',
|
||
filter=Q(allocation_to_steward__receiver_state__in=['pending', 'accepted'],
|
||
allocation_to_steward__date__date__gte=date1, allocation_to_steward__date__date__lte=date2)
|
||
)
|
||
).filter(allocation_count__gt=0).order_by('-allocation_count')
|
||
|
||
free_bar_stewards = stewards.annotate(
|
||
free_bar_count=Count(
|
||
'free_bar_info_steward'
|
||
)
|
||
).filter(free_bar_count__gt=0).order_by('-free_bar_count')
|
||
|
||
stewards1 = list(set(chain(allocation_stewards, free_bar_stewards)))
|
||
|
||
else:
|
||
allocation_stewards = stewards.annotate(
|
||
allocation_count=Count(
|
||
'allocation_to_steward',
|
||
filter=Q(allocation_to_steward__receiver_state__in=['pending', 'accepted'])
|
||
)
|
||
).filter(allocation_count__gt=0).order_by('-allocation_count')
|
||
|
||
free_bar_stewards = stewards.annotate(
|
||
free_bar_count=Count(
|
||
'free_bar_info_steward'
|
||
)
|
||
).filter(free_bar_count__gt=0).order_by('-free_bar_count')
|
||
|
||
stewards1 = list(set(chain(allocation_stewards, free_bar_stewards)))
|
||
|
||
serializer = RealGuildsForDashboardSerializer(stewards1, many=True, context={'request': request}).data
|
||
|
||
header_list2 = [
|
||
'ردیف',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'ماهیت',
|
||
'شهر',
|
||
'مانده انبار فعلی',
|
||
'تعداد کل بارها',
|
||
'وزن کل بارها',
|
||
'تعداد بار وارد شده به انبار',
|
||
'کل وزن ورودی به انبار',
|
||
'تعداد فروش رفته',
|
||
'کل وزن فروش رفته',
|
||
'تعداد بار درون استان',
|
||
'وزن بار درون استان',
|
||
'تعداد بار لاشه خارج استان',
|
||
'وزن بار لاشه خارج استان',
|
||
'وزن فروش داخل استان',
|
||
'وزن فروش خارج استان',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 1, 12, height=21.8, width=20, border_style='thin')
|
||
excel_description(worksheet, 'A2', f'اطلاعات جامع انبار',
|
||
size=11, color='red', row2='B4')
|
||
if serializer:
|
||
l = 13
|
||
m = 1
|
||
|
||
for data in serializer:
|
||
steward_type = 'مباشر' if data.get('steward') == True else 'صنف'
|
||
list1 = [
|
||
m,
|
||
data.get('user', {}).get('fullname', ''),
|
||
data.get('user', {}).get('mobile', ''),
|
||
f'{steward_type}({data.get("guilds_name", "")})',
|
||
data.get("address", {}).get('city', {}).get('name'),
|
||
data.get('ware_house_info', {}).get('remain_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('total_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_entered_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('total_entered_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_in_out_province_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('total_in_out_province_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('input_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('input_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('free_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('free_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('in_province_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('out_province_bars_weight', 0),
|
||
|
||
]
|
||
|
||
create_value(worksheet, list1, l, 1, border_style='thin', m=m)
|
||
m += 1
|
||
l += 1
|
||
header_list2 = [
|
||
'وزن کل بارها',
|
||
'وزن وارد شده به انبار',
|
||
'وزن توزیع شده داخل استان',
|
||
'وزن توزیع شده خارج استان',
|
||
'مانده انبار',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 3, 3, height=21.8, width=20, color='C00000', border_style='thin')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
stewards_filter = {'trash': False, 'steward': True, 'active': True}
|
||
|
||
stewards = Guilds.objects.filter(**stewards_filter).select_related('user').only('user', 'guilds_name',
|
||
'steward').order_by(
|
||
'id')
|
||
|
||
products = RolesProducts.objects.filter(guild__in=stewards, trash=False, name='مرغ گرم').first()
|
||
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
allocation_stewards = stewards.annotate(
|
||
allocation_count=Count(
|
||
'allocation_to_steward',
|
||
filter=Q(allocation_to_steward__receiver_state__in=['pending', 'accepted'],
|
||
allocation_to_steward__date__date__gte=date1, allocation_to_steward__date__date__lte=date2,
|
||
allocation_to_steward__warehouse=True, allocation_to_steward__steward_warehouse=True)
|
||
)
|
||
).filter(allocation_count__gt=0).order_by('-allocation_count')
|
||
|
||
free_bar_stewards = stewards.annotate(
|
||
free_bar_count=Count(
|
||
'free_bar_info_steward'
|
||
)
|
||
).filter(free_bar_count__gt=0).order_by('-free_bar_count')
|
||
|
||
stewards = (list(chain(allocation_stewards, free_bar_stewards)))
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
Q(steward__in=stewards) | Q(to_steward__in=stewards),
|
||
trash=False, calculate_status=True, to_cold_house__isnull=True,
|
||
date__date__gte=date1, date__date__lte=date2, warehouse=True, steward_warehouse=True)
|
||
|
||
free_bars = StewardFreeBarInformation.objects.filter(steward__in=stewards, trash=False,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2, warehouse=True)
|
||
free_sale_bars = StewardFreeSaleBarInformation.objects.filter(steward__in=stewards, trash=False,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2, warehouse=True)
|
||
segmentations = PosSegmentation.objects.filter(guild__in=stewards, trash=False, warehouse=True,
|
||
date__date__gte=date1, date__date__lte=date2)
|
||
transactions = ProductsTransactions.objects.filter(product=products, transaction__paid=True,
|
||
transaction__date__date__gte=date1,
|
||
transaction__date__date__lte=date2, trash=False,
|
||
warehouse=True)
|
||
archives = WarehouseArchive.objects.filter(Q(steward__in=stewards) | Q(guild__in=stewards), trash=False,
|
||
date__date__gte=date1, date__lte=date2,
|
||
warehouse=True)
|
||
|
||
|
||
else:
|
||
allocation_stewards = stewards.annotate(
|
||
allocation_count=Count(
|
||
'allocation_to_steward',
|
||
filter=Q(allocation_to_steward__receiver_state__in=['pending', 'accepted'],
|
||
allocation_to_steward__warehouse=True, allocation_to_steward__steward_warehouse=True)
|
||
)
|
||
).filter(allocation_count__gt=0).order_by('-allocation_count').values_list('id', flat=True)
|
||
|
||
free_bar_stewards = stewards.annotate(
|
||
free_bar_count=Count(
|
||
'free_bar_info_steward'
|
||
)
|
||
).filter(free_bar_count__gt=0).order_by('-free_bar_count').values_list('id', flat=True)
|
||
|
||
stewards = (list(chain(allocation_stewards, free_bar_stewards)))
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
Q(steward__in=stewards) | Q(to_steward__in=stewards),
|
||
trash=False, calculate_status=True, to_cold_house__isnull=True, warehouse=True, steward_warehouse=True)
|
||
|
||
free_bars = StewardFreeBarInformation.objects.filter(steward__in=stewards, trash=False, warehouse=True)
|
||
free_sale_bars = StewardFreeSaleBarInformation.objects.filter(steward__in=stewards, trash=False,
|
||
warehouse=True)
|
||
segmentations = PosSegmentation.objects.filter(guild__in=stewards, trash=False, warehouse=True)
|
||
transactions = ProductsTransactions.objects.filter(product=products, transaction__paid=True, trash=False,
|
||
warehouse=True)
|
||
archives = WarehouseArchive.objects.filter(Q(steward__in=stewards) | Q(guild__in=stewards), trash=False,
|
||
warehouse=True)
|
||
|
||
allocations_aggregates = allocations.aggregate(
|
||
total_input_bars_count=Count('id', filter=Q(to_steward__isnull=False)),
|
||
total_input_bars_weight=Sum('real_weight_of_carcasses', filter=Q(to_steward__isnull=False)),
|
||
total_input_governmental_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(to_steward__isnull=False, quota='governmental')),
|
||
total_input_free_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(to_steward__isnull=False, quota='free')),
|
||
total_output_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(steward__isnull=False, receiver_state__in=('pending', 'accepted'))),
|
||
total_output_governmental_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(steward__isnull=False,
|
||
receiver_state__in=('pending', 'accepted'),
|
||
quota='governmental')),
|
||
total_output_free_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(steward__isnull=False,
|
||
receiver_state__in=('pending', 'accepted'), quota='free')),
|
||
total_input_entered_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(to_steward__isnull=False, receiver_state='accepted')),
|
||
|
||
total_input_entered_governmental_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(to_steward__isnull=False,
|
||
receiver_state='accepted', quota='governmental')),
|
||
|
||
total_input_entered_free_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(to_steward__isnull=False, receiver_state='accepted',
|
||
quota='free')),
|
||
|
||
)
|
||
|
||
free_bars_aggregates = free_bars.aggregate(
|
||
total_count=Count('id'),
|
||
total_weight=Sum('weight_of_carcasses')
|
||
)
|
||
|
||
free_sale_bars_aggregates = free_sale_bars.aggregate(
|
||
total_count=Count('id'),
|
||
total_weight=Sum('weight_of_carcasses'),
|
||
total_governmental_weight=Sum('weight_of_carcasses', quota='governmental'),
|
||
total_free_weight=Sum('weight_of_carcasses', quota='free'),
|
||
|
||
)
|
||
segmentations_weight = \
|
||
segmentations.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
segmentations_governmental_weight = \
|
||
segmentations.filter(quota='governmental').aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
segmentations_free_weight = \
|
||
segmentations.filter(quota='free').aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
|
||
pos_allocated_weight_info = transactions.aggregate(
|
||
pos_allocated_weight=Sum('cur_weight'),
|
||
pos_governmental_allocated_weight=Sum('cur_weight',
|
||
filter=Q(price_approved=True)),
|
||
pos_free_allocated_weight=Sum('cur_weight', filter=Q(price_approved=False)),
|
||
|
||
)
|
||
archives_info = archives.aggregate(
|
||
archives_weight=Sum('weight'),
|
||
archives_governmental_weight=Sum('weight',
|
||
filter=Q(quota='governmental')),
|
||
archives_free_weight=Sum('weight',
|
||
filter=Q(quota='free')),
|
||
|
||
)
|
||
pos_allocated_weight = pos_allocated_weight_info['pos_allocated_weight'] or 0
|
||
pos_governmental_allocated_weight = pos_allocated_weight_info['pos_governmental_allocated_weight'] or 0
|
||
pos_free_allocated_weight = pos_allocated_weight_info['pos_free_allocated_weight'] or 0
|
||
|
||
total_in_province_governmental_input_weight = allocations_aggregates[
|
||
'total_input_entered_governmental_bars_weight'] or 0
|
||
total_in_province_free_input_weight = allocations_aggregates['total_input_entered_free_bars_weight'] or 0
|
||
total_free_buying_input_weight = free_bars_aggregates['total_weight'] or 0
|
||
|
||
total_in_province_governmental_output_weight = allocations_aggregates[
|
||
'total_output_governmental_bars_weight'] or 0
|
||
total_in_province_free_output_weight = allocations_aggregates['total_output_free_bars_weight'] or 0
|
||
total_governmental_free_sale_weight = free_sale_bars_aggregates['total_governmental_weight'] or 0
|
||
total_free_free_sale_weight = free_sale_bars_aggregates['total_free_weight'] or 0
|
||
archives_weight = archives_info['archives_weight'] or 0
|
||
archives_governmental_weight = archives_info['archives_governmental_weight'] or 0
|
||
archives_free_weight = archives_info['archives_free_weight'] or 0
|
||
|
||
total_governmental_input_weight = total_in_province_governmental_input_weight
|
||
total_free_input_weight = total_in_province_free_input_weight + total_free_buying_input_weight
|
||
total_input_weight = total_governmental_input_weight + total_free_input_weight
|
||
|
||
total_governmental_output_weight = total_in_province_governmental_output_weight + total_governmental_free_sale_weight + segmentations_governmental_weight + int(
|
||
pos_governmental_allocated_weight / 1000)
|
||
total_free_output_weight = total_in_province_free_output_weight + total_free_free_sale_weight + segmentations_free_weight + int(
|
||
pos_free_allocated_weight / 1000)
|
||
total_output_weight = total_governmental_output_weight + total_free_output_weight
|
||
|
||
total_governmental_remain_weight = (
|
||
total_governmental_input_weight - total_governmental_output_weight) - archives_governmental_weight if (
|
||
(
|
||
total_governmental_input_weight - total_governmental_output_weight) - archives_governmental_weight) > 0 else 0
|
||
total_free_remain_weight = (total_free_input_weight - total_free_output_weight) - archives_free_weight if (
|
||
(
|
||
total_free_input_weight - total_free_output_weight) - archives_free_weight) > 0 else 0
|
||
total_remain_weight = total_governmental_remain_weight + total_free_remain_weight
|
||
|
||
input_allocations_weight = allocations_aggregates['total_input_bars_weight'] or 0
|
||
input_entered_allocations_weight = allocations_aggregates['total_input_entered_bars_weight'] or 0
|
||
output_allocations_weight = allocations_aggregates['total_output_bars_weight'] or 0
|
||
free_bars_weight = free_bars_aggregates['total_weight'] or 0
|
||
free_sale_bars_weight = free_sale_bars_aggregates['total_weight'] or 0
|
||
remain_weight = int(
|
||
(input_entered_allocations_weight + free_bars_weight) - (
|
||
free_sale_bars_weight + output_allocations_weight + archives_weight))
|
||
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
shamsi_date1 = shamsi_date(date1)
|
||
shamsi_date2 = shamsi_date(date2)
|
||
excel_description(worksheet, 'A2', f' اطلاعات جامع انبار از تاریخ {shamsi_date1} تا تاریخ {shamsi_date2}',
|
||
size=11, color='red', row2='B4')
|
||
|
||
else:
|
||
excel_description(worksheet, 'A2', f'اطلاعات جامع انبار',
|
||
size=11, color='red', row2='B4')
|
||
|
||
result = {
|
||
"total_bars_weight": int(input_allocations_weight + free_bars_weight),
|
||
"total_entered_bars_weight": int(input_entered_allocations_weight + free_bars_weight),
|
||
"in_province_bars_weight": int(output_allocations_weight),
|
||
"out_province_bars_weight": int(free_sale_bars_weight),
|
||
"remain_weight": remain_weight,
|
||
}
|
||
|
||
value_header_list = [
|
||
result['total_bars_weight'],
|
||
result['total_entered_bars_weight'],
|
||
result['in_province_bars_weight'],
|
||
result['out_province_bars_weight'],
|
||
result['remain_weight'],
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 3, border_style='thin')
|
||
|
||
# محاسبه مجموع هر یک از فیلدها
|
||
sum_remain_weight = sum(data.get('ware_house_info', {}).get('remain_weight', 0) for data in serializer)
|
||
sum_total_bars_count = sum(data.get('ware_house_info', {}).get('total_bars_count', 0) for data in serializer)
|
||
sum_total_bars_weight = sum(data.get('ware_house_info', {}).get('total_bars_weight', 0) for data in serializer)
|
||
sum_total_entered_bars_count = sum(
|
||
data.get('ware_house_info', {}).get('total_entered_bars_count', 0) for data in serializer)
|
||
sum_total_entered_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_entered_bars_weight', 0) for data in serializer)
|
||
sum_total_in_out_province_bars_count = sum(
|
||
data.get('ware_house_info', {}).get('total_in_out_province_bars_count', 0) for data in serializer)
|
||
sum_total_in_out_province_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_in_out_province_bars_weight', 0) for data in serializer)
|
||
sum_input_bars_count = sum(data.get('ware_house_info', {}).get('input_bars_count', 0) for data in serializer)
|
||
sum_input_bars_weight = sum(data.get('ware_house_info', {}).get('input_bars_weight', 0) for data in serializer)
|
||
sum_free_bars_count = sum(data.get('ware_house_info', {}).get('free_bars_count', 0) for data in serializer)
|
||
sum_free_bars_weight = sum(data.get('ware_house_info', {}).get('free_bars_weight', 0) for data in serializer)
|
||
sum_in_province_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('in_province_bars_weight', 0) for data in serializer)
|
||
sum_out_province_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('out_province_bars_weight', 0) for data in serializer)
|
||
sum_warehouse_total_entered_bars = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_entered_bars', 0) for data in serializer)
|
||
# ایجاد لیست نهایی برای ردیف مجموع
|
||
summary_list = [
|
||
'جمع کل==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
sum_remain_weight,
|
||
sum_total_bars_count,
|
||
sum_total_bars_weight,
|
||
sum_total_entered_bars_count,
|
||
sum_total_entered_bars_weight,
|
||
sum_total_in_out_province_bars_count,
|
||
sum_total_in_out_province_bars_weight,
|
||
sum_input_bars_count,
|
||
sum_input_bars_weight,
|
||
sum_free_bars_count,
|
||
sum_free_bars_weight,
|
||
sum_in_province_bars_weight,
|
||
sum_out_province_bars_weight,
|
||
]
|
||
|
||
create_value(worksheet, summary_list, l + 1, 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 detail_of_killing_and_warehouse_excel(request):
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
blue_fill = PatternFill(start_color="1E487B", fill_type="solid")
|
||
red_font = Font(color="C00000", bold=True)
|
||
sheet_list = [
|
||
'تخصیصات بدون بار',
|
||
'بارهای تخلیه نشده',
|
||
'بار های در انتظار ورود به انبار'
|
||
]
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
for name in sheet_list:
|
||
sheet_name = name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
|
||
if sheet_name == 'تخصیصات بدون بار':
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request').first()
|
||
total_check_wage = wage_type.amount
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
union_wage_percent = percentage_wage_type.percent / 100
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
company_wage_percent = percentage_wage_type.percent / 100
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
guilds_wage_percent = percentage_wage_type.percent / 100
|
||
elif percentage_wage_type.share_type.en_name in ['city', 'wallet']:
|
||
pass
|
||
else:
|
||
other_wage_percent = percentage_wage_type.percent / 100
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request',
|
||
trash=False).first().amount
|
||
free_buying_live_weight_amount = total_wage_type.filter(en_name='live-buy', trash=False).first().amount
|
||
free_buying_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-buy',
|
||
trash=False).first().amount
|
||
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell',
|
||
trash=False).first().amount
|
||
worksheet['H3'] = 'در این قسمت تخصیصات فاقد بار نمایش داده میشود'
|
||
merge_range1 = 'H3:K3'
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet['H3'].font = Font(color="C00000", bold=True)
|
||
worksheet['H3'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.filter(
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
first_car_allocated_quantity=0,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=False).order_by(
|
||
'kill_request__recive_date')
|
||
|
||
if wage_counting_type == 'carcass':
|
||
header_list = [
|
||
'تعداد سفارشات',
|
||
'تعداد کل',
|
||
'وزن کل',
|
||
'وزن لاشه ملاک تعرفه',
|
||
'جمع کل تعرفه',
|
||
]
|
||
else:
|
||
header_list = [
|
||
'تعداد سفارشات',
|
||
'تعداد کل',
|
||
'وزن کل',
|
||
'وزن ملاک تعرفه',
|
||
'جمع کل تعرفه',
|
||
]
|
||
for col_num, option in enumerate(header_list, 3):
|
||
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="00B050", fill_type="solid")
|
||
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
|
||
worksheet.row_dimensions[3].height = 20.8
|
||
if wage_counting_type == 'carcass':
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد سفارش',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
'شهر',
|
||
'تاریخ کشتار',
|
||
'محل کشتار',
|
||
'نژاد',
|
||
'تعداد(قطعه)',
|
||
'وزن(کیلوگرم)',
|
||
'میانگین وزنی(کیلوگرم)',
|
||
'وزن لاشه ملاک تعرفه ',
|
||
'تعرفه (ریال)',
|
||
'تعرفه تخصیص(ریال)',
|
||
|
||
]
|
||
else:
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد سفارش',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
'شهر',
|
||
'تاریخ کشتار',
|
||
'محل کشتار',
|
||
'نژاد',
|
||
'تعداد(قطعه)',
|
||
'وزن(کیلوگرم)',
|
||
'میانگین وزنی(کیلوگرم)',
|
||
'وزن ملاک تعرفه ',
|
||
'تعرفه (ریال)',
|
||
'تعرفه تخصیص(ریال)',
|
||
|
||
]
|
||
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)
|
||
|
||
to_date = jdatetime.date.fromgregorian(
|
||
year=date2.year,
|
||
month=date2.month,
|
||
day=date2.day
|
||
).strftime('%Y-%m-%d')
|
||
reversed_date = reversed(to_date.split("-"))
|
||
separate = "-"
|
||
to_date_1 = separate.join(reversed_date)
|
||
|
||
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)
|
||
create_header_freez(worksheet, excel_options, 1, 6, header_row=7, width=20)
|
||
# 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
|
||
l = 6
|
||
m = 1
|
||
for province_kill in province_kill_request:
|
||
|
||
kill_date_1 = shamsi_date(province_kill.province_request.poultry_request.send_date)
|
||
|
||
if province_kill.kill_request.slaughter_house is not None:
|
||
kill_place = province_kill.kill_request.slaughter_house.name
|
||
else:
|
||
kill_place = province_kill.kill_request.kill_house.name
|
||
|
||
total_amount = province_kill.total_wage_amount
|
||
if wage_counting_type == 'carcass':
|
||
list1 = [
|
||
m,
|
||
str(province_kill.province_request.poultry_request.order_code),
|
||
province_kill.province_request.poultry_request.poultry.unit_name,
|
||
province_kill.province_request.poultry_request.poultry.user.mobile,
|
||
province_kill.province_request.poultry_request.poultry.address.city.name,
|
||
str(kill_date_1),
|
||
kill_place,
|
||
province_kill.province_request.poultry_request.hatching.chicken_breed,
|
||
province_kill.total_killed_quantity,
|
||
province_kill.total_killed_weight,
|
||
province_kill.province_request.poultry_request.Index_weight,
|
||
province_kill.total_killed_weight * 0.75,
|
||
province_live_wage_amount,
|
||
(province_kill.total_killed_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
list1 = [
|
||
m,
|
||
str(province_kill.province_request.poultry_request.order_code),
|
||
province_kill.province_request.poultry_request.poultry.unit_name,
|
||
province_kill.province_request.poultry_request.poultry.user.mobile,
|
||
province_kill.province_request.poultry_request.poultry.address.city.name,
|
||
str(kill_date_1),
|
||
kill_place,
|
||
province_kill.province_request.poultry_request.hatching.chicken_breed,
|
||
province_kill.total_killed_quantity,
|
||
province_kill.total_killed_weight,
|
||
province_kill.province_request.poultry_request.Index_weight,
|
||
province_kill.total_killed_weight,
|
||
province_live_wage_amount,
|
||
(province_kill.total_killed_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
l += 1
|
||
m += 1
|
||
total_weight = \
|
||
province_kill_request.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
total_killed_quantity = \
|
||
province_kill_request.aggregate(total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
total_wage_amount = \
|
||
province_kill_request.aggregate(total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
if wage_counting_type == 'carcass':
|
||
value_list = [
|
||
m - 1,
|
||
total_killed_quantity,
|
||
total_weight,
|
||
total_weight * 0.75,
|
||
(total_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
value_list = [
|
||
m - 1,
|
||
total_killed_quantity,
|
||
total_weight,
|
||
total_weight,
|
||
(total_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
for item in range(len(value_list)):
|
||
cell = worksheet.cell(row=4, column=item + 3, value=value_list[item])
|
||
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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
if wage_counting_type == 'carcass':
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_killed_quantity,
|
||
total_weight,
|
||
'',
|
||
total_weight * 0.75,
|
||
province_live_wage_amount,
|
||
(total_weight * 0.75) * province_live_wage_amount,
|
||
|
||
]
|
||
else:
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_killed_quantity,
|
||
total_weight,
|
||
'',
|
||
total_weight,
|
||
province_live_wage_amount,
|
||
(total_weight) * province_live_wage_amount,
|
||
|
||
]
|
||
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, float)):
|
||
cell.number_format = '#,##0' # 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")
|
||
elif sheet_name == 'بارهای تخلیه نشده':
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).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('province_request__poultry_request__send_date',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request',
|
||
'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').values(
|
||
'province_request__poultry_request__send_date', 'province_request__poultry_request__hatching__date',
|
||
'province_request',
|
||
'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',
|
||
)
|
||
filtered_kill_reqs_not_assigment_but_have_code1 = filtered_kill_reqs.filter(
|
||
assignment_state_archive='pending')
|
||
poultry_request = (
|
||
PoultryRequest.objects.filter(trash=False,
|
||
pk__in=filtered_kill_reqs_not_assigment_but_have_code1.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']
|
||
total_requests_weight = poultry_request.aggregate(total=Sum('total_weight'))['total']
|
||
all_quantity = filtered_kill_reqs_not_assigment_but_have_code1.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'کدسفارش مرغدار',
|
||
'مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
' محل کشتار ',
|
||
'نوع تخصیص',
|
||
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
|
||
]
|
||
|
||
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'از تاریخ:({shamsi_date(date1)}) تا تاریخ:({shamsi_date(date2)})'
|
||
|
||
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_not_assigment_but_have_code1.filter(vet_state='accepted'))
|
||
bar_complete = filtered_kill_reqs_not_assigment_but_have_code1.filter(assignment_state_archive='True')
|
||
accepted_real_quantity = filtered_kill_reqs_not_assigment_but_have_code1.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity', 0)
|
||
accepted_real_wight = filtered_kill_reqs_not_assigment_but_have_code1.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity', 0)
|
||
|
||
all_kill_request_quantity = filtered_kill_reqs_not_assigment_but_have_code1.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
all_vet_accepted_real_quantity = filtered_kill_reqs_not_assigment_but_have_code1.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_vet_accepted_real_weight = filtered_kill_reqs_not_assigment_but_have_code1.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_weight')).get(
|
||
'total_quantity', 0)
|
||
|
||
if filtered_kill_reqs_not_assigment_but_have_code1:
|
||
for kill in filtered_kill_reqs_not_assigment_but_have_code1:
|
||
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')).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')
|
||
all_quantity += 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 = 'کشتارکن'
|
||
if kill.get('killhouse_user__killer') == False:
|
||
killers = 'کشتارگاه'
|
||
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 = assignment.get('net_weight')
|
||
all_net_weighte += net_weighte
|
||
real_quantity = assignment.get('real_quantity')
|
||
all_real_quantity += 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 = kill['vet_accepted_real_weight'] if kill['vet_accepted_real_weight'] else '-'
|
||
|
||
weight = kill.get('quantity') * kill.get(
|
||
'province_kill_request__province_request__poultry_request__Index_weight')
|
||
all_weighte += 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 = 'عدم تایید راهداری'
|
||
elif kill['quarantine_code_state'] == 'merge':
|
||
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['province_request__poultry_request__send_date'].date() - kill[
|
||
'province_request__poultry_request__hatching__date'].date()).days + 1
|
||
|
||
list1 = [
|
||
m,
|
||
str(kill.get('bar_code')),
|
||
str(date_of_poultry_request),
|
||
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'),
|
||
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'],
|
||
kill['accepted_real_weight'],
|
||
|
||
]
|
||
m += 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
|
||
|
||
worksheet.row_dimensions[l + 1].height = 20
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
has_code = len(filtered_kill_reqs_not_assigment_but_have_code1.filter(clearance_code__isnull=False))
|
||
all_quarantine_quantity = filtered_kill_reqs_not_assigment_but_have_code1.aggregate(
|
||
total_quantity=Sum('quarantine_quantity')).get(
|
||
'total_quantity', 0)
|
||
has_qarantine = len(
|
||
filtered_kill_reqs_not_assigment_but_have_code1.filter(quarantine_quantity__isnull=False))
|
||
|
||
value_header_list = [
|
||
len(filtered_kill_reqs_not_assigment_but_have_code1),
|
||
all_quantity,
|
||
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,
|
||
all_vet_accepted_real_weight,
|
||
len(bar_complete),
|
||
all_real_quantity,
|
||
all_net_weighte,
|
||
accepted_real_quantity if accepted_real_quantity != None else 0,
|
||
accepted_real_wight if accepted_real_wight != None else 0
|
||
|
||
]
|
||
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, 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)
|
||
value_header_list2 = [
|
||
len(poultry_request),
|
||
total_requests_quantity,
|
||
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, 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_kill_request_quantity,
|
||
all_weighte,
|
||
'',
|
||
all_quarantine_quantity if all_quarantine_quantity != None else 0,
|
||
'',
|
||
'',
|
||
all_vet_accepted_real_quantity,
|
||
all_vet_accepted_real_weight,
|
||
all_real_quantity,
|
||
all_net_weighte,
|
||
accepted_real_quantity if accepted_real_quantity != None else 0,
|
||
accepted_real_wight if accepted_real_wight != None 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, float)):
|
||
cell.number_format = '#,##0' # 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")
|
||
else:
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
kill_house = KillHouse.objects.filter(trash=False).select_related(
|
||
'system_address__province').first()
|
||
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
ware_house_confirmation=False, trash=False, calculate_status=True).order_by(
|
||
'-kill_request__recive_date').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('province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing',
|
||
'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__poultry__user__fullname',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'killer__name',
|
||
'killhouse_user__type', 'killer', 'bar_document_status',
|
||
'bar_document_status__title').values(
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'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', 'bar_document_status',
|
||
'bar_document_status__title'
|
||
)
|
||
else:
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
ware_house_confirmation=False, trash=False, calculate_status=True).order_by(
|
||
'-kill_request__recive_date').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('province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing',
|
||
'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__poultry__user__fullname',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'killer__name',
|
||
'killhouse_user__type', 'killer', 'bar_document_status',
|
||
'bar_document_status__title').values(
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'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', 'bar_document_status',
|
||
'bar_document_status__title'
|
||
)
|
||
|
||
if 'search' in request.GET:
|
||
filtered_kill_reqs = []
|
||
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_kill_reqs
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=filtered_kill_reqs)
|
||
filtered_kill_reqs = ps.filter()
|
||
filtered_kill_reqs = [] if len(filtered_kill_reqs) == 0 else filtered_kill_reqs
|
||
|
||
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'))
|
||
)
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'نوع کشتار',
|
||
'کدسفارش مرغدار',
|
||
'نام و نام خانوادگی مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'نام فارم',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
'کشتارکن اختصاصی',
|
||
'تلفن کشتارکن اختصاصی',
|
||
' محل کشتار ',
|
||
'قیمت کشتارگاه(ریال)',
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'وضعیت',
|
||
'وضعیت سند',
|
||
'وضعیت ورود انبار',
|
||
'تعداد لاشه',
|
||
'وزن لاشه',
|
||
'درصد افت در لحظه',
|
||
'درصد افت ورود به انبار',
|
||
'کشور مقصد',
|
||
|
||
]
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
header_list = [
|
||
'تعداد بارهای ایجاد شده',
|
||
'تعداد بارهای دارای کشتارکن اختصاصی',
|
||
'مجموع حجم بارها',
|
||
'مجموع وزن بارها',
|
||
'میانگین وزن ',
|
||
'کمترین سن',
|
||
'بیشترین سن',
|
||
'میانگین سنی',
|
||
'تعداد بارهای دارای کد قرنطینه',
|
||
'حجم بارهای دارای کد قرنطینه',
|
||
'تعداد بار احراز شده از قرنطینه',
|
||
'مجموع تعداد قطعه احراز شده از قرنطینه',
|
||
'تعداد بار فاقد قرنطینه',
|
||
'حجم بار فاقد قرنطینه',
|
||
' تعداد بارهایی که در قرنطینه و رصدیار اختلاف دارند',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'مجموع تعداد تخلیه شده دامپزشک',
|
||
'مجموع وزن تخلیه شده دامپزشک',
|
||
'تعداد بارهای تکمیل شده',
|
||
'مجموع تعداد نهایی در کشتارگاه',
|
||
'مجموع وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'تعداد بار های وارد شده در انبار',
|
||
'مجموع تعداد لاشه',
|
||
'مجموع وزن لاشه',
|
||
'میانگین درصد افت لاشه ورود به انبار',
|
||
|
||
]
|
||
|
||
# برای بالای هدر
|
||
header_list2 = [
|
||
'تعداد درخواست مرغداران',
|
||
' مجموع تعداد قطعه درخواست مرغداران',
|
||
' مجموع وزن درخواست مرغداران',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 6, 4, height=21.8, color='green')
|
||
|
||
create_header(worksheet, header_list, 9, 4, height=21.8)
|
||
|
||
header_list2 = [
|
||
'ردیف',
|
||
'نام محصول',
|
||
'وزن خریدهای دولتی داخل استان(کیلوگرم)',
|
||
'وزن خریدهای آزاد داخل استان(کیلوگرم)',
|
||
'وزن خریدهای خارج استان(کیلوگرم)',
|
||
'کل ورودی به انبار(کیلوگرم)',
|
||
'کل فروش(کیلوگرم)',
|
||
'مانده انبار(کیلوگرم)',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 6, 1, height=21.8, color='FF0000')
|
||
products = RolesProducts.objects.filter(kill_house=kill_house, trash=False)
|
||
q = 2
|
||
w = 1
|
||
for product in products:
|
||
value_header_list = [
|
||
w,
|
||
product.name,
|
||
product.province_governmental_carcasses_weight,
|
||
product.province_free_carcasses_weight,
|
||
product.free_buying_carcasses_weight,
|
||
product.total_carcasses_weight,
|
||
product.real_allocated_weight,
|
||
product.total_remain_weight,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, q, 6)
|
||
q += 1
|
||
w += 1
|
||
|
||
kill_house_name = ''
|
||
if filtered_kill_reqs.exists():
|
||
kill_house_name = filtered_kill_reqs.first()['killhouse_user__name']
|
||
excel_description(worksheet, 'A1', f'بارهای {kill_house_name} در انتظار ورود به انبار (کشتار داخل استان)',
|
||
size=11, color='red', row2='E1')
|
||
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()
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'A3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='C3')
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 7, 8, 20)
|
||
kill_keys = [kill.get('key') for kill in filtered_kill_reqs]
|
||
|
||
vet_checks = VetCheckRequest.objects.filter(
|
||
trash=False, kill_house_request__key__in=kill_keys
|
||
).only('create_date', 'kill_house_request__key').values(
|
||
'create_date', 'kill_house_request__key')
|
||
|
||
assignments = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__key__in=kill_keys, trash=False
|
||
).only('create_date', 'net_weight', 'real_quantity', 'kill_house_request__key')
|
||
|
||
vet_check_mapping = {vc['kill_house_request__key']: vc['create_date'] for vc in vet_checks}
|
||
assignment_mapping = {
|
||
assignment.kill_house_request.key: (
|
||
int(assignment.net_weight), assignment.real_quantity, assignment.create_date)
|
||
for assignment in assignments
|
||
}
|
||
l = 7
|
||
all_age = []
|
||
|
||
all_real_quantity = 0
|
||
all_net_weighte = 0
|
||
all_weighte = 0
|
||
poultry_ids = [req.get('province_request__poultry_request__poultry') for req in filtered_kill_reqs]
|
||
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
|
||
vet_farm_mapping = {
|
||
vet_farm.poultry_id: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
|
||
for vet_farm in vet_farms
|
||
}
|
||
if filtered_kill_reqs:
|
||
for kill in filtered_kill_reqs:
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
if age not in all_age:
|
||
all_age.append(age)
|
||
|
||
if (kill['assignment_state_archive']) == 'True' or kill[
|
||
'vet_state'] == 'accepted':
|
||
state = 'تخلیه شده'
|
||
else:
|
||
state = 'درانتظار تخلیه'
|
||
l += 1
|
||
vet_farm_id = kill.get('province_request__poultry_request__poultry')
|
||
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
|
||
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()
|
||
|
||
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 = convert_to_shamsi(year=send_date.year, month=send_date.month,
|
||
day=send_date.day, )
|
||
|
||
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'])
|
||
key = kill.get('key')
|
||
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 '-'
|
||
net_weighte, real_quantity, vet_check_date = assignment_mapping.get(key, ('-', '-', None))
|
||
all_real_quantity += real_quantity if real_quantity != '-' else 0
|
||
all_net_weighte += net_weighte if net_weighte != '-' else 0
|
||
vet_check_date = vet_check_mapping.get(key, vet_check_date)
|
||
date_of_inner_bar = convert_to_shamsi(datetime=vet_check_date) if vet_check_date else '-'
|
||
|
||
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 = 'عدم تایید راهداری'
|
||
elif kill['quarantine_code_state'] == 'merge':
|
||
quarantine_quantity = 'ادغام'
|
||
export_country = '-'
|
||
|
||
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__out'] == True:
|
||
type = 'خارج از استان'
|
||
elif kill['province_kill_request__province_request__poultry_request__direct_buying'] == True:
|
||
type = 'خرید مستقیم'
|
||
elif kill['province_request__poultry_request__freezing'] == True:
|
||
type = 'انجماد'
|
||
elif kill['province_request__poultry_request__export'] == True:
|
||
type = 'صادرات'
|
||
export_country = kill['kill_request__export_country']
|
||
else:
|
||
type = 'عادی'
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
|
||
if kill['message'] is not None:
|
||
state_delete = 'بار حذف شده'
|
||
else:
|
||
state_delete = 'فعال'
|
||
all_weighte += weight
|
||
|
||
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 kill['ware_house_confirmation'] == True:
|
||
state_ware_house_confirmation = 'ورود به انبار'
|
||
|
||
else:
|
||
state_ware_house_confirmation = '-'
|
||
|
||
weight_loss1 = kill['accepted_real_weight'] - kill['ware_house_accepted_real_weight'] if kill[
|
||
'ware_house_accepted_real_weight'] > 0 else 0
|
||
if weight_loss1 < 0:
|
||
weight_loss1 = weight_loss1 * -1
|
||
total_weight_loss = (weight_loss1 / kill['accepted_real_weight']) * 100 if weight_loss1 != 0 else 0
|
||
list1 = [
|
||
m,
|
||
str(kill.get('bar_code')),
|
||
str(date_of_poultry_request),
|
||
type,
|
||
str(kill.get('province_request__poultry_request__order_code')),
|
||
kill.get('province_request__poultry_request__poultry__user__fullname'),
|
||
str(kill.get('province_request__poultry_request__poultry__user__mobile')),
|
||
kill.get('province_request__poultry_request__poultry__user__city__name'),
|
||
kill.get('province_request__poultry_request__poultry__unit_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,
|
||
kill.get('province_kill_request__kill_house_price'),
|
||
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['bar_document_status__title'] if kill['bar_document_status'] else '-',
|
||
state_ware_house_confirmation,
|
||
ware_house_accepted_real_quantity,
|
||
int(ware_house_accepted_real_weight),
|
||
f'%{round(total_weight_loss, 2)}',
|
||
f'%{weight_loss}',
|
||
export_country,
|
||
|
||
]
|
||
m += 1
|
||
create_value(worksheet, list1, l, 1, height=20, different_cell=40, different_value='بار حذف شده')
|
||
killer_exclusive = len(filtered_kill_reqs.filter(killer__isnull=False))
|
||
all_state_ware_house_confirmation = len(filtered_kill_reqs.filter(ware_house_confirmation=True))
|
||
|
||
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
|
||
|
||
aggregate_filtered_kill_reqs = filtered_kill_reqs.aggregate(
|
||
total_accepted_real_quantity=Sum('accepted_real_quantity'),
|
||
total_accepted_real_weight=Sum('accepted_real_weight'),
|
||
total_quantity=Sum('quantity'),
|
||
total_vet_accepted_real_quantity=Sum('vet_accepted_real_quantity'),
|
||
total_vet_accepted_real_weight=Sum('vet_accepted_real_weight'),
|
||
total_quarantine_quantity=Sum('quarantine_quantity'),
|
||
total_ware_house_accepted_real_quantity=Sum('ware_house_accepted_real_quantity'),
|
||
total_ware_house_accepted_real_weight=Sum('ware_house_accepted_real_weight'),
|
||
total_weight_loss=Sum('weight_loss'),
|
||
|
||
)
|
||
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 = aggregate_filtered_kill_reqs['total_accepted_real_quantity'] or 0
|
||
|
||
accepted_real_wight = aggregate_filtered_kill_reqs['total_accepted_real_weight'] or 0
|
||
all_kill_request_quantity = aggregate_filtered_kill_reqs['total_quantity'] or 0
|
||
all_quarantine_quantity = aggregate_filtered_kill_reqs['total_quarantine_quantity'] or 0
|
||
all_vet_accepted_real_quantity = aggregate_filtered_kill_reqs['total_vet_accepted_real_quantity'] or 0
|
||
all_vet_accepted_real_weight = aggregate_filtered_kill_reqs['total_vet_accepted_real_weight'] or 0
|
||
has_qarantine = len(filtered_kill_reqs.filter(quarantine_quantity__isnull=False))
|
||
all_ware_house_accepted_real_quantity = aggregate_filtered_kill_reqs[
|
||
'total_ware_house_accepted_real_quantity'] or 0
|
||
all_ware_house_accepted_real_weight = aggregate_filtered_kill_reqs[
|
||
'total_ware_house_accepted_real_weight'] or 0
|
||
all_weight_loss = aggregate_filtered_kill_reqs['total_weight_loss'] or 0
|
||
has_code1 = filtered_kill_reqs.filter(clearance_code__isnull=False).aggregate(
|
||
total_quantity=Sum('quantity'),
|
||
)
|
||
all_quarantine_quantity_has_code = has_code1['total_quantity'] or 0
|
||
hasnt_code1 = filtered_kill_reqs.filter(clearance_code__isnull=True)
|
||
hasnt_code = hasnt_code1.aggregate(
|
||
total_quantity=Sum('quantity')
|
||
)
|
||
all_quarantine_quantity_hasnt_code = hasnt_code['total_quantity'] or 0
|
||
difference_bar = len(filtered_kill_reqs.filter(
|
||
Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity'))))
|
||
all_weight_loss = round(int(all_weight_loss) / all_state_ware_house_confirmation,
|
||
2) if all_weight_loss > 0 else 0
|
||
|
||
all_age1 = sorted(all_age)
|
||
has_code = len(filtered_kill_reqs.filter(clearance_code__isnull=False))
|
||
value_header_list = [
|
||
len(poultry_request),
|
||
total_requests_quantity,
|
||
int(total_requests_weight),
|
||
len(filtered_kill_reqs),
|
||
killer_exclusive,
|
||
all_kill_request_quantity,
|
||
int(all_weighte),
|
||
round(all_weighte / all_kill_request_quantity,
|
||
1) if all_weighte > 0 and all_kill_request_quantity > 0 else 0,
|
||
all_age1[0] if len(all_age1) > 0 else '-',
|
||
all_age1[len(all_age1) - 1] if len(all_age1) > 0 else '-',
|
||
int((sum(all_age1)) / len(all_age1)) if len(all_age1) > 0 else '-',
|
||
has_code,
|
||
all_quarantine_quantity_has_code,
|
||
has_qarantine,
|
||
all_quarantine_quantity,
|
||
len(hasnt_code1),
|
||
all_quarantine_quantity_hasnt_code,
|
||
difference_bar,
|
||
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}'
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 5, 6)
|
||
|
||
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),
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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 management_all_poultry_and_warehouse(request):
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
date1 = datetime.datetime.strptime(request.GET['date1'], '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(request.GET['date2'], '%Y-%m-%d').date()
|
||
sheet_names = ['گزارش جوجه ریزی', 'جوجه ریزی بیش از 60 روز', 'گزارش بارها', 'اطلاعات کشتار روزانه',
|
||
'عملکرد خریداران', 'گزارش سند ها',
|
||
'اطلاعات جامع انبار و توزیع',
|
||
'بارهای بدون مجوز']
|
||
from_date_1 = shamsi_date(date1)
|
||
from_date_2 = shamsi_date(date2)
|
||
for name in sheet_names:
|
||
sheet_name = name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
if sheet_name == 'گزارش جوجه ریزی':
|
||
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 = PoultryHatching.objects.filter(Q(date__date__gte=date1, date__date__lte=date2) |
|
||
Q(date__date__lte=date1,
|
||
archive_date__isnull=True) | Q(
|
||
date__date__lte=date1,
|
||
archive_date__gte=date1,
|
||
archive_date__isnull=False),
|
||
trash=False).select_related('poultry',
|
||
'poultry__user').order_by(
|
||
'-chicken_age')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت',
|
||
'شماره مجوز جوجه ریزی',
|
||
'شناسه یکتا',
|
||
'مجوز بهداشتی جوجه ریزی',
|
||
'نام فارم',
|
||
'مرغدار',
|
||
'بهره برداری',
|
||
'مالکیت',
|
||
'ارتباط',
|
||
'شهر/تعاونی',
|
||
'سالن',
|
||
' دوره جوجه ریزی',
|
||
'تاریخ ثبت جوجه ریزی',
|
||
'تاریخ جوجه ریزی',
|
||
'میانگین سن کشتار',
|
||
'پیشبینی تاریخ کشتار',
|
||
'نژاد',
|
||
'سن روز',
|
||
'سن بایگانی',
|
||
'حجم جوجه ریزی',
|
||
'حجم افزایشی',
|
||
'تلفات دامپزشک(قطعه)',
|
||
'تلفات اتحادیه(قطعه)',
|
||
'تلفات کل(قطعه)',
|
||
|
||
'زنجیره/شرکت',
|
||
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
'کد سیستمی واحد',
|
||
|
||
'حجم کشتار شده(قطعه)',
|
||
'وزن کل کشتارشده(کیلوگرم)',
|
||
'مانده در سالن',
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
from_date_2 = shamsi_date(date2)
|
||
|
||
header_list = [
|
||
'تعداد فارم فعال',
|
||
'تعداد فارم دارای زنجیره فعال',
|
||
'مجموع جوجه ریزی',
|
||
'مجموع تلفات دامپزشک(قطعه)',
|
||
'مجموع تلفات اتحادیه(قطعه)',
|
||
'مجموع تلفات کل(قطعه)',
|
||
'مجموع قطعه کشتار شده',
|
||
'مجموع وزن کل کشتارشده',
|
||
'مانده در سالن(قطعه)',
|
||
'مانده در سالن از نود درصد(قطعه)',
|
||
'کمترین سن',
|
||
'بیشترین سن',
|
||
'مجموع وزن تعهد دولتی',
|
||
' مجموع قطعه کشتار دولتی',
|
||
' مجموع وزن کشتار دولتی',
|
||
' مجموع قطعه کشتار آزاد',
|
||
' مجموع وزن کشتار آزاد',
|
||
'مجموع تعداد کشتار خارج از استان',
|
||
'مجموع وزن کشتار خارج از استان',
|
||
'تعداد فارم های متخلف',
|
||
'تعداد بار ایجاد شده',
|
||
'حجم بار ایجاد شده',
|
||
'وزن بار ایجاد شده',
|
||
'تعداد بار کشتار شده',
|
||
'حجم بار کشتار شده',
|
||
'وزن بار کشتار شده',
|
||
'حجم زنجیره',
|
||
'وزن زنجیره',
|
||
|
||
]
|
||
|
||
create_header(worksheet, header_list, 5, 2, height=20)
|
||
|
||
excel_description(worksheet, 'B1',
|
||
'گزارش جوجه ریزی های فعال از تاریخ {0} تا {1}'.format(from_date_1, from_date_2),
|
||
color='red', row2='C3')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
poultry_ids = filtered_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:
|
||
if poultry_hatching.archive == True:
|
||
archive_age = poultry_hatching.chicken_age
|
||
else:
|
||
archive_age = '-'
|
||
|
||
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
|
||
|
||
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 = '-'
|
||
|
||
list1 = [
|
||
m,
|
||
farm_state,
|
||
poultry_hatching.licence_number,
|
||
poultry_hatching.poultry.breeding_unique_id,
|
||
poultry_hatching.CertId,
|
||
poultry_hatching.poultry.unit_name,
|
||
f'{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,
|
||
archive_age,
|
||
poultry_hatching.quantity,
|
||
poultry_hatching.increase_quantity,
|
||
poultry_hatching.losses,
|
||
poultry_hatching.direct_losses,
|
||
poultry_hatching.total_losses,
|
||
chain_company,
|
||
vet_farm_name,
|
||
vet_farm_mobile,
|
||
poultry_hatching.poultry.system_code,
|
||
poultry_hatching.killed_quantity,
|
||
poultry_hatching.total_killed_weight,
|
||
poultry_hatching.left_over,
|
||
|
||
]
|
||
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)
|
||
|
||
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,
|
||
|
||
]
|
||
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,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 3, 1, color='green')
|
||
elif sheet_name == 'جوجه ریزی بیش از 60 روز':
|
||
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 = PoultryHatching.objects.filter(Q(date__date__gte=date1, date__date__lte=date2) |
|
||
Q(date__date__lte=date1,
|
||
archive_date__isnull=True) | Q(
|
||
date__date__lte=date1,
|
||
archive_date__gte=date1,
|
||
archive_date__isnull=False),
|
||
trash=False, chicken_age__gte=60).select_related(
|
||
'poultry',
|
||
'poultry__user').order_by(
|
||
'-chicken_age')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'وضعیت',
|
||
'شماره مجوز جوجه ریزی',
|
||
'شناسه یکتا',
|
||
'مجوز بهداشتی جوجه ریزی',
|
||
'نام فارم',
|
||
'مرغدار',
|
||
'بهره برداری',
|
||
'مالکیت',
|
||
'ارتباط',
|
||
'شهر/تعاونی',
|
||
'سالن',
|
||
' دوره جوجه ریزی',
|
||
'تاریخ ثبت جوجه ریزی',
|
||
'تاریخ جوجه ریزی',
|
||
'میانگین سن کشتار',
|
||
'پیشبینی تاریخ کشتار',
|
||
'نژاد',
|
||
'سن روز',
|
||
'سن بایگانی',
|
||
'حجم جوجه ریزی',
|
||
'حجم افزایشی',
|
||
'تلفات دامپزشک(قطعه)',
|
||
'تلفات اتحادیه(قطعه)',
|
||
'تلفات کل(قطعه)',
|
||
|
||
'زنجیره/شرکت',
|
||
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
'کد سیستمی واحد',
|
||
|
||
'حجم کشتار شده(قطعه)',
|
||
'وزن کل کشتارشده(کیلوگرم)',
|
||
'مانده در سالن',
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
from_date_2 = shamsi_date(date2)
|
||
|
||
header_list = [
|
||
'تعداد فارم فعال',
|
||
'تعداد فارم دارای زنجیره فعال',
|
||
'مجموع جوجه ریزی',
|
||
'مجموع تلفات دامپزشک(قطعه)',
|
||
'مجموع تلفات اتحادیه(قطعه)',
|
||
'مجموع تلفات کل(قطعه)',
|
||
'مجموع قطعه کشتار شده',
|
||
'مجموع وزن کل کشتارشده',
|
||
'مانده در سالن(قطعه)',
|
||
'مانده در سالن از نود درصد(قطعه)',
|
||
'کمترین سن',
|
||
'بیشترین سن',
|
||
'مجموع وزن تعهد دولتی',
|
||
' مجموع قطعه کشتار دولتی',
|
||
' مجموع وزن کشتار دولتی',
|
||
' مجموع قطعه کشتار آزاد',
|
||
' مجموع وزن کشتار آزاد',
|
||
'مجموع تعداد کشتار خارج از استان',
|
||
'مجموع وزن کشتار خارج از استان',
|
||
'تعداد فارم های متخلف',
|
||
'تعداد بار ایجاد شده',
|
||
'حجم بار ایجاد شده',
|
||
'وزن بار ایجاد شده',
|
||
'تعداد بار کشتار شده',
|
||
'حجم بار کشتار شده',
|
||
'وزن بار کشتار شده',
|
||
'حجم زنجیره',
|
||
'وزن زنجیره',
|
||
|
||
]
|
||
|
||
create_header(worksheet, header_list, 5, 2, height=20)
|
||
|
||
excel_description(worksheet, 'B1',
|
||
'گزارش جوجه ریزی های بزرگ تر از 60 روز از تاریخ {0} تا {1}'.format(from_date_1,
|
||
from_date_2),
|
||
color='red', row2='C3')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
poultry_ids = filtered_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:
|
||
if poultry_hatching.archive == True:
|
||
archive_age = poultry_hatching.chicken_age
|
||
else:
|
||
archive_age = '-'
|
||
|
||
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
|
||
|
||
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 = '-'
|
||
|
||
list1 = [
|
||
m,
|
||
farm_state,
|
||
poultry_hatching.licence_number,
|
||
poultry_hatching.poultry.breeding_unique_id,
|
||
poultry_hatching.CertId,
|
||
poultry_hatching.poultry.unit_name,
|
||
f'{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,
|
||
archive_age,
|
||
poultry_hatching.quantity,
|
||
poultry_hatching.increase_quantity,
|
||
poultry_hatching.losses,
|
||
poultry_hatching.direct_losses,
|
||
poultry_hatching.total_losses,
|
||
chain_company,
|
||
vet_farm_name,
|
||
vet_farm_mobile,
|
||
poultry_hatching.poultry.system_code,
|
||
poultry_hatching.killed_quantity,
|
||
poultry_hatching.total_killed_weight,
|
||
poultry_hatching.left_over,
|
||
|
||
]
|
||
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)
|
||
|
||
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,
|
||
|
||
]
|
||
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,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 3, 1, color='green')
|
||
elif sheet_name == 'گزارش بارها':
|
||
date1 = datetime.datetime.strptime(request.GET['date1'], '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(request.GET['date2'], '%Y-%m-%d').date()
|
||
filtered_kill_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).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('province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing', '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__poultry__user__fullname',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'province_kill_request__kill_house_price',
|
||
'price',
|
||
'killer__name',
|
||
'killhouse_user__type', 'killer', 'bar_document_status',
|
||
'bar_document_status__title').values(
|
||
'province_request__poultry_request__poultry__user__fullname', 'province_kill_request__kill_house_price',
|
||
'kill_request__export_country',
|
||
'province_request__poultry_request__direct_buying',
|
||
'province_request__poultry_request__export',
|
||
'province_request__poultry_request__freezing',
|
||
'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',
|
||
'province_kill_request__province_request__poultry_request__out',
|
||
'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', 'bar_document_status',
|
||
'province_kill_request__kill_house_price',
|
||
'price',
|
||
'bar_document_status__title'
|
||
)
|
||
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'))
|
||
)
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'کد بار',
|
||
' تاریخ کشتار',
|
||
'نوع کشتار',
|
||
'کدسفارش مرغدار',
|
||
'نام و نام خانوادگی مرغدار',
|
||
'تلفن مرغدار',
|
||
' شهر مرغدار',
|
||
'نام فارم',
|
||
'فروش',
|
||
|
||
'سن مرغ',
|
||
'قیمت پیشنهادی مرغدار(ریال)',
|
||
'قیمت پیشنهادی کشتارگاه(ریال)',
|
||
'قیمت تعاونی(ریال)',
|
||
' نژاد',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
' ماهیت خریدار',
|
||
'خریدار',
|
||
' تلفن خریدار',
|
||
' آدرس ',
|
||
'کشتارکن اختصاصی',
|
||
'تلفن کشتارکن اختصاصی',
|
||
' محل کشتار ',
|
||
'قیمت کشتارگاه(ریال)',
|
||
'دامپزشک کشتارگاه ',
|
||
' تلفن دامپزشک کشتارگاه ',
|
||
'راننده',
|
||
'موبایل راننده',
|
||
'نوع خودرو',
|
||
'کد بهداشتی حمل و نقل',
|
||
'تعداد قطعه بار ',
|
||
'وزن بار',
|
||
'کد رهگیری سامانه قرنطینه',
|
||
'تعداد قطعه وارد شده در قرنطینه',
|
||
'وضعیت تخلیه',
|
||
'تاریخ تخلیه (کشتارگاه)',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'وزن بار تخلیه شده(کیلوگرم)دامپزشک',
|
||
'تعداد نهایی در کشتارگاه',
|
||
'وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'وضعیت',
|
||
'وضعیت سند',
|
||
'وضعیت ورود انبار',
|
||
'تعداد لاشه',
|
||
'وزن لاشه',
|
||
'درصد افت در لحظه',
|
||
'درصد افت ورود به انبار',
|
||
'کشور مقصد',
|
||
'اختلاف مجوز',
|
||
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
# worksheet.sheet_view.rightToLeft = True
|
||
# worksheet.insert_rows(1)
|
||
# cell = worksheet.cell(row=1, column=1)
|
||
|
||
header_list = [
|
||
'تعداد بارهای ایجاد شده',
|
||
'تعداد بارهای دارای کشتارکن اختصاصی',
|
||
'حجم بارهای ایجاد شده',
|
||
'وزن بارهای ایجاد شده',
|
||
'میانگین وزن بارهای ایجاد شده',
|
||
'کمترین سن',
|
||
'بیشترین سن',
|
||
'میانگین سنی',
|
||
'تعداد بارهای دارای کد قرنطینه',
|
||
'حجم بارهای دارای کد قرنطینه',
|
||
'تعداد بار احراز شده از قرنطینه',
|
||
'مجموع تعداد قطعه احراز شده از قرنطینه',
|
||
'تعداد بار فاقد قرنطینه',
|
||
'حجم بار فاقد قرنطینه',
|
||
' تعداد بارهایی که در قرنطینه و رصدیار اختلاف دارند',
|
||
'تعداد تخلیه شده دامپزشک',
|
||
'مجموع تعداد تخلیه شده دامپزشک',
|
||
'مجموع وزن تخلیه شده دامپزشک',
|
||
'تعداد بارهای تکمیل شده',
|
||
'مجموع تعداد نهایی در کشتارگاه',
|
||
'مجموع وزن نهایی در کشتار گاه',
|
||
'ملاک قطعه کشتار شده',
|
||
'ملاک وزن کشتار شده',
|
||
'حجم بارها',
|
||
'وزن بارها',
|
||
'تعداد بار های وارد شده در انبار',
|
||
'مجموع تعداد لاشه',
|
||
'مجموع وزن لاشه',
|
||
'میانگین درصد افت لاشه ورود به انبار',
|
||
|
||
]
|
||
|
||
header_list2 = [
|
||
'تعداد درخواست مرغداران',
|
||
' مجموع تعداد قطعه درخواست مرغداران',
|
||
' مجموع وزن درخواست مرغداران',
|
||
|
||
]
|
||
header_list3 = [
|
||
'درصد بارهای دارای کد قرنطینه',
|
||
'درصد تعداد بارهای احراز شده از قرنطینه',
|
||
'درصد تعداد بارهای تکمیل شده کشتارگاه',
|
||
'درصد وزن نهایی در کشتارگاه نسبت به وزن کل',
|
||
'درصد بارهای فاقد کد قرنطینه',
|
||
'درصد بارهای اختلاف دار در قرنطینه و رصدیار',
|
||
'درصد تعداد بارهای ورودی به انبار',
|
||
'درصد وزن لاشه ها در انبار نسبت به وزن کل',
|
||
'درصد وزن لاشه در انبار نسبت به وزن نهایی در کشتارگاه',
|
||
|
||
]
|
||
create_header(worksheet, header_list, 9, 2, height=21.8)
|
||
|
||
create_header(worksheet, header_list2, 6, 2, height=21.8, color='green')
|
||
|
||
create_header(worksheet, header_list3, 6, 5, height=43, color='orange', text_color='0D0D0D')
|
||
create_header_freez(worksheet, excel_options, 1, 8, 9, height=21, len_with=True)
|
||
|
||
excel_description(worksheet, 'B1', 'گزارش بارهای ایجاد شده در فرآیند کشتار مرغ گوشتی', color='red',
|
||
row2='D1')
|
||
|
||
kill_keys = [kill.get('key') for kill in filtered_kill_reqs]
|
||
|
||
vet_checks = VetCheckRequest.objects.filter(
|
||
trash=False, kill_house_request__key__in=kill_keys
|
||
).only('create_date', 'kill_house_request__key').values(
|
||
'create_date', 'kill_house_request__key')
|
||
|
||
assignments = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__key__in=kill_keys, trash=False
|
||
).only('create_date', 'net_weight', 'real_quantity', 'kill_house_request__key')
|
||
|
||
vet_check_mapping = {vc['kill_house_request__key']: vc['create_date'] for vc in vet_checks}
|
||
assignment_mapping = {
|
||
assignment.kill_house_request.key: (
|
||
int(assignment.net_weight), assignment.real_quantity, assignment.create_date)
|
||
for assignment in assignments
|
||
}
|
||
if filtered_kill_reqs.exists():
|
||
name = filtered_kill_reqs.first()['killhouse_user__kill_house_operator__user__province__name']
|
||
worksheet['B2'] = f'استان {name}'
|
||
excel_description(worksheet, 'B2', f'استان {name}', color='red', row2='D2')
|
||
excel_description(worksheet, 'B3', f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})', row2='D3')
|
||
|
||
l = 8
|
||
m = 1
|
||
all_age = []
|
||
|
||
all_real_quantity = 0
|
||
all_net_weighte = 0
|
||
all_weighte = 0
|
||
poultry_ids = [req.get('province_request__poultry_request__poultry') for req in filtered_kill_reqs]
|
||
vet_farms = VetFarm.objects.filter(poultry__in=poultry_ids, trash=False).select_related('vet__user')
|
||
vet_farm_mapping = {
|
||
vet_farm.poultry_id: (vet_farm.vet.user.fullname, vet_farm.vet.user.mobile)
|
||
for vet_farm in vet_farms
|
||
}
|
||
if filtered_kill_reqs:
|
||
for kill in filtered_kill_reqs:
|
||
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
if age not in all_age:
|
||
all_age.append(age)
|
||
|
||
if (kill['assignment_state_archive']) == 'True' or kill[
|
||
'vet_state'] == 'accepted':
|
||
state = 'تخلیه شده'
|
||
else:
|
||
state = 'درانتظار تخلیه'
|
||
l += 1
|
||
vet_farm_id = kill.get('province_request__poultry_request__poultry')
|
||
vet_farm_name, vet_farm_mobile = vet_farm_mapping.get(vet_farm_id, ('-', '-'))
|
||
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()
|
||
|
||
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 = convert_to_shamsi(year=send_date.year, month=send_date.month,
|
||
day=send_date.day, )
|
||
|
||
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'])
|
||
key = kill.get('key')
|
||
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 '-'
|
||
if kill['assignment_state_archive'] == 'True' or kill['ware_house_confirmation'] == True:
|
||
net_weighte = kill['accepted_real_weight']
|
||
real_quantity = kill['accepted_real_quantity']
|
||
else:
|
||
net_weighte = 0
|
||
real_quantity = 0
|
||
net_weighte2, real_quantity2, vet_check_date = assignment_mapping.get(key, ('-', '-', None))
|
||
all_real_quantity += real_quantity if real_quantity != '-' else 0
|
||
all_net_weighte += net_weighte if net_weighte != '-' else 0
|
||
vet_check_date = vet_check_mapping.get(key, vet_check_date)
|
||
date_of_inner_bar = convert_to_shamsi(datetime=vet_check_date) if vet_check_date else '-'
|
||
|
||
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 = 'عدم تایید راهداری'
|
||
elif kill['quarantine_code_state'] == 'merge':
|
||
quarantine_quantity = 'ادغام'
|
||
export_country = '-'
|
||
|
||
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__out'] == True:
|
||
type = 'خارج از استان'
|
||
elif kill['province_kill_request__province_request__poultry_request__direct_buying'] == True:
|
||
type = 'خرید مستقیم'
|
||
elif kill['province_request__poultry_request__freezing'] == True:
|
||
type = 'انجماد'
|
||
elif kill['province_request__poultry_request__export'] == True:
|
||
type = 'صادرات'
|
||
export_country = kill['kill_request__export_country']
|
||
else:
|
||
type = 'عادی'
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
|
||
if kill['message'] is not None:
|
||
state_delete = 'بار حذف شده'
|
||
else:
|
||
state_delete = 'فعال'
|
||
all_weighte += weight
|
||
|
||
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 kill['ware_house_confirmation'] == True:
|
||
state_ware_house_confirmation = 'ورود به انبار'
|
||
|
||
else:
|
||
state_ware_house_confirmation = '-'
|
||
|
||
weight_loss1 = kill['accepted_real_weight'] - kill['ware_house_accepted_real_weight'] if kill[
|
||
'ware_house_accepted_real_weight'] > 0 else 0
|
||
if weight_loss1 < 0:
|
||
weight_loss1 = weight_loss1 * -1
|
||
total_weight_loss = int((weight_loss1 / kill['accepted_real_weight']) * 100) if kill[
|
||
'accepted_real_weight'] > 0 else 0
|
||
defreent_quarantine = kill['accepted_real_quantity'] - quarantine_quantity if kill[
|
||
'quarantine_quantity'] != None else 0
|
||
|
||
list1 = [
|
||
m,
|
||
str(kill.get('bar_code')),
|
||
str(date_of_poultry_request),
|
||
type,
|
||
str(kill.get('province_request__poultry_request__order_code')),
|
||
kill.get('province_request__poultry_request__poultry__user__fullname'),
|
||
str(kill.get('province_request__poultry_request__poultry__user__mobile')),
|
||
kill.get('province_request__poultry_request__poultry__user__city__name'),
|
||
kill.get('province_request__poultry_request__poultry__unit_name'),
|
||
sale_type,
|
||
age,
|
||
kill.get('province_request__poultry_request__amount') if kill.get(
|
||
'province_request__poultry_request__amount') else '-',
|
||
|
||
kill.get('province_kill_request__kill_house_price') if kill.get(
|
||
'province_kill_request__kill_house_price') else '-',
|
||
|
||
kill.get('price') if kill.get(
|
||
'price') 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,
|
||
kill.get('province_kill_request__kill_house_price'),
|
||
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'],
|
||
round(kill['accepted_real_weight'], 1),
|
||
state_delete,
|
||
kill['bar_document_status__title'] if kill['bar_document_status'] else '-',
|
||
state_ware_house_confirmation,
|
||
ware_house_accepted_real_quantity,
|
||
int(ware_house_accepted_real_weight),
|
||
f'%{round(total_weight_loss, 2)}',
|
||
f'%{weight_loss}',
|
||
export_country,
|
||
kill['accepted_real_quantity'] - quarantine_quantity if kill[
|
||
'quarantine_quantity'] != None else quarantine_quantity
|
||
|
||
]
|
||
if defreent_quarantine < 0:
|
||
different_cell = 51
|
||
different_value = 'اختلاف مجوز'
|
||
else:
|
||
different_cell = None
|
||
different_value = None
|
||
m += 1
|
||
create_value(worksheet, list1, l, 1, height=20, different_cell=different_cell,
|
||
different_value=different_value)
|
||
killer_exclusive = len(filtered_kill_reqs.filter(killer__isnull=False))
|
||
all_state_ware_house_confirmation = len(filtered_kill_reqs.filter(ware_house_confirmation=True))
|
||
|
||
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
|
||
|
||
aggregate_filtered_kill_reqs = filtered_kill_reqs.aggregate(
|
||
total_accepted_real_quantity=Sum('accepted_real_quantity'),
|
||
total_accepted_real_weight=Sum('accepted_real_weight'),
|
||
total_quantity=Sum('quantity'),
|
||
total_vet_accepted_real_quantity=Sum('vet_accepted_real_quantity'),
|
||
total_vet_accepted_real_weight=Sum('vet_accepted_real_weight'),
|
||
total_quarantine_quantity=Sum('quarantine_quantity'),
|
||
total_ware_house_accepted_real_quantity=Sum('ware_house_accepted_real_quantity'),
|
||
total_ware_house_accepted_real_weight=Sum('ware_house_accepted_real_weight'),
|
||
total_weight_loss=Sum('weight_loss'),
|
||
|
||
)
|
||
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 = aggregate_filtered_kill_reqs['total_accepted_real_quantity'] or 0
|
||
|
||
accepted_real_wight = aggregate_filtered_kill_reqs['total_accepted_real_weight'] or 0
|
||
all_kill_request_quantity = aggregate_filtered_kill_reqs['total_quantity'] or 0
|
||
all_quarantine_quantity = aggregate_filtered_kill_reqs['total_quarantine_quantity'] or 0
|
||
all_vet_accepted_real_quantity = aggregate_filtered_kill_reqs['total_vet_accepted_real_quantity'] or 0
|
||
all_vet_accepted_real_weight = aggregate_filtered_kill_reqs['total_vet_accepted_real_weight'] or 0
|
||
has_qarantine = len(filtered_kill_reqs.filter(quarantine_quantity__isnull=False))
|
||
all_ware_house_accepted_real_quantity = aggregate_filtered_kill_reqs[
|
||
'total_ware_house_accepted_real_quantity'] or 0
|
||
all_ware_house_accepted_real_weight = aggregate_filtered_kill_reqs[
|
||
'total_ware_house_accepted_real_weight'] or 0
|
||
all_weight_loss = aggregate_filtered_kill_reqs['total_weight_loss'] or 0
|
||
has_code1 = filtered_kill_reqs.filter(clearance_code__isnull=False).aggregate(
|
||
total_quantity=Sum('quantity'),
|
||
)
|
||
all_quarantine_quantity_has_code = has_code1['total_quantity'] or 0
|
||
hasnt_code1 = filtered_kill_reqs.filter(clearance_code__isnull=True)
|
||
hasnt_code = hasnt_code1.aggregate(
|
||
total_quantity=Sum('quantity')
|
||
)
|
||
all_quarantine_quantity_hasnt_code = hasnt_code['total_quantity'] or 0
|
||
difference_bar = len(filtered_kill_reqs.filter(
|
||
Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity'))))
|
||
all_weight_loss = round(int(all_weight_loss) / all_state_ware_house_confirmation,
|
||
2) if all_weight_loss > 0 else 0
|
||
|
||
all_age1 = sorted(all_age)
|
||
has_code = len(filtered_kill_reqs.filter(clearance_code__isnull=False))
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.filter(
|
||
pk__in=filtered_kill_reqs.values(
|
||
'province_kill_request')).aggregate(
|
||
total_quantity_melak=Sum('total_killed_quantity'),
|
||
total_weight_melak=Sum('total_killed_weight'),
|
||
)
|
||
|
||
accepted_real_quantity_melak = province_kill_request['total_quantity_melak'] or 0
|
||
|
||
accepted_real_wight_melak = province_kill_request['total_weight_melak'] or 0
|
||
value_header_list = [
|
||
len(poultry_request),
|
||
total_requests_quantity,
|
||
int(total_requests_weight),
|
||
len(filtered_kill_reqs),
|
||
killer_exclusive,
|
||
all_kill_request_quantity,
|
||
int(all_weighte),
|
||
round(all_weighte / all_kill_request_quantity,
|
||
1) if all_weighte > 0 and all_kill_request_quantity > 0 else 0,
|
||
all_age1[0] if len(all_age1) > 0 else '-',
|
||
all_age1[len(all_age1) - 1] if len(all_age1) > 0 else '-',
|
||
int((sum(all_age1)) / len(all_age1)) if len(all_age1) > 0 else '-',
|
||
has_code,
|
||
all_quarantine_quantity_has_code,
|
||
has_qarantine,
|
||
all_quarantine_quantity,
|
||
len(hasnt_code1),
|
||
all_quarantine_quantity_hasnt_code,
|
||
difference_bar,
|
||
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_melak,
|
||
accepted_real_wight_melak,
|
||
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}'
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 6)
|
||
value_header_list2 = [
|
||
f'%{round((has_code * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((has_qarantine * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((len(bar_complete) * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((int(all_net_weighte) * 100) / int(all_weighte), 2) if int(all_weighte) > 0 else 0}',
|
||
f'%{round((len(hasnt_code1) * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((difference_bar * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((all_state_ware_house_confirmation * 100) / len(filtered_kill_reqs), 2) if len(filtered_kill_reqs) > 0 else 0}',
|
||
f'%{round((int(all_ware_house_accepted_real_weight) * 100) / int(all_weighte), 2) if int(all_weighte) > 0 else 0}',
|
||
f'%{round((int(all_ware_house_accepted_real_weight) * 100) / int(all_net_weighte), 2) if int(all_net_weighte) > 0 else 0}'
|
||
]
|
||
create_value(worksheet, value_header_list2, 6, 6)
|
||
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),
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 3, 1, color='green')
|
||
|
||
elif sheet_name == 'اطلاعات کشتار روزانه':
|
||
date1 = datetime.datetime.strptime(request.GET['date1'], '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(request.GET['date2'], '%Y-%m-%d').date()
|
||
header_list = [
|
||
'ردیف',
|
||
'تاریخ',
|
||
'حجم درخواست کشتار مرغدار',
|
||
'وزن درخواست کشتار مرغدار',
|
||
'حجم خرید های مستقیم',
|
||
'وزن خرید های مستقیم',
|
||
'حجم خرید های خارج از استان (زنده)',
|
||
'وزن خرید های خارج از استان (زنده)',
|
||
'وزن خرید های خارج از استان (لاشه)',
|
||
'حجم کل تخصیصات (خرید مستقیم/ مرغدار)',
|
||
'وزن کل تخصیصات (خرید مستقیم/ مرغدار)',
|
||
'حجم فروش به خارج استان',
|
||
'وزن فروش به خارج استان',
|
||
'حجم بارها',
|
||
'وزن بارها',
|
||
'لاشه تولیدی امروز با احتساب 25درصد افت کشتار'
|
||
]
|
||
|
||
create_header(worksheet, header_list, 1, 3, height=25, width=25, border_style='thin',
|
||
color='C00000')
|
||
excel_description(worksheet, 'A1',
|
||
'گزارش کشتار روزانه استان از تاریخ {0} تا {1}'.format(from_date_1, from_date_2),
|
||
color='red',
|
||
row2='E1')
|
||
m = 1
|
||
l = 4
|
||
|
||
current_date = date1
|
||
for day in range((date2 - date1).days + 1):
|
||
kill_house_free_bar = KillHouseFreeBarInformation.objects.filter(
|
||
trash=False,
|
||
archive_wage=False,
|
||
date__date=current_date
|
||
).only(
|
||
'quantity',
|
||
'live_weight',
|
||
'number_of_carcasses',
|
||
'weight_of_carcasses',
|
||
'send_date',
|
||
'type',
|
||
'out'
|
||
)
|
||
kill_house_free_bar_aggregates = kill_house_free_bar.aggregate(
|
||
total_quantity_live=Sum('quantity', filter=Q(create_date__date=current_date, buy_type='live')),
|
||
total_weight_live=Sum('live_weight', filter=Q(create_date__date=current_date, buy_type='live')),
|
||
total_quantity_carcass=Sum('number_of_carcasses',
|
||
filter=Q(date__date=current_date, buy_type='carcass')),
|
||
total_weight_carcass=Sum('weight_of_carcasses',
|
||
filter=Q(date__date=current_date, buy_type='carcass')),
|
||
warehouse_total_weight_carcass=Sum('weight_of_carcasses', filter=Q(date__date=current_date)),
|
||
|
||
)
|
||
|
||
poultry_request = PoultryRequest.objects.filter(
|
||
trash=False,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
out_province_request_cancel=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
send_date__date=current_date
|
||
).only(
|
||
'quantity',
|
||
'Index_weight',
|
||
'send_date'
|
||
)
|
||
|
||
poultry_request_aggregates = poultry_request.aggregate(
|
||
total_quantity=Sum('quantity',
|
||
filter=Q(send_date__date=current_date, direct_buying=False, out=False)),
|
||
total_weight=Sum(F('quantity') * F('Index_weight'),
|
||
filter=Q(send_date__date=current_date, direct_buying=False, out=False)),
|
||
total_direct_buying_quantity=Sum('quantity',
|
||
filter=Q(send_date__date=current_date, direct_buying=True)),
|
||
total_direct_buying_weight=Sum(F('quantity') * F('Index_weight'),
|
||
filter=Q(send_date__date=current_date, direct_buying=True)),
|
||
poultry_out_province_quantity=Sum('quantity', filter=Q(out=True, send_date__date=current_date)),
|
||
poultry_out_province_weight=Sum(F('quantity') * F('Index_weight'),
|
||
filter=Q(out=True, send_date__date=current_date)),
|
||
total_killing_ave_weight=Avg('Index_weight', filter=Q(send_date__date=current_date)),
|
||
# yesterday
|
||
|
||
total_killing_ave_weight_yesterday=Avg('Index_weight', filter=Q(send_date__date=current_date))
|
||
)
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.filter(
|
||
trash=False,
|
||
archive_wage=False,
|
||
return_to_province=False,
|
||
state__in=('pending', 'accepted'),
|
||
kill_request__recive_date__date=current_date
|
||
).only(
|
||
'total_killed_quantity',
|
||
'total_killed_weight',
|
||
'kill_request__recive_date'
|
||
)
|
||
|
||
province_kill_request_aggregates = province_kill_request.aggregate(
|
||
|
||
total_quantity=Sum('total_killed_quantity', filter=Q(kill_request__recive_date__date=current_date)),
|
||
total_weight_carcass=Sum('total_killed_weight',
|
||
filter=Q(kill_request__recive_date__date=current_date)) * 0.75,
|
||
province_kill_request_total_weight=Sum('total_killed_weight',
|
||
filter=Q(kill_request__recive_date__date=current_date)),
|
||
|
||
)
|
||
|
||
kill_house_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
kill_request__recive_date__date=current_date,
|
||
temporary_trash=False,
|
||
temporary_deleted=False
|
||
).select_related('kill_request').only(
|
||
'ware_house_accepted_real_weight',
|
||
'weight_loss',
|
||
'ware_house_confirmation',
|
||
'kill_request__recive_date'
|
||
)
|
||
|
||
kill_house_request_aggregates = kill_house_request.aggregate(
|
||
|
||
total_quantity=Sum(
|
||
'accepted_real_quantity',
|
||
filter=Q(kill_request__recive_date__date=current_date)
|
||
),
|
||
|
||
total_weight=Sum(
|
||
'accepted_real_weight',
|
||
filter=Q(kill_request__recive_date__date=current_date)
|
||
)
|
||
)
|
||
|
||
province_kill_request_weight = province_kill_request_aggregates[
|
||
'province_kill_request_total_weight'] or 0
|
||
|
||
bars_live_weight = kill_house_free_bar_aggregates['total_weight_live'] or 0
|
||
|
||
bars_carcasses_weight = kill_house_free_bar_aggregates['total_weight_carcass'] or 0
|
||
|
||
total_loss_weight = int(
|
||
((province_kill_request_weight + bars_live_weight) * 0.75) + bars_carcasses_weight)
|
||
|
||
list1 = [
|
||
m,
|
||
str(shamsi_date(current_date, in_value=True)),
|
||
poultry_request_aggregates.get('total_quantity') or 0,
|
||
poultry_request_aggregates.get('total_weight') or 0,
|
||
poultry_request_aggregates.get('total_direct_buying_quantity') or 0,
|
||
poultry_request_aggregates.get('total_direct_buying_weight') or 0,
|
||
|
||
kill_house_free_bar_aggregates.get('total_quantity_live') or 0,
|
||
kill_house_free_bar_aggregates.get('total_weight_live') or 0,
|
||
kill_house_free_bar_aggregates.get('total_weight_carcass') or 0,
|
||
province_kill_request_aggregates.get('total_quantity') or 0,
|
||
int(province_kill_request_aggregates.get('province_kill_request_total_weight') or 0),
|
||
poultry_request_aggregates.get('poultry_out_province_quantity') or 0,
|
||
poultry_request_aggregates.get('poultry_out_province_weight') or 0,
|
||
kill_house_request_aggregates.get('total_quantity') or 0,
|
||
kill_house_request_aggregates.get('total_weight') or 0,
|
||
int(total_loss_weight or 0)
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
current_date += datetime.timedelta(days=1)
|
||
city_operators = CityOperator.objects.filter(trash=False)
|
||
all_admin_all_violation = 0
|
||
city_operator_name = city_operators.values_list('user__fullname', flat=True).distinct()
|
||
|
||
city_operator_all_violation_all = PoultryHatching.objects.filter(trash=False,
|
||
violation_reporter__isnull=False,
|
||
violation_reporter__in=city_operator_name).count()
|
||
row_list = l + 7
|
||
row_city = l + 5
|
||
|
||
len_poultry = 0
|
||
len_all_hatching = 0
|
||
all_hathcing_quantitya_all = 0
|
||
all_province_requests_quantity = 0
|
||
all_province_requests_weight = 0
|
||
len_hatching = 0
|
||
all_hatching_quantity = 0
|
||
all_hatching_lest_over = 0
|
||
all_out_poultry_request_quantity = 0
|
||
all_out_poultry_request_weight = 0
|
||
city_operator_poultry_request_quantity_all = 0
|
||
city_operator_poultry_request_weight_all = 0
|
||
direct_bying_poultry_request_quantity_all = 0
|
||
direct_bying_poultry_request_weight_all = 0
|
||
province_operaor_poultry_request_quantity_all = 0
|
||
province_operaor_poultry_request_weight_all = 0
|
||
row_list2 = l + 2
|
||
worksheet[f'D{row_list2}'] = f'اطلاعات کشتار به تفکیک تعاونی ها از تاریخ {from_date_1} تا {from_date_2}'
|
||
worksheet[f'D{row_list2}'].font = Font(color="C00000", bold=True, size=12)
|
||
worksheet[f'D{row_list2}'].alignment = Alignment(horizontal='center', vertical='center',
|
||
wrap_text=True)
|
||
merge_range1 = f'D{row_list2}:J{row_list2 + 1}'
|
||
worksheet.merge_cells(merge_range1)
|
||
for city_operator in city_operators:
|
||
poultry_request = PoultryRequest.objects.filter(trash=False,
|
||
out_province_request_cancel=False,
|
||
province_state='accepted',
|
||
poultry__city_operator=city_operator.unit_name)
|
||
poultry = Poultry.objects.filter(trash=False, city_operator=city_operator.unit_name)
|
||
out_poultry_request = poultry_request.filter(out=True)
|
||
city_operator_poultry_request = poultry_request.filter(direct_buying=False,
|
||
registrar__role='CityOperator')
|
||
province_operaor_poultry_request = poultry_request.filter(~Q(registrar__role='CityOperator'),
|
||
direct_buying=False)
|
||
direct_bying_poultry_request = poultry_request.filter(direct_buying=True)
|
||
|
||
province_requests = ProvinceKillRequest.objects.filter(trash=False,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name
|
||
, return_to_province=False,
|
||
state__in=('accepted', 'pending'))
|
||
|
||
province_requests_quantity = \
|
||
province_requests.aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
|
||
province_requests_weight = \
|
||
province_requests.aggregate(
|
||
total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
|
||
kill_requests = KillHouseRequest.objects.filter(trash=False,
|
||
province_kill_request__in=province_requests)
|
||
all_hatching = PoultryHatching.objects.filter(trash=False, poultry__in=poultry)
|
||
all_violation = all_hatching.filter(violation_reporter__isnull=False)
|
||
city_operator_all_violation = all_violation.filter(
|
||
violation_reporter=city_operator.user.fullname).count()
|
||
admin_all_violation = all_violation.filter(~Q(violation_reporter=city_operator.user.fullname)).count()
|
||
|
||
hathcing_quantity_all = \
|
||
all_hatching.aggregate(
|
||
total=Sum(F('quantity')))[
|
||
'total'] or 0
|
||
out_poultry_request_quantity_all = \
|
||
out_poultry_request.aggregate(
|
||
total=Sum(F('quantity')))[
|
||
'total'] or 0
|
||
out_poultry_request_weight_all = \
|
||
out_poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
hatching = all_hatching.filter(archive=False, allow_hatching='pending')
|
||
hatching_quantity = \
|
||
hatching.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
hatching_lest_over = \
|
||
hatching.aggregate(
|
||
total=Sum('left_over'))[
|
||
'total'] or 0
|
||
city_operator_poultry_request_quantity = \
|
||
city_operator_poultry_request.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
city_operator_poultry_request_weight = \
|
||
city_operator_poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
|
||
direct_bying_poultry_request_quantity = \
|
||
direct_bying_poultry_request.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
direct_bying_poultry_request_weight = \
|
||
direct_bying_poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
province_operaor_poultry_request_quantity = \
|
||
province_operaor_poultry_request.aggregate(
|
||
total=Sum('quantity'))[
|
||
'total'] or 0
|
||
province_operaor_poultry_request_weight = \
|
||
province_operaor_poultry_request.aggregate(
|
||
total=Sum(F('quantity') * F('Index_weight')))[
|
||
'total'] or 0
|
||
all_admin_all_violation += admin_all_violation
|
||
|
||
len_poultry += len(poultry)
|
||
len_all_hatching += len(all_hatching)
|
||
all_hathcing_quantitya_all += hathcing_quantity_all
|
||
all_province_requests_quantity += province_requests_quantity
|
||
all_province_requests_weight += province_requests_weight
|
||
len_hatching += len(hatching)
|
||
all_hatching_quantity += hatching_quantity
|
||
all_hatching_lest_over += hatching_lest_over
|
||
all_out_poultry_request_quantity += out_poultry_request_quantity_all
|
||
all_out_poultry_request_weight += out_poultry_request_weight_all
|
||
province_requests_date = province_requests.filter(
|
||
province_request__poultry_request__send_date__date__gte=date1
|
||
, province_request__poultry_request__send_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name
|
||
)
|
||
city_operator_poultry_request_quantity_all += city_operator_poultry_request_quantity
|
||
city_operator_poultry_request_weight_all += city_operator_poultry_request_weight
|
||
direct_bying_poultry_request_quantity_all += direct_bying_poultry_request_quantity
|
||
direct_bying_poultry_request_weight_all += direct_bying_poultry_request_weight
|
||
province_operaor_poultry_request_quantity_all += province_operaor_poultry_request_quantity
|
||
province_operaor_poultry_request_weight_all += province_operaor_poultry_request_weight
|
||
|
||
list2 = [
|
||
'ردیف',
|
||
'ماهیت',
|
||
'خریدار',
|
||
'نام و نام خانوادگی مالک',
|
||
'تلفن مالک',
|
||
'شهر',
|
||
'تعداد سفارش',
|
||
'حجم سفارش',
|
||
'تعداد بار ',
|
||
'حجم بار',
|
||
'وزن بار',
|
||
'وزن لاشه',
|
||
]
|
||
|
||
for col_num, option in enumerate(list2, 2):
|
||
col_letter = get_column_letter(col_num)
|
||
cell = worksheet.cell(row=row_list, 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')
|
||
if option in ['تعداد سفارش', 'حجم سفارش', 'تعداد بار ', 'حجم بار', 'وزن بار', 'وزن لاشه']:
|
||
cell.fill = PatternFill(start_color="FF0000", fill_type="solid")
|
||
# worksheet.row_dimensions[row_list].height = 35
|
||
worksheet.column_dimensions[col_letter].width = 17
|
||
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')
|
||
)
|
||
m = 1
|
||
kill_houses1 = province_requests_date.values_list('killhouse_user', flat=True).distinct()
|
||
kill_houses = KillHouse.objects.filter(id__in=kill_houses1)
|
||
len_province_requests_kill = 0
|
||
all_province_quantity = 0
|
||
len_kill_requests_date = 0
|
||
all_accepted_assignment_real_quantity = 0
|
||
all_accepted_assignment_real_weight = 0
|
||
all_ware_house_accepted_real_weight = 0
|
||
for kill_house in kill_houses:
|
||
province_requests_kill = province_requests_date.filter(killhouse_user=kill_house)
|
||
|
||
province_quantity = \
|
||
province_requests_kill.aggregate(
|
||
total=Sum('main_quantity'))[
|
||
'total'] or 0
|
||
|
||
kill_requests_date = kill_requests.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
killhouse_user=kill_house,
|
||
province_kill_request__in=province_requests_kill)
|
||
|
||
accepted_assignment_real_quantity = \
|
||
kill_requests_date.aggregate(
|
||
total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
accepted_assignment_real_weight = \
|
||
kill_requests_date.aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
len_province_requests_kill += len(province_requests_kill)
|
||
all_province_quantity += province_quantity
|
||
len_kill_requests_date += len(kill_requests_date)
|
||
all_accepted_assignment_real_quantity += accepted_assignment_real_quantity
|
||
all_accepted_assignment_real_weight += int(accepted_assignment_real_weight)
|
||
all_ware_house_accepted_real_weight += int(accepted_assignment_real_weight) * 0.75
|
||
# killer='کشتارگاه' if kill_house.killer == False else 'کشتارکن'
|
||
if kill_house.killer == True and kill_house.type == 'exclusive':
|
||
parent = KillHousePercentage.objects.get(kill_house=kill_house, trash=False)
|
||
killer_type = f'کشتارکن اختصاصی {parent.kill_house_for_killer.name}'
|
||
elif kill_house.killer == True and kill_house.type == 'public':
|
||
killer_type = 'کشتارکن عمومی'
|
||
else:
|
||
killer_type = 'کشتارگاه'
|
||
list1 = [
|
||
m,
|
||
killer_type,
|
||
kill_house.name,
|
||
kill_house.kill_house_operator.user.fullname,
|
||
kill_house.kill_house_operator.user.mobile,
|
||
kill_house.kill_house_operator.user.city.name,
|
||
len(province_requests_kill),
|
||
province_quantity,
|
||
len(kill_requests_date),
|
||
accepted_assignment_real_quantity,
|
||
int(accepted_assignment_real_weight),
|
||
int(accepted_assignment_real_weight) * 0.75,
|
||
]
|
||
for item in range(len(list1)):
|
||
cell = worksheet.cell(row=row_list + 1, column=item + 2, value=list1[item])
|
||
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||
cell.font = Font(size=10, bold=True)
|
||
cell.fill = PatternFill(start_color="EEEAF2", fill_type="solid")
|
||
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.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')
|
||
)
|
||
row_list += 1
|
||
m += 1
|
||
|
||
else:
|
||
row_list += 5
|
||
worksheet[f'F{row_city}'] = f'{city_operator.unit_name}'
|
||
worksheet[f'F{row_city}'].font = Font(color="C00000", bold=True, size=12)
|
||
worksheet[f'F{row_city}'].alignment = Alignment(horizontal='center', vertical='center',
|
||
wrap_text=True)
|
||
merge_range1 = f'F{row_city}:H{row_city + 1}'
|
||
worksheet.merge_cells(merge_range1)
|
||
|
||
row_city += len(kill_houses) + 5
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
len_province_requests_kill,
|
||
all_province_quantity,
|
||
len_kill_requests_date or 0,
|
||
all_accepted_assignment_real_quantity or 0,
|
||
all_accepted_assignment_real_weight or 0,
|
||
all_ware_house_accepted_real_weight or 0,
|
||
|
||
]
|
||
for item in range(len(list2)):
|
||
cell = worksheet.cell(row=row_city - 2, column=item + 2, value=list2[item])
|
||
value = list2[item]
|
||
cell.font = Font(size=10, bold=True, color='FFFFFF')
|
||
if isinstance(value, (int, float)):
|
||
cell.number_format = '#,###' # Apply general number format
|
||
else:
|
||
cell.value = value # Keep as text for other values
|
||
|
||
cell.alignment = Alignment(horizontal='center')
|
||
cell.fill = PatternFill(start_color="00B050", fill_type="solid")
|
||
elif sheet_name == 'عملکرد خریداران':
|
||
kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
'kill_house', flat=True)
|
||
kill_houses = KillHouse.objects.filter(out_province=False, active=True, trash=False).exclude(
|
||
id__in=kill_house_ids).order_by(
|
||
'id')
|
||
|
||
serializer = KillHouseForPerformanceDashboardSerializer(kill_houses, many=True,
|
||
context={'date1': date1, 'date2': date2, }).data
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'ماهیت',
|
||
'کشتارگاه / کشتارکن',
|
||
'مالک',
|
||
'شهر',
|
||
'تعداد بارهای داخل استان',
|
||
'حجم بارهای داخل استان',
|
||
'وزن بارهای داخل استان',
|
||
'تعداد بارهای خارج استان',
|
||
'حجم بارهای خارج استان',
|
||
'وزن بارهای خارج استان',
|
||
'حجم تخصیصات بدون بار',
|
||
'حجم کل بارها',
|
||
'وزن کل بارها',
|
||
'میانگین وزن',
|
||
'حجم وارد شده به انبار',
|
||
'وزن وارد شده به انبار',
|
||
'حجم وارد نشده به انبار',
|
||
'وزن وارد نشده به انبار'
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
red_font = Font(color="C00000", bold=True)
|
||
|
||
create_header(worksheet, excel_options, 1, 2, height=25, width=25, border_style='thin',
|
||
color='C00000')
|
||
|
||
worksheet['B1'] = f'اطلاعات کشتار زنده کشتارگاه'
|
||
|
||
worksheet['E1'] = 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 = 'E1:H1'
|
||
worksheet.merge_cells(merge_range1)
|
||
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 = 2
|
||
m = 1
|
||
|
||
if serializer:
|
||
for data in serializer:
|
||
list1 = [
|
||
m, # ردیف
|
||
'کشتارگاه' if data['killer'] else 'کشتارکن', # ماهیت
|
||
data['name'], # کشتارگاه / کشتارکن
|
||
data['kill_house_operator']['user']['fullname'], # مالک
|
||
data['kill_house_operator']['user']['city'], # شهر
|
||
data['killing_info']['kill_house_requests_count'], # تعداد بارهای داخل استان
|
||
data['killing_info']['kill_house_requests_quantity'], # حجم بارهای داخل استان
|
||
data['killing_info']['kill_house_requests_weight'], # وزن بارهای داخل استان
|
||
data['killing_info']['kill_house_free_bar_count'], # تعداد بارهای خارج استان
|
||
data['killing_info']['kill_house_free_bar_quantity'], # حجم بارهای خارج استان
|
||
data['killing_info']['kill_house_free_bar_weight'], # وزن بارهای خارج استان
|
||
data['killing_info']['province_kill_requests_quantity'], # حجم تخصیصات بدون بار
|
||
data['killing_info']['total_quantity'], # حجم کل بارها
|
||
data['killing_info']['total_weight'], # وزن کل بارها
|
||
data['killing_info']['total_avg_weight'], # میانگین وزن
|
||
data['killing_info']['kill_house_requests_ware_house_true_quantity'], # حجم وارد شده به انبار
|
||
data['killing_info']['kill_house_requests_ware_house_true_weight'], # وزن وارد شده به انبار
|
||
data['killing_info']['kill_house_requests_ware_house_false_quantity'], # حجم وارد نشده به انبار
|
||
data['killing_info']['kill_house_requests_ware_house_false_weight'] # وزن وارد نشده به انبار
|
||
]
|
||
m += 1
|
||
|
||
create_value(worksheet, list1, l + 1, 1)
|
||
l += 1
|
||
|
||
total_province_kill_requests_count = sum(
|
||
data['killing_info']['kill_house_requests_count'] for data in serializer)
|
||
total_province_kill_requests_quantity = sum(
|
||
data['killing_info']['kill_house_requests_quantity'] for data in serializer)
|
||
total_province_kill_requests_weight = sum(
|
||
data['killing_info']['kill_house_requests_weight'] for data in serializer)
|
||
total_kill_house_requests_count = sum(
|
||
data['killing_info']['kill_house_free_bar_count'] for data in serializer)
|
||
total_kill_house_requests_quantity = sum(
|
||
data['killing_info']['kill_house_free_bar_quantity'] for data in serializer)
|
||
total_kill_house_requests_weight = sum(
|
||
data['killing_info']['kill_house_free_bar_weight'] for data in serializer)
|
||
total_quantity = sum(data['killing_info']['province_kill_requests_quantity'] for data in serializer)
|
||
total_kill_house_free_bar_quantity = sum(
|
||
data['killing_info']['total_quantity'] for data in serializer)
|
||
total_kill_house_free_bar_weight = sum(
|
||
data['killing_info']['total_weight'] for data in serializer)
|
||
total_avg_weight = sum(data['killing_info']['total_avg_weight'] for data in serializer) / len(
|
||
serializer) if serializer else 0
|
||
total_ware_house_true_quantity = sum(
|
||
data['killing_info']['kill_house_requests_ware_house_true_quantity'] for data in serializer)
|
||
total_ware_house_true_weight = sum(
|
||
data['killing_info']['kill_house_requests_ware_house_true_weight'] for data in serializer)
|
||
total_ware_house_false_quantity = sum(
|
||
data['killing_info']['kill_house_requests_ware_house_false_quantity'] for data in serializer)
|
||
total_ware_house_false_weight = sum(
|
||
data['killing_info']['kill_house_requests_ware_house_false_weight'] for data in serializer)
|
||
|
||
# لیست مجموع مقادیر
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_province_kill_requests_count,
|
||
total_province_kill_requests_quantity,
|
||
total_province_kill_requests_weight,
|
||
total_kill_house_requests_count,
|
||
total_kill_house_requests_quantity,
|
||
total_kill_house_requests_weight,
|
||
total_quantity,
|
||
total_kill_house_free_bar_quantity,
|
||
total_kill_house_free_bar_weight,
|
||
total_avg_weight,
|
||
total_ware_house_true_quantity,
|
||
total_ware_house_true_weight,
|
||
total_ware_house_false_quantity,
|
||
total_ware_house_false_weight
|
||
]
|
||
for item in range(len(list2)):
|
||
cell = worksheet.cell(row=l + 2, column=item + 1, value=list2[item])
|
||
value = list2[item]
|
||
if isinstance(value, (int, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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")
|
||
|
||
kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
'kill_house', flat=True)
|
||
kill_houses = KillHouse.objects.filter(out_province=False, active=True, trash=False).exclude(
|
||
id__in=kill_house_ids).order_by(
|
||
'id')
|
||
|
||
kill_houses = kill_houses.annotate(
|
||
allocation_count=Count(
|
||
'kill_house_steward_allocation',
|
||
filter=Q(kill_house_steward_allocation__receiver_state__in=['pending', 'accepted'])
|
||
)
|
||
).order_by(
|
||
'-allocation_count'
|
||
)
|
||
new_serializer = KillHouseForProvinceWareHouseDashboardSerializer(kill_houses, many=True,
|
||
context={'request': request}).data
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'خریدار',
|
||
'ماهیت',
|
||
'شهر',
|
||
'مانده انبار فعلی',
|
||
'وزن کل فروش (لاشه)',
|
||
'وزن فروش داخل استان (لاشه)',
|
||
'وزن فروش خارج استان (لاشه)'
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
to_date_1 = shamsi_date(date2)
|
||
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
red_font = Font(color="C00000", bold=True)
|
||
new_l = l + 6
|
||
|
||
create_header(worksheet, excel_options, 1, new_l, height=25, width=25, border_style='thin',
|
||
color='C00000')
|
||
new_m = 1
|
||
worksheet[f'B{new_l - 1}'] = f'اطلاعات توزیع گوشت مرغ کشتارگاه'
|
||
|
||
worksheet[f'E{new_l - 1}'] = f'از تاریخ:({from_date_1}) تا تاریخ:({to_date_1})'
|
||
|
||
worksheet['B3'].alignment = Alignment(horizontal='center', vertical='center')
|
||
worksheet[f'B{new_l - 1}'].alignment = Alignment(horizontal='center', vertical='center')
|
||
worksheet['B2'].alignment = Alignment(horizontal='center', vertical='center')
|
||
merge_range1 = f'B{new_l - 1}:D{new_l - 1}'
|
||
merge_range2 = f'E{new_l - 1}:H{new_l - 1}'
|
||
worksheet.merge_cells(merge_range1)
|
||
worksheet.merge_cells(merge_range2)
|
||
worksheet[f'B{new_l - 1}'].font = red_font
|
||
worksheet['B3'].font = Font(size=11)
|
||
worksheet['B2'].font = Font(size=10, bold=True, color="C00000")
|
||
|
||
if new_serializer:
|
||
for data in new_serializer:
|
||
list1 = [
|
||
new_m, # ردیف
|
||
data['name'], # خریدار
|
||
'کشتارگاه' if data['killer'] else 'کشتارکن', # ماهیت
|
||
data['kill_house_operator']['user']['city']['name'], # شهر
|
||
data['ware_house_info']['product_remain_weight'], # مانده انبار فعلی
|
||
data['ware_house_info']['total_sell'], # وزن کل فروش (لاشه)
|
||
data['ware_house_info']['total_kill_house_allocations_weight'], # وزن فروش داخل استان (لاشه)
|
||
data['ware_house_info']['total_kill_house_free_sale__bar_carcasses_weight']
|
||
# وزن فروش خارج استان (لاشه)
|
||
]
|
||
new_m += 1
|
||
|
||
create_value(worksheet, list1, new_l + 1, 1)
|
||
new_l += 1
|
||
|
||
total_inventory = sum(data['ware_house_info']['product_remain_weight'] for data in new_serializer)
|
||
total_sales = sum(data['ware_house_info']['total_sell'] for data in new_serializer)
|
||
total_in_province = sum(
|
||
data['ware_house_info']['total_kill_house_allocations_weight'] for data in new_serializer)
|
||
total_out_province = sum(
|
||
data['ware_house_info']['total_kill_house_free_sale__bar_carcasses_weight'] for data in
|
||
new_serializer)
|
||
|
||
list2 = [
|
||
'مجموع ==>',
|
||
'',
|
||
'',
|
||
'',
|
||
total_inventory,
|
||
total_sales,
|
||
total_in_province,
|
||
total_out_province
|
||
]
|
||
for item in range(len(list2)):
|
||
cell = worksheet.cell(row=new_l + 2, column=item + 1, value=list2[item])
|
||
value = list2[item]
|
||
if isinstance(value, (int, float)):
|
||
if value != 0:
|
||
cell.number_format = '#,##0' # 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")
|
||
elif sheet_name == 'گزارش سند ها':
|
||
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_houses = KillHouse.objects.filter(trash=False, out_province=False).order_by('id')
|
||
kill_house_request = KillHouseRequest.objects.filter(trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
temporary_trash=False, temporary_deleted=False)
|
||
bar_duc = BarDocumentStatus.objects.filter(trash=False).order_by('id').values_list('title', flat=True)
|
||
excel_options = [
|
||
'ردیف',
|
||
'نام گشتارگاه',
|
||
'تلفن',
|
||
'شهر',
|
||
'تعداد کل بار',
|
||
'بارهای دارای سند',
|
||
'بارهای فاقد سند',
|
||
*bar_duc
|
||
|
||
]
|
||
|
||
from_date_1 = shamsi_date(date1)
|
||
from_date_2 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B1',
|
||
'گزارش سند ها از تاریخ {0} تا {1}'.format(from_date_1, from_date_2),
|
||
color='red', row2='C3')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
l = 5
|
||
m = 1
|
||
total_counts = {title: 0 for title in bar_duc}
|
||
|
||
for kill_house in kill_houses:
|
||
kill_house_request1 = kill_house_request.filter(
|
||
trash=False,
|
||
killhouse_user=kill_house,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
temporary_trash=False,
|
||
temporary_deleted=False
|
||
)
|
||
|
||
# محاسبه تعداد کل بارها
|
||
bar_count = kill_house_request1.count()
|
||
|
||
# محاسبه تعداد بارهای دارای سند و فاقد سند
|
||
bar_assigment_true_count = kill_house_request1.filter(assignment_state_archive='True').count()
|
||
bar_assigment_pending_count = kill_house_request1.filter(assignment_state_archive='pending').count()
|
||
|
||
# محاسبه تعداد هر وضعیت سند
|
||
status_counts = {}
|
||
for title in bar_duc:
|
||
count = kill_house_request1.filter(bar_document_status__title=title).count()
|
||
status_counts[title] = count
|
||
total_counts[title] += count
|
||
|
||
list1 = [
|
||
m,
|
||
kill_house.name,
|
||
kill_house.kill_house_operator.user.mobile,
|
||
kill_house.kill_house_operator.user.city.name,
|
||
bar_count,
|
||
bar_assigment_true_count,
|
||
bar_assigment_pending_count,
|
||
*[status_counts.get(title, 0) for title in bar_duc]
|
||
]
|
||
|
||
m += 1
|
||
l += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
bar_count = kill_house_request.count()
|
||
|
||
bar_assigment_true_count = kill_house_request.filter(assignment_state_archive='True').count()
|
||
bar_assigment_pending_count = kill_house_request.filter(assignment_state_archive='pending').count()
|
||
|
||
list2 = [
|
||
'مجموع',
|
||
'',
|
||
'',
|
||
'',
|
||
bar_count,
|
||
bar_assigment_true_count,
|
||
bar_assigment_pending_count,
|
||
*[total_counts[title] for title in bar_duc]
|
||
]
|
||
create_value(worksheet, list2, l + 3, 1, color='green')
|
||
|
||
elif sheet_name == 'اطلاعات جامع انبار و توزیع':
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id').annotate(
|
||
allocation_count=Count(
|
||
'kill_house_steward_allocation',
|
||
filter=Q(kill_house_steward_allocation__receiver_state__in=['pending', 'accepted'])
|
||
)
|
||
).order_by(
|
||
'-allocation_count'
|
||
)
|
||
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
|
||
serializer = KillHouseForProvinceWareHouseDashboardSerializer(kill_houses, many=True,
|
||
context={'request': request}).data
|
||
header_list2 = [
|
||
'ردیف',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'ماهیت',
|
||
'شهر',
|
||
'مانده انبار فعلی',
|
||
'کل وزن ورودی به انبار',
|
||
'کل وزن فروش رفته',
|
||
'حجم تخصیصات بدون ماشین',
|
||
'تعداد بار درون استان',
|
||
'حجم بار درون استان',
|
||
'وزن بار درون استان',
|
||
'تعداد بار زنده خارج استان',
|
||
'حجم بار زنده خارج استان',
|
||
'وزن بار زنده خارج استان',
|
||
'تعداد بار لاشه خارج استان',
|
||
'حجم بار لاشه خارج استان',
|
||
'وزن بار لاشه خارج استان',
|
||
'تعداد کل بارها',
|
||
'حجم کل بارها',
|
||
'وزن کل بارها',
|
||
'تعداد بار وارد شده به انبار',
|
||
'تعداد بار وارد نشده به انبار',
|
||
'حجم بار وارد نشده به انبار',
|
||
'وزن بار وارد نشده به انبار',
|
||
'وزن فروش داخل استان',
|
||
'وزن فروش خارج استان',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 1, 6, height=21.8, width=20, border_style='thin')
|
||
l = 7
|
||
if serializer:
|
||
|
||
m = 1
|
||
|
||
for data in serializer:
|
||
list1 = [
|
||
m,
|
||
data.get('name', ''),
|
||
data.get('kill_house_operator', {}).get('user', {}).get('mobile', ''),
|
||
'کشتارگاه' if not data.get('killer', False) else 'کشتارکن',
|
||
data.get('kill_house_operator', {}).get('user', {}).get('city', {}).get('name', ''),
|
||
data.get('ware_house_info', {}).get('product_remain_weight', 0),
|
||
data.get('ware_house_info', {}).get('warehouse_total_entered_carcasses_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_sell', 0),
|
||
data.get('ware_house_info', {}).get('province_kill_requests_quantity', 0),
|
||
data.get('ware_house_info', {}).get('total_province_bars', 0),
|
||
data.get('ware_house_info', {}).get('total_province_bars_quantity', 0),
|
||
data.get('ware_house_info', {}).get('total_province_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_bar', 0),
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_live_bar_quantity', 0),
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_live_bar_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_carcasses_bar', 0),
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_bar_carcasses', 0),
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_bar_carcasses_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_bars', 0),
|
||
data.get('ware_house_info', {}).get('warehouse_total_quantity', 0),
|
||
data.get('ware_house_info', {}).get('warehouse_total_weight', 0),
|
||
int(data.get('ware_house_info', {}).get('warehouse_total_entered_bars', 0)),
|
||
data.get('ware_house_info', {}).get('warehouse_total_not_entered_bars', 0),
|
||
data.get('ware_house_info', {}).get('warehouse_total_not_entered_bars_quantity', 0),
|
||
data.get('ware_house_info', {}).get('warehouse_total_not_entered_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_kill_house_allocations_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_sale__bar_carcasses_weight', 0),
|
||
|
||
]
|
||
|
||
create_value(worksheet, list1, l, 1, border_style='thin', m=m)
|
||
m += 1
|
||
l += 1
|
||
header_list2 = [
|
||
'حجم کل بارها',
|
||
'وزن کل بارها',
|
||
'وزن وارد شده به انبار',
|
||
'وزن توزیع شده داخل استان',
|
||
'وزن توزیع شده خارج استان',
|
||
'مانده انبار',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 3, 3, height=21.8, width=20, color='C00000',
|
||
border_style='thin')
|
||
products = RolesProducts.objects.filter(kill_house__in=kill_houses, trash=False)
|
||
product_remain_weight = products.aggregate(total=Sum('total_remain_weight'))[
|
||
'total'] or 0
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
shamsi_date1 = shamsi_date(date1)
|
||
shamsi_date2 = shamsi_date(date2)
|
||
excel_description(worksheet, 'A2',
|
||
f' اطلاعات جامع انبار و توزیع کشتارگاه{shamsi_date1} تا تاریخ {shamsi_date2}',
|
||
size=11, color='red', row2='B4')
|
||
|
||
else:
|
||
excel_description(worksheet, 'A2', f'اطلاعات جامع انبار',
|
||
size=11, color='red', row2='B4')
|
||
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()
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False, calculate_status=True)
|
||
|
||
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(
|
||
Q(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type='carcass') | Q(
|
||
create_date__date__gte=date1, create_date__date__lte=date2, buy_type='live'),
|
||
kill_house__in=kill_houses,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True)
|
||
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True)
|
||
kill_house_allocations = StewardAllocation.objects.filter(kill_house__in=kill_houses,
|
||
trash=False,
|
||
receiver_state__in=(
|
||
'pending', 'accepted'),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
to_cold_house__isnull=True,
|
||
calculate_status=True)
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses),
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False, calculate_status=True)
|
||
|
||
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True)
|
||
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True)
|
||
kill_house_allocations = StewardAllocation.objects.filter(kill_house__in=kill_houses,
|
||
trash=False,
|
||
receiver_state__in=(
|
||
'pending', 'accepted'),
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
to_cold_house__isnull=True,
|
||
calculate_status=True)
|
||
total_kill_house_requests_quantity = \
|
||
kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
total_kill_house_requests_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
total_entered_kill_house_requests_carcasses_weight = \
|
||
kill_house_requests.filter(ware_house_confirmation=True).aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
kill_house_free_bar_informations_live = kill_house_free_bar_informations.filter(buy_type='live')
|
||
kill_house_free_bar_informations_carcasses = kill_house_free_bar_informations.filter(
|
||
buy_type='carcass')
|
||
total_kill_house_free_bar_quantity = \
|
||
kill_house_free_bar_informations_live.aggregate(total=Sum('quantity'))['total'] or 0
|
||
total_kill_house_free_bar_weight = \
|
||
kill_house_free_bar_informations_live.aggregate(total=Sum('live_weight'))['total'] or 0
|
||
total_kill_house_free_bar_carcasses = \
|
||
kill_house_free_bar_informations_carcasses.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_kill_house_free_bar_carcasses_weight = \
|
||
kill_house_free_bar_informations_carcasses.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_entered_kill_house_free_bar_carcasses_weight = \
|
||
kill_house_free_bar_informations.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_kill_house_free_sale__bar_carcasses_weight = \
|
||
kill_house_free_Sale_bar_informations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_kill_house_allocations_weight = \
|
||
kill_house_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
warehouse_total_weight = total_kill_house_requests_weight + total_kill_house_free_bar_weight + total_kill_house_free_bar_carcasses_weight
|
||
warehouse_total_entered_carcasses_weight = total_entered_kill_house_requests_carcasses_weight + total_entered_kill_house_free_bar_carcasses_weight
|
||
|
||
result = {
|
||
"product_remain_weight": int(warehouse_total_entered_carcasses_weight - (
|
||
total_kill_house_allocations_weight + total_kill_house_free_sale__bar_carcasses_weight)),
|
||
"warehouse_total_quantity": int(
|
||
total_kill_house_requests_quantity + total_kill_house_free_bar_quantity + total_kill_house_free_bar_carcasses),
|
||
"warehouse_total_weight": int(warehouse_total_weight),
|
||
"warehouse_total_entered_carcasses_weight": int(warehouse_total_entered_carcasses_weight),
|
||
"total_kill_house_allocations_weight": int(total_kill_house_allocations_weight),
|
||
"total_kill_house_free_sale_bar_carcasses_weight": int(
|
||
total_kill_house_free_sale__bar_carcasses_weight),
|
||
|
||
}
|
||
|
||
value_header_list = [
|
||
result['warehouse_total_quantity'], # حجم کل بارها
|
||
result['warehouse_total_weight'], # وزن کل بارها
|
||
result['warehouse_total_entered_carcasses_weight'], # وزن وارد شده به انبار
|
||
result['total_kill_house_allocations_weight'], # وزن توزیع شده داخل استان
|
||
result['total_kill_house_free_sale_bar_carcasses_weight'],
|
||
result['product_remain_weight'] # مانده انبار
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 3, border_style='thin')
|
||
|
||
# محاسبه مجموع هر یک از فیلدها
|
||
sum_product_remain_weight = sum(
|
||
data.get('ware_house_info', {}).get('product_remain_weight', 0) for data in serializer)
|
||
sum_previous_product_remain_weight = sum(
|
||
data.get('ware_house_info', {}).get('previous_product_remain_weight', 0) for data in serializer)
|
||
sum_province_kill_requests_quantity = sum(
|
||
data.get('ware_house_info', {}).get('province_kill_requests_quantity', 0) for data in
|
||
serializer)
|
||
sum_total_province_bars = sum(
|
||
data.get('ware_house_info', {}).get('total_province_bars', 0) for data in serializer)
|
||
sum_total_province_bars_quantity = sum(
|
||
data.get('ware_house_info', {}).get('total_province_bars_quantity', 0) for data in serializer)
|
||
sum_total_province_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_province_bars_weight', 0) for data in serializer)
|
||
sum_total_kill_house_free_bar = sum(
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_bar', 0) for data in serializer)
|
||
sum_total_kill_house_free_live_bar_quantity = sum(
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_live_bar_quantity', 0) for data in
|
||
serializer)
|
||
sum_total_kill_house_free_live_bar_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_live_bar_weight', 0) for data in
|
||
serializer)
|
||
sum_total_kill_house_free_carcasses_bar = sum(
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_carcasses_bar', 0) for data in
|
||
serializer)
|
||
sum_total_kill_house_free_bar_carcasses = sum(
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_bar_carcasses', 0) for data in
|
||
serializer)
|
||
sum_total_kill_house_free_bar_carcasses_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_bar_carcasses_weight', 0) for data in
|
||
serializer)
|
||
sum_total_bars = sum(data.get('ware_house_info', {}).get('total_bars', 0) for data in serializer)
|
||
sum_warehouse_total_quantity = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_quantity', 0) for data in serializer)
|
||
sum_warehouse_total_weight = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_weight', 0) for data in serializer)
|
||
sum_warehouse_total_entered_bars = sum(
|
||
int(data.get('ware_house_info', {}).get('warehouse_total_entered_bars', 0)) for data in
|
||
serializer)
|
||
sum_warehouse_total_entered_carcasses_weight = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_entered_carcasses_weight', 0) for data in
|
||
serializer)
|
||
sum_warehouse_total_not_entered_bars = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_not_entered_bars', 0) for data in
|
||
serializer)
|
||
sum_warehouse_total_not_entered_bars_quantity = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_not_entered_bars_quantity', 0) for data in
|
||
serializer)
|
||
sum_warehouse_total_not_entered_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_not_entered_bars_weight', 0) for data in
|
||
serializer)
|
||
sum_total_kill_house_allocations_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_kill_house_allocations_weight', 0) for data in
|
||
serializer)
|
||
sum_total_kill_house_free_sale__bar_carcasses_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_kill_house_free_sale__bar_carcasses_weight', 0) for
|
||
data in
|
||
serializer)
|
||
sum_total_sell = sum(
|
||
data.get('ware_house_info', {}).get('total_sell', 0) for data in
|
||
serializer)
|
||
sum_warehouse_total_entered_bars = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_entered_bars', 0) for data in
|
||
serializer)
|
||
|
||
summary_list = [
|
||
'جمع کل==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
sum_product_remain_weight,
|
||
sum_warehouse_total_entered_bars,
|
||
sum_total_sell,
|
||
sum_province_kill_requests_quantity,
|
||
sum_total_province_bars,
|
||
sum_total_province_bars_quantity,
|
||
sum_total_province_bars_weight,
|
||
sum_total_kill_house_free_bar,
|
||
sum_total_kill_house_free_live_bar_quantity,
|
||
sum_total_kill_house_free_live_bar_weight,
|
||
sum_total_kill_house_free_carcasses_bar,
|
||
sum_total_kill_house_free_bar_carcasses,
|
||
sum_total_kill_house_free_bar_carcasses_weight,
|
||
sum_total_bars,
|
||
sum_warehouse_total_quantity,
|
||
sum_warehouse_total_weight,
|
||
sum_warehouse_total_entered_bars,
|
||
sum_warehouse_total_not_entered_bars,
|
||
sum_warehouse_total_not_entered_bars_quantity,
|
||
sum_warehouse_total_not_entered_bars_weight,
|
||
sum_total_kill_house_allocations_weight,
|
||
sum_total_kill_house_free_sale__bar_carcasses_weight
|
||
]
|
||
|
||
create_value(worksheet, summary_list, l + 1, 1, color='green')
|
||
|
||
new_l = l + 7
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
stewards = Guilds.objects.filter(trash=False, steward=True).select_related('user').only('user',
|
||
'guilds_name',
|
||
'steward').order_by(
|
||
'id')
|
||
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
allocation_stewards = stewards.annotate(
|
||
allocation_count=Count(
|
||
'allocation_to_steward',
|
||
filter=Q(allocation_to_steward__receiver_state__in=['pending', 'accepted'],
|
||
allocation_to_steward__date__date__gte=date1,
|
||
allocation_to_steward__date__date__lte=date2)
|
||
)
|
||
).filter(allocation_count__gt=0).order_by('-allocation_count')
|
||
|
||
free_bar_stewards = stewards.annotate(
|
||
free_bar_count=Count(
|
||
'free_bar_info_steward'
|
||
)
|
||
).filter(free_bar_count__gt=0).order_by('-free_bar_count')
|
||
|
||
stewards1 = list(set(chain(allocation_stewards, free_bar_stewards)))
|
||
|
||
else:
|
||
allocation_stewards = stewards.annotate(
|
||
allocation_count=Count(
|
||
'allocation_to_steward',
|
||
filter=Q(allocation_to_steward__receiver_state__in=['pending', 'accepted'])
|
||
)
|
||
).filter(allocation_count__gt=0).order_by('-allocation_count')
|
||
|
||
free_bar_stewards = stewards.annotate(
|
||
free_bar_count=Count(
|
||
'free_bar_info_steward'
|
||
)
|
||
).filter(free_bar_count__gt=0).order_by('-free_bar_count')
|
||
|
||
stewards1 = list(set(chain(allocation_stewards, free_bar_stewards)))
|
||
|
||
serializer = RealGuildsForDashboardSerializer(stewards1, many=True, context={'request': request}).data
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
allocation_stewards = stewards.annotate(
|
||
allocation_count=Count(
|
||
'allocation_to_steward',
|
||
filter=Q(allocation_to_steward__receiver_state__in=['pending', 'accepted'],
|
||
allocation_to_steward__date__date__gte=date1,
|
||
allocation_to_steward__date__date__lte=date2)
|
||
)
|
||
).filter(allocation_count__gt=0).order_by('-allocation_count')
|
||
|
||
free_bar_stewards = stewards.annotate(
|
||
free_bar_count=Count(
|
||
'free_bar_info_steward'
|
||
)
|
||
).filter(free_bar_count__gt=0).order_by('-free_bar_count')
|
||
|
||
stewards = (list(chain(allocation_stewards, free_bar_stewards)))
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
Q(steward__in=stewards) | Q(to_steward__in=stewards),
|
||
trash=False, calculate_status=True, to_cold_house__isnull=True,
|
||
date__date__gte=date1, date__date__lte=date2)
|
||
|
||
free_bars = StewardFreeBarInformation.objects.filter(steward__in=stewards, trash=False,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
free_sale_bars = StewardFreeSaleBarInformation.objects.filter(steward__in=stewards, trash=False,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
else:
|
||
allocation_stewards = stewards.annotate(
|
||
allocation_count=Count(
|
||
'allocation_to_steward',
|
||
filter=Q(allocation_to_steward__receiver_state__in=['pending', 'accepted'])
|
||
)
|
||
).filter(allocation_count__gt=0).order_by('-allocation_count').values_list('id', flat=True)
|
||
|
||
free_bar_stewards = stewards.annotate(
|
||
free_bar_count=Count(
|
||
'free_bar_info_steward'
|
||
)
|
||
).filter(free_bar_count__gt=0).order_by('-free_bar_count').values_list('id', flat=True)
|
||
|
||
stewards = (list(chain(allocation_stewards, free_bar_stewards)))
|
||
|
||
allocations = StewardAllocation.objects.filter(
|
||
Q(steward__in=stewards) | Q(to_steward__in=stewards),
|
||
trash=False, calculate_status=True, to_cold_house__isnull=True)
|
||
|
||
free_bars = StewardFreeBarInformation.objects.filter(steward__in=stewards, trash=False)
|
||
free_sale_bars = StewardFreeSaleBarInformation.objects.filter(steward__in=stewards, trash=False)
|
||
|
||
header_list2 = [
|
||
'ردیف',
|
||
'خریدار',
|
||
'تلفن خریدار',
|
||
'ماهیت',
|
||
'شهر',
|
||
'مانده انبار فعلی',
|
||
'تعداد کل بارها',
|
||
'وزن کل بارها',
|
||
'تعداد بار وارد شده به انبار',
|
||
'کل وزن ورودی به انبار',
|
||
'تعداد فروش رفته',
|
||
'کل وزن فروش رفته',
|
||
'تعداد بار درون استان',
|
||
'وزن بار درون استان',
|
||
'تعداد بار لاشه خارج استان',
|
||
'وزن بار لاشه خارج استان',
|
||
'وزن فروش داخل استان',
|
||
'وزن فروش خارج استان',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 1, new_l, height=21.8, width=20, border_style='thin')
|
||
|
||
allocations_aggregates = allocations.aggregate(
|
||
total_input_bars_count=Count('id', filter=Q(to_steward__isnull=False)),
|
||
total_input_bars_weight=Sum('real_weight_of_carcasses', filter=Q(to_steward__isnull=False)),
|
||
total_output_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(steward__isnull=False,
|
||
receiver_state__in=('pending', 'accepted'))),
|
||
total_input_entered_bars_weight=Sum('real_weight_of_carcasses',
|
||
filter=Q(to_steward__isnull=False, receiver_state='accepted'))
|
||
)
|
||
|
||
free_bars_aggregates = free_bars.aggregate(
|
||
total_count=Count('id'),
|
||
total_weight=Sum('weight_of_carcasses')
|
||
)
|
||
|
||
free_sale_bars_aggregates = free_sale_bars.aggregate(
|
||
total_count=Count('id'),
|
||
total_weight=Sum('weight_of_carcasses'),
|
||
|
||
)
|
||
|
||
input_allocations_weight = allocations_aggregates['total_input_bars_weight'] or 0
|
||
input_entered_allocations_weight = allocations_aggregates['total_input_entered_bars_weight'] or 0
|
||
output_allocations_weight = allocations_aggregates['total_output_bars_weight'] or 0
|
||
free_bars_weight = free_bars_aggregates['total_weight'] or 0
|
||
free_sale_bars_weight = free_sale_bars_aggregates['total_weight'] or 0
|
||
remain_weight = int(
|
||
(input_entered_allocations_weight + free_bars_weight) - (
|
||
free_sale_bars_weight + output_allocations_weight))
|
||
|
||
if date1:
|
||
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
shamsi_date1 = shamsi_date(date1)
|
||
shamsi_date2 = shamsi_date(date2)
|
||
excel_description(worksheet, f'A{new_l - 2}',
|
||
f' اطلاعات جامع انبار و توزیع مباشرین از تاریخ {shamsi_date1} تا تاریخ {shamsi_date2}',
|
||
size=11, color='red', row2=f'B{new_l - 1}')
|
||
|
||
sum_remain_weight = sum(data.get('ware_house_info', {}).get('remain_weight', 0) for data in serializer)
|
||
sum_total_bars_count = sum(
|
||
data.get('ware_house_info', {}).get('total_bars_count', 0) for data in serializer)
|
||
sum_total_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_bars_weight', 0) for data in serializer)
|
||
sum_total_entered_bars_count = sum(
|
||
data.get('ware_house_info', {}).get('total_entered_bars_count', 0) for data in serializer)
|
||
sum_total_entered_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_entered_bars_weight', 0) for data in serializer)
|
||
sum_total_in_out_province_bars_count = sum(
|
||
data.get('ware_house_info', {}).get('total_in_out_province_bars_count', 0) for data in serializer)
|
||
sum_total_in_out_province_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('total_in_out_province_bars_weight', 0) for data in serializer)
|
||
sum_input_bars_count = sum(
|
||
data.get('ware_house_info', {}).get('input_bars_count', 0) for data in serializer)
|
||
sum_input_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('input_bars_weight', 0) for data in serializer)
|
||
sum_free_bars_count = sum(data.get('ware_house_info', {}).get('free_bars_count', 0) for data in serializer)
|
||
sum_free_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('free_bars_weight', 0) for data in serializer)
|
||
sum_in_province_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('in_province_bars_weight', 0) for data in serializer)
|
||
sum_out_province_bars_weight = sum(
|
||
data.get('ware_house_info', {}).get('out_province_bars_weight', 0) for data in serializer)
|
||
sum_warehouse_total_entered_bars = sum(
|
||
data.get('ware_house_info', {}).get('warehouse_total_entered_bars', 0) for data in serializer)
|
||
result = {
|
||
"total_bars_weight": int(input_allocations_weight + free_bars_weight),
|
||
"total_entered_bars_weight": int(input_entered_allocations_weight + free_bars_weight),
|
||
"in_province_bars_weight": int(output_allocations_weight),
|
||
"out_province_bars_weight": int(free_sale_bars_weight),
|
||
"remain_weight": remain_weight,
|
||
}
|
||
|
||
value_header_list = [
|
||
result['total_bars_weight'],
|
||
result['total_entered_bars_weight'],
|
||
result['in_province_bars_weight'],
|
||
result['out_province_bars_weight'],
|
||
result['remain_weight'],
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, new_l - 1, 3, border_style='thin')
|
||
header_list2 = [
|
||
'وزن کل بارها',
|
||
'وزن وارد شده به انبار',
|
||
'وزن توزیع شده داخل استان',
|
||
'وزن توزیع شده خارج استان',
|
||
'مانده انبار',
|
||
|
||
]
|
||
create_header(worksheet, header_list2, 3, new_l - 2, height=21.8, width=20, color='C00000',
|
||
border_style='thin')
|
||
if serializer:
|
||
m = 1
|
||
for data in serializer:
|
||
steward_type = 'مباشر' if data.get('steward') == True else 'صنف'
|
||
list1 = [
|
||
m,
|
||
data.get('user', {}).get('fullname', ''),
|
||
data.get('user', {}).get('mobile', ''),
|
||
f'{steward_type}({data.get("guilds_name", "")})',
|
||
data.get('user', {}).get('city_name', {}),
|
||
data.get('ware_house_info', {}).get('remain_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('total_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_entered_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('total_entered_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('total_in_out_province_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('total_in_out_province_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('input_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('input_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('free_bars_count', 0),
|
||
data.get('ware_house_info', {}).get('free_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('in_province_bars_weight', 0),
|
||
data.get('ware_house_info', {}).get('out_province_bars_weight', 0),
|
||
|
||
]
|
||
|
||
create_value(worksheet, list1, new_l + 1, 1, border_style='thin', m=m)
|
||
m += 1
|
||
new_l += 1
|
||
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
|
||
summary_list = [
|
||
'جمع کل==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
sum_remain_weight,
|
||
sum_total_bars_count,
|
||
sum_total_bars_weight,
|
||
sum_total_entered_bars_count,
|
||
sum_total_entered_bars_weight,
|
||
sum_total_in_out_province_bars_count,
|
||
sum_total_in_out_province_bars_weight,
|
||
sum_input_bars_count,
|
||
sum_input_bars_weight,
|
||
sum_free_bars_count,
|
||
sum_free_bars_weight,
|
||
sum_in_province_bars_weight,
|
||
sum_out_province_bars_weight,
|
||
]
|
||
|
||
create_value(worksheet, summary_list, new_l + 1, 1, color='green')
|
||
|
||
|
||
else:
|
||
date1 = datetime.datetime.strptime(request.GET['date1'], '%Y-%m-%d').date()
|
||
date2 = datetime.datetime.strptime(request.GET['date2'], '%Y-%m-%d').date()
|
||
kill_house_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
clearance_code__isnull=False
|
||
).values_list('clearance_code', flat=True).distinct()
|
||
|
||
kill_house_free_sale = PoultryRequest.objects.filter(trash=False, quarantine_code__isnull=False, out=True) \
|
||
.values_list('quarantine_code', flat=True).distinct()
|
||
|
||
result = list(kill_house_request) + list(kill_house_free_sale)
|
||
|
||
response = requests.post(
|
||
f'https://rsibackend.rasadyar.com/app/send_different_bar/?province={base_url_for_sms_report}'
|
||
f'&date1={date1}&date2={date2}',
|
||
json=result,
|
||
headers={'Content-Type': 'application/json'}
|
||
)
|
||
|
||
header_list = [
|
||
'تعداد مرغداران',
|
||
'تعداد کشتارگاه ها',
|
||
'حجم کشتار',
|
||
|
||
]
|
||
create_header(worksheet, header_list, 4, 2, height=25, width=25, border_style='thin',
|
||
color='C00000')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'نوع بار',
|
||
'تاریخ کشتار',
|
||
'مرغدار',
|
||
'شناسه یکتا مرغدار',
|
||
'شماره مجوز جوجه ریزی',
|
||
'شماره موبایل مرغدار',
|
||
'شهر مرغدار',
|
||
'دامپزشک فارم',
|
||
'تلفن دامپزشک فارم',
|
||
'کد قرنطینه',
|
||
'وضعیت بار',
|
||
'کشتارگاه',
|
||
'شناسه یکتا کشتارگاه',
|
||
'استان',
|
||
'شهر',
|
||
'حجم کشتار',
|
||
'سن کشتار',
|
||
|
||
]
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 20)
|
||
|
||
l = 7
|
||
unique_poultry_out_false = set()
|
||
unique_slaughterhouses_out_false = set()
|
||
total_slaughter_out_false = 0
|
||
excel_description(worksheet, 'A1', f'بارهای دارای مغایرت', color='red',
|
||
row2='B1')
|
||
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()
|
||
from_date1 = shamsi_date(date1)
|
||
from_date2 = shamsi_date(date2)
|
||
excel_description(worksheet, 'A3', f'از تاریخ {from_date1} تا {from_date2}', color='red', row2='C3')
|
||
for data in response.json():
|
||
if data['Out'] == False:
|
||
state = 'داخل استان'
|
||
else:
|
||
state = 'خارج استان'
|
||
vet_farm_mobile = ''
|
||
vet_farm_name = ''
|
||
vet_farm = VetFarm.objects.filter(trash=False,
|
||
poultry__breeding_unique_id=data['hatching']['poultry'][
|
||
'PartIdCode']).first()
|
||
if vet_farm:
|
||
vet_farm_mobile = vet_farm.vet.user.mobile
|
||
vet_farm_name = vet_farm.vet.user.fullname
|
||
unique_poultry_out_false.add(data['hatching']['poultry']['UnitName'])
|
||
unique_slaughterhouses_out_false.add(data['DesUnitName'])
|
||
total_slaughter_out_false += data['GoodAmount']
|
||
date_str = str(data['Date']).split('T')[0] # جدا کردن بخش تاریخ
|
||
date = datetime.datetime.strptime(date_str, '%Y-%m-%d').date()
|
||
list1 = [
|
||
m,
|
||
state,
|
||
str(shamsi_date(date, in_value=True)),
|
||
data['hatching']['poultry']['UnitName'],
|
||
data['hatching']['poultry']['PartIdCode'],
|
||
data['hatching']['RequestCode'],
|
||
data['hatching']['poultry']['Mobile'],
|
||
data['hatching']['poultry']['City'],
|
||
vet_farm_name,
|
||
vet_farm_mobile,
|
||
data['TrackingCode'],
|
||
data['TrackingStatusDescription'],
|
||
data['DesUnitName'],
|
||
data['DesPartIdCode'],
|
||
data['Province'],
|
||
data['City'],
|
||
data['GoodAmount'],
|
||
data['Age'],
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=35)
|
||
|
||
l += 1
|
||
m += 1
|
||
value_header_list = [
|
||
len(unique_poultry_out_false),
|
||
len(unique_slaughterhouses_out_false),
|
||
total_slaughter_out_false
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4, border_style='thin')
|
||
quantity = sum(
|
||
data['GoodAmount'] for data in response.json() if data['Out'] == False) or 0
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
quantity,
|
||
'',
|
||
|
||
]
|
||
|
||
create_value(worksheet, list2, l + 1, 1, color='green')
|
||
|
||
workbook.save(output)
|
||
output.seek(0)
|
||
|
||
response1 = HttpResponse(
|
||
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
||
response1[
|
||
'Content-Disposition'] = f'attachment; filename="پایش کلی اطلاعات.xlsx"'.encode(
|
||
'utf-8')
|
||
response1.write(output.getvalue())
|
||
return response1
|
||
|
||
|
||
def market_requests_excel(request):
|
||
filterset_class = KillRequestFilterSet
|
||
filterset_fields = [
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__first_name',
|
||
'kill_house__kill_house_operator__user__last_name',
|
||
'poultry_request__chicken_breed',
|
||
'poultry_request__order_code',
|
||
'poultry_request__poultry__address__city__name',
|
||
'poultry_request__poultry__user__mobile',
|
||
'poultry_request__poultry__user__fullname',
|
||
|
||
]
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
now = datetime.datetime.now().date()
|
||
role = request.GET.get('role')
|
||
filter = {
|
||
'trash': False,
|
||
'market': True,
|
||
'recive_date__date': now,
|
||
}
|
||
excel_name = 'سفارشات دریافتی'
|
||
excel_options = [
|
||
"ردیف",
|
||
"فارم",
|
||
"مرغدار",
|
||
"تلفن مرغدار",
|
||
"شهر",
|
||
"ماهیت خریدار",
|
||
"خریدار",
|
||
"تلفن خریدار",
|
||
"آدرس خریدار",
|
||
"نژاد",
|
||
"سن (روز)",
|
||
"تعداد قطعه",
|
||
"تاریخ کشتار",
|
||
"میانگین وزنی (کیلوگرم)",
|
||
"وزن تقریبی (کیلوگرم)",
|
||
"مبلغ هر کیلو (ریال)",
|
||
"حداکثر مهلت تسویه",
|
||
"وضعیت",
|
||
|
||
]
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
filter['kill_house'] = kill_house
|
||
excel_name = 'خریدهای ثبت شده'
|
||
excel_options = [
|
||
"ردیف",
|
||
"فارم",
|
||
"مرغدار",
|
||
"تلفن مرغدار",
|
||
"شهر",
|
||
"نژاد",
|
||
"سن (روز)",
|
||
"تعداد قطعه",
|
||
"تاریخ کشتار",
|
||
"میانگین وزنی (کیلوگرم)",
|
||
"وزن تقریبی (کیلوگرم)",
|
||
"مبلغ هر کیلو (ریال)",
|
||
"حداکثر مهلت تسویه",
|
||
"وضعیت",
|
||
|
||
]
|
||
|
||
elif role in ('CityJahad', 'CityOperator', 'CityCommerce', 'CityVet', 'CitySupervisor', 'CityPoultry'):
|
||
filter['poultry__address__city'] = user.city
|
||
state_type = request.GET.get('type')
|
||
|
||
if state_type and state_type != 'all':
|
||
filter['market_state'] = state_type
|
||
|
||
kill_requests = KillRequest.objects.filter(**filter).select_related('poultry_hatching', 'poultry').only(
|
||
'poultry_hatching', 'poultry').order_by(
|
||
Case(
|
||
When(market_state='pending', then=Value(0)),
|
||
default=Value(1)
|
||
),
|
||
'-create_date'
|
||
)
|
||
|
||
if 'search' in request.GET:
|
||
kill_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=kill_requests
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=kill_requests)
|
||
kill_requests_list = ps.filter()
|
||
kill_requests = [] if len(
|
||
kill_requests_list) == 0 else kill_requests_list
|
||
|
||
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', excel_name, color='red', row2='C3')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
l = 5
|
||
m = 1
|
||
all_wight = 0
|
||
serializer = KillRequestForDirectBuyingSerializer(kill_requests, many=True).data
|
||
if serializer:
|
||
for data in serializer:
|
||
all_wight += int(data['Index_weight'] * data['kill_capacity'])
|
||
state = '-'
|
||
if data['market_state'] == "pending" and data['market_code_status'] == True and data[
|
||
'market_final_accept'] == True \
|
||
and data.get('input_market_code'):
|
||
state = 'در انتظار ورود کد احراز'
|
||
elif data['market_final_accept'] == False:
|
||
state = 'در انتظار تایید خریدار'
|
||
elif data['market_state'] == "pending":
|
||
state = 'در انتظار تایید استان'
|
||
elif data['market_state'] == "accepted":
|
||
state = 'تایید شده'
|
||
elif data['market_state'] == "rejected":
|
||
state = 'رد شده'
|
||
elif data['market_state'] == "deleted":
|
||
state = 'حذف شده'
|
||
|
||
if type(data['recive_date']) is str:
|
||
try:
|
||
# فرمت با کسری ثانیه
|
||
str_date = datetime.datetime.strptime(str(data['recive_date']), "%Y-%m-%dT%H:%M:%S.%f").date()
|
||
except:
|
||
try:
|
||
# فرمت بدون کسری ثانیه
|
||
str_date = datetime.datetime.strptime(str(data['recive_date']), "%Y-%m-%dT%H:%M:%S").date()
|
||
except:
|
||
try:
|
||
# فقط تاریخ
|
||
str_date = datetime.datetime.strptime(str(data['recive_date']), '%Y-%m-%d').date()
|
||
except:
|
||
# اگر هیچکدام کار نکرد، مقدار پیشفرض قرار دهید
|
||
str_date = None
|
||
date = shamsi_date(str_date, in_value=True) if str_date else '-'
|
||
elif data['recive_date'] is None:
|
||
date = '-'
|
||
else:
|
||
date = shamsi_date(data['recive_date'], in_value=True)
|
||
|
||
if type(data['payment_deadline_date']) is str:
|
||
try:
|
||
# فرمت با کسری ثانیه
|
||
str_date = datetime.datetime.strptime(str(data['payment_deadline_date']),
|
||
"%Y-%m-%dT%H:%M:%S.%f").date()
|
||
except:
|
||
try:
|
||
# فرمت بدون کسری ثانیه
|
||
str_date = datetime.datetime.strptime(str(data['payment_deadline_date']),
|
||
"%Y-%m-%dT%H:%M:%S").date()
|
||
except:
|
||
try:
|
||
# فقط تاریخ
|
||
str_date = datetime.datetime.strptime(str(data['payment_deadline_date']), '%Y-%m-%d').date()
|
||
except:
|
||
# اگر هیچکدام کار نکرد، مقدار پیشفرض قرار دهید
|
||
str_date = None
|
||
payment_deadline_date = shamsi_date(str_date, in_value=True) if str_date else '-'
|
||
elif data['payment_deadline_date'] is None:
|
||
payment_deadline_date = '-'
|
||
else:
|
||
payment_deadline_date = shamsi_date(data['payment_deadline_date'], in_value=True)
|
||
if role == 'KillHouse':
|
||
|
||
list1 = [
|
||
m,
|
||
str(data['poultry']['unit_name']),
|
||
data['poultry']['fullname'],
|
||
data['poultry']['mobile'],
|
||
data['poultry']['city'],
|
||
data['chicken_breed'],
|
||
data['poultry_request']['killing_age'],
|
||
data['kill_capacity'],
|
||
str(date),
|
||
str(data['Index_weight']),
|
||
int(data['Index_weight'] * data['kill_capacity']),
|
||
data['amount'],
|
||
str(payment_deadline_date),
|
||
state
|
||
]
|
||
else:
|
||
killer = 'کشتارکن' if data['kill_house']['killer'] == True else 'کشتارگاه'
|
||
list1 = [
|
||
m,
|
||
data['poultry']['unit_name'],
|
||
data['poultry']['fullname'],
|
||
data['poultry']['mobile'],
|
||
data['poultry']['city'],
|
||
data['chicken_breed'],
|
||
killer,
|
||
data['kill_house']['name'],
|
||
data['kill_house']['mobile'],
|
||
data['kill_house']['city'],
|
||
data['poultry_request']['killing_age'],
|
||
data['kill_capacity'],
|
||
str(date),
|
||
str(data['Index_weight']),
|
||
int(data['Index_weight'] * data['kill_capacity']),
|
||
data['amount'],
|
||
str(payment_deadline_date),
|
||
state
|
||
]
|
||
m += 1
|
||
l += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
kill_capacity = sum(
|
||
item['kill_capacity'] for item in serializer)
|
||
|
||
value_header_list = [
|
||
kill_capacity,
|
||
all_wight,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 5)
|
||
if role == 'KillHouse':
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
kill_capacity,
|
||
'',
|
||
'',
|
||
all_wight,
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
else:
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
kill_capacity,
|
||
'',
|
||
'',
|
||
all_wight,
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
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="{excel_name}.xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def get_more_than_one_role(request):
|
||
users = SystemUserProfile.objects.filter(trash=False).annotate(role_count=Count('role')) \
|
||
.filter(role_count__gt=1)
|
||
|
||
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)
|
||
|
||
m = 1
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 1, 2, 20, width=30)
|
||
|
||
l = 2
|
||
for user in users:
|
||
role_list = [role.name for role in user.role.all()]
|
||
list1 = [
|
||
m,
|
||
user.fullname,
|
||
user.mobile,
|
||
str(role_list),
|
||
user.city.name if user.city else '-'
|
||
|
||
]
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin')
|
||
m += 1
|
||
l += 1
|
||
province = users.first().province.name
|
||
workbook.save(output)
|
||
output.seek(0)
|
||
|
||
response = HttpResponse(
|
||
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
||
response[
|
||
'Content-Disposition'] = f'attachment; filename="کاربران چند نقشی استان {province} .xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def return_province_request_excel(request):
|
||
serializer_class = ReturnProvinceKillRequestSerializer
|
||
filterset_class = ReturnProvinceKillRequestFilterSet
|
||
filterset_fields = [
|
||
'province_request__poultry_request__order_code',
|
||
'killhouse_user__name',
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'killhouse_user__kill_house_operator__address__city__name',
|
||
'province_request__poultry_request__poultry__unit_name',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__poultry__address__city__name',
|
||
]
|
||
|
||
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')
|
||
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET.get('role')
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
filters = {
|
||
'archive_wage': False,
|
||
'state__in': ('pending', 'accepted'),
|
||
'first_car_allocated_quantity': 0
|
||
}
|
||
if role == 'KillHouse':
|
||
filters['killhouse_user__kill_house_operator__user'] = user
|
||
if date1:
|
||
filters['kill_request__recive_date__date__gte'] = date1
|
||
filters['kill_request__recive_date__date__lte'] = date2
|
||
|
||
return_province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
Q(trash=False, return_to_province=True) | Q(trash=True, return_trash=True), **filters).order_by('id')
|
||
|
||
if 'search' in request.GET:
|
||
return_province_kill_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=return_province_kill_requests
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=return_province_kill_requests)
|
||
return_province_kill_requests_list = ps.filter()
|
||
return_province_kill_requests = [] if len(
|
||
return_province_kill_requests_list) == 0 else return_province_kill_requests_list
|
||
|
||
serializer = serializer_class(return_province_kill_requests, many=True).data
|
||
|
||
header_list2 = [
|
||
'ردیف',
|
||
'کدسفارش',
|
||
'نوع درخواست',
|
||
'نام فارم',
|
||
'نام مرغدار',
|
||
'شهر مرغدار',
|
||
'تاریخ کشتار',
|
||
'تعداد درخواست',
|
||
'تاریخ ثبت تخصیص',
|
||
'نام کشتارگاه',
|
||
'شهر کشتارگاه',
|
||
'قیمت مرغدار',
|
||
'قیمت کشتارگاه',
|
||
'تعداد تخصیص',
|
||
'وضعیت تایید',
|
||
'وضعیت تخصیص ماشین',
|
||
'مانده قابل تخصیص',
|
||
'برگشت دهنده',
|
||
]
|
||
create_header(worksheet, header_list2, 1, 12, height=21.8, width=20, border_style='thin')
|
||
excel_description(worksheet, 'A2', f'تخصیصات برگشت داده شده',
|
||
size=11, color='red', row2='B4')
|
||
if serializer:
|
||
l = 13
|
||
m = 1
|
||
|
||
for item in serializer:
|
||
state = ""
|
||
if item.get('state') == "pending":
|
||
state = "در انتظار تایید"
|
||
elif item.get('state') == "accepted":
|
||
state = "تایید شده"
|
||
elif item.get('state') == "rejected":
|
||
state = "رد شده"
|
||
|
||
request_type = ""
|
||
if item.get('market'):
|
||
request_type = "پنل معاملات"
|
||
elif item.get('direct_buying'):
|
||
request_type = "خرید مستقیم"
|
||
elif item.get('warehouse'):
|
||
request_type = "انبار"
|
||
else:
|
||
request_type = "اتحادیه"
|
||
|
||
poultry_info = ""
|
||
if item.get('poultry_fullname') and item.get('poultry_mobile'):
|
||
poultry_info = f"{item.get('poultry_fullname')} ({item.get('poultry_mobile')})"
|
||
else:
|
||
poultry_info = item.get('poultry_fullname', '-')
|
||
returner_info = ""
|
||
if item.get('returner'):
|
||
returner_fullname = item.get('returner', {}).get('fullname', '')
|
||
returner_mobile = item.get('returner', {}).get('mobile', '')
|
||
modify_date = str(shamsi_date((convert_str_to_date(item.get('modify_date'))), in_value=True))
|
||
returner_info = f"{returner_fullname} ({returner_mobile}) {modify_date}"
|
||
else:
|
||
returner_info = "سیستم"
|
||
|
||
list1 = [
|
||
m,
|
||
item.get('order_code') or "-",
|
||
request_type,
|
||
item.get('poultry_unit_name') or "-",
|
||
poultry_info,
|
||
item.get('poultry_city') or "-",
|
||
str(shamsi_date(convert_str_to_date(item.get('killing_date')), in_value=True)),
|
||
item.get('poultry_request_quantity'),
|
||
str(shamsi_date(convert_str_to_date(item.get('create_date')), in_value=True)),
|
||
item.get('killhouse_user', {}).get('name') or "-",
|
||
item.get('killhouse_user', {}).get('city') or "-",
|
||
int(float(item.get('poultry_amount') or 0)),
|
||
item.get('kill_house_price'),
|
||
item.get('quantity'),
|
||
state,
|
||
"دارد" if item.get('first_car_allocated_quantity', 0) > 0 else "ندارد",
|
||
(item.get('quantity', 0) - item.get('total_killed_quantity', 0)),
|
||
returner_info
|
||
]
|
||
|
||
create_value(worksheet, list1, l, 1, border_style='thin', m=m)
|
||
m += 1
|
||
l += 1
|
||
header_list2 = [
|
||
"تعداد کل تخصیصات",
|
||
"تعداد تخصیصات بازگشتی کاربر",
|
||
"تعداد تخصیصات بازگشتی سیستم",
|
||
"حجم کل تخصیصات",
|
||
"حجم تخصیصات بازگشتی کاربر",
|
||
"حجم تخصیصات بازگشتی سیستم",
|
||
"وزن کل تخصیصات",
|
||
"وزن بازگشتی کاربر",
|
||
"وزن بازگشتی سیستم",
|
||
"تعداد کل بارها",
|
||
"تعداد بارهای عدم وصول",
|
||
"تعداد بارهای بازگشتی سیستمی",
|
||
"حجم کل بارها",
|
||
"حجم بارهای عدم وصول",
|
||
"حجم بارهای بازگشتی سیستمی",
|
||
"وزن کل بارها",
|
||
"وزن بارهای عدم وصول",
|
||
"وزن بارهای بازگشتی سیستمی",
|
||
"وزن خریدهای بازگشتی با کارمزد",
|
||
"کارمزد خریدهای بازگشتی"
|
||
]
|
||
create_header(worksheet, header_list2, 3, 3, height=21.8, width=20, color='C00000', border_style='thin')
|
||
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_type = total_wage_type.filter(en_name='province-kill-request', trash=False).first()
|
||
province_live_wage_type_amount = province_live_wage_type.amount if province_live_wage_type.status == True else 0
|
||
|
||
province_kill_request_filters = {
|
||
'archive_wage': False,
|
||
'state__in': ('pending', 'accepted'),
|
||
'first_car_allocated_quantity': 0
|
||
}
|
||
|
||
kill_house_request_filters = {}
|
||
if date1:
|
||
province_kill_request_filters['kill_request__recive_date__date__gte'] = date1
|
||
province_kill_request_filters['kill_request__recive_date__date__lte'] = date2
|
||
kill_house_request_filters['kill_request__recive_date__date__gte'] = date1
|
||
kill_house_request_filters['kill_request__recive_date__date__lte'] = date2
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
province_kill_request_filters['killhouse_user'] = kill_house
|
||
return_kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
Q(non_receipt=True, main_non_receipt=True, non_receipt_state__in=('pending', 'accepted')) | Q(
|
||
trash=True, return_trash=True),
|
||
**kill_house_request_filters)
|
||
else:
|
||
return_kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(non_receipt=True, main_non_receipt=True, non_receipt_state__in=('pending', 'accepted')) | Q(
|
||
trash=True, return_trash=True),
|
||
**kill_house_request_filters)
|
||
|
||
return_province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
Q(trash=False, return_to_province=True) | Q(trash=True, return_trash=True),
|
||
**province_kill_request_filters).order_by('id')
|
||
|
||
return_province_kill_requests_aggregates = return_province_kill_requests.aggregate(
|
||
total_count=Count('id'),
|
||
total_operator_return_count=Count('id', filter=Q(trash=False, return_to_province=True)),
|
||
total_system_return_count=Count('id', filter=Q(trash=True, return_trash=True)),
|
||
total_quantity=Sum('total_killed_quantity'),
|
||
total_operator_return_quantity=Sum('main_quantity', filter=Q(trash=False, return_to_province=True)),
|
||
total_system_return_quantity=Sum('total_killed_quantity', filter=Q(trash=True, return_trash=True)),
|
||
total_weight=Sum('total_killed_weight'),
|
||
total_operator_return_weight=Sum(F('main_quantity') * F('province_request__poultry_request__Index_weight'),
|
||
filter=Q(trash=False, return_to_province=True)),
|
||
total_system_return_weight=Sum('total_killed_weight', filter=Q(trash=True, return_trash=True)),
|
||
|
||
)
|
||
return_kill_house_requests_aggregates = return_kill_house_requests.aggregate(
|
||
total_count=Count('id'),
|
||
total_non_receipt_count=Count('id', filter=Q(non_receipt=True, main_non_receipt=True)),
|
||
total_system_return_count=Count('id', filter=Q(trash=True, return_trash=True)),
|
||
total_quantity=Sum('accepted_real_quantity'),
|
||
total_non_receipt_quantity=Sum('accepted_real_quantity', filter=Q(non_receipt=True, main_non_receipt=True)),
|
||
total_system_return_quantity=Sum('accepted_real_quantity', filter=Q(trash=True, return_trash=True)),
|
||
total_weight=Sum('accepted_real_weight'),
|
||
total_non_receipt_weight=Sum('accepted_real_weight', filter=Q(non_receipt=True, main_non_receipt=True)),
|
||
total_system_return_weight=Sum('accepted_real_weight', filter=Q(trash=True, return_trash=True)),
|
||
)
|
||
province_kill_request_total_operator_return_quantity = return_province_kill_requests_aggregates[
|
||
'total_operator_return_quantity'] or 0
|
||
province_kill_request_total_system_return_quantity = return_province_kill_requests_aggregates[
|
||
'total_system_return_quantity'] or 0
|
||
province_kill_request_total_quantity = province_kill_request_total_operator_return_quantity + province_kill_request_total_system_return_quantity
|
||
province_kill_request_total_operator_return_weight = return_province_kill_requests_aggregates[
|
||
'total_operator_return_weight'] or 0
|
||
province_kill_request_total_system_return_weight = return_province_kill_requests_aggregates[
|
||
'total_system_return_weight'] or 0
|
||
province_kill_request_total_weight = province_kill_request_total_operator_return_weight + province_kill_request_total_system_return_weight
|
||
kill_house_request_total_system_return_weight = return_kill_house_requests_aggregates[
|
||
'total_system_return_weight'] or 0
|
||
total_return_weight_with_wage = province_kill_request_total_system_return_weight + kill_house_request_total_system_return_weight
|
||
result = {
|
||
"province_kill_request_total_count": return_province_kill_requests_aggregates['total_count'] or 0,
|
||
"province_kill_request_total_operator_return_count": return_province_kill_requests_aggregates[
|
||
'total_operator_return_count'] or 0,
|
||
"province_kill_request_total_system_return_count": return_province_kill_requests_aggregates[
|
||
'total_system_return_count'] or 0,
|
||
"province_kill_request_total_quantity": province_kill_request_total_quantity,
|
||
"province_kill_request_total_operator_return_quantity": province_kill_request_total_operator_return_quantity,
|
||
"province_kill_request_total_system_return_quantity": province_kill_request_total_system_return_quantity,
|
||
"province_kill_request_total_weight": province_kill_request_total_weight,
|
||
"province_kill_request_total_operator_return_weight": province_kill_request_total_operator_return_weight,
|
||
"province_kill_request_total_system_return_weight": province_kill_request_total_system_return_weight,
|
||
"kill_house_request_total_count": return_kill_house_requests_aggregates['total_count'] or 0,
|
||
"kill_house_request_total_non_receipt_count": return_kill_house_requests_aggregates[
|
||
'total_non_receipt_count'] or 0,
|
||
"kill_house_request_total_system_return_count": return_kill_house_requests_aggregates[
|
||
'total_system_return_count'] or 0,
|
||
"kill_house_request_total_quantity": return_kill_house_requests_aggregates['total_quantity'] or 0,
|
||
"kill_house_request_total_non_receipt_quantity": return_kill_house_requests_aggregates[
|
||
'total_non_receipt_quantity'] or 0,
|
||
"kill_house_request_total_system_return_quantity": return_kill_house_requests_aggregates[
|
||
'total_system_return_quantity'] or 0,
|
||
"kill_house_request_total_weight": return_kill_house_requests_aggregates['total_weight'] or 0,
|
||
"kill_house_request_total_non_receipt_weight": return_kill_house_requests_aggregates[
|
||
'total_non_receipt_weight'] or 0,
|
||
"kill_house_request_total_system_return_weight": kill_house_request_total_system_return_weight,
|
||
"total_return_weight_with_wage": total_return_weight_with_wage,
|
||
"total_return_wage": total_return_weight_with_wage * province_live_wage_type_amount,
|
||
}
|
||
value_header_list = [
|
||
result.get('province_kill_request_total_count') or 0,
|
||
result.get('province_kill_request_total_operator_return_count') or 0,
|
||
result.get('province_kill_request_total_system_return_count') or 0,
|
||
result.get('province_kill_request_total_quantity') or 0,
|
||
result.get('province_kill_request_total_operator_return_quantity') or 0,
|
||
result.get('province_kill_request_total_system_return_quantity') or 0,
|
||
result.get('province_kill_request_total_weight') or 0,
|
||
result.get('province_kill_request_total_operator_return_weight') or 0,
|
||
result.get('province_kill_request_total_system_return_weight') or 0,
|
||
result.get('kill_house_request_total_count') or 0,
|
||
result.get('kill_house_request_total_non_receipt_count') or 0,
|
||
result.get('kill_house_request_total_system_return_count') or 0,
|
||
result.get('kill_house_request_total_quantity') or 0,
|
||
result.get('kill_house_request_total_non_receipt_quantity') or 0,
|
||
result.get('kill_house_request_total_system_return_quantity') or 0,
|
||
result.get('kill_house_request_total_weight') or 0,
|
||
result.get('kill_house_request_total_non_receipt_weight') or 0,
|
||
result.get('kill_house_request_total_system_return_weight') or 0,
|
||
result.get('total_return_weight_with_wage') or 0,
|
||
result.get('total_return_wage') or 0,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 3, border_style='thin')
|
||
|
||
summary_list = [
|
||
'جمع کل==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
|
||
]
|
||
|
||
create_value(worksheet, summary_list, l + 1, 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 guilds_without_allocation_excel(request):
|
||
guilds = Guilds.objects.filter(trash=False, active=True).order_by('id')
|
||
|
||
guilds_with_allocation = StewardAllocation.objects.filter(
|
||
trash=False
|
||
).values_list('to_steward_id', 'to_guilds_id')
|
||
|
||
allocated_guild_ids = set()
|
||
for to_steward_id, to_guilds_id in guilds_with_allocation:
|
||
if to_steward_id:
|
||
allocated_guild_ids.add(to_steward_id)
|
||
if to_guilds_id:
|
||
allocated_guild_ids.add(to_guilds_id)
|
||
|
||
pos_machines_with_paid_transactions = POSTransactions.objects.filter(
|
||
trash=False,
|
||
paid=True,
|
||
pos_machine__isnull=False
|
||
).values_list('pos_machine_id', flat=True).distinct()
|
||
|
||
guilds_with_paid_pos = POSMachine.objects.filter(
|
||
id__in=pos_machines_with_paid_transactions,
|
||
guild__isnull=False
|
||
).values_list('guild_id', flat=True).distinct()
|
||
|
||
guilds_to_keep = allocated_guild_ids.union(set(guilds_with_paid_pos))
|
||
|
||
guilds_without_allocation = guilds.exclude(id__in=guilds_to_keep)
|
||
|
||
total_guilds_count = guilds.count()
|
||
guilds_without_allocation_count = guilds_without_allocation.count()
|
||
guilds_with_allocation_count = total_guilds_count - guilds_without_allocation_count
|
||
|
||
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_CELL
|
||
|
||
header_list = [
|
||
'تعداد کل صنفها',
|
||
'تعداد صنفهای دارای توزیع',
|
||
'تعداد صنفهای بدون توزیع',
|
||
]
|
||
create_header(worksheet, header_list, 4, 2, 21, 22)
|
||
|
||
excel_description(worksheet, 'A1', f'گزارش صنفهای بدون توزیع',
|
||
size=12, color='red', row2='C1')
|
||
|
||
value_header_list = [
|
||
total_guilds_count,
|
||
guilds_with_allocation_count,
|
||
guilds_without_allocation_count,
|
||
]
|
||
create_value(worksheet, value_header_list, 3, 4, border_style='thin')
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'نام صنف',
|
||
'کد صنف',
|
||
'شماره مجوز',
|
||
'نام مالک',
|
||
'موبایل',
|
||
'شهر',
|
||
'استان',
|
||
'نوع فعالیت',
|
||
'حوزه فعالیت',
|
||
'مباشر',
|
||
'وضعیت پز',
|
||
'وضعیت فعال',
|
||
'تاریخ ثبت',
|
||
]
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, 22, width=22)
|
||
|
||
l = 7
|
||
m = 1
|
||
for guild in guilds_without_allocation:
|
||
steward_status = '✅' if guild.steward else '❌'
|
||
has_pos_status = '✅' if guild.has_pos else '❌'
|
||
active_status = 'فعال' if guild.active else 'غیرفعال'
|
||
|
||
if guild.create_date:
|
||
create_date_shamsi = str(shamsi_date(guild.create_date.date(), in_value=True))
|
||
else:
|
||
create_date_shamsi = '-'
|
||
|
||
list1 = [
|
||
m,
|
||
guild.guilds_name if guild.guilds_name else '-',
|
||
guild.guilds_id if guild.guilds_id else '-',
|
||
guild.license_number if guild.license_number else '-',
|
||
guild.user.fullname if guild.user else '-',
|
||
guild.user.mobile if guild.user else '-',
|
||
guild.user.city.name if guild.user.city else '-',
|
||
guild.user.province.name if guild.user.province else '-',
|
||
guild.type_activity if guild.type_activity else '-',
|
||
guild.area_activity if guild.area_activity else '-',
|
||
steward_status,
|
||
has_pos_status,
|
||
active_status,
|
||
create_date_shamsi,
|
||
]
|
||
|
||
create_value(worksheet, list1, l, 1, m=m, border_style='thin', height=22)
|
||
m += 1
|
||
l += 1
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
]
|
||
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 |