
    i+                         S SK r S SKJr  \ R                  " \ R                  S9  \ R
                  " \5      rS rS r	S r
  S	S jrS rg)
    N)get_connection)levelc                    / / / SSSU S.n [        5       nUR                  5       nSnUR                  X@45        UR                  5       nU(       d'  SUS'   SU  3US	'   [        R                  S
U  35        U$ U H  nUS   (       a  US   R                  5       OSnUS   (       a!  US   R                  5       R                  5       OSnU(       d  MX  SU;   d  M`  US;  a  SnXqU   ;  d  Mr  X   R                  U5        M     [        US   5      [        US   5      -   [        US   5      -   US'   US   S:  a1  SUS'   SUS    S3US	'   [        R                  SU  SUS    S35        O%SUS'   SU  3US	'   [        R                  SU  35        UR                  5         UR                  5         U$ ! [         aB  n	SUS'   S[        U	5       3US	'   [        R                  S[        U	5       35         Sn	A	U$ Sn	A	ff = f)u#  
Obtiene los destinatarios de correo electrónico desde las tablas de configuración.

Args:
    mail_list_id (int): ID de la lista de correos en Util_MailListHead
    
Returns:
    dict: Diccionario con listas de destinatarios por tipo (TO, CC, BCC)
        {
            'TO': ['correo1@example.com', 'correo2@example.com'],
            'CC': ['cc1@example.com'],
            'BCC': ['bcc1@example.com'],
            'total_destinatarios': 4,
            'success': True,
            'mensaje': 'Destinatarios obtenidos correctamente'
        }
r   F )TOCCBCCtotal_destinatariossuccessmensajemail_list_ida  
            SELECT 
                d.Mail,
                d.RecipientType,
                d.MailListLine,
                h.Subject,
                h.ModuleID
            FROM Util_MailListDetail d
            INNER JOIN Util_MailListHead h ON d.MailListID = h.MailListID
            WHERE d.MailListID = ? 
                AND d.ActiveLine = 1 
                AND h.Active = 1
                AND d.Mail IS NOT NULL 
                AND d.Mail != ''
            ORDER BY d.MailListLine
        Tr   z9No se encontraron destinatarios activos para MailListID: r   z1No se encontraron destinatarios para MailListID: N   r   @r   r   r	   r   r	   r
   zSe obtuvieron z destinatarios correctamenteMailListID z: z destinatarios obtenidosu4   No se encontraron correos válidos para MailListID: z Error al obtener destinatarios: z%Error en obtener_destinatarios_mail: )r   cursorexecutefetchallloggerwarningstripupperappendleninfoclose	Exceptionstrerror)
r   destinatarios
connectionr   query
resultadosrowmailrecipient_typees
             hC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\Consultas_SQL\Utilities\MailManagementSQL.pyobtener_destinatarios_mailr)      sP   (  $MFG#%
""$" 	uo.__&
'+M)$)bcobp'qM)$NNN|n]^   C%(V3q6<<>D7:1vSV\\^1134N tt!)<<%)N ^<<!188>   d#$d#$%e$%& 	+, ./!3'+M)$)7F[8\7]]y'zM)$KK+l^2mDY6Z5[[stu'+M)$)]^j]k'lM)$NNQR^Q_`a   G#(i %Ec!fX#Ni <SVHEFFGs2   A+F3 8AF3 F3 F3 ,CF3 3
G?=7G::G?c                 0   SSSSSSS.n [        5       nUR                  5       nSnUR                  X@45        UR                  5       nU(       aI  SUS'   [	        US   5      US	'   US
   US'   US   US'   SUS'   US	   (       a
  SU  S3US'   OSU  S3US'   OSUS'   SU  S3US'   UR                  5         UR                  5         U$ ! [         aB  nSUS'   S[        U5       3US'   [        R                  S[        U5       35         SnAU$ SnAff = f)u  
Valida si existe el MailListID en la tabla Util_MailListHead.

Args:
    mail_list_id (int): ID de la lista de correos
    
Returns:
    dict: Resultado de la validación
          {
              'existe': True/False,
              'activo': True/False,
              'subject': 'Asunto del correo',
              'module_id': 'ID del módulo',
              'success': True/False,
              'mensaje': 'Mensaje descriptivo'
          }
FNr   )existeactivosubject	module_idr   r   z
            SELECT 
                MailListID,
                ModuleID,
                Subject,
                Active,
                CreatedAt,
                CreatedBy
            FROM Util_MailListHead
            WHERE MailListID = ?
        Tr+      r,      r-   r   r.   r   r   u    existe y está activor   u    existe pero está inactivoz no existe en la base de datoszError al validar MailListID: z#Error en validar_mail_list_existe: )
r   r   r   fetchoneboolr   r   r   r   r   )r   	resultador!   r   r"   r$   r'   s          r(   validar_mail_list_exister4   x   sb   ( I)E#%
""$
 	uo.oo"&Ih"&s1v,Ih#&q6Ii %(VIk"#'Ii ")4\NBX'Y	)$)4\NB]'^	)$ $(Ii %0>\#]Ii    E$	)!>s1vhG	):3q6(CDDEs   B<C	 	
D7DDc           	      F   SSSSSSS.SSSSS.n [        5       nUR                  5       nSnUR                  X@45        UR                  5       n[	        U5      US'   U H  nUS   nUS   (       a!  US   R                  5       R                  5       OS	n[        US
   5      n	U	(       a  US==   S-  ss'   OUS==   S-  ss'   U	(       a'  US;   a  US   U==   S-  ss'   OUS   S	==   S-  ss'   U(       a  SU;   a  SU;   a  US==   S-  ss'   M  US==   S-  ss'   M     SUS'   SU  3US'   UR                  5         UR                  5         U$ ! [         aB  n
SUS'   S[        U
5       3US'   [        R                  S[        U
5       35         Sn
A
U$ Sn
A
ff = f)u  
Obtiene estadísticas detalladas de una lista de correos.

Args:
    mail_list_id (int): ID de la lista de correos
    
Returns:
    dict: Estadísticas de la lista
          {
              'total_registros': 5,
              'activos': 3,
              'inactivos': 2,
              'por_tipo': {'TO': 2, 'CC': 1, 'BCC': 0},
              'correos_validos': 3,
              'correos_invalidos': 0,
              'success': True,
              'mensaje': 'Estadísticas obtenidas correctamente'
          }
r   r   Fr   )total_registrosactivos	inactivospor_tipocorreos_validoscorreos_invalidosr   r   z
            SELECT 
                Mail,
                RecipientType,
                ActiveLine
            FROM Util_MailListDetail
            WHERE MailListID = ?
        r6   r   r   r0   r7   r8   r9   r   .r:   r;   Tr   u(   Estadísticas obtenidas para MailListID r   u    Error al obtener estadísticas: z)Error en obtener_estadisticas_mail_list: N)r   r   r   r   r   r   r   r2   r   r   r   r   r   )r   estadisticasr!   r   r"   r#   r$   r%   r&   r,   r'   s              r(   obtener_estadisticas_mail_listr>      s   , Aa0	L3K#%
""$ 	uo.__&
*-j/&'Cq6D7:1vSV\\^1134N#a&\F Y'1,'[)Q.) !%88 ,^<A< ,T2a72 tt./14/01Q61- 0 #'Y$L\N"[Y   K"'Y$DSVH"MY@QIJJKs   EE 
F 7FF c                 0    [        5       nUR                  5       nSnUR                  UU UUUUUUUUU	U
45        UR                  5         UR	                  5         UR	                  5         SSS.$ ! [
         a  nSS[        U5       3S.s SnA$ SnAff = f)uF   
Guarda un registro de envío de correo en la tabla Util_MailSentLog.
a	  
            INSERT INTO Util_MailSentLog
                (MailListID, Subject, RecipientsTO, RecipientsCC, RecipientsBCC,
                TemplateUsed, TemplateData, FilesSent, SentBy, Status, ErrorMsg)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        Tu   Log de envío registrado)r   r   FzError al guardar log: N)r   r   r   commitr   r   r   )r   r-   recipients_torecipients_ccrecipients_bcctemplate_usedtemplate_data
files_sentsent_bystatus	error_msgr!   r   r"   r'   s                  r(   guardar_log_enviorJ     s     P#%
""$ 	u
 	 	,FGG P /Ec!fX-NOOPs   A-A0 0
B:B
BBc                 
    [        5       nUR                  5       nSnUR                  X045        UR                  5       nUR	                  5         UR	                  5         U(       a  US   $ S $ ! [
         a
  n S nAg S nAff = f)Nz:SELECT Subject FROM Util_MailListHead WHERE MailListID = ?r   )r   r   r   r1   r   r   )r   r!   r   r"   r$   r'   s         r(   obtener_subject_de_mail_listrL   H  su    
#%
""$Luo.oos1v&$& s   A)A. ,A. .
B=B)ENVIADON)loggingConsultas_SQL.conexionr   basicConfigINFO	getLogger__name__r   r)   r4   r>   rJ   rL        r(   <module>rV      sZ     1   ',, '			8	$ePGTUB -P^rU   