
    Gh>                    &   d dl Z d dlmZ  ej                         Zd dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlZd dlZd dlmZ d dlmZ d d	lmZ d d
lm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ d dlm%Z% d dlm&Z& d dl'm(Z( d dlm)Z) d dl*m*Z* d dl*m+Z+ d dl,m-Z- d dl,m.Z. d dl,m/Z/ d dl,m0Z0 d dl,m1Z1 d dl,m2Z2 d dl,m3Z3 d dl4m5Z5 d dl,m6Z6 d dl,m7Z7 d dl8m9Z9 d d l,m:Z: d dlm&Z& d d!l;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZ  ed"#      Zej                  eg d$d"d%gd%g&        ej                  ej                  '       	 ej                  d(      d)        Zej                  d*      d+efd,       Zej                  d-      d.efd/       Zej                  d0      d+efd1       Zej                  d2      d3efd4       Zej                  d5      d6        Zej                  d7      d8        Zej                  d9      d:efd;       Zej                  d5      d<        Zej                  d=      d>efd?       Zej                  d@      dA        Zej                  dB      dC        Zej                  dD      dEefdF       Zej                  dG      dH        Zej                  dI      d:efdJ       Zej                  dK      dEefdL       Zej                  dM      dN        Zej                  dO      dP        Zej                  dQ      dR        Zej                  dS      dTefdU       Zej                  dV      dW        Zej                  dX      dYefdZ       Zej                  d[      d\efd]       Zej                  d^end_eoid_eoid`dagb      dc        Zej                  ddend_eoid_eoid`dagb      de        Zej                  df      dTefdg       Zej                  dh      di        Zej                  dj      dk        Zej                  dl      dm        Zej                  dn      do        Zej                  dp      dq        Zej                  dr      ds        Zej                  dt      du        Zej                  dv      dw        Zej                  dx      dy        Zej                  dz      d{        Zej                  d|      d}        Zej                  d~      defd       Zej                  d      defd       Zej                  d      d        Zej                  d      d        Zej                  d      ddefd       Zej                  d      d        Zej                  d      d        Zej                  d      d        Zej                  d      d        Zejw                  d      deefd       Zej                  d      d        Zej                  d      d        Zej                  d      d        Zej                  d      d        Zej                  d      d        Z	 ejw                  d      d        Zejw                  ddg      defd       Zejw                  d      d        Zejw                  d      d        Zejw                  d       edd      fdee   fd       Zejw                  d      deyfd       Zejw                  dedd_eiidgb       ed       ed       ed       ed       ed       ed       ed       ed      fdedededededededefd       Zejw                  d      d        Zejw                  d      de<fd       Zejw                  d«      de@fdÄ       Zejw                  dī      de}fdń       Z	 ejw                  dƫ      defdǄ       Zejw                  deDdd_eDiidgb      deCfd˄       Zejw                  d̫       ed       ed       ed      fdedededefdф       Zejw                  dҫ      deLfdӄ       Zejw                  dԫ      deJfdՄ       Zejw                  d֫      de=fdׄ       Zejw                  dث      deFfdل       Zejw                  dګ      dTedeIfdۄ       Zejw                  dܫ      deMfd݄       Zejw                  dޫ      dePfd߄       Zejw                  d      deQfd       Zejw                  d      deRfd       Zejw                  d      de?fd       Zejw                  d      deTfd       Zejw                  deV      deUfd       Zejw                  ddg      deWfd       Zejw                  deYdg      deZfd       Zejw                  dedd_eiidgb      de\fd       Zejw                  d      de]fd       Zejw                  d      defd       Zejw                  d      defd       Zejw                  d      de_fd       Zejw                  d      de`fd       Zejw                  dedd_eiid gb      decfd       Zejw                  dedd_eiidgb      deffd       Zejw                  d      degfd       Zejw                  d       ed       ed       ed       ed      fdTedededed	ef
d
       Zejw                  d      d        Z	 ejw                  deid_ejid_ejid`dgb      dehfd       Zejw                  deld_emid_emid`dgb      dekfd       Zejw                  dend_eoid_eoid`dagb       ed      fdefd       Zejw                  dend_eoid_eoid`dagb       edd"      fdefd       Zejw                  dend_eoid_eoid`dagb       edd"      fdefd       Zejw                  dend_eoid_eoid`dagb       edd"       ed      fdedefd       Zejw                  ddg      deWfd        Zejw                  d!eXdd_eXiid"gb      deqfd#       Zejw                  d$      desfd%       Zejw                  d&      detfd'       Zejw                  d(      deufd)       Zejw                  d*      dewfd+       Zejw                  d,      devfd-       Zejw                  d.      d/        Zejw                  d0edd_eiid1gb      de~fd2       Zejw                  d3edd_eiid4gb       edd"      fd5efd6       Zejw                  d7      d8        Z	 ej                  d9      dTedeBfd:       Zej                  d;       ed       ed       ed       ed       ed       ed       ed       ed      fdTededededededededee   fd<       Zej                  d=      d>edeEfd?       Zej                  d@      dTedeGfdA       Zej                  dB      dTedeHfdC       Zej                  dD      deKfdE       Zej                  dF      deNfdG       Zej                  dH      deOfdI       Zej                  dJ      dTedeSfdK       Zej                  dL      dTede[fdM       Z ej                  dN      dTede^fdO       Zej                  dP      dTedeafdQ       Zej                  dR      dTedebfdS       Zej                  dTedd_eiidUgb      dedfdV       Zej                  dW       ed       ed       ed       ed       ed       ed       ed       ed      fdTededededededededee   fdX       Zej                  dY      dTederfdZ       Zej                  d[      dTedexfd\       Zej                  d]      dede|fd^       Zej                  d_      dede{fd`       Zej                  da      dbedezfdc       Zej                  dd      de        Zej                  df      defdg       Z	ej                  dh      dTedefdi       Z
ej                  dj      dkedefdl       Zej                  dm      defdn       Zej                  doedd_eiid1gb      dpede~fdq       Z	 ej                  dr      dTefds       Zej                  dt      dTefdu       Zej                  dv      dTefdw       Zej                  dx      defdy       Zej                  dz      dbefd{       Zej                  d|      dTefd}       Zej                  d~      dTefd       Zej                  d      dTefd       Zedk(  r!d dlZ ej2                  edd       yy(      N)	variables)BodyFastAPIFormRequestResponseQueryHTTPException
UploadFileFileCookie	WebSocketWebSocketDisconnectDepends)ListOptional)CORSMiddleware)JSONResponse)Dict)login)mailing)
my_profile)	profiling)account)employee)	help_desk)
statistics)landing_design)	contactos)general_information)soporte)mailing_support)contactabilidad)	encuestas)primer_contacto)noticias)malling_primer_contacto)	marketing)admin_propuestas)api_ia)campanas)descartados)kpis)tareas)PLoginRequestNuevoContactoRequestActualizarNoticiaRequestadjuntoFidelizacioncodigoTemporalRequestEnviarCorreoEmpleadoRequestActualizarPerfilRequestListProspectosRequestListProspectosResponse   ActualizarContraseñaRequestNuevoPermisoRequestActualizarPermisoRequestActualizarEmpleadoRequest#ActualizarGeneralInformationRequestNuevoCuentaServicioRequestactualizarCuentaServicioRequestCuentaRequestCuentaServicioRequest!actualizarCuentadeServicioRequestActualizarMesaAyudaRequestSoporteDataRequestEnviarCorreoSoporteRequestNuevoEmpleadoRequestActualizarEmpleadoPerfilRequestNuevoPerfilRequestListEncuestadosRequestListEncuestadosResponseTablaSeleccionadaRequestTablaSeleccionadaResponserK   CreateNotesResponseCreateNotesRequestVoluntarioUpdateRequestPrimerContactoRequestEnviarCorreoRequestupdateContactoNuevoAreaRequestNuevoCargoRequestActualizarAreaRequestActualizarCargoRequestverificacionContactadoRequestactualizarEstadoEtapaRequestAssistantsInstructionRequestagregarNuevoProspectoRequestObtenerRecordatoriosRequestObtenerUrlFirmadaRequestObtenerUrlFirmadaResponseObtenerUrlFirmadaErrorObtenerPropuestasCrmRequestObtenerPropuestasCrmResponseObtenerPropuestasCrmErrorProcesamientoResponseProcesamientoError!TablaSeleccionadaMarketingRequest!BusquedaPorCamposDinamicosRequestActualizarEstadoEtapaNuevaEncuestaRequestNuevaPreguntaRequestNuevaRespuestaRequestTiempoSesionRequestAssistantsEmpresaRequestActualizarDatosAsistenteNuevaCampanaRequestActualizarRespuestaRequestActualizarPreguntaRequestActualizarEncuestaRequestEnvioMailRequestUserAssignedContactedRequestUserAssignedContactedResponseListRejectedRequestListRejectedResponseParamsUpdateDataEnviarCorreoEmpleadoRequest2EnviarCorreoContactoRequestEnvioMailContactRequestGetEmailTemplateResponseGetEmailTemplateRequest ActualizarPlantillaCorreoRequestDescartadosRequestupdateLandingTextsRequestT)debug)zhttp://localhost:3000zhttp://localhost:4200z#https://dev.imparables.cic-ware.comzhttps://dev.imparables.com.cozhttps://www.imparables.com.cozhttps://imparables.com.cozhttps://app.imparables.com.cozhttps://crm.imparables.com.coz'https://dev.crm.imparables.cic-ware.comz!https://pru.crm.imparables.com.cozhttps://pru.imparables.com.coz!https://dev.crm.imparables.com.co*)allow_originsallow_credentialsallow_methodsallow_headers)levelz/ask/consultarCargosc                  2   K   t        j                         S wN)r   consultarCargos     =/var/www/dev.api.imparables.com.co/api_imparables/crm/main.py
get_cargosr   U   s     %%''   z"/ask/consultarPermisos/{id_perfil}	id_perfilc                 4   K   t        j                  |       S wr   )r   consultarPermisosr   s    r   consultar_permisosr   [   s     &&y11   z'/ask/consultarPermisosVistas/{idPerfil}idPerfilc                 4   K   t        j                  |       S wr   )r   consultarPermisosVistas)r   s    r   consultar_permisos_vistasr   a   s     ,,X66r   z)/ask/consultarElementosPerfil/{id_perfil}c                 4   K   t        j                  |       S wr   )r   consultarPermisosElementosr   s    r   consultar_elementos_perfilr   g   s     //	::r   z"/ask/consultarElementos/{id_vista}id_vistac                 4   K   t        j                  |       S wr   )r   consultarElementos)r   s    r   consultar_elementosr   m   s     ''11r   z/ask/consultarPerfilc                  2   K   t        j                         S wr   r   consultarPerfilr   r   r   consultar_Perfilr   s        $$&&r   z/ask/consultarModulosc                  2   K   t        j                         S wr   )r   consultarModulosr   r   r   consultar_modulosr   y   s     %%''r   z /ask/consultarVistas/{id_modulo}	id_moduloc                 4   K   t        j                  |       S wr   )r   consultarVistasr   s    r   consultar_vistasr      s     $$Y//r   c                  2   K   t        j                         S wr   r   r   r   r   r   r      r   r   z#/ask/consultarCargosByArea/{idArea}idAreac                 4   K   t        j                  |       S wr   )r   consultarCargosByAreas)r   s    r   consultar_cargos_by_arear      s     ,,V44r   z/ask/consultarAreac                  2   K   t        j                         S wr   )r   consultarAreasr   r   r   consultar_areasr      s     $$&&r   z /ask/consultarGeneralInformationc                  2   K   t        j                         S wr   )r    consultarGenInfor   r   r   consultar_gen_infor      s     //11r   z"/ask/recuperarSoporte/{idEmployee}
idEmployeec                 4   K   t        j                  |       S wr   )r!   recuperarSoporter   s    r   recuperar_soporter      s     ##J//r   z/ask/getModulosc                  2   K   t        j                         S wr   )r!   
getModulosr   r   r   get_modulosr      s     r   z/ask/getVistas/{id_modulo}c                 4   K   t        j                  |       S wr   )r!   	getVistasr   s    r   
get_vistasr      s     Y''r   z/ask/getTickets/{idEmployee}c                 4   K   t        j                  |       S wr   )r!   
getTicketsr   s    r   consultar_tickets_por_empleador      s     j))r   z/ask/getListaTablasDBc                  2   K   t        j                         S wr   )r#   getListaTablasr   r   r   get_lista_tablas_DBr      s     ))++r   z$/ask/tareasDisponiblesPrimerContactoc                  2   K   t        j                         S wr   )r%   getTareasPrimerContactor   r   r   get_tareas_disponiblesr      s     2244r   z/ask/tareasDisponiblesc                  2   K   t        j                         S wr   )r%   getTareasDisponiblesr   r   r   r   r      s     //11r   z /ask/consultarNotasContacto/{id}idc                    K   	 t        j                  d| i      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nid_contacto_origenz*Error al consultar las notas de contacto:   uA   Error al procesar la solicitud de consulta de notas de contactostatus_codedetail)r#   getNotesContact	Exceptionloggingerrorr
   r   es     r   consultar_notas_contactor      sV     y..0Db/IJJ yB1#FG4wxxy$   A A	A%A		AAz/ask/logSftpConfigc                  2   K   t        j                         S wr   )r&   log_sftp_configurationr   r   r   log_sftp_configr      s     **,,r   z/ask/consultarLogs/{id_user}id_userc                 4   K   t        j                  |       S wr   )r   consultarLogsLogin)r   s    r   consultar_logsr      s     ((11r   z(/ask/tablasSegunContacto/{tipo_contacto}tipo_contactoc                    K   	 t        j                  |       S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nz9Error al consultar las tablas segun el tipo de contacto: r   zRError al procesar la solicitud de consulta de las tablas segun el tipo de contactor   )r(   get_lista_tablas_tipo_contactor   r   r   r
   )r   r   s     r   r   r      s[     J77FF JQRSQTUV  5I  J  	JJ$   A A	A%AAAz=/ask/procesamientoExcel/prospectos/paso3/columnasObligatoriasmodel)  r   z Procesamiento Excel - Prospectos)response_model	responsestagsc                  ~  K   	 t        j                          d {   } | j                  dd      st        d| j                  dd            t	        d| j                  dd      | j                  d	      
      S 7 `# t        $ r  t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)NsuccessFr   messagez&Error al obtener columnas obligatoriasr   T datar   r   r   zError en paso 3: r   Error interno)r#   Jprocesamiento_principal_paso_3_obtener_columnas_obligatorias_base_de_datosgetr
   ra   r   r   r   	resultador   s     r   endpoint_paso_3r      s     	E)ttvv	}}Y.C	iQy8z{{$T9==TV;W^g^k^klr^stt w   E)!-.ODDE9   B=A> A<AA> ;B=<A> >B:%B55B::B=z;/ask/procesamientoExcel/prospectos/paso4/columnasOpcionalesc                  ~  K   	 t        j                          d {   } | j                  dd      st        d| j                  dd            t	        d| j                  dd      | j                  d	      
      S 7 `# t        $ r  t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr   Fr   r   z$Error al obtener columnas opcionalesr   Tr   r   r   zError en paso 4: r   r   )r#   Hprocesamiento_principal_paso_4_obtener_columnas_opcionales_base_de_datosr   r
   ra   r   r   r   r   s     r   endpoint_paso_4r      s     	E)rrtt	}}Y.C	iQw8xyy$T9==TV;W^g^k^klr^stt u   E)!-.ODDEr   z)/ask/obtenerRespuestasPrimerContacto/{id}c                     	 t        j                  |       S # t        $ r*}t        j                  d|        t        dd      d }~ww xY w)Nz5Error al obtener las respuestas del primer contacto: r   z@Error al procesar la solicitud de respuestas del primer contactor   )r   get_respuestas_primer_contactor   r   r   r
   r   s     r   "obtener_respuestas_primer_contactor   
  sM    x77;; xMaSQR4vwwxs    	A
%AA
z/ask/estadosEtapasc                     K   	 t        j                         S # t        $ r*} t        j                  d|         t        dd      d } ~ ww xY ww)Nz'Error al consultar los estados etapas: r   z<Error al procesar la solicitud de consulta de estados etapasr   )r(   traer_estados_etapasr   r   r   r
   r   s    r   consultar_estados_etapasr    sN     t--// t?sCD4rsst$   A A	A%AAAz/ask/consultarEncuestasc                     K   	 t        j                         S # t        $ r*} t        j                  d|         t        dd      d } ~ ww xY ww)NzError al consultar Encuestas: r   z5Error al procesar la solicitud de consultar encuestasr   )r$   traer_lista_encuestasr   r   r   r
   r   s    r   consultar_encuestasr    sN     m..00 m6qc:;4kllmr  z/ask/consultarTiposPreguntasc                     K   	 t        j                         S # t        $ r*} t        j                  d|         t        dd      d } ~ ww xY ww)Nu<   Error al obtener la información de los tipos de preguntas: r   Error al procesar la solicitudr   )r$   traer_tipos_preguntasr   r   r   r
   r   s    r   #consultar_tipos_preguntas_encuestasr	  (  sP     V..00 VTUVTWXY4TUUVr  z/ask/consultarCategoriasc                     K   	 t        j                         S # t        $ r*} t        j                  d|         t        dd      d } ~ ww xY ww)NuE   Error al obtener la información de las categorias de las encuestas: r   r  r   )r$   traer_categorias_encuestasr   r   r   r
   r   s    r   r	  r	  2  sP     V3355 V]^_]`ab4TUUVr  z)/ask/statistics/inscripciones-voluntariosc                  2   K   t        j                         S w)u2   Obtener estadísticas de Inscripciones Voluntarios)r   #get_inscripciones_voluntarios_statsr   r   r   (get_inscripciones_voluntarios_statisticsr  <        99;;r   z%/ask/statistics/registros-crm-antiguoc                  2   K   t        j                         S w)u.   Obtener estadísticas de Registros CRM Antiguo)r   get_registros_crm_antiguo_statsr   r   r   $get_registros_crm_antiguo_statisticsr  B  s      5577r   z/ask/statistics/base-datos-10kc                  2   K   t        j                         S w)u*   Obtener estadísticas de Base de Datos 10k)r   get_base_datos_10k_statsr   r   r   get_base_datos_10k_statisticsr  H  s      ..00r   z!/ask/statistics/prospectos-manualc                  2   K   t        j                         S w)u*   Obtener estadísticas de Prospectos Manual)r   get_prospectos_manual_statsr   r   r    get_prospectos_manual_statisticsr  N  s      1133r   z"/ask/statistics/contactability/allc                  2   K   t        j                         S w)u2   Obtener todas las estadísticas de contactabilidad)r   get_all_contactability_statsr   r   r   !get_all_contactability_statisticsr  T  s      2244r   z&/ask/statistics/contactability/summaryc                  2   K   t        j                         S w)u?   Obtener resumen consolidado de estadísticas de contactabilidadr   get_contactability_summaryr   r   r   %get_contactability_summary_statisticsr  Z        0022r   z/ask/statistics/dashboardc                  2   K   t        j                         S w)u1   Obtener estadísticas para el dashboard principalr  r   r   r   get_dashboard_statisticsr"  `  r   r   z /ask/consultarPreguntas/{id_enc}id_encc                    K   	 t        j                  |       S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)NzError al consultar preguntas: r   z4Error al procesar la solicitud de consulta preguntasr   )r$   traer_lista_preguntasr   r   r   r
   r#  r   s     r   consultar_preguntas_encuestasr'  g  sP     l..v66 l6qc:;4jkklr   z$/ask/consultarRespuesta/{id_enc_det}
