Sistemas Clientes modulos permisos finished

This commit is contained in:
fjrodriguez
2023-11-30 10:42:06 -06:00
parent 61cf354a79
commit 607790896b
16 changed files with 523 additions and 77 deletions

View File

@@ -57,99 +57,54 @@ class ActiveTokenSession_Admin(admin.ModelAdmin):
class SuspensionPermisoInline(admin.TabularInline):
model = SuspensionPermiso
extra = 1
def get_formset(self, request, obj=None, **kwargs):
# Utiliza el objeto 'obj' (el módulo actual) para filtrar el queryset
formset = super().get_formset(request, obj, **kwargs)
# def get_formset(self, request, obj=None, **kwargs):
# # Utiliza el objeto 'obj' (el módulo actual) para filtrar el queryset
# formset = super().get_formset(request, obj, **kwargs)
if obj:
print('SDL',obj.modulo.permisos.all())
formset.form.base_fields['permiso'].queryset = obj.modulo.permisos.all()
return formset
# if obj:
# print('SDL',obj.modulo.permisos.all())
# formset.form.base_fields['permiso'].queryset = obj.modulo.permisos.all()
# return formset
class SuspensionModuloInline(admin.TabularInline):
model = SuspensionModulo
class SuspensionModuloAdmin(admin.ModelAdmin):
list_display = ['modulo','suspendido','supension_modPerm_id']
inlines=[SuspensionPermisoInline]
class Suspension_Modulos_Permisos_ClienteAdmin(admin.ModelAdmin):
inlines = [SuspensionModuloInline]
inlines = [SuspensionModuloInline,SuspensionPermisoInline]
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
for modulo in obj.suspensionmodulo_set.all():
print(modulo, 'permisos',modulo.modulo.permisos.all())
for permiso in modulo.modulo.permisos.all():
print('borrar?',permiso.delete)
permObj,created=SuspensionPermiso.objects.get_or_create(
suspension_modulo=modulo,
supension_modPermP=obj,
suspension_modulo=modulo.modulo,
permiso=permiso,
)
print(permObj,created)
if permiso.delete:
print('borrar')
class SuspensionPermisoInline2(admin.TabularInline):
model = SuspensionPermiso
class SuspensionPemisoAdmin(admin.ModelAdmin):
inlines=[SuspensionPermisoInline2]
admin.site.register(Modulo)
admin.site.register(Permisos_A24)
admin.site.register(Modulo)
admin.site.register(SuspensionModulo,SuspensionModuloAdmin)
admin.site.register(SuspensionPermiso)
admin.site.register(Suspension_Modulos_Permisos_Cliente, Suspension_Modulos_Permisos_ClienteAdmin)
# class Permisos_A24_Admin(admin.ModelAdmin):
# list_display =['nombre']
# search_fields = ['nombre']
# class Modulo_Admin(admin.ModelAdmin):
# list_display=('nombre','sistema_cliente'
# #,'lista_permisos'
# )
# filter_horizontal = ['permisos']
# class SuspensionPermisoInline(admin.TabularInline):
# model = SuspensionPermiso
# extra = 1 # Puedes ajustar esto según tus necesidades
# class SuspensionModuloInline(admin.TabularInline):
# model = SuspensionModulo
# extra = 1 # Ajusta según tus necesidades
# class SuspensionModulo_Admin(admin.ModelAdmin):
# list_display=['modulo','cliente_nombre','dispositivo','custom_suspendido']
# search_fields = ['dispositivo__clienteA24__Nombre', 'dispositivo__clienteA24__RFC']
# def cliente_nombre(self, obj):
# return f'{obj.dispositivo.clienteA24.Nombre}({obj.dispositivo.clienteA24.RFC})' \
# if obj.dispositivo and obj.dispositivo.clienteA24 else "N/A"
# cliente_nombre.short_description = 'Nombre del Cliente(RFC)' # Puedes personalizar el encabezado si lo deseas
# def custom_suspendido(self,obj):
# return "Sí" if obj.suspendido else "No"
# custom_suspendido.short_description = 'Suspendido'
# class ModuloInline(admin.TabularInline):
# model = Modulo
# extra =1
# autocomplete_fields = ['permisos']
# class Sistema_x_ClienteAdmin(admin.ModelAdmin):
# inlines = [ModuloInline]
# search_fields = ['modulos__nombre', 'modulos__permisos__nombre']
# list_filter =('modulo__permisos__nombre',)
# class Device_A24_Admin2(admin.ModelAdmin):
# inlines = [SuspensionPermisoInline, SuspensionModuloInline]
# admin.site.register(SuspensionPermiso)
# admin.site.register(SuspensionModulo,SuspensionModulo_Admin)
# admin.site.register(Permisos_A24,Permisos_A24_Admin)
# admin.site.register(Modulo,Modulo_Admin)
admin.site.register(Sistemas_por_cliente_A24)

