Update utils/data_manager.py
Browse files- utils/data_manager.py +88 -44
utils/data_manager.py
CHANGED
|
@@ -353,8 +353,9 @@ def mostrar_datos_como_texto(datos):
|
|
| 353 |
|
| 354 |
def flujo_presupuestos():
|
| 355 |
st.title("💰 Asistente de Presupuestos")
|
| 356 |
-
st.markdown("Hola Dr. cuénteme en
|
| 357 |
|
|
|
|
| 358 |
lista_precios = {
|
| 359 |
"Restauraciones en resina de una superficie": 75000,
|
| 360 |
"Restauraciones en resina de dos superficies": 95000,
|
|
@@ -381,49 +382,92 @@ def flujo_presupuestos():
|
|
| 381 |
"Endodoncia de premolares superiores": 480000,
|
| 382 |
}
|
| 383 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 384 |
tratamiento = st.selectbox("Selecciona el tratamiento", list(lista_precios.keys()))
|
| 385 |
cantidad = st.number_input("Cantidad", min_value=1, step=1)
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
|
| 389 |
-
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 403 |
|
| 404 |
-
|
| 405 |
-
|
| 406 |
-
|
| 407 |
-
|
| 408 |
-
"
|
| 409 |
-
|
| 410 |
-
|
| 411 |
-
|
| 412 |
-
|
| 413 |
-
st.
|
| 414 |
-
|
| 415 |
-
|
| 416 |
-
|
| 417 |
-
|
| 418 |
-
if st.session_state.radiografias:
|
| 419 |
-
st.write("### Radiografías Registradas")
|
| 420 |
-
df_radiografias = pd.DataFrame(st.session_state.radiografias)
|
| 421 |
-
st.write(df_radiografias)
|
| 422 |
-
|
| 423 |
-
pdf_file = generar_pdf(df_radiografias, "Registro de Radiografías", "radiografias.pdf")
|
| 424 |
-
st.download_button(
|
| 425 |
-
label="📥 Descargar PDF",
|
| 426 |
-
data=open(pdf_file, 'rb').read(),
|
| 427 |
-
file_name="radiografias.pdf",
|
| 428 |
-
mime="application/pdf"
|
| 429 |
-
)
|
|
|
|
| 353 |
|
| 354 |
def flujo_presupuestos():
|
| 355 |
st.title("💰 Asistente de Presupuestos")
|
| 356 |
+
st.markdown("Hola Dr. cuénteme en qué puedo ayudarle?")
|
| 357 |
|
| 358 |
+
# Listado de precios
|
| 359 |
lista_precios = {
|
| 360 |
"Restauraciones en resina de una superficie": 75000,
|
| 361 |
"Restauraciones en resina de dos superficies": 95000,
|
|
|
|
| 382 |
"Endodoncia de premolares superiores": 480000,
|
| 383 |
}
|
| 384 |
|
| 385 |
+
if 'presupuesto' not in st.session_state:
|
| 386 |
+
st.session_state['presupuesto'] = []
|
| 387 |
+
|
| 388 |
+
# Mostrar lista de precios en un menú desplegable
|
| 389 |
+
with st.expander("Mostrar Lista de Precios"):
|
| 390 |
+
st.markdown("### Lista de Precios")
|
| 391 |
+
for tratamiento, precio in lista_precios.items():
|
| 392 |
+
st.markdown(f"**{tratamiento}:** {precio} COP")
|
| 393 |
+
|
| 394 |
+
# Selección de tratamientos y cantidad
|
| 395 |
tratamiento = st.selectbox("Selecciona el tratamiento", list(lista_precios.keys()))
|
| 396 |
cantidad = st.number_input("Cantidad", min_value=1, step=1)
|
| 397 |
+
agregar = st.button("Agregar al Presupuesto")
|
| 398 |
+
|
| 399 |
+
if agregar:
|
| 400 |
+
precio_total = lista_precios[tratamiento] * cantidad
|
| 401 |
+
st.session_state['presupuesto'].append({"tratamiento": tratamiento, "cantidad": cantidad, "precio_total": precio_total})
|
| 402 |
+
st.success(f"Agregado: {cantidad} {tratamiento} - Total: {precio_total} COP")
|
| 403 |
+
|
| 404 |
+
# Mostrar servicios seleccionados y total
|
| 405 |
+
if st.session_state['presupuesto']:
|
| 406 |
+
st.write("### Servicios Seleccionados")
|
| 407 |
+
total_presupuesto = sum(item['precio_total'] for item in st.session_state['presupuesto'])
|
| 408 |
+
for item in st.session_state['presupuesto']:
|
| 409 |
+
st.write(f"{item['cantidad']} x {item['tratamiento']} - {item['precio_total']} COP")
|
| 410 |
+
st.write(f"**Total: {total_presupuesto} COP**")
|
| 411 |
+
|
| 412 |
+
# Copiar presupuesto al asistente de chat
|
| 413 |
+
copiar_presupuesto = st.button("Copiar Presupuesto al Asistente")
|
| 414 |
+
if copiar_presupuesto:
|
| 415 |
+
servicios = "\n".join([f"{item['cantidad']} x {item['tratamiento']} - {item['precio_total']} COP" for item in st.session_state['presupuesto']])
|
| 416 |
+
total = f"**Total: {total_presupuesto} COP**"
|
| 417 |
+
st.session_state['presupuesto_texto'] = f"{servicios}\n{total}"
|
| 418 |
+
st.success("Presupuesto copiado al asistente de chat.")
|
| 419 |
+
|
| 420 |
+
if 'mostrar_chat' not in st.session_state:
|
| 421 |
+
st.session_state['mostrar_chat'] = False
|
| 422 |
+
|
| 423 |
+
def mostrar_chat():
|
| 424 |
+
st.session_state['mostrar_chat'] = not st.session_state['mostrar_chat']
|
| 425 |
+
|
| 426 |
+
st.markdown(
|
| 427 |
+
"""
|
| 428 |
+
<style>
|
| 429 |
+
.assistant-button {
|
| 430 |
+
display: flex;
|
| 431 |
+
align-items: center;
|
| 432 |
+
justify-content: center;
|
| 433 |
+
background-color: #4CAF50;
|
| 434 |
+
color: white;
|
| 435 |
+
padding: 10px;
|
| 436 |
+
border: none;
|
| 437 |
+
border-radius: 5px;
|
| 438 |
+
cursor: pointer;
|
| 439 |
+
font-size: 16px;
|
| 440 |
+
margin-top: 10px;
|
| 441 |
+
}
|
| 442 |
+
.assistant-button img {
|
| 443 |
+
margin-right: 10px;
|
| 444 |
+
}
|
| 445 |
+
</style>
|
| 446 |
+
<button class="assistant-button" onclick="window.location.href='#assistant_chat'">
|
| 447 |
+
<img src='https://img2.gratispng.com/20180808/cxq/kisspng-robotics-science-computer-icons-robot-technology-robo-to-logo-svg-png-icon-free-download-45527-5b6baa46a5e322.4713113715337825986795.jpg' alt='icon' width='20' height='20'/>
|
| 448 |
+
Hablar con Asistente
|
| 449 |
+
</button>
|
| 450 |
+
""",
|
| 451 |
+
unsafe_allow_html=True
|
| 452 |
+
)
|
| 453 |
+
|
| 454 |
+
if st.button("Mostrar Chat", key="assistant_button"):
|
| 455 |
+
mostrar_chat()
|
| 456 |
+
|
| 457 |
+
if st.session_state['mostrar_chat']:
|
| 458 |
+
st.markdown("<div id='assistant_chat'></div>", unsafe_allow_html=True)
|
| 459 |
+
st.markdown("### Chat con Asistente")
|
| 460 |
|
| 461 |
+
pregunta_usuario = st.text_input("Escribe tu pregunta aquí:", value=st.session_state.get('presupuesto_texto', ''))
|
| 462 |
+
if st.button("Enviar Pregunta"):
|
| 463 |
+
respuesta = obtener_respuesta(
|
| 464 |
+
pregunta_usuario,
|
| 465 |
+
"", # No se necesita texto preprocesado en este caso
|
| 466 |
+
st.session_state['modelo'],
|
| 467 |
+
st.session_state['temperatura'],
|
| 468 |
+
st.session_state.get('assistant_id', 'asst_4ZYvBvf4IUVQPjnugSZGLdV2')
|
| 469 |
+
)
|
| 470 |
+
st.markdown(f"**Asistente**: {respuesta}")
|
| 471 |
+
|
| 472 |
+
if __name__ == "__main__":
|
| 473 |
+
flujo_presupuestos()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|