id_enc_detc                    K   	 t        j                  |       S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nz#Error al consultar las respuestas: r   z6Error al procesar la solicitud de consultar respuestasr   )r$   traer_lista_respuestasr   r   r   r
   r(  r   s     r   r   r   p  sP     n//
;; n;A3?@4lmmnr   z#/ask/statistics/prospectos/ciudadesc                  2   K   t        j                         S w)u.   Obtener estadísticas de prospectos por ciudad)r   get_prospectos_por_ciudadr   r   r   "get_prospectos_ciudades_statisticsr.  z  s      //11r   z)/ask/statistics/prospectos/detalle-tablasc                  2   K   t        j                         S w)z0Obtener detalle de prospectos por tabla y ciudad)r    get_prospectos_detalle_por_tablar   r   r   (get_prospectos_detalle_tablas_statisticsr1    s      6688r   z0/ask/statistics/prospectos/top-ciudades/{limite}limitec                 4   K   t        j                  |       S w)u(   Obtener top ciudades con más prospectosr   get_top_ciudades_prospectos)r2  s    r   &get_top_ciudades_prospectos_statisticsr6    s      11&99r   z'/ask/statistics/prospectos/top-ciudadesc                  4   K   t        j                  d      S w)u9   Obtener top 10 ciudades con más prospectos (por defecto)
   r4  r   r   r   #get_top_ciudades_prospectos_defaultr9    s      11"55r   z'/ask/statistics/union-contacto-personasc                  2   K   t        j                         S w)uD   Obtener estadísticas por estado de etapa de union_contacto_personas)r   !get_union_contacto_personas_statsr   r   r   &get_union_contacto_personas_statisticsr<    s      7799r   z//ask/statistics/union-contacto-personas/resumenc                  2   K   t        j                         S w)z6Obtener resumen consolidado de union_contacto_personas)r   #get_union_contacto_personas_resumenr   r   r   .get_union_contacto_personas_resumen_statisticsr?    r  r   z/ask/listAssistantsc                  2   K   t        j                         S wr   )r*   listAssistantsr   r   r   list_assistantsrB    s       ""r   z/ask/instruccionesrequestc                    K   	 d| j                   i}t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)NidAsistentez!Error al obtener instrucciones : r   zError al procesar lar   )id_asistenter*    obtener_instrucciones_asistentesr   r   r   r
   rC  r   r   s      r   get_assistants_instructionsrI    sd     L7//
 66t<< L9!=>4JKKL$   A"' A	A%AAAz)/ask/statistics/descriptivas/consolidadasc                  2   K   t        j                         S w)u?   Obtener estadísticas descriptivas consolidadas de las 4 tablas)r   *get_estadisticas_descriptivas_consolidadasr   r   r   3get_estadisticas_descriptivas_consolidadas_endpointrM    s      @@BBr   z&/ask/statistics/descriptivas/por-tablac                  2   K   t        j                         S w)u=   Obtener estadísticas descriptivas de cada tabla por separado)r   'get_estadisticas_descriptivas_por_tablar   r   r   0get_estadisticas_descriptivas_por_tabla_endpointrP    s      ==??r   z/ask/primer_contactoc                  2   K   t        j                         S wr   )r    get_logs_primer_contacto_summaryr   r   r   obtener_logs_primer_contactorS    s     6688r   z/ask/contactos-kpisc                  2   K   t        j                         S wr   )r-   getContactosKPIsr   r   r   obtener_contactos_kpisrV    s       ""r   z/ask/Alltareasc                     K   	 t        j                         S # t        $ r*} t        j                  d|         t        dd      d } ~ ww xY ww)NzError al consultar tareas: r   z1Error al procesar la solicitud de consulta tareasr   )r.   
get_tareasr   r   r   r
   r   s    r   list_tareas_endpointrY    sN     i  "" i3A3784ghhir  z/ask/variablesEntornoc                  2   K   t        j                         S wr   )r   variables_entornor   r   r   r[  r[    s     &&((r   z/ask/descartadoszTabla Descartados)r   c                    K   	 | j                         }t        j                  |       d {   }|S 7 # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz/Error al obtener los datos de los descartados: r   z3Error al procesar la solicitud de obtener los datosr   )dictr,   obtener_descartadosr   r   r   r
   rC  r   r   r   s       r   consultar_descartadosr`    sk     k||~%99$??	 @  kGsKL4ijjk0   A+(5 35 A+5 	A(%A##A((A+z/ask/obtenerCuentasServicioc                  2   K   t        j                         S wr   )r   obtenerCuentasr   r   r   rc  rc    s     !!##r   z
/ask/usersc                  2   K   t        j                         S wr   )r   listEmpleadosr   r   r   	get_usersrf    s     !!##r   z/ask/obtenerNoticiasCrmzFecha en formato YYYY-MM-DD)descriptionfechac                 4   K   t        j                  |       S wr   )r&   obtener_noticiascrm)rh  s    r   rj  rj    s     ''..r   z/ask/insertarCampanac                   K   	 | j                   | j                  | j                  | j                  | j                  d}t        j                  |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)nombre_campanamensaje_campanaid_empleadomedio_enviofecha_creacionu   Error al insertar la campaña: r   u;   Error al procesar la solicitud de inserción de la campañar   )rl  rm  rn  ro  rp  r+   insertarCampanar   r   r   r
   rH  s      r   insertar_campanarr    s     s%44&66".."..%44
 ''-- s7s;<4qrrs)   B	AA B		B%BBB	z/ask/insertarNoticiasCrm   zAgregar nueva propuesta.	principalfecha_noticiatitulolinktexto_cortotexto_largo	id_estadoadjuntoc           	         K   	 | |||||||d}t        j                  |      }	|	S # t        $ r}
|
d }
~
wt        $ r*}
t	        j
                  d|
        t        dd      d }
~
ww xY ww)N)ru  rv  rw  rx  ry  rz  r{  r|  z#Error al insertar noticia in main: r   z!Error interno al insertar noticiar   )r&   insertar_noticiar
   r   r   r   )ru  rv  rw  rx  ry  rz  r{  r|  r   r   r   s              r   insertar_noticia_crmr    s     Y #*&&"	
 --d3	  Y;A3?@4WXXYs-   A*!& A*	A'1A'%A""A''A*z/ask/obtenerDataMesaAyudac                  2   K   t        j                         S wr   )r   obtenerDatosMesaAyudar   r   r   obtener_datos_mesa_ayudar  "  s     **,,r   z
/ask/loginc                    K   	 | j                   | j                  d}t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)N)emailpasswordzError en login: r   z'Error al procesar la solicitud de loginr   )r  r  r   r   r   r   r
   rH  s      r   login_router  (  sg     	_]]((

 {{4   _(,-4]^^_$   A(-2 A(	A%%A  A%%A(z/ask/codigoc                    K   	 d| j                   i}t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nr  Error al obtener asistentes: r   4Error al procesar la solicitud de obtener asistentesr   )r  r   codigoTemporalr   r   r   r
   rH  s      r   codigo_temporalr  7  sb     lW]]
 ##D)) l5aS9:4jkklrJ  z/ask/envioMailc                 2  K   	 t        | j                  t              r8| j                  j                         r| j                  j                         gng }n8| j                  D cg c]#  }|j                         s|j                         % }}|| j                  | j
                  d}t        j                  |      }g }|j                  d      rf|j                  dg       }|sR|j                  dd      }|dk(  r|}n8|j                  dg       }|D ch c]  }|d   	 }	}|D 
cg c]	  }
|
|	vs|
 }}
|rqt        j                  || j                        }|j                  dd      |d	<   |j                  d      r|j                  d
d      |d<   n|j                  d      |d<   n
d|d	<   d|d<   | j                  |d<   t        |      |d<   |S c c}w c c}w c c}
w # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Ndestinatarioasuntocuerpo_correor   destinatarios_exitososerrores_countr   detalles_erroresr  Flogs_registrados	registros
logs_countr   
logs_error
id_campanadestinatarios_procesadoszError en envioMail: r   4Error al procesar la solicitud para enviar el correor   )
isinstancer  strstripr  r  r   sendEmail_marketingr   registrar_logs_envior  lenr   r   r   r
   )rC  destinatariosr  r   resultado_envior  r  errores_detalladosr   destinatarios_con_errordestresultado_logsr   s                r   	envioMailr  F  s5    8lg**C0>E>R>R>X>X>ZW11779:`bM8?8L8L^uPUP[P[P]U[[]^M^ *nn$22
 "55d; "$y)%4%8%89QSU%V" * / 3 3OQ G A%-:* *9)<)<=OQS)T&Rd.eu^/D.e+.e?L-ttPT\sPsd-t*-t "$99:PRYRdRdeN 3A2D2DYPU2VO./!!),0>0B0B;PQ0R-0>0B0B90M-27O./,-OL) )0(:(:%69-6H23_ _4 /f-t,  l,QC014jkklsa   HA G! $G:GBG! G G! &	G0G4BG! HG! !	H*%HHHz/ask/sendEmailEmployee2c                    K   	 | j                   | j                  | j                  d}t        j                  |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)userr  codigo'Error al enviar el correo al empleado: r   r  r   )	r  r  r  r   sendEmailEmployee2r   r   r   r
   rH  s      r   enviar_correo_empleador    sn     lLL]]nn
 ))$// l?sCD4jkkl%   A38= A3	A0%A++A00A3z/ask/listProspectoszListar prospectosdatosc                 T   K   t        j                  | j                               }|S wr   )r   list_prospectosr]  r  r   s     r   list_prospectos_endpointr    s&      ))%**,7I s   &(z/ask/updateFoto/{idEmp}idEmpprofile_picture	file_name	file_typec                 B   K   |||d}t        j                  | |      S w)N)r  r  r  )r   
