Martín Miranda

Merge branch 'feature/#31_modificar_modelo_edicto' into 'develop'

Feature/#31 modificar modelo edicto



See merge request !27
from rest_framework import viewsets, mixins, status, serializers
from rest_framework import viewsets, filters, mixins, status, serializers
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import action
... ... @@ -6,6 +7,7 @@ from datetime import datetime
from .models import Edicto, Precio
from .serializer import EdictoSerializer, PrecioSerializer
from .filters import EdictoFilter
from .utils import contador
# from .precio import contador
... ... @@ -17,9 +19,18 @@ class EdictoViewSet(mixins.CreateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
queryset = Edicto.objects.all().order_by('id')
serializer_class = EdictoSerializer
permission_classes = [IsAuthenticated, ]
filter_backends = (DjangoFilterBackend, filters.OrderingFilter)
filterset_class = EdictoFilter
queryset = Edicto.objects.all()
ordering_fields = ('usuario__usuario', 'estado', 'fecha_publicacion', 'id',)
ordering = 'id'
def perform_create(self, serializer):
edicto = self.request.data.get('cuerpo_edicto')
cantidad_palabras = contador(edicto)
serializer.save(cantidad_palabras=cantidad_palabras, usuario=self.request.user)
@action(detail=True, methods=['put', 'patch'])
def custom_update(self, request):
... ... @@ -33,34 +44,6 @@ class EdictoViewSet(mixins.CreateModelMixin,
return Response(serializer.data, status=status.HTTP_200_OK)
def perform_create(self, serializer):
edicto = self.request.data.get('cuerpo_edicto')
cantidad_palabras = contador(edicto)
serializer.save(cantidad_palabras=cantidad_palabras)
def include_fecha_publicacion(self):
return self.request.user.is_staff
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
serializer = self.get_serializer(queryset, many=True)
for data in serializer.data:
if self.include_fecha_publicacion():
edicto = queryset.get(id=data['edicto_id'])
data['fecha_publicacion'] = edicto.fecha_publicacion
return Response(serializer.data, status=status.HTTP_200_OK)
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
if self.include_fecha_publicacion():
serializer.data['fecha_publicacion'] = instance.fecha_publicacion
return Response(serializer.data, status=status.HTTP_200_OK)
class PrecioViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
... ...
... ... @@ -16,7 +16,7 @@ STATUS_CHOICE = [
]
EXTENSIONES_VALIDAS = ["pdf", "docx",]
EXTENSIONES_VALIDAS = "pdf",
PESOS = 'peso_argentino'
... ...
from django_filters import rest_framework as filters
from edicto.models import Edicto
class EdictoFilter(filters.FilterSet):
class Meta:
model = Edicto
fields = ('usuario', 'estado', 'fecha_publicacion', 'id',)
... ...
... ... @@ -8,14 +8,11 @@ from usuario.serializers import UsuarioSerializer
class EdictoSerializer(serializers.ModelSerializer):
edicto_id = serializers.ReadOnlyField(source='id')
class Meta:
model = Edicto
fields = ('usuario',
'edicto_id',
'cuerpo_edicto',
'estado',
'cuerpo_edicto',
'cantidad_palabras',
'dias_publicar',
'cantidad_sellos',
... ... @@ -23,26 +20,27 @@ class EdictoSerializer(serializers.ModelSerializer):
'archivo',
'fecha_creacion',
'observaciones',
'fecha_publicacion',
)
read_only_fields = ('cantidad_palabras', 'fecha_creacion')
included_serializers = {
'usuario': 'usuario.serializers.UsuarioSerializer',
'usuario': 'username.serializers.UsuarioListaSerializer',
}
read_only_fields = ('usuario', 'fecha_publicacion', 'cantidad_palabras', 'fecha_creacion')
def to_representation(self, instance):
data = super().to_representation(instance)
user = self.context['request'].user
if user.is_staff:
if not user.is_staff:
data['fecha_publicacion'] = instance.fecha_publicacion
return data
@staticmethod
def validate_archivo(value):
filename, extension = value.name.rsplit(".", 1)
if extension.lower() not in EXTENSIONES_VALIDAS:
raise serializers.ValidationError("Archivos permitidos: .pdf, .docx, .jpg, .png")
raise serializers.ValidationError("Archivos permitidos: .pdf")
return value
... ... @@ -64,7 +62,7 @@ class PrecioSerializer(serializers.ModelSerializer):
user = request.user if request else None
if not user or user.is_anonymous:
raise serializers.ValidationError("El usuario debe estar autenticado.")
if not user.es_staff:
if not user.is_staff:
raise serializers.ValidationError("El usuario no es parte del personal designado.")
return data
... ...
... ... @@ -2,11 +2,9 @@ import re
def contador(edicto):
numeros = re.findall(r'\b\d+(?:\.\d+)?\b', edicto)
expresiones = re.findall(r'\(\.\.\.', edicto)
texto = edicto.split()
cantidad_palabras = len(texto)
cantidad_numeros = len(numeros) - 1
cantidad_expresiones = len(expresiones)
total_edicto = cantidad_palabras + cantidad_numeros + cantidad_expresiones
total_edicto = cantidad_palabras + cantidad_expresiones
return total_edicto
... ...
... ... @@ -2,12 +2,14 @@ from rest_framework import routers
from organismo import api as organismo_api
from usuario import api as usuario_api
from edicto.api import EdictoViewSet
from edicto import api as edicto_api
# Define routes
router = routers.DefaultRouter()
router.register(prefix='usuario', viewset=usuario_api.UsuarioViewSet)
router.register(prefix='organismo', viewset=organismo_api.OrganismoViewSet)
router.register(prefix='edicto', viewset=edicto_api.EdictoViewSet)
router.register(r'edicto', EdictoViewSet, basename='edicto')
router.register(prefix='precio', viewset=edicto_api.PrecioViewSet)
... ...
... ... @@ -162,7 +162,7 @@ REST_FRAMEWORK = {
'NON_FIELD_ERRORS_KEY': 'error_messages'
}
ACTIVAR_HERRAMIENTAS_DEBUGGING = env.bool('ACTIVAR_HERRAMIENTAS_DEBUGGING', default=False)
ACTIVAR_HERRAMIENTAS_DEBUGGING = env.bool('ACTIVAR_HERRAMIENTAS_DEBUGGING', default=True)
if ACTIVAR_HERRAMIENTAS_DEBUGGING:
INTERNAL_IPS = ['127.0.0.1']
INSTALLED_APPS += ('debug_toolbar', 'django_extensions')
... ...