Compare commits

...

5 Commits

5 changed files with 89 additions and 8 deletions

View File

@@ -431,7 +431,7 @@ def documentos_con_errores(organizacion_id):
@shared_task
def procesar_procesamiento_pedimento(organizacion_id):
print("Creando procesamientos de pedimentos para organización:", organizacion_id)
# print("Creando procesamientos de pedimentos para organización:", organizacion_id)
pedimentos = Pedimento.objects.filter(organizacion_id=organizacion_id)
# pedimentos = Pedimento.objects.filter(id='1c061182-ac68-45b0-b3d7-35bf2264982b')
@@ -454,7 +454,7 @@ def procesar_procesamiento_pedimento(organizacion_id):
, servicio_id=3
, tipo_procesamiento_id=2) # servicio 3: Pedimento Completo
print("Procesamiento creado para pedimento:", pedimento.pedimento_app)
# print("Procesamiento creado para pedimento:", pedimento.pedimento_app)
procesar_pedimentos_completos.delay(organizacion_id)
@@ -477,8 +477,8 @@ def ejecutar_por_organizacion_y_procesamiento(organizacion_id, procesamiento):
procesar_procesamiento_pedimento.delay(organizacion_id)
else:
# Procesamiento no reconocido
print(f"Procesamiento no reconocido: {procesamiento}")
# pass
# print(f"Procesamiento no reconocido: {procesamiento}")
pass
def ejecutar_todos_por_organizacion(organizacion_id):
procesar_coves.delay(organizacion_id)

View File

@@ -10,7 +10,8 @@ from .views import (
ViewSetEDocument,
ViewSetCove,
ImportadorViewSet,
PartidaViewSet
PartidaViewSet,
EjecutarComandoView
)
# from .views import YourViewSet # Import your viewsets here
@@ -95,4 +96,7 @@ urlpatterns = [
path('auditor/obtener-respuesta/acuse-cove-vu/', auditor_obtener_respuesta_acuse_cove_vu, name='obtener-respuesta-acuse-cove-vu'),
path('auditor/obtener-peticion/edocument-vu/', auditor_obtener_peticion_edocument_vu, name='obtener-peticion-edocument-vu'),
path('auditor/obtener-respuesta/edocument-vu/', auditor_obtener_respuesta_edocument_vu, name='obtener-respuesta-edocument-vu'),
path('procesamientopedimentos-ejecutar-comando/', EjecutarComandoView.as_view(), name='procesamientopedimentos-ejecutar-comando'),
]

View File

@@ -1777,6 +1777,66 @@ class ImportadorViewSet(viewsets.ModelViewSet, OrganizacionFiltradaMixin):
my_tags = ['Importadores']
class EjecutarComandoView(APIView):
permission_classes = [IsAuthenticated & (IsSameOrganization | IsSameOrganizationAndAdmin | IsSameOrganizationDeveloper | IsSuperUser)]
"""
View para ejecutar el comando de microservicios desde una petición HTTP.
"""
def post(self, request):
# Obtener organizacion_id del request (si se envía)
organizacion_id_request = request.data.get('organizacionid', None)
procesamiento = request.data.get('procesamiento', None)
todos = request.data.get('todos', False)
if not self.request.user.is_authenticated or not hasattr(self.request.user, 'organizacion'):
raise ValueError("Usuario no autenticado o sin organización")
if organizacion_id_request is None:
return Response(
{"error": 'No se proporcionó la organización a ejecutar el proceso.'},
status=status.HTTP_400_BAD_REQUEST
)
# organizacion_id = self.request.user.organizacion.id
organizacion_id = organizacion_id_request
nombre_organizacion = self.request.user.organizacion.nombre
if procesamiento is None and todos == False:
return Response(
{"message": 'No se detectó el tipo de ejecución de procesamiento.'},
status=status.HTTP_400_BAD_REQUEST
)
procesamiento = str(procesamiento)
from api.customs.tasks import microservice_v2
if todos:
microservice_v2.ejecutar_todos_por_organizacion(organizacion_id)
return Response(
{"message": f'Se estarán ejecutando todos los procesos para la organización {nombre_organizacion} en segundo plano.'},
status=status.HTTP_200_OK
)
elif organizacion_id:
if procesamiento:
microservice_v2.ejecutar_por_organizacion_y_procesamiento(organizacion_id, procesamiento)
return Response(
{"message": f'Se estará ejecutando el procesamiento {procesamiento} para la organización {nombre_organizacion} en segundo plano.'},
status=status.HTTP_200_OK
)
return Response(
{"error": "Parámetros insuficientes. Proporcione 'organizacion' y 'procesamiento', o seleccione 'todos'."},
status=status.HTTP_400_BAD_REQUEST
)
my_tags = ['Procesamientos_Pedimentos']
# helper | reglas para formato de docuemnto antes de cargarlo
def normalize_filename(filename):
"""

View File

@@ -8,7 +8,8 @@ class TaskFilter(filters.FilterSet):
timestamp_gte = filters.DateTimeFilter(field_name='timestamp', lookup_expr='gte')
timestamp_lte = filters.DateTimeFilter(field_name='timestamp', lookup_expr='lte')
status = filters.CharFilter(field_name='status')
organizacion = filters.UUIDFilter(field_name='organizacion__id') # Cambiado a relación directa
class Meta:
model = Task
fields = ['servicio', 'pedimento_app', 'pedimento', 'timestamp_gte', 'timestamp_lte', 'status']
fields = ['servicio', 'pedimento_app', 'pedimento', 'timestamp_gte', 'timestamp_lte', 'status', 'organizacion']

View File

@@ -4,6 +4,7 @@ from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.pagination import PageNumberPagination
from api.logger.mixins import LoggingMixin
from mixins.filtrado_organizacion import OrganizacionFiltradaMixin, ProcesosPorOrganizacionMixin
from .models import Task
from .serializers import TaskSerializer
from .filters import TaskFilter
@@ -22,7 +23,7 @@ class TaskPagination(PageNumberPagination):
page_size_query_param = 'page_size'
max_page_size = 100
class TaskViewSet(LoggingMixin,viewsets.ModelViewSet):
class TaskViewSet(LoggingMixin,viewsets.ModelViewSet,OrganizacionFiltradaMixin):
permission_classes = [IsAuthenticated & (IsSameOrganization | IsSameOrganizationAndAdmin | IsSameOrganizationDeveloper | IsSuperUser)]
queryset = Task.objects.select_related('pedimento', 'servicio').all()
serializer_class = TaskSerializer
@@ -32,4 +33,19 @@ class TaskViewSet(LoggingMixin,viewsets.ModelViewSet):
ordering_fields = ['timestamp']
ordering = ['-timestamp'] # ordenamiento por defecto, más reciente primero
my_tags = ['tasks']
my_tags = ['tasks']
def get_queryset(self):
"""
Filtra las tareas según la organización del usuario.
Superusuarios pueden ver todas las tareas.
"""
queryset = self.get_queryset_filtrado_por_organizacion() # Tambien filtra por importador
# if user.is_superuser:
# return self.queryset
# # return self.queryset.filter(organizacion_id=user.organizacion.id)
# else:
# return self.queryset.filter(organizacion_id=user.organizacion.id)
return queryset