Código fuente para sga.api.sga_components_viewsets

from django.conf import settings
from django.http import JsonResponse, QueryDict
from django.contrib.admin.models import ADDITION, DELETION, CHANGE
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import mixins, viewsets, status
from rest_framework.authentication import SessionAuthentication, BaseAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import get_object_or_404
from rest_framework.exceptions import PermissionDenied
from rest_framework.response import Response
from rest_framework.pagination import LimitOffsetPagination
from rest_framework.filters import SearchFilter, OrderingFilter
from django.utils.translation import gettext_lazy as _

from sga.models import WarningWord, DangerIndication, PrudenceAdvice
from sga.api.serializers import WarningWordSerializer, WarningWordDataTableSerializer, \
    DangerIndicationSerializer, DangerIndicationDataTableSerializer, \
    PrudenceAdviceSerializer, PrudenceAdviceDataTableSerializer
from laboratory.models import OrganizationStructure
from auth_and_perms.organization_utils import user_is_allowed_on_organization
from laboratory.utils import organilab_logentry
from sga.views.substance.forms import WarningWordForm, DangerIndicationForm, \
    PrudenceAdviceForm


[documentos]class WarningWordTableView(mixins.ListModelMixin, viewsets.GenericViewSet): permission_classes = [IsAuthenticated] authentication_classes = [SessionAuthentication] serializer_class = WarningWordDataTableSerializer queryset = WarningWord.objects.all() pagination_class = LimitOffsetPagination filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] search_fields = ['name', 'weigth'] filterset_fields = ['name', 'weigth'] ordering_fields = ['weigth'] permissions_by_endpoint = { "list": ["sga.view_warningword"] } def _check_permission_on_organization(self, request, org_pk, method_name): if request.user.has_perms(self.permissions_by_endpoint[method_name]): self.organization = get_object_or_404( OrganizationStructure.objects.using(settings.READONLY_DATABASE), pk=org_pk ) user_is_allowed_on_organization(request.user, self.organization) else: raise PermissionDenied() def list(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') recordsTotal = self.get_queryset().count() queryset = self.filter_queryset(self.get_queryset()) data = self.paginate_queryset(queryset) response = {'data': data, 'recordsTotal': recordsTotal, 'recordsFiltered': queryset.count(), 'draw': self.request.GET.get('draw', 1)} return Response(self.get_serializer(response).data)
[documentos]class WarningWordAPI(mixins.ListModelMixin, viewsets.GenericViewSet): authentication_classes = [SessionAuthentication, BaseAuthentication] permission_classes = [IsAuthenticated] queryset = WarningWord.objects.all() serializer_class = WarningWordSerializer permissions_by_endpoint = { "create": ["sga.view_warningword", "sga.add_warningword"], "list": ["sga.view_warningword"], "update": ["sga.view_warningword", "sga.change_warningword"], "destroy": ["sga.view_warningword", "sga.delete_warningword"] } def _check_permission_on_organization(self, request, org_pk, method_name): if request.user.has_perms(self.permissions_by_endpoint[method_name]): self.organization = get_object_or_404( OrganizationStructure.objects.using(settings.READONLY_DATABASE), pk=org_pk ) user_is_allowed_on_organization(request.user, self.organization) else: raise PermissionDenied() def retrieve(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') if pk: warning_word = get_object_or_404(WarningWord, pk=pk) serializer = self.get_serializer(warning_word) return Response(serializer.data, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST) def create(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, "create") form = WarningWordForm(request.POST) if form.is_valid(): warning_word = form.save() organilab_logentry(request.user, warning_word, ADDITION, 'warning word', relobj=[self.organization], changed_data=form.changed_data) return JsonResponse({"detail": _("Item created successfully.")}, status=status.HTTP_201_CREATED) return JsonResponse(status=status.HTTP_400_BAD_REQUEST) def list(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') queryset = self.get_queryset().order_by('weigth') page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return JsonResponse({'data': serializer.data}) def update(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'update') if pk: warning_word = get_object_or_404(WarningWord, pk=pk) form = WarningWordForm(request.data, instance=warning_word) if form.is_valid(): warning_word = form.save() organilab_logentry(request.user, warning_word, CHANGE, 'warning word', relobj=[self.organization], changed_data=form.changed_data) return JsonResponse({"detail": _("Item updated successfully.")}, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST) def destroy(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'destroy') if pk: warning_word = get_object_or_404(WarningWord, pk=pk) organilab_logentry(request.user, warning_word, DELETION, 'warning word', relobj=[self.organization]) warning_word.delete() return JsonResponse({'detail': _('Item deleted successfully.')}, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST)
[documentos]class DangerIndicationTableView(mixins.ListModelMixin, viewsets.GenericViewSet): permission_classes = [IsAuthenticated] authentication_classes = [SessionAuthentication] serializer_class = DangerIndicationDataTableSerializer queryset = DangerIndication.objects.all() pagination_class = LimitOffsetPagination filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] search_fields = ['code', 'description', 'warning_words__name'] filterset_fields = ['code', 'description', 'warning_words__name'] ordering_fields = ['code'] permissions_by_endpoint = { "list": ["sga.view_dangerindication"] } def _check_permission_on_organization(self, request, org_pk, method_name): if request.user.has_perms(self.permissions_by_endpoint[method_name]): self.organization = get_object_or_404( OrganizationStructure.objects.using(settings.READONLY_DATABASE), pk=org_pk ) user_is_allowed_on_organization(request.user, self.organization) else: raise PermissionDenied() def list(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') recordsTotal = self.get_queryset().count() queryset = self.filter_queryset(self.get_queryset()) data = self.paginate_queryset(queryset) response = {'data': data, 'recordsTotal': recordsTotal, 'recordsFiltered': queryset.count(), 'draw': self.request.GET.get('draw', 1)} return Response(self.get_serializer(response).data)
[documentos]class DangerIndicationAPI(mixins.ListModelMixin, viewsets.GenericViewSet): authentication_classes = [SessionAuthentication, BaseAuthentication] permission_classes = [IsAuthenticated] queryset = DangerIndication.objects.all() serializer_class = DangerIndicationSerializer permissions_by_endpoint = { "create": ["sga.view_dangerindication", "sga.add_dangerindication"], "list": ["sga.view_dangerindication"], "update": ["sga.view_dangerindication", "sga.change_dangerindication"], "destroy": ["sga.view_dangerindication", "sga.delete_dangerindication"] } def _check_permission_on_organization(self, request, org_pk, method_name): if request.user.has_perms(self.permissions_by_endpoint[method_name]): self.organization = get_object_or_404( OrganizationStructure.objects.using(settings.READONLY_DATABASE), pk=org_pk ) user_is_allowed_on_organization(request.user, self.organization) else: raise PermissionDenied() def retrieve(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') if pk: danger_indication = get_object_or_404(DangerIndication, pk=pk) serializer = self.get_serializer(danger_indication) return Response(serializer.data, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST) def create(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'create') form = DangerIndicationForm(request.POST) if form.is_valid(): danger_indication = form.save() organilab_logentry(request.user, danger_indication, ADDITION, 'danger indication', relobj=[self.organization], changed_data=form.changed_data) return JsonResponse({"detail": _("Item created successfully.")}, status=status.HTTP_201_CREATED) return JsonResponse(status=status.HTTP_400_BAD_REQUEST) def list(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') queryset = self.get_queryset().order_by('code') page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return JsonResponse({'data': serializer.data}) def update(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'update') if pk: danger_indication = get_object_or_404(DangerIndication, pk=pk) form = DangerIndicationForm(request.data, instance=danger_indication) if form.is_valid(): danger_indication = form.save() organilab_logentry(request.user, danger_indication, CHANGE, 'danger indication', relobj=[self.organization], changed_data=form.changed_data) return JsonResponse({'detail': _('Item updated successfully.')}, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST) def destroy(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'destroy') if pk: danger_indication = get_object_or_404(DangerIndication, pk=pk) organilab_logentry(request.user, danger_indication, DELETION, 'danger indication', relobj=[self.organization]) danger_indication.delete() return JsonResponse({'detail': _('Item deleted successfully.')}, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST)
[documentos]class PrudenceAdviceTableView(mixins.ListModelMixin, viewsets.GenericViewSet): permission_classes = [IsAuthenticated] authentication_classes = [SessionAuthentication] serializer_class = PrudenceAdviceDataTableSerializer queryset = PrudenceAdvice.objects.all() pagination_class = LimitOffsetPagination filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] search_fields = ['code', 'name', 'prudence_advice_help'] filterset_fields = ['code', 'name', 'prudence_advice_help'] ordering_fields = ['code'] permissions_by_endpoint = { "list": ["sga.view_prudenceadvice"] } def _check_permission_on_organization(self, request, org_pk, method_name): if request.user.has_perms(self.permissions_by_endpoint[method_name]): self.organization = get_object_or_404( OrganizationStructure.objects.using(settings.READONLY_DATABASE), pk=org_pk ) user_is_allowed_on_organization(request.user, self.organization) else: raise PermissionDenied() def list(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') recordsTotal = self.get_queryset().count() queryset = self.filter_queryset(self.get_queryset()) data = self.paginate_queryset(queryset) response = {'data': data, 'recordsTotal': recordsTotal, 'recordsFiltered': queryset.count(), 'draw': self.request.GET.get('draw', 1)} return Response(self.get_serializer(response).data)
[documentos]class PrudenceAdviceAPI(mixins.ListModelMixin, viewsets.GenericViewSet): authentication_classes = [SessionAuthentication, BaseAuthentication] permission_classes = [IsAuthenticated] queryset = PrudenceAdvice.objects.all() serializer_class = PrudenceAdviceSerializer permissions_by_endpoint = { "create": ["sga.view_prudenceadvice", "sga.add_prudenceadvice"], "list": ["sga.view_prudenceadvice"], "update": ["sga.view_prudenceadvice", "sga.change_prudenceadvice"], "destroy": ["sga.view_prudenceadvice", "sga.delete_prudenceadvice"] } def _check_permission_on_organization(self, request, org_pk, method_name): if request.user.has_perms(self.permissions_by_endpoint[method_name]): self.organization = get_object_or_404( OrganizationStructure.objects.using(settings.READONLY_DATABASE), pk=org_pk ) user_is_allowed_on_organization(request.user, self.organization) else: raise PermissionDenied() def retrieve(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') if pk: prudence_advice = get_object_or_404(PrudenceAdvice, pk=pk) serializer = self.get_serializer(prudence_advice) return Response(serializer.data, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST) def create(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'create') form = PrudenceAdviceForm(request.POST) if form.is_valid(): prudence_advice = form.save() organilab_logentry(request.user, prudence_advice, ADDITION, 'prudence advice', relobj=[self.organization], changed_data=form.changed_data) return JsonResponse({'detail': _("Item created successfully.")}, status=status.HTTP_201_CREATED) return JsonResponse(status=status.HTTP_400_BAD_REQUEST) def list(self, request, org_pk, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'list') queryset = self.get_queryset().order_by('code') page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return JsonResponse({'data': serializer.data}) def update(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'update') if pk: prudence_advice = get_object_or_404(PrudenceAdvice, pk=pk) form = PrudenceAdviceForm(request.data, instance=prudence_advice) if form.is_valid(): prudence_advice = form.save() organilab_logentry(request.user, prudence_advice, CHANGE, 'prudence advice', relobj=[self.organization], changed_data=form.changed_data) return JsonResponse({'detail': _("Item updated successfully.")}, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST) def destroy(self, request, org_pk, pk=None, *args, **kwargs): self._check_permission_on_organization(request, org_pk, 'destroy') if pk: prudence_advice = get_object_or_404(PrudenceAdvice, pk=pk) organilab_logentry(request.user, prudence_advice, DELETION, 'prudence advice', relobj=[self.organization]) prudence_advice.delete() return JsonResponse({'detail': _('Item deleted successfully.')}, status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST)