|
|
|
|
|
|
|
|
|
|
|
|
|
|
import gradio as gr |
|
|
import pandas as pd |
|
|
from datetime import datetime |
|
|
|
|
|
|
|
|
FACULTADES = [ |
|
|
"Facultad de Ciencias Agropecuarias", |
|
|
"Facultad de Ciencias", |
|
|
"Facultad de Ciencias de la Educación", |
|
|
"Facultad de Ciencias Económicas y Administrativas", |
|
|
"Facultad de Ciencias de la Salud", |
|
|
"Facultad de Derecho", |
|
|
"Facultad de Ingeniería", |
|
|
"Facultad de Estudios a Distancia", |
|
|
"Facultad Chiquinquirá", |
|
|
"Facultad Duitama", |
|
|
"Facultad Sogamoso", |
|
|
] |
|
|
|
|
|
NIVELES_FORMACION = [ |
|
|
"Estudiante de pregrado", |
|
|
"Profesional", |
|
|
"Especialización", |
|
|
"Maestria", |
|
|
"Doctorado", |
|
|
] |
|
|
|
|
|
TIPOS_VINCULACION = [ |
|
|
"Estudiante de pregrado", |
|
|
"Estudiante de posgrado", |
|
|
"Joven investigador", |
|
|
"Docente catedratico", |
|
|
"Docente ocasional medio tiempo", |
|
|
"Docente ocasional tiempo completo", |
|
|
"Docente de planta", |
|
|
"Contrato de Prestación de Servicios", |
|
|
"Externo (aliado)", |
|
|
] |
|
|
|
|
|
TIPOS_DOCUMENTO = ["CC", "TI", "CE"] |
|
|
|
|
|
|
|
|
DEFAULTS = { |
|
|
"Facultad de Ciencias Agropecuarias": { |
|
|
"nivel": "Estudiante de pregrado", |
|
|
"vinc": "Estudiante de pregrado", |
|
|
}, |
|
|
"Facultad de Ciencias": { |
|
|
"nivel": "Profesional", |
|
|
"vinc": "Estudiante de posgrado", |
|
|
}, |
|
|
"Facultad de Ciencias de la Educación": { |
|
|
"nivel": "Especialización", |
|
|
"vinc": "Joven investigador", |
|
|
}, |
|
|
"Facultad de Ciencias Económicas y Administrativas": { |
|
|
"nivel": "Maestria", |
|
|
"vinc": "Docente catedratico", |
|
|
}, |
|
|
"Facultad de Ciencias de la Salud": { |
|
|
"nivel": "Doctorado", |
|
|
"vinc": "Docente ocasional medio tiempo", |
|
|
}, |
|
|
"Facultad de Derecho": { |
|
|
"nivel": None, |
|
|
"vinc": "Docente ocasional tiempo completo", |
|
|
}, |
|
|
"Facultad de Ingeniería": { |
|
|
"nivel": None, |
|
|
"vinc": "Docente de planta", |
|
|
}, |
|
|
"Facultad de Estudios a Distancia": { |
|
|
"nivel": None, |
|
|
"vinc": "Contrato de Prestación de Servicios", |
|
|
}, |
|
|
|
|
|
"Facultad Chiquinquirá": { |
|
|
"nivel": None, |
|
|
"vinc": "Externo (aliado)", |
|
|
"tdoc": "TI", |
|
|
}, |
|
|
"Facultad Duitama": { |
|
|
"nivel": None, |
|
|
"vinc": None, |
|
|
"tdoc": "CC", |
|
|
}, |
|
|
"Facultad Sogamoso": { |
|
|
"nivel": None, |
|
|
"vinc": None, |
|
|
"tdoc": "CE", |
|
|
}, |
|
|
} |
|
|
|
|
|
def aplicar_defaults_facultad(facultad): |
|
|
"""Devuelve updates para nivel, vinculación y tipo de documento al cambiar la facultad.""" |
|
|
cfg = DEFAULTS.get(facultad, {}) |
|
|
upd_nivel = gr.update() |
|
|
upd_vinc = gr.update() |
|
|
upd_tdoc = gr.update() |
|
|
if cfg.get("nivel") in NIVELES_FORMACION: |
|
|
upd_nivel = gr.update(value=cfg["nivel"]) |
|
|
if cfg.get("vinc") in TIPOS_VINCULACION: |
|
|
upd_vinc = gr.update(value=cfg["vinc"]) |
|
|
if cfg.get("tdoc") in TIPOS_DOCUMENTO: |
|
|
upd_tdoc = gr.update(value=cfg["tdoc"]) |
|
|
return upd_nivel, upd_vinc, upd_tdoc |
|
|
|
|
|
def generar_ficha( |
|
|
codigo, fecha, facultad, grupo, nombre, |
|
|
pn, sn, pa, sa, |
|
|
tdoc, ndoc, profesion, nivel, vinculacion, |
|
|
correo, direccion, telefono |
|
|
): |
|
|
"""Devuelve una vista previa tipo tabla (sin archivos).""" |
|
|
fila = { |
|
|
"Código": codigo, |
|
|
"Fecha de ingreso": fecha, |
|
|
"Facultad": facultad, |
|
|
"Grupo de investigación": grupo, |
|
|
"Nombre de la tecnología": nombre, |
|
|
"Primer nombre": pn, |
|
|
"Segundo nombre": sn, |
|
|
"Primer apellido": pa, |
|
|
"Segundo apellido": sa, |
|
|
"Tipo de documento": tdoc, |
|
|
"Número de documento": ndoc, |
|
|
"Profesión": profesion, |
|
|
"Nivel de formación": nivel, |
|
|
"Tipo de vinculación": vinculacion, |
|
|
"Correo electrónico": correo, |
|
|
"Dirección": direccion, |
|
|
"Número de teléfono": telefono, |
|
|
"Generado": datetime.now().strftime("%Y-%m-%d %H:%M"), |
|
|
} |
|
|
df = pd.DataFrame([fila]) |
|
|
resumen = ( |
|
|
f"**{nombre or 'Tecnología'}** — {facultad or 'Sin facultad'}\n\n" |
|
|
f"Inventor/a: {pn} {sn} {pa} {sa}\n" |
|
|
f"Documento: {tdoc or ''} {ndoc or ''} | Nivel: {nivel or '-'} | Vinculación: {vinculacion or '-'}" |
|
|
) |
|
|
return df, resumen |
|
|
|
|
|
with gr.Blocks(title="Información general de la tecnología") as demo: |
|
|
gr.Markdown("# Información general de la tecnología (versión inicial)") |
|
|
gr.Markdown( |
|
|
"Capture la ficha base. Los campos **Facultad**, **Nivel de formación** y **Tipo de vinculación** " |
|
|
"tienen listas de opciones; al cambiar *Facultad* se sugieren valores por defecto según su tabla." |
|
|
) |
|
|
|
|
|
with gr.Row(): |
|
|
codigo = gr.Textbox(label="Código", value="P2024/") |
|
|
fecha = gr.Textbox(label="Fecha de ingreso", placeholder="YYYY-MM-DD") |
|
|
|
|
|
with gr.Row(): |
|
|
facultad = gr.Dropdown(choices=FACULTADES, label="Facultad") |
|
|
grupo = gr.Textbox(label="Grupo de investigación") |
|
|
|
|
|
nombre = gr.Textbox(label="Nombre de la tecnología") |
|
|
|
|
|
gr.Markdown("## Inventores (principal)") |
|
|
with gr.Row(): |
|
|
pn = gr.Textbox(label="Primer nombre") |
|
|
sn = gr.Textbox(label="Segundo nombre") |
|
|
with gr.Row(): |
|
|
pa = gr.Textbox(label="Primer apellido") |
|
|
sa = gr.Textbox(label="Segundo apellido") |
|
|
|
|
|
gr.Markdown("## Datos de contacto") |
|
|
with gr.Row(): |
|
|
tdoc = gr.Dropdown(choices=TIPOS_DOCUMENTO, label="Tipo de documento") |
|
|
ndoc = gr.Textbox(label="Número de documento") |
|
|
profesion = gr.Textbox(label="Profesión") |
|
|
with gr.Row(): |
|
|
nivel = gr.Dropdown(choices=NIVELES_FORMACION, label="Nivel de formación") |
|
|
vinculacion = gr.Dropdown(choices=TIPOS_VINCULACION, label="Tipo de vinculación") |
|
|
with gr.Row(): |
|
|
correo = gr.Textbox(label="Correo electrónico") |
|
|
direccion = gr.Textbox(label="Dirección") |
|
|
telefono = gr.Textbox(label="Número de teléfono") |
|
|
|
|
|
|
|
|
facultad.change(aplicar_defaults_facultad, inputs=[facultad], outputs=[nivel, vinculacion, tdoc]) |
|
|
|
|
|
with gr.Row(): |
|
|
btn_generar = gr.Button("Generar ficha (vista previa)") |
|
|
btn_limpiar = gr.Button("Limpiar") |
|
|
|
|
|
tabla = gr.Dataframe(label="Vista previa", wrap=True) |
|
|
resumen_md = gr.Markdown() |
|
|
|
|
|
btn_generar.click( |
|
|
generar_ficha, |
|
|
inputs=[codigo, fecha, facultad, grupo, nombre, pn, sn, pa, sa, tdoc, ndoc, profesion, nivel, vinculacion, correo, direccion, telefono], |
|
|
outputs=[tabla, resumen_md], |
|
|
) |
|
|
|
|
|
def _limpiar(): |
|
|
return ( |
|
|
"P2024/", "", None, "", "", "", "", "", "", None, "", "", |
|
|
None, None, "", "", "" |
|
|
) |
|
|
|
|
|
btn_limpiar.click( |
|
|
_limpiar, |
|
|
inputs=None, |
|
|
outputs=[codigo, fecha, facultad, grupo, nombre, pn, sn, pa, sa, tdoc, ndoc, profesion, nivel, vinculacion, correo, direccion, telefono], |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |
|
|
|