
    p[h;B                        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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"                  j/                  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           T/var/www/dev.api.imparables.com.co/api_imparables/crm_asincrono/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                 2   d }d }	 t               }|st        d      g d}|D ]"  }|| vs| |   	| |   dk(  st        d| d       	 t        j                  | d   d       | d	   }	 |j
                  j                  d
       |j
                  j                         }|st        d      	 t        j                  d      }t        j                  d      }	t        j                  d      }
d}t        j                  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       |j                  }| d| }d }d }	 t        d|        t        j                  ||f      }|j                  |	|
       t        j                  j!                  |      }|j                  |d      5 }|j#                  |       |j%                          d d d        t        d|        |}	 |r|j'                          |r|j'                          	 d!}| d"   | d   | d#   | d$   | d%   | d&   | d'   |g}|j)                         }|j+                  ||       |j,                  }t/        ||| d"          |j1                          d(d)|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# 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|j3                          t5        j6                  d-t9        |              d
d.t9        |       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   )	principalr   titulolinktexto_cortotexto_largo	id_estadoadjunto 
El campo '' es requeridor   r   r   r6   r   u*   El archivo está vacío o no se pudo leer.Error al leer el archivo: 
ftp_serverftp_user_nameftp_user_pass   ftp_path_imgsu'   🔍 [DEBUG] Variables de entorno SFTP:z   - Server new: u   ✅ OKu
   ❌ VACÍOz ()z   - Username new: z   - PEM Key Path new: z   - Remote Folder new: /u(   🔐 [SFTP] Subiendo imagen de noticia: usernamepasswordwbu!   ✅ Imagen subida correctamente: 'Error al subir el archivo al servidor: 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   r   zNoticia insertada correctamenteT)id	insertador   z[ERROR] en insertar_noticia: z'Error al insertar noticia archivo not: )r   r   r   r   r   fileseekreadosgetenvprintfilenameparamiko	Transportconnect
SFTPClientfrom_transportwriteflushr#   r   r   	lastrowidgestionar_noticia_principalcommitrollbackr$   r%   r&   )r*   r'   r   campos_requeridoscampoarchivofile_contentr,   serverrC   passValportr?   	file_nameremote_file_path	transportsftpremote_fileimagen_pathr(   r)   
noticia_ids                         r-   insertar_noticiari   S   sv   HFy!#PQQ C& 	EEE!U5\%9U5\R=O :eWN!CDD	E
	KeO4jA 	"	?LLa "<<,,.L !MNN   <(99_-))O,		/279!f(,!Gr&QRST#Hl#K2hZWXYZ'G'NbQXPYYZ[\(](UUWXeWffghi$$	+_Ai[9		"<YKHI **FD>:Ix'B&&55i@D +T2 $k!!,/!!#$ 56F5GHI#K
 

! +/"(O&M- - +	
 "uf% %%
 	$Hj%:LM 	 8 !
& LLNNN U  	KIJJ	K  	?9!=>>	?:$ $  	KEaSIJJ	K 

! V  
5c!fX>?@QI
 	
 LLNNN 
 LLNNN s   1M/ M/ 	K" "M/ (AK: *CM/ <A)L& %"LL&  BM/ "K77M/ :	LLLM/ L#L& &	M/L==MM 'M,,M/ /	O,8AO'<O,=O/ 'O,,O/ /'PrG   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<   r=   r>   r?   rA   rB   zImagen anterior eliminada: u3   La imagen anterior no se encontró en el servidor: z#Error al eliminar imagen anterior: rE   zNueva imagen subida: rF   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)rG   rH   imagenurlr   z[ERROR] en actualizar_noticia: zError al actualizar noticia: )"r   r   r   r   r   r   r   fetchoner#   getrO   rI   rJ   rK   rL   rM   rP   rQ   rR   rS   rT   remover$   infoFileNotFoundErrorwarningrU   rV   rowcountrX   rY   rZ   r%   r&   )rG   r*   r'   r   r[   r\   cursor_temp	resultadoimagen_anteriorr]   rg   r^   r,   r_   rC   r`   ra   r?   rb   rc   rd   re   remote_old_pathrf   r(   r)   s                             r-   actualizar_noticiary      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   rk   zNoticia no encontradar   r;   r<   r=   r>   r?   rA   rB   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   rn   rL   rM   rP   rQ   rR   rS   rT   rp   r$   rq   rr   rs   r   r%   rY   rt   rZ   r&   )
id_noticia
conexionBDr   query_selectrv   imagen_nombrer_   rC   r`   ra   r?   rc   rd   re   r,   query_deletes                   r-   eliminarNoticiar   o  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   rt   r$   rq   r   r%   r&   r#   )r'   r   r   r   query_desactivarfilas_afectadasr,   s          r-   rX   rX     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   sysrL   rP   fastapir	   dotenvr
   cnxpdor   pathdirnameabspath__file__
script_dircrm_dirjoinenv_pathr&   r.   ri   intry   r   rX        r-   <module>r      s    # , , 
 	    " WW__RWW__X67

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