View File

@@ -1,5 +1,6 @@
from django import forms
from .models import ClientesA24
from django.forms import inlineformset_factory
from .models import ClientesA24, Suspension_Modulos_Permisos_Cliente,SuspensionModulo,SuspensionPermiso,Modulo
from datetime import datetime
class ClienteForm_IMMEX(forms.ModelForm):
@@ -21,4 +22,55 @@ class ClienteForm_IMMEX(forms.ModelForm):
if Activo and fecha_baja:
self._errors['fecha_baja'] = self.error_class(["El parametro activo no puede estar seleccionado si hay fecha de baja"])
return self.cleaned_data
return self.cleaned_data
class SuspensionModulosPermisosClienteForm(forms.ModelForm):
class Meta:
model = Suspension_Modulos_Permisos_Cliente
fields = '__all__'
class SuspensionPermisoForm(forms.ModelForm):
modulo_extra = forms.ModelChoiceField(queryset=SuspensionModulo.objects.all(), required=False, label='Reasignar Modulo')
class Meta:
model = SuspensionPermiso
fields = '__all__'
class SuspensionModuloForm(forms.ModelForm):
class Meta:
model = SuspensionModulo
fields = '__all__'
SuspensionModuloFormSet = inlineformset_factory(
Suspension_Modulos_Permisos_Cliente,
SuspensionModulo,
form=SuspensionModuloForm,
extra=5,
can_delete=False,
)
#se usa "SuspensionModuloFormSet2" en el UpdateView para pasar el Extra igual a cero
SuspensionModuloFormSet2 = inlineformset_factory(
Suspension_Modulos_Permisos_Cliente,
SuspensionModulo,
form=SuspensionModuloForm,
extra=1,
can_delete=True,
)
SuspensionPermisoFormSetCreate = inlineformset_factory(
Suspension_Modulos_Permisos_Cliente, # Modelo padre
SuspensionPermiso, # Modelo hijo
form=SuspensionPermisoForm,
extra=3,
can_delete=True,
)
SuspensionPermisoFormSet = inlineformset_factory(
Suspension_Modulos_Permisos_Cliente, # Modelo padre
SuspensionPermiso, # Modelo hijo
form=SuspensionPermisoForm,
extra=0,
can_delete=True,
)

View File

@@ -0,0 +1,20 @@
# Generated by Django 4.1.3 on 2023-11-23 05:26
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('IMMEX', '0006_remove_modulo_sistema_cliente'),
]
operations = [
migrations.AddField(
model_name='suspensionpermiso',
name='supension_modPermP',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='IMMEX.suspension_modulos_permisos_cliente'),
preserve_default=False,
),
]

View File

@@ -0,0 +1,19 @@
# Generated by Django 4.1.3 on 2023-11-23 21:16
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('IMMEX', '0007_suspensionpermiso_supension_modpermp'),
]
operations = [
migrations.AlterField(
model_name='suspensionpermiso',
name='suspension_modulo',
field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='IMMEX.suspensionmodulo'),
),
]

View File

@@ -0,0 +1,19 @@
# Generated by Django 4.1.3 on 2023-11-23 21:38
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('IMMEX', '0008_alter_suspensionpermiso_suspension_modulo'),
]
operations = [
migrations.AlterField(
model_name='suspensionpermiso',
name='suspension_modulo',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='IMMEX.suspensionmodulo'),
),
]

View File

@@ -0,0 +1,19 @@
# Generated by Django 4.1.3 on 2023-11-23 21:43
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('IMMEX', '0009_alter_suspensionpermiso_suspension_modulo'),
]
operations = [
migrations.AlterField(
model_name='suspensionpermiso',
name='suspension_modulo',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='IMMEX.modulo'),
),
]

View File

