
    hH                     N   d dl Z d dlZd dlmZ d dlmZ d dlZd dlZd dl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lmZ e j                  j%                  d       ej                  j                  ej                  j                  e            Zej                  j                  e      Zej                  j                  e      Zej                  j1                  edd	d
      Zej                  j5                  e      r ee        ej6                  de        n ej8                  de        defdZd Zd Z d Z!d Z"d Z#d Z$y)    N)Path)datetime)get_connection)load_dotenv)StorageFactoryz/var/www/html/configcrmconfiguracionesz.envu)   ✅ Variables de entorno cargadas desde: u(   ⚠ No se encontró el archivo .env en: datac           	      r  K   d }d }d }d }g }	 t               }|*ddd|r|j                          |r|j                          S S |j                  d      }| j                  dd      }| j                  dd      }| j                  d	d      }| j                  d
d      }	| j                  dd      }
| j                  dd      }| j                  dd      }| j                  dd      }| j                  dd      }| j                  dg       }t	        j
                  d      }|r|r|r|	r
|
r|r|r|r|s+ddi d|r|j                          |r|j                          S S d}||||	|
||||f	}|j                  ||       |j                  }|rL|D ]  }|j                  |j                  j                         dk(  r;dd|j                   di dc |r|j                          |r|j                          S S |j                  j                  d        t        ||      }|j                  dd      s;d|j                  dd      i d|r|j                          |r|j                          S S t        ||       d {   }|D ]T  }d}|j                  | d| d|j                   |f}|j                  ||       |j                  }|j                  |       V |j                          dd||r|nd dd|r|j                          |r|j                          S S 7 # t         $ rg}|r$t#        |d       rt%        d!|j&                          dd"t)        |       i 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w)#Nr      Error de conexiónsuccessmessageT
dictionarynombreCompleto emailtipoDocumento	documentotelefonociudadtituloPropuestaambitoPropuestadescripcionPropuestaadjuntoftp_path_filesFzFaltan campos obligatoriosr   r   r
   a   
            INSERT INTO 
            propuesta_ciudadano (
                nombre_completo,
                correo,
                tipo_documento,
                documento,
                telefono,
                ciudad,
                titulo,
                ambito,
                descripcion,
                fecha_hora
            ) VALUES (
                %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW()
            )
            zEl archivo adjunto 'u   ' está vacío o no es válido.r   r   z/Error al guardar el archivo en el sistema localz
                    INSERT INTO documentos_propuestas (
                        nombre_archivo, ruta, id_propuesta_ciud, fecha
                    ) VALUES (%s, %s, %s, NOW())
                /zPropuesta agregada exitosamente)id_propuesta_ciudadanoid_documento	statement   Última consulta ejecutada:    Error en la inserción: )r   closecursorgetosgetenvexecute	lastrowidfilereadfilenameseekguardar_archivos_localguardar_archivos_con_adaptadorappendcommit	Exceptionhasattrprintr#   str)r
   