updateFoto)r  r  r  r  r   s        r   update_fotor    s-      +D   --s   z/ask/obtenerCuentasc                    K   	 d| j                   i}t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)N	id_cuentaError al obtener cuentas: r   r  r   )r  r   obtenerCuentasdeServicior   r   r   r
   rH  s      r   obtener_cuentasr    sd     V**
 //55 V21#674TUUVrJ  z/ask/insertarCuentaServicioc                    K   	 | j                   | j                  d}t        j                  |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)tipo_cuentastatus)Error al insertar la cuenta de servicio: r   E   Error al procesar la solicitud de inserción de la cuenta de servicior   )r  r  r   insertarCuentaServicior   r   r   r
   rH  s      r   insertar_cuenta_servicior    si     	}"..nn

 --d33 }A!EF4{||}r  z/ask/insertarContactadosc                    K   	 | j                         }t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nr  r   r  r   )r]  r   insertarContactor   r   r   r
   rH  s      r   insertar_contactor  
  s[     }||~))$// }A!EF4{||}$   A$) A	A%AAAz/ask/newPermissionsc                   K   	 | j                   | j                  | j                  | j                  | j                  d}t        j                  |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr   r   r   id_elementopermisozError al insertar el permiso: r   u8   Error al procesar la solicitud de inserción del permisor   )r   r   r   r  r  r   insertarPermisor   r   r   r
   rH  s      r   insertar_permisor    s     p ** **(("..
 ((.. p6qc:;4nooprs  z"/ask/updateGeneralInformation/{id}c                 .  K   	 |j                   |j                  |j                  |j                  |j                  |j
                  d}t        j                  | |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)nombretipo_doc	documentocorreotelefono	direccionu-   Error al actualizar la información general: r   uH   Error al procesar la solicitud de actualización de información generalr   )r  r  r  r  r  r  r    actualizarGenInfor   r   r   r
   r   rC  r   r   s       r   actualizar_general_informationr  '  s     @nn(( **nn(( **
 #44R>> @EaSIJ4~@)   BAA B	B(%BBBz/ask/insertarCuentadeServicioc                    K   	 | j                   | j                  | j                  d}t        j                  |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)r  datovalorz&Error al insertar cuenta de servicio: r   z=Error al procesar la solicitud de insertar cuenta de servicior   )	r  r  r  r   insertarCuentadeServicior   r   r   r
   rH  s      r   insertar_cuenta_de_servicior  <  sp     u **LL]]
 //55 u>qcBC4sttur  z/ask/newSupportc                 ,  K   	 | j                   | j                  | j                  | j                  | j                  | j
                  d}t        j                  |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)	prioridadmodulovistar  rn  observacionz#Error al enviar el correo de PQRS: r   r  r   )r  r  r  r  rn  r  r!   insertarSoporter   r   r   r
   rH  s      r   enviar_ticket_soporter  M  s     V **nn]]nn".."..
 &&t,, V;A3?@4TUUVs)   BAA B	B'%BBBz/ask/sendEmailSoportec                   K   	 | j                   | j                  | j                  | j                  | j                  d}t        j                  |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)r  r  r  modulo_name
