
    .hkT                        d dl Z d dlmZmZ d dlmZmZmZmZ d dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlmZ e	j$                  j'                  e	j$                  j)                  e            Ze	j$                  j'                  e      Ze	j$                  j1                  edd      Z ee       d	ee   d
eeef   fdZdeeef   d
eeef   fdZdedeeef   d
eeef   fdZd Zdeded
dfdZ y)    N)datetimedate)ListDictAnyOptional)
UploadFile)load_dotenv)get_connectionconfiguracionesz.envfechareturnc                    d }d }	 t               }|st        d      | r	 t        j                  | d       d}g }| r|dz  }|j                  |        |dz  }|j                  d      }|j                  ||       |j                         }|D ]3  }t        |d	   t        t        f      s|d	   j                  d      |d	<   5 d
d|d|r|j                          |r|j                          S S # t        $ r t	        d      w xY w# t        $ r'}t        j                  dt        |               d }~ww xY w# |r|j                          |r|j                          w w xY w)N2   No se pudo establecer conexión a la base de datos%Y-%m-%d*   Formato de fecha inválido. Use YYYY-MM-DDz
            SELECT n.*, en.estado  
            FROM noticias n
            LEFT JOIN estado_noticias en ON n.id_estado = en.id
        z; WHERE DATE(fecha_noticia) = STR_TO_DATE(%s, '%%Y-%%m-%%d')z  ORDER BY fecha_publicacion DESCT)
dictionaryfecha_noticia   zNoticias encontradassuccessmessagedataz[ERROR] en obtener_noticias: )r   	Exceptionr   strptime
ValueErrorappendcursorexecutefetchall
isinstancer   strftimecloseloggingerrorstr)r   conexionr   queryparamsdatosnoticiaes           J/var/www/dev.api.imparables.com.co/api_imparables/crm/procesos/noticias.pyobtener_noticiascrmr.      s   HF3!#PQQ O!!%4

 RREMM%  	33 D1uf%!  	YG'/2Xt4DE+2?+C+L+LZ+X(	Y
 -
 LLNNN S  O !MNNOF  5c!fX>? LLNNN s@   D C. A3D *D .DD 	D6"D11D66D9 9'E r*   c                    dd l }dd l}dd l}ddlm} dd l}d }d }	 t               }|st        d      g d}|D ]"  }	|	| vs| |	   	| |	   dk(  st        d|	 d       	  |j                  | d   d	       | d   }
	 |
j                  j                  d       |
j                  j                         }|st        d      t        dt        |       d        |j                  d      } |j                  d      } |j                  d      }d} |j                  dd      } |j                  d      xs d }t        d       t        d|rdnd d| d       t        d|rdnd d| d       t        d|rdnd d| d       t        d|rdnd d| d       |st        d       |st        d!      |st        d"      |j                  j!                  |      st        d#| d$      |j                  j#                  t%        |
d%d&            }|j'                  d'      }| d'| }t        d(|        t        d)|        t        d*| d+| d,       	  |j(                  ||fd-.      5  	 d d d        t        d2       d }d }	 t        d3| d+| d4| d5        |j*                         }|j-                   |j.                                |j1                  |||||d6d6d7d7d78
       |j3                         }|r|j5                  d9       |j7                         }t        d:       |j9                  d'      }d}|D ]  }|s| d'| }	 |j;                  |         t        d;| d,       |jA                  |d<      5 }|jC                  |       d d d        t        d=|        |}	 |r	 |jO                          |r	 |jO                          t        dC       dD}!| dE   | d   | dF   | dG   | dH   | dI   | dJ   |g}"|jQ                         }|jS                  |!|"       t%        |dKd       }#|#s)	 |jS                  dL       |jU                         }$|$r|$d   }#t        dM|#        tW        ||#| dE          |jY                          t        dN       dOdP|#dQdRdS|r	 |jO                          |r	 |jO                          t        dT       S # t        $ r t        d
      w xY w# t        $ r}t        d|       d }~ww xY w# 1 sw Y   xY w# t        $ r}t        d/| d0| d1|       d }~ww xY w# t<        $ r |j?                  |       Y w xY w# 1 sw Y   xY w# |jD                  $ r}t        d>|       d }~w|jF                  $ r}t        d?|       d }~w|jH                  $ r} t        d@|        d } ~ wt        $ r)}t        dA| dBtK        |      jL                         d }~ww xY w# t        $ r Y Dw xY w# t        $ r Y Aw xY w# |r!	 |jO                          n# t        $ r Y nw xY w|r!	 |jO                          w # t        $ r Y w w xY ww xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r}|r,	 t        dU       |j[                          n# t        $ r Y nw xY wt]        |      }%t        dV|%         |jH                  dW|%        ddX|% tK        |      jL                  |%dYdScY d }~|r!	 |jO                          n# t        $ r Y nw xY w|r!	 |jO                          n# t        $ r Y nw xY wt        dT       S d }~ww xY w# |r!	 |jO                          n# t        $ r Y nw xY w|r!	 |jO                          n# t        $ r Y nw xY wt        dT       w xY w)ZNr   )r   r   )	principalr   titulolinktexto_cortotexto_largo	id_estadoadjunto 
