Files
AS_timbres/IMMEX/viewsPermisos.py
fjrodriguez 98a58d5eea Liberacion
2024-02-01 11:41:05 -06:00

162 lines
7.8 KiB
Python

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,
)
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 permiso_formset in context['permiso_formset'].forms:
permiso_formset.fields['modulo_extra'].widget = forms.HiddenInput()
permiso_formset.fields['modulo_extra'].queryset = SuspensionModulo.objects.none()
permiso_formset.fields['suspension_modulo'].queryset = Modulo.objects.all()
#permiso_formset.fields['suspension_modulo'].widget = forms.HiddenInput()
#permiso_formset.fields['permiso'].widget.attrs['disabled'] = True
context['form'].fields['sistema_cliente'].widget = forms.HiddenInput()
context['form'].fields['button_field'].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']
#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',(modulo_formset.instance.suspensionmodulo_set.all()))
#Guardamos SuspensionModulo
permiso_formset.instance= self.object
permiso_formset.save()
modulos_a_eliminar = [form1.cleaned_data['modulo'] for form1 in modulo_formset.forms \
if hasattr(form1, 'cleaned_data') and form1.cleaned_data.get('DELETE')
]
#print('modulos_a_eliminar',modulos_a_eliminar)
modulos_a_mantener = modulo_formset.instance.suspensionmodulo_set.exclude(modulo__in=modulos_a_eliminar)
#print('modulos_a_mantener',modulos_a_mantener)
for modulo in modulos_a_mantener:
for permiso in modulo.modulo.permisos.all():
permObj,created=SuspensionPermiso.objects.get_or_create(
supension_modPermP=self.object,
suspension_modulo=modulo.modulo,
permiso=permiso,
)
# Eliminamos los permisos asociados a los módulos que se van a eliminar
if modulos_a_eliminar:
permisos_a_eliminar = SuspensionPermiso.objects.filter(suspension_modulo__in=modulos_a_eliminar)
permisos_a_eliminar.delete()
return super().form_valid(form)
else:
return self.render_to_response(self.get_context_data(form=form))