
    Sh^                         d dl mZ d dlZd dlZd dlmZ d dlmZ d Zd Z	de
fdZd	e
fd
Zd Zd Zd Zd Zd Zde
defdZd	e
defdZde
defdZd Zd Zd Zde
fdZy)    )get_connectionN)Error)datetimec                    | sy t        | t              r8	 g d}|D ]+  }	 t        j                  | |      }|j	                  d      c S  	 | S t        | t              r| j	                  d      S | S # t
        $ r Y _w xY w# t        $ r Y | S w xY w)N)%Y-%m-%dz%d/%m/%Yz%m/%d/%Yz%d-%m-%Yz%m-%d-%Yz%Y/%m/%dz%d %m %Yz%Y%m%dr   )
isinstancestrr   strptimestrftime
ValueError	Exception)fecha_inputformatos_comunesformato	fecha_objs       K/var/www/dev.api.imparables.com.co/api_imparables/crm/procesos/encuestas.pyformatear_fecha_vencimientor      s     +s#		  ,  ( 1 1+w GI$--j99 	 
K	*##J//  "   	 	s:   	A> &A/A> A> /	A;8A> :A;;A> >	B
Bc                      t               } | dddS | j                  d      }d}|j                  |       |j                         }|j	                          | j	                          dd|dS )	NF   Error de conexiónsuccessmessageT
dictionaryaA  
            SELECT 
                e.id_enc, 
                e.nombre_encuesta, 
                ec.categoria as categoria, 
                e.fecha_vencimiento, e.status,  
                CONCAT(emp.nombres, ' ', emp.apellidos) AS usuario,
                e.fecha_creacion,
                e.descripcion
            FROM encuestas e
            LEFT JOIN encuestas_categorias ec  ON  e.categoria =  ec.id_enc_cat 
            LEFT JOIN usuarios u ON e.usuario = u.id
            LEFT JOIN empleados emp ON emp.id  = u.idEmpleado
            ORDER BY e.id_enc DESC
        z!Encuestas obtenidas correctamenter   r   data)r   cursorexecutefetchallclose)
conexionBDr   query	encuestass       r   traer_lista_encuestasr$   ,   s    #%
 / 
 ""d"3  	uOO%	 	:
 	
    id_encc                 .   	 t               }|dddS |j                  d      }d}|j                  || f       |j                         }|j	                          |j	                          dd|dS # t
        $ r}dd	t        |       dcY d }~S d }~ww xY w)
NFr   r   Tr   aZ  
            SELECT 
                ed.*,
                etp.tipo_pregunta as nombre_tipo_preg 
            FROM  encuestas_detalle ed 
            LEFT JOIN encuestas_tipos_preg etp ON ed.tipo_pregunta =  etp.id_enc_tipo_preg
            WHERE id_enc = %s AND ed.tipo_pregunta NOT IN (1, 2, 3)
            ORDER BY ed.id_enc_det DESC 
        z!Preguntas obtenidas correctamenter   Error: r   r   r   r   r    r   r	   )r&   r!   r   r"   	preguntases         r   traer_lista_preguntasr,   W   s    "
#%
 / 
 ""d"3 	ufY'OO%	 	:
 	

  
 Q)
 	

#   A0 AA0 0	B9B	BB
id_enc_detc                 .   	 t               }|dddS |j                  d      }d}|j                  || f       |j                         }|j	                          |j	                          dd|dS # t
        $ r}dd	t        |       dcY d }~S d }~ww xY w)
NFr   r   Tr   z
            SELECT * FROM  encuestas_respuestas_pregunta  
            WHERE id_enc_det = %s
            ORDER BY id_enc_res_preg DESC
        z"Respuestas obtenidas correctamenter   r(   r)   )r.   r!   r   r"   
respuestasr+   s         r   traer_lista_respuestasr1   |   s    
#%
 / 
 ""d"3 	uj]+__&
 	;
 	

  
 Q)
 	

r-   c                  *   	 t               } | dddS | j                  d      }d}|j                  |       |j                         }|j	                          | j	                          dd|dS # t
        $ r}dd	t        |       dcY d }~S d }~ww xY w)
NFr   r   Tr   z# SELECT * FROM encuestas_tipos_pregtablas obtenidas correctamenter   r(   r)   r!   r   r"   tipos_pregutasr+   s        r   traer_tipos_preguntasr6          
#%
 / 
 ""d"35u* 	7"
 	

  
 Q)
 	

