File size: 7,227 Bytes
dee1c9e f2059f6 dee1c9e f2059f6 0a85d1f f2059f6 dee1c9e f2059f6 dee1c9e f2059f6 dee1c9e f2059f6 dee1c9e f2059f6 dee1c9e f2059f6 dee1c9e f2059f6 dee1c9e |
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 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# -*- coding: utf-8 -*-
# App: Información general de la tecnología (versión inicial, sin descargas)
# Requisitos: pip install gradio pandas
import gradio as gr
import pandas as pd
from datetime import datetime
# --- Listas de opciones -------------------------------------------------------
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 sugeridos por Facultad (de tu tabla) ----------------------------
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",
},
# Estas tres filas también fijan Tipo de documento:
"Facultad Chiquinquirá": {
"nivel": None, # en tu tabla aparece "TI" aquí, pero eso es tipo de documento; se fija abajo
"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() # sin cambio por defecto
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")
# Sugerir defaults al cambiar la Facultad
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()
|