a
    Seix'                     @   s*   d Z ddlmZ ddlZG dd dZdS )u   
Módulo de consultas SQL para Reglas Globales (RulesGlobal).

Este módulo maneja todas las consultas relacionadas con:
- Obtención de reglas por módulo
- Obtención de reglas específicas por código
- Validación de existencia de reglas
    )get_connectionNc                   @   s@   e Zd ZdZedd Zedd Zedd Zedd	 Zd
S )RulesGlobalSQLu   
    Clase que contiene todas las consultas SQL para el módulo de Reglas Globales.
    Todos los métodos son estáticos para facilitar su uso sin necesidad de instanciar la clase.
    c                 C   s  zt  }| }d}||| f | }|  |  g }|D ]R}||d |d |d |d |d |d |d |d	 |d
 |d |d d qBd|ddW S  tjy } z"dg dt| dW  Y d}~S d}~0  t	y } z"dg dt| dW  Y d}~S d}~0 0 dS )u  
        Obtiene todas las reglas activas de un módulo específico.
        
        Args:
            module_id (str): ID del módulo (ej: 'FR_FlightRequest')
            
        Returns:
            dict: {
                'success': bool,
                'reglas': list de dict con las reglas (si existe),
                'error': str con mensaje de error (si falla)
            }
        a  
                SELECT 
                    RuleCode,
                    ModuleID,
                    RuleName,
                    RuleDescription,
                    ComparisonOperator,
                    ValueType,
                    RuleValue,
                    RuleValue2,
                    RuleUnit,
                    MessageIfViolated,
                    IsActive
                FROM RulesGlobal
                WHERE ModuleID = ?
                  AND IsActive = 1
                ORDER BY RuleCode
            r                           	   
   RuleCodeModuleIDRuleNameZRuleDescriptionComparisonOperator	ValueType	RuleValue
RuleValue2ZRuleUnitMessageIfViolatedZIsActiveTN)successreglaserrorFu%   Error al obtener reglas del módulo: Error inesperado: )
r   cursorexecutefetchallcloseappendpyodbcErrorstr	Exception)	module_idconnr   query
resultadosr   rowe r*   ;/var/www/html/src/Consultas_SQL/Utilities/RulesGlobalSQL.pyobtener_reglas_por_modulo   sJ    
z(RulesGlobalSQL.obtener_reglas_por_moduloc                 C   s$  zt  }| }d}||| f | }|  |  |rd|d |d |d |d |d |d |d	 |d
 |d |d |d dddW S ddd|  ddW S W nv tjy } z"dddt| dW  Y d}~S d}~0  ty } z"dddt| dW  Y d}~S d}~0 0 dS )u|  
        Obtiene una regla específica por su código.
        
        Args:
            rule_code (str): Código de la regla (ej: 'KM_MIN')
            
        Returns:
            dict: {
                'success': bool,
                'regla': dict con información de la regla (si existe),
                'error': str con mensaje de error (si falla)
            }
        a  
                SELECT 
                    RuleCode,
                    ModuleID,
                    RuleName,
                    RuleDescription,
                    ComparisonOperator,
                    ValueType,
                    RuleValue,
                    RuleValue2,
                    RuleUnit,
                    MessageIfViolated,
                    IsActive
                FROM RulesGlobal
                WHERE RuleCode = ?
                  AND IsActive = 1
            Tr   r   r   r   r   r   r	   r
   r   r   r   r   N)r   reglar   FzRegla "z" no encontrada o inactivazError al obtener regla: r   	r   r   r   fetchoner   r    r!   r"   r#   )	rule_coder%   r   r&   	resultador)   r*   r*   r+   obtener_regla_por_codigoi   sL    
z'RulesGlobalSQL.obtener_regla_por_codigoc              
   C   s   zRt  }| }d}||| f | }|  |  |d dk}d|ddW S  tjy } z"dddt| dW  Y d}~S d}~0  ty } z"dddt| dW  Y d}~S d}~0 0 dS )	u/  
        Verifica si una regla existe y está activa.
        
        Args:
            rule_code (str): Código de la regla
            
        Returns:
            dict: {
                'success': bool,
                'existe': bool,
                'error': str (si falla)
            }
        z
                SELECT COUNT(*) AS Total
                FROM RulesGlobal
                WHERE RuleCode = ?
                  AND IsActive = 1
            r   TN)r   exister   Fz(Error al verificar existencia de regla: r   r.   )r0   r%   r   r&   r1   r3   r)   r*   r*   r+   verificar_existencia_regla   s.    z)RulesGlobalSQL.verificar_existencia_reglac                  C   s$  zt  } |  }d}|| | }|  |   g }|D ]R}||d |d |d |d |d |d |d |d	 |d
 |d |d d q>d|t|ddW S  tjy } z$dg ddt	| dW  Y d}~S d}~0  t
y } z$dg ddt	| dW  Y d}~S d}~0 0 dS )ub  
        Obtiene todas las reglas activas del sistema.
        Útil para debugging o administración.
        
        Returns:
            dict: {
                'success': bool,
                'reglas': list de dict con todas las reglas,
                'total': int cantidad de reglas,
                'error': str (si falla)
            }
        a  
                SELECT 
                    RuleCode,
                    ModuleID,
                    RuleName,
                    RuleDescription,
                    ComparisonOperator,
                    ValueType,
                    RuleValue,
                    RuleValue2,
                    RuleUnit,
                    MessageIfViolated,
                    IsActive
                FROM RulesGlobal
                WHERE IsActive = 1
                ORDER BY ModuleID, RuleCode
            r   r   r   r   r   r   r	   r
   r   r   r   r   TN)r   r   totalr   FzError al obtener reglas: r   )r   r   r   r   r   r   lenr    r!   r"   r#   )r%   r   r&   r'   r   r(   r)   r*   r*   r+   obtener_todas_reglas_activas   sP    

z+RulesGlobalSQL.obtener_todas_reglas_activasN)	__name__
__module____qualname____doc__staticmethodr,   r2   r4   r7   r*   r*   r*   r+   r      s   
O
P
4r   )r;   Consultas_SQL.conexionr   r    r   r*   r*   r*   r+   <module>   s   	