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()