#   A. AA. .	B7BBBc                  *   	 t               } | dddS | j                  d      }d}|j                  |       |j                         }|j	                          | j	                          dd|dS # t
        $ r}dd	t        |       dcY d }~S d }~ww xY w)
NFr   r   Tr   z# SELECT * FROM encuestas_categoriasr3   r   r(   r)   r4   s        r   traer_categorias_encuestasr:      r7   r8   c                 j   	 t               }|dddS d}|j                         }|j                  || d   | d   | d   | d   f       |j                  }|| d	<   |j	                          |j                          |j                          d
d| dS # t        $ r}ddt        |       dcY d }~S d }~ww xY w)NFr   r   z
            INSERT INTO encuestas_detalle (id_enc, pregunta, tipo_pregunta, obligatorio) 
            VALUES (%s, %s, %s,%s)
        r&   preguntatipo_preguntaobligatorior.   Tz Pregunta insertada correctamenter   Error al insertar datos: r   r   r   	lastrowidcommitr    r   r	   r   r!   r"   r   last_idr+   s         r   insertar_preguntarE      s     S#%
$1EFF
 ""$uN!	
 	 ""$\ 	,NX\]] S /HQ-QRRSs#   B A:B 	B2B-'B2-B2c           
         	 t               }|dddS d }d| v r| d   rt        | d         }d}|j                         }|j                  || d   | d   || d   | d	   | d
   f       |j                  }|| d<   g d}d}|D ]  \  }}	}
|j                  ||||	|
f        |j                          |j                          |j                          dd| dS # t        $ r}ddt        |       dcY d }~S d }~ww xY w)NFr   r   fecha_vencimientoz
            INSERT INTO encuestas (nombre_encuesta, categoria, fecha_vencimiento, status,usuario, fecha_creacion, descripcion) 
            VALUES (%s, %s, %s,%s,%s, NOW(), %s)
        nombre_encuesta	categoriastatususuariodescripcionr&   ))zIngresar numero documento   rM   )zIngresar tipo documento   rM   )zIngresar nombre del ciudadano   rM   z
            INSERT INTO encuestas_detalle (id_enc, pregunta, tipo_pregunta, obligatorio) 
            VALUES (%s, %s, %s, %s)
        Tz9Encuesta y preguntas por defecto insertadas correctamenter   r?   )	r   r   r   r   rA   rB   r    r   r	   )r   r!   fecha_vencimiento_formateadar"   r   rD   preguntas_defaultquery_preguntasr<   r=   r>   r+   s               r   insertar_encuestarS      sU   8S#%
$1EFF (,$$&40C+D+FtL_G`+a(
 ""$u"#(NO
 	 "" !X

 5F 	]0Hm[NN?Wh{,[\	] 	 	,gquvv S /HQ-QRRSs#   C B?C 	C7C2,C72C7c                 Z   	 t               }|dddS d}|j                         }|j                  || d   | d   f       |j                  }|| d<   |j	                          |j                          |j                          dd	| d
S # t        $ r}ddt        |       dcY d }~S d }~ww xY w)NFr   r   z}
            INSERT INTO encuestas_respuestas_pregunta (id_enc_det, respuesta_pregunta) 
            VALUES (%s, %s)
        r.   respuesta_preguntaid_enc_res_pregTzDatos insertados correctamenter   r?   r@   rC   s         r   insertar_respuestarW   3  s     S#%
$1EFF
 ""$u%&
 	 "" #* 	 	,LVZ[[ S /HQ-QRRSs#   B A2B 	B*B%B*%B*r   c           	         t               }d }|dddS 	 |j                  d      }d }d|v r|d   rt        |d         }d}|j                  ||d   |d	   ||d
   |d   | f       |j	                          |j                          |j                          dd|d|r|j                          |r|j                          S S # t        $ r}t        j                  dt        |             t        j                  t        j                                |j                          ddt        |       t        j                         dcY d }~|r|j                          |r|j                          S S d }~wt        $ r}t        j                  dt        |             t        j                  t        j                                |j                          ddt        |       t        j                         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 a la base de datosr   Tr   rG   z
            UPDATE encuestas
            SET nombre_encuesta = %s, categoria = %s, fecha_vencimiento = %s, status = %s, descripcion = %s
            WHERE id_enc = %s;
        rH   rI   rJ   rL   zVoluntario actualizador   z7Error en la base de datos al actualizar la encuesta: %szError en la base de datos: )r   r   tracez.Error inesperado al actualizar la encuesta: %szError inesperado: )r   r   r   r   rB   r    
MySQLErrorloggingerrorr	   	traceback
format_excrollbackr   )r&   r   r!   r   rP   r"   db_errorr+   s           r   actualizar_encuestasra   W  s1   !JF -TUU3""d"3 (,$$&40C+D+FtL_G`+a( 	u"#(N 	 	,DdS* LLN +  
OQTU]Q^_i**,-4S]OD))+
 	
 LLN   
