
    Kh%y                         d dl Z d dlZd dlZej                  j	                  d       d dlmZ d dlmZ defdZ	d Z
d Zd	 Zd
 ZdefdZdedefdZd Zd Zy)    Nz/var/www/html/config)get_connection)datetimedatac                 b   d }d }	 t        dt        | j                  dd                  }t        dt        dt        | j                  dd                        }|dz
  |z  }t	               }|t        d      |j                  d      }d	}|j                  |       |j                         d
   }|dk(  r5d}ddg ddd|ddd	}	|	|r|j                          |r|j                          S S ||z   dz
  |z  }|}
||kD  r
|}|dz
  |z  }|dk  rd}d}d}|j                  |||f       |j                         }|D ]$  }dD ]D  }|j                  |      st        ||   d      s%|dk(  rdnd}||   j                  |      ||<   F |j                  d      rb|d   }|j                  d      }|j                  dd      }|j                         |d<   ||d   k7  rt        j                   d| d|d    d       t        |j                  d      xs d      |d<   |j#                         D ]1  \  }}|d||<   t%        |t&              s|j                         ||<   3 ' t)        |      }||k  }|dkD  }||k(  ru|dk(  rp|dkD  rkt        j*                  d| d|        t        d|dz
        }|dz
  |z  }|j                  |||f       |j                         }t)        |      }||k  }|dkD  }|dk(  rd| }n|dz   }||z   }d | d!| d"| d#| d!| 
}d||||||||||
||d$d%
}	|	|r|j                          |r|j                          S S # t,        $ rf}t        j.                  d&t'        |              dd'g ddddddt'        |      d(
cY d }~|r|j                          |r|j                          S S d }~wt
        $ r@}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)+N   paged   pageSize   %   Error de conexión a la base de datosT
dictionaryz6SELECT COUNT(*) AS total FROM union_contactos_personastotalr   zNo se encontraron registrosF)	successmessager   totalRecords
totalPagescurrentPager
   hasNextPagehasPrevPagea  
            SELECT 
                uc.id, 
                fecha_registro, 
                uc.nombre_embajador, 
                uc.nombres, 
                uc.apellidos, 
                uc.tipo_documento, 
                uc.documento,
                uc.correos, 
                uc.telefono, 
                uc.pais, 
                uc.departamento, 
                uc.ciudad, 
                uc.localidad, 
                uc.barrio,
                uc.direccion, 
                uc.fecha_cumpleanos, 
                uc.genero, 
                uc.tipo_sangre, 
                uc.recomendado,
                uc.nombre_recomendador, 
                uc.nombre_embajador, 
                uc.grupo_wp, 
                uc.grupo_wp1, 
                uc.como_ayudar, 
                uc.pasion,
                uc.intereses, 
                uc.autorizacion, 
                uc.estado_etapa, 
                uc.id_origen_datos, 
                uc.origen_datos, 
                uc.fecha_registro_contacto,
                DATEDIFF(CURDATE(), lpc.fecha_hora) AS id_notificacion_contacto
            FROM union_contactos_personas uc
            INNER JOIN logs_primer_contacto lpc ON uc.id = lpc.id_contacto
            ORDER BY uc.id DESC
            LIMIT %s OFFSET %s
        )fecha_registrofecha_registro_contactofecha_cumpleanosstrftimer   %Y-%m-%d %H:%M:%Sz%Y-%m-%dorigen_datos_ u   🧹 Origen limpiado: 'u   ' → ''estado_etapa u)   ⚠️ Inconsistencia detectada: página z" sin registros pero total_records=u   No hay registros en la página u   Página z de z - Registros -)offsetrequestedPage
actualPagerecordsInPage)
r   r   r   r   r   r   r
   r   r   debugu   ❌ Error de validación: u   Parámetros inválidos)
r   r   r   r   r   r   r
   r   r   errorError: r   r   )maxintgetminr   	Exceptioncursorexecutefetchoneclosefetchallhasattrr   stripreplaceloggingr'   items