El campo '' es requeridor   r   r   r6   u*   El archivo está vacío o no se pudo leer.u4   📁 [DEBUG] Archivo leído correctamente. Tamaño: z bytesError al leer el archivo: 
ftp_serverftp_user_nameftp_path_imgs   ftp_key_pathz/home/ubuntu/admin-access.pemftp_key_passu'   🔍 [DEBUG] Variables de entorno SFTP:z   - Server: u   ✅ OKu
   ❌ VACÍOz ()z   - Username: z   - Remote Folder: z   - Key Path: u5   Variable de entorno 'ftp_server' no está configuradau8   Variable de entorno 'ftp_user_name' no está configuradau8   Variable de entorno 'ftp_path_imgs' no está configuradau%   No se encontró la llave privada en ''filenamezarchivo.bin/u!   📄 [DEBUG] Nombre del archivo: u#   🎯 [DEBUG] Ruta remota completa: u,   🌐 [CHECK] Verificando conectividad TCP a :z ...   )timeoutz"No hay conectividad TCP al puerto z de z: u   🌐 [CHECK] OKu   🔐 [SFTP] Conectando a z como z con KEYF   )	portusernamekey_filename
passphraselook_for_keysallow_agentrG   banner_timeoutauth_timeout   u   ✅ [SFTP] Sesión abiertau   📤 [SFTP] Subiendo wbu   ✅ [SFTP] Archivo subido a: u*   Error de autenticación SFTP (publickey): zError SSH: zError de red al conectar SFTP: z#Error inesperado al subir archivo: z	 - Tipo: u0   📊 [DB] Insertando noticia en base de datos...z
            INSERT INTO noticias (principal, fecha_noticia, titulo, link, texto_corto, texto_largo, id_estado, imagen, fecha_publicacion)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, NOW())
        r0   r1   r2   r3   r4   r5   	lastrowidzSELECT LAST_INSERT_ID()u#   ✅ [DB] Noticia insertada con ID: u    ✅ [DB] Transacción confirmadar   zNoticia insertada correctamenteT)id	insertador   u!   🔚 [CLEANUP] Recursos liberadosu    🔄 [DB] Ejecutando rollback...u)   💥❌ [FUNCIÓN ERROR] Error completo: z[ERROR] en insertar_noticia: zError al insertar noticia: )
error_typeerror_details)/ossocketr$   r   paramikor   r   r   r   fileseekreadprintlengetenvpathisfilebasenamegetattrrstripcreate_connection	SSHClientset_missing_host_key_policyAutoAddPolicyconnectget_transportset_keepalive	open_sftpsplitstatIOErrormkdiropenwriteAuthenticationExceptionSSHExceptionr%   type__name__r#   r   r   fetchonegestionar_noticia_principalcommitrollbackr&   )&r*   rX   rY   r$   r   rZ   r'   r   campos_requeridoscampoarchivofile_contentr,   serverrJ   r=   rI   key_pathkey_pass	file_name
remote_dirremote_file_pathclientsftp	transportpartscurpfimagen_path
auth_error	ssh_errorsocket_errorr(   r)   
noticia_idrowerror_completos&                                         r-   insertar_noticiar   T   s   !HFS3!#PQQ C& 	EEE!U5\%9U5\R=O :eWN!CDD	E	KHeO4jA 	"	?LLa "<<,,.L !MNNH\IZH[[abc
 <(299_-!		/2 299^-LM299^,478&hlC2fXQOPH,Gr(STUV$XL$QQSTaSbbcdeH,Gr(STUVTUUWXXWXXww~~h'DXJaPQQ GG$$WWj-%PQ	"))#.
(\9+61)=>34D3EFG 	<VHAdV4PQ	Z)))64.!D  	  @	-fXQtfF8*HUV'X'')F../Ex/E/E/GHNN!%##!!   ,,.I''+##%D./ $$S)EC $Qqcl$IIcN$ ))D9:+T2 &a%&12B1CDE#K JJL LLN
 	@A
 +/"(O&M- - +	
 "uf% V[$7
