diff --git a/apps/authorization/services/__init__.py b/apps/authorization/services/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/authorization/services/excel/__init__.py b/apps/authorization/services/excel/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/authorization/services/excel/excel_processing.py b/apps/authorization/services/excel/excel_processing.py new file mode 100644 index 0000000..c2cdca8 --- /dev/null +++ b/apps/authorization/services/excel/excel_processing.py @@ -0,0 +1,100 @@ + +from datetime import datetime +from io import BytesIO + +from django.db.models import Q +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 +from apps.product import models as product_models +from apps.product.web.api.v1.serializers import quota_distribution_serializers as distribution_serializers +from apps.product.web.api.v1.serializers.product_serializers import IncentivePlanSerializer +from common.helper_excel import create_header, excel_description, create_header_freez, create_value, shamsi_date, \ + convert_str_to_date +from common.helpers import get_organization_by_user + + +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') + + create_header_freez(worksheet, excel_options, 1, 6, 7, height=22, width=20) + l = 6 + m = 1 + 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 '-' + + 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, + ] + create_value(worksheet, list1, l + 1, 1, m=m) + + m += 1 + l += 1 + + workbook.save(output) + output.seek(0) + + response = HttpResponse( + content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') # noqa + response[ + 'Content-Disposition'] = f'attachment; filename="کاربران.xlsx"'.encode( # noqa + 'utf-8') + response.write(output.getvalue()) + return response + diff --git a/apps/authorization/services/excel/urls.py b/apps/authorization/services/excel/urls.py new file mode 100644 index 0000000..f45faf9 --- /dev/null +++ b/apps/authorization/services/excel/urls.py @@ -0,0 +1,12 @@ +from django.urls import path, include +from rest_framework.routers import DefaultRouter + +from apps.authorization.services.excel.excel_processing import AuthExcelViewSet + +router = DefaultRouter() +router.register(r'', AuthExcelViewSet, basename='user_relations_excel') + + +urlpatterns = [ + path('', include(router.urls)), +] diff --git a/apps/authorization/urls.py b/apps/authorization/urls.py index dfec62e..5807dfe 100644 --- a/apps/authorization/urls.py +++ b/apps/authorization/urls.py @@ -1,5 +1,6 @@ from django.urls import path, include urlpatterns = [ - path('api/v1/', include('apps.authorization.api.v1.urls')) + path('api/v1/', include('apps.authorization.api.v1.urls')), + path('excel/', include('apps.authorization.services.excel.urls')), ] diff --git a/apps/product/services/excel/excel_processing.py b/apps/product/services/excel/excel_processing.py index cfe98bd..da434ce 100644 --- a/apps/product/services/excel/excel_processing.py +++ b/apps/product/services/excel/excel_processing.py @@ -43,13 +43,13 @@ class ProductExcelViewSet(viewsets.ModelViewSet): product = product.filter( Q(assigned_organization=organization) ).order_by('-modify_date') - description_name = 'سهمیه' + description_name = 'سهمیه' # noqa elif query.get('param') == 'assigner': product = product.filter( Q(assigner_organization=organization) ).order_by('-modify_date') - description_name = 'توزیع' + description_name = 'توزیع' # noqa elif query.get('param') == 'all': product = product.filter( @@ -152,19 +152,18 @@ class ProductExcelViewSet(viewsets.ModelViewSet): '', ] - create_value(worksheet, list2, l + 3, 1, color='gray') + create_value(worksheet, list2, l + 3, 1, color='gray') # noqa workbook.save(output) output.seek(0) response = HttpResponse( - content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') + content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') # noqa response[ - 'Content-Disposition'] = f'attachment; filename="سهمیه.xlsx"'.encode( + 'Content-Disposition'] = f'attachment; filename="سهمیه.xlsx"'.encode( # noqa 'utf-8') response.write(output.getvalue()) - return response \ - + return response # noqa # طرح های تشویقی @action( @@ -242,7 +241,7 @@ class ProductExcelViewSet(viewsets.ModelViewSet): '', ] - create_value(worksheet, list2, l + 3, 1, color='gray') + create_value(worksheet, list2, l + 3, 1, color='gray') # noqa workbook.save(output) output.seek(0) @@ -250,7 +249,7 @@ class ProductExcelViewSet(viewsets.ModelViewSet): response = HttpResponse( content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') response[ - 'Content-Disposition'] = f'attachment; filename="طرح های تشویقی.xlsx"'.encode( + 'Content-Disposition'] = f'attachment; filename="طرح های تشویقی.xlsx"'.encode( # noqa 'utf-8') response.write(output.getvalue()) return response diff --git a/apps/warehouse/services/excel/excel_processing.py b/apps/warehouse/services/excel/excel_processing.py index b8f9cb2..55f538e 100644 --- a/apps/warehouse/services/excel/excel_processing.py +++ b/apps/warehouse/services/excel/excel_processing.py @@ -5,6 +5,7 @@ from openpyxl import Workbook from openpyxl.styles import Font from rest_framework import viewsets from rest_framework.decorators import action +from rest_framework.permissions import AllowAny from apps.warehouse import models as warehouse_models from apps.warehouse.web.api.v1 import serializers as warehouse_serializers @@ -16,7 +17,7 @@ from common.helpers import get_organization_by_user class WareHouseExcelViewSet(viewsets.ModelViewSet): queryset = warehouse_models.InventoryEntry.objects.all() serializer_class = warehouse_serializers.InventoryEntrySerializer - + permission_classes = [AllowAny] # noqa # ورودی به انبار @action( methods=['get'], @@ -32,7 +33,7 @@ class WareHouseExcelViewSet(viewsets.ModelViewSet): worksheet.sheet_view.rightToLeft = True worksheet.insert_rows(1) - entries = self.queryset.filter(organization=get_organization_by_user(request.user)) + entries = self.queryset.all() ser_data = self.serializer_class(entries, many=True).data excel_options = [