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