Marta Miranda

Closed feature/67_agregar_auditorias

... ... @@ -6,6 +6,7 @@ from django.conf import settings
import datetime
from actstream.models import actor_stream
from actstream.models import Action
from django.http import Http404
from django_filters.rest_framework import DjangoFilterBackend
... ... @@ -38,31 +39,31 @@ class AuditoriaViewSet(ReadOnlyModelViewSet):
serializer_class = ActionSerializer
filter_backends = (DjangoFilterBackend, filters.OrderingFilter)
ordering = '-timestamp'
#
# def get_queryset(self):
# queryset = super().get_queryset()
#
# if not self.action == 'list':
# return queryset
#
# # en el caso de que la accion sea listar, controlar que se filtre por fecha obligatoriamente
# usuario_id = self.request.GET.get('u_id', None)
# fecha_desde = self.request.GET.get('fecha_desde', None)
# fecha_hasta = self.request.GET.get('fecha_hasta', None)
#
# if not fecha_desde:
# return queryset.none()
#
# if not fecha_hasta or fecha_hasta < fecha_desde:
# fecha_hasta = datetime.datetime.now()
#
# if usuario_id:
# try:
# usuario = get_object_or_404(Usuario, id=usuario_id)
# queryset = usuario.actor_actions.public(timestamp__date__range=(fecha_desde, fecha_hasta))
# except Http404:
# return queryset.none()
# else:
# queryset = Action.objects.public(timestamp__date__range=(fecha_desde, fecha_hasta))
#
# return queryset
def get_queryset(self):
queryset = super().get_queryset()
if not self.action == 'list':
return queryset
# en el caso de que la accion sea listar, controlar que se filtre por fecha obligatoriamente
usuario_id = self.request.GET.get('usuario_id', None)
fecha_desde = self.request.GET.get('fecha_desde', None)
fecha_hasta = self.request.GET.get('fecha_hasta', None)
if not fecha_desde:
return queryset.none()
if not fecha_hasta or fecha_hasta < fecha_desde:
fecha_hasta = datetime.datetime.now()
if usuario_id:
try:
usuario = get_object_or_404(Usuario, id=usuario_id)
queryset = usuario.actor_actions.public(timestamp__date__range=(fecha_desde, fecha_hasta))
except Http404:
return queryset.none()
else:
queryset = Action.objects.public(timestamp__date__range=(fecha_desde, fecha_hasta))
return queryset
... ...
... ... @@ -9,29 +9,29 @@ from core.constants import iniciado
from core.serializers import ActionSerializer
# class FiltroObligatorioMixin(object):
# nombre_filtro_obligatorio: Optional[str] = None
#
# def get_queryset(self):
# queryset = super().get_queryset()
#
# if not self.action == 'list':
# return queryset
#
# # en el caso de que la accion sea listar, controlar que vengan los datos del filtro indicado
# filtro = self.request.GET.get(self.get_nombre_filtro_obligatorio(), None)
# if filtro:
# return queryset
#
# return queryset.none()
#
# def get_nombre_filtro_obligatorio(self):
# assert self.nombre_filtro_obligatorio is not None, (
# "Debe definir el atributo nombre_filtro_obligatorio a la clase '%s'"
# % self.__class__.__name__
# )
#
# return self.nombre_filtro_obligatorio
class FiltroObligatorioMixin(object):
nombre_filtro_obligatorio: Optional[str] = None
def get_queryset(self):
queryset = super().get_queryset()
if not self.action == 'list':
return queryset
# en el caso de que la accion sea listar, controlar que vengan los datos del filtro indicado
filtro = self.request.GET.get(self.get_nombre_filtro_obligatorio(), None)
if filtro:
return queryset
return queryset.none()
def get_nombre_filtro_obligatorio(self):
assert self.nombre_filtro_obligatorio is not None, (
"Debe definir el atributo nombre_filtro_obligatorio a la clase '%s'"
% self.__class__.__name__
)
return self.nombre_filtro_obligatorio
class AuditoriaMixin:
... ...
... ... @@ -3,6 +3,9 @@ from rest_framework import viewsets, filters, mixins
from rest_framework.permissions import IsAuthenticated
from core.mixins import AuditoriaMixin
from rest_framework.decorators import action
from core.serializers import ActionSerializer
from rest_framework.response import Response
from .filters import EdictoFilter, PrecioFilter
from .models import Edicto, Precio
... ... @@ -25,6 +28,21 @@ class EdictoViewSet(AuditoriaMixin, mixins.CreateModelMixin,
ordering = ('fecha_publicacion',)
lookup_field = 'uuid'
@action(
methods=['GET'],
detail=True,
url_path='obtener-historial',
serializer_class=ActionSerializer
)
def obtener_historial(self, request, uuid):
action_objects_id = list(Edicto.objects.filter(uuid=uuid).values_list('id', flat=True))
serializer = self.obtener_historial_acciones(
content_type="edicto",
action_objects_id=action_objects_id,
request=request
)
return Response(serializer.data)
class PrecioViewSet(AuditoriaMixin, viewsets.ReadOnlyModelViewSet):
serializer_class = PrecioSerializer
... ...
... ... @@ -4,3 +4,10 @@ from django.apps import AppConfig
class UsuarioConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'usuario'
def ready(self):
from actstream import registry
registry.register(self.get_model('Usuario'))
default_app_config = 'usuario.apps.UsuarioConfig'
... ...