Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement