
    x h?                        S SK r S SKJrJrJr  SSKJr  S SKrS SKJ	r	  S SK
Jr  S SKJr  SrS	rS
 rS rS SKJrJr  S SKJr  SSKJr  S SK
Jr  S SKJrJr  S SKJr  S SK
Jr  S SKJr  \S 5       rS SK
Jr  S SKJr  S SKJr  \S 5       rS SK
Jr  S SKJrJr  SSKJr  \S 5       rS SK
Jr  S SKJrJr  SSKJr  \S 5       rS SKJr  S rS SKJr  S SKJ r   S SK!J"r"  S SKJr  S SKJ r   S SK!J"r"  S SKJr  S SKJ r   S SK#J$r$  S SK!J"r"  \S 5       r\S 5       r%S SK&J'r'  S SK(J)r)  S S K*J+r+  S SK
Jr  S SKJr  SS!K,J-r-J.r.J/r/J0r0  SS"K1J2r2  S# r3S SK4r4S SK5r5S SK&J'r'  S SK(J)r)  S SKJr  S S K*J+r+  S SK
Jr  S SK6r6\'\)\S$ 5       5       5       r7S SK&J'r'  S S%K*J+r+J8r8J9r9  S S&K:J;r;  S SK5r5S SK4r4S SK<r<S SK=r=S S'K>J?r?  \?" \;R                  S(9rA\'S) 5       rBS SKJr  \S* 5       rCg)+    N)renderredirectget_object_or_404   )Projeto)quote)
connection)login_required 3d8dccff4c994354a239d91df4427437z'https://api.open-meteo.com/v1/elevationc                 n    [        U  S35      nSU S[         3n[        R                  " SU 35        [        R
                  " U5      nUR                  S:X  aw  UR                  5       nSU;   aF  [        US   5      S:  a4  US   S   S   S	   n[        R                  " S
