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))