FAOi**,-+CF84))+
 	
 LLN 
 LLN sJ   BC 	H#
A9E.H#H& .H#:A9H3H#4H& H##H& &'Ic                 B   	 t               }|dddS d}|j                         }|j                  ||d   |d   |d   | f       |j                          |j	                          |j	                          dd	|d
S # t
        $ r}ddt        |       dcY d }~S d }~ww xY w)NFr   r   z
            UPDATE encuestas_detalle 
            SET pregunta = %s, tipo_pregunta = %s, obligatorio = %s
            WHERE id_enc_det = %s
        r<   r=   r>   Tz"Pregunta actualizada correctamenter   zError al actualizar pregunta: r   r   r   rB   r    r   r	   )r.   r   r!   r"   r   r+   s         r   actualizar_preguntard     s    X#%
$1EFF ""$u!	
 	 	,PZ^__ X /McRSfX-VWWXs#   A: A&A: :	BBBBrV   c                 2   	 t               }|dddS d}|j                         }|j                  ||d   | f       |j                          |j	                          |j	                          dd|dS # t
        $ r}dd	t        |       dcY d }~S d }~ww xY w)
NFr   r   z
            UPDATE encuestas_respuestas_pregunta 
            SET respuesta_pregunta = %s
            WHERE id_enc_res_preg = %s
        rU   Tz#Respuesta actualizada correctamenter   zError al actualizar respuesta: rc   )rV   r   r!   r"   r   r+   s         r   actualizar_respuestarf     s    Y#%
$1EFF ""$u%&
 	 	,Q[_`` Y /NsSTvh-WXXYs#   A2 AA2 2	B;BBBc                    	 t               }|dddS |j                         }d}|j                  || f       |j                  }d}|j                  || f       |j                  }|dk(  r%|j	                          |j	                          dddS |j                          |j	                          |j	                          dd	| d
| |dddS # t        $ r}ddt        |       dcY d }~S d }~ww xY w)NFr   r   zb
            DELETE FROM encuestas_respuestas_pregunta 
            WHERE id_enc_det = %s
        zV
            DELETE FROM encuestas_detalle 
            WHERE id_enc_det = %s
        r   u&   No se encontró la pregunta a eliminarTz0Pregunta eliminada correctamente. Se eliminaron z respuestas asociadas.)r.   respuestas_eliminadaspregunta_eliminadar   zError al eliminar pregunta: r   r   r   rowcountr    rB   r   r	   )r.   r!   r   query_respuestasrh   query_preguntari   r+   s           r   eliminar_preguntarn     s   0V#%
$1EFF""$
 	'*7 &
 	~
}5#__ "LLN$1YZZ 	 IJ_I``vw()>&*
 	
  V /KCPQF8-TUUVs)   C A;C =C 	C1C,&C1,C1c                    	 t               }|dddS |j                         }d}|j                  || f       |j                  }|dk(  r%|j	                          |j	                          dddS |j                          |j	                          |j	                          dd| dd	d
S # t        $ r}ddt        |       dcY d }~S d }~ww xY w)NFr   r   zg
            DELETE FROM encuestas_respuestas_pregunta 
            WHERE id_enc_res_preg = %s
        r   u'   No se encontró la respuesta a eliminarTz"Respuesta eliminada correctamente.)rV   respuesta_eliminadar   zError al eliminar respuesta: rj   )rV   r!   r   r"   rh   r+   s         r   eliminar_respuestarq     s    %W#%
$1EFF""$
 	u01 & !A%LLN$1Z[[ 	 ;#2'+
 	
  W /LSQRVH-UVVWs)   B' AB' .8B' '	C0C CCc            	         	 t               } | dddS | j                         }t        j                         j	                         }d}|j                  ||f       |j                         }|s)|j                          | j                          dddg d	d
