Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
import mysql.connector from docx import Document # Conexión a la base de datos MySQL def conectar_db(): try: conexion = mysql.connector.connect( host="localhost", user="root", password="", database="acu_v2" ) return conexion except mysql.connector.Error as err: print(f"Error al conectar a la base de datos: {err}") return None # Consultar por DNI def obtener_datos_por_dni(dni): if dni == "0": return "atras" conexion = conectar_db() if not conexion: return None cursor = conexion.cursor(dictionary=True) query = """ SELECT g_persona.ndoc, g_persona.nomcompleto, p_puesto.codigo, p_puesto.codigo_ant, p_giro.des_giro FROM g_persona INNER JOIN p_puesto_socio ON p_puesto_socio.idsocio = g_persona.idpersona INNER JOIN p_puesto ON p_puesto.idpuesto = p_puesto_socio.idpuesto INNER JOIN p_giro ON p_puesto.idgiro = p_giro.idgiro WHERE g_persona.ndoc = %s AND p_puesto.activo = 1 AND p_puesto_socio.activo = 1; """ cursor.execute(query, (dni,)) resultados = cursor.fetchall() conexion.close() return resultados # Consultar por Código def obtener_datos_por_codigo(codigo): if codigo == "0": return "atras" conexion = conectar_db() if not conexion: return None cursor = conexion.cursor(dictionary=True) query = """ SELECT g_persona.ndoc, g_persona.nomcompleto, p_puesto.codigo, p_puesto.codigo_ant, p_giro.des_giro FROM p_puesto INNER JOIN p_puesto_socio ON p_puesto.idpuesto = p_puesto_socio.idpuesto INNER JOIN g_persona ON p_puesto_socio.idsocio = g_persona.idpersona INNER JOIN p_giro ON p_puesto.idgiro = p_giro.idgiro WHERE p_puesto.codigo = %s AND p_puesto.activo = 1 AND p_puesto_socio.activo = 1 LIMIT 1; """ cursor.execute(query, (codigo,)) resultado = cursor.fetchone() conexion.close() return resultado # Rellenar y guardar plantilla Word def rellenar_plantilla(datos, plantilla="plantilla.docx"): if not datos: print("No se encontraron datos para la búsqueda realizada.") return # Asegurar que todos los campos existen en los datos datos = { "nombre": datos.get("nomcompleto", ""), "dni": datos.get("ndoc", ""), "codigo": datos.get("codigo", ""), "codigo_ant": datos.get("codigo_ant", ""), "giro": datos.get("des_giro", "") } # Generar nombre de archivo basado en el código nombre_archivo = f"solicitud_{datos['codigo']}.docx" # Cargar la plantilla documento = Document(plantilla) # Reemplazar los marcadores de posición for parrafo in documento.paragraphs: if "{NOMBRE}" in parrafo.text: parrafo.text = parrafo.text.replace("{NOMBRE}", datos["nombre"]) if "{DNI}" in parrafo.text: parrafo.text = parrafo.text.replace("{DNI}", datos["dni"]) if "{CODIGO}" in parrafo.text: parrafo.text = parrafo.text.replace("{CODIGO}", datos["codigo"]) if "{CODIGO_ant}" in parrafo.text: parrafo.text = parrafo.text.replace("{CODIGO_ant}", datos["codigo_ant"]) if "{GIRO}" in parrafo.text: parrafo.text = parrafo.text.replace("{GIRO}", datos["giro"]) # Guardar el documento con los datos reemplazados documento.save(nombre_archivo) print(f"Documento generado exitosamente: {nombre_archivo}") # Menú principal def menu(): while True: print("\n=== Menú de Búsqueda ===") print("1. Buscar por DNI") print("2. Buscar por Código") print("3. Salir") opcion = input("Seleccione una opción: ") if opcion == "1": while True: print("Si quiere retroceder, llene con un 0 en la entrada.") dni = input("Ingrese el DNI: ") resultados = obtener_datos_por_dni(dni) if resultados == "atras": print("Volviendo al menú principal...") break elif resultados: if len(resultados) == 1: rellenar_plantilla(resultados[0]) break else: print("Se encontraron múltiples resultados:") for i, resultado in enumerate(resultados, start=1): print(f"{i}. {resultado['nomcompleto']} - {resultado['codigo']}") eleccion = input("Seleccione una opción: ") if eleccion.isdigit() and 1 <= int(eleccion) <= len(resultados): rellenar_plantilla(resultados[int(eleccion) - 1]) break else: print("Opción no válida. Intente nuevamente.") else: print(f"El número de DNI '{dni}' no es correcto. Escriba nuevamente el DNI.") elif opcion == "2": while True: print("Si quiere retroceder, llene con un 0 en la entrada.") codigo = input("Ingrese el Código: ") datos = obtener_datos_por_codigo(codigo) if datos == "atras": print("Volviendo al menú principal...") break elif datos: rellenar_plantilla(datos) break else: print(f"El código de puesto '{codigo}' es incorrecto. Ingrese nuevamente el código.") elif opcion == "3": print("Saliendo del programa.") break else: print("Opción no válida. Por favor, intente de nuevo.") # Ejecutar el programa if __name__ == "__main__": menu()
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)