first push
This commit is contained in:
0
panel/VetFarm/__init__.py
Normal file
0
panel/VetFarm/__init__.py
Normal file
679
panel/VetFarm/excel_processing.py
Normal file
679
panel/VetFarm/excel_processing.py
Normal file
@@ -0,0 +1,679 @@
|
||||
import datetime
|
||||
from io import BytesIO
|
||||
from django.db.models import Sum, Q, F
|
||||
from openpyxl import Workbook
|
||||
from openpyxl.styles import Alignment
|
||||
from django.http import HttpResponse
|
||||
from panel.helper_excel import shamsi_date, create_header, excel_description, create_header_freez, create_value
|
||||
from panel.models import Poultry, PoultryHatching, VetFarm, PoultryRequest, KillHouseRequest
|
||||
|
||||
|
||||
def technical_responsible_performance_excel(request):
|
||||
vat_farm = VetFarm.objects.filter(trash=False, poultry__isnull=False, vet__key=request.GET.get('key'))
|
||||
poultry_id = vat_farm.values_list('poultry__id', flat=True).distinct()
|
||||
poultries = Poultry.objects.filter(id__in=poultry_id, trash=False)
|
||||
excel_options = [
|
||||
'ردیف',
|
||||
'دامپزشک فارم',
|
||||
'تلفن دامپزشک فارم',
|
||||
'نام واحد',
|
||||
'نام و خانوادگی مالک',
|
||||
'تلفن مالک',
|
||||
'جوجه ریزی فعال',
|
||||
'تعداد دوره جوجه ریزی',
|
||||
'مجموع جوجه ریزی',
|
||||
'تعداد درخواست کشتار',
|
||||
'حجم درخواست کشتار',
|
||||
'وزن درخواست کشتار',
|
||||
'میانگین وزنی درخواست کشتار',
|
||||
'تعداد بار',
|
||||
'حجم بار',
|
||||
'وزن بارها',
|
||||
'تعداد بارهای دارای مجوز قرنطینه',
|
||||
'حجم بارهای دارای کد قرنطینه',
|
||||
'وزن بارهای دارای کد قرنطینه',
|
||||
'تعداد بارهای فاقد مجوز قرنطینه',
|
||||
'حجم بارهای فاقد کد قرنطینه',
|
||||
'وزن بارهای فاقد کد قرنطینه',
|
||||
'تعداد بارهای مغایرت دار',
|
||||
'حجم بارهای مغایرت دار',
|
||||
'وزن بارهای مغایرت دار',
|
||||
'تعداد بار خارج استان',
|
||||
'حجم بار خارج استان',
|
||||
'وزن بار خارج استان',
|
||||
'میانگین وزن خارج از استان',
|
||||
|
||||
]
|
||||
date1 = datetime.datetime.now().date()
|
||||
from_date_1 = shamsi_date(date1)
|
||||
|
||||
output = BytesIO()
|
||||
workbook = Workbook()
|
||||
worksheet = workbook.active
|
||||
worksheet.sheet_view.rightToLeft = True
|
||||
worksheet.insert_rows(1)
|
||||
cell = worksheet.cell(row=1, column=1)
|
||||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||||
|
||||
header_list = [
|
||||
'تعداد واحد تحت نظر',
|
||||
'مجموع جوجه ریزی تحت نظر',
|
||||
'مجموع درخواست کشتار',
|
||||
'مجموع حجم درخواست کشتار',
|
||||
'مجموع وزن درخواست کشتار',
|
||||
'مجموع تعداد بارها',
|
||||
'مجموع حجم بارها',
|
||||
'مجموع وزن بارها',
|
||||
'مجموع تعداد بارهای قرنطینه شده',
|
||||
'مجموع حجم بارهای قرنطینه شده',
|
||||
'مجموع وزن بارهای قرنطینه شده',
|
||||
'مجموع تعداد بارهای فاقد قرنطینه',
|
||||
'مجموع حجم بارهای فاقد قرنطینه',
|
||||
'مجموع وزن بارهای فاقد قرنطینه نشده',
|
||||
'مجموع تعداد بارهای دارای مغایرت',
|
||||
'مجموع حجم بارهای دارای مغایرت',
|
||||
'مجموع وزن بارهای دارای مغایرت',
|
||||
'مجموع تعداد بارهای خارج استان',
|
||||
'مجموع حجم بارهای خارج استان',
|
||||
'مجموع وزن بارهای خارج استان',
|
||||
'مجموع وزن تقریبی بارهای خارج استان',
|
||||
|
||||
]
|
||||
header_list2 = [
|
||||
'درصد قرنطینه سازی بارها',
|
||||
'درصد عدم قرنطینه سازی بارها',
|
||||
|
||||
]
|
||||
excel_description(worksheet, 'A2', 'عملکرد مسئول فنی', color='red', row2='B2')
|
||||
vat_farm = vat_farm.first()
|
||||
description = f'{vat_farm.vet.user.fullname}/{vat_farm.vet.user.mobile}'
|
||||
excel_description(worksheet, 'A3', description, color='red', row2='B3')
|
||||
|
||||
create_header(worksheet, header_list, 3, 2, height=20, color='green')
|
||||
|
||||
create_header_freez(worksheet, excel_options, 1, 5, 6, height=22)
|
||||
|
||||
l = 6
|
||||
m = 1
|
||||
poultry_hatchings = PoultryHatching.objects.filter(poultry__in=poultries, trash=False).only('quantity', 'left_over'
|
||||
)
|
||||
poultry_requests = PoultryRequest.objects.filter(trash=False, poultry__in=poultries,
|
||||
state_process__in=('accepted', 'pending'),
|
||||
province_state__in=('accepted', 'pending')).only('quantity',
|
||||
'Index_weight')
|
||||
kill_requests = KillHouseRequest.objects.filter(trash=False,
|
||||
province_request__poultry_request__in=poultry_requests).only(
|
||||
'accepted_real_quantity', 'accepted_real_weight')
|
||||
|
||||
out_poultry_requests = poultry_requests.filter(out=True, out_province_request_cancel=False).only(
|
||||
'quantity', 'Index_weight'
|
||||
)
|
||||
|
||||
for poultry in poultries:
|
||||
poultry_hatching = poultry_hatchings.filter(poultry=poultry)
|
||||
poultry_hatching_pending = poultry_hatching.filter(state='pending', allow_hatching='pending',
|
||||
archive=False).last()
|
||||
|
||||
hatching = 'ندارد' if not poultry_hatching_pending else f'دارد'
|
||||
period='-'
|
||||
if poultry_hatching_pending:
|
||||
period = poultry_hatching_pending.period
|
||||
else:
|
||||
if poultry_hatching:
|
||||
period = poultry_hatching.last().period
|
||||
|
||||
total_quantity = \
|
||||
poultry_hatching.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
poultry_request = poultry_requests.filter(poultry=poultry)
|
||||
total_quantity_poultry_request = \
|
||||
poultry_request.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_weight_poultry_request = \
|
||||
poultry_request.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
total_index_weight_poultry_request = \
|
||||
poultry_request.aggregate(total=Sum('Index_weight'))[
|
||||
'total'] or 0
|
||||
index_weight = round(total_index_weight_poultry_request / len(poultry_request), 2) if len(
|
||||
poultry_request) > 0 else 0
|
||||
kill_request = kill_requests.filter(province_request__poultry_request__in=poultry_request)
|
||||
kill_request_quantity = kill_request.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight = kill_request.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
has_code = kill_request.filter(clearance_code__isnull=False)
|
||||
kill_request_quantity_has_code = has_code.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_has_code = has_code.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
hasnt_code = kill_request.filter(clearance_code__isnull=True)
|
||||
kill_request_quantity_hasnt_code = hasnt_code.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_hasnt_code = hasnt_code.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
deffrent_bar = kill_request.filter(
|
||||
~Q(quantity=F('quarantine_quantity')
|
||||
, quarantine_quantity__isnull=False))
|
||||
kill_request_quantity_deffrent_bar = deffrent_bar.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_deffrent_bar = deffrent_bar.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
out_poultry_request = out_poultry_requests.filter(poultry=poultry)
|
||||
total_quantity_poultry_request_out = \
|
||||
out_poultry_request.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_weight_poultry_request_out = \
|
||||
out_poultry_request.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
total_index_weight_poultry_request_out = \
|
||||
out_poultry_request.aggregate(total=Sum('Index_weight'))[
|
||||
'total'] or 0
|
||||
index_weight_out = round(total_index_weight_poultry_request_out / len(out_poultry_request), 2) if len(
|
||||
out_poultry_request) > 0 else 0
|
||||
|
||||
list1 = [
|
||||
m,
|
||||
vat_farm.vet.user.fullname,
|
||||
vat_farm.vet.user.mobile,
|
||||
poultry.unit_name,
|
||||
poultry.user.fullname,
|
||||
poultry.user.mobile,
|
||||
hatching,
|
||||
period,
|
||||
total_quantity,
|
||||
len(poultry_request),
|
||||
total_quantity_poultry_request,
|
||||
total_weight_poultry_request,
|
||||
index_weight,
|
||||
len(kill_request),
|
||||
kill_request_quantity,
|
||||
kill_request_weight,
|
||||
len(has_code),
|
||||
kill_request_quantity_has_code,
|
||||
kill_request_weight_has_code,
|
||||
len(hasnt_code),
|
||||
kill_request_quantity_hasnt_code,
|
||||
kill_request_weight_hasnt_code,
|
||||
len(deffrent_bar),
|
||||
kill_request_quantity_deffrent_bar,
|
||||
kill_request_weight_deffrent_bar,
|
||||
len(out_poultry_request),
|
||||
total_quantity_poultry_request_out,
|
||||
total_weight_poultry_request_out,
|
||||
index_weight_out,
|
||||
]
|
||||
create_value(worksheet, list1, l, 1)
|
||||
m += 1
|
||||
l += 1
|
||||
total_quantity = \
|
||||
poultry_hatchings.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_quantity_poultry_request = \
|
||||
poultry_requests.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_weight_poultry_request = \
|
||||
poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
kill_request_quantity = kill_requests.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight = kill_requests.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
has_code = kill_requests.filter(clearance_code__isnull=False)
|
||||
kill_request_quantity_has_code = has_code.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_has_code = has_code.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
|
||||
deffrent_bar = kill_requests.filter(
|
||||
~Q(quantity=F('quarantine_quantity')
|
||||
, quarantine_quantity__isnull=False))
|
||||
kill_request_quantity_deffrent_bar = deffrent_bar.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_deffrent_bar = deffrent_bar.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
hasnt_code = kill_requests.filter(clearance_code__isnull=True)
|
||||
kill_request_quantity_hasnt_code = hasnt_code.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_hasnt_code = hasnt_code.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
total_quantity_poultry_request_out = \
|
||||
out_poultry_requests.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_weight_poultry_request_out = \
|
||||
out_poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
total_index_weight_poultry_request_out = \
|
||||
out_poultry_requests.aggregate(total=Sum('Index_weight'))[
|
||||
'total'] or 0
|
||||
index_weight_out = round(total_index_weight_poultry_request_out / len(out_poultry_requests), 2) if len(
|
||||
out_poultry_requests) > 0 else 0
|
||||
list2 = [
|
||||
'مجموع==>',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
total_quantity,
|
||||
len(poultry_requests),
|
||||
total_quantity_poultry_request,
|
||||
total_weight_poultry_request,
|
||||
'',
|
||||
len(kill_requests),
|
||||
kill_request_quantity,
|
||||
kill_request_weight,
|
||||
len(has_code),
|
||||
kill_request_quantity_has_code,
|
||||
kill_request_weight_has_code,
|
||||
len(hasnt_code),
|
||||
kill_request_quantity_hasnt_code,
|
||||
kill_request_weight_hasnt_code,
|
||||
len(deffrent_bar),
|
||||
kill_request_quantity_deffrent_bar,
|
||||
kill_request_weight_deffrent_bar,
|
||||
len(out_poultry_requests),
|
||||
total_quantity_poultry_request_out,
|
||||
total_weight_poultry_request_out,
|
||||
index_weight_out,
|
||||
|
||||
]
|
||||
|
||||
create_value(worksheet, list2, l + 2, 1, color='green')
|
||||
|
||||
value_header_list = [
|
||||
len(poultries),
|
||||
total_quantity,
|
||||
len(poultry_requests),
|
||||
total_quantity_poultry_request,
|
||||
total_weight_poultry_request,
|
||||
len(kill_requests),
|
||||
kill_request_quantity,
|
||||
kill_request_weight,
|
||||
len(has_code),
|
||||
kill_request_quantity_has_code,
|
||||
kill_request_weight_has_code,
|
||||
len(hasnt_code),
|
||||
kill_request_quantity_hasnt_code,
|
||||
kill_request_weight_hasnt_code,
|
||||
len(deffrent_bar),
|
||||
kill_request_quantity_deffrent_bar,
|
||||
kill_request_weight_deffrent_bar,
|
||||
len(out_poultry_requests),
|
||||
total_quantity_poultry_request_out,
|
||||
total_weight_poultry_request_out,
|
||||
index_weight_out,
|
||||
]
|
||||
create_value(worksheet, value_header_list, 3, 3)
|
||||
workbook.save(output)
|
||||
output.seek(0)
|
||||
|
||||
response = HttpResponse(
|
||||
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
||||
response[
|
||||
'Content-Disposition'] = f'attachment; filename="عملکرد مسئول فنی({vat_farm.vet.user.fullname}).xlsx"'.encode(
|
||||
'utf-8')
|
||||
response.write(output.getvalue())
|
||||
return response
|
||||
|
||||
def totoal_technical_responsible_performance_excel(request):
|
||||
vat_farm = VetFarm.objects.filter(trash=False, poultry__isnull=False)
|
||||
poultry_id = vat_farm.values_list('poultry__id', flat=True).distinct()
|
||||
poultries = Poultry.objects.filter(id__in=poultry_id, trash=False)
|
||||
excel_options = [
|
||||
'ردیف',
|
||||
'دامپزشک فارم',
|
||||
'تلفن دامپزشک فارم',
|
||||
'تعداد واحد تحت نظر',
|
||||
'مجموع جوجه ریزی تحت نظر',
|
||||
'مجموع درخواست کشتار',
|
||||
'مجموع حجم درخواست کشتار',
|
||||
'مجموع وزن درخواست کشتار',
|
||||
'مجموع تعداد بارها',
|
||||
'مجموع حجم بارها',
|
||||
'مجموع وزن بارها',
|
||||
'مجموع تعداد بارهای قرنطینه شده',
|
||||
'مجموع حجم بارهای قرنطینه شده',
|
||||
'مجموع وزن بارهای قرنطینه شده',
|
||||
'مجموع تعداد بارهای فاقد قرنطینه',
|
||||
'مجموع حجم بارهای فاقد قرنطینه',
|
||||
'مجموع وزن بارهای فاقد قرنطینه نشده',
|
||||
'مجموع تعداد بارهای دارای مغایرت',
|
||||
'مجموع حجم بارهای دارای مغایرت',
|
||||
'مجموع وزن بارهای دارای مغایرت',
|
||||
'مجموع تعداد بارهای خارج استان',
|
||||
'مجموع حجم بارهای خارج استان',
|
||||
'مجموع وزن بارهای خارج استان',
|
||||
'مجموع وزن تقریبی بارهای خارج استان',
|
||||
|
||||
]
|
||||
date1 = datetime.datetime.now().date()
|
||||
from_date_1 = shamsi_date(date1)
|
||||
|
||||
output = BytesIO()
|
||||
workbook = Workbook()
|
||||
worksheet = workbook.active
|
||||
worksheet.sheet_view.rightToLeft = True
|
||||
worksheet.insert_rows(1)
|
||||
cell = worksheet.cell(row=1, column=1)
|
||||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||||
|
||||
header_list = [
|
||||
'تعداد واحد تحت نظر',
|
||||
'مجموع جوجه ریزی تحت نظر',
|
||||
'مجموع درخواست کشتار',
|
||||
'مجموع حجم درخواست کشتار',
|
||||
'مجموع وزن درخواست کشتار',
|
||||
'مجموع تعداد بارها',
|
||||
'مجموع حجم بارها',
|
||||
'مجموع وزن بارها',
|
||||
'مجموع تعداد بارهای قرنطینه شده',
|
||||
'مجموع حجم بارهای قرنطینه شده',
|
||||
'مجموع وزن بارهای قرنطینه شده',
|
||||
'مجموع تعداد بارهای فاقد قرنطینه',
|
||||
'مجموع حجم بارهای فاقد قرنطینه',
|
||||
'مجموع وزن بارهای فاقد قرنطینه نشده',
|
||||
'مجموع تعداد بارهای دارای مغایرت',
|
||||
'مجموع حجم بارهای دارای مغایرت',
|
||||
'مجموع وزن بارهای دارای مغایرت',
|
||||
'مجموع تعداد بارهای خارج استان',
|
||||
'مجموع حجم بارهای خارج استان',
|
||||
'مجموع وزن بارهای خارج استان',
|
||||
'مجموع وزن تقریبی بارهای خارج استان',
|
||||
|
||||
]
|
||||
|
||||
excel_description(worksheet, 'A2', 'عملکرد مسئول فنی', color='red', row2='B2')
|
||||
|
||||
|
||||
create_header(worksheet, header_list, 3, 2, height=20, color='green')
|
||||
|
||||
create_header_freez(worksheet, excel_options, 1, 5, 6, height=22)
|
||||
|
||||
l = 6
|
||||
m = 1
|
||||
poultry_hatchings = PoultryHatching.objects.filter(poultry__in=poultries, trash=False).only('quantity', 'left_over')
|
||||
if 'date1' in request.GET:
|
||||
date1 = datetime.datetime.strptime(request.GET['date1'],
|
||||
'%Y-%m-%d').date()
|
||||
date2 = datetime.datetime.strptime(request.GET['date2'],
|
||||
'%Y-%m-%d').date()
|
||||
poultry_requests = PoultryRequest.objects.filter(send_date__date__gte=date1,send_date__date__lte=date2,trash=False, poultry__in=poultries,
|
||||
state_process__in=('accepted', 'pending'),
|
||||
province_state__in=('accepted', 'pending')).only('quantity',
|
||||
'Index_weight')
|
||||
kill_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,kill_request__recive_date__date__lte=date2,trash=False,
|
||||
province_request__poultry_request__in=poultry_requests).only(
|
||||
'accepted_real_quantity', 'accepted_real_weight')
|
||||
else:
|
||||
poultry_requests = PoultryRequest.objects.filter(trash=False, poultry__in=poultries,
|
||||
state_process__in=('accepted', 'pending'),
|
||||
province_state__in=('accepted', 'pending')).only('quantity',
|
||||
'Index_weight')
|
||||
|
||||
kill_requests = KillHouseRequest.objects.filter(trash=False,
|
||||
province_request__poultry_request__in=poultry_requests).only(
|
||||
'accepted_real_quantity', 'accepted_real_weight')
|
||||
|
||||
|
||||
out_poultry_requests = poultry_requests.filter(out=True, out_province_request_cancel=False).only(
|
||||
'quantity', 'Index_weight'
|
||||
)
|
||||
for vet in vat_farm:
|
||||
poultry = Poultry.objects.filter(id=vet.poultry.id, trash=False)
|
||||
poultry_hatchings = PoultryHatching.objects.filter(poultry__in=poultry, trash=False).only('quantity',
|
||||
'left_over')
|
||||
if 'date1' in request.GET:
|
||||
date1 = datetime.datetime.strptime(request.GET['date1'],
|
||||
'%Y-%m-%d').date()
|
||||
date2 = datetime.datetime.strptime(request.GET['date2'],
|
||||
'%Y-%m-%d').date()
|
||||
poultry_requests = PoultryRequest.objects.filter(send_date__date__gte=date1, send_date__date__lte=date2,
|
||||
trash=False, poultry__in=poultry,
|
||||
state_process__in=('accepted', 'pending'),
|
||||
province_state__in=('accepted', 'pending')).only(
|
||||
'quantity',
|
||||
'Index_weight')
|
||||
kill_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||||
kill_request__recive_date__date__lte=date2, trash=False,
|
||||
province_request__poultry_request__in=poultry).only(
|
||||
'accepted_real_quantity', 'accepted_real_weight')
|
||||
else:
|
||||
poultry_requests = PoultryRequest.objects.filter(trash=False, poultry__in=poultry,
|
||||
state_process__in=('accepted', 'pending'),
|
||||
province_state__in=('accepted', 'pending')).only(
|
||||
'quantity',
|
||||
'Index_weight')
|
||||
|
||||
kill_requests = KillHouseRequest.objects.filter(trash=False,
|
||||
province_request__poultry_request__in=poultry_requests).only(
|
||||
'accepted_real_quantity', 'accepted_real_weight')
|
||||
|
||||
out_poultry_requests = poultry_requests.filter(out=True, out_province_request_cancel=False).only(
|
||||
'quantity', 'Index_weight'
|
||||
)
|
||||
poultry_hatching = poultry_hatchings.filter(poultry=poultries)
|
||||
total_quantity = \
|
||||
poultry_hatching.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
poultry_request = poultry_requests.filter(poultry=poultry)
|
||||
total_quantity_poultry_request = \
|
||||
poultry_request.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_weight_poultry_request = \
|
||||
poultry_request.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
total_index_weight_poultry_request = \
|
||||
poultry_request.aggregate(total=Sum('Index_weight'))[
|
||||
'total'] or 0
|
||||
index_weight = round(total_index_weight_poultry_request / len(poultry_request), 2) if len(
|
||||
poultry_request) > 0 else 0
|
||||
kill_request = kill_requests.filter(province_request__poultry_request__in=poultry_request)
|
||||
kill_request_quantity = kill_request.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight = kill_request.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
has_code = kill_request.filter(clearance_code__isnull=False)
|
||||
kill_request_quantity_has_code = has_code.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_has_code = has_code.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
hasnt_code = kill_request.filter(clearance_code__isnull=True)
|
||||
kill_request_quantity_hasnt_code = hasnt_code.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_hasnt_code = hasnt_code.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
deffrent_bar = kill_request.filter(
|
||||
~Q(quantity=F('quarantine_quantity')
|
||||
, quarantine_quantity__isnull=False))
|
||||
kill_request_quantity_deffrent_bar = deffrent_bar.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_deffrent_bar = deffrent_bar.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
out_poultry_request = out_poultry_requests.filter(poultry=poultry)
|
||||
total_quantity_poultry_request_out = \
|
||||
out_poultry_request.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_weight_poultry_request_out = \
|
||||
out_poultry_request.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
total_index_weight_poultry_request_out = \
|
||||
out_poultry_request.aggregate(total=Sum('Index_weight'))[
|
||||
'total'] or 0
|
||||
index_weight_out = round(total_index_weight_poultry_request_out / len(out_poultry_request), 2) if len(
|
||||
out_poultry_request) > 0 else 0
|
||||
|
||||
list1 = [
|
||||
m,
|
||||
vet.vet.user.fullname,
|
||||
vet.vet.user.mobile,
|
||||
len(poultries),
|
||||
total_quantity,
|
||||
len(poultry_requests),
|
||||
total_quantity_poultry_request,
|
||||
total_weight_poultry_request,
|
||||
len(kill_requests),
|
||||
kill_request_quantity,
|
||||
kill_request_weight,
|
||||
len(has_code),
|
||||
kill_request_quantity_has_code,
|
||||
kill_request_weight_has_code,
|
||||
len(hasnt_code),
|
||||
kill_request_quantity_hasnt_code,
|
||||
kill_request_weight_hasnt_code,
|
||||
len(deffrent_bar),
|
||||
kill_request_quantity_deffrent_bar,
|
||||
kill_request_weight_deffrent_bar,
|
||||
len(out_poultry_requests),
|
||||
total_quantity_poultry_request_out,
|
||||
total_weight_poultry_request_out,
|
||||
index_weight_out,
|
||||
]
|
||||
create_value(worksheet, list1, l, 1)
|
||||
m += 1
|
||||
l += 1
|
||||
total_quantity = \
|
||||
poultry_hatchings.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_quantity_poultry_request = \
|
||||
poultry_requests.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_weight_poultry_request = \
|
||||
poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
kill_request_quantity = kill_requests.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight = kill_requests.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
has_code = kill_requests.filter(clearance_code__isnull=False)
|
||||
kill_request_quantity_has_code = has_code.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_has_code = has_code.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
|
||||
deffrent_bar = kill_requests.filter(
|
||||
~Q(quantity=F('quarantine_quantity')
|
||||
, quarantine_quantity__isnull=False))
|
||||
kill_request_quantity_deffrent_bar = deffrent_bar.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_deffrent_bar = deffrent_bar.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
hasnt_code = kill_requests.filter(clearance_code__isnull=True)
|
||||
kill_request_quantity_hasnt_code = hasnt_code.aggregate(
|
||||
total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
kill_request_weight_hasnt_code = hasnt_code.aggregate(
|
||||
total=Sum('accepted_real_weight'))[
|
||||
'total'] or 0
|
||||
total_quantity_poultry_request_out = \
|
||||
out_poultry_requests.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
total_weight_poultry_request_out = \
|
||||
out_poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
total_index_weight_poultry_request_out = \
|
||||
out_poultry_requests.aggregate(total=Sum('Index_weight'))[
|
||||
'total'] or 0
|
||||
index_weight_out = round(total_index_weight_poultry_request_out / len(out_poultry_requests), 2) if len(
|
||||
out_poultry_requests) > 0 else 0
|
||||
list2 = [
|
||||
'مجموع==>',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
total_quantity,
|
||||
len(poultry_requests),
|
||||
total_quantity_poultry_request,
|
||||
total_weight_poultry_request,
|
||||
'',
|
||||
len(kill_requests),
|
||||
kill_request_quantity,
|
||||
kill_request_weight,
|
||||
len(has_code),
|
||||
kill_request_quantity_has_code,
|
||||
kill_request_weight_has_code,
|
||||
len(hasnt_code),
|
||||
kill_request_quantity_hasnt_code,
|
||||
kill_request_weight_hasnt_code,
|
||||
len(deffrent_bar),
|
||||
kill_request_quantity_deffrent_bar,
|
||||
kill_request_weight_deffrent_bar,
|
||||
len(out_poultry_requests),
|
||||
total_quantity_poultry_request_out,
|
||||
total_weight_poultry_request_out,
|
||||
index_weight_out,
|
||||
|
||||
]
|
||||
|
||||
create_value(worksheet, list2, l + 2, 1, color='green')
|
||||
|
||||
value_header_list = [
|
||||
len(poultries),
|
||||
total_quantity,
|
||||
len(poultry_requests),
|
||||
total_quantity_poultry_request,
|
||||
total_weight_poultry_request,
|
||||
len(kill_requests),
|
||||
kill_request_quantity,
|
||||
kill_request_weight,
|
||||
len(has_code),
|
||||
kill_request_quantity_has_code,
|
||||
kill_request_weight_has_code,
|
||||
len(hasnt_code),
|
||||
kill_request_quantity_hasnt_code,
|
||||
kill_request_weight_hasnt_code,
|
||||
len(deffrent_bar),
|
||||
kill_request_quantity_deffrent_bar,
|
||||
kill_request_weight_deffrent_bar,
|
||||
len(out_poultry_requests),
|
||||
total_quantity_poultry_request_out,
|
||||
total_weight_poultry_request_out,
|
||||
index_weight_out,
|
||||
]
|
||||
create_value(worksheet, value_header_list, 3, 3)
|
||||
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
|
||||
260
panel/VetFarm/helpers.py
Normal file
260
panel/VetFarm/helpers.py
Normal file
@@ -0,0 +1,260 @@
|
||||
from django.db.models import Sum, F, Q
|
||||
|
||||
from panel.KillHouse.helpers import get_difference_carcasses_percent
|
||||
from panel.models import PoultryRequest, ProvinceKillRequest, KillHouse, KillHouseRequest, PercentageOfWageType, \
|
||||
WageType, SubSectorTransactions, BarDifferenceRequest
|
||||
|
||||
|
||||
def get_vet_sub_sector_finance_info(vet,date1,date2):
|
||||
total_quantity = 0
|
||||
total_weight = 0
|
||||
total_wage = 0
|
||||
total_wage_type = WageType.objects.filter(trash=False)
|
||||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||||
free_sell_carcasses_wage_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||||
out_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
||||
trash=False).first().amount
|
||||
|
||||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||||
other_province_kill_request_percent = percentages_wage_type.filter(
|
||||
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
||||
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||||
share_type__en_name='other').first().percent / 100
|
||||
|
||||
other_out_poultry_request_percent = percentages_wage_type.filter(wage_type__en_name='poultry-sell-out-province',
|
||||
share_type__en_name='other').first().percent / 100
|
||||
other_province_kill_request_amount = province_live_wage_amount * other_province_kill_request_percent
|
||||
other_free_sell_carcasses_amount = free_sell_carcasses_wage_amount * other_free_sell_carcasses_percent
|
||||
|
||||
other_out_poultry_request_amount = out_poultry_request_wage_amount * other_out_poultry_request_percent
|
||||
|
||||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||||
if date1:
|
||||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||||
province_state__in=('pending', 'accepted'), out=True,
|
||||
out_province_request_cancel=False, temporary_trash=False,
|
||||
wage_pay=True, has_wage=True,
|
||||
temporary_deleted=False, vet_farm=vet,
|
||||
send_date__date__gte=date1,
|
||||
send_date__date__lte=date2)
|
||||
kill_house_requests = KillHouseRequest.objects.filter(
|
||||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||||
province_request__poultry_request__vet_farm=vet,
|
||||
clearance_code__isnull=False,
|
||||
# clearance_code__isnull=False,
|
||||
trash=False, calculate_status=True, kill_request__recive_date__date__gte=date1,
|
||||
kill_request__recive_date__date__lte=date2
|
||||
)
|
||||
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet=vet, date__date__gte=date1,
|
||||
date__date__lte=date2)
|
||||
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
||||
state='accepted', acceptor_date__date__gte=date1,
|
||||
acceptor_date__date__lte=date2)
|
||||
else:
|
||||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||||
province_state__in=('pending', 'accepted'), out=True,
|
||||
out_province_request_cancel=False, temporary_trash=False,
|
||||
wage_pay=True, has_wage=True,
|
||||
temporary_deleted=False, vet_farm=vet,
|
||||
)
|
||||
kill_house_requests = KillHouseRequest.objects.filter(
|
||||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||||
province_request__poultry_request__vet_farm=vet,
|
||||
clearance_code__isnull=False,
|
||||
# clearance_code__isnull=False,
|
||||
trash=False, calculate_status=True
|
||||
)
|
||||
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
||||
state='accepted')
|
||||
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet=vet)
|
||||
|
||||
# quarantine_code__isnull=False)
|
||||
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
out_province_poultry_request_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
|
||||
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
||||
# archive_wage=False, return_to_province=False,
|
||||
# state__in=('pending', 'accepted'),
|
||||
# province_request__poultry_request__vet_farm=vet,
|
||||
# province_request__poultry_request__quarantine_code__isnull=False,
|
||||
#
|
||||
# first_car_allocated_quantity=0).order_by('id')
|
||||
|
||||
# province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||||
# 'total'] or 0
|
||||
# province_live_quantity = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
||||
# 'total'] or 0
|
||||
province_live_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||||
province_live_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
province_live_weight += \
|
||||
difference_requests.aggregate(total=Sum('weight'))['total'] or 0
|
||||
total_quantity += province_live_quantity + out_province_poultry_request_quantity
|
||||
total_weight += province_live_weight + out_province_poultry_request_weight
|
||||
|
||||
province_carcasses_weight = province_live_weight * 0.75
|
||||
if date1:
|
||||
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent(date1,date2)
|
||||
else:
|
||||
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent()
|
||||
|
||||
external_pure_province_carcasses_weight = province_carcasses_weight - internal_pure_province_carcasses_weight
|
||||
|
||||
total_pure_internal_province_carcasses_amount = internal_pure_province_carcasses_weight * other_province_kill_request_amount
|
||||
total_pure_external_province_carcasses_amount = external_pure_province_carcasses_weight * other_free_sell_carcasses_amount
|
||||
out_province_poultry_request_amount = out_province_poultry_request_weight * other_out_poultry_request_amount
|
||||
|
||||
vet_deposit_amount = vet_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
||||
total_wage += total_pure_internal_province_carcasses_amount + total_pure_external_province_carcasses_amount + out_province_poultry_request_amount
|
||||
total_remain_wage = total_wage - vet_deposit_amount
|
||||
|
||||
result = {
|
||||
"total_quantity": total_quantity,
|
||||
"total_weight": total_weight,
|
||||
"out_province_poultry_request_quantity": out_province_poultry_request_quantity,
|
||||
"out_province_poultry_request_weight": out_province_poultry_request_weight,
|
||||
"province_live_quantity": province_live_quantity,
|
||||
"province_live_weight": province_live_weight,
|
||||
"province_carcasses_weight": province_carcasses_weight,
|
||||
"internal_pure_province_carcasses_weight": internal_pure_province_carcasses_weight,
|
||||
"external_pure_province_carcasses_weight": external_pure_province_carcasses_weight,
|
||||
"total_pure_internal_province_carcasses_amount": total_pure_internal_province_carcasses_amount,
|
||||
"total_pure_external_province_carcasses_amount": total_pure_external_province_carcasses_amount,
|
||||
"out_province_poultry_request_amount": out_province_poultry_request_amount,
|
||||
"total_wage": total_wage,
|
||||
"number_of_deposit": len(vet_deposit),
|
||||
"vet_deposit_amount": vet_deposit_amount,
|
||||
"total_remain_wage": total_remain_wage,
|
||||
}
|
||||
return result
|
||||
|
||||
|
||||
def get_vet_sub_sector_finance_info_with_date(vet,date1,date2):
|
||||
total_quantity = 0
|
||||
total_weight = 0
|
||||
total_wage = 0
|
||||
total_wage_type = WageType.objects.filter(trash=False)
|
||||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||||
free_sell_carcasses_wage_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||||
out_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
||||
trash=False).first().amount
|
||||
|
||||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||||
other_province_kill_request_percent = percentages_wage_type.filter(
|
||||
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
||||
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||||
share_type__en_name='other').first().percent / 100
|
||||
|
||||
other_out_poultry_request_percent = percentages_wage_type.filter(wage_type__en_name='poultry-sell-out-province',
|
||||
share_type__en_name='other').first().percent / 100
|
||||
other_province_kill_request_amount = province_live_wage_amount * other_province_kill_request_percent
|
||||
other_free_sell_carcasses_amount = free_sell_carcasses_wage_amount * other_free_sell_carcasses_percent
|
||||
|
||||
other_out_poultry_request_amount = out_poultry_request_wage_amount * other_out_poultry_request_percent
|
||||
|
||||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||||
if date1:
|
||||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||||
province_state__in=('pending', 'accepted'), out=True,
|
||||
out_province_request_cancel=False, temporary_trash=False,
|
||||
wage_pay=True, has_wage=True,
|
||||
temporary_deleted=False, vet_farm=vet, send_date__date__gte=date1,
|
||||
send_date__date__lte=date2)
|
||||
kill_house_requests = KillHouseRequest.objects.filter(
|
||||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||||
province_request__poultry_request__vet_farm=vet,
|
||||
clearance_code__isnull=False,
|
||||
# clearance_code__isnull=False,
|
||||
trash=False, calculate_status=True, kill_request__recive_date__date__gte=date1,
|
||||
kill_request__recive_date__date__lte=date2
|
||||
)
|
||||
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet=vet, date__date__gte=date1,
|
||||
date__date__lte=date2)
|
||||
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
||||
state='accepted',acceptor_date__date__gte=date1,acceptor_date__date__lte=date2)
|
||||
else:
|
||||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||||
province_state__in=('pending', 'accepted'), out=True,
|
||||
out_province_request_cancel=False, temporary_trash=False,
|
||||
wage_pay=True, has_wage=True,
|
||||
temporary_deleted=False, vet_farm=vet,
|
||||
)
|
||||
kill_house_requests = KillHouseRequest.objects.filter(
|
||||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||||
province_request__poultry_request__vet_farm=vet,
|
||||
clearance_code__isnull=False,
|
||||
# clearance_code__isnull=False,
|
||||
trash=False, calculate_status=True
|
||||
)
|
||||
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
||||
state='accepted')
|
||||
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet=vet)
|
||||
|
||||
# quarantine_code__isnull=False)
|
||||
out_province_poultry_request_quantity = poultry_requests.aggregate(total=Sum('quantity'))[
|
||||
'total'] or 0
|
||||
out_province_poultry_request_weight = poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
||||
'total'] or 0
|
||||
|
||||
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
||||
# archive_wage=False, return_to_province=False,
|
||||
# state__in=('pending', 'accepted'),
|
||||
# province_request__poultry_request__vet_farm=vet,
|
||||
# province_request__poultry_request__quarantine_code__isnull=False,
|
||||
#
|
||||
# first_car_allocated_quantity=0).order_by('id')
|
||||
|
||||
|
||||
# province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||||
# 'total'] or 0
|
||||
# province_live_quantity = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
||||
# 'total'] or 0
|
||||
province_live_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||||
province_live_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
province_live_weight += \
|
||||
difference_requests.aggregate(total=Sum('weight'))['total'] or 0
|
||||
total_quantity += province_live_quantity + out_province_poultry_request_quantity
|
||||
total_weight += province_live_weight + out_province_poultry_request_weight
|
||||
|
||||
province_carcasses_weight = province_live_weight * 0.75
|
||||
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent(date1,date2)
|
||||
external_pure_province_carcasses_weight = province_carcasses_weight - internal_pure_province_carcasses_weight
|
||||
|
||||
total_pure_internal_province_carcasses_amount = internal_pure_province_carcasses_weight * other_province_kill_request_amount
|
||||
total_pure_external_province_carcasses_amount = external_pure_province_carcasses_weight * other_free_sell_carcasses_amount
|
||||
out_province_poultry_request_amount = out_province_poultry_request_weight * other_out_poultry_request_amount
|
||||
|
||||
vet_deposit_amount = vet_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
||||
total_wage += total_pure_internal_province_carcasses_amount + total_pure_external_province_carcasses_amount + out_province_poultry_request_amount
|
||||
total_remain_wage = total_wage - vet_deposit_amount
|
||||
|
||||
result = {
|
||||
"total_quantity": total_quantity,
|
||||
"total_weight": total_weight,
|
||||
"out_province_poultry_request_quantity": out_province_poultry_request_quantity,
|
||||
"out_province_poultry_request_weight": out_province_poultry_request_weight,
|
||||
"province_live_quantity": province_live_quantity,
|
||||
"province_live_weight": province_live_weight,
|
||||
"province_carcasses_weight": province_carcasses_weight,
|
||||
"internal_pure_province_carcasses_weight": internal_pure_province_carcasses_weight,
|
||||
"external_pure_province_carcasses_weight": external_pure_province_carcasses_weight,
|
||||
"total_pure_internal_province_carcasses_amount": total_pure_internal_province_carcasses_amount,
|
||||
"total_pure_external_province_carcasses_amount": total_pure_external_province_carcasses_amount,
|
||||
"out_province_poultry_request_amount": out_province_poultry_request_amount,
|
||||
"total_wage": total_wage,
|
||||
"number_of_deposit": len(vet_deposit),
|
||||
"vet_deposit_amount": vet_deposit_amount,
|
||||
"total_remain_wage": total_remain_wage,
|
||||
}
|
||||
return result
|
||||
190
panel/VetFarm/serializers.py
Normal file
190
panel/VetFarm/serializers.py
Normal file
@@ -0,0 +1,190 @@
|
||||
import datetime
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from authentication.serializer.serializer import SystemUserProfileForGuildSerializer
|
||||
# سریالایزر مربوط به درخواست بورسی مرغدار
|
||||
from authentication.serializers import SystemAddressSerializer
|
||||
from panel.KillHouse.serializers import VetSerializer, VetForBarManagementSerializer
|
||||
from panel.VetFarm.helpers import get_vet_sub_sector_finance_info, get_vet_sub_sector_finance_info_with_date
|
||||
from panel.models import VetFarm, VetFarmInspection, PoultryHatching, Poultry, Vet
|
||||
from panel.poultry.serializers import PoultrySerializer, PoultryHatchingSerializer
|
||||
|
||||
|
||||
class VetFarmSerializer(serializers.ModelSerializer):
|
||||
vet = VetSerializer(read_only=True)
|
||||
poultry = PoultrySerializer(read_only=True)
|
||||
inspection_info = serializers.SerializerMethodField('get_inspections')
|
||||
hatching_quantity = serializers.SerializerMethodField('get_hatching_quantity')
|
||||
|
||||
class Meta:
|
||||
model = VetFarm
|
||||
fields = '__all__'
|
||||
|
||||
def get_inspections(self, instance):
|
||||
inspections = len(VetFarmInspection.objects.filter(vet_farm=instance))
|
||||
hatching = PoultryHatching.objects.filter(poultry=instance.poultry, hall=int(instance.hall)).only(
|
||||
'quantity').last()
|
||||
number_of_hatching = 0
|
||||
if hatching:
|
||||
number_of_hatching = hatching.quantity
|
||||
dict1 = {}
|
||||
if inspections > 0:
|
||||
dict1 = {
|
||||
"number_of_inspections": inspections,
|
||||
"number_of_hatching": number_of_hatching
|
||||
}
|
||||
return dict1
|
||||
|
||||
def get_hatching_quantity(self, instance):
|
||||
quantity = 0
|
||||
poultry = Poultry.objects.get(key=instance.poultry.key)
|
||||
poultry_hatching = PoultryHatching.objects.filter(poultry=poultry).only('left_over').last()
|
||||
if poultry_hatching:
|
||||
quantity = poultry_hatching.left_over
|
||||
|
||||
return quantity
|
||||
|
||||
|
||||
class VetForSubSectorSerializer(serializers.ModelSerializer):
|
||||
user = SystemUserProfileForGuildSerializer(read_only=True)
|
||||
wage_info = serializers.SerializerMethodField('get_wage_info')
|
||||
|
||||
class Meta:
|
||||
model = Vet
|
||||
fields = ['key', 'user', 'wage_info']
|
||||
|
||||
def get_wage_info(self, obj):
|
||||
if self.context.get('request').GET.get('date1'):
|
||||
date1 = datetime.datetime.strptime(str(self.context.get('request').GET['date1']),
|
||||
'%Y-%m-%d').date()
|
||||
date2 = datetime.datetime.strptime(str(self.context.get('request').GET['date2']),
|
||||
'%Y-%m-%d').date()
|
||||
else:
|
||||
date1=None
|
||||
date2=None
|
||||
return get_vet_sub_sector_finance_info(obj,date1,date2)
|
||||
|
||||
|
||||
class VetForSubSectorTransactionSerializer(serializers.ModelSerializer):
|
||||
user = SystemUserProfileForGuildSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Vet
|
||||
fields = ['key', 'user']
|
||||
|
||||
|
||||
class VetFarmInspectionSerializer(serializers.ModelSerializer):
|
||||
vet_farm = VetFarmSerializer(read_only=True)
|
||||
poultry_hatching = PoultryHatchingSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = VetFarmInspection
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class ManagementVetFarmSerializer(serializers.ModelSerializer):
|
||||
# vet = VetSerializer(read_only=True)
|
||||
poultry = PoultrySerializer(read_only=True)
|
||||
inspection_info = serializers.SerializerMethodField('get_inspections')
|
||||
hatching_quantity = serializers.SerializerMethodField('get_hatching_quantity')
|
||||
|
||||
class Meta:
|
||||
model = VetFarm
|
||||
fields = '__all__'
|
||||
|
||||
def get_inspections(self, instance):
|
||||
inspections = len(VetFarmInspection.objects.filter(vet_farm=instance))
|
||||
hatching = PoultryHatching.objects.filter(poultry=instance.poultry, hall=int(instance.hall)).only(
|
||||
'quantity').last()
|
||||
number_of_hatching = 0
|
||||
if hatching:
|
||||
number_of_hatching = hatching.quantity
|
||||
dict1 = {}
|
||||
if inspections > 0:
|
||||
dict1 = {
|
||||
"number_of_inspections": inspections,
|
||||
"number_of_hatching": number_of_hatching
|
||||
}
|
||||
return dict1
|
||||
|
||||
def get_hatching_quantity(self, instance):
|
||||
quantity = 0
|
||||
poultry = Poultry.objects.get(key=instance.poultry.key)
|
||||
poultry_hatching = PoultryHatching.objects.filter(poultry=poultry).only('left_over').last()
|
||||
if poultry_hatching:
|
||||
quantity = poultry_hatching.left_over
|
||||
|
||||
return quantity
|
||||
|
||||
|
||||
class PoultryForCityVetSerializer(serializers.ModelSerializer):
|
||||
address = SystemAddressSerializer(read_only=True)
|
||||
inspection_info = serializers.SerializerMethodField('get_inspections')
|
||||
hatching_quantity = serializers.SerializerMethodField('get_hatching_quantity')
|
||||
|
||||
class Meta:
|
||||
model = Poultry
|
||||
fields = ['key', 'unit_name', 'address', 'number_of_halls', 'breeding_unique_id', 'inspection_info',
|
||||
'hatching_quantity']
|
||||
|
||||
def get_inspections(self, instance):
|
||||
inspections = len(VetFarmInspection.objects.filter(vet_farm__poultry=instance))
|
||||
hatching = PoultryHatching.objects.filter(poultry=instance, trash=False).only('quantity').last()
|
||||
number_of_hatching = 0
|
||||
if hatching:
|
||||
number_of_hatching = hatching.quantity
|
||||
dict1 = {}
|
||||
if inspections > 0:
|
||||
dict1 = {
|
||||
"number_of_inspections": inspections,
|
||||
"number_of_hatching": number_of_hatching
|
||||
}
|
||||
return dict1
|
||||
|
||||
def get_hatching_quantity(self, instance):
|
||||
total_quantity = 0
|
||||
left_over = 0
|
||||
vet_farm_losses = 0
|
||||
union_losses = 0
|
||||
period = None
|
||||
hatching_key = None
|
||||
poultry_hatching = PoultryHatching.objects.filter(poultry=instance, allow_hatching='pending', state='pending',
|
||||
archive=False, violation=False, trash=False).last()
|
||||
if poultry_hatching:
|
||||
total_quantity = poultry_hatching.quantity
|
||||
left_over = poultry_hatching.left_over
|
||||
vet_farm_losses = poultry_hatching.losses
|
||||
union_losses = poultry_hatching.direct_losses
|
||||
period = poultry_hatching.period
|
||||
hatching_key = poultry_hatching.key
|
||||
|
||||
return {
|
||||
"total_quantity": total_quantity,
|
||||
"left_over": left_over,
|
||||
"vet_farm_losses": vet_farm_losses,
|
||||
"union_losses": union_losses,
|
||||
"period": period,
|
||||
"total_losses": union_losses + vet_farm_losses,
|
||||
"hatching_key": hatching_key,
|
||||
}
|
||||
|
||||
|
||||
class VetForSubSectorSerializerForExcel(serializers.ModelSerializer):
|
||||
user = SystemUserProfileForGuildSerializer(read_only=True)
|
||||
wage_info = serializers.SerializerMethodField('get_wage_info')
|
||||
|
||||
class Meta:
|
||||
model = Vet
|
||||
fields = ['key', 'user', 'wage_info']
|
||||
|
||||
def get_wage_info(self, obj):
|
||||
if self.context.get('request').GET['date1']:
|
||||
date1 = datetime.datetime.strptime(str(self.context.get('request').GET['date1']),
|
||||
'%Y-%m-%d').date()
|
||||
date2 = datetime.datetime.strptime(str(self.context.get('request').GET['date2']),
|
||||
'%Y-%m-%d').date()
|
||||
else:
|
||||
date1=None
|
||||
date2=None
|
||||
return get_vet_sub_sector_finance_info_with_date(obj,date1,date2)
|
||||
452
panel/VetFarm/views.py
Normal file
452
panel/VetFarm/views.py
Normal file
@@ -0,0 +1,452 @@
|
||||
import datetime
|
||||
|
||||
from django.db.models import Prefetch, Q, Sum, F
|
||||
from django.http import QueryDict
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from rest_framework import viewsets
|
||||
from oauth2_provider.contrib.rest_framework import (
|
||||
TokenHasReadWriteScope,
|
||||
)
|
||||
from rest_framework.pagination import PageNumberPagination
|
||||
from rest_framework.permissions import AllowAny
|
||||
|
||||
from ticket.helper import send_image_to_server
|
||||
from authentication.helper.refresh import refresh
|
||||
from authentication.models import SystemUserProfile
|
||||
from panel.KillHouse.helpers import get_difference_carcasses_percent
|
||||
from panel.ReportingPanel.filterset import ProfileFilterSet, ManagementVetFarmFilterSet, PoultryFilterSet
|
||||
from panel.VetFarm.serializers import VetFarmSerializer, VetFarmInspectionSerializer, ManagementVetFarmSerializer, \
|
||||
PoultryForCityVetSerializer, VetForSubSectorSerializer, VetForSubSectorTransactionSerializer
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
import string
|
||||
import random
|
||||
import os
|
||||
|
||||
ARVAN_Vet_Farm_URL = 'https://profileimagedefault.s3.ir-thr-at1.arvanstorage.ir/'
|
||||
# ARVAN_Vet_Farm_URL = 'https://vet-farm.s3.ir-thr-at1.arvanstorage.ir/'
|
||||
|
||||
from panel.models import VetFarm, Poultry, PoultryHatching, Vet, VetFarmInspection, PoultryRequest, KillHouseRequest, \
|
||||
PercentageOfWageType, WageType, KillHouse, SubSectorTransactions, BarDifferenceRequest
|
||||
|
||||
|
||||
# ویوست مربوط به ثبت و نمایش و ... دامپزشک فارم
|
||||
class VetFarmViewSet(viewsets.ModelViewSet):
|
||||
queryset = VetFarm.objects.all()
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
serializer_class = VetFarmSerializer
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
if 'vet_key' in request.data.keys():
|
||||
vet = Vet.objects.get(key=request.data['vet_key'])
|
||||
request.data.pop('vet_key')
|
||||
else:
|
||||
vet = Vet.objects.get(user=user)
|
||||
poultry = Poultry.objects.get(key=request.data['poultry_key'])
|
||||
request.data.pop('poultry_key')
|
||||
halls = request.data['halls']
|
||||
request.data.pop('halls')
|
||||
# vet_farm = VetFarm.objects.filter(poultry=poultry, hall=int(request.data['hall']))
|
||||
# if vet_farm.count() > 0:
|
||||
# vet_farm = vet_farm.last()
|
||||
# if vet_farm.vet.id == vet.id:
|
||||
# return Response({"result": "object exist"}, status=status.HTTP_403_FORBIDDEN)
|
||||
# else:
|
||||
# pass
|
||||
for hall in halls:
|
||||
vet_farm = VetFarm(
|
||||
vet=vet,
|
||||
poultry=poultry,
|
||||
hall=int(hall),
|
||||
)
|
||||
vet_farm.save()
|
||||
return Response({"result": "created"}, status=status.HTTP_201_CREATED)
|
||||
|
||||
# serializer = self.serializer_class(data=request.data)
|
||||
# if serializer.is_valid():
|
||||
# vetfarm = serializer.create(validated_data=request.data)
|
||||
# vetfarm.vet = vet
|
||||
# vetfarm.poultry = poultry
|
||||
# vetfarm.save()
|
||||
# return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
# return Response(serializer.errors)
|
||||
|
||||
# تابع مربوط به نمایش دوره جوجه ریزی مرغدار
|
||||
def list(self, request, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
# list of self poultry houses
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
vet = Vet.objects.get(user=user)
|
||||
vet_farm = VetFarm.objects.filter(vet=vet, trash=False).select_related('poultry', 'vet')
|
||||
serializer = VetFarmSerializer(vet_farm, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
def destroy(self, request, pk=None, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
try:
|
||||
vet_farm = VetFarm.objects.get(key=request.GET["vet_farm_key"])
|
||||
# if VetFarmInspection.objects.filter(vet_farm=vet_farm).exists():
|
||||
# return Response({"result": "object can not delete"}, status=status.HTTP_403_FORBIDDEN)
|
||||
vet_farm.trash = True
|
||||
vet_farm.save()
|
||||
return Response({"result": "object deleted"}, status=status.HTTP_200_OK)
|
||||
except:
|
||||
return Response({"result": "مشکلی پیش آمده است !"}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
|
||||
class TotalVetSubSectorWageDashboardViewSet(viewsets.ModelViewSet):
|
||||
queryset = Vet.objects.all()
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
serializer_class = VetForSubSectorSerializer
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
|
||||
total_quantity = 0
|
||||
total_weight = 0
|
||||
total_wage = 0
|
||||
total_wage_type = WageType.objects.filter(trash=False)
|
||||
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
||||
free_sell_carcasses_wage_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
||||
out_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
||||
trash=False).first().amount
|
||||
|
||||
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
||||
other_province_kill_request_percent = percentages_wage_type.filter(
|
||||
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
||||
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
||||
share_type__en_name='other').first().percent / 100
|
||||
|
||||
other_out_poultry_request_percent = percentages_wage_type.filter(wage_type__en_name='poultry-sell-out-province',
|
||||
share_type__en_name='other').first().percent / 100
|
||||
other_province_kill_request_amount = province_live_wage_amount * other_province_kill_request_percent
|
||||
other_free_sell_carcasses_amount = free_sell_carcasses_wage_amount * other_free_sell_carcasses_percent
|
||||
|
||||
other_out_poultry_request_amount = out_poultry_request_wage_amount * other_out_poultry_request_percent
|
||||
|
||||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||||
if 'date1' 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()
|
||||
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,
|
||||
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,
|
||||
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)
|
||||
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
||||
state='accepted',acceptor_date__date__gte=date1,
|
||||
acceptor_date__date__lte=date2)
|
||||
else:
|
||||
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
||||
province_state__in=('pending', 'accepted'), out=True,
|
||||
out_province_request_cancel=False, temporary_trash=False,
|
||||
wage_pay=True, has_wage=True,
|
||||
temporary_deleted=False, vet_farm__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,
|
||||
clearance_code__isnull=False,
|
||||
trash=False, calculate_status=True
|
||||
)
|
||||
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
||||
state='accepted')
|
||||
vet_deposit = SubSectorTransactions.objects.filter(trash=False, vet__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
|
||||
|
||||
|
||||
|
||||
province_live_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||||
province_live_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||||
'total'] or 0
|
||||
|
||||
province_live_weight += \
|
||||
difference_requests.aggregate(total=Sum('weight'))['total'] or 0
|
||||
total_quantity += province_live_quantity + out_province_poultry_request_quantity
|
||||
total_weight += province_live_weight + out_province_poultry_request_weight
|
||||
|
||||
province_carcasses_weight = province_live_weight * 0.75
|
||||
if 'date1' in request.GET:
|
||||
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent(date1,date2)
|
||||
else:
|
||||
internal_pure_province_carcasses_weight = province_carcasses_weight * get_difference_carcasses_percent()
|
||||
|
||||
external_pure_province_carcasses_weight = province_carcasses_weight - internal_pure_province_carcasses_weight
|
||||
|
||||
total_pure_internal_province_carcasses_amount = internal_pure_province_carcasses_weight * other_province_kill_request_amount
|
||||
total_pure_external_province_carcasses_amount = external_pure_province_carcasses_weight * other_free_sell_carcasses_amount
|
||||
out_province_poultry_request_amount = out_province_poultry_request_weight * other_out_poultry_request_amount
|
||||
|
||||
|
||||
vet_deposit_amount = vet_deposit.aggregate(total=Sum('amount'))['total'] or 0
|
||||
total_wage += total_pure_internal_province_carcasses_amount + total_pure_external_province_carcasses_amount + out_province_poultry_request_amount
|
||||
total_remain_wage = total_wage - vet_deposit_amount
|
||||
|
||||
result = {
|
||||
"total_quantity": total_quantity,
|
||||
"total_weight": total_weight,
|
||||
"out_province_poultry_request_quantity": out_province_poultry_request_quantity,
|
||||
"out_province_poultry_request_weight": out_province_poultry_request_weight,
|
||||
"province_live_quantity": province_live_quantity,
|
||||
"province_live_weight": province_live_weight,
|
||||
"province_carcasses_weight": province_carcasses_weight,
|
||||
"internal_pure_province_carcasses_weight": internal_pure_province_carcasses_weight,
|
||||
"external_pure_province_carcasses_weight": external_pure_province_carcasses_weight,
|
||||
"total_pure_internal_province_carcasses_amount": total_pure_internal_province_carcasses_amount,
|
||||
"total_pure_external_province_carcasses_amount": total_pure_external_province_carcasses_amount,
|
||||
"out_province_poultry_request_amount": out_province_poultry_request_amount,
|
||||
"total_wage": total_wage,
|
||||
"number_of_deposit": len(vet_deposit),
|
||||
"vet_deposit_amount": vet_deposit_amount,
|
||||
"total_remain_wage": total_remain_wage,
|
||||
}
|
||||
|
||||
return Response(result, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class VetForSubSectorViewSet(viewsets.ModelViewSet):
|
||||
queryset = Vet.objects.all()
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
serializer_class = VetForSubSectorSerializer
|
||||
|
||||
# تابع مربوط به نمایش دوره جوجه ریزی مرغدار
|
||||
def list(self, request, *args, **kwargs):
|
||||
vet = Vet.objects.filter(pk__in=VetFarm.objects.all().values_list('vet', flat=True), trash=False).order_by('id')
|
||||
serializer = self.serializer_class(vet, many=True,context={'request':request})
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
def destroy(self, request, pk=None, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
try:
|
||||
vet_farm = VetFarm.objects.get(key=request.GET["vet_farm_key"])
|
||||
# if VetFarmInspection.objects.filter(vet_farm=vet_farm).exists():
|
||||
# return Response({"result": "object can not delete"}, status=status.HTTP_403_FORBIDDEN)
|
||||
vet_farm.trash = True
|
||||
vet_farm.save()
|
||||
return Response({"result": "object deleted"}, status=status.HTTP_200_OK)
|
||||
except:
|
||||
return Response({"result": "مشکلی پیش آمده است !"}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
|
||||
class VetForSubSectorTransactionViewSet(viewsets.ModelViewSet):
|
||||
queryset = Vet.objects.all()
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
serializer_class = VetForSubSectorTransactionSerializer
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
vet = Vet.objects.filter(pk__in=VetFarm.objects.all().values_list('vet', flat=True), trash=False).order_by('id')
|
||||
serializer = self.serializer_class(vet, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
# ویوست مربوط به ثبت و نمایش و ... دامپزشک فارم
|
||||
class VetFarmInspectionViewSet(viewsets.ModelViewSet):
|
||||
queryset = VetFarmInspection.objects.all()
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
serializer_class = VetFarmInspectionSerializer
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
vet = Vet.objects.get(user=user)
|
||||
image_list = []
|
||||
vet_farm = VetFarm.objects.get(key=request.data['key'])
|
||||
request.data.pop('key')
|
||||
try:
|
||||
poultry_hatching = PoultryHatching.objects.get(key=request.data['poultry_hatching_key'])
|
||||
request.data.pop('poultry_hatching_key')
|
||||
except:
|
||||
poultry_hatching = None
|
||||
try:
|
||||
images = request.data['image']
|
||||
request.data.pop('image')
|
||||
except:
|
||||
images = None
|
||||
if poultry_hatching != None:
|
||||
if PoultryRequest.objects.filter(hatching=poultry_hatching, hatching__left_over=0,
|
||||
hatching__allow_hatching='pending', hatching__state='pending').exists():
|
||||
return Response({"result": "باقی مانده موجود در سالن صفر میباشد."},
|
||||
status=status.HTTP_406_NOT_ACCEPTABLE)
|
||||
today = datetime.datetime.now().date()
|
||||
inspections = VetFarmInspection.objects.filter(vet_farm__vet=vet, state='pending', create_date__year=today.year,
|
||||
create_date__month=today.month, create_date__day=today.day)
|
||||
if inspections.count() > 0:
|
||||
inspection = inspections.last()
|
||||
if poultry_hatching != None:
|
||||
if inspection.poultry_hatching.poultry.id != poultry_hatching.poultry.id:
|
||||
return Response({"result": "can not register"}, status=status.HTTP_403_FORBIDDEN)
|
||||
elif inspection.poultry_hatching.poultry.id == poultry_hatching.poultry.id and inspection.poultry_hatching.hall == int(
|
||||
request.data['hall']):
|
||||
return Response({"result": "can not register"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
elif poultry_hatching == None:
|
||||
if inspection.vet_farm.poultry != vet_farm.poultry:
|
||||
return Response({"result": "can not register"}, status=status.HTTP_403_FORBIDDEN)
|
||||
elif inspection.vet_farm.hall == int(request.data['hall']):
|
||||
return Response({"result": "can not register"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
#
|
||||
# else:
|
||||
# for inspect in inspections:
|
||||
# if inspect.hall == int(request.data['hall']):
|
||||
# return Response({"result": "can not register"}, status=status.HTTP_403_FORBIDDEN)
|
||||
# else:
|
||||
# pass
|
||||
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
if serializer.is_valid():
|
||||
vet_farm_inspection = serializer.create(validated_data=request.data)
|
||||
vet_farm_inspection.vet_farm = vet_farm
|
||||
if images != None:
|
||||
for image in images:
|
||||
image_list.append(send_image_to_server(image))
|
||||
|
||||
vet_farm_inspection.image = image_list
|
||||
if poultry_hatching != None:
|
||||
if int(vet_farm_inspection.Losses) > 0:
|
||||
vet_farm.vetfarm_losses += int(vet_farm_inspection.Losses)
|
||||
vet_farm.save()
|
||||
if poultry_hatching.losses != 0:
|
||||
poultry_hatching.losses = poultry_hatching.losses + int(vet_farm_inspection.Losses)
|
||||
poultry_hatching.left_over = poultry_hatching.left_over - int(vet_farm_inspection.Losses)
|
||||
else:
|
||||
poultry_hatching.losses = vet_farm_inspection.Losses
|
||||
poultry_hatching.left_over = poultry_hatching.quantity - int(vet_farm_inspection.Losses)
|
||||
poultry_hatching.save()
|
||||
vet_farm_inspection.poultry_hatching = poultry_hatching
|
||||
vet_farm_inspection.save()
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors)
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
if 'key' in request.GET:
|
||||
vet_farm_inspection = VetFarmInspection.objects.filter(vet_farm__key=request.GET['key'])
|
||||
serializer = VetFarmInspectionSerializer(vet_farm_inspection, many=True)
|
||||
elif 'poultry_key' in request.GET:
|
||||
if 'hall' in request.GET:
|
||||
vet_farm_inspection = VetFarmInspection.objects.filter(
|
||||
vet_farm__poultry__key=request.GET['poultry_key'], hall=int(request.GET['hall']))
|
||||
if vet_farm_inspection.count() == 0:
|
||||
vet_farm_inspection = []
|
||||
serializer = VetFarmInspectionSerializer(vet_farm_inspection, many=True)
|
||||
|
||||
else:
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
vet = Vet.objects.get(userprofile=user)
|
||||
vet_farm_inspection = VetFarmInspection.objects.filter(vet_farm__vet=vet)
|
||||
serializer = VetFarmInspectionSerializer(vet_farm_inspection, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class CustomPagination(PageNumberPagination):
|
||||
page_size = 10
|
||||
|
||||
|
||||
class ManagementVetFarmViewSet(viewsets.ModelViewSet):
|
||||
queryset = VetFarm.objects.all()
|
||||
permission_classes = [AllowAny]
|
||||
serializer_class = ManagementVetFarmSerializer
|
||||
pagination_class = CustomPagination
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
filterset_class = ManagementVetFarmFilterSet
|
||||
poultry_filterset_class = PoultryFilterSet
|
||||
filterset_fields = [
|
||||
'poultry__user__mobile',
|
||||
'poultry__unit_name',
|
||||
'poultry__address__city__name',
|
||||
|
||||
]
|
||||
poultry_filterset_fields = [
|
||||
'user__mobile',
|
||||
'unit_name',
|
||||
'address__city__name',
|
||||
|
||||
]
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
if request.GET['role'] == 'VetFarm':
|
||||
vet = Vet.objects.get(user=user)
|
||||
vet_farm = VetFarm.objects.filter(vet=vet, trash=False).select_related('poultry', 'vet')
|
||||
vet_farm_list = []
|
||||
if 'search' in request.GET:
|
||||
if request.GET['search'] == 'filter':
|
||||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||||
for item in self.filterset_fields:
|
||||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||||
if (self.filterset_class(
|
||||
data=query,
|
||||
queryset=vet_farm
|
||||
)
|
||||
).filter():
|
||||
ps = self.filterset_class(data=query, queryset=vet_farm)
|
||||
vet_farm_list = ps.filter()
|
||||
vet_farm = [] if len(vet_farm_list) == 0 else vet_farm_list
|
||||
page_size = request.query_params.get('page_size', None)
|
||||
|
||||
if page_size:
|
||||
self.pagination_class.page_size = int(page_size)
|
||||
|
||||
page = self.paginate_queryset(vet_farm)
|
||||
if page is not None:
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
||||
serializer = ManagementVetFarmSerializer(vet_farm, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
else:
|
||||
poultries = Poultry.objects.filter(
|
||||
pk__in=PoultryHatching.objects.filter(trash=False, allow_hatching='pending', state='pending',
|
||||
archive=False).values_list('poultry__id', flat=True),
|
||||
address__city=user.city)
|
||||
poultries_list = []
|
||||
if 'search' in request.GET:
|
||||
if request.GET['search'] == 'filter':
|
||||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||||
for item in self.poultry_filterset_fields:
|
||||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||||
if (self.poultry_filterset_class(
|
||||
data=query,
|
||||
queryset=poultries
|
||||
)
|
||||
).filter():
|
||||
ps = self.filterset_class(data=query, queryset=poultries)
|
||||
poultries_list = ps.filter()
|
||||
poultries = [] if len(poultries_list) == 0 else poultries_list
|
||||
page_size = request.query_params.get('page_size', None)
|
||||
|
||||
if page_size:
|
||||
self.pagination_class.page_size = int(page_size)
|
||||
|
||||
page = self.paginate_queryset(poultries)
|
||||
if page is not None:
|
||||
serializer = PoultryForCityVetSerializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
||||
serializer = PoultryForCityVetSerializer(poultries, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
Reference in New Issue
Block a user