1907 lines
77 KiB
Python
1907 lines
77 KiB
Python
from datetime import datetime
|
||
from io import BytesIO
|
||
import json
|
||
|
||
from django.db.models import Sum
|
||
from django.http import QueryDict, HttpResponse
|
||
from openpyxl import Workbook
|
||
from openpyxl.styles import Alignment
|
||
|
||
from LiveStock.Cooperative.filterset import CooperativeFilterSet
|
||
from LiveStock.Jahad.filterset import LiveStockAllocationsFilterSet
|
||
from LiveStock.Rancher.helpers import update_one_rancher
|
||
from LiveStock.helpers import build_query
|
||
from LiveStock.models import LiveStockProduct, LiveStockAllocations, LiveStockRolseProduct, Cooperative, Rancher
|
||
from authentication.models import SystemUserProfile
|
||
from panel.ProvinceOperator.serializers import PosMachineTransactionsForLiveStockSerializer, \
|
||
CooperativeForAllocationsReportSerializer, PosMachineTransactionsSerializer, \
|
||
PosMachineTransactionsForLiveStockSerializerForExcel
|
||
from panel.convert_date import convert_to_shamsi
|
||
from panel.filterset import PosMachineTransactionsFilterSet
|
||
from panel.helper_excel import shamsi_date, create_header, excel_description, create_header_freez, create_value
|
||
from panel.models import PosMachineTransactions, ProductsTransactions
|
||
|
||
|
||
def allocation_live_stock_excel(request):
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
products = {
|
||
"bran": "سبوس",
|
||
"barley": "جو",
|
||
"soy": "سویا",
|
||
"corn": "ذرت",
|
||
}
|
||
name = products[request.GET.get('name')]
|
||
|
||
product = LiveStockProduct.objects.filter(trash=False, name=name).first()
|
||
if request.GET['role'] == 'LiveStockProvinceJahad':
|
||
allocations = LiveStockAllocations.objects.filter(jahad__user=user, allocate_from="LiveStockProvinceJahad",
|
||
trash=False, product__parent_product=product).order_by(
|
||
'id').exclude(allocate_to='LiveStockProvinceJahad')
|
||
roles_new_product = LiveStockRolseProduct.objects.filter(jahad__isnull=False, trash=False
|
||
, parent_product=product).first()
|
||
elif request.GET['role'] == 'Union':
|
||
allocations = LiveStockAllocations.objects.filter(union__user=user, trash=False, allocate_from="Union",
|
||
product__parent_product=product).order_by('id')
|
||
roles_new_product = LiveStockRolseProduct.objects.filter(union__user=user, trash=False,
|
||
parent_product=product).first()
|
||
else:
|
||
allocations = LiveStockAllocations.objects.filter(cooperative__user=user, charge=False,
|
||
allocate_to="Cooperative",
|
||
trash=False, product__parent_product=product).order_by(
|
||
'id')
|
||
roles_new_product = LiveStockRolseProduct.objects.filter(cooperative__user=user, trash=False,
|
||
parent_product=product).first()
|
||
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
if date1 and date2:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
allocations = allocations.filter(date__date__gte=date1, date__date__lte=date2)
|
||
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if search != 'undefined' and search.strip():
|
||
allocations = allocations.filter(
|
||
build_query(LiveStockAllocationsFilterSet.Meta.fields, value)
|
||
)
|
||
excel_options = [
|
||
'ردیف',
|
||
'وزن(کیلوگرم)',
|
||
'تخصیص از',
|
||
'تخصیص به',
|
||
'ثبت کننده',
|
||
'تاریخ ثبت',
|
||
'مکان دریافت',
|
||
'توضیحات',
|
||
|
||
|
||
]
|
||
|
||
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
if request.GET['role'] == "LiveStockProvinceJahad":
|
||
|
||
header_list = [
|
||
'ورودی به انبار',
|
||
'تخصیص جهاد به اتحادیه ',
|
||
'تخصیص جهاد به تعاونی ها ',
|
||
'مجموع تخصیصات',
|
||
'مجموع تخصیصات اتحادیه به تعاونی',
|
||
'مجموع تخصیص به تعاونی ها',
|
||
'توزیع به دامداران',
|
||
'مجموع توزیع به دامداران',
|
||
'مانده انبار جهاد استان',
|
||
'مانده انبار اتحادیه',
|
||
'مانده انبار تعاونی ها',
|
||
|
||
]
|
||
else:
|
||
header_list = [
|
||
'ورودی به انبار',
|
||
|
||
'تخصیص به تعاونی ها',
|
||
'توزیع به دامداران',
|
||
'مجموع تخصیص و توزیع به دامداران',
|
||
'مانده انبار',
|
||
|
||
]
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
from_date1 = shamsi_date(date1)
|
||
to_date1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='C2')
|
||
|
||
create_header(worksheet, header_list, 1, 3, height=20)
|
||
|
||
excel_description(worksheet, 'B1', f'تخصیصات {name}', color='red', row2='C1')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
|
||
l = 5
|
||
m = 1
|
||
if allocations:
|
||
for data in allocations:
|
||
if data.allocate_from == 'LiveStockProvinceJahad':
|
||
allocate_from="جهاد"
|
||
allocate_from_full_name=data.jahad.user.fullname
|
||
else:
|
||
allocate_from = "اتحادیه"
|
||
allocate_from_full_name=data.union.user.fullname
|
||
if data.allocate_to == 'Union':
|
||
allocate_to = "اتحادیه"
|
||
allocate_to_full_name = data.union.user.fullname
|
||
else:
|
||
allocate_to = "تعاونی"
|
||
allocate_to_full_name = data.cooperative.user.fullname
|
||
|
||
list1 = [
|
||
m,
|
||
data.weight,
|
||
f'{allocate_from}({allocate_from_full_name})',
|
||
f'{allocate_to}({allocate_to_full_name})',
|
||
allocate_from_full_name,
|
||
str(shamsi_date(data.create_date)),
|
||
data.place,
|
||
data.description
|
||
|
||
]
|
||
m += 1
|
||
l += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
if allocations:
|
||
jahat_to_union = allocations.filter(jahad__isnull=False, allocate_to='Union')
|
||
jahat_to_cooperative = allocations.filter(jahad__isnull=False, allocate_to='Cooperative')
|
||
union_to_cooperative = LiveStockAllocations.objects.filter(union__isnull=False, allocate_to='Cooperative')
|
||
|
||
jahat_to_union_weight = jahat_to_union.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
jahat_to_union_real_weight = jahat_to_union.aggregate(total=Sum('real_weight'))[
|
||
'total'] or 0
|
||
jahat_to_cooperative_weight = jahat_to_cooperative.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
jahat_to_cooperative_real_weight = jahat_to_cooperative.aggregate(total=Sum('real_weight'))[
|
||
'total'] or 0
|
||
union_to_cooperative_weight = union_to_cooperative.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
union_to_cooperative_real_weight = union_to_cooperative.aggregate(total=Sum('real_weight'))[
|
||
'total'] or 0
|
||
roles_product = LiveStockRolseProduct.objects.filter(trash=False)
|
||
union_remain = roles_product.filter(union__isnull=False)
|
||
cooperative_remain = roles_product.filter(cooperative__isnull=False)
|
||
role_product_union = union_remain.aggregate(total=Sum('total_remain_weight'))[
|
||
'total'] or 0
|
||
role_product_cooperative = cooperative_remain.aggregate(total=Sum('total_remain_weight'))[
|
||
'total'] or 0
|
||
role_product_cooperative_receipt_weight = cooperative_remain.aggregate(total=Sum('total_receipt_weight'))[
|
||
'total'] or 0
|
||
if request.GET['role'] == 'Union':
|
||
value_header_list = [
|
||
|
||
roles_new_product.total_weight,
|
||
|
||
roles_new_product.total_allocated_weight,
|
||
0,
|
||
0 + roles_new_product.total_allocated_weight,
|
||
roles_new_product.total_remain_weight,
|
||
|
||
]
|
||
|
||
else:
|
||
value_header_list = [
|
||
|
||
roles_new_product.total_weight,
|
||
jahat_to_union_weight,
|
||
jahat_to_cooperative_weight,
|
||
|
||
roles_new_product.total_allocated_weight,
|
||
union_to_cooperative_weight,
|
||
jahat_to_cooperative_weight + union_to_cooperative_weight,
|
||
0,
|
||
0,
|
||
roles_new_product.total_remain_weight,
|
||
role_product_union,
|
||
role_product_cooperative,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 1)
|
||
|
||
weight = allocations.aggregate(total=Sum('weight'))['total'] or 0
|
||
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
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=" تخصیصات {name}.xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def warehouse_live_stock_excel(request):
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
products = {
|
||
"bran": "سبوس",
|
||
"barley": "جو",
|
||
"soy": "سویا",
|
||
"corn": "ذرت",
|
||
}
|
||
name = products[request.GET.get('name')]
|
||
|
||
product = LiveStockProduct.objects.filter(trash=False, name=name).first()
|
||
if request.GET['role'] == 'LiveStockProvinceJahad':
|
||
allocations = LiveStockAllocations.objects.filter(jahad__user=user, trash=False,
|
||
product__parent_product=product,
|
||
allocate_to='LiveStockProvinceJahad').order_by('id')
|
||
roles_new_product = LiveStockRolseProduct.objects.filter(jahad__isnull=False, trash=False
|
||
, parent_product=product).first()
|
||
elif request.GET['role'] == 'Union':
|
||
allocations = LiveStockAllocations.objects.filter(allocate_from='LiveStockProvinceJahad', union__user=user,
|
||
trash=False, product__parent_product=product).order_by(
|
||
'id')
|
||
roles_new_product = LiveStockRolseProduct.objects.filter(union__user=user, trash=False,
|
||
parent_product=product).first()
|
||
else:
|
||
allocations = LiveStockAllocations.objects.filter(
|
||
charge=True, cooperative__user=user,
|
||
trash=False, product__parent_product=product).order_by('id')
|
||
roles_new_product = LiveStockRolseProduct.objects.filter(cooperative__user=user, trash=False,
|
||
parent_product=product).first()
|
||
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
if date1 and date2:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
allocations = allocations.filter(date__date__gte=date1, date__date__lte=date2)
|
||
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if search != 'undefined' and search.strip():
|
||
allocations = allocations.filter(
|
||
build_query(LiveStockAllocationsFilterSet.Meta.fields, value)
|
||
)
|
||
excel_options = [
|
||
'ردیف',
|
||
'وزن(کیلوگرم)',
|
||
'تخصیص از انبار',
|
||
'دریافت در انبار',
|
||
'ثبت کننده',
|
||
'تاریخ ثبت',
|
||
'مکان دریافت',
|
||
'توضیحات',
|
||
|
||
|
||
]
|
||
|
||
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
if request.GET['role'] == "LiveStockProvinceJahad":
|
||
|
||
header_list = [
|
||
'ورودی به انبار',
|
||
'تخصیص جهاد به اتحادیه ',
|
||
'تخصیص جهاد به تعاونی ها ',
|
||
'مجموع تخصیصات',
|
||
'مجموع تخصیصات اتحادیه به تعاونی',
|
||
'مجموع تخصیص به تعاونی ها',
|
||
'توزیع به دامداران',
|
||
'مجموع توزیع به دامداران',
|
||
'مانده انبار جهاد استان',
|
||
'مانده انبار اتحادیه',
|
||
'مانده انبار تعاونی ها',
|
||
|
||
]
|
||
elif request.GET['role'] == "Union":
|
||
header_list = [
|
||
'ورودی به انبار',
|
||
|
||
'تخصیص به تعاونی ها',
|
||
'توزیع به دامداران',
|
||
'مجموع تخصیص و توزیع به دامداران',
|
||
'مانده انبار',
|
||
|
||
]
|
||
else:
|
||
header_list = [
|
||
'سهمیه دریافتی',
|
||
'ورودی به انبار',
|
||
|
||
'توزیع به دامداران',
|
||
'مانده انبار',
|
||
|
||
]
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
from_date1 = shamsi_date(date1)
|
||
to_date1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='C2')
|
||
|
||
create_header(worksheet, header_list, 1, 3, height=20)
|
||
|
||
excel_description(worksheet, 'B1', f'انبار {name}', color='red', row2='C1')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
|
||
l = 5
|
||
m = 1
|
||
if allocations:
|
||
for data in allocations:
|
||
if data.allocate_from == 'LiveStockProvinceJahad':
|
||
allocate_from="جهاد"
|
||
allocate_from_full_name=data.jahad.user.fullname
|
||
else:
|
||
allocate_from = "اتحادیه"
|
||
allocate_from_full_name=data.union.user.fullname
|
||
if data.allocate_to == 'Union':
|
||
allocate_to = "اتحادیه"
|
||
allocate_to_full_name = data.union.user.fullname
|
||
elif data.allocate_to == 'LiveStockProvinceJahad':
|
||
allocate_to="جهاد"
|
||
allocate_to_full_name=data.jahad.user.fullname
|
||
else:
|
||
allocate_to = "تعاونی"
|
||
allocate_to_full_name = data.cooperative.user.fullname
|
||
|
||
list1 = [
|
||
m,
|
||
data.weight,
|
||
f'{allocate_from}({allocate_from_full_name})',
|
||
f'{allocate_to}({allocate_to_full_name})',
|
||
allocate_from_full_name,
|
||
str(shamsi_date(data.create_date)),
|
||
data.place,
|
||
data.description
|
||
|
||
]
|
||
m += 1
|
||
l += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
if allocations:
|
||
jahat_to_union = allocations.filter(jahad__isnull=False, allocate_to='Union')
|
||
union_to_cooperative = LiveStockAllocations.objects.filter(union__isnull=False, allocate_to='Cooperative')
|
||
jahat_to_cooperative_filter = LiveStockAllocations.objects.filter(jahad__isnull=False, allocate_to='Cooperative')
|
||
jahat_to_cooperative = jahat_to_cooperative_filter.filter(jahad__isnull=False, allocate_to='Cooperative')
|
||
|
||
jahat_to_union_weight = jahat_to_union.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
jahat_to_union_real_weight = jahat_to_union.aggregate(total=Sum('real_weight'))[
|
||
'total'] or 0
|
||
jahat_to_cooperative_weight = jahat_to_cooperative.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
jahat_to_cooperative_real_weight = jahat_to_cooperative.aggregate(total=Sum('real_weight'))[
|
||
'total'] or 0
|
||
union_to_cooperative_weight = union_to_cooperative.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
union_to_cooperative_real_weight = union_to_cooperative.aggregate(total=Sum('real_weight'))[
|
||
'total'] or 0
|
||
roles_product = LiveStockRolseProduct.objects.filter(trash=False)
|
||
union_remain = roles_product.filter(union__isnull=False)
|
||
cooperative_remain = roles_product.filter(cooperative__isnull=False)
|
||
role_product_union = union_remain.aggregate(total=Sum('total_remain_weight'))[
|
||
'total'] or 0
|
||
role_product_cooperative = cooperative_remain.aggregate(total=Sum('total_remain_weight'))[
|
||
'total'] or 0
|
||
role_product_cooperative_receipt_weight = cooperative_remain.aggregate(total=Sum('total_receipt_weight'))[
|
||
'total'] or 0
|
||
if request.GET['role'] == 'Union':
|
||
value_header_list = [
|
||
|
||
roles_new_product.total_weight,
|
||
|
||
roles_new_product.total_allocated_weight,
|
||
0,
|
||
0 + roles_new_product.total_allocated_weight,
|
||
roles_new_product.total_remain_weight,
|
||
|
||
]
|
||
if request.GET['role'] == 'Cooperative':
|
||
value_header_list = [
|
||
role_product_cooperative_receipt_weight,
|
||
roles_new_product.total_weight,
|
||
|
||
0,
|
||
|
||
roles_new_product.total_remain_weight,
|
||
|
||
]
|
||
else:
|
||
value_header_list = [
|
||
|
||
roles_new_product.total_weight,
|
||
jahat_to_union_weight,
|
||
jahat_to_cooperative_weight,
|
||
|
||
roles_new_product.total_allocated_weight,
|
||
union_to_cooperative_weight,
|
||
jahat_to_cooperative_weight + union_to_cooperative_weight,
|
||
0,
|
||
0,
|
||
roles_new_product.total_remain_weight,
|
||
role_product_union,
|
||
role_product_cooperative,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 1)
|
||
|
||
weight = allocations.aggregate(total=Sum('weight'))['total'] or 0
|
||
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
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="انبار {name}.xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def live_stock_transaction_excel(request):
|
||
products = {
|
||
"bran": "سبوس",
|
||
"barley": "جو",
|
||
"soy": "سویا",
|
||
"corn": "ذرت",
|
||
}
|
||
name = products[request.GET.get('name')]
|
||
filterset_class = PosMachineTransactionsFilterSet
|
||
filterset_fields = [
|
||
'mobile',
|
||
'natcode',
|
||
'fullname',
|
||
]
|
||
user = SystemUserProfile.objects.get(key=request.GET['key'], trash=False)
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET.get('role')
|
||
filters = {}
|
||
|
||
|
||
|
||
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'تاریخ',
|
||
'خریدار',
|
||
'کد ملی خریدار',
|
||
'موبایل خریدار',
|
||
'فروشنده',
|
||
'تلفن فروشنده',
|
||
'وضعیت',
|
||
'محل تحویل',
|
||
'کالا',
|
||
'کد ملی فروشنده',
|
||
'دام سنگین',
|
||
'دام سبک',
|
||
'وزن(کیلوگرم)',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم تعاونی(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
'سهم شرکت(ریال)',
|
||
|
||
|
||
]
|
||
header_list = [
|
||
'تعداد تراکنش ها',
|
||
'مجموع دام سنگین',
|
||
'مجموع دام سبک',
|
||
|
||
'مجموع وزن(کیلوگرم)',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم تعاونی(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
'سهم شرکت(ریال)',
|
||
|
||
]
|
||
sheet_names=['تراکنش های موفق']
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
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 == 'تراکنش های موفق':
|
||
cooperative_key = request.GET.get('cooperative_key')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET.get('role')
|
||
state = request.GET.get('state')
|
||
filters = {}
|
||
products = {
|
||
"bran": "سبوس",
|
||
"barley": "جو",
|
||
"soy": "سویا",
|
||
"corn": "ذرت",
|
||
"sheep_concentrate": "کنسانتره گوسفندی",
|
||
"high_cow_concentrate": "کنسانتره گاو شیری پرتولید",
|
||
"medium_cow_concentrate": "کنسانتره گاو شیری متوسط",
|
||
"fattening_calf_concentrate": "کنسانتره گوساله پرواری",
|
||
}
|
||
product = products[request.GET.get('name')]
|
||
|
||
filters['paid'] = True
|
||
|
||
|
||
cooperative_key = request.GET.get('cooperative_key')
|
||
if role in ('LiveStockProvinceJahad', 'Union'):
|
||
if product:
|
||
product_transactions = ProductsTransactions.objects.filter(
|
||
live_stack_products__parent_product__name=product, trash=False).values_list('transaction__id',
|
||
flat=True)
|
||
transactions = PosMachineTransactions.objects.filter(id__in=product_transactions, trash=False,
|
||
live_stock=True).order_by('-date')
|
||
|
||
else:
|
||
transactions = PosMachineTransactions.objects.filter(trash=False, live_stock=True).order_by('-date')
|
||
|
||
|
||
elif cooperative_key:
|
||
cooperative = Cooperative.objects.get(key=cooperative_key)
|
||
if product:
|
||
product_transactions = ProductsTransactions.objects.filter(
|
||
live_stack_products__parent_product__name=product, live_stack_products__cooperative=cooperative,
|
||
trash=False).values_list('transaction__id',
|
||
flat=True)
|
||
transactions = PosMachineTransactions.objects.filter(id__in=product_transactions, trash=False,
|
||
live_stock=True).order_by('-date')
|
||
else:
|
||
|
||
transactions = PosMachineTransactions.objects.filter(pos__cooperative=cooperative, trash=False,
|
||
live_stock=True).order_by('-date')
|
||
|
||
|
||
|
||
else:
|
||
cooperative = Cooperative.objects.get(user=user)
|
||
if product:
|
||
product_transactions = ProductsTransactions.objects.filter(
|
||
live_stack_products__parent_product__name=product, live_stack_products__cooperative=cooperative,
|
||
trash=False).values_list('transaction__id',
|
||
flat=True)
|
||
transactions = PosMachineTransactions.objects.filter(id__in=product_transactions, trash=False,
|
||
live_stock=True).order_by('-date')
|
||
|
||
else:
|
||
|
||
transactions = PosMachineTransactions.objects.filter(pos__cooperative=cooperative, trash=False,
|
||
live_stock=True).order_by('-date')
|
||
|
||
if date1 and date2:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
filters['date__date__gte'] = date1
|
||
filters['date__date__lte'] = date2
|
||
|
||
transactions = transactions.filter(**filters).order_by('-date')
|
||
if 'search' in request.GET and 'value' in request.GET:
|
||
transactions_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=transactions
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=transactions)
|
||
transactions_list = ps.filter()
|
||
transactions = [] if len(transactions_list) == 0 else transactions_list
|
||
|
||
transactions = transactions.filter(**filters).order_by('-date')
|
||
serializer = PosMachineTransactionsForLiveStockSerializer(transactions, many=True).data
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
from_date1 = shamsi_date(date1)
|
||
to_date1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='D3')
|
||
|
||
create_header(worksheet, header_list, 5, 3, height=20)
|
||
|
||
excel_description(worksheet, 'B1', f'تراکنش های موفق محصول {name}', color='red', row2='C1')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
|
||
l = 5
|
||
m = 1
|
||
if serializer:
|
||
for data in serializer:
|
||
date = datetime.strptime(str(data['date']), '%Y-%m-%dT%H:%M:%S.%f')
|
||
shares=data.get('shares') or {}
|
||
additional = json.loads(data['additional']) if data.get('additional', '').strip() else {}
|
||
if additional.get('isTaavoni'):
|
||
tavanoni='تعاونی' if additional['isTaavoni'] == True else 'کارخانه'
|
||
else:
|
||
tavanoni='-'
|
||
list1 = [
|
||
m,
|
||
str(convert_to_shamsi(datetime=date)),
|
||
data['fullname'],
|
||
data['natcode'],
|
||
data['mobile'],
|
||
data['pos']['cooperative']['name'] + '('+data['pos']['cooperative']['user']['fullname'] +')',
|
||
data['pos']['cooperative']['user']['mobile'],
|
||
data['result'],
|
||
tavanoni,
|
||
data['products'][0]['name'],
|
||
data['natcode'],
|
||
additional.get('cur_heavy', 0),
|
||
additional.get('cur_light', 0),
|
||
data['products'][0]['cur_weight'],
|
||
data['price'],
|
||
shares.get('totalCooperativePrice') or 0,
|
||
shares.get('totalUnionPrice') or 0,
|
||
shares.get('totalCompanyPrice') or 0,
|
||
]
|
||
m += 1
|
||
l += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
cur_heavy = sum(json.loads(data['additional']).get('cur_heavy', 0) for data in serializer)
|
||
cur_light = sum(json.loads(data['additional']).get('cur_light', 0) for data in serializer)
|
||
|
||
cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
price = sum(data['price'] for data in serializer)
|
||
cooperative_price = sum(data.get('shares', {}).get('totalCooperativePrice') or 0 for data in serializer)
|
||
union_price = sum(data.get('shares', {}).get('totalUnionPrice') or 0 for data in serializer)
|
||
total_company_price = sum(data.get('shares', {}).get('totalCompanyPrice') or 0 for data in serializer)
|
||
|
||
value_header_list = [
|
||
len(transactions),
|
||
cur_heavy,
|
||
cur_light,
|
||
cur_weight,
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
total_company_price,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 5)
|
||
|
||
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
cur_heavy,
|
||
cur_light,
|
||
cur_weight,
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
total_company_price,
|
||
|
||
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 3, 1, color='green')
|
||
|
||
# else:
|
||
# cooperative_key = request.GET.get('cooperative_key')
|
||
# if role in ('LiveStockProvinceJahad', 'Union'):
|
||
# transactions = PosMachineTransactions.objects.filter(trash=False, live_stock=True).order_by('-date')
|
||
# elif cooperative_key:
|
||
# cooperative = Cooperative.objects.get(key=cooperative_key)
|
||
# transactions = PosMachineTransactions.objects.filter(pos__cooperative=cooperative, trash=False,
|
||
# live_stock=True).order_by('-date')
|
||
#
|
||
#
|
||
# else:
|
||
# cooperative = Cooperative.objects.get(user=user)
|
||
# transactions = PosMachineTransactions.objects.filter(pos__cooperative=cooperative, trash=False,
|
||
# live_stock=True).order_by('-date')
|
||
#
|
||
# if date1 and date2:
|
||
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
#
|
||
# filters['date__date__gte'] = date1
|
||
# filters['date__date__lte'] = date2
|
||
#
|
||
# if 'search' in request.GET and 'value' in request.GET:
|
||
# transactions_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=transactions
|
||
# )
|
||
# ).filter():
|
||
# ps = filterset_class(data=query, queryset=transactions)
|
||
# transactions_list = ps.filter()
|
||
# transactions = [] if len(transactions_list) == 0 else transactions_list
|
||
# transactions = transactions.filter(**filters, paid=False).order_by('-date')
|
||
# serializer = PosMachineTransactionsForLiveStockSerializerForExcel(transactions, many=True).data
|
||
#
|
||
# if 'date1' in request.GET:
|
||
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
# from_date1 = shamsi_date(date1)
|
||
# to_date1 = shamsi_date(date2)
|
||
# excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='D3')
|
||
#
|
||
# create_header(worksheet, header_list, 5, 3, height=20)
|
||
#
|
||
# excel_description(worksheet, 'B1', f'تراکنش های ناموفق', color='red', row2='C1')
|
||
#
|
||
# create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
#
|
||
# l = 5
|
||
# m = 1
|
||
# if serializer:
|
||
# for data in serializer:
|
||
# date = datetime.strptime(str(data['date']), '%Y-%m-%dT%H:%M:%S.%f')
|
||
#
|
||
# additional = json.loads(data['additional'])
|
||
# if additional.get('isTaavoni'):
|
||
# tavanoni = 'تعاونی' if additional['isTaavoni'] == True else 'کارخانه'
|
||
# else:
|
||
# tavanoni = '-'
|
||
# list1 = [
|
||
# m,
|
||
# str(convert_to_shamsi(datetime=date)),
|
||
# data['fullname'],
|
||
# data['natcode'],
|
||
# data['mobile'],
|
||
# data['pos']['cooperative']['name'] + '(' + data['pos']['cooperative']['user']['fullname'] + ')',
|
||
# data['pos']['cooperative']['user']['mobile'],
|
||
# data['result'],
|
||
# tavanoni,
|
||
# data['products'][0]['name'],
|
||
# data['natcode'],
|
||
# additional.get('cur_heavy',0),
|
||
# additional.get('cur_light',0),
|
||
# data['products'][0]['cur_weight'],
|
||
# data['price'],
|
||
# additional.get('cooperative_price',0),
|
||
# additional.get('union_price',0),
|
||
# ]
|
||
# m += 1
|
||
# l += 1
|
||
# create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
#
|
||
# cur_heavy = sum(json.loads(data['additional']).get('cur_heavy', 0) for data in serializer)
|
||
# cur_light = sum(json.loads(data['additional']).get('cur_light', 0) for data in serializer)
|
||
# cooperative_price = sum(
|
||
# json.loads(data['additional']).get('cooperative_price', 0) for data in serializer)
|
||
# union_price = sum(json.loads(data['additional']).get('union_price', 0) for data in serializer)
|
||
# cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
# price = sum(data['price'] for data in serializer)
|
||
#
|
||
# value_header_list = [
|
||
# len(transactions),
|
||
# cur_heavy,
|
||
# cur_light,
|
||
# cur_weight,
|
||
# price,
|
||
# cooperative_price,
|
||
# union_price,
|
||
#
|
||
# ]
|
||
# create_value(worksheet, value_header_list, 4, 5)
|
||
#
|
||
# list2 = [
|
||
# 'مجموع==>',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# cur_heavy,
|
||
# cur_light,
|
||
# cur_weight,
|
||
# price,
|
||
# cooperative_price,
|
||
# union_price,
|
||
#
|
||
# ]
|
||
# 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="تراکنش های محصول {name}.xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def cooperative_warehouse_excel(request):
|
||
products = {
|
||
"bran": "سبوس",
|
||
"barley": "جو",
|
||
"soy": "سویا",
|
||
"corn": "ذرت",
|
||
}
|
||
name = products[request.GET.get('name')]
|
||
cooperatives = Cooperative.objects.filter(trash=False).order_by('id')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if search != 'undefined' and search.strip():
|
||
cooperatives = cooperatives.filter(
|
||
build_query(CooperativeFilterSet.Meta.fields, search)
|
||
)
|
||
|
||
serializer = CooperativeForAllocationsReportSerializer(cooperatives, many=True,context={'request':request}).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')
|
||
|
||
header_list = [
|
||
'سهمیه دریافتی',
|
||
'وزن تحویلی',
|
||
'وزن فروش رفته',
|
||
'مانده انبار',
|
||
'تعداد تراکنش ها',
|
||
'جمع تراکنش ها',
|
||
'وزن کل تراکنش ها',
|
||
|
||
]
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
from_date1 = shamsi_date(date1)
|
||
to_date1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='C2')
|
||
|
||
create_header(worksheet, header_list, 3, 3, height=20)
|
||
|
||
excel_description(worksheet, 'B1', f'گزارش فروش {name}', color='red', row2='C1')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
|
||
l = 5
|
||
m = 1
|
||
if serializer:
|
||
for data in serializer:
|
||
|
||
|
||
list1 = [
|
||
m,
|
||
data['name'],
|
||
data['user']['fullname'] if data['user']['fullname'] else '-',
|
||
data['user']['province_name'] if data['user']['province_name'] else '-',
|
||
data['user']['city_name'] if data['user']['city_name'] else '-',
|
||
data['user']['mobile'] if data['user']['mobile'] else '-',
|
||
data['user']['national_id'] if data['user']['national_id'] else '-',
|
||
data['info']['total_receipt_weight'] if data['info']['total_receipt_weight'] else '-',
|
||
data['info']['total_weight'] if data['info']['total_weight'] else '-',
|
||
data['info']['total_allocated_weight'] if data['info']['total_allocated_weight'] else '-',
|
||
data['info']['total_remain_weight'] if data['info']['total_remain_weight'] else '-',
|
||
data['info']['transactions'] if data['info']['transactions'] else '-',
|
||
data['info']['total_transactions_price'] if data['info']['total_transactions_price'] else '-',
|
||
data['info']['total_transactions_weight'] if data['info']['total_transactions_weight'] else '-',
|
||
|
||
|
||
]
|
||
m += 1
|
||
l += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
if serializer:
|
||
|
||
total_receipt_weight = sum(
|
||
item['info'].get('total_receipt_weight', 0) for item in serializer)
|
||
total_weight = sum(
|
||
item['info'].get('total_weight', 0) for item in serializer)
|
||
total_allocated_weight = sum(
|
||
item['info'].get('total_allocated_weight', 0) for item in serializer)
|
||
total_remain_weight = sum(
|
||
item['info'].get('total_remain_weight', 0) for item in serializer)
|
||
transactions = sum(
|
||
item['info'].get('transactions', 0) for item in serializer)
|
||
total_transactions_price = sum(
|
||
item['info'].get('total_transactions_price', 0) for item in serializer)
|
||
total_transactions_weight = sum(
|
||
item['info'].get('total_transactions_weight', 0) for item in serializer)
|
||
value_header_list = [
|
||
|
||
total_receipt_weight,
|
||
total_weight,
|
||
total_allocated_weight,
|
||
total_remain_weight,
|
||
transactions,
|
||
total_transactions_price,
|
||
total_transactions_weight,
|
||
|
||
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 3)
|
||
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_receipt_weight,
|
||
total_weight,
|
||
total_allocated_weight,
|
||
total_remain_weight,
|
||
transactions,
|
||
total_transactions_price,
|
||
total_transactions_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="گزارش فروش {name}.xlsx"'.encode(
|
||
'utf-8')
|
||
response.write(output.getvalue())
|
||
return response
|
||
|
||
|
||
def safe_get_additional(data):
|
||
additional_str = data.get('additional')
|
||
if additional_str in [None, '', 'null', 'undefined']:
|
||
return {}
|
||
try:
|
||
return json.loads(additional_str)
|
||
except (json.JSONDecodeError, TypeError):
|
||
return {}
|
||
|
||
|
||
def management_live_stock_excel(request):
|
||
sheet_names=['اطلاعات کلی توزیع تعاونی ها']
|
||
output = BytesIO()
|
||
workbook = Workbook()
|
||
worksheet = workbook.active
|
||
workbook.remove(worksheet)
|
||
|
||
for name in sheet_names[:1]:
|
||
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 == 'اطلاعات کلی توزیع تعاونی ها':
|
||
cooperatives = Cooperative.objects.filter(trash=False).order_by('id')
|
||
|
||
serializer = CooperativeForAllocationsReportSerializer(cooperatives, many=True).data
|
||
excel_options = [
|
||
'ردیف',
|
||
'نام تعاونی',
|
||
'کاربر',
|
||
'استان',
|
||
'شهر',
|
||
'موبایل',
|
||
'کد ملی',
|
||
'سهمیه دریافتی',
|
||
'وزن تحویلی',
|
||
'وزن فروش رفته',
|
||
'مانده انبار',
|
||
'تعداد تراکنش ها',
|
||
'جمع تراکنش ها',
|
||
'وزن کل تراکنش ها',
|
||
|
||
]
|
||
cell = worksheet.cell(row=1, column=1)
|
||
cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
|
||
header_list = [
|
||
'سهمیه دریافتی',
|
||
'وزن تحویلی',
|
||
'وزن فروش رفته',
|
||
'مانده انبار',
|
||
'تعداد تراکنش ها',
|
||
'جمع تراکنش ها',
|
||
'وزن کل تراکنش ها',
|
||
|
||
]
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
from_date1 = shamsi_date(date1)
|
||
to_date1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='C2')
|
||
|
||
create_header(worksheet, header_list, 3, 3, height=20)
|
||
|
||
excel_description(worksheet, 'A1', f'اطلاعات کلی توزیع تعاونی ها', color='red', row2='C1')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
l = 5
|
||
m = 1
|
||
if serializer:
|
||
for data in serializer:
|
||
if data['info']['transactions'] >0 and data['name'] not in sheet_names:
|
||
sheet_names.append(data['name'])
|
||
list1 = [
|
||
m,
|
||
data['name'],
|
||
data['user']['fullname'],
|
||
data['user']['province_name'],
|
||
data['user']['city_name'],
|
||
data['user']['mobile'],
|
||
data['user']['national_id'],
|
||
data['info']['total_receipt_weight'],
|
||
data['info']['total_weight'],
|
||
data['info']['total_allocated_weight'],
|
||
data['info']['total_remain_weight'],
|
||
data['info']['transactions'],
|
||
data['info']['total_transactions_price'],
|
||
data['info']['total_transactions_weight'],
|
||
|
||
]
|
||
m += 1
|
||
l += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
if serializer:
|
||
total_receipt_weight = sum(
|
||
item['info'].get('total_receipt_weight', 0) for item in serializer)
|
||
total_weight = sum(
|
||
item['info'].get('total_weight', 0) for item in serializer)
|
||
total_allocated_weight = sum(
|
||
item['info'].get('total_allocated_weight', 0) for item in serializer)
|
||
total_remain_weight = sum(
|
||
item['info'].get('total_remain_weight', 0) for item in serializer)
|
||
transactions = sum(
|
||
item['info'].get('transactions', 0) for item in serializer)
|
||
total_transactions_price = sum(
|
||
item['info'].get('total_transactions_price', 0) for item in serializer)
|
||
total_transactions_weight = sum(
|
||
item['info'].get('total_transactions_weight', 0) for item in serializer)
|
||
value_header_list = [
|
||
|
||
total_receipt_weight,
|
||
total_weight,
|
||
total_allocated_weight,
|
||
total_remain_weight,
|
||
transactions,
|
||
total_transactions_price,
|
||
total_transactions_weight,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 3)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
total_receipt_weight,
|
||
total_weight,
|
||
total_allocated_weight,
|
||
total_remain_weight,
|
||
transactions,
|
||
total_transactions_price,
|
||
total_transactions_weight,
|
||
|
||
]
|
||
create_value(worksheet, list2, l + 3, 1, color='green')
|
||
# elif sheet_name == 'اطلاعات کلی خریداران':
|
||
# cell = worksheet.cell(row=1, column=1)
|
||
# cell.alignment = Alignment(horizontal='center', vertical='center')
|
||
# excel_options = [
|
||
# 'ردیف',
|
||
# 'دامدار',
|
||
# 'کدملی دامدار',
|
||
# 'شهر',
|
||
# 'تعداد تراکنش ها',
|
||
# 'مجموع دام سنگین',
|
||
# 'مجموع دام سبک',
|
||
#
|
||
# 'مجموع وزن(کیلوگرم)',
|
||
# 'مبلغ تراکنش(ریال)',
|
||
# 'سهم تعاونی(ریال)',
|
||
# 'سهم اتحادیه(ریال)',
|
||
#
|
||
# ]
|
||
# header_list = [
|
||
# 'تعداد دامداران',
|
||
# 'تعداد تراکنش ها',
|
||
# 'مجموع دام سنگین',
|
||
# 'مجموع دام سبک',
|
||
#
|
||
# 'مجموع وزن(کیلوگرم)',
|
||
# 'مبلغ تراکنش(ریال)',
|
||
# 'سهم تعاونی(ریال)',
|
||
# 'سهم اتحادیه(ریال)',
|
||
#
|
||
# ]
|
||
# ransactions = PosMachineTransactions.objects.filter(trash=False,
|
||
# live_stock=True, paid=True,
|
||
# ).order_by('id')
|
||
# natcpdes = ransactions.values_list('natcode',flat=True).distinct()
|
||
#
|
||
# ranchers=Rancher.objects.filter(trash=False,national_id__in=natcpdes).only('name','national_id')
|
||
# print(len(ranchers))
|
||
# if 'date1' in request.GET:
|
||
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
# from_date1 = shamsi_date(date1)
|
||
# to_date1 = shamsi_date(date2)
|
||
# excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='D3')
|
||
#
|
||
# create_header(worksheet, header_list, 5, 3, height=20)
|
||
#
|
||
# excel_description(worksheet, 'A1', f' تراکنش های موفق {name}', color='red', row2='D1')
|
||
#
|
||
# create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
#
|
||
# l = 5
|
||
# m = 1
|
||
# if ranchers:
|
||
# for rancher in ranchers:
|
||
# transactions = ransactions.filter(natcode=rancher.national_id).order_by('id')
|
||
#
|
||
# serializer = PosMachineTransactionsForLiveStockSerializer(transactions, many=True).data
|
||
# cur_heavy = sum(json.loads(data['additional']).get('cur_heavy', 0) for data in serializer)
|
||
# cur_light = sum(json.loads(data['additional']).get('cur_light', 0) for data in serializer)
|
||
# cooperative_price = sum(
|
||
# json.loads(data['additional']).get('cooperative_price', 0) for data in serializer)
|
||
# union_price = sum(json.loads(data['additional']).get('union_price', 0) for data in serializer)
|
||
# cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
# price = sum(data['price'] for data in serializer)
|
||
# list1 = [
|
||
# m,
|
||
# rancher.name,
|
||
# rancher.national_id,
|
||
# len(transactions),
|
||
# cur_heavy,
|
||
# cur_light,
|
||
# cur_weight,
|
||
# price,
|
||
# cooperative_price,
|
||
# union_price,
|
||
#
|
||
# ]
|
||
# m += 1
|
||
# l += 1
|
||
# create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
# transactions = ransactions
|
||
#
|
||
# serializer = PosMachineTransactionsForLiveStockSerializer(transactions, many=True).data
|
||
# cur_heavy = sum(json.loads(data['additional']).get('cur_heavy', 0) for data in serializer)
|
||
# cur_light = sum(json.loads(data['additional']).get('cur_light', 0) for data in serializer)
|
||
# cooperative_price = sum(
|
||
# json.loads(data['additional']).get('cooperative_price', 0) for data in serializer)
|
||
# union_price = sum(json.loads(data['additional']).get('union_price', 0) for data in serializer)
|
||
# cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
# price = sum(data['price'] for data in serializer)
|
||
#
|
||
# value_header_list = [
|
||
# len(natcpdes),
|
||
# len(transactions),
|
||
# cur_heavy,
|
||
# cur_light,
|
||
# cur_weight,
|
||
# price,
|
||
# cooperative_price,
|
||
# union_price,
|
||
#
|
||
# ]
|
||
# create_value(worksheet, value_header_list, 4, 5)
|
||
#
|
||
# list2 = [
|
||
# 'مجموع==>',
|
||
# '',
|
||
# '',
|
||
# '',
|
||
# len(transactions),
|
||
# cur_heavy,
|
||
# cur_light,
|
||
# cur_weight,
|
||
# price,
|
||
# cooperative_price,
|
||
# union_price,
|
||
#
|
||
# ]
|
||
# create_value(worksheet, list2, l + 3, 1, color='green')
|
||
for name in sheet_names[1:]:
|
||
last_part = name.rsplit(' ', 3)[-3:]
|
||
new_name = ' '.join(last_part)
|
||
sheet_name = new_name
|
||
worksheet = workbook.create_sheet(sheet_name)
|
||
worksheet.sheet_view.rightToLeft = True
|
||
worksheet.insert_rows(1)
|
||
excel_options = [
|
||
'ردیف',
|
||
'تاریخ',
|
||
'خریدار',
|
||
'کد ملی خریدار',
|
||
'موبایل خریدار',
|
||
'فروشنده',
|
||
'تلفن فروشنده',
|
||
'وضعیت',
|
||
'محل تحویل',
|
||
'کالا',
|
||
'کد ملی فروشنده',
|
||
'دام سنگین',
|
||
'دام سبک',
|
||
'وزن(کیلوگرم)',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم تعاونی(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
|
||
]
|
||
header_list = [
|
||
'تعداد تراکنش ها',
|
||
'مجموع دام سنگین',
|
||
'مجموع دام سبک',
|
||
|
||
'مجموع وزن(کیلوگرم)',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم تعاونی(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
|
||
]
|
||
cooperative = Cooperative.objects.get(name=name)
|
||
transactions = PosMachineTransactions.objects.filter(pos__cooperative=cooperative, trash=False,
|
||
live_stock=True,paid=True).order_by('-date')
|
||
|
||
|
||
|
||
serializer = PosMachineTransactionsForLiveStockSerializer(transactions, many=True).data
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
from_date1 = shamsi_date(date1)
|
||
to_date1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='D3')
|
||
|
||
create_header(worksheet, header_list, 5, 3, height=20)
|
||
|
||
excel_description(worksheet, 'A1', f' تراکنش های موفق {name}', color='red', row2='D1')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
l = 5
|
||
m = 1
|
||
if serializer:
|
||
for data in serializer:
|
||
date = datetime.strptime(str(data['date']), '%Y-%m-%dT%H:%M:%S.%f')
|
||
|
||
additional_str = data.get('additional')
|
||
if additional_str in [None, '', 'null', 'undefined']:
|
||
additional = {}
|
||
else:
|
||
try:
|
||
additional = json.loads(additional_str)
|
||
except (json.JSONDecodeError, TypeError):
|
||
additional = {}
|
||
|
||
if additional.get('isTaavoni'):
|
||
tavanoni = 'تعاونی' if additional['isTaavoni'] == True else 'کارخانه'
|
||
else:
|
||
tavanoni = '-'
|
||
list1 = [
|
||
m,
|
||
str(convert_to_shamsi(datetime=date)),
|
||
data['fullname'],
|
||
data['natcode'],
|
||
data['mobile'],
|
||
data['pos']['cooperative']['name'] + '(' + data['pos']['cooperative']['user']['fullname'] + ')',
|
||
data['pos']['cooperative']['user']['mobile'],
|
||
data['result'],
|
||
tavanoni,
|
||
data['products'][0]['name'],
|
||
data['natcode'],
|
||
additional.get('cur_heavy', 0),
|
||
additional.get('cur_light', 0),
|
||
data['products'][0]['cur_weight'],
|
||
data['price'],
|
||
additional.get('cooperative_price', 0),
|
||
additional.get('union_price', 0),
|
||
]
|
||
m += 1
|
||
l += 1
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
|
||
cur_heavy = sum(safe_get_additional(data).get('cur_heavy', 0) for data in serializer)
|
||
cur_light = sum(safe_get_additional(data).get('cur_light', 0) for data in serializer)
|
||
cooperative_price = sum(safe_get_additional(data).get('cooperative_price', 0) for data in serializer)
|
||
union_price = sum(safe_get_additional(data).get('union_price', 0) for data in serializer)
|
||
cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
price = sum(data['price'] for data in serializer)
|
||
|
||
value_header_list = [
|
||
len(transactions),
|
||
cur_heavy,
|
||
cur_light,
|
||
cur_weight,
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 5)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
cur_heavy,
|
||
cur_light,
|
||
cur_weight,
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
|
||
]
|
||
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 fix_rancher(request):
|
||
ransactions = PosMachineTransactions.objects.filter(trash=False,
|
||
live_stock=True, paid=True,
|
||
).values_list('natcode',flat=True).distinct()
|
||
|
||
ranchers=Rancher.objects.filter(trash=False,national_id__in=ransactions,has_script=False)
|
||
|
||
for r in ranchers:
|
||
update_one_rancher(r)
|
||
|
||
return HttpResponse('ok')
|
||
|
||
|
||
def rancher_management(request):
|
||
|
||
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')
|
||
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'دامدار',
|
||
'مجوز فعالیت',
|
||
'کدملی دامدار',
|
||
'تلفن دامدار',
|
||
'شهر',
|
||
'مجموع دام سنگین هویت',
|
||
'مجموع دام سبک هویت',
|
||
'مجموع سهمیه دام سنگین(کیلوگرم)',
|
||
'مجموع سهمیه دام سبک(کیلوگرم)',
|
||
'فروشنده',
|
||
'تلفن فروشنده',
|
||
'کد ملی فروشنده',
|
||
'تعداد تراکنش ها',
|
||
'تاریخ تراکنش ها',
|
||
'مجموع دام سنگین',
|
||
'مجموع دام سبک',
|
||
|
||
'مجموع وزن(کیلوگرم)',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم تعاونی(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
|
||
]
|
||
header_list = [
|
||
'تعداد دامداران',
|
||
'تعداد تراکنش ها',
|
||
'مجموع دام سنگین هویت',
|
||
'مجموع دام سبک هویت',
|
||
'مجموع سهمیه دام سنگین(کیلوگرم)',
|
||
'مجموع سهمیه دام سبک(کیلوگرم)',
|
||
'مجموع دام سنگین(واقعی)',
|
||
'مجموع دام سبک(واقعی)',
|
||
'مجموع وزن(کیلوگرم)',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم تعاونی(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
|
||
]
|
||
ransactions = PosMachineTransactions.objects.filter(trash=False,
|
||
live_stock=True, paid=True,
|
||
).order_by('id')
|
||
natcpdes = ransactions.values_list('natcode',flat=True).distinct()
|
||
|
||
ranchers=Rancher.objects.filter(trash=False,national_id__in=natcpdes,has_script=True).only('name','national_id',
|
||
'heavy_livestock','light_livestock','city','mobile')
|
||
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
from_date1 = shamsi_date(date1)
|
||
to_date1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='D3')
|
||
|
||
create_header(worksheet, header_list, 5, 3, height=20)
|
||
|
||
excel_description(worksheet, 'A1', f'دامداران مغایرت دار', color='red', row2='D1')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
l = 5
|
||
m = 1
|
||
if ranchers:
|
||
for rancher in ranchers:
|
||
transactions = ransactions.filter(natcode=rancher.national_id).order_by('id')
|
||
|
||
serializer = PosMachineTransactionsForLiveStockSerializer(transactions, many=True).data
|
||
cur_heavy = sum(safe_get_additional(data).get('cur_heavy', 0) for data in serializer)
|
||
cur_light = sum(safe_get_additional(data).get('cur_light', 0) for data in serializer)
|
||
cooperative_price = sum(safe_get_additional(data).get('cooperative_price', 0) for data in serializer)
|
||
union_price = sum(safe_get_additional(data).get('union_price', 0) for data in serializer)
|
||
cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
price = sum(data['price'] for data in serializer)
|
||
|
||
cooperative_list_name = list({data['pos']['cooperative']['name'] for data in serializer})
|
||
cooperative_list_mobile = list({data['pos']['cooperative']['user']['mobile'] for data in serializer})
|
||
natcode_list = list({data['natcode'] for data in serializer})
|
||
|
||
cooperative_names_str = ' / '.join(cooperative_list_name) if cooperative_list_name else ''
|
||
cooperative_mobiles_str = ' / '.join(cooperative_list_mobile) if cooperative_list_mobile else ''
|
||
natcode_list_str = ' / '.join(natcode_list) if natcode_list else ''
|
||
|
||
date_list=[]
|
||
for data in serializer:
|
||
date = datetime.strptime(str(data['date']), '%Y-%m-%dT%H:%M:%S.%f')
|
||
date_list.append(str(convert_to_shamsi(datetime=date)))
|
||
date_str = ' / '.join(date_list) if date_list else ''
|
||
type_rancher='روستایی' if rancher.type=='rural' else 'صنعتی'
|
||
list1 = [
|
||
m,
|
||
rancher.name,
|
||
type_rancher,
|
||
rancher.national_id,
|
||
rancher.mobile,
|
||
rancher.city,
|
||
rancher.heavy_livestock,
|
||
rancher.light_livestock,
|
||
rancher.weight_quota_heavy,
|
||
rancher.weight_quota_light,
|
||
cooperative_names_str,
|
||
cooperative_mobiles_str,
|
||
natcode_list_str,
|
||
len(transactions),
|
||
date_str,
|
||
cur_heavy,
|
||
cur_light,
|
||
|
||
cur_weight,
|
||
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
|
||
]
|
||
l += 1
|
||
m += 1
|
||
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
transactions = ransactions
|
||
|
||
serializer = PosMachineTransactionsForLiveStockSerializer(transactions, many=True).data
|
||
cur_heavy = sum(safe_get_additional(data).get('cur_heavy', 0) for data in serializer)
|
||
cur_light = sum(safe_get_additional(data).get('cur_light', 0) for data in serializer)
|
||
cooperative_price = sum(safe_get_additional(data).get('cooperative_price', 0) for data in serializer)
|
||
union_price = sum(safe_get_additional(data).get('union_price', 0) for data in serializer)
|
||
cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
price = sum(data['price'] for data in serializer)
|
||
heavy_livestock = ranchers.aggregate(total=Sum('heavy_livestock'))[
|
||
'total'] or 0
|
||
light_livestock = ranchers.aggregate(total=Sum('light_livestock'))[
|
||
'total'] or 0
|
||
weight_quota_light = ranchers.aggregate(total=Sum('weight_quota_light'))[
|
||
'total'] or 0
|
||
weight_quota_heavy = ranchers.aggregate(total=Sum('weight_quota_heavy'))[
|
||
'total'] or 0
|
||
value_header_list = [
|
||
len(natcpdes),
|
||
len(transactions),
|
||
cur_heavy,
|
||
cur_light,
|
||
heavy_livestock,
|
||
light_livestock,
|
||
weight_quota_heavy,
|
||
weight_quota_light,
|
||
|
||
cur_weight,
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 5)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
heavy_livestock,
|
||
light_livestock,
|
||
weight_quota_heavy,
|
||
weight_quota_light,
|
||
'',
|
||
'',
|
||
'',
|
||
len(transactions),
|
||
'',
|
||
cur_heavy,
|
||
cur_light,
|
||
|
||
cur_weight,
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
|
||
]
|
||
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 gasgdasd(request):
|
||
ransactions = PosMachineTransactions.objects.filter(trash=False,
|
||
live_stock=True, paid=True,
|
||
).order_by('id')
|
||
natcpdes = ransactions.values_list('natcode', flat=True).distinct()
|
||
|
||
ranchers = Rancher.objects.filter(trash=False, national_id__in=natcpdes,has_script=False).only('name', 'national_id',
|
||
'heavy_livestock', 'light_livestock',
|
||
'city', 'mobile')
|
||
for r in ranchers:
|
||
update_one_rancher(r)
|
||
|
||
return HttpResponse('ok')
|
||
|
||
|
||
def live_stock_product_excel(request):
|
||
|
||
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')
|
||
|
||
|
||
excel_options = [
|
||
'ردیف',
|
||
'دامدار',
|
||
'مجوز فعالیت',
|
||
'کدملی دامدار',
|
||
'تلفن دامدار',
|
||
'شهر',
|
||
'مجموع دام سنگین هویت',
|
||
'مجموع دام سبک هویت',
|
||
'مجموع سهمیه دام سنگین(کیلوگرم)',
|
||
'مجموع سهمیه دام سبک(کیلوگرم)',
|
||
'فروشنده',
|
||
'تلفن فروشنده',
|
||
'کد ملی فروشنده',
|
||
'تعداد تراکنش ها',
|
||
'تاریخ تراکنش ها',
|
||
'مجموع دام سنگین',
|
||
'مجموع دام سبک',
|
||
|
||
'مجموع وزن(کیلوگرم)',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم تعاونی(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
|
||
]
|
||
header_list = [
|
||
'تعداد دامداران',
|
||
'تعداد تراکنش ها',
|
||
'مجموع دام سنگین هویت',
|
||
'مجموع دام سبک هویت',
|
||
'مجموع سهمیه دام سنگین(کیلوگرم)',
|
||
'مجموع سهمیه دام سبک(کیلوگرم)',
|
||
'مجموع دام سنگین(واقعی)',
|
||
'مجموع دام سبک(واقعی)',
|
||
'مجموع وزن(کیلوگرم)',
|
||
'مبلغ تراکنش(ریال)',
|
||
'سهم تعاونی(ریال)',
|
||
'سهم اتحادیه(ریال)',
|
||
|
||
]
|
||
ransactions = PosMachineTransactions.objects.filter(trash=False,
|
||
live_stock=True, paid=True,
|
||
).order_by('id')
|
||
natcpdes = ransactions.values_list('natcode',flat=True).distinct()
|
||
|
||
ranchers=Rancher.objects.filter(trash=False,national_id__in=natcpdes,has_script=True).only('name','national_id',
|
||
'heavy_livestock','light_livestock','city','mobile')
|
||
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
from_date1 = shamsi_date(date1)
|
||
to_date1 = shamsi_date(date2)
|
||
excel_description(worksheet, 'B2', f'از تاریخ {from_date1} تا {to_date1}', color='red', row2='D3')
|
||
|
||
create_header(worksheet, header_list, 5, 3, height=20)
|
||
|
||
excel_description(worksheet, 'A1', f'دامداران مغایرت دار', color='red', row2='D1')
|
||
|
||
create_header_freez(worksheet, excel_options, 1, 6, 7, height=22)
|
||
|
||
l = 5
|
||
m = 1
|
||
if ranchers:
|
||
for rancher in ranchers:
|
||
transactions = ransactions.filter(natcode=rancher.national_id).order_by('id')
|
||
|
||
serializer = PosMachineTransactionsForLiveStockSerializer(transactions, many=True).data
|
||
cur_heavy = sum(safe_get_additional(data).get('cur_heavy', 0) for data in serializer)
|
||
cur_light = sum(safe_get_additional(data).get('cur_light', 0) for data in serializer)
|
||
cooperative_price = sum(safe_get_additional(data).get('cooperative_price', 0) for data in serializer)
|
||
union_price = sum(safe_get_additional(data).get('union_price', 0) for data in serializer)
|
||
cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
price = sum(data['price'] for data in serializer)
|
||
|
||
cooperative_list_name = list({data['pos']['cooperative']['name'] for data in serializer})
|
||
cooperative_list_mobile = list({data['pos']['cooperative']['user']['mobile'] for data in serializer})
|
||
natcode_list = list({data['natcode'] for data in serializer})
|
||
|
||
cooperative_names_str = ' / '.join(cooperative_list_name) if cooperative_list_name else ''
|
||
cooperative_mobiles_str = ' / '.join(cooperative_list_mobile) if cooperative_list_mobile else ''
|
||
natcode_list_str = ' / '.join(natcode_list) if natcode_list else ''
|
||
|
||
date_list=[]
|
||
for data in serializer:
|
||
date = datetime.strptime(str(data['date']), '%Y-%m-%dT%H:%M:%S.%f')
|
||
date_list.append(str(convert_to_shamsi(datetime=date)))
|
||
date_str = ' / '.join(date_list) if date_list else ''
|
||
type_rancher='روستایی' if rancher.type=='rural' else 'صنعتی'
|
||
list1 = [
|
||
m,
|
||
rancher.name,
|
||
type_rancher,
|
||
rancher.national_id,
|
||
rancher.mobile,
|
||
rancher.city,
|
||
rancher.heavy_livestock,
|
||
rancher.light_livestock,
|
||
rancher.weight_quota_heavy,
|
||
rancher.weight_quota_light,
|
||
cooperative_names_str,
|
||
cooperative_mobiles_str,
|
||
natcode_list_str,
|
||
len(transactions),
|
||
date_str,
|
||
cur_heavy,
|
||
cur_light,
|
||
|
||
cur_weight,
|
||
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
|
||
]
|
||
l += 1
|
||
m += 1
|
||
|
||
create_value(worksheet, list1, l + 1, 1, border_style='thin')
|
||
transactions = ransactions
|
||
|
||
serializer = PosMachineTransactionsForLiveStockSerializer(transactions, many=True).data
|
||
cur_heavy = sum(safe_get_additional(data).get('cur_heavy', 0) for data in serializer)
|
||
cur_light = sum(safe_get_additional(data).get('cur_light', 0) for data in serializer)
|
||
cooperative_price = sum(safe_get_additional(data).get('cooperative_price', 0) for data in serializer)
|
||
union_price = sum(safe_get_additional(data).get('union_price', 0) for data in serializer)
|
||
cur_weight = sum(data['products'][0].get('cur_weight', 0) for data in serializer)
|
||
price = sum(data['price'] for data in serializer)
|
||
heavy_livestock = ranchers.aggregate(total=Sum('heavy_livestock'))[
|
||
'total'] or 0
|
||
light_livestock = ranchers.aggregate(total=Sum('light_livestock'))[
|
||
'total'] or 0
|
||
weight_quota_light = ranchers.aggregate(total=Sum('weight_quota_light'))[
|
||
'total'] or 0
|
||
weight_quota_heavy = ranchers.aggregate(total=Sum('weight_quota_heavy'))[
|
||
'total'] or 0
|
||
value_header_list = [
|
||
len(natcpdes),
|
||
len(transactions),
|
||
cur_heavy,
|
||
cur_light,
|
||
heavy_livestock,
|
||
light_livestock,
|
||
weight_quota_heavy,
|
||
weight_quota_light,
|
||
|
||
cur_weight,
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
|
||
]
|
||
create_value(worksheet, value_header_list, 4, 5)
|
||
|
||
list2 = [
|
||
'مجموع==>',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
'',
|
||
heavy_livestock,
|
||
light_livestock,
|
||
weight_quota_heavy,
|
||
weight_quota_light,
|
||
'',
|
||
'',
|
||
'',
|
||
len(transactions),
|
||
'',
|
||
cur_heavy,
|
||
cur_light,
|
||
|
||
cur_weight,
|
||
price,
|
||
cooperative_price,
|
||
union_price,
|
||
|
||
]
|
||
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
|