U  SU 35        US   US   4$ [        R                  " SU  35         g[        R                  " SUR                   SUR                   35         g! [         a&  n[        R                  " SU  SU 35         S nAgS nAff = f)Nz, Brasilz0https://api.geoapify.com/v1/geocode/search?text=z&apiKey=zURL enviada para Geoapify:    featuresr   geometrycoordinateszCoordenadas obtidas para z: r   u2   Não foram encontradas coordenadas para a cidade: u2   Erro ao acessar a API Geoapify: Código de status . Resposta: zErro ao obter coordenadas para )NN)r   GEOAPIFY_API_KEYlogginginforequestsgetstatus_codejsonlenerrortext	Exception	exception)cidadecidade_formatadaurlresponsedatacoordenadases          //var/www/html/cagpublico_m/cag/projeto/views.pyobter_coordenadasr&      s\   K F88!45 AAQ@RRZ[kZlm23%89 <<$ 3&==?D T!c$z*:&;a&?":.q1*=mL8;-PQ"1~{1~55 RSYRZ[\  MMNxOcOcNddpqyq~q~p  A  B
   K;F82aSIJJKs$   B4D 7D 0D 
D4D//D4c           	          [          SU  SU 3n[        R                  " U5      nUR                  S:X  aS  UR	                  5       nSU;   a%  [        US   [        5      (       a  US   S   $ US   $ [        R                  " S5         g[        R                  " SUR                   SUR                   35         g! [         a)  n[        R                  " S	U  S
U SU 35         SnAgSnAff = f)z^
Usa a API Open-Meteo para obter a altitude com base nas coordenadas de latitude e longitude.
z
?latitude=z&longitude=r   	elevationr   u2   Não foi possível obter a elevação da resposta.u4   Erro ao acessar a API Open-Meteo: Código de status r   z,Erro ao obter altitude para as coordenadas (z, z): N)OPEN_METEO_API_URLr   r   r   r   
isinstancelistr   r   r   r   r   )latitude	longituder    r!   r"   r$   s         r%   obter_altituder.   2   s   h#$JxjI;O<<$ 3&==?Dd"/9${:KT/R/RtK(+iX\]hXiiRS  MMPQYQeQePffrs{  tA  tA  sB  C  D
   hH
RTU^T__bcdbefgghs*   A)B; ,B; 1B; 	0B; ;
C.C))C.)r   r   )messagesc                    U R                   S:X  a  U R                  S   nU R                  S   n[        U5      u  p4Ub  Uc  [        U SSS05      $ [	        X45      nU R
                  R                  R                  n[        R                  " U5        [        R                  R                  UUUUUS9n[        S5      $ [        U S	5      $ )
NPOSTnome_projetor   zprojeto/erro.htmlerrou2   Não foi possível obter as coordenadas da cidade.)r2   r   r,   r-   altitudelista_projetoszprojeto/cadastrar_projeto.html)methodr1   r&   r   r.   usertenantschema_namer	   
set_schemar   objectscreater   )requestr2   r   r,   r-   r4   tenant_schemaprojetos           r%   cadastrar_projetor@   T   s    ~~||N3h' 07 y0'#6Au8vww "(6  ++77m, //((% ) 
 ())';<<    )schema_context)Informativoc                    [        U R                  S5      (       aO  U R                  R                  (       a4  [        R                  " U R                  R                  R
                  5        [        R                  R                  5       n[        SU5        [        S5         [        [        R                  R                  S5      S S 5      nS S S 5        [        SW5        [        R                  R                  [         R"                  " 5       S9n/ nU H  n[$        R&                  " SUR(                   35      nU(       d  M/  U[         R"                  " 5       R+                  5       S	-
  :  d  M[  UR-                  5       R'                  S
5      nU(       d  M  [/        5       n UR                  R'                  US9n	XR                  :w  aE  U	R                  U R                  R                  :X  a  UR1                  SU	R2                  05        M  M  M     [7        U SUUUS.5      $ ! , (       d  f       GN_= f! UR4                   a     GM6  f = f)Nr8   u   ▶️ Debug projetos:public-data_programada   u   ▶️ Debug informativos:expire_date__gteuser_activity_,  _auth_user_ididusernameprojeto/lista_projetos.html)projetosinformativoscurrently_online)hasattrr7   r8   r	   r:   r9   r   r;   allprintrB   r+   rC   order_bySessionfiltertimezonenowcacher   session_key	timestampget_decodedget_user_modelappendrO   DoesNotExistr   )
r=   rQ   rR   active_sessionsrS   sessionlast_activityuidUserr7   s
             r%   r5   r5   {   s    w||X&&7<<+>+>gll11==>""$H 

"H- 
	!K//889KLRaPQ 
"	
&5 oo,,hlln,MO"		N73F3F2G"HI=]X\\^-E-E-G#-MM%%'++O<Cs%'<<++s+3D||+w||?R?R0R(//T]]0KL 1S+ # '8$,;  + 
"	!" (( s    ,H$"A)H6$
H36I
I)r   r   c                 (   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9nUR                  5         [        S5      $ )NrM   r5   )
r7   is_authenticatedr8   r	   r:   r9   r   r   deleter   r=   
projeto_idr?   s      r%   deletar_projetorm      sc     ||$$)<)<gll11==>  J7G NN $%%rA   )r   r   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9n[        U SSU05      $ )NrM   zprojeto/detalhes_projeto.htmlr?   )	r7   ri   r8   r	   r:   r9   r   r   r   rk   s      r%   detalhes_projetoro      s`     ||$$)<)<gll11==>  J7G ':Y<PQQrA   r   c                     [        U S5      $ )Nzprojeto/sobre_este_app.htmlrp   r=   s    r%   sobre_este_apprs      s    '899rA   )rX   )rZ   )r`   )r\   c                    U R                   R                  (       a4  [        R                  " U R                   R                  R                  5        [
        R                  R                  [        R                  " 5       S9n/ nU GH  n[        R                  " SUR                   35      nU(       d  M0  [        R                  " 5       R                  5       S-
  nXE:  d  M]  UR                  5       R                  S5      nU(       d  M  [        5       n UR                  R                  US9nXR                   :w  a\  UR                  U R                   R                  :X  a5  UR!                  UR"                  UR                  R$                  S.5        GM  GM  GM     [(        R                  R+                  5       n	[-        U SU	US.5      $ ! UR&                   a     GM[  f = f)	NrH   rJ   rK   rL   rM   )rO   r8   rP   )rQ   rS   )r7   r8   r	   r:   r9   rX   r;   rY   rZ   r[   r\   r   r]   r^   r_   r`   ra   rO   namerb   r   rU   r   )
r=   rc   rS   rd   re   time_thresholdrf   rg   r7   rQ   s
             r%   r5   r5      sv   ||gll11==>oo,,hlln,MO"		N73F3F2G"HI=%\\^557#=N-))+//@3)+D!#||//3/7<</DKK7<<CVCV4V,33,0MM*.++*:*:5  5W/ #$ ""$H'8,;  	  ,, ! !s   A>GG G c                     [        U S5      $ )Nz projeto/assistente_grfgraph.htmlrp   rr   s    r%   assistente_grfgraph_viewrx      s    '=>>rA   )csrf_exempt)require_POST)JsonResponse)responder_pergunta_termo_iaresposta_fixa_se_houverresposta_coeficiente_paredebuscar_resposta_rapida)resposta_treinamento_aplicativoc                 P    SR                  S U R                  S5       5       5      $ )u.   Formata texto plano com 

em parágrafos HTML. c              3   J   #    U  H  nS UR                  5        S3v   M     g7f)z<p>z</p>N)strip).0pars     r%   	<genexpr>%formatar_para_html.<locals>.<genexpr>  s!     J6IsST*6Is   !#z

)joinsplit)textos    r%   formatar_para_htmlr     s     77Jekk&6IJJJrA   c                    U R                   R                  (       a4  [        R                  " U R                   R                  R                  5        U R
                  R                  S5      nU(       d  [        SS0SS9$ SU R                  ;  a  / U R                  S'   U R                  S   R                  SUS.5        S	U R                  l
         [        U5      nU(       d  [        U5      nU(       d  [        U5      nU(       d  [        X R                  S   5      nU[        :X  a  [!        U5      nU R                  S   R                  SUS.5        S	U R                  l
         SnUR'                  5       nUR'                  5       n[)        USSS9 nUR+                  S5        UR+                  US-   5        UR+                  S5        UR+                  US-   5        S S S 5        [        SU05      $ ! ["         a  nS
[%        U5       3n S nANS nAff = f! , (       d  f       N@= f! ["         a!  n[-        S[%        U5       35         S nANiS nAff = f)Nmensagemr3   u   Mensagem não informada.i  )statuschat_historyr7   )rolecontentTz[Erro ao processar mensagem]: 	assistantzA/var/www/html/cagpublico/cag/projeto/perguntas_respostas_chat.txtazutf-8)encodingz
--- PERGUNTA ---

z--- RESPOSTA ---
u&   [ERRO AO SALVAR NO TXT DE HISTÓRICO] resposta)r7   r8   r	   r:   r9   r1   r   r{   rd   ra   modifiedr}   r   r~   r|   r   r   r   strr   openwriterV   )r=   r   r   r$   caminho_txtperguntaresposta_limpafs           r%   chat_assistente_viewr     s    ||gll11==>||
+HV%?@MMW__,*,'OON#**,   $GOO=*84-h7H28<H27OON<[\H66)(3H
 OON#**,   $GOOAY>>#!)+sW5GG*+GGHtO$GG()GGNT)*	 6 X.//3  =3CF8<= 65  A6s1vh?@@AsP   A#G3 &-H) AHH) 3
H=HH
H&"H) &H) )
I3II)r{   HttpResponseBadRequestHttpResponse)settings)OpenAI)api_keyc                    U R                   S:w  a  [        S5      $  [        R                  " U R                  5      nUR                  SS5      R                  5       nUR                  SS5      R                  5       nU(       a  U(       d  [        S5      $ [        R                  " SSUS S	 5      nU S[        R                  " 5       R                  S S
  S3nSn[        R                  " USS9  [        R                  R                  Xe5      n[         R"                  R$                  R'                  SSUS9n[)        US5       n	U	R+                  UR,                  5        S S S 5        [/        UR,                  SS9$ ! , (       d  f       N"= f! [0         a*  n
[3        S[5        U
5      5        [        S5      s S n
A
$ S n
A
ff = f)Nr1   u   Método inválido.r   r   r   zTexto ou pergunta ausente.z\W+_2      z.mp3z6/var/www/html/cagpublico/cag/projeto/audios_gerados_iaT)exist_okztts-1echo)modelvoiceinputwbz
audio/mpeg)content_typeu   Erro ao gerar áudio:u   Erro ao gerar áudio.)r6   r   r   loadsbodyr   r   resubuuiduuid4hexosmakedirspathr   clientaudiospeechr<   r   r   r   r   r   rV   r   )r=   r"   r   r   	nome_basenome_arquivocaminho_pastacaminho_completor!   r   r$   s              r%   
tts_openair     sw   ~~%&:;; ?zz',,'"%++-88J+113H)*FGG FF63"6	#Adjjl&6&6r&:%;4@ Q
MD177<<D <<&&-- . 
 "D)QGGH$$% * H,,<HH *)
  ?%s1v.%&=>>?s=   A8F B.F E< F <
F
F 
GF<6G<Gc                 8   [        U R                  S5      (       aO  U R                  R                  (       a4  [        R                  " U R                  R                  R
                  5        [        R                  R                  S5      S S n[        U SSU05      $ )Nr8   rF   rG   z!projeto/informativos_section.htmlrR   )
rT   r7   r8   r	   r:   r9   rC   r;   rW   r   )r=   rR   s     r%   informativos_sectionr     s~     w||X&&7<<+>+>gll11==> &&//0BCBQGL '>A  rA   )Dr   django.shortcutsr   r   r   modelsr   r   requests.utilsr   	django.dbr	   django.contrib.auth.decoratorsr
   r   r)   r&   r.   django.contribr/   r@   django_tenants.utilsrB   tenant_management.modelsrC   r5   rm   ro   rs   django.contrib.sessions.modelsrX   django.utilsrZ   django.contrib.authr`   django.core.cacher\   rx   django.views.decorators.csrfry   django.views.decorators.httprz   django.httpr{   agentr|   r}   r~   r   respostas_rapidasr   r   r   r   astr   r   r   django.confr   r   r   openair   OPENAI_API_KEYr   r   r    rA   r%   <module>r      s    @ @       9 6 > B0 . #    - #   9= =D ! / 0$ $N ! 8 & &  ! 6 
R 
R $:
 3 ! . 3 ! . 2 ! # . B ? ? 5 5 $   9  @K
 
  4 5 9 $   
:0   :0b 5 J J    	 	  	//	0$? $?P 1 rA   