143 lines
5.8 KiB
Python
143 lines
5.8 KiB
Python
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class FiltroPorOrganizacionMixin:
|
|
model = None
|
|
campo_usuario = 'user'
|
|
campo_organizacion = 'organizacion'
|
|
campo_rfc = 'rfc__id'
|
|
campo_contribuyente = 'pedimento__contribuyente' # solo si aplica
|
|
|
|
def get_queryset_filtrado(self):
|
|
user = self.request.user
|
|
|
|
if not user.is_authenticated or not hasattr(user, self.campo_organizacion):
|
|
return self.model.objects.none()
|
|
|
|
if user.is_superuser:
|
|
return self.model.objects.all()
|
|
|
|
if (user.groups.filter(name='admin').exists() or user.groups.filter(name='developer').exists()) and user.is_authenticated and user.groups.filter(name='Agente Aduanal').exists():
|
|
model_fields = [f.name for f in self.model._meta.get_fields()]
|
|
if self.campo_organizacion in model_fields:
|
|
filtro = {f"{self.campo_organizacion}": getattr(user, self.campo_organizacion)}
|
|
else:
|
|
return self.model.objects.none()
|
|
return self.model.objects.filter(**filtro)
|
|
|
|
if user.groups.filter(name='Importador').exists() and getattr(user, 'is_importador', False):
|
|
filtro = {
|
|
f"{self.campo_contribuyente}__{self.campo_rfc}": getattr(user, self.campo_rfc),
|
|
}
|
|
return self.model.objects.filter(**filtro)
|
|
|
|
return self.model.objects.none()
|
|
|
|
# en core/mixins/organizacion.py o similar
|
|
class OrganizacionFiltradaMixin:
|
|
model = None # Puedes sobreescribir esto en la vista
|
|
campo_organizacion = 'organizacion'
|
|
campo_contribuyente = 'contribuyente' # solo si aplica
|
|
|
|
def get_queryset_filtrado_por_organizacion(self):
|
|
model = self.model or self.queryset.model
|
|
|
|
if not self.request.user.is_authenticated or not hasattr(self.request.user, 'organizacion'):
|
|
return model.objects.none()
|
|
|
|
if self.request.user.is_superuser:
|
|
return model.objects.all()
|
|
|
|
org = self.request.user.organizacion
|
|
filtros_base = {
|
|
f"{self.campo_organizacion}": org,
|
|
f"{self.campo_organizacion}__is_active": True,
|
|
f"{self.campo_organizacion}__is_verified": True,
|
|
}
|
|
|
|
grupos = self.request.user.groups.values_list('name', flat=True)
|
|
|
|
if self.request.user.is_authenticated and 'Agente Aduanal' in grupos and (('admin' in grupos or 'developer' in grupos) and 'user' in grupos) :
|
|
if 'Agente Aduanal' in grupos:
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
# if hasattr(model, self.campo_contribuyente):
|
|
if self.request.user.is_authenticated and 'Importador' in grupos :
|
|
filtros_base[f"{self.campo_contribuyente}__rfc"] = self.request.user.rfc.rfc
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
# Si no entra en los roles válidos
|
|
return model.objects.none()
|
|
|
|
class DocumentosFiltradosMixin:
|
|
model = None
|
|
campo_organizacion = 'organizacion'
|
|
campo_contribuyente = 'pedimento' # solo si aplica
|
|
|
|
def get_queryset_filtrado_por_organizacion(self):
|
|
model = self.model or self.queryset.model
|
|
|
|
if not self.request.user.is_authenticated or not hasattr(self.request.user, 'organizacion'):
|
|
return model.objects.none()
|
|
|
|
if self.request.user.is_superuser:
|
|
return model.objects.all()
|
|
|
|
org = self.request.user.organizacion
|
|
filtros_base = {
|
|
f"{self.campo_organizacion}": org.id,
|
|
f"{self.campo_organizacion}__is_active": True,
|
|
f"{self.campo_organizacion}__is_verified": True,
|
|
}
|
|
|
|
grupos = self.request.user.groups.values_list('name', flat=True)
|
|
|
|
if self.request.user.is_authenticated and 'Agente Aduanal' in grupos and ('admin' in grupos or 'developer' in grupos or 'user' in grupos):
|
|
if 'Agente Aduanal' in grupos:
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
if hasattr(model, self.campo_contribuyente):
|
|
if self.request.user.is_authenticated and 'Importador' in grupos and getattr(self.request.user, 'is_importador', False):
|
|
filtros_base[f"{self.campo_contribuyente}__contribuyente"] = self.request.user.rfc
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
# Si no entra en los roles válidos
|
|
return model.objects.none()
|
|
|
|
class ProcesosPorOrganizacionMixin:
|
|
model = None # Puedes sobreescribir esto en la vista
|
|
campo_organizacion = 'organizacion'
|
|
campo_pedimento = 'pedimento' # solo si aplica
|
|
|
|
def get_queryset_filtrado_por_organizacion(self):
|
|
model = self.model or self.queryset.model
|
|
|
|
if not self.request.user.is_authenticated or not hasattr(self.request.user, 'organizacion'):
|
|
return model.objects.none()
|
|
|
|
if self.request.user.is_superuser:
|
|
return model.objects.all()
|
|
|
|
org = self.request.user.organizacion
|
|
filtros_base = {
|
|
f"{self.campo_organizacion}": org,
|
|
f"{self.campo_organizacion}__is_active": True,
|
|
f"{self.campo_organizacion}__is_verified": True,
|
|
}
|
|
|
|
grupos = self.request.user.groups.values_list('name', flat=True)
|
|
|
|
|
|
if self.request.user.is_authenticated and 'Agente Aduanal' in grupos and ('admin' in grupos or 'developer' in grupos or 'user' in grupos) :
|
|
if 'Agente Aduanal' in grupos:
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
if hasattr(model, self.campo_pedimento):
|
|
if self.request.user.is_authenticated and'Importador' in grupos and getattr(self.request.user, 'is_importador', False):
|
|
filtros_base[f"{self.campo_pedimento}__contribuyente"] = self.request.user.rfc
|
|
return model.objects.filter(**filtros_base)
|
|
|
|
# Si no entra en los roles válidos
|
|
return model.objects.none()
|
|
|