vista_namez&Error al enviar el correo de soporte: r   z?Error al procesar la solicitud para enviar el correo de soporter   )r  r  r  r  r  r"   sendEmailSoporter   r   r   r
   rH  s      r   enviar_correo_soporter  _  s     wnn"..nn"..!,,
 //55 w>qcBC4uvvwrs  z/ask/newUserc                   K   	 | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  d}t        j                  |      S # t        $ r*}t        j                   d|        t#        dd      d }~ww xY ww)N)nombres	apellidosr  r  id_areaid_cargocorreo_corporativocorreo_alternor  r  r  idperfilzError al insertar el empleado: r   9   Error al procesar la solicitud de inserción del empleador   )r  r  r  r  r  r  r  r  r  r  r  r  r   insertarEmpleador   r   r   r
   rH  s      r   insertar_empleador  q  s     q **(( **((")"<"<%44(( **nn((
 ((.. q7s;<4oppqs)   CBB  C 	C)%CCCz"/ask/NuevoRecordatorioFidelizacionc                 B  K   	 | j                   | j                  | j                  | j                  | j                  | j
                  | j                  d}t        j                  |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)id_contacto_unionid_agente_creadorr  descripcion
fecha_horaid_agente_asignadoid_etapaz#Error al insertar el recordatorio: r   r  r   )r  r  r  r  r  r  r  r    insertarRecordatorioFidelizacionr   r   r   r
   rH  s      r   "insertar_recordatorio_fidelizacionr    s     q ")!:!:!(!:!:nn"..!,,")"<"<((	
 99$?? q;A3?@4oppqs)   BA$A) (B)	B2%BBBz/ask/newProfilc                    K   	 | j                   | j                  | j                  d}t        j                  |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nperfilesr  r  zError al insertar el perfil: r   u7   Error al procesar la solicitud de inserción del perfilr   )	r  r  r  r   insertarPerfilr   r   r   r
   rH  s      r   insertar_perfilr    sr     