isinstancestrlenwarning
ValueErrorr(   )r   conexionr0   r   	page_sizer#   count_querytotal_recordstotal_pagesresponseoriginal_pagequerycontactos_datacontactocampo_fechaformato
origen_raworigen_limpiokeyvalueregistros_devueltoshas_next_pagehas_prev_pager   iniciofinvees                               K/var/www/dev.api.imparables.com.co/api_imparables/crm/personas/contactos.pylist_prospectosrW   
   s   HFG1c$((61-./SCQ(?$@AB	(i'!#CDDD1 O{#)'2 AK  8 ! %$$
H H LLNNN I )94q8YFK +DQh)+F A:FD&P 	uy&12* ' 	2H` T<<,+9NPZ1[5@D]5]1cmG,4[,A,J,J7,SH[)T ||N+%n5
 * 0 0 5 - 5 5c3 ?+8+>+>+@( .!99MM$;J<wxXfOgNhhi"jk (+8<<+G+L1'MH^$ 'nn. 2
U=$&HSMs+$)KKMHSM	23	2@ ".1 {*q ;#6!#;PQ@QOOGvMop}o~  Aq+/*DQh)+FNN59f"56#__.N"%n"5 ;.M 1HM !#7v>GaZF..C d;-}VHAcURVWdVefG ")%!(( !!."!4	
& 4 LLNNN 5  
23r7)<=/  W
 	
, LLNNN   
 Q)
 	
 LLNNN 
 LLNNN sc   B?M +A'M M #C$M C M 	P6N8PP 8PO?PP ?PP 'P.c                    t               }|dddS 	 |j                         }d}|j                  || d   | d   | d   | d   | d	   | d
   | d   f       |j                          |j	                          |j	                          dd| dS # t
        $ r+}|j	                          ddt        |       dcY d }~S d }~ww xY w)Nr      Error de conexiónr*   z
            INSERT INTO recordatorios (id_contacto_union, id_agente_creador, asunto, descripcion, fecha_hora, id_agente_asignado, id_etapa, fecha_hora_registro)
            VALUES (%s, %s, %s, %s, %s, %s, %s, now())
        id_contacto_unionid_agente_creadorasuntodescripcion
fecha_horaid_agente_asignadoid_etapar   zRecordatorio insertador   r   r   r)   )r   r0   r1   commitr3   r/   r;   )r   
conexionBDr0   rF   rU   s        rV    insertarRecordatorioFidelizacionrd      s   !J)=>>
""$ 	u$%t,?'@$x.RVWdRegklxgy{  AU  |V  X\  ]g  Xh
 	 	 /
 	
  
 Q)
 	

s   A5B	 		B= B82B=8B=c           !      `   	 t               }|dddS | j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d	      }| j                  d
      }| j                  d      }	| j                  d      }
| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d       }| j                  d!      }| j                  d"      } | j                  d#      }!| j                  d$      }"|"rd%| d&}#|j                         }$|$j                  |#d'|f       |j	                          d(}%d)}&d)}'d*}(|$j                  |(|||'|%|&f       |j	                          |$j                          |j                          d+d,dS |ss|sq|ro|j                         j                         })t        |)      d+k(  r|)d   }d-}n;t        |)      d.k(  r|)\  }}n't        |)      d.kD  rd/j                  |)d d0       }|)d0   }d1}*|j                         }$|$j                  |*|||||	|
||||||||||||||||||||||| |!f       |$j                  }'d%| d2}+|$j                  |+||f       d3}%d)}&d4}(|$j                  |(|||'|%|&f       |j	                          |'| d5<   |$j                          |j                          d+d6| d7S # t        $ r},dd8t        |,       dcY d },~,S d },~,ww xY w)9Nr   rY   r*   idr   id_embajadornombre_embajadornombres_completosnombres	apellidostipo_documento	documentocorreostelefonopaisdepartamentociudad	localidadbarrio	direccionr   generotipo_sangrerecomendadonombre_recomendadorgrupo_wp	grupo_wp1como_ayudarpasion	interesesautorizacionr    nombreTablar   tiempo_primer_contactonoQuisoParticiparz
            UPDATE za 
            SET estado_etapa = %s, fecha_estado = NOW() 
            WHERE id = %s
            r   40z
            INSERT INTO logs_primer_contacto (id_usuario, id_contacto_origen, id_contacto, id_evento, leido)
            VALUES (%s, %s, %s, %s, %s)
            r   u3   Se pasó a estado descartado y se registró el log.r!      r   a  
            INSERT INTO 
                union_contactos_personas(
                    fecha_registro,
                    nombre_embajador,
                    nombres,
                    apellidos,
                    tipo_documento,
                    documento,
                    correos,
                    telefono,
                    pais,
                    departamento,
                    ciudad,
                    localidad,
                    barrio,
                    direccion,
                    fecha_cumpleanos,
                    genero,
                    tipo_sangre,
                    recomendado,
                    nombre_recomendador,
                    grupo_wp,
                    grupo_wp1,
                    como_ayudar,
                    pasion,
                    intereses,
                    autorizacion,
                    estado_etapa,
                    id_origen_datos,
                    origen_datos,
                    fecha_registro_contacto,
                    tiempo_primer_contacto
                ) 
            VALUES (
                %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
            )
        z] 
            SET estado_etapa = %s, fecha_estado = NOW() 
            WHERE id = %s
        1z
            INSERT INTO logs_primer_contacto (id_usuario, id_contacto_origen, id_contacto, id_evento, leido)
            VALUES (%s, %s, %s, %s, %s)
        id_contactozDatos insertados correctamentera   zError al insertar datos: )r   r-   r0   r1   rb   r3   r6   splitr<   join	lastrowidr/   r;   )-r   rc   
id_personar   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r    r   r   r   r   update_query_descartador0   eventoleidor   insert_log_querynombres_completos_splitquery2update_queryrU   s-                                                rV   insertarContactor      s   eO#%
 -ABB XXd^
"23xx/88$67 HH%89((9%HH[)	"23HH[)	((9%88J'xxxx/(#HH[)	(#HH[)	88$67(#hh}-hh}-"hh'<=88J'HH[)	hh}-(#HH[)	xx/xx/xx."&((+D"E!%*B!C HH%89+ > "'#  &&(FNN2Q
OD FEK  NN+lJU[]b-cd LLN -bcc y->&7&=&=&?&E&E&G#*+q01!4	,-2%<",-1((#:3B#?@3B7	%N ""$v,gy.R[]dfnpt&)VY@PRXZegr9k69Vb*l4KMc	 
 	 && > "	 	|lJ%?@  	',
KQWY^)_` 	 *] 7
 	
  O+DSVH)MNNOs*   P	 K P	 D4P	 		P-P("P-(P-c                    t               }d }|dddS 	 |j                  d      xs# t        j                         j	                  d      }|j                  d      xs 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d       }|j                  dd       }|j                  dd       }|j                  dd       }|j                  dd       }|j                  dd       }|j                  dd       xs d}|j                  dd       xs d}|j                  dd       }|j                  dd       }|j                  dd       }|j                  dd       }|j                  dd       }|j                  d d       }|j                  d!      }|d"}|j                  d#      xs d$}|j                  d%      xs d&}|j                  d'      xs# t        j                         j	                  d      } |j                  d()      }d }!g }"d*}!||	|||