89oo'!$QJ 	3J<@A 	$Hj%:LM01 8%D9
2    	12K  	KIJJ	K  	?9!=>>	?L  	Z@d6(RTUVTWXYY	ZT  $JJsO$
& & // 	WHUVV$$ 	7k)566|| 	N=l^LMM 	bA!IdSTgN^N^M_`aa	b ! 
 !  JJL  LLN   D  N  
  7  
89!!#  Q9.9IJK5n5EFG 4^4DE#'7#3#3nU
 	
    12;
&    12s  1Z Z S 5Z ;AS FZ T -S>/T 7Z CU 	T0#U =UU (Z +W3 ;Z >X AZ ,(Y AZ Y.+Y>SZ 	S;(S66S;;Z >TT 	T-T((T--Z 0U
U UU UU W0-U;;W0VW0-V;;W0$W++W00X 3	X <Z ?X  Z 	XZ XZ YX('Y(	X41Y3X44Y:Y
Y	YYYYZ 	Y+'Z *Y++Z .	Y;:Y;>	Z
Z	]-](Z65](6	[?]([A](]-]0 \**	\65\6<]	]](]--]0 0_4^_	^_^_^('_(	^41_3^44_rT   c           	      	   d }d }	 t               }|st        d      g d}|D ]"  }||vs||   	||   dk(  st        d| d       	 t        j                  |d   d       |j                         }|j                  d	| f       |j                         }|j                          |r
|d
   r|d
   nd }|j                  d      }	|}
|	|	j                  r	 |	j                  j                  d
       |	j                  j                         }|st        d      |	j                  j                  d
       t        j                  d      }t        j                  d      }t        j                  d      }d}t        j                  d      }|	j                  }| d| }d }d }	 t!        j"                  ||f      }|j%                  ||       t         j&                  j)                  |      }|r6||k7  r1	 | d| }|j+                  |       t-        j.                  d|        |j                  |d      5 }|j5                  |       |j7                          d d d        |}
t-        j.                  d|        	 |r|j                          |r|j                          	 d}|d   |d   |d   |d   |d   |d    |d!   |
| g	}|j                         }|j                  ||       |j8                  d
k(  rt        d"      t;        || |d          |j=                          d#d$| d%|
r|
nd |
rt        j                  d       d|
 nd d&d'|r|j                          |r|j                          S S # t        $ r t        d      w xY w# t        $ r}t        d|       d }~ww xY w# t0        $ r t-        j2                  d|        Y t        $ r#}t-        j2                  d|        Y d }~d }~ww xY w# 1 sw Y   xY w# t        $ r}t        d|       d }~ww xY w# |r|j                          |r|j                          w w xY w# t        $ rt}|r|j?                          t-        j@                  d(tC        |              d
d)tC        |       d d'cY d }~|r|j                          |r|j                          S S d }~ww xY w# |r|j                          |r|j                          w w xY w)*Nr   )r0   r   r1   r2   r3   r4   r5   r7   r8   r9   r   r   r   )SELECT imagen FROM noticias WHERE id = %sr   r6   u   El archivo está vacío.r:   r;   r<   ftp_user_passr>   r=   rD   rJ   passwordzImagen anterior eliminada: u3   La imagen anterior no se encontró en el servidor: z#Error al eliminar imagen anterior: rR   zNueva imagen subida: z'Error al subir el archivo al servidor: z
            UPDATE noticias
            SET principal = %s, fecha_noticia = %s, titulo = %s, link = %s,
                texto_corto = %s, texto_largo = %s, id_estado = %s, imagen = %s
            WHERE id = %s
        r0   r1   r2   r3   r4   r5   u*   No se encontró la noticia para actualizarr   z!Noticia actualizada correctamenteT)rT   rU   imagenurlr   z[ERROR] en actualizar_noticia: zError al actualizar noticia: )"r   r   r   r   r   r   r   rx   r#   getrC   r[   r\   r]   rX   r`   rZ   	Transportrj   
SFTPClientfrom_transportremover$   infoFileNotFoundErrorwarningrs   flushrowcountry   rz   r{   r%   r&   )rT   r*   r'   r   r|   r}   cursor_temp	resultadoimagen_anteriorr~   r   r   r,   r   rJ   passValrI   r=   r   r   r   r   remote_old_pathremote_filer(   r)   s                             r-   actualizar_noticiar   3  s   HFQ!#PQQ x& 	EEE!U5\%9U5\R=O :eWN!CDD	E
	KeO4jA
 oo'G"O((*	*3	!)A,$))I&% 7#3#3C!!!$&||002#$%?@@!!!$ YY|,Fyy1Hii0GDIIo6M((I"/)=ID&$..~>	!!8g!F**99)D #)'CS-:O1_<M*NO4'B?BS%TU YY/6 (+%%l3%%'( (4YK@A
 JJLOO% +/"(O&M- - +

 "uf% ??aIJJ 	$Hb%2DE 	 :!)4+$HS"))O45Q{mDY]		