o(("..nn
 ''-- o5aS9:4mnnor  z/ask/listEncuestados)r   c                 d   K   t        j                  | j                  | j                        }|S w)N)page	page_size)r$   obtener_encuestadosr  pageSizer  s     r   list_encuestados_endpointr    s.      --ZZ..I s   .0z/ask/datosTablaSeleccionadau$   Selección de Tablas contactabilidadc                    K   	 | j                         }t        j                  |       d {   }|S 7 # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY wwNz5Error al obtener los datos de la tabla seleccionada: r   zLError al procesar la solicitud de obtener los datos de la tabla seleccionadar   )r]  r#   datos_tabla_seleccionadar   r   r   r
   r_  s       r   !datos_tabla_seleccionada_endpointr    st     D||~)BB4HH	 I  DMaSQR  5C  D  	DDra  z/ask/notasContactozNotas de Contacto)r   r   c                    K   	 | j                         }t        j                  |      }|S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)NzError al crear las notas: r   z=Error al procesar la solicitud de crear las notas de contactor   )r]  r#   createNotesr   r   r   r
   r_  s       r   notas_contactor    s`     u||~#//5	 u21#674sttu$   A!&+ A!	A%AAA!z /ask/insertarTareaPrimerContactozPrimer Contactoc                    K   	 | j                         }t        j                  |      }|S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz#Error al insertar primer contacto: r   z:Error al procesar la solicitud de insertar primer contactor   )r]  r%   insertar_primer_contactor   r   r   r
   r_  s       r   !insertar_primer_contacto_endpointr    s`     r||~#<<TB	 r;A3?@4pqqrr  z/ask/enviarCorreoPrimerContactoc                    K   	 t        j                  | j                               S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz(Error al enviar correo primer contacto: r   u&   Error al procesar el envío del correor   )r'   send_email_primer_contactor]  r   r   r   r
   rC  r   s     r   enviar_correo_primer_contactor    sV     ^&AA',,.QQ ^@DE4\]]^rJ  z/ask/enviarCorreoContactoc                    K   	 | j                   | j                  | j                  d}t        j                  |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)r  cuerpor  z2Error al enviar el correo al ciudadano prospecto: r   r  r   )	r  r  r  r   	sendEmailr   r   r   r
   rH  s      r   enviar_correo_contactor    sn     l]]nnnn
   && lJ1#NO4jkklr  z/ask/sendEmailContactc                    K   	 | j                   | j                  | j                  d}t        j                  |      }dd|dS # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)	Nr  TzCorreo enviado exitosamenter   r  r   r  r   )	r  r  r  r   r  r   r   r   r
   )rC  r   resultr   s       r   sendEmailContactr"    s     l#00nn$22

 ""4(,ISYZZ l?sCD4jkkls(   A9>A A9	A6%A11A66A9z/ask/newAreac                    K   	 | j                   | j                  d}t        j                  |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Narear     Error al insertar el área: r   6   Error al procesar la solicitud de inserción del árear   )r%  r  r   insertarArear   r   r   r
   rH  s      r   insertar_arear)    si     nLL"..
 &&t,, n4QC894lmmnr  z/ask/newCargosc                    K   	 | j                   | j                  | j                  d}t        j                  |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Ncargor  r   r&  r   r'  r   )	r,  r  r   r   insertarCargor   r   r   r
   rH  s      r   insertar_cargor.    sr     n]]"..nn
 ''--  n4QC894lmmnr  z/ask/verificacionContactadou   verificación Contactadoc                    K   	 | j                         }t        j                  |      }|S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz Error al verficiar el contacto: r   u;   Error al procesar la solicitud de verificación de contactor   )r]  r#   verificacion_persona_contactadar   r   r   r
   r_  s       r   funcr1  -  s`     s||~#CCDI	 s8<=4qrrsr  z/ask/agregarNuevoProspectoz Agregar nuevo contacto prospectoc                    K   	 | j                         }t        j                  |      }|S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz.Error al agregar un nuevo contacto prospecto: r   zEError al procesar la solicitud de agregar un nuevo contacto prospector   )r]  r#   agregar_prospecto_nuevor   r   r   r
   r_  s       r   r1  r1  9  s`     }||~#;;DA	 }FqcJK4{||}r  z/ask/obtener-recordatoriosc                    K   	 t        j                  | j                        S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz Error al obtener recordatorios: r   z7Error al procesar la solicitud de obtener recordatoriosr   )r   "obtener_recordatorios_por_contactor  r   r   r   r
   r  s     r   "obtener_recordatorios_fidelizacionr6  D  sV     o;;G<U<UVV o8<=4mnnos$   A# A	A%AAAz/ask/updateLandingImage/{id}	new_imager  c                 <   K   t        j                  | ||||      S wr   )r   updateLandingImage)r   r7  r  r  r  s        r   r  r  L  s"      ,,RIyRWXXs   z/ask/obtenerAssetsLandingc                  2   K   t        j                         S wr   )r   obtenerAssetsLandingr   r   r   obtener_assets_landingr<  W  s     ..00r   z/ask/obtenerUrlFirmadazURLs Firmadasc                 >  K   	 t        j                  | j                         d{   }|d   st        d|d         t	        d|d   d   	      S 7 ,# t        $ r  t
        $ r3}t        j                  d
t        |              t        dd      d}~ww xY ww)u   
    Obtiene una URL firmada para un archivo específico en S3.
    
    Args:
        request: Contiene el s3_key del archivo
    
    Returns:
        URL firmada con tiempo de expiración
    Nr   r   r   r   Tr   
signed_url)r   url_firmadazError al obtener URL firmada: r   z$Error interno al generar URL firmada)	r)   obtener_url_firmadas3_keyr
   r\   r   r   r   r  rC  r   r   s      r   obtener_url_firmada_endpointrC  ^  s     \*>>w~~NN	#C	)8LMM(!&),7
 	
 O   \6s1vh?@4Z[[\s8   B"A A+A BA B'.BBBz/ask/obtenerPropuestasCrmzPropuestas CRMc           	      n  K   	 t        j                  | j                  | j                         d{   }|d   st	        d|d         t        d|d   |d   |d   |d	   |d
         S 7 9# t        $ r  t        $ r3}t        j                  dt        |              t	        dd      d}~ww xY ww)u   
    Obtiene las propuestas con sus archivos adjuntos de S3, paginadas.
    
    Args:
        request: Contiene page y pageSize para la paginación
    
    Returns:
        Lista paginada de propuestas con sus archivos adjuntos
    Nr   r   r   r   Tr   totalRecords
totalPagescurrentPage)r   r   r   rE  rF  rG  z!Error al obtener propuestas CRM: r   z#Error interno al obtener propuestas)
r)   obtener_propuestas_con_archivosr  r  r
   r_   r   r   r   r  rB  s      r   obtener_propuestas_crm_endpointrI  {  s     [*JJ7<<Y`YiYijj	#C	)8LMM+i(6"">2 .!-0
 	
 k   [9#a&BC4YZZ[s8   B5-A- A+8A- *B5+A- -B2?.B--B22B5z:/ask/procesamientoExcel/prospectos/paso1/validacionFormatoexcelc                   K   	 t        j                  |        d {   }|j                  dd      st        d|j                  dd            t	        d|j                  dd      |j                  d	      
      S 7 `# t        $ r  t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr   Fr   r   u   Error en validación de formator   Tr   r   r   zError en paso 1: r   r   )r#   1procesamiento_principal_paso_1_validacion_formator   r
   ra   r   r   r   rJ  r   r   s      r   endpoint_paso_1rN    s     	E)[[\abb	}}Y.C	iQr8stt$T9==TV;W^g^k^klp^qrr c   E)!-.ODDE9   B>A? A=AA? <B>=A? ?B;%B66B;;B>z=/ask/procesamientoExcel/prospectos/paso2/obtenerColumnasExcel)embedc                   K   	 t        j                  |        d {   }|j                  dd      st        d|j                  dd            t	        d|j                  dd      |j                  d	      
      S 7 `# t        $ r  t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr   Fr   r   zError al obtener columnasr   Tr   r   r   zError en paso 2: r   r   )r#   5procesamiento_principal_paso_2_obtener_columnas_excelr   r
   ra   r   r   r   rM  s      r   endpoint_paso_2rS    s     	E)__`eff	}}Y.C	iQl8mnn$T9==TV;W^g^k^klr^stt g   E)!-.ODDErO  z9/ask/procesamientoExcel/prospectos/paso5/validacionOpenAIc                 b  K   	 t        j                  |        d {   }|j                  dd      st        ddi       S t        d|j                  dd      |j                  d            S 7 Q# t        $ r  t
        $ r*}t        j                  d	|        t	        d
