Sistemas Clientes modulos permisos finished
This commit is contained in:
@@ -145,10 +145,10 @@ else:
|
|||||||
DATABASES={
|
DATABASES={
|
||||||
'default': {
|
'default': {
|
||||||
'ENGINE': 'django.db.backends.mysql',
|
'ENGINE': 'django.db.backends.mysql',
|
||||||
'NAME': 'Aduanasoft$cfdi_as',
|
'NAME': 'fjrodriguez$default',
|
||||||
'USER': 'Aduanasoft',
|
'USER': 'fjrodriguez',
|
||||||
'PASSWORD':'Soluciones28@',
|
'PASSWORD':'Soluciones28@',
|
||||||
'HOST': 'Aduanasoft.mysql.pythonanywhere-services.com',
|
'HOST': 'fjrodriguez.mysql.pythonanywhere-services.com',
|
||||||
'PORT': '3306',
|
'PORT': '3306',
|
||||||
'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
|
'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
|
||||||
}
|
}
|
||||||
@@ -12,4 +12,9 @@ class TimbresSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Timbres
|
model = Timbres
|
||||||
fields = ['uuid','rfcc','fecha','folio','serie','tipo','rfcp','modo']
|
fields = ['uuid','rfcc','fecha','folio','serie','tipo','rfcp','modo']
|
||||||
|
|
||||||
|
class CancelaSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Timbres
|
||||||
|
fields=['uuid','rfcc','rfcp']
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
|||||||
from .custom_decorators import is_staff_access, http_basic_auth
|
from .custom_decorators import is_staff_access, http_basic_auth
|
||||||
from .models import Clientes,Timbres,saldoModel,ErroresTimbres
|
from .models import Clientes,Timbres,saldoModel,ErroresTimbres
|
||||||
from Sistemas.models import BitacoraErrores
|
from Sistemas.models import BitacoraErrores
|
||||||
from .serailizers import ClienteSerializer,TimbresSerializer
|
from .serailizers import ClienteSerializer,TimbresSerializer,CancelaSerializer
|
||||||
from .forms import ClienteForm,EmailForm
|
from .forms import ClienteForm,EmailForm
|
||||||
|
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
@@ -438,9 +438,25 @@ class CancelaTimbre(APIView):
|
|||||||
msn = f'UUID:{UUID} \nCliente:{rfcc} \n {str(ex)}'
|
msn = f'UUID:{UUID} \nCliente:{rfcc} \n {str(ex)}'
|
||||||
BitacoraErrores.objects.create(level=2, message=msn, traceback=traceback.format_exc(), view='Sistemas.CancelaTimbre')
|
BitacoraErrores.objects.create(level=2, message=msn, traceback=traceback.format_exc(), view='Sistemas.CancelaTimbre')
|
||||||
return Response({'Error':f'{ex}','isError':True})
|
return Response({'Error':f'{ex}','isError':True})
|
||||||
|
|
||||||
|
def get(self,request,*args, **kwargs):
|
||||||
|
uuid=request.query_params.get('uuid',None)
|
||||||
|
tim=Timbres.objects.filter(uuid=uuid).first()
|
||||||
|
if tim is not None:
|
||||||
|
print(tim.rfcp)
|
||||||
|
|
||||||
|
return Response({"rfcp":tim.rfcp,"detail":""})
|
||||||
|
|
||||||
|
return Response({"rfcp":"",'detail':"404 not found uuid"})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class add_timbre(APIView):
|
class add_timbre(APIView):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -57,99 +57,54 @@ class ActiveTokenSession_Admin(admin.ModelAdmin):
|
|||||||
class SuspensionPermisoInline(admin.TabularInline):
|
class SuspensionPermisoInline(admin.TabularInline):
|
||||||
model = SuspensionPermiso
|
model = SuspensionPermiso
|
||||||
extra = 1
|
extra = 1
|
||||||
def get_formset(self, request, obj=None, **kwargs):
|
# def get_formset(self, request, obj=None, **kwargs):
|
||||||
# Utiliza el objeto 'obj' (el módulo actual) para filtrar el queryset
|
# # Utiliza el objeto 'obj' (el módulo actual) para filtrar el queryset
|
||||||
formset = super().get_formset(request, obj, **kwargs)
|
# formset = super().get_formset(request, obj, **kwargs)
|
||||||
|
|
||||||
if obj:
|
# if obj:
|
||||||
print('SDL',obj.modulo.permisos.all())
|
# print('SDL',obj.modulo.permisos.all())
|
||||||
formset.form.base_fields['permiso'].queryset = obj.modulo.permisos.all()
|
# formset.form.base_fields['permiso'].queryset = obj.modulo.permisos.all()
|
||||||
return formset
|
# return formset
|
||||||
|
|
||||||
class SuspensionModuloInline(admin.TabularInline):
|
class SuspensionModuloInline(admin.TabularInline):
|
||||||
model = SuspensionModulo
|
model = SuspensionModulo
|
||||||
|
|
||||||
|
|
||||||
class SuspensionModuloAdmin(admin.ModelAdmin):
|
|
||||||
list_display = ['modulo','suspendido','supension_modPerm_id']
|
|
||||||
inlines=[SuspensionPermisoInline]
|
|
||||||
|
|
||||||
|
|
||||||
class Suspension_Modulos_Permisos_ClienteAdmin(admin.ModelAdmin):
|
class Suspension_Modulos_Permisos_ClienteAdmin(admin.ModelAdmin):
|
||||||
inlines = [SuspensionModuloInline]
|
inlines = [SuspensionModuloInline,SuspensionPermisoInline]
|
||||||
|
|
||||||
def save_model(self, request, obj, form, change):
|
def save_model(self, request, obj, form, change):
|
||||||
super().save_model(request, obj, form, change)
|
super().save_model(request, obj, form, change)
|
||||||
|
|
||||||
for modulo in obj.suspensionmodulo_set.all():
|
for modulo in obj.suspensionmodulo_set.all():
|
||||||
|
print(modulo, 'permisos',modulo.modulo.permisos.all())
|
||||||
for permiso in modulo.modulo.permisos.all():
|
for permiso in modulo.modulo.permisos.all():
|
||||||
|
print('borrar?',permiso.delete)
|
||||||
|
|
||||||
permObj,created=SuspensionPermiso.objects.get_or_create(
|
permObj,created=SuspensionPermiso.objects.get_or_create(
|
||||||
suspension_modulo=modulo,
|
supension_modPermP=obj,
|
||||||
|
suspension_modulo=modulo.modulo,
|
||||||
permiso=permiso,
|
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(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)
|
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)
|
admin.site.register(Sistemas_por_cliente_A24)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from django import forms
|
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
|
from datetime import datetime
|
||||||
|
|
||||||
class ClienteForm_IMMEX(forms.ModelForm):
|
class ClienteForm_IMMEX(forms.ModelForm):
|
||||||
@@ -21,4 +22,55 @@ class ClienteForm_IMMEX(forms.ModelForm):
|
|||||||
|
|
||||||
if Activo and fecha_baja:
|
if Activo and fecha_baja:
|
||||||
self._errors['fecha_baja'] = self.error_class(["El parametro activo no puede estar seleccionado si hay fecha de 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,
|
||||||
|
)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -105,12 +105,16 @@ class SuspensionModulo(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class SuspensionPermiso(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)
|
permiso = models.ForeignKey(Permisos_A24, on_delete=models.CASCADE)
|
||||||
suspendido = models.BooleanField(default=False)
|
suspendido = models.BooleanField(default=False)
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f'{self.permiso}'
|
return f'{self.permiso}'
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering=['suspension_modulo']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from . import views
|
from . import views
|
||||||
|
from . import viewsPermisos
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
@@ -25,5 +26,10 @@ urlpatterns = [
|
|||||||
path('api/admin/', include(router.urls)),
|
path('api/admin/', include(router.urls)),
|
||||||
|
|
||||||
path('api/checar_permisos/',views.ChecarPermisos.as_view(), name='api_ChecarPermisos'),
|
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'),
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
@@ -194,6 +194,8 @@ class RegistroUsuarios(APIView):
|
|||||||
from_email='aduanasoftpruebas@gmail.com',
|
from_email='aduanasoftpruebas@gmail.com',
|
||||||
recipient_list=[email],
|
recipient_list=[email],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Check_IMMEX_RFC(APIView):
|
class Check_IMMEX_RFC(APIView):
|
||||||
"""Verifica que el cliente pueda Timbrar"""
|
"""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})
|
return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RegisterIMMEX_Device_APIView(APIView):
|
class RegisterIMMEX_Device_APIView(APIView):
|
||||||
"""Register IMMEX Devices
|
"""Register IMMEX Devices
|
||||||
se manda el siguiente JSON
|
se manda el siguiente JSON
|
||||||
|
|||||||
172
IMMEX/viewsPermisos.py
Normal file
172
IMMEX/viewsPermisos.py
Normal 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))
|
||||||
39
Templates/IMMEX/modulos/edit_permisos.html
Normal file
39
Templates/IMMEX/modulos/edit_permisos.html
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% load widget_tweaks %}
|
||||||
|
|
||||||
|
{% block title %}Add Cliente IMMEX {% endblock title %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h2>Crear Módulo/Permisos</h2>
|
||||||
|
<form method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
|
||||||
|
<h3>Selecciona Módulo</h3>
|
||||||
|
{{ modulo_formset.management_form }}
|
||||||
|
{% for form in modulo_formset.forms %}
|
||||||
|
<div class="form-group">
|
||||||
|
{{ form}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<h3>Selecciona Permisos para modulo</h3>
|
||||||
|
<div class="">
|
||||||
|
|
||||||
|
{{ permiso_formset.management_form }}
|
||||||
|
{% for form in permiso_formset.forms %}
|
||||||
|
<div class="form-group">
|
||||||
|
{{ form }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-outline-success">Guardar</button>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
36
Templates/IMMEX/modulos/modulo-create.html
Normal file
36
Templates/IMMEX/modulos/modulo-create.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% load widget_tweaks %}
|
||||||
|
|
||||||
|
{% block title %}Add Cliente IMMEX {% endblock title %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h2>Crear Módulo/Permisos</h2>
|
||||||
|
<form method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
|
||||||
|
<h3>Selecciona Módulo</h3>
|
||||||
|
{{ modulo_formset.management_form }}
|
||||||
|
{% for form in modulo_formset.forms %}
|
||||||
|
{{ form.as_table }}
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<h3>Selecciona Permisos para modulo</h3>
|
||||||
|
<div class="">
|
||||||
|
|
||||||
|
{{ permiso_formset.management_form }}
|
||||||
|
{% for form in permiso_formset.forms %}
|
||||||
|
<div class="form-group">
|
||||||
|
{{ form }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-outline-success">Guardar</button>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
83
Templates/IMMEX/modulos/modulos_clientes.html
Normal file
83
Templates/IMMEX/modulos/modulos_clientes.html
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% block title %}Add Modulos Por cliente {% endblock title %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<table class="table">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th scope="col">#</th>
|
||||||
|
<th scope="col">Sistema-cliente</th>
|
||||||
|
<th><a class="btn btn-info" href="{% url 'permisos-clientesModulos-create' %}">Agregar Modulos por cliente</a></th>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
{% for row in object_list %}
|
||||||
|
<tr>
|
||||||
|
<th>{{row.id}}</th>
|
||||||
|
<th scope="row">{{row.sistema_cliente}}</th>
|
||||||
|
<th>
|
||||||
|
<div class="row ml-2">
|
||||||
|
<div class="row-col mr-1">
|
||||||
|
<a class="btn btn-outline-info" href="{% url 'permisos-clientesModulos-update' row.pk %}">Edit</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row-col">
|
||||||
|
<button type="button" class="btn btn-danger" onclick="llamarAction(`{% url 'permisos-clientesModulos-delete' row.pk %}`)">
|
||||||
|
Eliminar
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- Modal -->
|
||||||
|
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<form id="delete-form" method="post" >
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="next" value="{% url 'permisos-clientesModulos' %}">
|
||||||
|
Seguro que deseas borrar el registro ?
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
|
<button type="submmit" class="btn btn-danger">Eliminar</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function addAction(url){
|
||||||
|
var formulario = document.getElementById('delete-form');
|
||||||
|
formulario.setAttribute('action',url);
|
||||||
|
}
|
||||||
|
function llamarAction(nuevaRuta) {
|
||||||
|
console.log(nuevaRuta)
|
||||||
|
addAction(nuevaRuta);
|
||||||
|
|
||||||
|
// Aquí puedes agregar cualquier otra lógica que desees realizar cuando se presiona el botón
|
||||||
|
// Por ejemplo, mostrar el modal
|
||||||
|
$('#exampleModal').modal('show');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{% endblock content %}
|
||||||
Reference in New Issue
Block a user