@@ -105,12 +105,16 @@ class SuspensionModulo(models.Model):
class SuspensionPermiso(models.Model):
suspension_modulo = models.ForeignKey(SuspensionModulo, on_delete=models.CASCADE)
supension_modPermP = models.ForeignKey(Suspension_Modulos_Permisos_Cliente, on_delete=models.CASCADE)
suspension_modulo = models.ForeignKey(Modulo, on_delete=models.CASCADE,blank=True,null=True)
permiso = models.ForeignKey(Permisos_A24, on_delete=models.CASCADE)
suspendido = models.BooleanField(default=False)
def __str__(self) -> str:
return f'{self.permiso}'
class Meta:
ordering=['suspension_modulo']

View File

@@ -1,5 +1,6 @@
from django.urls import path, include
from . import views
from . import viewsPermisos
from rest_framework import routers
router = routers.DefaultRouter()
@@ -25,5 +26,10 @@ urlpatterns = [
path('api/admin/', include(router.urls)),
path('api/checar_permisos/',views.ChecarPermisos.as_view(), name='api_ChecarPermisos'),
path('permisos-clientes/',viewsPermisos.SuspensionPermisosClienteListView.as_view(),name='permisos-clientesModulos'),
path('permisos-clientes-create/',viewsPermisos.SuspensionPermisosClienteCreateView.as_view(),name='permisos-clientesModulos-create'),
path('permisos-clientes-update/<int:pk>/',viewsPermisos.SuspensionPermisosCliente_UpdateView.as_view(),name='permisos-clientesModulos-update'),
path('permisos-clientes-delete/<int:pk>/',viewsPermisos.SuspensionPermisosCliente_DeleteView.as_view(),name='permisos-clientesModulos-delete'),
]

View File