d      d }~ww xY ww)Nr   Fu0   El excel no pasó la validación correspondienter   Tr   r   r   zError en paso 5: r   r   r   )r#   0procesamiento_principal_paso_5_validacion_openair   ra   r
   r   r   r   rM  s      r   endpoint_paso_5rV    s     E)ZZ[`aa	}}Y.(J 
 %MM)R0v&
 	
 b   E)!-.ODDEsD   B/A0 A.#A0  B/,A0 -B/.A0 0B,%B''B,,B/z6/ask/procesamientoExcel/prospectos/paso6/procesarExcelmapeo_columnasc                   K   	 	 t        j                  |      }t	        j
                  | |       d {   }|j                  dd      st        d|j                  dd            t        d|j                  dd	      |j                  d
            S # t         j                  $ r t        dd      w xY w7 # t        $ r  t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr   u$   mapeo_columnas no es un JSON válidor   r   Fr   zError al procesar ExcelTr   r   r   zError en paso 6: r   r   )jsonloadsJSONDecodeErrorr
   r#   Hprocesamiento_principal_paso_6_procesar_excel_y_guardar_en_base_de_datosr   ra   r   r   r   )rJ  rW  
mapeo_dictr   r   s        r   endpoint_paso_6r^    s    E	`)-N)CJ *rr:
 
	 }}Y. }}Y0IJ 
 %MM)R0v&
 	
 ## 	`C8^__	`
    E)!-.ODDEsD   C9B B: B8AB: C9!B55B: :C6%C11C66C9z%/ask/marketing_datosTablaSeleccionadau   Selección de Tablas marketingc                    K   	 | j                         }t        j                  |       d {   }|S 7 # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY wwr  )r]  r(   r  r   r   r   r
   r_  s       r   r  r    st     D||~#<<TBB	 C  DMaSQR  5C  D  	DDra  z/ask/busquedaDinamicaCamposu   Selección de Tablas Marketingc                    K   	 | j                         }t        j                  |      }|S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz1Error al obtener los datos de la tabla filtrada: r   zHError al procesar la solicitud de obtener los datos de la tabla filtradar   )r]  r(   !filtrado_dinamico_busqueda_camposr   r   r   r
   r_  s       r   r  r    sb     	@||~??E	  @I!MN4~@r  z/ask/insertarEncuestac                    K   	 | j                         }t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)NzError al insertar encuesta: r   z3Error al procesar la solicitud de insertar encuestar   )r]  r$   insertar_encuestar   r   r   r
   rH  s      r   rc  rc  )  s[     k||~**400 k4QC894ijjkr  z/ask/insertarPreguntac                    K   	 | j                         }t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz(Error al insertar pregunta en encuesta: r   z?Error al procesar la solicitud de insertar pregunta en encuestar   )r]  r$   insertar_preguntar   r   r   r
   rH  s      r   insertar_pregunta_encuestarf  6  s[     w||~**400 w@DE4uvvwr  z/ask/insertarRespuestac                    K   	 | j                         }t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz)Error al insertar respuesta en encuesta: r   z@Error al procesar la solicitud de insertar respuesta en encuestar   )r]  r$   insertar_respuestar   r   r   r
   rH  s      r   insertar_respuesta_preguntari  C  s[     x||~++D11 xA!EF4vwwxr  z/ask/assistantsc                    K   	 d| j                   i}t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)N
