import io, sweetify, os ,logging, tempfile from django.contrib.auth.decorators import login_required from io import BytesIO from django.db.models import Q from django.utils import timezone from datetime import datetime from django.conf import settings from django.template.loader import get_template from django.contrib.staticfiles import finders from xhtml2pdf import pisa from django.core.paginator import Paginator from django.core.exceptions import ObjectDoesNotExist from django.urls import reverse from django.template.loader import render_to_string from django.shortcuts import render, redirect, get_object_or_404 from django.contrib import messages from django.http import HttpResponse, JsonResponse, HttpResponseRedirect, FileResponse, HttpRequest from .models import Brigada, Batallones, Armas, Municiones, Personas, BrigadaDigital, UnidadDigital, Abastecimiento, Producto,ProductoAbastecimiento, ArmasDePersonas, Cemanblin, Cemantar, Cemansac from .forms import BrigadaForm, BatallonForm, ArmaForm, MunicionForm, PersonaForm, BrigadaDigitalForm, UnidadDigitalForm, EnviarProductoForm, ProductoForm, AbastecimientoForm, ArmasDePersonasForm, CemanblinForm, CemantarForm, CemansacForm # tabla principal editar , eliminar y crear brigadas @login_required def servicio(request): servicio = Brigada.objects.all() if request.method == 'POST': formularios = BrigadaForm(request.POST or None) if formularios.is_valid(): formularios.save() messages.success(request, 'El Registro de la Brigada se efectuo con Exito') return redirect('servicio') else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formularios = BrigadaForm() context = {'servicios':servicio , 'formulario': formularios} return render(request, 'servicio/index.html', context) @login_required def editar(request,brigada_id): elemento = Brigada.objects.get(id=brigada_id) if request.method == 'POST': form = BrigadaForm(request.POST or None , instance=elemento) if form.is_valid(): form.save() messages.success(request, 'Se edito la Brigada con Exito') return redirect('servicio') else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') form = BrigadaForm(instance=elemento) context = {'formulario': form} return render(request, 'servicio/editar.html', context) @login_required def eliminar(request, id): try: registro = Brigada.objects.get(id=id) registro.delete() messages.success(request, "Registro eliminado correctamente.") except Brigada.DoesNotExist: messages.error(request, 'Algo Salio Mal') return redirect('servicio') # cada brigada tiene unidades que a su vez tienen armamento y municiones pueden ver y editar # aqui con este codigo muestra el resumen completo de la brigada y puede crear unidades de esas brigada de acuerdo a su id agregado @login_required def resumen(request, resumen_id): try: primero = Brigada.objects.get(id=resumen_id) except Brigada.DoesNotExist: messages.error(request, "La Brigada no existe") return redirect('servicio') servicio = Batallones.objects.filter(primero=primero) if request.method == 'POST': formularios = BatallonForm(request.POST) if formularios.is_valid(): nueva_compania = formularios.save() messages.success(request, "Se registró la Unidad correctamente") return redirect('resumen', resumen_id=nueva_compania.primero.id) else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formularios = BatallonForm() context = {'servicios': servicio,'primero': primero,'formulario': formularios,} return render(request, 'servicio/resumen.html', context) @login_required def batallon_edit(request, unidad_id): elemento = Batallones.objects.get(id=unidad_id) primero = Brigada.objects.get(id=elemento.primero.id) if request.method == 'POST': formularios = BatallonForm(request.POST, instance=elemento) if formularios.is_valid(): nueva_compania = formularios.save() messages.success(request, 'Se edito la Unidad con Exito') return redirect('resumen', resumen_id=nueva_compania.primero.id) else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') formularios = BatallonForm(instance=elemento) context = {'formulario': formularios, 'primero': primero} return render(request, 'batallon/batallon_edit.html', context) # este codigo puede usted ver la informacion completa de las unidades y registrar armas y municiones # tambien ver la tabla completa de las armas y municiones registradas que dependen de esa unidad que a su vez depende de una brigada @login_required def info(request, unidad_id): try: batallon = Batallones.objects.get(id=unidad_id) except ObjectDoesNotExist: messages.error(request, "Batallón no encontrado") return redirect('servicio') servicio = Armas.objects.filter(segundo=batallon) municiones = Municiones.objects.filter(tercero=batallon) if request.method == 'POST': formulario_armas = ArmaForm(request.POST) formulario_municion = MunicionForm(request.POST) if formulario_armas.is_valid(): nueva_compania = formulario_armas.save() messages.success(request, "Se registró el Arma correctamente") return redirect('infor', unidad_id=nueva_compania.segundo.id) if formulario_municion.is_valid(): nueva_compania = formulario_municion.save() messages.success(request, "Se registró la Munición correctamente") return redirect('infor', unidad_id=nueva_compania.tercero.id) messages.error(request, 'Faltaron campos por rellenar en los Formularios') else: formulario_armas = ArmaForm() formulario_municion = MunicionForm() context = { 'batallon': batallon, 'servicio': servicio, 'municiones': municiones, 'formulario_armas': formulario_armas, 'formulario_municion': formulario_municion, } return render(request, 'batallon/info.html', context) @login_required def armas_edit(request, arma_id): elemento = Armas.objects.get(id=arma_id) segundo = Batallones.objects.get(id=elemento.segundo.id) if request.method == 'POST': formulario_armas = ArmaForm(request.POST, instance=elemento) if formulario_armas.is_valid(): nueva_comapania = formulario_armas.save() messages.success(request, 'Se edito el Formulario de Armamento con Exito') return redirect('infor', unidad_id=nueva_comapania.segundo.id) else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formulario_armas = ArmaForm(instance=elemento) context = {'formulario_armas': formulario_armas, 'batallon': segundo} return render(request,'batallon/batallon_armas_edit.html', context) @login_required def municion_edit(request, municion_id): elemento = Municiones.objects.get(id=municion_id) tercero = Batallones.objects.get(id=elemento.tercero.id) if request.method == 'POST': formulario_municion = MunicionForm(request.POST, instance=elemento) if formulario_municion.is_valid(): nueva_comapania = formulario_municion.save() messages.success(request, 'Se edito el Formulario de Munición con Exito') return redirect('infor', unidad_id=nueva_comapania.tercero.id) else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formulario_municion = MunicionForm(instance=elemento) context = {'formulario_municion':formulario_municion, 'batallon':tercero} return render(request, 'batallon/batallon_municion_edit.html',context) # tabla principal, crear, editar y eliminar personas @login_required def persona_index(request): personas = Personas.objects.all() if request.method == 'POST': formularios = PersonaForm(request.POST or None, request.FILES or None) if formularios.is_valid(): formularios.save() if 'img' in request.FILES: formularios.instance.img = request.FILES['img'] messages.success(request, "Se registro la Persona correctamente") return redirect('personas') else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formularios = PersonaForm() context = {'personas':personas, 'formulario': formularios} return render(request, 'personas/persona_index.html', context) @login_required def personas_editar(request,personas_id): personas = Personas.objects.get(id=personas_id) if request.method == 'POST': formularios = PersonaForm(request.POST or None, request.FILES or None, instance=personas) if formularios.is_valid(): formularios.save() messages.success(request, "Se editó la Persona correctamente") return redirect('personas') else: messages.error(request, 'Que paso algo esta Mal, revisa') else: formularios = PersonaForm(instance=personas) context = {'formulario':formularios, 'personas':personas} return render(request, 'personas/personas_editar.html', context) @login_required def persona_informacion(request, persona_id): person = Personas.objects.get(pk=persona_id) armas = ArmasDePersonas.objects.filter(persona=person) if request.method == 'POST': formularios = ArmasDePersonasForm(request.POST) if formularios.is_valid(): formularios.save() messages.success(request, "Se registró nuevo armamento asignado correctamente") return redirect('informacion', persona_id=person.id) else: messages.error(request, 'Revisa el Formulario algo salio mal') else: formularios = ArmasDePersonasForm() context = {'person': person, 'armas': armas, 'formulario': formularios} return render(request, 'personas/persona_informacion.html', context) # digitalización @login_required def digital_index(request): digitales = BrigadaDigital.objects.all() if request.method == 'POST': formularios = BrigadaDigitalForm(request.POST or None) if formularios.is_valid(): formularios.save() messages.success(request, "Se Registro Correctamente") return redirect('digital') else: messages.error(request, 'Revisa el Formulario algo salio mal') else: formularios = BrigadaDigitalForm() context = {'digitales': digitales, 'formularios': formularios} return render(request, 'digital/digital_index.html', context) #editar cada opcion de la lista de digitalizaciones @login_required def digital_edit(request, digital_id): digital = BrigadaDigital.objects.get(pk=digital_id) if request.method == 'POST': formularios = BrigadaDigitalForm(request.POST, instance=digital) if formularios.is_valid(): formularios.save() messages.info(request, "Los Datos se actualizaron Correctamente") return redirect('digital') else: messages.error(request, 'No se pudo Actualizar los Datos') else: formularios = BrigadaDigitalForm(instance=digital) context = {"digital": digital , 'formularios':formularios} return render(request,'digital/digital_edit.html',context) def suprimir(request, id): try: digital = BrigadaDigital.objects.get(id=id) digital.delete() messages.success(request, "Se Elimino Correctamente") return redirect('digital') except: messages.error(request, "No se pudo Eliminar") return redirect('digital') @login_required def digital_info(request, digital_id): digital = BrigadaDigital.objects.filter(id=digital_id) digitales = UnidadDigital.objects.filter(digital=digital_id) if request.method == 'POST': formularios = UnidadDigitalForm(request.POST, request.FILES) if formularios.is_valid(): nuevo = formularios.save() id = nuevo.digital.id messages.success(request, "Se Registro Correctamente") return redirect('infodig', digital_id=id) else: messages.error(request, 'Revisa el Formulario algo salio mal') else: formularios = UnidadDigitalForm() context = {'digital': digital, 'digito': digitales, 'formulario': formularios} return render(request, 'digital/digital_info.html', context) @login_required def edit_info(request, digital_id): try: digital = BrigadaDigital.objects.filter(id=digital_id) except BrigadaDigital.DoesNotExist: messages.error(request, 'BrigadaDigital no existe') return redirect('digital') digitales = UnidadDigital.objects.get(id=digital_id) if request.method == 'POST': formularios = UnidadDigitalForm(request.POST, request.FILES, instance=digitales) if formularios.is_valid(): formularios.save() messages.info(request, "Los Datos se actualizaron Correctamente") return redirect('infodig', digital_id=digitales.id) else: messages.error(request, 'No se pudo Actualizar los Datos') else: formularios = UnidadDigitalForm(instance=digitales) context = {"digital": digital , 'digitales':digitales , 'formularios':formularios} return render(request,'digital/digital_info_edit.html',context) #INVENTARIO @login_required def inventario_index(request): inventario = Producto.objects.all() if request.method == 'POST': formularios = ProductoForm(request.POST) if formularios.is_valid(): formularios.save() messages.success(request, "Se registro el inventario correctamente") return redirect('inventario') else: messages.error(request, 'Revisa el Formulario algo salio mal') else: formularios = ProductoForm() context = {'inventario':inventario, 'formulario':formularios} return render(request, 'inventario/inventario_index.html', context) @login_required def inventario_edit(request, in_id): inventario = Producto.objects.get(id=in_id) if request.method == 'POST': formularios = ProductoForm(request.POST or None , instance=inventario) if formularios.is_valid(): formularios.save() messages.success(request, 'Se edito el Inventario con Exito') return redirect('inventario') else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formularios = ProductoForm(instance=inventario) context = {'formulario': formularios} return render(request, 'inventario/inventario_edit.html', context) @login_required def delete(request, id): try: registro = Producto.objects.get(id=id) registro.delete() messages.success(request, "Registro eliminado correctamente.") except Producto.DoesNotExist: messages.error(request, 'Algo Salio Mal', timer=8000) return redirect('inventario') @login_required def inventario_enviar(request): producto = Producto.objects.all() punto = Abastecimiento.objects.all() if request.method == 'POST': formularios = EnviarProductoForm(request.POST) if formularios.is_valid(): producto_obj = formularios.cleaned_data['producto'] abastecimiento = formularios.cleaned_data['abastecimiento'] cantidad = formularios.cleaned_data['cantidad'] serial = formularios.cleaned_data['serial'] if producto_obj.cantidad >= cantidad: producto_obj.cantidad -= cantidad producto_obj.save() ProductoAbastecimiento.objects.create( producto=producto_obj, abastecimiento=abastecimiento, cantidad=cantidad, serial=serial, precio=producto_obj.precio, movimiento=producto_obj.nombre) messages.success(request, 'Se envió el paquete correctamente para el punto de abastecimiento') return redirect('inventario') else: messages.error(request, 'No hay suficientes unidades') return redirect('inventario') else: formularios = EnviarProductoForm() context = {'formulario': formularios, 'producto': producto, 'punto': punto} return render(request, 'inventario/inventario_enviar.html', context) @login_required def abastecimiento(request): abasto = Abastecimiento.objects.all() if request.method == 'POST': formularios = AbastecimientoForm(request.POST) if formularios.is_valid(): formularios.save() messages.success(request, "Se registró el abastecimiento correctamente") return redirect('abastecimiento') else: messages.error(request, 'Revisa el Formulario algo salio mal') else: formularios = AbastecimientoForm() context = {'abasto': abasto, 'formulario': formularios} return render(request, 'abastecimiento/abas_index.html', context) @login_required def abas_info(request, punto_id): try: abastecimiento = Abastecimiento.objects.get(id=punto_id) except Abastecimiento.DoesNotExist: return render(request, 'abastecimiento') producto = ProductoAbastecimiento.objects.filter(abastecimiento=abastecimiento) context = {'producto': producto} return render(request, 'abastecimiento/abas_info.html', context) # PDF IMPRIMIR REPORTES TODOS LOS PDf del MODULO DE PERSONAS, Y BRIGADAS,UNIDADES, MUNICIONES Y ARMAS @login_required def pdf_uno(request): try: year = request.GET.get('year', None) fecha = datetime.now().date() img_uno = settings.STATIC_ROOT + '/imagenes/imagen.png' img_dos = settings.STATIC_ROOT + '/imagenes/dos.png' prueba = Personas.objects.filter(anio=year) template = get_template('pdf/pdf_uno.html') context = { 'prueba': prueba, 'year':year, 'fecha':fecha, 'img_uno':img_uno, 'img_dos':img_dos } html = template.render(context) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="report.pdf"' pisa_status = pisa.CreatePDF(html, dest=response) if pisa_status.err: messages.error(request, 'Error al generar el PDF', extra_tags='alert-danger') return redirect('personas') return response except: return redirect('personas') @login_required def pdf_dos(request, pdf_id): try: person = Personas.objects.get(pk=pdf_id) armas = ArmasDePersonas.objects.filter(persona=person) fecha = datetime.now().date() img_uno = settings.STATIC_ROOT + '/imagenes/imagen.png' img_dos = settings.STATIC_ROOT + '/imagenes/dos.png' template = get_template('pdf/pdf_dos.html') context = {'person': person, 'armas': armas, 'fecha':fecha, 'img_uno':img_uno, 'img_dos':img_dos } html = template.render(context) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = f'attachment; filename="reporte.pdf"' pisa_status = pisa.CreatePDF(html, dest=response) if pisa_status.err: messages.error(request, 'Error al generar el PDF', extra_tags='alert-danger') return redirect('servicio') return response except Personas.DoesNotExist: messages.error(request, 'Persona no encontrada') return redirect('personas') @login_required def pdf_tres(request, pdf_id): try: fecha = datetime.now().date() img_uno = settings.STATIC_ROOT + '/imagenes/imagen.png' img_dos = settings.STATIC_ROOT + '/imagenes/dos.png' brigada = Brigada.objects.get(batallones=pdf_id) batallones =Batallones.objects.get(id=pdf_id) armas = Armas.objects.filter(segundo=batallones) template = get_template('pdf/pdf_tres.html') context = { 'brigada':brigada, 'batallones':batallones, 'armas':armas, 'fecha':fecha, 'img_uno':img_uno, 'img_dos':img_dos } html = template.render(context) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = f'attachment; filename="reporte.pdf"' pisa_status = pisa.CreatePDF(html, dest=response) if pisa_status.err: messages.error(request, 'Error al generar el PDF', extra_tags='alert-danger') return redirect('servicio') return response except Brigada.DoesNotExist: messages.error(request, 'PDF de Brigada no Encontrada') return redirect('servicio') except Batallones.DoesNotExist: messages.error(request, 'PDF de Batallones no Encontrada') return redirect('servicio') except Armas.DoesNotExist: messages.error(request, 'PDF de Armas no Encontrada') return redirect('servicio') @login_required def pdf_cuatro(request, pdf_id): try: fecha = datetime.now().date() img_uno = settings.STATIC_ROOT + '/imagenes/imagen.png' img_dos = settings.STATIC_ROOT + '/imagenes/dos.png' brigada = Brigada.objects.get(batallones=pdf_id) batallones =Batallones.objects.get(id=pdf_id) municion = Municiones.objects.filter(tercero=batallones) template = get_template('pdf/pdf_cuatro.html') context = { 'brigada':brigada, 'batallones':batallones, 'municion':municion, 'fecha':fecha, 'img_uno':img_uno, 'img_dos':img_dos } html = template.render(context) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = f'attachment; filename="reporte.pdf"' pisa_status = pisa.CreatePDF(html, dest=response) if pisa_status.err: messages.error(request, 'Error al generar el PDF', extra_tags='alert-danger') return redirect('servicio') return response except Brigada.DoesNotExist: messages.error(request, 'PDF de Brigada no Encontrada') return redirect('servicio') except Batallones.DoesNotExist: messages.error(request, 'PDF de Batallones no Encontrada') return redirect('servicio') except Municiones.DoesNotExist: messages.error(request, 'PDF de Municion no Encontrada') return redirect('servicio') @login_required def pdf_cinco(request, pdf_id): try: fecha = datetime.now().date() img_uno = settings.STATIC_ROOT + '/imagenes/imagen.png' img_dos = settings.STATIC_ROOT + '/imagenes/dos.png' armas = Armas.objects.get(pk=pdf_id) person = Batallones.objects.filter(armas=armas) codigo = Brigada.objects.get(batallones__armas=armas) template = get_template('pdf/pdf_cinco.html') context = {'armas': armas , 'person':person, 'img_uno':img_uno, 'img_dos':img_dos, 'fecha':fecha, 'codigo':codigo } html = template.render(context) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = f'attachment; filename="reporte.pdf"' pisa_status = pisa.CreatePDF(html, dest=response) if pisa_status.err: messages.error(request, 'Error al generar el PDF', extra_tags='alert-danger') return redirect('servicio') return response except Armas.DoesNotExist: sweetify.error(request, 'PDF de Armas no Encontrada', timer=8000) return redirect('servicio') except Brigada.DoesNotExist: sweetify.error(request, 'PDF de Brigada no Encontrada', timer=8000) return redirect('servicio') @login_required def pdf_sexto(request, id): try: fecha = datetime.now().date() img_uno = settings.STATIC_ROOT + '/imagenes/imagen.png' img_dos = settings.STATIC_ROOT + '/imagenes/dos.png' municiones = Municiones.objects.get(id=id) batallones = Batallones.objects.filter(municiones=municiones) brigada = Brigada.objects.get(batallones__municiones = municiones) template = 'pdf/pdf_sexto.html' context = { 'batallones':batallones, 'municiones':municiones, 'brigada':brigada, 'img_uno':img_uno, 'img_dos':img_dos, 'fecha':fecha, } template = get_template(template) html = template.render(context) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = f'attachment; filename="reporte.pdf"' pisa_status = pisa.CreatePDF(html, dest=response) if pisa_status.err: messages.error(request, 'Error al generar el PDF') return HttpResponse('We had some errors
' + html + '
') return response except Municiones.DoesNotExist: messages.error(request, 'PDF de Municiones no Encontrada') return redirect('servicio') except Batallones.DoesNotExist: messages.error(request, 'PDF de Batallones no Encontrada') return redirect('servicio') except Brigada.DoesNotExist: messages.error(request, 'PDF de Brigada no Encontrada') return redirect('servicio') def pdf_sextimo(request, id): try: fecha = datetime.now().date() img_uno = settings.STATIC_ROOT + '/imagenes/imagen.png' img_dos = settings.STATIC_ROOT + '/imagenes/dos.png' producto = Producto.objects.get(id=id) template = get_template('pdf/pdf_sextimo.html') context ={ 'producto':producto, 'img_uno':img_uno, 'img_dos':img_dos, 'fecha':fecha, } html = template.render(context) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = f'attachment: filename="reporte.pdf' pisa_status = pisa.CreatePDF(html, dest=response) if pisa_status.err: messages.error(request, 'Error al generar el PDF') return redirect('inventario') return response except Producto.DoesNotExist: messages.error(request, 'PDF del Producto no Encontrado') return redirect('inventario') def pdf_ocho(request): try: fecha = datetime.now().date() img_uno = settings.STATIC_ROOT + '/imagenes/imagen.png' img_dos = settings.STATIC_ROOT + '/imagenes/dos.png' producto = Producto.objects.all() template = get_template('pdf/pdf_ocho.html') context ={ 'producto':producto, 'img_uno':img_uno, 'img_dos':img_dos, 'fecha':fecha, } html = template.render(context) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = f'attachment: filename="reporte.pdf' pisa_status = pisa.CreatePDF(html, dest=response) if pisa_status.err: messages.error(request, 'Error al generar el PDF', timer=8000) return redirect('inventario') return response except Producto.DoesNotExist: messages.error(request, 'PDF de la Lista de Producto no Encontrado', timer=8000) return redirect('inventario') # AQUI ESTAN LOS CENTROS DE REPARACIONES @login_required def cemantar(request): cemantar = Cemantar.objects.all() if request.method == 'POST': formulario_cemantar = CemantarForm(request.POST) if formulario_cemantar.is_valid(): formulario_cemantar.save() messages.success(request, 'El Registro del Equipo Cemantar se efectuó con Éxito') return redirect('cemantar') else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formulario_cemantar = CemantarForm() context = {'cemantar': cemantar, 'formulario_cemantar': formulario_cemantar} return render(request, 'centros/cemantar_index.html', context) @login_required def cemansac(request): cemansac = Cemansac.objects.all() if request.method == 'POST': formulario_cemansac = CemansacForm(request.POST) if formulario_cemansac.is_valid(): formulario_cemansac.save() messages.success(request, 'El Registro del Equipo Cemansac se efectuó con Éxito') return redirect('cemansac') else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formulario_cemansac = CemansacForm() context = {'cemansac': cemansac, 'formulario_cemansac': formulario_cemansac} return render(request, 'centros/cemansac_index.html', context) @login_required def cemanblin(request): cemanblin = Cemanblin.objects.all() if request.method == 'POST': formulario_cemanblin = CemanblinForm(request.POST) if formulario_cemanblin.is_valid(): formulario_cemanblin.save() messages.success(request, 'El Registro del Equipo Cemanblin se efectuó con Éxito') return redirect('cemanblin') else: messages.error(request, 'Faltaron campos por rellenar en el Formulario') else: formulario_cemanblin = CemanblinForm() context = {'cemanblin': cemanblin, 'formulario_cemanblin': formulario_cemanblin} return render(request, 'centros/cemanblin_index.html', context) # USUARIOS Y RESGISTROS Y PERMISOS from django.contrib.auth.models import User, Permission from django.contrib.auth import logout from .forms import EditUserForm, RegisterForm, CambioForm, RegistroForm @login_required def exit(request): if request.session.is_empty(): messages.error(request, "Su sesión ha expirado. Por favor, inicie sesión nuevamente para continuar.") logout(request) return redirect(reverse('login')) @login_required def usuarios(request): usuarios = User.objects.all() if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): user = form.save(commit=False) user.set_password(form.cleaned_data['password']) user.save() messages.success(request, 'Se Registro Usuario con Éxito') return redirect('usuarios') else: messages.error(request, 'Faltan Campos por Rellenar o la Contraseña no Coinciden') else: form = RegisterForm() context = {'usuarios': usuarios, 'form': form} return render(request, 'usuarios/tabla_user.html', context) @login_required def info_user(request, user_id): info_user = User.objects.get(id=user_id) permissions = Permission.objects.all() assigned_permissions_ids = info_user.user_permissions.values_list('id', flat=True) if request.method == 'POST': form = EditUserForm(request.POST, instance=info_user) if form.is_valid(): form.save() selected_permissions_ids = request.POST.getlist('user_permissions') selected_permissions = Permission.objects.filter(id__in=selected_permissions_ids) info_user.user_permissions.set(selected_permissions) messages.success(request, 'Se Actualizo con Éxito') return redirect('usuarios') else: messages.error(request, 'Faltaron campos 2 por rellenar en el Formulario') else: form = EditUserForm(instance=info_user) context = {'info_user': info_user, 'permissions': permissions, 'form': form, 'assigned_permissions_ids': assigned_permissions_ids} return render(request, 'usuarios/info_user.html', context) @login_required def cambio_password(request, id): cambio = User.objects.get(id=id) print(id) if request.method == 'POST': formulario_cambio = CambioForm(request.POST, instance=cambio) if formulario_cambio.is_valid(): user = formulario_cambio.save(commit=False) user.set_password(formulario_cambio.cleaned_data['password']) user.save() messages.success(request, "Contraseña Cambiada Correctamente") return redirect('info_user', user_id=cambio.id) else: messages.error(request, 'Las Contrasenas no Coinciden o no cumplen las normas de seguridad') else: formulario_cambio = CambioForm(instance=cambio) return render(request, 'usuarios/cambio_password.html', {'formulario_cambio': formulario_cambio , 'cambio':cambio}) def registro(request): registro_super = User.objects.all() if request.method == 'POST': form = RegistroForm(request.POST) if form.is_valid(): # Obtener los datos del formulario password = form.cleaned_data.get('password') password_confirmation = request.POST.get('password_confirmation') is_active = request.POST.get('is_active', False) is_staff = request.POST.get('is_staff', False) # Validar que las contraseñas coincidan if password != password_confirmation: form.add_error('password', 'Las contraseñas no coinciden') else: # Crear el usuario user = form.save(commit=False) # No guardar aún user.set_password(password) # Establecer la contraseña user.save() # Ahora sí guardar el usuario return redirect('login') else: form = RegistroForm() context = {'form': form, 'registro_super': registro_super} return render(request, 'registration/registro.html', context)