@@ -194,6 +194,8 @@ class RegistroUsuarios(APIView):
from_email='aduanasoftpruebas@gmail.com',
recipient_list=[email],
)
class Check_IMMEX_RFC(APIView):
"""Verifica que el cliente pueda Timbrar"""
@@ -217,7 +219,6 @@ class Check_IMMEX_RFC(APIView):
return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True})
class RegisterIMMEX_Device_APIView(APIView):
"""Register IMMEX Devices
se manda el siguiente JSON

172
IMMEX/viewsPermisos.py Normal file
View File

@@ -0,0 +1,172 @@
from django import forms
from django.urls import reverse,reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin,UserPassesTestMixin
from django.views.generic import DeleteView
from django.views.generic.list import ListView
from django.views.generic.edit import CreateView,UpdateView
from django.contrib import messages
from .models import Suspension_Modulos_Permisos_Cliente, SuspensionModulo, SuspensionPermiso,Modulo
from .forms import SuspensionModulosPermisosClienteForm, SuspensionPermisoFormSet,SuspensionModuloFormSet,SuspensionModuloFormSet2,SuspensionPermisoFormSetCreate
import time
class SuspensionPermisosClienteListView(LoginRequiredMixin,UserPassesTestMixin, ListView):
model= Suspension_Modulos_Permisos_Cliente
template_name='IMMEX/modulos/modulos_clientes.html'
def test_func(self):
res = self.request.user.groups.filter(name= 'admin_soft')
if not res:
messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.')
return res
class SuspensionPermisosCliente_DeleteView(LoginRequiredMixin,UserPassesTestMixin, DeleteView):
model = Suspension_Modulos_Permisos_Cliente
success_url = reverse_lazy('permisos-clientesModulos')
def test_func(self):
res = self.request.user.groups.filter(name= 'admin_soft')
if not res:
messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.')
return res
class SuspensionPermisosClienteCreateView(LoginRequiredMixin,UserPassesTestMixin, CreateView):
model = Suspension_Modulos_Permisos_Cliente
form_class = SuspensionModulosPermisosClienteForm
#success_url = '/IMMEX/permisos-clientes/'
template_name ='IMMEX/modulos/modulo-create.html'
def test_func(self):
res = self.request.user.groups.filter(name= 'admin_soft')
if not res:
messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.')
return res
def get_success_url(self):
# Después de crear el objeto, redirige a la UpdateView correspondiente
return reverse('permisos-clientesModulos-update', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if self.request.POST:
context['modulo_formset'] = SuspensionModuloFormSet(self.request.POST, instance=self.object)
context['permiso_formset'] = SuspensionPermisoFormSetCreate(self.request.POST, instance=self.object)
else:
context['modulo_formset'] = SuspensionModuloFormSet(instance=self.object)
context['permiso_formset'] = SuspensionPermisoFormSetCreate(instance=self.object)
for form in context['permiso_formset'].forms:
form.fields['modulo_extra'].widget = forms.HiddenInput()
form.fields['modulo_extra'].queryset = SuspensionModulo.objects.none()
form.fields['suspension_modulo'].queryset = Modulo.objects.all()
form.fields['suspension_modulo'].widget = forms.HiddenInput()
return context
def form_valid(self, form):
context = self.get_context_data()
modulo_formset = context['modulo_formset']
permiso_formset = context['permiso_formset']
if modulo_formset.is_valid() and permiso_formset.is_valid():
self.object = form.save() # Guardamos el objeto principal
# Guardar SuspensionModulo
modulo_formset.instance = self.object
modulo_formset.save()
for modulo in self.object.suspensionmodulo_set.all():
for permiso in modulo.modulo.permisos.all():
permObj,created=SuspensionPermiso.objects.get_or_create(
supension_modPermP=self.object,
suspension_modulo=modulo.modulo,
permiso=permiso,
)
# permiso_formset.instance= self.object
# permiso_formset.save()
# for permiso in self.object.suspensionpermiso_set.all():
# # print(permiso.permiso,'iud',permiso.supension_modPermP.id)
# # print(permiso.supension_modPermP,permiso.suspension_modulo)
# suspension_modulo = self.object.suspensionmodulo_set.filter(
# supension_modPerm_id=self.object,
# # suspension_modulo = SuspensionModulo.objects.filter(supension_modPerm_id=self.object,
# modulo__permisos__in=[permiso.permiso]
# ).first()
# #print('suspMod',(suspension_modulo))
# permiso.suspension_modulo=suspension_modulo.modulo
# permiso.save()
return super().form_valid(form)
else:
return self.render_to_response(self.get_context_data(form=form))
class SuspensionPermisosCliente_UpdateView(LoginRequiredMixin,UserPassesTestMixin, UpdateView):
model = Suspension_Modulos_Permisos_Cliente
form_class = SuspensionModulosPermisosClienteForm
success_url = '/IMMEX/permisos-clientes/'
template_name ='IMMEX/modulos/edit_permisos.html'
def test_func(self):
res = self.request.user.groups.filter(name= 'admin_soft')
if not res:
messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.')
return res
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if self.request.POST:
context['modulo_formset'] = SuspensionModuloFormSet(self.request.POST, instance=self.object)
context['permiso_formset'] = SuspensionPermisoFormSet(self.request.POST,instance=self.object)
else:
context['modulo_formset'] = SuspensionModuloFormSet2(instance=self.object)
context['permiso_formset'] = SuspensionPermisoFormSet(instance=self.object)
for form in context['permiso_formset'].forms:
form.fields['modulo_extra'].widget = forms.HiddenInput()
form.fields['modulo_extra'].queryset = SuspensionModulo.objects.none()
form.fields['suspension_modulo'].queryset = Modulo.objects.all()
#form.fields['suspension_modulo'].widget = forms.HiddenInput()
#form.fields['permiso'].widget.attrs['disabled'] = True
return context
def form_valid(self, form):
context = self.get_context_data()
modulo_formset = context['modulo_formset']
permiso_formset = context['permiso_formset']
print('permiupdate',permiso_formset.is_valid())
if form.is_valid() and modulo_formset.is_valid() and permiso_formset.is_valid():
self.object = form.save()
modulo_formset.instance = self.object
modulo_formset.save()
print('MODULOS',self.object.suspensionmodulo_set.all().values())
permiso_formset.instance= self.object
permiso_formset.save()
for permiso in self.object.suspensionpermiso_set.all():
print('permiso:',permiso.permiso,'iud',permiso.supension_modPermP.id)
print('MODULO PERMISO:',permiso.suspension_modulo)
suspension_modulo = self.object.suspensionmodulo_set.filter(
supension_modPerm_id=self.object,
# suspension_modulo = SuspensionModulo.objects.filter(supension_modPerm_id=self.object,
modulo__permisos__in=[permiso.permiso]
).first()
if not suspension_modulo == None:
print('suspMod',(suspension_modulo))
print()
permiso.suspension_modulo=suspension_modulo.modulo
permiso.save()
else:
permiso.delete()
return super().form_valid(form)
else:
return self.render_to_response(self.get_context_data(form=form))