id_empresar  r   r  r   )rk  r   asistentessr   r   r   r
   rH  s      r   get_assistantsrm  P  sd     	l',,
   && l5aS9:4jkklrJ  z/ask/enviarTiempoSesionModalc                    K   	 | j                         }t        j                  |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nu(   Error al insertar el tiempo de sesión: r   uB   Error al procesar la solicitud de inserción del tiempo de sesiónr   )r]  r   insertarTiempoSesionr   r   r   r
   rH  s      r   insertar_tiempo_sesionrp  _  s[     z||~--d33 z@DE4xyyzr  z/ask/completeUsersDatac                  2   K   t        j                         S wr   )r   list_complete_user_datar   r   r   get_complete_users_datars  k  s     ++--r   z%/ask/inserUserAssignedContactedPersonz&Asignaciones de Usuarios a Contactadosc                    K   	 | j                         }t        j                  |      }|S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nu+   Error al insertar asignación de contacto: r   uG   Error al procesar la solicitud de inserción de asignación de contactor   )r]  r   %insert_user_assigned_contacted_personr   r   r   r
   r_  s       r   insert_user_contact_assignmentrv  q  s`     ||~CCDI	 CA3GH4}~~r  z/ask/getEmailTemplateu!   Obtención de Plantillas de Emailtemplate_categoryc                    K   	 t        j                  |       }|S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nz(Error al obtener la plantilla de email: r   uB   Error al procesar la solicitud de obtención de plantilla de emailr   )r   get_email_template_by_categoryr   r   r   r
   )rw  r   r   s      r   get_email_templaterz  ~  sV     z::;LM	 z@DE4xyyzr   z/ask/getTextsLandingc                     K   	 t        j                         S # t        $ r*} t        j                  d|         t        dd      d } ~ ww xY ww)Nr  r   r  r   )r   get_texts_landingr   r   r   r
   r   s    r   obtener_texto_landingr}    sN     V//11 V21#674TUUVr  z/ask/updatemyprofil/{id}c                   K   	 |j                   |j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  d}t        j                  | |      S # t        $ r*}t        j                  d|        t!        dd      d }~ww xY ww)N)r  r  r  r  r  r  r  r  r  r  r  Error al actualizar el perfil: r   z8Error al procesar la solicitud para actualizar el perfilr   )r  r  r  r  r  r  r  r  r  r  r  r   actualizarMyPerfilr   r   r   r
   r  s       r   actualizar_my_perfilr    s     p **(( **")"<"<%44(( **((nn
 ,,R66 p7s;<4noops)   CBB C	C	%CC		Cz/ask/updateNews/{id}c	           	         K   	 ||||||||d}	t        j                  | |	      S # t        $ r6}
t        j                  d|
        t        ddt        |
             d }
~
ww xY wwN)ru  rv  rw  ry  rz  r{  rx  r|  z Error al actualizar la noticia: r   z Error al procesar la solicitud: r   r&   actualizar_noticiar   r   r   r
   r  r   ru  rv  rw  ry  rz  r{  rx  r|  r   r   s              r   actualizar_mi_noticiar         a #*&&"	
 **2t44 a8<=6VWZ[\W]V^4_``a$   A' % A'	A$1AA$$A'z/ask/changepassword/{idUser}idUserc                    K   	 d|j                   i}t        j                  | |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)NnewPasswordu$   Error al actualizar la contraseña: r   u=   Error al procesar la solicitud para actualizar la contraseñar   )r  r      actualizarContraseñar   r   r   r
   )r  rC  r   r   s       r      actualizar_contraseñar    sf     
u7..

 //== u<QC@A4sttus$   A#( A	A%AAAz/ask/actualizarPermiso/{id}c                   K   	 |j                   |j                  |j                  |j                  |j                  d}t        j                  | |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr  Error al actualizar: r   r  r   )r   r   r   r  r  r   actualizarPermisor   r   r   r
   r  s       r   actualizar_permisor    s     V ** **(("..
 **2t44 V-aS124TUUVs)   B
AA B
	B%BBB
z/ask/updateEmployee/{id}c                   K   	 |j                   |j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  d}t        j                  | |      S # t        $ r*}t!        j"                  d|        t%        dd      d }~ww xY ww)N)r  r  r  r  r  r  r  r  r  r  r  r  	nomstatusr  r   r  r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r   actualizarEmpleador   r   r   r
   r  s       r   actualizar_empleador    s     V **(( **")"<"<%44(( **((((nn **
 **2t44 V7s;<4TUUVs)   C"B'B, +C",	C5%CCC"z/ask/actualizarCuentaServicioc                    K   	 | j                   | j                  | j                  d}t        j                  |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)r   r  r  r  r   r  r   )	r   r  r  r   actualizarCuentaServicior   r   r   r
   rH  s      r   actualizar_cuenta_servicior    sp     	V**"..nn

 //55 V-aS124TUUVr  z/ask/actualizarCuentadeServicioc                    K   	 | j                   | j                  | j                  d}t        j                  |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)r   r  r  r  r   r  r   )	r   r  r  r   actualizarCuentadeServicior   r   r   r
   rH  s      r   actualizar_cuenta_de_servicior    sn     	V**LL]]

 11$77 V-aS124TUUVr  z/ask/actualizarMesaAyudac                   K   	 | j                   | j                  | j                  | j                  | j                  d}t        j                  |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)
id_reporte	respuestarn  r  fecha_respuestaz&Error al actualizar la mesa de ayuda: r   z?Error al procesar la solicitud para actualizar la mesa de ayudar   )r  r  rn  r  r  r   actualizarMesaAyudar   r   r   r
   rH  s      r   actualizar_mesa_ayudar  ,  s     w!,, **"..nn&66
 ,,T22 w>qcBC4uvvwrs  z/ask/updateProfil/{id}c                    K   	 |j                   |j                  |j                  d}t        j                  | |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr  r  r   r  r   )	r  r  r  r   actualizarPerfilr   r   r   r
   r  s       r   actualizar_perfilr  >  st     	V(("..nn

 ))"d33 V-aS124TUUV%   A49> A4	A1%A,,A11A4z/ask/actualizar_voluntario/{id}c                 4  K   	 |j                   }|dvrt        dd      i 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$                  |j&                  |j                  |j                  |j                  |j                  |j                  |j(                  |j*                  |j,                  d	|j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j.                  |j0                  |j                  |j2                  |j                  |j4                  di d|j                  d|j
                  d|j                  d|j                  d	|j                  d
|j                  d|j                  d|j                  d|j                  d|j.                  d|j0                  d|j                  d|j2                  d|j                  d|j4                  d|j                  d|j                  |j                  |j                   |j"                  |j$                  |j*                  |j,                  dd}|j7                  |i       }||d<   |st        dd      t9        j:                  | |      S # t<        $ r*}t?        j@                  d |        t        d!d"      d }~ww xY ww)#N)inscripciones_voluntariosunion_voluntarios_antiguosbase_datos_10kregistros_crm_antiguoprospectos_manualr   u-   Tabla no válida especificada en la solicitudr   tipo_documentor  r  r  correosr  paisdepartamentociudadr  generorecomendadonombre_recomendadorgrupo_wp	grupo_wp1como_ayudarpasion)	fecha_registror  r  r  r  r  nombres_completos	interesesautorizacion)r  r  r  r  r  r  r  r  	localidadbarrior  fecha_cumpleanosr  tipo_sangrer  r  r  r  )r  r  r  r  r  r  )r  r  r  r  nombre_tablaz/Datos no encontrados para la tabla especificadar  r   r  )!r  r
   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#   actualizar_voluntario_dbr   r   r   )r   rC  r  tablas_mappingr   r   s         r   actualizar_voluntarior  M  s    fV++   
 
  C8ghh* '"8"8*W..* 7??* W..	*
 7??* G,,* *  4 4* '..* W..* '..* w22* &w'B'B* G,,* W..*  w22!*" '..#*( #*"8"8!.."?? ' 4 4$..#,,%,%>%>$.. ' 4 4
 #??$.."??#,,")"8"8$.. ' 4 4!..$..!..$..$+$<$<!..&22& "7??"W.." !'"8"8" W..	"
 7??" G,," "  4 4" '.." W.." '.." W.." #G$<$<" '.." w22"  w22!"" &w'B'B#"$ $,,$..&22!..$.. ' 4 4/"_H
V !!,3+^ C8ijj 77DAA V-aS124TUUVs)   NMM" !N"	N+%NNNz/ask/actualizar_contacto/{id}c                   K   	 i 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                   |j"                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |j0                  |j2                  |j4                  |j6                  |j8                  d}t;        j<                  | |      }|j?                  d      stA        d|j?                  dd            |S # t@        $ r}|d }~wtB        $ r3}tE        jF                  d|        tA        dtI        |            d }~ww xY ww)Nr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )estado_etapar  r  r  r  r  origen_datosr  nombre_embajadortiempo_primer_contactor  fecha_registro_contactor   r   r   zError al actualizar el contactor   r  )%r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   actualizar_contactor   r
   r   r   r   r  )r   rC  r   r   r   s        r   r  r    s&    *<
g44
g44
 **
 w	

 **
 w
 ((
 GLL
 G00
 gnn
 **
 gnn
 7..
 "7#>#>
 ((
  **!
" gnn#
$ $00 **nn ' 8 8"..#00#00".. ' 8 8&-&D&D **'.'F'F;
> 11"d;	}}Y'C	iQr8stt  <-aS12CF;;<s5   G=F+F0 /G=0	G:9F;;G:.G55G::G=z/ask/updateArea/{id}c                    K   	 |j                   |j                  d}t        j                  | |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr$  r  r   r  r   )r%  r  r   actualizarArear   r   r   r
   r  s       r   actualizar_arear    sk     
VLL"..

 ((T22 V-aS124TUUVs$   A).3 A)	A&%A!!A&&A)z/ask/updateCargos/{id}c                    K   	 |j                   |j                  |j                  d}t        j                  | |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nr+  r  r   r  r   )	r,  r  r   r   actualizarCargor   r   r   r
   r  s       r   actualizar_cargosr    st     V]]"..nn
 ))"d33  V-aS124TUUVr  z/ask/actualizarEstadoEtapazActualizar Estado Etapac                    K   	 | j                         }t        j                  |      }|S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz2Error al actualizar el estado etapa del contacto: r   uN   Error al procesar la solicitud de actualización del estado etapa del contactor   )r]  r#   "actualizar_estado_etapa_verificador   r   r   r
   r_  s       r   r1  r1    si     F||~#FFtL	 FJ1#NO  5E  F  	FFr  z/ask/updatenews/{id}c	           	         K   	 ||||||||d}	t        j                  | |	      S # t        $ r6}
t        j                  d|
        t        ddt        |
             d }
~
ww xY wwr  r  r  s              r   r  r    r  r  z!/ask/actualizar_estado_etapa/{id}c                 \  K   	 t        j                  | |j                  |j                        }|j	                  d      st        d|j	                  dd            |S # t
        $ r}|d }~wt        $ r3}t        j                  d|        t        dt        |            d }~ww xY ww)Nr   r   r   zError al actualizar el estador   z+Error en endpoint actualizar_estado_etapa: )
r    actualizar_estado_etapa_contactor  
id_usuarior   r
   r   r   r   r  )r   rC  r   r   s       r   actualizar_estado_etapar  :  s     <>>r7CWCWY`YkYkl	}}Y' }}Y0OP 
   <CA3GHCF;;<s5   B,AA B,	B)(A**B)6.B$$B))B,z/ask/updateAssistant/{id}c                 .  K   	 |j                   |j                  |j                  |j                  |j                  |j
                  d}t        j                  | |      S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)	idempresar  r  imgurlr   empresar  r   r  r   )r  r  r  r  r   r  r*   updateAssistantr   r   r   r
   r  s       r   r  r  O  s     V **nn"..nn::
 %%b$// V-aS124TUUVr  z /ask/actualizarEncuesta/{id_enc}c                    K   	 |j                         }t        j                  | |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)NzError al actualizar encuesta: r   z5Error al procesar la solicitud de actualizar encuestar   )r]  r$   actualizar_encuestasr   r   r   r
   )r#  rC  r   r   s       r   actualizar_encuestar  c  s]     m||~--fd;; m6qc:;4kllm$   A %* A 	A%AAA z$/ask/actualizarPregunta/{id_enc_det}c                    K   	 |j                         }t        j                  | |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz*Error al actualizar pregunta en encuesta: r   zAError al procesar la solicitud de actualizar pregunta en encuestar   )r]  r$   actualizar_preguntar   r   r   r
   )r(  rC  r   r   s       r   actualizar_pregunta_encuestar  n  s]     y||~,,Z>> yB1#FG4wxxyr  z*/ask/actualizarRespuesta/{id_enc_res_preg}id_enc_res_pregc                    K   	 |j                         }t        j                  | |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nz+Error al actualizar respuesta en encuesta: r   zBError al procesar la solicitud de actualizar respuesta en encuestar   )r]  r$   actualizar_respuestar   r   r   r
   )r  rC  r   r   s       r   actualizar_respuesta_preguntar  y  s]     z||~--otDD zCA3GH4xyyzr  z /ask/desactivarEncuestasVencidasc                     K   	 t        j                         S # t        $ r*} t        j                  d|         t        dd      d} ~ ww xY ww)uW   
    Endpoint para desactivar automáticamente todas las encuestas que han vencido
    z(Error al desactivar encuestas vencidas: r   z?Error al procesar la solicitud de desactivar encuestas vencidasr   N)r$   desactivar_encuestas_vencidasr   r   r   r
   r   s    r   r  r    sN     
w6688 w@DE4uvvwr  z&/ask/verificarEncuestaVencida/{id_enc}c                    K   	 t        j                  |       S # t        $ r*}t        j                  d|        t        dd      d}~ww xY ww)ug   
    Endpoint para verificar si una encuesta específica ha vencido y desactivarla si es necesario
    z%Error al verificar encuesta vencida: r   z<Error al procesar la solicitud de verificar encuesta vencidar   N)r$   *verificar_y_desactivar_encuesta_especificar   r   r   r
   r&  s     r   verificar_encuesta_vencidar    sP     
tCCFKK t=aSAB4rsstr   z/ask/updateparam/{id}c                    K   	 |j                         }t        j                  | |      S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nu%   Error al actualizar los parámetros: r   u>   Error al procesar la solicitud para actualizar los parámetrosr   )r]  r*   updateParamsr   r   r   r
   r  s       r   update_paramr    s]     v||~""2t,, v=aSAB4tuuvr  z&/ask/updateEmailTemplate/{template_id}template_idc                    K   	 t        j                  | |j                  |j                  |j                        S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)r  rw  email_subject
email_bodyz)Error al actualizar plantilla de correo: r   uI   Error al procesar la solicitud de actualización de plantilla de correor   )	r   update_email_template_by_idrw  r  r  r   r   r   r
   )r  rC  r   s      r   actualizar_plantilla_correor    sx     
