180 lines
5.3 KiB
Python
180 lines
5.3 KiB
Python
import logging
|
|
|
|
from core.permissions import get_org_context, user_has_role, is_internal_service_request
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _is_internal_service(request):
|
|
return is_internal_service_request(request)
|
|
|
|
|
|
class FiltroPorOrganizacionMixin:
|
|
model = None
|
|
campo_usuario = 'user'
|
|
campo_organizacion = 'organizacion'
|
|
campo_contribuyente = 'pedimento__contribuyente'
|
|
|
|
def get_queryset_filtrado(self):
|
|
user = self.request.user
|
|
|
|
if not user.is_authenticated:
|
|
return self.model.objects.none()
|
|
|
|
if _is_internal_service(self.request):
|
|
return self.model.objects.all()
|
|
|
|
org = get_org_context(user)
|
|
if not org:
|
|
return self.model.objects.none()
|
|
|
|
filtro = {self.campo_organizacion: org}
|
|
|
|
# Superuser y usuarios con rol operativo ven todo lo de su org activa
|
|
if user.is_superuser:
|
|
return self.model.objects.filter(**filtro)
|
|
|
|
if (
|
|
user_has_role(user, 'admin') or
|
|
user_has_role(user, 'developer') or
|
|
user_has_role(user, 'Agente Aduanal') or
|
|
user_has_role(user, 'user')
|
|
):
|
|
return self.model.objects.filter(**filtro)
|
|
|
|
# Importador: acceso filtrado por org + RFC como contribuyente
|
|
if user.is_importador:
|
|
filtro[f"{self.campo_contribuyente}__in"] = user.rfc.all()
|
|
return self.model.objects.filter(**filtro)
|
|
|
|
return self.model.objects.none()
|
|
|
|
|
|
class OrganizacionFiltradaMixin:
|
|
model = None
|
|
campo_organizacion = 'organizacion'
|
|
campo_contribuyente = 'contribuyente'
|
|
|
|
def get_queryset_filtrado_por_organizacion(self):
|
|
model = self.model or self.queryset.model
|
|
user = self.request.user
|
|
|
|
if not user.is_authenticated:
|
|
return model.objects.none()
|
|
|
|
if _is_internal_service(self.request):
|
|
return model.objects.all()
|
|
|
|
org = get_org_context(user)
|
|
if not org:
|
|
return model.objects.none()
|
|
|
|
filtros_base = {
|
|
self.campo_organizacion: org,
|
|
f'{self.campo_organizacion}__is_active': True,
|
|
f'{self.campo_organizacion}__is_verified': True,
|
|
}
|
|
|
|
if user.is_superuser:
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
if (
|
|
user_has_role(user, 'admin') or
|
|
user_has_role(user, 'developer') or
|
|
user_has_role(user, 'Agente Aduanal') or
|
|
user_has_role(user, 'user')
|
|
):
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
if user.is_importador:
|
|
filtros_base[f'{self.campo_contribuyente}__in'] = user.rfc.all()
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
return model.objects.none()
|
|
|
|
|
|
class DocumentosFiltradosMixin:
|
|
model = None
|
|
campo_organizacion = 'organizacion'
|
|
campo_contribuyente = 'pedimento'
|
|
|
|
def get_queryset_filtrado_por_organizacion(self):
|
|
model = self.model or self.queryset.model
|
|
user = self.request.user
|
|
|
|
if not user.is_authenticated:
|
|
return model.objects.none()
|
|
|
|
if _is_internal_service(self.request):
|
|
return model.objects.all()
|
|
|
|
org = get_org_context(user)
|
|
if not org:
|
|
return model.objects.none()
|
|
|
|
filtros_base = {
|
|
f'{self.campo_organizacion}': org.id,
|
|
f'{self.campo_organizacion}__is_active': True,
|
|
f'{self.campo_organizacion}__is_verified': True,
|
|
}
|
|
|
|
if user.is_superuser:
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
if (
|
|
user_has_role(user, 'admin') or
|
|
user_has_role(user, 'developer') or
|
|
user_has_role(user, 'Agente Aduanal') or
|
|
user_has_role(user, 'user')
|
|
):
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
if user.is_importador:
|
|
filtros_base[f'{self.campo_contribuyente}__contribuyente__in'] = user.rfc.all()
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
return model.objects.none()
|
|
|
|
|
|
class ProcesosPorOrganizacionMixin:
|
|
model = None
|
|
campo_organizacion = 'organizacion'
|
|
campo_pedimento = 'pedimento'
|
|
|
|
def get_queryset_filtrado_por_organizacion(self):
|
|
model = self.model or self.queryset.model
|
|
user = self.request.user
|
|
|
|
if not user.is_authenticated:
|
|
return model.objects.none()
|
|
|
|
if _is_internal_service(self.request):
|
|
return model.objects.all()
|
|
|
|
org = get_org_context(user)
|
|
if not org:
|
|
return model.objects.none()
|
|
|
|
filtros_base = {
|
|
self.campo_organizacion: org,
|
|
f'{self.campo_organizacion}__is_active': True,
|
|
f'{self.campo_organizacion}__is_verified': True,
|
|
}
|
|
|
|
if user.is_superuser:
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
if (
|
|
user_has_role(user, 'admin') or
|
|
user_has_role(user, 'developer') or
|
|
user_has_role(user, 'Agente Aduanal') or
|
|
user_has_role(user, 'user')
|
|
):
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
if user.is_importador:
|
|
filtros_base[f'{self.campo_pedimento}__contribuyente__in'] = user.rfc.all()
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
return model.objects.none()
|