Files
RasadDam_Backend/apps/authorization/services/excel/excel_processing.py

121 lines
4.7 KiB
Python
Raw Normal View History

2025-07-31 16:21:39 +03:30
from io import BytesIO
from django.http import HttpResponse
from openpyxl import Workbook
from rest_framework import viewsets
from rest_framework.decorators import action
from apps.authorization.api.v1.serializers import UserRelationSerializer
from apps.authorization.models import UserRelations
2025-08-02 08:21:04 +03:30
from common.helper_excel import excel_description, create_header_freez, create_value
2025-07-31 16:21:39 +03:30
class AuthExcelViewSet(viewsets.ModelViewSet):
queryset = UserRelations.objects.all()
serializer_class = UserRelationSerializer
# noqa # کاربران
@action(
methods=['get'],
detail=False,
url_path='user_relations_excel',
url_name='user_relations_excel',
name='user_relations_excel'
)
def user_relations_excel(self, request):
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
queryset = self.filter_queryset(self.get_queryset().order_by('-create_date')) # noqa
ser_data = self.get_serializer(queryset, many=True).data
excel_options = [
"ردیف",
"نام کاربری",
"نام",
"نام خانوادگی",
"سازمان",
"نقش",
"موبایل",
"کد ملی",
"استان/شهر",
"آدرس",
"وضعیت",
"دسترسی ها"
]
excel_description(worksheet, 'B1', f'کاربران', row2='C3')
2025-08-02 08:21:04 +03:30
create_header_freez(worksheet, excel_options, 1, 6, 7, height=25, width=20)
2025-07-31 16:21:39 +03:30
l = 6
m = 1
2025-08-02 07:36:21 +03:30
fa_permissions_dict = {
"permission_control": "مدیریت دسترسی",
"users": "کاربران",
"organizations": "سازمان ها",
"roles_management": "مدیریت نقش",
"feed_input_products": "محصولات",
"product_categories": "دسته بندی محصولات",
"pricing": "قیمت گذاری",
"incentive_plans": "طرح های تشویقی",
"quota": "سهم بندی",
"quota_distributions": "صفحه توزیع سهمیه",
"inventory": "انبار"
}
2025-07-31 16:21:39 +03:30
if ser_data:
for data in ser_data:
is_active = 'فعال' if (data.get('user') or {}).get('is_active', False) else 'غیرفعال'
city = str((data.get('user') or {}).get('city_name', '')) or '-'
province = str((data.get('user') or {}).get('province_name', '')) or '-'
city_province = f"{city}/{province}" if city != '-' or province != '-' else '-'
2025-08-02 07:54:12 +03:30
try:
if data.get('permissions') and isinstance(data['permissions'], list):
permission_names = []
for perm in data['permissions']:
if isinstance(perm, dict) and 'page_name' in perm:
permission_names.append(perm['page_name'])
fa_permissions = [fa_permissions_dict.get(name, name) for name in permission_names]
fa_permission_text = ' - '.join(fa_permissions) if fa_permissions else '-'
else:
fa_permission_text = '-'
except (KeyError, TypeError):
fa_permission_text = '-'
2025-07-31 16:21:39 +03:30
list1 = [
m,
(data.get('user') or {}).get('username', '') or '-',
(data.get('user') or {}).get('first_name', '') or '-',
(data.get('user') or {}).get('last_name', '') or '-',
(data.get('organization') or {}).get('name', '') or '-',
(data.get('role') or {}).get('role_name', '') or '-',
str((data.get('user') or {}).get('mobile', '')) or '-',
str((data.get('user') or {}).get('national_code', '')) or '-',
city_province,
str((data.get('user') or {}).get('address', '')) or '-',
is_active,
2025-08-02 07:36:21 +03:30
fa_permission_text
2025-07-31 16:21:39 +03:30
]
2025-08-02 08:54:02 +03:30
create_value(worksheet, list1, l + 1, 1, m=m)
2025-07-31 16:21:39 +03:30
m += 1
l += 1
workbook.save(output)
output.seek(0)
response = HttpResponse(
2025-08-02 08:21:04 +03:30
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') # noqa
2025-07-31 16:21:39 +03:30
response[
2025-08-02 08:21:04 +03:30
'Content-Disposition'] = f'attachment; filename="کاربران.xlsx"'.encode( # noqa
2025-07-31 16:21:39 +03:30
'utf-8')
response.write(output.getvalue())
return response