A22#%77!//))	
 	
  AA!EF4  A  	AAs%   A16; A1	A.%A))A..A1z/ask/updateLandingTextsc                    K   	 | j                   | j                  | j                  d}t        j                  |      S # t
        $ r*}t        j                  d|        t        dd      d }~ww xY ww)N)r   rw  r  r  r   uE   Error al procesar la solicitud de actualización de textos de landingr   )	r   rw  r  r   update_Landing_Textsr   r   r   r
   rH  s      r   update_landing_textsr    sn     
}**nnnn

 22488 }-aS124{||}r  z6/ask/updateUserAssignedContactedPerson/{assignment_id}assignment_idc                    K   	 |j                         }| |d<   t        j                  |      }|S # t        $ r*}t	        j
                  d|        t        dd      d }~ww xY ww)Nr  u-   Error al actualizar asignación de contacto: r   uK   Error al procesar la solicitud de actualización de asignación de contactor   )r]  r   %update_user_assigned_contacted_personr   r   r   r
   )r  rC  r   r   r   s        r   update_user_contact_assignmentr    ss     C||~ -_CCDI	 CEaSIJ  5B  C  	CCs$   A&+0 A&	A#%AA##A&z/ask/deletePermissions/{id}c                 4   K   t        j                  |       S wr   )r   eliminarPermisor   s    r   eliminar_permisor    s     $$R((r   z/ask/eliminarNoticiasCrm/{id}c                 4   K   t        j                  |       S wr   )r&   eliminarNoticiar   s    r   eliminar_noticiar    s     ##B''r   z/ask/deleteProfil/{id}c                 4   K   t        j                  |       S wr   )r   eliminarPerfilr   s    r   eliminar_perfilr    s     ##B''r   z"/ask/eliminarPregunta/{id_enc_det}c                    K   	 t        j                  |       S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nz(Error al eliminar pregunta de encuesta: r   z3Error al procesar la solicitud de eliminar preguntar   )r$   eliminar_preguntar   r   r   r
   r+  s     r   eliminar_pregunta_encuestar
    sP     k**:66 k@DE4ijjkr   z(/ask/eliminarRespuesta/{id_enc_res_preg}c                    K   	 t        j                  |       S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nz)Error al eliminar respuesta de encuesta: r   z4Error al procesar la solicitud de eliminar respuestar   )r$   eliminar_respuestar   r   r   r
   )r  r   s     r   eliminar_respuesta_preguntar    sP     l++O<< lA!EF4jkklr   z/ask/deletearea/{id}c                 4   K   t        j                  |       S wr   )r   eliminarArear   s    r   eliminar_arear    s     ""2&&r   z/ask/deleteCargos/{id}c                 4   K   t        j                  |       S wr   )r   eliminarCargosr   s    r   eliminar_cargosr    s     $$R((r   z/ask/deleteForeverContact/{id}c                    K   	 t        j                  |       S # t        $ r*}t        j                  d|        t        dd      d }~ww xY ww)Nz/Error al eliminar el contacto permanentemente: r   uF   Error al procesar la solicitud de eliminación permanente del contactor   )r   delete_contactr   r   r   r
   r   s     r   r  r    sP     ~''++ ~GsKL4|}}~r   __main__z0.0.0.0i  )hostport)r8  (  rY  configuracionesr   r[  env_pathfastapir   r   r   r   r   r	   r
   r   r   r   r   r   r   typingr   r   fastapi.middleware.corsr   fastapi.responsesr   r   requestsr   r   administracionr   r   r   r   r   r   r   r   personasr   r    r!   r"   procesosr#   r$   r%   r&   r'   r(   r)   	asistenter*   r+   r,   	dashboardr-   r.   clasesr/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   appadd_middlewarebasicConfigINFOr   r   intr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r  r  r	  r  r  r  r  r  r  r"  r'  r.  r1  r6  r9  r<  r?  rB  postrI  rM  rP  rS  rV  rY  r`  rc  rf  rj  rr  r]  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r)  r.  r1  r6  r<  rC  rI  rN  rS  rV  r^  rc  rf  ri  rm  rp  rs  rv  rz  r}  putr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  deleter  r  r  r
  r  r  r  r  __name__uvicornrunr   r   r   <module>r1     sG    % '9&&( T  T  T  T ! 2 *     " % $ " # $ % )  /  # $  $  ,  %       )
 u  u  u  u  u  u  u  u  u  u  u  u  u  u  u  u  u  u  u  u  u
 D    %%%  ,   ',, ' G	 ( !(
 	-.2 2 /2
 	237c 7 47
 	45; ; 6;
 	-.2 2 /2
 	 ' !'
 	 !( "(
 	+,0c 0 -0
 	 ' !'
 	./53 5 05
 	' '
 	+,2 -2
 	-.0 0 /0
 	   
 	%&( ( '(
 	'(*S * )*
 	 !, ", 	/05 15 	!"2 #2 	+,ys y -y 	- - 	'(2# 2 )2 	34J# J 5J C(01BT8UV
,	-	 	 
E
E A(01BT8UV
,	-	 	 
E
E 	45x3 x 6x 	t t 	"#m $m 	'(V )V 	#$V %V 	45< 6<
 	018 28
 	)*1 +1
 	,-4 .4
 	-.5 /5
 	123 33
 	$%3 &3 	+,l l -l 	/0ns n 1n 	./2 02 	459 69 	;<: : =: 	236 46 	23: 4: 	:;< <<
 	#  # 
	L/K 	L  	L 	45C 6C 	12@ 3@ 	 9 !9
 	#  # 	i i H
!") #) 
$7#89k); k :k 
'($ )$
 ,$ $ 
#$5:4Mj5k /Xc] / %/
 
 !s$7 s "s 
$TcGUY?E[c|b}~#Ycs)S	CyCy#Ys)YYY Y 	Y
 Y Y Y Y YF 
%&- '-
 ,
_| 
_ 
_ -	l#8 	l 	l 
9l- 9l 9lx:p~ 
#$l*F l %l  
0FSVY`bxXyRz  CV  BW  X*?  X 
#$ #'s)#Y#Y	... . 	. %." 
 	V= 	V !	V 
'(
},F 
} )
} 
$%}%9 } &} 
 p$7 p !p  
./@S @;^ @ 0@( 
)*u/D u +u  
V); V V" 
!"w)C w #w" .q%9 q q0 
./q6I q 0q( 
o#5 o o 
 1HI+A  J 
'/U.VWD5M D XD 
/BJ]I^_u"4 u `u 
,TcT[]aSbMck|j}~r5J r r 
+,^1D ^ -^ 
%&l*E l 'l" 
!"l$; l #l .n!1 n n" 
n"3 n n$ 
'wX\oH^  gA  fB  Cs5 s Cs 
&tgW[_G]  fH  eI  J}4 } J} 
&'o6Q o (o 
() !I#Y#YcYYY Y 	Y
 Y *Y 
%&1 '1 ^
"3L_fh~^  HO  Qg  Gh  Yi  q@  pA  B\0H \ B\8 
%6Rel  oH  eI  QX  Zs  Pt  _u  }M  |N  O[3N [ O[F @(01BT8UV
,	-	 
  /33i 
E 
E
E C(01BT8UV
,	-	 
  (,Ct'< 
E 
E
E ?(01BT8UV
,	-	 
  (,Ct'< E EE. <(01BT8UV
,	-	 
  c&s)EEEEF 
19Y8Z[D5M D \D 
'8Q^adk  nG  dH  ^I  Qq  Pr  s
@5V 
@ s
@ 
!"k%9 k #k 
!"w.B w #w 
"#x/D x $x 

l": 
l 
l 
()z*= z *z 
"#. $.
 
1B_lory  |Y  rZ  l[  cK  bL  M	2N 	 M	 
!2JWZ]df~\  WA  Il  Hm  n6:3d6K z z nz 
 !V "V G	#$p3 p1H p %p0 	  #Ycs)CyCy#YS	$(Jaaa a 	a
 a a a a j!a !a> 	'(u u7S u )u 	&'V V/G V (V$ 	#$V# V0I V %V0 	()
V.M 
V *
V 	*+
V1R 
V ,
V 	#$w)C w %w" 	!"
V 
V.M 
V #
V 	*+gVC gV2I gV ,gVT 	(),<# ,< ,< *,<` 	 Vc V,A V !V 	!"V V.D V #V" 	%dsWVZOF\d}c~F4 F @F 	  #Ycs)CyCy#YS	$(Jaaa a 	a
 a a a a j!a !aB 	,-<c <4I < .<( 	$%V V/G V &V& 	+,mc m4M m -m 	/0y3 yAZ y 1y 	56z zGa z 7z 	+,w -w 	12tS t 3t 	 !v3 v)9 v "v 	12A3 AAa A 3A 	"#}(A } $} 	ARo|  CJ  Li  Bj  |k  s[  r\  ]	C 	CFb 	C ]	C J)*)s ) +) +,(s ( -( $%(c ( &( 01k k 2k 67ls l 8l "#'C ' $'
 $%)c ) &)
 ,-~S ~ .~ z GKK)$/	 r   