S d}|j                  ||f       |j                  }| j                          |j                          | j                          g }|D ])  }|j                  |d   |d   t        |d         d       + dd| d|t        |      |dd
S # t        $ r}	ddt        |	       dcY d}	~	S d}	~	ww xY w)u   
    Función que desactiva automáticamente las encuestas que han llegado a su fecha de vencimiento
    cambiando el status a 0 en lugar de eliminarlas
    NFr   r   z
            SELECT id_enc, nombre_encuesta, fecha_vencimiento 
            FROM encuestas 
            WHERE DATE(fecha_vencimiento) <= %s AND status = 1
        Tz)No hay encuestas vencidas para desactivarr   )encuestas_desactivadasencuestas_afectadasr   z
            UPDATE encuestas 
            SET status = 0 
            WHERE DATE(fecha_vencimiento) <= %s AND status = 1
        rM   rN   )r&   rH   rG   zSe desactivaron z! encuestas vencidas correctamente)rs   fecha_actualrt   z(Error al desactivar encuestas vencidas: )r   r   r   nowdater   r   r    rk   rB   appendr	   r   )
r!   r   ru   query_consultaencuestas_a_desactivarquery_updaters   encuestas_infoencuestar+   s
             r   desactivar_encuestas_vencidasr~   *  s   
Db#%
$1EFF""$  ||~**, 	~7!'!2%LLNF./+-  	|l_5!' 	 . 	H!!"1+#+A;%(!%5# 	 )*@)AAbc*@ #L 1'5
 	
  b /WX[\]X^W_-`aabs*   D- BD- BD- -	E6EEEc           
         	 t               }|dddS |j                  d      }t        j                         j	                         }d}|j                  || f       |j                         }|s%|j                          |j                          dddS |d	   d
k(  r.|j                          |j                          dd| |d   d
dddS |d   }t        |t              r%t        j                  |d      j	                         }nt        |d      r|j	                         }||k  rhd}|j                  || f       |j                          |j                          |j                          dd| |d   t        |      t        |      dd
dddS |j                          |j                          dd| |d   t        |      t        |      |d	   dddS # t        $ r}ddt        |       dcY d}~S d}~ww xY w)uR   
    Función que verifica y desactiva una encuesta específica si ha vencido
    NFr   r   Tr   z
            SELECT id_enc, nombre_encuesta, fecha_vencimiento, status 
            FROM encuestas 
            WHERE id_enc = %s
        zEncuesta no encontradarJ   r   u    La encuesta ya está desactivadarH   ninguna)r&   rH   status_actualaccion_realizadar   rG   r   rw   zq
                UPDATE encuestas 
                SET status = 0 
                WHERE id_enc = %s
            z$Encuesta desactivada por vencimientorM   desactivada)r&   rH   rG   ru   status_anteriorr   r   u   La encuesta aún no ha vencido)r&   rH   rG   ru   r   r   zError al verificar encuesta: )r   r   r   rv   rw   r   fetchoner    r   r	   r
   hasattrrB   r   )	r&   r!   r   ru   ry   r}   rG   r{   r+   s	            r   *verificar_y_desactivar_encuesta_especificar   u  s/   [W#%
$1EFF""d"3  ||~**, 	~y1??$LLN$1IJJ H"LLN=$'/0A'B%&(1		 	 %%89'- ( 1 12CZ P U U W&/ 1 6 6 8,L NN<&3LLN  A$'/0A'B),->)?$'$5'(%&(5  LLN;$'/0A'B),->)?$'$5%-h%7(1   W /LSQRVH-UVVWs7   G A?G 5G 	CG AG 	G5G0*G50G5)cnxpdor   r[   r]   mysql.connectorr   rZ   r   r   r$   intr,   r1   r6   r:   rE   rS   rW   dictra   rd   rf   rn   rq   r~   r    r%   r   <module>r      s    !   / #J$
V#
# #
J
s 
B
8
8!SF9Sv!SH: :4 :xXC Xt X>Y# YT Y:1Vf&WPIbV_Ws _Wr%   