* LLNNN E  	KIJJ	K.  C #=aS!ABBC8 - q*]^m]n(op$ S*MaS(QRRS( (  O"I! MNNO JJLOO% b  
7Ax@A6s1vh?
 	
 LLNNN 
 LLNNN s   1Q Q 	M- "A4Q AN 4A-Q "AP 30N$ #P 5"O6"P :CQ -NQ 	N!NN!!Q $!O3P O3O.(P .O33P 6P ;P 	PPPP" "'Q		Q 	S	ASS	S S		S 'S3c                    d }d }	 t               }|*ddd|r|j                          |r|j                          S S |j                         }d}|j                  || f       |j	                         }|s*ddd|r|j                          |r|j                          S S |d   r|d   nd }|r	 t        j                  d      }t        j                  d      }t        j                  d	      }d
}	t        j                  d      }
|
 d| }d }d }	 t        j                  ||	f      }|j                  ||       t        j                  j                  |      }|j                  |       t        j                  d|        |r|j                          |r|j                          	 d}|j                  || f       |j'                          |j(                  dkD  r*ddd|r|j                          |r|j                          S S ddd|r|j                          |r|j                          S S # t        $ r t        j                   d|        Y t"        $ r"}t        j                   d|        Y d }~d }~ww xY w# |r|j                          |r|j                          w w xY w# t"        $ r#}t        j$                  d|        Y d }~)d }~ww xY w# t"        $ rs}|r|j+                          t        j$                  dt-        |              ddt-        |       dcY d }~|r|j                          |r|j                          S S d }~ww xY w# |r|j                          |r|j                          w w xY w)NFu   Error de conexión)r   r   r   zNoticia no encontradar   r;   r<   r   r>   r=   rD   r   zImagen eliminada del servidor: u*   La imagen no se encontró en el servidor: z'Error al eliminar imagen del servidor: u   Error en conexión SFTP: z"DELETE FROM noticias WHERE id = %sTz)Noticia e imagen eliminadas correctamentezError al eliminar la noticiaz[ERROR] en eliminarNoticia: zError: )r   r#   r   r   rx   rX   r`   rZ   r   rj   r   r   r   r$   r   r   r   r   r%   rz   r   r{   r&   )
id_noticia
conexionBDr   query_selectr   imagen_nombrer   rJ   r   rI   r=   r   r   r   r,   query_deletes                   r-   eliminarNoticiar     sV   JFN#%
$1EFP LLN Q ""$ C|j]3OO%	$1HI| LLN } )2!	!$ $?<099_5))O4 "		/ :&3_Am_#E  	* ( 2 2FD> BI%%x'%J#..==iHD KK 01LL#B=/!RS 

 !) <|j]3??Q#0[\ LLN   %1OP LLN G ) bOO&PQ^P_$`a  SOO&MaS$QRRS 

 !) !  ? 9!=>>?  A!4SVH=> ws1vh-?@@ LLN A LLN s   K ;K K ,A!J' A2H-  %J' %8K K -!I:I= I:I50I= 5I::I= ='J$$J' '	K0KK KK 	MAM"M#M MM 'M<nueva_noticia_ides_principalc                 n   d }	 | j                         }|dk(  r?d}|j                  ||f       |j                  }|dkD  rt        j                  d| d       |r|j                          y y # t
        $ r'}t        j                  dt        |               d }~ww xY w# |r|j                          w w xY w)Nr   z
                UPDATE noticias 
                SET principal = 0 
                WHERE principal = 1 AND id != %s
            r   zSe desactivaron z  noticias principales anterioresz&Error en gestionar_noticia_principal: )	r   r   r   r$   r   r   r%   r&   r#   )r'   r   r   r   query_desactivarfilas_afectadasr,   s          r-   ry   ry   #  s    F"1 
 NN+.>-@A$ooO"//@@`ab LLN 	  >s1vhGH LLN s$   AA, ,	B5"BBB B4)!r$   r   r   typingr   r   r   r   sysrX   rY   rZ   fastapir	   dotenvr
   cnxpdor   ra   dirnameabspath__file__
script_dircrm_dirjoinenv_pathr&   r.   r   intr   r   ry        r-   <module>r      s    # , , 
 	     " WW__RWW__X67

''//*
%77<<!2F; H 7x} 7c3h 7r]3DcN ]3tCH~ ]3~U3 UtCH~ U$sCx. UvRjC s W[ r   