CoolFace
Apppublic

fmatituy/selectospromanager

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
queries.cpython-313.pyc296 linesDownload Raw Back to __pycache__
1�

2x��i���l�SSKrSSKrSSKJrJr SYSjrSrSYSjrSYSjrSr	Sr3S	rS4rSr
SrS
rSrSZSjrSrSrSrSrSrSrSrSrSrSrS[SjrSrSrSrS\Sjr Sr!S r"S!r#SZS"jr$S#r%S$r&S]S%jr'S&r(S^S'jr)S[S(jr*S)r+S*r,S+r-S,r.S[S-jr/S_S.jr0S/r1S0r2S1r3S2r4S3r5S4r6S5r7S6r8S7r9S8r:S9r;S:r<S;r=S`S<jr>S=r?S>r@S?rAS@rBSArCSBrDSCrESDrFSErGS[SFjrHSGrISHrJS[SIjrKSJrLSKrMSLrNSMrOSNrPSOrQSPrRSQrSSRrTSaSSjrUSTrVSUrWSVrXSWrYSZSXjr9g)b�N)�DB_PATH�
hash_passwordc�8�[R"[5nUR5nUR	X5 UR5 UR
5 g![a1n[SU35 [SU35 [SU35 UeSnAff=f)Nz!!! DB EXECUTE ERROR: zQUERY: zPARAMS: )	�sqlite3�connectr�cursor�execute�commit�close�	Exception�print)�query�params�conn�c�es     �src/database/queries.py�5db_executers���6����w�'���K�K�M��	�	�	�%� ����
��7�8�����
�&�q�c�*�+�
���w�� �
����!�"����	�s�AA�9B�(,B�Bc�:�0n[S5SUS'[S5SUS'[S5SUS'[S5SUS	'[S105SUS'[S5US
'[S5US'U$![an[U5US'SnAU$SnAff=f)uCGenera un resumen analítico de toda la base de datos para SARA IA.z#SELECT COUNT(*) as c FROM proyectosr�total_proyectosz;SELECT COUNT(*) as c FROM proyectos WHERE estado = 'Activo'�proyectos_activoszMSELECT COUNT(*) as c FROM sst_solicitudes_permisos WHERE estado = 'Pendiente'�permisos_pendientesz&SELECT COUNT(*) as c FROM formatos_sst�permisos_emitidosz;SELECT COUNT(*) as c FROM empleados WHERE estado = 'Activo'�total_empleadoszWSELECT consecutivo, tipo_formato, creado_por FROM formatos_sst ORDER BY id DESC LIMIT 3�ultimos_permisosz�11            SELECT s.consecutivo, p.nombre as proyecto, s.detalles12            FROM sst_solicitudes_permisos s13            JOIN proyectos p ON s.proyecto_id = p.id14            WHERE s.estado = 'Pendiente'15            ORDER BY s.id DESC LIMIT 516        �solicitudes_recientes�errorN)�db_fetchone�db_fetchallr�str)�summaryrs  r�get_database_summaryr"s����G�"�%0�1V�%W�X[�%\��!�"�'2�3p�'q�ru�'v��#�$�)4�6E�*F�GJ�*K��%�&�'2�3[�'\�]`�'a��#�$�%0�1n�%o�ps�%t��!�"�'2�3L�'M��"�#�,7�8�,
��'�(��N���"��q�6�����N��"�s�A1A7�717B�B�Bc�"�[R"[5n[RUlUR5nUR
X5 UR5Vs/sHn[U5PM nnUR5 U$s snf�N)18rrr�Row�row_factoryrr	�fetchall�dictr)rrrr�row�ress      rrr+sd���?�?�7�#�D��{�{�D�����
�A��I�I�e�� !�19�20��21-���4��9��C�22-��J�J�L��J��.s�#Bc�23�[R"[5n[RUlUR5nUR
X5 UR5nUR5 U(a[U5$S$r$)24rrrr%r&rr	�fetchonerr()rrrrr*s     rrr4sX���?�?�7�#�D��{�{�D�����
�A��I�I�e��25�*�*�,�C��J�J�L��4��9�%��%�c��[S5$)NzSELECT id, nombre FROM roles�r�r-r�
get_all_rolesr1=s���5�6�6r-c�l�[SXX#45 g![an[SU35 SnAgSnAff=f)NzMINSERT INTO usuarios (username, password, rol_id, nombre) VALUES (?, ?, ?, ?)TzError creating user: )rrr
)�username�
password_hash�rol_id�nombrers     r�create_userr7@sB����[�
�f�5�	26�����
�%�a�S�)�*����s��273�.�3c��[S5$)Nz�28        SELECT p.*, COALESCE(u.nombre, p.cliente_nombre) as cliente_nombre 29        FROM proyectos p 30        LEFT JOIN usuarios u ON p.cliente_id = u.id31        ORDER BY p.id DESC32    r/r0r-r�get_projectsr9K�����	�	r-c��[S5$)Nz�33        SELECT u.id, u.nombre, u.username, r.nombre as rol 34        FROM usuarios u 35        JOIN roles r ON u.rol_id = r.id 36        WHERE r.nombre = 'Cliente'37    r/r0r-r�get_clientsr<Sr:r-c��[S5$)Nz�38        SELECT c.*, e.nombre as empleado 39        FROM sst_certificaciones c40        JOIN empleados e ON c.usuario_id = e.id41        ORDER BY c.fecha_vencimiento42    r/r0r-r�get_certificacionesr>\r:r-c��[S5$)u=Retorna todos los registros de la base de nómina (empleados)z'SELECT * FROM empleados ORDER BY nombrer/r0r-r�get_all_employeesr@ds���@�A�Ar-c��[S5$)u;Versión optimizada para selectores (dropdowns) de personalzkSELECT id, nombre, cargo, area, documento, firma_url FROM empleados WHERE estado = 'Activo' ORDER BY nombrer/r0r-r�get_dropdown_employeesrBhs���E�F�Fr-c��[S5$)Nz?SELECT * FROM actividades_proyecto WHERE estado != 'Completado'r/r0r-r�get_actividades_pendientes_sstrDls���X�Y�Yr-c�@�U(a
[SU45$[S5$)Naz43            SELECT s.*, 44                   COALESCE(e.nombre, u.nombre, 'Sistema/Auto') as solicitante,45                   COALESCE(e.cargo, r.nombre, 'Administrativo') as solicitante_cargo,46                   p.nombre as proyecto, p.nombre as proyecto_nombre47            FROM sst_solicitudes_permisos s48            LEFT JOIN empleados e ON s.solicitante_id = e.id49            LEFT JOIN usuarios u ON s.solicitante_id = u.id50            LEFT JOIN roles r ON u.rol_id = r.id51            JOIN proyectos p ON s.proyecto_id = p.id52            WHERE s.solicitante_id = ? AND s.estado = 'Pendiente'53            ORDER BY s.id DESC54        a155        SELECT s.*, 56               COALESCE(e.nombre, u.nombre, 'Sistema/Auto') as solicitante,57               COALESCE(e.cargo, r.nombre, 'Administrativo') as solicitante_cargo,58               p.nombre as proyecto, p.nombre as proyecto_nombre59        FROM sst_solicitudes_permisos s60        LEFT JOIN empleados e ON s.solicitante_id = e.id61        LEFT JOIN usuarios u ON s.solicitante_id = u.id62        LEFT JOIN roles r ON u.rol_id = r.id63        JOIN proyectos p ON s.proyecto_id = p.id64        WHERE s.estado = 'Pendiente'65        ORDER BY s.id DESC66    r/��67usuario_ids r�get_solicitudes_permisorHos2������]��	���	�	r-c��[SU45$�Nz6SELECT * FROM sst_certificaciones WHERE usuario_id = ?r/rFs r�get_certificaciones_usuariorK�����O�R\�Q^�_�_r-c��[SU45$)Nz8SELECT * FROM actividades_proyecto WHERE proyecto_id = ?r/��proyecto_ids r�get_actividades_por_proyectorP�s���Q�T_�Sa�b�br-c��[SU45$)Nz$SELECT * FROM proyectos WHERE id = ?�rrNs r�get_proyecto_by_idrS�s���=��~�N�Nr-c��[SU45$)Na
68        SELECT p.*, 69               u_dir.nombre as director_nombre,70               u_res.nombre as residente_nombre,71               u_sup.nombre as supervisor_nombre,72               u_sst.nombre as responsable_sst_nombre, 73               u_log.nombre as logistica_nombre,74               COALESCE(u_cliente.nombre, p.cliente_nombre) as cliente_nombre75        FROM proyectos p76        LEFT JOIN empleados u_dir ON p.director_id = u_dir.id77        LEFT JOIN empleados u_res ON p.residente_id = u_res.id78        LEFT JOIN empleados u_sup ON p.supervisor_id = u_sup.id79        LEFT JOIN empleados u_sst ON p.sst_id = u_sst.id80        LEFT JOIN empleados u_log ON p.logistica_id = u_log.id81        LEFT JOIN usuarios u_cliente ON p.cliente_id = u_cliente.id82        WHERE p.id = ?83    rRrNs r�get_proyecto_detalladorU�s���� ��!�r-c��[SU45$)Na�84        SELECT p.*, 85               u_dir.nombre as director_nombre,86               u_res.nombre as residente_nombre,87               u_sup.nombre as supervisor_nombre,88               u_sst.nombre as responsable_sst_nombre, 89               COALESCE(u_cliente.nombre, p.cliente_nombre) as cliente_nombre90        FROM proyectos p91        LEFT JOIN empleados u_dir ON p.director_id = u_dir.id92        LEFT JOIN empleados u_res ON p.residente_id = u_res.id93        LEFT JOIN empleados u_sup ON p.supervisor_id = u_sup.id94        LEFT JOIN empleados u_sst ON p.sst_id = u_sst.id95        LEFT JOIN usuarios u_cliente ON p.cliente_id = u_cliente.id96        WHERE p.token_cliente = ?97    rR)�
token_clientes r�get_proyecto_by_tokenrX�s�����	��r-c��[SX45 g)Nz3UPDATE proyectos SET token_cliente = ? WHERE id = ?�r)rO�tokens  r�update_proyecto_tokenr\�s���D�u�FZ�[r-c��[SU45$)zHObtiene actividades con JOINs flexibles para asegurar la carga completa.a�98        SELECT a.*, 99               COALESCE(u_lid.nombre, 'Sin asignar') as responsable_nombre, 100               COALESCE(u_sst.nombre, 'Sin asignar') as responsable_sst_nombre101        FROM actividades_proyecto a102        LEFT JOIN empleados u_lid ON a.responsable_id = u_lid.id103        LEFT JOIN empleados u_sst ON a.responsable_sst_id = u_sst.id104        WHERE a.proyecto_id = ?105    r/rNs r�&get_actividades_por_proyecto_detallador^�s�������r-c�x�[SU45nSSKn[5nUH�nUS(aURUS5 US(aURUS5 US(dMKUR	US5n[U[5(aUHocRU5 M M�M� U$! M�=f)zCRetorna un conjunto de IDs de empleados ocupados en una fecha dada.zsSELECT responsable_id, responsable_sst_id, personal_operativo_json FROM actividades_proyecto WHERE fecha_inicio = ?rN�responsable_id�responsable_sst_id�personal_operativo_json)r�json�set�add�loads�106isinstance�list)�fecha�actsrc�occupied�a�op_ids�oids       r�get_occupied_employees_by_datero�s����M�PU�OW�X�D���u�H�
���
�����Q�/?�-@� A��
!�"�H�L�L��3G�1H�$I��
&�'�'�
����A�&?�$@�A���f�d�+�+�%��|�|�C�'8�v�,�
��O��
�D�s
�*AB4�4B9c��[SU45$)Nz#SELECT * FROM usuarios WHERE id = ?rR)�user_ids r�get_user_by_idrr�s���<�w�j�I�Ir-c��[S5$)Nz!SELECT * FROM sst_certificacionesr/r0r-r�!get_todas_certificaciones_activosrt�s���:�;�;r-c	�"�[SXX#XE45 g)Nz�INSERT INTO sst_certificaciones (usuario_id, tipo, fecha_emision, fecha_vencimiento, entidad, archivo_url) VALUES (?, ?, ?, ?, ?, ?)rZ)rG�tipo�
fecha_emision�fecha_vencimiento�entidad�archivo_urls      r�create_certificacionr{�s���V��-�G�Y�[r-c��[SU45$rJr/rFs r�get_certificaciones_activor}�rLr-c��[S5$)Nz�107        SELECT h.*, c.nombre as categoria_nombre108        FROM inventario_herramientas h109        LEFT JOIN inv_categorias c ON h.categoria_id = c.id110    r/r0r-r�get_herramientasr�s����	�	r-c��[S5$)Nz#SELECT * FROM inventario_materialesr/r0r-r�get_materialesr��s���<�=�=r-c�(�[SXX#XEXgX�U11145 g)Nz�112        INSERT INTO inventario_herramientas 113        (nombre, marca, modelo, serial, estado, responsable, ubicacion, fecha_compra, garantia, categoria_id, foto_url) 114        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)115    rZ)r6�marca�modelo�serial�estado�responsable�	ubicacion�fecha_compra�garantia�categoria_id�foto_urls           r�create_herramientar��s$�������i�W_�ow�	x�	zr-c���/n/nUR5H*upEURUS35 URU5 M, URU5 SSRU5S3n[U[	U55 g)u-Actualiza una herramienta de forma dinámica.� = ?z#UPDATE inventario_herramientas SET �, �
 WHERE id = ?N��items�append�joinr�tuple)�h_id�data�fields�values�k�vrs       r�update_herramientar��sp��
�F�
�F��116�117�����
�
���4�j�!��
�
�a����M�M�$��1�$�)�)�F�2C�1D�M�R�E��u�e�F�m�$r-c��[SU45 g)Nz0DELETE FROM inventario_herramientas WHERE id = ?rZ)r�s r�delete_herramientar�s���A�D�7�Kr-c��[SX45$)Nz�118        SELECT hv.*, u.nombre as usuario_nombre119        FROM inv_hoja_vida hv120        LEFT JOIN usuarios u ON hv.usuario_id = u.id121        WHERE hv.item_id = ? AND hv.item_tipo = ?122        ORDER BY hv.fecha DESC123    r/)�item_id�	item_tipos  r�
get_hoja_vidar�s�����	�
�r-c�|�SSKJn U(dUR5RS5n[SXXrX4XV45 g)Nr��datetime�%Y-%m-%d %H:%Mz�124        INSERT INTO inv_hoja_vida (item_id, item_tipo, fecha, evento, descripcion, icon, color, usuario_id)125        VALUES (?, ?, ?, ?, ?, ?, ?, ?)126    )r��now�strftimer)	r�r��evento�descripcion�icon�colorrGrir�s	         r�add_hoja_vida_entryr�s;��!������'�'�(8�9�����e�[��	R�Tr-c�j�[SU45nU(a[SXS45 g[SXU45 g)Nz?SELECT id, cantidad FROM inventario_materiales WHERE nombre = ?zEUPDATE inventario_materiales SET cantidad = cantidad + ? WHERE id = ?�idzMINSERT INTO inventario_materiales (nombre, cantidad, unidad) VALUES (?, ?, ?))rr)r6�cantidad�unidad�existings    r�add_materialr�s=���\�_e�^g�h�H���Z�]e�pt�gu�\v�w��b�ek�w}�d~�r-c��[S5$)Nz,SELECT * FROM inv_categorias ORDER BY nombrer/r0r-r�get_inv_categoriasr�"s���E�F�Fr-c� �[SXU45 g)NzOINSERT INTO inv_categorias (nombre, descripcion, tipo_control) VALUES (?, ?, ?)rZ)r6r��tipo_controls   r�create_inv_categoriar�%s���`�ci�yE�cF�Gr-c��[SU45 g)Nz'DELETE FROM inv_categorias WHERE id = ?rZ)�cat_ids r�delete_inv_categoriar�(s���8�6�)�Dr-c��[SU45$)Nz�127        SELECT m.*, u.nombre as usuario_nombre128        FROM inv_movimientos m129        JOIN usuarios u ON m.usuario_id = u.id130        ORDER BY m.fecha DESC131        LIMIT ?132    r/)�limits r�get_inv_movimientosr�+s������
�r-c
�l�SSKJn [SXX#XEXhR5RS5U4	5 g)Nrr�z�133        INSERT INTO inv_movimientos (item_id, item_tipo, tipo_movimiento, cantidad, origen, destino, usuario_id, fecha, notas)134        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)135    r��r�rr�r�)	r�r��tipo_movr��origen�destinorG�notasr�s	         r�register_inv_movimientor�4s9��!����h�&�:�|�|�~�Of�Of�gw�Ox�z�136A�Br-c��[S5$)Na137        SELECT ot.*, p.nombre as proyecto_nombre, u.nombre as tecnico_nombre138        FROM inv_ordenes_trabajo ot139        JOIN proyectos p ON ot.proyecto_id = p.id140        JOIN usuarios u ON ot.tecnico_id = u.id141        ORDER BY ot.fecha_apertura DESC142    r/r0r-r�get_ordenes_trabajor�;�����	�	r-c143�h�SSKJn [SXX#UR5RS545 g)Nrr�z�144        INSERT INTO inv_ordenes_trabajo (codigo_ot, proyecto_id, tecnico_id, descripcion_trabajo, fecha_apertura)145        VALUES (?, ?, ?, ?, ?)146    r�r�)�codigorO�147tecnico_idr�r�s     r�	create_otr�Ds1��!����z�����8O�8O�P`�8a�	b�dr-c148�h�SSKJn [SXX#UR5RS545 g)Nrr�z�149        INSERT INTO inv_asignaciones_ot (ot_id, item_id, item_tipo, cantidad_solicitada, fecha_asignacion)150        VALUES (?, ?, ?, ?, ?)151    r�r�)�ot_idr�r�r�r�s     r�assign_item_to_otr�Ks1��!����)�x�|�|�~�/F�/F�GW�/X�	Y�[r-c��[SX45 g)Nz7UPDATE actividades_proyecto SET estado = ? WHERE id = ?rZ)�act_id�nuevo_estados  r�update_actividad_estador�Rs���H�<�J`�ar-c� �[SXU45 g)NzLUPDATE sst_solicitudes_permisos SET estado = ?, comentarios = ? WHERE id = ?rZ)�sol_idr��152comentarios   r�update_estado_solicitud_permisor�Us���]�`l�{A�`B�Cr-c���[R"[5nUR5nUR	SXX#XEXgX�X�X�X�45 UR153nU154(dU(dU(a�SSKJn UR5RS5n/nU155(aURS5 U(aURS5 U(aURSU
S35 S	US156SRU53nU=(d U=(d Sn[S
5nUS=(d SS-nSUS3nUR	SUUU=(d SUSUUU45 UR5 UR5 U$)Na�157        INSERT INTO actividades_proyecto 158        (proyecto_id, nombre, descripcion, tipo_actividad, prioridad, duracion_estimada, fecha_inicio, responsable_id, responsable_sst_id, personal_operativo_json, requiere_aro, requiere_jsa, requiere_permiso, tipos_permiso_json, hora_inicio, hora_fin, estado) 159        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'Pendiente')160    rr�r��ARO�JSAzPermiso Alto Riesgo (�)u-Solicitud automática desde Cronograma para: z. Formatos requeridos: r���7SELECT MAX(id) as last_id FROM sst_solicitudes_permisos�last_id�PET-�03dz�161            INSERT INTO sst_solicitudes_permisos (proyecto_id, solicitante_id, responsable_sst_id, fecha_solicitud, estado, detalles, consecutivo, actividad_id)162            VALUES (?, ?, ?, ?, ?, ?, ?, ?)163        �	Pendiente)rrrrr	�	lastrowidr�r�r�r�r�rr164r)rOr6r��tipo_actividad�	prioridad�duracion�fecha_inicior`ra�
personal_json�requiere_aro�requiere_jsa�requiere_permiso�tipos_permiso_json�hora_inicio�hora_fin�solicitante_idrrr�r��	fecha_sol�formatos�detalles_sol�final_sol_id�res_pet�next_pet�consecutivo_pets                            r�create_actividad_proyector�Xst���?�?�7�#�D����
�A��I�I���{�I�Q]�pB�S_�o�U`�165k�	l��[�[�F��|�'7�%��L�L�N�+�+�,<�=�	��������/������/��X�_�_�/D�EW�DX�XY�-Z�[�F�v�h�Ne�fj�fo�fo�px�fy�ez�{��&�<��<�1���W�X���I�&�+�!�q�0�� ��#��/��	�	�	���<�);�)@�q�)�[�Zf�hw�y�A�	B�166	�K�K�M��J�J�L��Mr-c��[SU45$)NzJSELECT * FROM proyectos_bitacora WHERE proyecto_id = ? ORDER BY fecha DESCr/rNs r�get_bitacora_proyector��s���c�fq�es�t�tr-c�l�[SUSUSUSUSUSUSUSUS	US167US41685 g)Nz�169        INSERT INTO proyectos_bitacora (proyecto_id, usuario_id, fecha, actividades_realizadas, personal_json, materiales_json, herramientas_json, clima, incidentes, fotos_json)170        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)171    rOrGri�actividades�personal�172materiales�herramientas�clima�173incidentes�fotosrZ�r�s r�create_bitacora_entryr�s������}�174�t�L�1�4��=�$�}�BU�W[�\f�Wg�im�nz�i{�~B�CQ�~R�TX�Y`�Ta�cg�ht�cu�w{�|C�wD�175E�Fr-c��[SU45$)NzSSELECT * FROM proyectos_documentos WHERE proyecto_id = ? ORDER BY fecha_subida DESCr/rNs r�get_documentos_proyector�s���l�oz�n|�}�}r-c�h�SSKJn [SXX#XER5RS545 g)Nrr�z�176        INSERT INTO proyectos_documentos (proyecto_id, nombre, tipo, url, usuario_id, fecha_subida)177        VALUES (?, ?, ?, ?, ?, ?)178    r�r�)rOr6rv�urlrGr�s      r�add_documento_proyector�s1��!����t�*�l�l�n�6M�6M�N^�6_�	`�br-c�P�[R"[5nUR5nUR	SUSURSS5USUSURS5URS5URS	5URS1795URS5URS5URS
5URS5URS5URS545 URnUR5 UR5 U$)Na8180        INSERT INTO proyectos (181            nombre, descripcion, estado, fecha_inicio, fecha_fin, cliente_id, cliente_nombre, 182            tipo_proyecto, ubicacion, director_id, residente_id, supervisor_id, sst_id, logistica_id, avance183        )184        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)185    r6r��r�r��	fecha_fin�186cliente_id�cliente_nombre�
tipo_proyector��director_id�residente_id�
supervisor_id�sst_id�logistica_id)	rrrrr	�getr�r187r)r�rrr�s    r�create_proyector�s���?�?�7�#�D����
�A��I�I��	
�X�������3�T�(�^�T�.�EY�[_�[c�[c�do�[p�rv�rz�rz�|H�sI�KO�KS�KS�Td�Ke�����!�4�8�8�K�#8�$�(�(�=�:Q�SW�S[�S[�\j�Sk�����!�4�8�8�H�#5�t�x�x��7O�188�
189��k�k�G��K�K�M��J�J�L��Nr-c���/n/nUR5H*upEURUS35 URU5 M, URU5 SSRU5S3n[U[	U55 g)u6Actualiza los datos de un proyecto de forma dinámica.r�zUPDATE proyectos SET r�r�Nr�)rOr�r�r�r�r�rs       r�update_proyector�sp��
�F�
�F��190�191�����
�
���4�j�!��
�
�a����M�M�+��#�D�I�I�f�$5�#6�m�D�E��u�e�F�m�$r-c���/n/nUR5H*upEURUS35 URU5 M, URU5 SSRU5S3n[U[	U55 g�Nr�zUPDATE sst_certificaciones SET r�r�r���cert_idr�r�r�r�r�rs       r�update_certificacion_personalr��p��
�F�
�F��192�193�����
�
���4�j�!��
�
�a����M�M�'��-�d�i�i��.?�-@�
�N�E��u�e�F�m�$r-c���/n/nUR5H*upEURUS35 URU5 M, URU5 SSRU5S3n[U[	U55 grr�rs       r�update_certificacion_equipor�rr-c���/n/nUR5H*upEURUS35 URU5 M, URU5 SSRU5S3n[U[	U55 g)u+Actualiza una actividad de forma dinámica.r�� UPDATE actividades_proyecto SET r�r�Nr�)r�r�r�r�r�r�rs       r�update_actividad_proyector"�sp��
�F�
�F��194�195�����
�
���4�j�!��
�
�a����M�M�&��.�t�y�y��/@�.A��O�E��u�e�F�m�$r-c��[SX45 g)Nz@UPDATE actividades_proyecto SET evidencias_json = ? WHERE id = ?rZ)r��evidencias_jsons  r�update_actividad_evidenciasr%�s���Q�Tc�Sl�mr-c��[SX45 g)NzHUPDATE actividades_proyecto SET documentos_legales_json = ? WHERE id = ?rZ)r��documentos_jsons  r�update_actividad_documentosr(�s���Y�\k�[t�ur-c��[SU45$)Nz/SELECT * FROM actividades_proyecto WHERE id = ?rR)r�s r�get_actividad_by_idr*�s���H�6�)�T�Tr-c��[SX45 g)Nz,UPDATE proyectos SET avance = ? WHERE id = ?rZ)rO�avances  r�update_proyecto_avancer-�s���=��?T�Ur-c��[SX45$)uAObtiene los últimos N mensajes del chat para un rol específico.z�196        SELECT mensaje_usuario, respuesta_ia 197        FROM sst_chat_history 198        WHERE rol_nombre = ? 199        ORDER BY id DESC LIMIT ?200    r/)�201rol_nombrer�s  r�get_chat_history_by_roler0�s����202�	��r-c�2�[SX=(d SX#45 g)z3Guarda un intercambio del chat en la base de datos.z~203        INSERT INTO sst_chat_history (rol_nombre, usuario_id, mensaje_usuario, respuesta_ia)204        VALUES (?, ?, ?, ?)205    r�NrZ)r/rG�mensaje_usuario�respuesta_ias    r�save_chat_messager4�s�����o�A��	E�Gr-c��[S5$)Na�206        SELECT m.*, 207               t.nombre as tipo_nombre, 208               c.nombre as categoria_nombre, 209               u.abreviatura as unidad_nombre,210               ub.nombre as ubicacion_nombre211        FROM inv_materiales_pro m212        LEFT JOIN inv_tipos_material t ON m.tipo_id = t.id213        LEFT JOIN inv_categorias c ON m.categoria_id = c.id214        LEFT JOIN inv_unidades u ON m.unidad_id = u.id215        LEFT JOIN inv_ubicaciones ub ON m.ubicacion_id = ub.id216        ORDER BY m.nombre ASC217    r/r0r-r�get_inv_materiales_pror6�s����	�	r-c��[S5$)NzHSELECT * FROM inv_tipos_material WHERE estado = 'Activo' ORDER BY nombrer/r0r-r�get_inv_tipos_materialr8�s���a�b�br-c��[SU45 g)Nz2INSERT INTO inv_tipos_material (nombre) VALUES (?)rZ)r6s r�create_inv_tipo_materialr:s���C�f�Y�Or-c��[SU45 g)Nz+DELETE FROM inv_tipos_material WHERE id = ?rZ)�tipo_ids r�delete_inv_tipo_materialr=s���<�w�j�Ir-c��[S5$)Nz*SELECT * FROM inv_unidades ORDER BY nombrer/r0r-r�get_inv_unidadesr?s���C�D�Dr-c��[SX45 g)Nz<INSERT INTO inv_unidades (nombre, abreviatura) VALUES (?, ?)rZ)r6�abreviaturas  r�create_inv_unidadrB218s���M�PV�Od�er-c��[SU45 g)Nz%DELETE FROM inv_unidades WHERE id = ?rZ)�und_ids r�delete_inv_unidadrE
s���6��	�Br-c��[S5$)Nz-SELECT * FROM inv_ubicaciones ORDER BY nombrer/r0r-r�get_inv_ubicacionesrGs���F�G�Gr-c� �[SXX#45 g)NzXINSERT INTO inv_ubicaciones (nombre, tipo, responsable, descripcion) VALUES (?, ?, ?, ?)rZ)r6rvr�r�s    r�create_inv_ubicacionrIs���i�lr�{F�lT�Ur-c��[SU45 g)Nz(DELETE FROM inv_ubicaciones WHERE id = ?rZ)�ubi_ids r�delete_inv_ubicacionrLs���9�F�9�Er-c��SSKJn [SUSUSUSUSUSUS	US219USUSUS
USUR5RS545 g)Nrr�a220        INSERT INTO inv_materiales_pro 221        (codigo, nombre, tipo_id, categoria_id, unidad_id, stock_actual, stock_minimo, 222         ubicacion_id, proveedor_principal, precio_unitario, observaciones, fecha_registro) 223        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)224    r�r6r<r��	unidad_id�stock_actual�stock_minimo�ubicacion_id�proveedor_principal�precio_unitario�
observacionesr�r��r�r�s  r�create_inv_material_prorVs}��!���	
�X���X���Y���n�9M��[��4��/��n�1E��^��d�#8�9�4�@Q�;R��_��x�|�|�~�6�6�7G�H�	225�226r-c227��SSKJn US;aSOSn[SUS3XR5RS5U45 [	US	X!S228SX45 g)Nrr�)�EntradazAjuste Positivo�+�-z:UPDATE inv_materiales_pro SET stock_actual = stock_actual z& ?, ultimo_movimiento = ? WHERE id = ?r��Material�Ajuste�Bodega)r�rr�r�r�)�material_idr�r�rGr�r��ops       r�update_inv_stock_materialr`'sZ��!��:�:���B��K�B�4�Ou�v��,�,�.�1�1�2B�C�[�Q�S��K��X��S[�]g�or-c��[S5n[S5n[S5nU(aUSSOSU(aUSSOSU(a229USSS.$SS.$)Nz[SELECT COUNT(*) as count FROM inv_materiales_pro WHERE stock_actual <= (stock_minimo * 0.5)z{SELECT COUNT(*) as count FROM inv_materiales_pro WHERE stock_actual <= stock_minimo AND stock_actual > (stock_minimo * 0.5)zhSELECT COUNT(*) as count FROM inv_movimientos WHERE tipo_movimiento = 'Entrada' AND fecha >= date('now')r�count��critico�bajo�	recientesr/rcs   r�get_inv_materiales_alertasrg1sx���w�x�G��U�V�D��G�H�I�+2�7�1�:�g�&�q�$(��Q��� �a�.7�Y�q�\�'�*���>?��r-c��[S5$)Nz�230        SELECT c.*, COUNT(p.id) as proyectos_count231        FROM crm_clientes c232        LEFT JOIN proyectos p ON c.id = p.cliente_id233        GROUP BY c.id234        ORDER BY c.nombre ASC235    r/r0r-r�get_crm_clientesri=r�r-c��[SU45$)Nz'SELECT * FROM crm_clientes WHERE id = ?rR)�	client_ids r�get_crm_cliente_by_idrlFs���@�9�,�O�Or-c��SSKJn [SURSS5USURSS5URS	S5URS236S5URSS5URSS5URS
S5URSS5URSS5UR5R	S545 g)Nrr�z�237        INSERT INTO crm_clientes 238        (nit, nombre, tipo, industria, contacto_principal, telefono, email, direccion, ciudad, notas, fecha_creacion)239        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)240    �nitr241r6rv�B2B�	industria�contacto_principal�telefono�email�	direccion�ciudadr�r��r�rrr�r�rUs  r�create_crm_clienterwIs���!���242	
������T�(�^�T�X�X�f�e�-D�d�h�h�{�\^�F_����%�r�*�D�H�H�Z��,D�d�h�h�w�XZ�F[�����b�!�4�8�8�H�b�#9�4�8�8�G�R�;P�RZ�R^�R^�R`�Ri�Ri�jz�R{�243�	r-c��[S5$)Na244        SELECT o.*, c.nombre as cliente_nombre, u.nombre as responsable_nombre245        FROM crm_oportunidades o246        JOIN crm_clientes c ON o.cliente_id = c.id247        LEFT JOIN usuarios u ON o.responsable_id = u.id248        ORDER BY o.fecha_creacion DESC249    r/r0r-r�get_crm_oportunidadesryUr�r-c�>�SSKJn [SUSUSURSS5URSS	5URS250S5URSS
5URS5URSS5UR5R	S54	5 g)Nrr�z�251        INSERT INTO crm_oportunidades252        (cliente_id, titulo, valor, etapa, fecha_cierre, probabilidad, responsable_id, notas, fecha_creacion)253        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)254    r�titulo�valorg�etapauProspección�fecha_cierrer255�probabilidad�2r`r�r�rvrUs  r�create_crm_oportunidadr�^s���!���256	
�\��D��N�D�H�H�W�c�,B�D�H�H�W�Vd�De������$�d�h�h�~�r�&B�D�H�H�M]�D^�����"��x�|�|�~�6�6�7G�H�257�	r-c��[SX45 g)Nz3UPDATE crm_oportunidades SET etapa = ? WHERE id = ?rZ)�op_id�nueva_etapas  r�update_crm_oportunidad_etapar�js���D�{�FZ�[r-c��[S5$)NzDSELECT * FROM sst_cursos WHERE estado = 'Activo' ORDER BY nombre ASCr/r0r-r�get_sst_cursosr�ms���]�^�^r-c���SSKJn [SUSURS5URS5URSS5URS	S2585URSS5URS
S5URSS5URSS5URSS5URSS5URSS5UR5R	S54
5 g)Nrr�a259        INSERT INTO sst_cursos (nombre, proyecto_id, fecha_sesion, temas_tratados, duracion, tipo, periodicidad_reinduccion, obligatorio, entidad, instructor_interno, personal_json, observaciones, fecha_registro)260        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)261    r6rO�fecha_sesion�temas_tratadosr262r��4hrvuTécnico�periodicidad_reinduccion��obligatorior�ry�instructor_internor��[]rTr�rvrUs  r�create_sst_cursor�ps���!���	
�X������/����.�1I����!�2�&�����T�(B������$�d�h�h�/I�2�&N������"�D�H�H�Y��$;����%�q�)�4�8�8�O�T�+J�����"�%�x�|�|�~�'>�'>�?O�'P�
263�264r-c��[SU45$)NzISELECT * FROM sst_plan_anual WHERE anio = ? ORDER BY fecha_programada ASCr/)�anios r�get_sst_plan_anualr�~s���b�ei�dk�l�lr-c�B�[SURSS5URS5URS5URS5URS5URS5URS	5URS2655URS5URS5URS
5URSS5URS5URS5URS5URS5URSS545 g)Na�266        INSERT INTO sst_plan_anual (267            anio, nombre_actividad, descripcion, tipo_actividad, fase_phva, 268            responsable_id, fecha_programada, hora_programada, duracion_estimada, 269            riesgo_id, tipo_capacitacion, es_obligatoria, participantes_json, 270            indicador_esperado, metodo_verificacion, evidencia_requerida, estado271        )272        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)273    r���r6r�rv�faser`ri�horar��	riesgo_id�tipo_capacitacion�es_obligatoriar��participantes_json�indicador_esperado�metodo_verificacion�evidencia_requeridar��274Programada)rrrs r�create_sst_plan_actividadr��s�����	
���������� 2�D�H�H�]�4K������$�(�(�6�*�D�H�H�5E�,F������4�8�8�F�+�T�X�X�j�-A������t�x�x�(;�<����!�1�%�t�x�x�0D�'E����%�&����1F�(G����&�'����(�L�)I�275�r-c��[SU45$)Nz=SELECT * FROM proyectos WHERE cliente_id = ? ORDER BY id DESCr/�rs r�get_proyectos_by_cliente_idr��s���V�Yc�Xe�f�fr-c��[S5$)NzWSELECT id, peligro_descripcion, clasificacion FROM sst_matriz_peligros ORDER BY id DESCr/r0r-r�get_sst_peligrosr��s���p�q�qr-c��[SU45$)NzQSELECT * FROM crm_oportunidades WHERE cliente_id = ? ORDER BY fecha_creacion DESCr/r�s r�#get_crm_oportunidades_by_cliente_idr��s���j�mw�ly�z�zr-c�p^�/n/nTR5H*upVURUS35 URU5 M, URU5 SSRU5S3n[U[	U55 [U5n[
U4SjS55(Gal[SU45n	[U5n276U277(dg/nU278RS	5(aURS2795 U280RS5(aURS5 U281RS
5(aURS5 SU282SSSRU53nU	(aU	SS:Xa[SX�S45 ggSSK283J284n
 U
R5RS5nU=(d U285RS5=(d Sn[S5nUS=(d SS-nSUS3n[SU286S X�RS!5=(d SUSUUU45 gg![an[S"U35 SnAgSnAff=f)#uJActualiza una actividad de proyecto con un diccionario de datos dinámico.r�r!r�r�c3�L># �UHnTRU5S:Hv� M g7f)r�N)r)�.0r�r�s  �r�	<genexpr>�,update_actividad_proyecto.<locals>.<genexpr>�s ����^�)]�A�t�x�x��{�a��)]�s�!$)r�r�r�zFSELECT id, estado FROM sst_solicitudes_permisos WHERE actividad_id = ?Nr�r�r�r�r�zPermiso Alto RiesgozSolicitud de formatos para: r6z. Requeridos: r�r�z=UPDATE sst_solicitudes_permisos SET detalles = ? WHERE id = ?r�rr�r�r`r�r�r�r�r�z�287                    INSERT INTO sst_solicitudes_permisos (proyecto_id, solicitante_id, responsable_sst_id, fecha_solicitud, estado, detalles, consecutivo, actividad_id)288                    VALUES (?, ?, ?, ?, ?, ?, ?, ?)289                rOraz&Error en disparador de solicitud SST: )r�r�r�rr��int�anyrr*rr�r�r�rr
)r�r�r�r�r��key�valr�a_id�
sol_existente�actr�r�r�r�r�r�r�r�rs `                  rr"r"�s;���
�F�
�F��J�J�L����
�
���T�l�#��
�
�c��!��M�M�"��.�t�y�y��/@�.A��O�E��u�e�F�m�$�"<��2�w���^�)]�^�^�^�'�(p�sw�ry�z�M�%�d�+�C����H��w�w�~�&�&�����(>��w�w�~�&�&�����(>��w�w�)�*�*�H�O�O�<Q�,R�9�#�h�-���W[�W`�W`�ai�Wj�Vk�l�L�� ��*�k�9��^�am�~B�pC�aD�E�:�.�$�L�L�N�3�3�4D�E�	�-�O����9I�1J�O�a��%�&_�`��#�I�.�3�!�q�8��$(��#��"7�����-�(�,���@T�8U�8Z�YZ�\e�gr�uA�CR�TX�Y�Z�7_��>�<�
�6�q�c�:�;�;��<�s'�AH�B1H�9BH�290H5�H0�0H5)r0r$)r291)NN)�Stock)�d)rrrr�z07:00z17:00N)�292)r�)Zr�os�database.dbrrrr"rrr1r7r9r<r>r@rBrDrHrKrPrSrUrXr\r^rorrrtr{r}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr"r%r(r*r-r0r4r6r8r:r=r?rBrErGrIrLrVr`rgrirlrwryr�r�r�r�r�r�r�r�r�r0r-r�<module>r�s����	�.���2�&�7�	�	�	�	�B�F�Z�	�:`�c�O��&�"\�293��$J�<�[�`�	�>�z�	%�L��T�@�G�G�E��B�	�d�[�b�C�'�Ru�F�~�b��&294%�%�%�	%�n�v�U�V��G�
	�c�P�J�E�f�C�H�U�F��p�	�	�P�295�	�296�\�_��m��&g�r�{�.<r-