||||||||||||||||||||||| || g}"|!*dd+d|r|j                          |r|j                          S S |j                  |!|"       |j                          d,}#|j                  |#| f       |j                         }$|j                          |j                          d(d-|$d.|r|j                          |r|j                          S S # t        $ r}%t        j                  d/t        |%             t        j                  t        j                                dd0t        |%       t        j                         d1cY d }%~%|r|j                          |r|j                          S S d }%~%ww xY w# |r|j                          |r|j                          w w xY w)2NFr   r*   r   r   rh   zNo embajador asignadorj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r   rv   rw   rx   Nory   zNo recomendadorz   r{   r|   r}   r~   r   r    r   r   z
Sin origenr   z00:00:00r   Tr   a  
                UPDATE union_contactos_personas
            SET tipo_documento = %s, documento = %s, nombres = %s, apellidos = %s, correos = %s, 
                telefono = %s, pais = %s, departamento = %s, ciudad = %s, direccion = %s, 
                genero = %s, recomendado = %s, nombre_recomendador = %s, grupo_wp = %s, 
                grupo_wp1 = %s, como_ayudar = %s, pasion = %s, estado_etapa = %s,
                nombre_embajador = %s, localidad = %s, barrio = %s, fecha_cumpleanos = %s,
                tipo_sangre = %s, intereses = %s, autorizacion = %s, origen_datos = %s, tiempo_primer_contacto = %s, fecha_registro_contacto = %s, fecha_registro = %s
            WHERE id = %s
            u-   Tabla no válida especificada en la solicitudz4SELECT * FROM union_contactos_personas WHERE id = %szVoluntario actualizadora   z!Error al actualizar los datos: %szError al actualizar los datos: )r   r   trace)r   r-   r   nowr   r0   r3   r1   rb   r2   r/   r8   r(   r;   	traceback
format_exc)&id_voluntarior   rc   r0   r   rh   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r    r   r   r   rF   paramsquery_selectvoluntario_actualizadorU   s&                                         rV   actualizar_contactor     s   !JF -TUUU"23cx||~7N7NOb7c88$67R;R((9d+HH[$/	"2D9HH[$/	((9d+88J-xx%xx5(D)HH[$/	(D)HH[$/	88$6=(D)hh}d3hh}d3;t"hh'<dCWGW88J-HH[$/	hh}d3(D)HH[$/	xx5xx/Lxx/?<!%*B!C!Qz"&((+D"E"uI`I`atIu""d"3	 !)Wi(,	6;9k6<i1AL,@VXoq  BO	P =$1`a4 LLN 3 	uf%M|m%56!'!2,DNde LLN   
93q6Bi**,-8QA))+
 	
 LLN 
 LLN s8   J$M1 A,M1 1	P:A)P#P$P PP 'P=c                    d}d}	 t               }|*ddd|r|j                          |r|j                          S S |j                  d      }d}|j                  || f       |j	                         }|D ]  }|j                  d      r|d   j                  d	      |d<   |j                  d
      r|d
   j                  d	      |d
<   |j                  d      r"|j                  d      r|d    d|d    |d<   d|d<    ddt        |       d|d|r|j                          |r|j                          S S # t        $ rb}t        j                  dt        |              ddt        |       g 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)uD   
    Obtiene todos los recordatorios de un contacto específico
    NFr   r*   Tr   a`  
            SELECT 
                r.id,
                r.asunto,
                r.descripcion,
                r.fecha_hora,
                r.fecha_hora_registro,
                r.id_agente_creador,
                r.id_agente_asignado,
                r.id_etapa,
                e.nombres as agente_nombres,
                e.apellidos as agente_apellidos,
                e.correo_corporativo as agente_correo
            FROM recordatorios r
            LEFT JOIN empleados e ON r.id_agente_asignado = e.id
            WHERE r.id_contacto_union = %s
            ORDER BY r.fecha_hora DESC
        r^   r   fecha_hora_registroagente_nombresagente_apellidosr   agente_completozSin asignarzSe encontraron z recordatoriosra   z Error al obtener recordatorios: )r   r3   r0   r1   r4   r-   r   r<   r/   r8   r(   r;   )rZ   r?   r0   rF   recordatoriosrecordatoriorU   s          rV   "obtener_recordatorios_por_contactor     s    HF=!#$1XYn LLNNN o D1& 	u023) * 
	@L--9,-G-P-PQd-e\* 566BCX6Y6b6bcv6w23  01l6F6FGY6Z5ABR5S4TTUVbcuVvUw2x./2?./
	@ (]);(<NK!
 LLNNN   
8QAB9#a&B
 	
 LLNNN 
 LLNNN s5   D: CD: :	F%2F 5F%6F(  F%%F( ('Gr   c                 ^   	 t               }|Addddt               v rj                          dt               v r|r|j                          S S S | sAddddt               v rj                          dt               v r|r|j                          S S S |j                  d      }d	}|j	                  || f       |j                         }d
d|ddt               v r|j                          dt               v r|r|j                          S S S # t        $ rW}ddt        |       dcY d }~dt               v rj                          dt               v rr|j                          S S S d }~ww xY w# dt               v rj                          dt               v rr|j                          w w w xY w)Nr   rY   r*   r0   rc   zFalta el ID del contactoTr   zw
            SELECT *
            FROM personas_contactos
            WHERE id_union_contactos_personas = %s  
        r   z"Respuestas obtenidas correctamentera   r)   )r   localsr3   r0   r1   r4   r/   r;   )r   rc   r0   rF   
respuestasrU   s         rV   get_respuestas_primer_contactor   K  s   &#%
/@ vxLLN68#
 )3#; 54 vxLLN68#
 )3#/ ""d"3
 	u{n-__&
 ;
 vxLLN68#
 )3#  
 Q)
 	

 vxLLN68#
 )3#
 vxLLN68#
 )3#s;   D D <D 	E+E&$E+%E. &E++E. .>F,nuevo_estadoc           
         d }d }	 t               }|*ddd|r|j                          |r|j                          S S |j                  d      }d}|j                  || f       |j	                         }|s*ddd|r|j                          |r|j                          S S |d   }|d	   }d
dddd
dddd}|j                  |      }	|	sqt        j                  d| d       d}
|j                  |
|| f       |j                          dd| d| ||d d|r|j                          |r|j                          S S d}
|j                  |
|| f       |j                  }d|	 d}|j                  |||f       |j                  }|j                          dd| d| |||	|||d	|r|j                          |r|j                          S S # 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)NFr   r*   Tr   z
            SELECT id_origen_datos, origen_datos 
            FROM union_contactos_personas 
            WHERE id = %s
        u   No se encontró el contactoid_origen_datosr   inscripciones_voluntariosprospectos_manualbase_datos_10kregistros_crm_antiguo)zinscripciones voluntarioszprospectos manualzbase datos 10kzregistros crm antiguor   r   r   r   zTabla no reconocida: 'r   zCUPDATE union_contactos_personas SET estado_etapa = %s WHERE id = %szIEstado actualizado solo en tabla principal (tabla origen no reconocida: 'z'))r   r   r   r   tabla_origen_recibidatabla_origen_bdzUPDATE z$ SET estado_etapa = %s WHERE id = %szEstado actualizado a z en ambas tablas)	r   r   r   r   r   r   	id_origenfilas_union_actualizadasfilas_origen_actualizadasz"Error al actualizar estado_etapa: zError al actualizar: )r   r3   r0   r1   r2   r-   r8   r=   rb   rowcountr/   rollbackr(   r;   )r   r   r?   r0   query_origencontacto_infor   tabla_origen_rawmapeo_tablasr   query_unionfilas_unionfilas_origenrU   s                 rV    actualizar_estado_etapa_contactor   w  s   HFV!#$1XY` LLNNN a D1
 	|k^4)$1NOF LLNNN G ""34	(8 *E!4.%<)D!4.%<	
 '**+;<OO45E4FaHI_KNN;{(CDOO  fgwfxxz{* ,)9#'R LLNNN E \{\;$?@oo  11UV|lI%>? .|n<LM&(%5."(3)5

, LLNNN   
:3q6(CD.s1vh7
 	
 LLNNN 
 LLNNN sC   G =G A3G 8A'G 	IAH<II <II 'I+c                 >   	 t               }|Oddddt               v rj                          dt               v r"|j                         r|j                          S S S | j	                  d      }| j	                  d      }|r|sOddddt               v rj                          dt               v r"|j                         r|j                          S S S d	}|j                         }|j                  |||f       |j                          |j                  dk(  rRdd
| ddt               v r|j                          dt               v r"|j                         r|j                          S S S dd|||j                  dddt               v r|j                          dt               v r"|j                         r|j                          S S S # t        $ r}}t        j                  d|        ddt        |       dcY d }~dt               v rj                          dt               v r"j                         r|j                          S S S d }~ww xY w# dt               v rj                          dt               v r"j                         r|j                          w w w xY w)NFrY   r*   r0   rc   r   r   z?Faltan datos requeridos: id_voluntario y tiempo_primer_contactoz|
            UPDATE union_contactos_personas 
            SET tiempo_primer_contacto = %s
            WHERE id = %s
        u#   No se encontró un registro con id Tu+   Tiempo de sesión actualizado correctamente)r   r   affected_rowsra   zError en insertarTiempoSesion: u*   Error al actualizar el tiempo de sesión: )r   r   r3   is_connectedr-   r0   r1   rb   r   r/   r8   r(   r;   )r   rc   r0   r   r   rF   rU   s          rV   insertarTiempoSesionr     s   8#%
$2FGb vxLLN68#
(?(?(A )B#a 1!%*B!C $: \R vxLLN68#
(?(?(A )B#K ""$u5}EF ??e# @P, vxLLN68#
(?(?(A )B#% D!.*@!'
" vxLLN68#
(?(?(A )B#  
7s;<CCF8L
 	

 vxLLN68#
(?(?(A )B#
 vxLLN68#
(?(?(A )B#sC   G *G AG )G 	I(I8I9I II AJc           	         t               }|dddS 	 d}|j                         }|j                  || d   | d   | d   | d   | d	   f       |j                          |j                  }|j                          |j                          d
dd|idS # t        $ rY}dt               v rj                          |r |j                          |j                          ddt        |       dcY d }~S d }~ww xY w)NFrY   r*   aQ  
            INSERT INTO 
                user_contact_assignments (
                    contacted_person_id, 
                    assigned_user_id, 
                    caller_user_id, 
                    coordinator_user_id, 
                    administrator_user_id
                )
            VALUES (%s, %s, %s, %s, %s)
        contacted_person_idassigned_user_idcaller_user_idcoordinator_user_idadministrator_user_idTu#   Asignación insertada correctamenterf   ra   r0   r)   )
r   r0   r1   rb   r   r3   r/   r   r   r;   )r   rc   rF   r0   inserted_idrU   s         rV   %insert_user_assigned_contacted_personr     s!   !J+
 	

-

 ""$u&'#$!"&'()
 	 	&& <;'
 	
  

vxLLN!  Q)
 	


s   A;B 	C1AC,&C1,C1)r8   sysr   pathappendcnxpdor   r   dictrW   rd   r   r   r   r,   r   r   r   r        rV   <module>r      s     
  & ' ! K$ K\
DfOT\~DP' 'XZ# ZS Z|9z5
r   