conexionBDr'   id_propuestar"   id_documentosr   r   r   r   r   r   r   r   r   adjuntos
path_filesqueryvaloresr   local_responses3_responsequery_documentovalores_documentoes                            R/var/www/dev.api.imparables.com.co/api_imparables/landing/propuestas/propuestas.pypropuesta_nuevarF   1   s    JFLLMA#%
/v LLN s ""d"3"2B7"%"5HH["-	88J+(B'((#4b9((#4b9#xx(>C88Ir*YY/0
 5]yXZ`et  zI  Nb 7L LLN C&  

 	ug&''# %<<'7<<+<+<+>#+E#(%9':J:J9KKj#k " r LLN k !!!$% 4L(KN!%%i7$-11)=no\ LLN S !?|X VVK $ 3# $$!l!L>73C3C2DE %!
 0AB%//$$\23  	 8*619t
" LLN S W>  ^gfk201A1A0BCD /GAx-PZ\]] LLN ^ LLN s   N7L &N7C2L 6&N7A1L &N73AL &N7)L 8L9A9L 2&N7L 	N
#7NN
N &N7N

N 'N44N7c                     d } d }	 t               } | *ddd|r|j                          | r| j                          S S | j                  d      }d}|dz  }|j                  |       |j	                         }dd|d	|r|j                          | r| j                          S S # t
        $ r~}t        d
t        |              |r$t        |d      rt        d|j                          dd
t        |       i 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)NFr   r   Tr   z SELECT * FROM propuestas_landingz ORDER BY id DESC LIMIT 6z!Propuestas obtenidas exitosamenter   r%   r#   r$   )
r   r&   r'   r+   fetchallr5   r7   r8   r6   r#   )r9   r'   r>   datosrD   s        rE   obtener_todas_propuestasrJ      sl   JF)#%
 /D LLN = ""d"3 3,, 	u! :
$ LLN   
(Q12gfk201A1A0BCD1#a&:
 	
 LLN 
 LLN s5   B! ?B! !	D(*AD#8D(9D+ #D((D+ +'Ec                 H   t        j                  d      }t        j                  d      }t        j                  d      }t        t        j                  d            }t        j                  d      }d }d }	 t        d| d| d       t	        j
                  ||f      }|j                  ||	       t        j                  j                  |      }t        d
|        t         j                  j                  |t        |             }		 |j                  |	       t        d|	 d       |j                  |	      }
t!        |
      dk\  rt|
j#                  d        |
d t!        |
      dz
   }|D ]K  }t         j                  j                  |	|j$                        }|j'                  |       t        d|        M |D ]  }|j$                  }t         j                  j                  |	|j$                        }|j)                  |d      5 }|j+                  |j,                  j/                                d d d        t        d| d| d        ddd|r|j1                          |r|j1                          S S # t        $ r$ |j                  |	       t        d|	 d       Y |w xY w# 1 sw Y   wxY w# t2        $ r7}dd| dcY d }~|r|j1                          |r|j1                          S S d }~ww xY w# |r|j1                          |r|j1                          w w xY w)N
ftp_serverftp_user_nameftp_user_passftp_portr   u#   🔐 [SFTP] Conectando al servidor z como u    usando contraseña)usernamepasswordzsftp: u   📂 La carpeta 'z' ya existe en el servidor.u   📂 Carpeta 'z' creada en el servidor.   c                     | j                   S )N)st_mtimexs    rE   <lambda>z(conexion_guardado_sftp.<locals>.<lambda>!  s
    !** r   key   🗑️ Archivo eliminado: wbu   📤 Archivo 'z' subido correctamente a ''TzArchivos subidos exitosamenter   Fz'Error al subir el archivo al servidor: )r)   r*   intr7   paramiko	Transportconnect
SFTPClientfrom_transportpathjoinr8   statFileNotFoundErrormkdirlistdir_attrlensortr/   removeopenwriter-   r.   r&   r5   )r:   r<   serverrP   passValportr=   	transportsftpsftp_directoryfiles_in_directoryfiles_to_remover-   	file_pathr   local_filepathremote_filepathremote_filerD   s                      rE   conexion_guardado_sftprz      s   
 YY|$Fyy)Hii(Gryy$%D+,JID=3F86(K^_` &&~6	8g> ""11)<tfo j#l2CD	MIIn%%n%55PQR "..~> !"a'##(<#= 11M#6H2IA2MNO' AGGLLG	I&3I;?@A   	aG$--N ggll>7;K;KLO ?D1 7[!!',,"3"3"567N>"22L_L]]^_`	a  ,KL JJLOO O ! 	MJJ~&N>"22JKL	M47 7  \ /VWXVY-Z[[ JJLOO \
 JJLOO sn   8BJ7  I; +C J7 *J+5 J7 ;)J($J7 'J((J7 +J4	0J7 7	K7 K2K7K: 2K77K: :'L!c           
         t        j                  d      }t         j                  j                  |t	        |             }	 t         j                  j                  |      s$t        j                  |       t        d|        nt        d|        t        j                  |      }|D cg c]~  }t         j                  j                  t         j                  j                  ||            r?|t         j                  j                  t         j                  j                  ||            f }}t        |      }t        |      }||z   }	t        |	dz
  d      }
|
dkD  rg|re|j                  d        |d |
 }|D ]H  \  }}t         j                  j                  ||      }t        j                  |       t        d|        J |D ]  }|j                  }t         j                  j                  ||      }t!        |d	      5 }|j"                  j%                  d       t'        j(                  |j"                  |       d d d        t        d
