File size: 4,823 Bytes
fade806 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# -*- coding: utf-8 -*-
"""Untitled19.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/12FC8IfauEBNv8yXDkOWez5aZ0F6sD5q1
"""
import gradio as gr
import csv
import re
from datetime import datetime
from hashlib import sha256
import os
from PIL import Image
import requests
from io import BytesIO
# Configuración
CSV_FILE = "registros_incidencias.csv"
PASSWORD_HASH = "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918" # Hash de "admin"
PRESTACIONES = [
"1. PROFESIONALIZACIÓN",
"2. ESTIMULOS DE PRODUCTIVIDAD",
"3. UNIFORMES",
"4. DESCUENTOS INJUSTIFICADOS",
"5. SEGURO DE VIDA",
"6. AHORRO SOLIDARIO",
"7. OTROS"
]
REGEX_CURP = re.compile(r'^[A-Z]{4}[0-9]{6}[HM][A-Z]{5}[A-Z0-9]{2}$')
def validar_curp(curp):
return bool(REGEX_CURP.match(curp.upper()))
def inicializar_csv():
if not os.path.exists(CSV_FILE):
with open(CSV_FILE, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([
"Fecha_Registro", "Entidad", "Nombre",
"CURP", "Prestacion", "Quincena"
])
def guardar_registro(entidad, nombre, curp, prestacion, quincena):
if not all([entidad, nombre, curp, prestacion, quincena]):
return "⚠️ Todos los campos son obligatorios"
if not validar_curp(curp):
return "⚠️ CURP inválido"
try:
with open(CSV_FILE, 'a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([
datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
entidad.strip().upper(),
nombre.strip().title(),
curp.upper(),
prestacion,
quincena
])
return "✅ Registro exitoso"
except Exception as e:
return f"❌ Error: {str(e)}"
def verificar_credenciales(username, password):
return username == "admin" and sha256(password.encode()).hexdigest() == PASSWORD_HASH
# Interfaz principal
with gr.Blocks(title="Sistema de Captura") as app:
# Estado de la aplicación
logged_in = gr.State(False)
# Interfaz de login
with gr.Column(visible=True) as login_col:
# Agrega la imagen aquí (puede ser desde URL o archivo local)
try:
# Ejemplo con imagen desde URL
response = requests.open("d5bb4c4a-f9e5-4c70-a53c-23b7dc3872a1.jpg")
img = Image.open(BytesIO(response.content))
login_img = gr.Image(img, label="", interactive=False, show_label=False)
except:
# Si falla la carga, puedes usar una imagen local
# Coloca tu imagen en el mismo directorio que el script
login_img = gr.Image("d5bb4c4a-f9e5-4c70-a53c-23b7dc3872a1.jpg", label="", interactive=False, show_label=False)
gr.Markdown("# Sistema de Captura de Incidencias")
username = gr.Textbox(label="Usuario")
password = gr.Textbox(label="Contraseña", type="password")
login_btn = gr.Button("Ingresar")
login_msg = gr.Textbox(label="Mensaje", interactive=False)
# Interfaz de captura
with gr.Column(visible=False) as captura_col:
gr.Markdown("## Captura de Datos")
with gr.Row():
with gr.Column():
entidad = gr.Textbox(label="Entidad Federativa")
nombre = gr.Textbox(label="Nombre completo")
curp = gr.Textbox(label="CURP")
prestacion = gr.Dropdown(PRESTACIONES, label="Prestación afectada")
quincena = gr.Textbox(label="Quincena (AAAA-MM-DD)")
submit_btn = gr.Button("Guardar")
resultado = gr.Textbox(label="Resultado")
logout_btn = gr.Button("Cerrar sesión")
# Funciones de control
def autenticar(user, pwd):
if verificar_credenciales(user, pwd):
return {
login_col: gr.update(visible=False),
captura_col: gr.update(visible=True),
login_msg: ""
}
return {
login_msg: "⚠️ Credenciales incorrectas"
}
def cerrar_sesion():
return {
login_col: gr.update(visible=True),
captura_col: gr.update(visible=False),
login_msg: ""
}
# Eventos
login_btn.click(
autenticar,
inputs=[username, password],
outputs=[login_col, captura_col, login_msg]
)
logout_btn.click(
cerrar_sesion,
outputs=[login_col, captura_col, login_msg]
)
submit_btn.click(
guardar_registro,
inputs=[entidad, nombre, curp, prestacion, quincena],
outputs=resultado
)
# Inicializar
inicializar_csv()
app.launch() |