|         dddS c c}w # 1 sw Y   #xY w# t*        $ r}dd| dcY d }~S d }~ww xY w)Nr   u   📂 Carpeta creada: u   📂 Carpeta ya existe: rR   r   c                     | d   S )N    rU   s    rE   rW   z(guardar_archivos_local.<locals>.<lambda>_  s
    !A$ r   rX   rZ   r[   u   📤 Archivo guardado: TzArchivos guardados exitosamenter   Fz3Error al guardar los archivos en el sistema local: )r)   r*   rc   rd   r8   existsmakedirsr7   listdirisfilegetmtimeri   maxrj   rk   r/   rl   r-   r0   shutilcopyfileobjr5   )r:   r<   r=   propuesta_pathexisting_filesr-   rt   num_archivos_existentesnum_archivos_nuevostotal_despues	excedenteru   _rv   r   local_filenamelocal_file_pathdestination_filerD   s                      rE   r1   r1   A  sO    +,JWW\\*c,.?@N0
ww~~n-KK').)9:;,^,<=> N3 '
ww~~bggll>4@A 277##BGGLL$FGH
 
 #&&8"9!(m/2EE)1-	 q=/###70)<O* AaGGLL>			)$3I;?@A   	?G$--N ggll>>JOot, C0@!!!$""7<<1ABC +O+<=>	?  ,MNNA
4C C  
LQCP
 	

sK    A*I, *BI-CI, <I >I, I,  I)	%I, ,	J5J<JJc                     d}| j                  ||f       | j                         }t        | ||||      }|d   s|S dd||d   ddS )Nz
        SELECT id, nombre_archivo 
        FROM documentos_propuestas 
        WHERE id_propuesta_ciud = %s
        ORDER BY fecha ASC
    r   Tz"Propuesta actualizada exitosamenter;   )r!   r;   r   )r+   rH   reemplazar_archivos_antiguos)r'   r:   r<   r=   query_filesr   	resultados          rE   manejar_propuesta_existenter   |  sj    K NN;0__&N,V\8^]ghIY 7&2&7
 r   c           
         |sdddS g }t        t        |      t        |            }t        |      D ]  }||   }||   }	| d| d|	d    }
t        j                  j                  |
      rt        j                  |
       d}| j                  ||j                  | d| d|j                   |	d   f       |j                  |	d           t        ||      }|j                  dd      sd|j                  d	d
      i dS d|dS )NFz%No se proporcionaron archivos nuevos.r   r    nombre_archivoz
            UPDATE documentos_propuestas
            SET nombre_archivo = %s, ruta = %s, fecha = NOW()
            WHERE id = %s
        idr   r   zError al guardar los archivosr   T)r   r;   )minri   ranger)   rc   r   rk   r+   r/   r3   r1   r(   )r'   r:   r<   r   r=   id_documentos_actualizadosnum_reemplazosinuevo_adjuntoarchivo_antiguoruta_archivo_antiguoquery_updateguardar_resultados                rE   r   r     sD    -TUU!#XN(;<N >" A (+ #-Q|nAoN^>_=`a77>>./II*+
 	|""l!L>=+A+A*BCD!&
 	
 	#))/$*?@)A. /|XF  E2(,,Y8WX
 	
 3 r   c                 J  K   	 t        j                         }d|  }|j                  ||       d{   }|j                  dd      sd|j                  dd      i dS dd	|d
   t	        |d      rdndddS 7 F# t
        $ r}ddt        |       i dcY d}~S d}~ww xY ww)u   
    Función de ejemplo que usa el adaptador de storage para guardar archivos.
    Esta función puede ser llamada desde propuesta_nueva() para usar S3 o local según configuración.
    zpropuestas/Nr   Fr   zError al subir archivosr   Tz-Archivos guardados exitosamente con adaptadorfiles	s3_clients3local)r   storage_typez)Error al guardar archivos con adaptador: )r   get_storage
save_filesr(   r6   r5   r8   )r:   r<   storagefolder_pathupload_resultrD   s         rE   r2   r2     s     

 ,,.#L>2 &00hGG  E2 (,,Y8QR  F&w/(/(E7
 	
 H&  
B3q6(K
 	

sP   B#.A; A9+A; B#A; 8B#9A; ;	B BB B#B  B#)%sysr)   pathlibr   r   loggingr^   r   cnxpdor   dotenvr   rc   dirnameabspath__file__current_dir
parent_dirr3   storage.storage_factoryr   
script_dirtasa_dirroot_dirrd   env_pathr   infowarningdictrF   rJ   rz   r1   r   r   r2   r~   r   rE   <module>r      sW   
 	      !  ggoobggooh78WW__[)
 
  3 & '
 WW__RWW__X67
 77??:& 77??8$ 77<<%):FC 77>>(GLL<XJGHGOO>xjIJH HX-jL^7
v6*Z#
r   