
    h                        S SK r S SKrS SK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  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  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SK0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7  S SK8J9r9  \	" S5        S.S jr:S r;\S/S j5       r<S r=S  r>S S!KJ?r?J@r@  S S"KAJBrB  S S#KCJDrD   S0S$ jrE\S% 5       rFS S!KJ?r?J@r@  S S"KAJBrB  S& rG\S' 5       rH\S( 5       rIS 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  S S+KJJKrK  S S,KLJMrM  \S- 5       rNg)1    N)use)Document)Inches)renderget_object_or_404redirect)HttpResponseHttp404)settings)
connection)reverse)messages)login_required)combinations_with_replacement)datetime)Projeto)Ambiente)Parede)Vidro)Porta)Telhado)DadosTermicos   )RENOVADOR_MODELOS)HIWALL_MODELOS)TIPODUTO_MODELOS)CASSETE_4VIAS_MODELOS) calcular_vazao_total_ar_exteriorAggc                   ^^ [        XX#U5      n[        U[        R                  [        45      (       a   [        [        R                  " U5      5      nO[        U5      nUS-  n[        S   nUS    Vs/ s H  nUS   PM
     n	nU	R                  5         U	 H?  mTU:  d  M  [        U4S jUS    5       5      n
UR                  5       nU
/US'   U/US.s  $    Sn[        S5      n[        S5      n[        S	S
5       Hd  n[        X5       HR  n[        U5      nUU:  d  M  UU-
  n[        U5      U:  d  [        U5      U:X  d  M;  UU:  d  MC  UnUn[        U5      nMT     Mf     U(       aO  / nU HB  m[        U4S jUS    5       5      n
UR                  5       nU
/US'   UR                  U5        MD     UUS.$ / US.$ s  snf )u   
Seleciona a combinação ideal de renovadores para atender à vazão necessária.
Busca primeiro um único aparelho que atenda, depois a melhor combinação possível.
   r   velocidadesvazao_maxima_m3hc              3   >   >#    U  H  nUS    T:X  d  M  Uv   M     g7fr#   N ).0vvazaos     6/var/www/html/cagpublico_m/cag/centraltermica/views.py	<genexpr>.escolher_aparelho_renovacao.<locals>.<genexpr>E   s(      (=a'(E1 =   	)melhor_combvazao_total_ar_exteriorNinf   
   c              3   >   >#    U  H  nUS    T:X  d  M  Uv   M     g7fr%   r&   )r'   r(   vazao_necessarias     r*   r+   r,   e   s)      (=a'(,<< =r-   )r   
isinstancenpndarraylistfloatsumr   sortnextcopyranger   lenappend)	area_piso
pe_direitonumero_pessoastaxa_renovacao	horas_diar/   
vazao_horaaparelho_disponivel
velocidadevazoes_disponiveisvelocidade_escolhidaaparelhor.   menor_excessomenor_quantidaden_aparelhoscomb
soma_vazaoexcesso	resultador)   r4   s                       @@r*   escolher_aparelho_renovacaorS   (   s    ?yVdv  A )BJJ+=>>"'/F(G"H"'(?"@ )2-J ,A. .m<<J 	%&<    $J#' (.}=( $  +//1H';&<H]# (z+5  $ K%LMU| Q|12DRDTJZ'$z1I 00Y"22w7N"&K$+M'*4y$ S $ 	 +#' (.}=( $  +//1H';&<H]#X& !, %'1
 	
 #- os   5Gc           
         US:X  a  [         nOUS:X  a  [        nOUS:X  a  [        nOg[        US S9nSn[	        S5      n[	        S5      n[        S	U  S
U 35        [        SS5       H  n[        X&5       Hq  n[        S U 5       5      nX-
  n	X:  d  M   [        U5      U:  d  [        U5      U:X  d  M@  X:  d  MG  UnU	n[        U5      n[        S[        U5       SU S35        Ms     M     U(       a:  [        U5      n
[        S[        U
5       SU
 Vs/ s H  oS   PM	     sn 35        U
$ [        S5        gs  snf )u   
Determina a combinação de aparelhos (hiwall, tipoduto ou cassete4vias) para atender a 'carga_maxima_watts'.
Retorna a melhor combinação possível (menor excesso e menor quantidade).
hiwalltipodutocassete4viasu   Tipo de aparelho não suportadoc                     U S   $ )Ncapacidade_resfriamento_wr&   )xs    r*   <lambda>%determinar_aparelho.<locals>.<lambda>   s
    2M0N    )keyNr0   u   Carga máxima: z
 W, Tipo: r      c              3   *   #    U  H	  oS    v   M     g7f)rY   Nr&   )r'   as     r*   r+   &determinar_aparelho.<locals>.<genexpr>   s     "P4a%@#A4s   u   Combinação encontrada: z aparelhos, Capacidade:  WzRetornando z aparelhos: modelou(   Nenhuma combinação adequada encontradau,   Não há combinação adequada de aparelhos.)r   r   r   sortedr9   printr>   r   r:   r?   r8   )carga_maxima_wattstipo_aparelho	aparelhosr.   rL   rM   rrO   capacidade_totalrQ   rR   aps               r*   determinar_aparelhorm   {   sR   
  "		*	$$		.	()	0y&NOIK%LMU|	O./z-
IJ1b\1)?D""P4"PP&;G5t9//CIAQ4QV]Vm"&K$+M'*4y$5c$i[@XYiXjjlmn @  %	C	N+<PY8ZPY"HPY8Z7[\]89=	 9[s   D=c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9nU(       a  [        R                  R                  X2S9O[        R                  R                  US9n0 nU H:  nU R                  R                  SUR                   3S 5      nXuUR                  '   M<     / nU GH  n	UR                  U	R                  5      =(       d    U	R                  =(       d    Sn
U	R                  U
:w  a'  U	R                  (       d  Xl        U	R!                  5         U	R                  (       aR  UR#                  U	R                  SU	R$                  =(       d    SSSSSSSS	./U	R                  =(       d    SS
S.5        M   [&        R(                  R+                  [,        R.                  SUR0                   35      n[&        R(                  R+                  XR                   S35      n[&        R(                  R3                  U5      (       aR  [4        R6                  " USS9nSUR8                  ;   a(  US   R;                  5       n[=        X5      =(       d    / nO
Sn/ nOSn/ n UR#                  U	R                  UUU
SS.5        GM     UUUS.n[A        U SU5      $ ! [>         a  nSU 3n/ n S nANOS nAff = f)Nidprojetonome_ambienterr   tipo_aparelho_rU   zN/A - Equipamento existenteu   Não especificadoN/A)rd   capacidade_resfriamento_btucapacidade_aquecimento_bturY   capacidade_aquecimento_wfonte_alimentacao%tubulacao_refrigerante_liquido_gas_mmT)nomecarga_termica_maxaparelho_detalhesrh   equipamento_existentez!arquivos_cargas_termicas/projeto__resultados_termicos.xlsxopenpyxlengine   Carga Térmica Total Ambienteu   Coluna não encontradau   Arquivo não encontradozErro ao processar arquivo: F)rr   lista_ambientestipos_aparelhosz1centraltermica/lista_ambientes_carga_termica.html)!useris_authenticatedtenantr   
set_schemaschema_namer   r   r   objectsfilterGETgetrs   rh   r   saver@   modelo_aparelhoospathjoinr   BASE_DIRnome_projetoexistspd
read_excelcolumnsmaxrm   	Exceptionr   )request
projeto_idambiente_nomerr   	ambientesr   ambrh   r   ambientetipo_aparelho_atualcaminho_basecaminho_arquivodfr}   aparelhos_recomendadosecontextos                     r*   lista_projetos_ambientesr      s   ||$$)<)<gll11==>J7GYf  '''Ultl|l|  mD  mD  MT  mD  mUIO.9J9J8K(LdS-:))*  O-11(2H2HIoXMcMcogo!!%88A_A_%8"MMO))"" ..%B&66M:M38271605).=B' & "*!7!7!C8)-$  	(77<<(9(9=^_f_s_s^t;uvL ggll<<R<R;SSl9mnOww~~o..]]?:F2bjj@(*+J(K(O(O(Q%-@AR-h-nln*(@%-/*$=!)+&
 	**!2!70%* 
 	Y j **H
 'NPXYY#  	("=aS A%'"	(s%   CK1.K13K11
L;LLc           
      n   [         R                  " [         R                  R                  U5      SS9  U S   S-  n[        R
                  " SS9  [        R                  " U S   USS	S
9  [        U5       H'  u  p4[        R                  " U S   U   XDS S3SSSS9  M)     [        R                  " S5        [        R                  " S5        [        R                  " S5        [        R                  " 5         [        R                  " 5         [        R                  " U5        [        R                  " 5         g)uU   
Gera e salva o gráfico da carga térmica total (convertida em TR) ao longo do dia.
Texist_okr   i  )r2      )figsizeu   Horáriou   Carga Térmica Total (TR)o)labelmarker.2fz TRcenterbottom   )havafontsizeu   Horário do Diau8   Carga Térmica Total do Ambiente ao Longo do Dia (em TR)N)r   makedirsr   dirnamepltfigureplot	enumeratetextxlabelylabeltitlelegendgridsavefigclose)r   caminho_graficocarga_termica_trivalors        r*   gerar_grafico_carga_termicar      s     KK04@9:TAJJwHHR
^-5PY\]./J"EC[+<habc 0 JJ !JJ*+IIHIJJLHHJKK IIKr]   c                 B   [         R                  R                  [        R                  SU R
                   S35      n[         R                  " USS9  0 SU/_SUR                  /_SUR                  /_SUR                  /_S	UR                  /_S
UR                  /_SUR                  /_SUR                  /_SUR                  /_SUR                  /_SUR                   /_SUR"                  /_SUR$                  /_SUR&                  /_SUR(                  /_SUR*                  /_SUR,                  /_0 SUR.                  /_SUR0                  /_SUR2                  /_SUR4                  /_SUR6                  /_SUR8                  /_SUR:                  /_SUR<                  /_SUR>                  /_SUR@                  /_S URB                  /_S!URD                  /_S"URF                  /_S#URH                  /_S$URJ                  /_S%URL                  /_S&URN                  /_E0 S'URP                  /_S(URR                  /_S)URT                  /_S*URV                  /_S+URX                  /_S,URZ                  /_S-UR\                  /_S.UR^                  /_S/UR`                  /_S0URb                  /_S1URd                  /_S2URf                  /_S3URh                  /_S4URj                  /_S5URl                  /_S6URn                  /_S7URp                  /_EURr                  /URt                  /URv                  /URx                  /URz                  /S8.En[|        R~                  " U5      n	[         R                  R                  Xq S935      n
U	R                  U
S:S;9  U	$ )<u?   
Salva as variáveis do ambiente em CSV e retorna o DataFrame.
z9/var/www/html/cagpublico/cag/arquivos_climaticos/projeto_/Tr   rs   area_parede_nortecoeficiente_parede_nortetipo_parede_nortearea_parede_sulcoeficiente_parede_sultipo_parede_sularea_parede_lestecoeficiente_parede_lestetipo_parede_lestearea_parede_oestecoeficiente_parede_oestetipo_parede_oestearea_vidro_nortecoeficiente_vidro_nortetipo_vidro_nortearea_vidro_sulcoeficiente_vidro_sultipo_vidro_sularea_vidro_lestecoeficiente_vidro_lestetipo_vidro_lestearea_vidro_oestecoeficiente_vidro_oestetipo_vidro_oestearea_porta_nortecoeficiente_porta_nortetipo_porta_norte!diferencial_insolacao_porta_nortearea_porta_sulcoeficiente_porta_sultipo_porta_suldiferencial_insolacao_porta_sularea_porta_lestecoeficiente_porta_lestetipo_porta_leste!diferencial_insolacao_porta_lestearea_porta_oestecoeficiente_porta_oestetipo_porta_oeste!diferencial_insolacao_porta_oestetipo_telhadocoeficiente_transmissao_telhadoarea_telhadodiferencial_insolacao_telhadocalor_sensivel_pessoacalor_latente_pessoarC   taxa_iluminacaodissipacao_equipamentosrB   )rA   temperatura_internaumidade_relativa_internaumidade_absoluta_internarD   z
_dados.csvF)index)Ar   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   diferencial_insolacao_norter   r   r   diferencial_insolacao_sulr   r   r   diferencial_insolacao_lester   r   r   diferencial_insolacao_oester   coeficiente_telhador   r   r   r   rC   r   r   rB   rA   r   r   r  rD   r   	DataFrameto_csv)rr   rs   paredevidroportatelhadotermicor   dadosr   caminho_csvs              r*   salvar_dados_em_csvr    so    77<< 1 15nov  pD  pD  oE  EF  4G  HLKKt,C-C 	f667	C
 	#V%D%D$EC 	f667C 	F223C 	!6#@#@"AC 	F223C 	f667C 	#V%D%D$EC 	f667C 	f667C 	#V%D%D$EC 	f667C$ 	U334%C& 	"E$A$A#B'C( 	U334)C* 	5//0+C, 	 %"="=!>-C. 	5//0/C0 	U3341C2 	"E$A$A#B3C4 	U3345C6 	U3347C8 	"E$A$A#B9C: 	U334;C@ 	U334ACB 	"E$A$A#BCCD 	U334ECF 	,e.O.O-PGCH 	5//0ICJ 	 %"="=!>KCL 	5//0MCN 	*E,K,K+LOCP 	U334QCR 	"E$A$A#BSCT 	U334UCV 	,e.O.O-PWCX 	U334YCZ 	"E$A$A#B[C\ 	U334]C^ 	,e.O.O-P_Cd 	--.eCf 	*G,G,G+HgCh 	--.iCj 	('*O*O)PkCp 	 '"?"?!@qCr 	!=!= >sCt 	7112uCv 	G334wCx 	"G$C$C#DyCz 	w))*{C| ''( ' ; ;<%,%E%E$F%,%E%E$F"112ECEJ 
e	B'',,|j-IJKIIkI'Ir]   )PtRGBColor)WD_ALIGN_PARAGRAPH)get_current_requestc                 ^   [        5       n[        5       nU(       a  UR                  R                  R                  S:X  a  UR
                   H  n	U	R                  n
U
R                  (       a  U
R                  S   OU
R                  5       nSUl	        [        R                  Ul        UR                  S   n[        S5      UR                  l        [#        SSS5      UR                  R$                  l        M     UR)                  SSS9  UR                  S	U R*                   35        UR                  S
U R,                   35        UR                  SU R.                   SU R0                   S35        UR                  S[2        R4                  " 5       R7                  S5       35        UR                  S5        UR)                  SSS9  Ub  UR8                  (       d  UR;                  SSS9nSUl        UR>                  S   R@                  nSUS   l	        SUS   l	        URB                  S   RE                  5        HF  u  nnURG                  5       R@                  n[I        U5      US   l	        [I        U5      US   l	        MH     OUR                  S5        UR                  S5        [J        RL                  RO                  U5      (       a  URQ                  U[S        S5      S9  OUR                  S5        UR)                  SSS9  UR                  SURU                  5        35        [J        RL                  RW                  [X        RZ                  SSS 5      [J        RL                  RW                  [X        RZ                  SSS!5      [J        RL                  RW                  [X        RZ                  SSS"5      S#.nUR]                  U5      nU(       a>  [J        RL                  RO                  U5      (       a  URQ                  U[S        S$5      S9  OUR                  S%5        U(       GaE  [_        U[`        5      (       Ga/  UR;                  SS&S9nSUl        UR>                  S   R@                  n/ S'Qn[c        U5       H  u  nn
XU   l	        M     U H  n[_        U[d        5      (       d  M  URG                  5       R@                  nUR]                  S(S)5      US   l	        UR]                  S*S)5       S+3US   l	        UR]                  S,S)5       S+3US   l	        UR]                  S-S)5      US$   l	        UR]                  S.S)5      US/   l	        UR]                  S0S)5      US   l	        M     OUR                  S15        UR)                  S2SS9  UR                  S35        [J        RL                  RW                  [X        RZ                  SSS45      n[J        RL                  RO                  U5      (       a  URQ                  U[S        S$5      S9  OUR                  S55        [J        RL                  RW                  [X        RZ                  S6U R*                   S7URf                   S835      n[J        Rh                  " [J        RL                  Rk                  U5      S9S:9  URm                  U5        U$ );u   
Gera um arquivo DOCX contendo:
  - Informações do projeto
  - Dados do ambiente
  - Gráfico de carga térmica
  - Aparelhos recomendados
  - Sistema de renovação de ar (imagem + dados estáticos de exemplo)
Retorna o caminho do arquivo .docx gerado.
tester   -   VERSÃO DE TESTE – NÃO USAR COMERCIALMENTE$      u+   Relatório de Carga Térmica e Equipamentosr   level	Projeto: Cidade: Coordenadas: (, )u   Data de Criação: z%Y-%m-%d %H:%M:%SP________________________________________________________________________________Dados do Ambienter1   rowscols
Table Grid
   ParâmetroValor#   Dados do ambiente não encontrados.u   
Gráfico de Carga Térmica:   width   (Gráfico não disponível)zAparelhos RecomendadosTipo de Aparelho Selecionado: staticimagenshi-wall-02.jpgPDuto_Inverter.jpgPCassete_Inverter.jpgrU   rV   rW      %   (Imagem do aparelho não disponível)r   )Modeloz
Cap. Resf.z
Cap. Aque.   Alimentaçãou   Tubulação	   Potênciard   rv   rw   z BTU/hrx   rz   r{      potencia_motor_w+Nenhum aparelho recomendado foi encontrado.   Sistema de Renovação de Aru-   Vazão Total Necessária (Exemplo): N/A m³/hrenovador.jpg&   (Imagem do renovador não disponível)arquivos_relatorios_relatorio_z.docxTr   )7r   r  r   r   r   sectionsheader
paragraphsadd_paragraphr   r  CENTER	alignmentrunsr  fontsizer  colorrgbadd_headingr   cidadelatitude	longituder   nowstrftimeempty	add_tablestyler%  cellsilocitemsadd_rowstrr   r   r   add_picturer   
capitalizer   r   r   r   r5   r8   r   dictrs   r   r   r   )rr   r   dados_ambienter   r   df_dados_ambienterh   docr   sectionrD  header_paragraphruntabela	hdr_cellscolval	row_cellsr1  caminho_imagem_aparelhoheadersr   rK   imagem_renovadorcaminho_docxs                            r*   gerar_relatorio_docxrn  h  s    *C
 "#G7<<&&22g=||G^^F7=7H7Hv003fNbNbNd$S!);)B)B&"''*CrFCHHM!)#sC!8CHHNN $ OOAOK	'"6"6!789 012w'7'7&87;L;L:MQOP+HLLN,C,CDW,X+YZ[h OO'qO1$->-D-DAA.#KKN((	(	!#	!)..q1779HC(..I #CIaL #CIaL :
 	?@ 56	ww~~o&&vay978 OO,AO66}7O7O7Q6RST '',,x00(IGWXGGLL!2!2HiI]^X%6%6)MdeG
 &kk-8277>>2I#J#J/vayAAB *-CT"J"JAA.#KKN((	e"7+IAv &aL , /H(D))"NN,22	$,LL5$A	!!'/||4QSX'Y&ZZ`$a	!!'/||4PRW'X&YY_$`	!!$,LL1De$L	!!$,LL1XZ_$`	!!$,LL1CU$K	!! / 	GH OO2!O<EFww||H$5$5xO\	ww~~&''(q	:BC 77<< 1 13HWMaMaLbbmnv  oE  oE  nF  FK  KL  MLKK-=HH\r]   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        U R                  S:X  ay  U R                  R                  S5      n[        [        US9n[        [        XBS9nX5l        UR                  5         [        R                  " U S5        [!        [#        SXS.S95      $ g )	NPOSTrh   ro   rq   z%Tipo de aparelho salvo com sucesso!!!r   )r   r   )kwargs)r   r   r   r   r   r   methodrp  r   r   r   r   rh   r   r   successr   r   )r   r   r   rh   rr   r   s         r*   salvar_tipo_aparelhort    s    ||$$)<)<gll11==>~~((9#G
;$Xw\!."IJ :R\C}~  r]   c                 
   SnU R                    GHp  nUR                  nUR                  (       a  UR                  S   OUR                  5       nUR	                  U5      n[        S5      UR                  l        [        SSS5      UR                  R                  l
        [        R                  Ul        UR	                  SU-   5        UR                  nUR                  (       a  UR                  S   OUR                  5       nUR	                  U5      n[        S5      UR                  l        [        SSS5      UR                  R                  l
        [        R                  Ul        UR	                  SU-   5        GMs     g)ui   
Insere uma marca d'água de texto em todas as páginas do documento de forma mais visível e inclinada.
r  r         z

N)rC  rD  rE  rF  add_runr  rJ  rK  r  rL  rM  r  rG  rH  footer)	ra  watermark_textrb  rD  paragraph_header
run_headerry  paragraph_footer
run_footers	            r*   inserir_marca_daguar    s2    EN<<393D3D6,,Q/&J^J^J`%--n=
!"v
$,S#s$;
!%7%>%>" 	  .!89 393D3D6,,Q/&J^J^J`%--n=
!"v
$,S#s$;
!%7%>%>" 	  .!89+  r]   c           	      t   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9n[        [        US9n[        [        US9n[        [        US9n[        [        US9n[        [        US9n[        [        US9n	[        R                  R!                  ["        R$                  SUR&                   3UR(                   S35      n
[        R                  R+                  U
5      (       a3  [,        R.                  " U
SS9nUS   R1                  5       US   US	   S
.nOSSSS
.n[3        UUR(                  UUUUU	5      n[        R                  R!                  ["        R$                  SSUR(                   S35      n[        R                  R+                  U
5      (       a  [5        WU5        UR6                  nUS   S:w  a  [9        US   U5      nO/ n[;        5       nU R                   R                  R
                  S:X  a  [=        U5        UR>                  S   R@                  nURB                  (       a  URB                  S   OURE                  5       nSn[        R                  R+                  U5      (       a>  URG                  5       nURI                  U[K        S5      S9  [L        RN                  Ul(        SURG                  S5      l)        URG                  SUR(                   S35        URG                  SUR&                   S35        URG                  SURT                   S35        URG                  S[V        RX                  " 5       R[                  S5       S35        URE                  S5        UR]                  SSS 9  Ub  UR^                  (       d  URa                  SS"S#9nS$Ul1        URd                  S   Rf                  nS%US   l4        S&US   l4        URj                  S   Rm                  5        HF  u  nnURo                  5       Rf                  n[q        U5      US   l4        [q        U5      US   l4        MH     OURE                  S'5        UR]                  S(SS 9  [        R                  R+                  U5      (       a  URI                  U[K        S)5      S9  OURE                  S*5        UR]                  S+SS 9  URE                  S,URs                  5        35        [        R                  R!                  ["        R$                  S-S.S/5      [        R                  R!                  ["        R$                  S-S.S05      [        R                  R!                  ["        R$                  S-S.S15      S2.nURu                  U5      nU(       a>  [        R                  R+                  U5      (       a  URI                  U[K        S35      S9  OURE                  S45        U(       GaK  [w        U[x        5      (       Ga5  URa                  SS5S#9nS$Ul1        URd                  S   Rf                  n/ S6Qn[{        U5       H  u  nn U UU   l4        M     U H  n![w        U![|        5      (       d  M  URo                  5       Rf                  nU!Ru                  S7S5      US   l4        U!Ru                  S8S5       US   l4        U!Ru                  S9S5       US"   l4        U!Ru                  S:S5      US3   l4        U!Ru                  S;S5      US<   l4        [q        U!Ru                  S=S5      5      US)   l4        M     OURE                  S>5        UR]                  S?SS 9  UbZ  UR^                  (       dI  US@   Rj                  S   n"USA   Rj                  S   n#USB   Rj                  S   n$USC   Rj                  S   n%OSDu  n"n#n$n%[        U"U#U$U%5      n&U&Ru                  SES5      n'URE                  SFU'SG SH35        [        R                  R!                  ["        R$                  S-S.SI5      n([        R                  R+                  U(5      (       a  URI                  U([K        S35      S9  OURE                  SJ5        U&Ru                  SK/ 5      n)U)(       Gan  URE                  SL[        U)5       SM35        URa                  SSNS#9n*S$U*l1        U*Rd                  S   Rf                  n/ SOQn[{        U5       H  u  nn U UU   l4        M     Sn+[{        U)S5       H  u  n,n-U*Ro                  5       Rf                  nU-Ru                  S7S5      n.U-SP   SQ   n/U+U/SR   -  n+[q        U,5      US   l4        U.US   l4        U/SS   US"   l4        U/SR    SH3US3   l4        U/ST    SU3US<   l4        U/SV    SW3US)   l4        U/S=    SX3US5   l4        M     URE                  SYU+ SH35        U+U':  a  URE                  SZ5        O#URE                  S[5        OURE                  S\5        UR(                   S]3n0[        R                  R!                  ["        R$                  S^U05      n1[        R                  " [        R                  R                  U15      SS_9  UR                  U15        [        U1S`5       n2[        U2R                  5       SaSb9n3Sc[        R                  R                  U15       Sd3U3Se'   S!S!S!5        U3$ ! , (       d  f       W3$ = f)fu   
Gera o relatório DOCX de um ambiente específico e devolve como download,
incluindo dados do ambiente, gráfico, aparelhos de ar condicionado e
sistema de renovação de ar.
ro   r   >/var/www/html/cagpublico/cag/arquivos_cargas_termicas/projeto_r   r   r   r       Somatório Carga Sensível Total   Somatório Carga Latente Total carga_termica_total_ambiente_maxsomatorio_carga_sensivel_totalsomatorio_carga_latente_totalrv   mediagrafico_carga_termica_.pngr  r  r   @/var/www/html/cagpublico/cag/static/relatorio/grf_graph_logo.png      @r,  Tu   
Relatório do Ambiente

Ambiente: 
r  r     Data de geração: %d/%m/%Yr"  r#  r   r  Nr1   r$  r'  r(  r)  r*  u"   Gráfico de Carga Térmica (em TR)r+  r.  )Aparelhos de Ar Condicionado Recomendadosr/  r0  r1  r2  r3  r4  r5  r6  r7  r   r8  zCap. Resf. (BTU/h)zCap. Aque. (BTU/h)r9  u   Tubulação (mm)u   Potência (W)rd   rw   rx   rz   r{   r;  r<  r=  r>  rA   rB   rC   rD   r   r   r   r   r/   u+   Vazão Total Necessária para Renovação: r       m³/hr?  r@  r.      Combinação de  Renovador(es) Selecionada.   Aparelhor8  
Velocidadeu   Vazãou   Pressãou   Nível Sonoror:  r"   r#   r|   pressao_maxima_mmca mmCAnivel_pressao_sonora_dba dBArc      Vazão Total da Combinação: >   ✓ A combinação atende à necessidade de renovação de ar.Q   ⚠ A combinação não atende completamente à necessidade de renovação de ar.4Nenhum renovador foi selecionado para este ambiente.z_relatorio.docxrA  r   rbGapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentcontent_typeattachment; filename=""Content-Disposition)Hr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   r   r   r  r   rh   rm   r   r  rC  rD  rE  rF  rx  r\  r   r  rG  rH  boldrO  r   rR  rS  rN  rT  rU  rV  r%  rW  r   rX  rY  rZ  r[  r]  r   r5   r8   r   r^  rS   r?   r   r   r   openr	   readbasename)4r   r   ambiente_idrr   r   r
  r  r  r  r  caminho_xlsxr   r_  r`  r   rh   r   ra  header_sectionrc  	logo_pathrd  re  rf  rg  rh  ri  r1  rj  	tabela_arrk  r   rD  rK   rA   rB   rC   rD   renovador_infor4   rl  combinacao_renovadores	tabela_rnvazao_total_combinadaidx	renovador
modelo_renrH   	nome_docxrm  fresponses4                                                       r*   gerar_relatorio_ambienter    s9
    ||$$)<)<gll11==>J7G k:H v9Feh7Eeh7E(;GAG
 77<<
HI]I]H^_!!
"";<L
 
ww~~l##]]<
;023R0S0W0W0Y.01S.T-/0P-Q
 16.3-2
 , ggll
 !7!7 8=O
 
ww~~l###B8
 **M89UB!4=>"

 "$
 *C ||&&'1C  \\!_++N7E7P7P~003VdVrVrVt SI	ww~~i  &&(	5%7%>%>" CG9:?z(*@*@)ADEy)=)=(>bABx'7r:;28<<>3J3J:3V2WWYZ[ h OO'qO1$->-D-DAA.#KKN((	(	!#	!)..q1779HC(..I #CIaL #CIaL :
 	?@
 OO8OB	ww~~o&&vay978
 OO?qOI6}7O7O7Q6RST '',,x00(IGWXGGLL!2!2HiI]^X%6%6)MdeG
 &kk-8277>>2I#J#J/vayAAB *-CT"J"JMMqqM1	&	NN1%++	
 #7+IAv &IaL , /H(D))%--/55	$,LL5$A	!!'/||4QSX'Y&Z	!!'/||4PRW'X&Y	!!$,LL1De$L	!!$,LL1XZ_$`	!!$'5G(O$P	!! / 	GH
 OO2!O<$->-D-D%k277:	&|499!<
*+;<AA!D*+;<AA!D@J=	:~~ 1	N &))*CQGCDTUXCYY_`a ww||H$5$5xO\	ww~~&''(q	:BC ,//rB,S1G-H,IIdefMMqqM1	&	NN1%++	j"7+IAv &IaL , !"'(>BNC!))+11I"x7J"=1"5J!Z0B%CC! #CIaL *IaL *6 2IaL#-.@#A"B& IIaL#-.C#D"EU KIaL#-.H#I"J$ OIaL#-.@#A"B" EIaL C 	:;P:QQWXY $44^_qrPQ
 ))*/:I77<< 1 13H)TLKK-=HH\ 
lD	!QFFHb
 -C277CSCST`CaBbbc*d&' 
" O 
"	! Os   ?l((
l7c           
      4   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9n[        R                  R                  US9nUR                  5       (       d"  [        R                  " U S5        [        S5      $ UR                  5       n[!        5       nU R                   R                  R
                  S:X  a  [#        U5        UR%                  SSS9  UR'                  S	UR(                   35        UR'                  S
UR*                   35        UR'                  SUR,                   SUR.                   S35        UR'                  S[0        R2                  " 5       R5                  S5       35        UR'                  S5        UR6                  S   R8                  nUR:                  (       a  UR:                  S   OUR'                  5       nSn[<        R>                  R                  U5      (       a>  URA                  5       n	U	RC                  U[E        S5      S9  [F        RH                  Ul%        SURA                  S5      l&        URA                  SURN                   S35        URA                  S	UR(                   S35        URA                  S
UR*                   S35        URA                  S[0        R2                  " 5       R5                  S5       S35        UR'                  S5        UR%                  SSS9  [Q        USS9 H$  u  pUR'                  U
 SURN                   3SS9  M&     URS                  5         / n/ nU GH  nUR%                  SURN                   3SS9  [        [T        US9n[        [V        US9n[        [X        US9n[        [Z        US9n[        [\        US9n[<        R>                  R_                  [`        Rb                  S UR(                   3URN                   S!35      n[<        R>                  R                  U5      (       a3  [d        Rf                  " US"S#9nUS$   Ri                  5       US%   US&   S'.nOS(S(S(S'.n[k        UURN                  UUUUU5      n[<        R>                  R_                  [`        Rb                  S)S*URN                   S+35      n[<        R>                  R                  U5      (       a  [m        WU5        UR%                  S,S-S9  Ub  URn                  (       d  URq                  SS-S/9nS0Ul9        URt                  S   Rv                  nS1US   l<        S2US   l<        URz                  S   R}                  5        HF  u  nnUR                  5       Rv                  n[        U5      US   l<        [        U5      US   l<        MH     OUR'                  S35        UR%                  S4S-S9  [<        R>                  R                  U5      (       a  URC                  U[E        S55      S9  OUR'                  S65        UR%                  S7S-S9  UR                  nUR'                  S8UR                  5        35        [<        R>                  R_                  [`        Rb                  S9S:S;5      [<        R>                  R_                  [`        Rb                  S9S:S<5      [<        R>                  R_                  [`        Rb                  S9S:S=5      S>.nUR                  U5      nU(       a>  [<        R>                  R                  U5      (       a  URC                  U[E        S?5      S9  OUR'                  S@5        USA   S(:w  a  [        USA   U5      n O/ n U (       Gal  [        U [        5      (       GaV  URq                  SSBS/9n!S0U!l9        U!Rt                  S   Rv                  n/ SCQn"[Q        U"5       H  u  n
n#U#UU
   l<        M     U  H  n$[        U$[        5      (       d  M  U!R                  5       Rv                  nU$R                  SDS(5      US   l<        [        U$R                  SES(5      5      US   l<        [        U$R                  SFS(5      5      US-   l<        U$R                  SGS(5      US?   l<        U$R                  SHS(5      USI   l<        [        U$R                  SJS(5      5      US5   l<        UR                  U$5        M     OUR'                  SK5        UR%                  SLS-S9  UbZ  URn                  (       dI  USM   Rz                  S   n%USN   Rz                  S   n&USO   Rz                  S   n'USP   Rz                  S   n(OSQu  n%n&n'n([        U%U&U'U(5      n)U)R                  SRS5      n*UR'                  SSU*ST SU35        [<        R>                  R_                  [`        Rb                  S9S:SV5      n+[<        R>                  R                  U+5      (       a  URC                  U+[E        S?5      S9  OUR'                  SW5        U)R                  SX/ 5      n,U,(       Ga  UR'                  SY[        U,5       SZ35        URq                  SS[S/9n-S0U-l9        U-Rt                  S   Rv                  n/ S\Qn"[Q        U"5       H  u  n
n#U#UU
   l<        M     Sn.[Q        U,S5       H  u  n/n0U-R                  5       Rv                  nU0R                  SDS(5      n1U0S]   S^   n2U.U2S_   -  n.[        U/5      US   l<        U1US   l<        U2S`   US-   l<        U2S_    SU3US?   l<        U2Sa    Sb3USI   l<        U2Sc    Sd3US5   l<        U2SJ    Se3USB   l<        UR                  U05        M     UR'                  SfU. SU35        U.U*:  a  UR'                  Sg5        GM\  UR'                  Sh5        GMp  UR'                  Si5        GM     UR%                  SjSS9  UR%                  SkS-S9  0 n3U H-  n$U$R                  SDS(5      n4U3R                  U4S5      S-   U3U4'   M/     U3(       a  URq                  SS-S/9n!S0U!l9        U!Rt                  S   Rv                  nSlUS   l<        SmUS   l<        U3R}                  5        H=  u  n4n5U!R                  5       Rv                  nU4US   l<        [        U55      US   l<        M?     OUR'                  Sn5        UR'                  So5        UR%                  SpS-S9  0 n6U H?  n0U0R                  SDS(5      n4U0S]   S^   S`   n2U4 SqU2 3n7U6R                  U7S5      S-   U6U7'   MA     U6(       a  URq                  SS-S/9n-S0U-l9        U-Rt                  S   Rv                  nSrUS   l<        SmUS   l<        U6R}                  5        H=  u  n8n5U-R                  5       Rv                  nU8US   l<        [        U55      US   l<        M?     OUR'                  Ss5        [<        R>                  R_                  [`        Rb                  StUR(                   Su35      n9[<        R                  " [<        R>                  R                  U95      SSv9  UR                  U95        [        U9Sw5       n:[        U:R                  5       SxSy9n;Sz[<        R>                  R                  U95       S{3U;S|'   S.S.S.5        U;$ ! , (       d  f       W;$ = f)}u   
Gera um relatório DOCX para todos os ambientes do projeto, incluindo:
  - Capa
  - Índice (simplificado)
  - Seção de cada ambiente (dados, gráfico, aparelhos, renovador)
  - Resumo final de todos os aparelhos
ro   rt   u-   Não há ambientes cadastrados neste projeto.lista_projetosr  u   Relatório do Projetor   r  r  r  r  r   r!  r  r  r"  r  r  r,  Tu   
Relatório do Projeto
zAmbiente (exemplo): r  u   Índicer   )startz. Ambiente: zList Number)rV  r  r  r  r   r   r   r   r  r  r  rv   r  r  r  r#  r1   Nr$  r'  r(  r)  r*  u4   Gráfico de Carga Térmica Total do Ambiente (em TR)r+  r.  r  r/  r0  r1  r2  r3  r4  r5  r6  r7  r  r   r  rd   rw   rx   rz   r{   r;  r<  r=  r>  rA   rB   rC   rD   r  r/   u   Vazão Total Necessária: r   r  r?  r@  r.   r  r  r  r  r"   r  r#   r|   r  r  r  r  rc   r  r  r  r  zResumo Final dos EquipamentoszAparelhos de Ar Condicionador8  
Quantidadez/Nenhum aparelho de ar condicionado selecionado. zRenovadores de Arz - zModelo / VelocidadezNenhum renovador selecionado.rA  z_relatorio_projeto.docxr   r  r  r  r  r  r  )Rr   r   r   r   r   r   r   r   r   r   r   r   r   errorr   firstr   r  rN  rF  r   rO  rP  rQ  r   rR  rS  rC  rD  rE  r   r   rx  r\  r   r  rG  rH  r  rs   r   add_page_breakr   r   r   r   r   r   r   r   r   r   r   r  r   rT  rU  rV  r%  rW  r   rX  rY  rZ  r[  rh   r]  r   rm   r5   r8   r^  r@   rS   r?   r   r   r   r  r	   r  r  )<r   r   rr   r   ambiente_exemplora  r  rc  r  rd  r   r   aparelhos_selecionadosrenovadores_selecionadosr
  r  r  r  r  r  r   r_  r`  r   tabela_dadosrf  rg  rh  ri  rh   r1  rj  recomendadosr  rk  rD  rK   rA   rB   rC   rD   r  r4   rl  r  r  r  r  r  r  rH   aparelhos_por_modelord   qtdrenovadores_agrupadoschavemvcaminho_docx_projetor  r  s<                                                               r*   gerar_relatorio_projetor  .  s    ||$$)<)<gll11==>J7G  '''8I w OP()) ( *C
 ||&&'1C 
 OO+1O5	'"6"6!789 012w'7'7&87;L;L:MQOP+HLLN,C,CJ,O+PQRh
 \\!_++N7E7P7P~003VdVrVrVt SI	ww~~i  &&(	5%7%>%>" BF89>34D4R4R3SSUVWy)=)=(>bABx'7r:;28<<>3J3J:3V2WWYZ[h
 OOIQO' !4QC|H,B,B+CDMZ 5   !
 *X%;%;$<=QG #6H=!%(;!%(;#Gh?#MHE ww||LWMaMaLbc%%&&?@

 77>>,''|J?B467V4W4[4[4]245W2X134T1UN 5:2716N 0""
 '',,$X%;%;$<DA

 77>>,'''O<
 	+15(1B1H1H==aa=8L!-L$))!,22I ,IaL 'IaL-2215;;=S(00288	$'H	!!$'H	!! >
 CD
 	NVWX77>>/**OOO6!9O=;<
 	C1M ..:=;S;S;U:VWX ggll8#4#4h	K[\X%6%6)MabGGLL):):HiQhi

 #*++m"<"rww~~6M'N'NOO36!9OEEF <=F.ABL
 LJ|T::115I*IO!q)//IG 'w/	6$*	!! 0 )h-- ) 1 1 3 9 9I(0Xu(EIaL%(+HLL9VX],^(_IaL%(+HLL9UW\,](^IaL%(05H%(PIaL%(05\^c(dIaL%(+HLL9KU,S(TIaL% +11(; ) KL
 	6a@ (1B1H1H)+6;;A>I*<8==a@J./?@EEaHN./?@EEaHNDNAIz>>4Y
N\jk)--.GK67G6LFST 77<<(9(98YP_`77>>*++OO,F1IO>FG!/!3!3M2!F! 05K1L0MMhij115I*IO!q)//InG&w/	6$*	!! 0 %&!"+,BA"FY%--/55	&]]8U;
&}5b9
%4F)GG%$'H	!!$.	!!$.v$6	!!'12D'E&Ff$M	!!'12G'H&I$O	!!'12L'M&Nd$S	!!'12D'E&Fb$I	!! )//	: #G   >?T>UU[\]$(88!!"bc!!"uvTUC P OO31O= OO2!O<*h.';'?'?'JQ'NV$ + MMqqM1	&	NN1%++	$	!(	!/557KFC!))+11I &IaL #CIaL 8
 	KLb OO'qO1-	x/}-b1&9
(#j\*'<'@'@'JQ'Ne$	 . MMqqM1	&	NN1%++	1	!(	!,224GB!))+11I "IaL #CIaL 5
 	9:
 77<<
  78
 KK 45EHH!" 
"D	)QFFHb
 -C277CSCSThCiBjjk*l&' 
* O 
*	) Os   ??|
|)r   r   )r	   )PermissionDenied)gerar_relatorio_todos_ambientesc           	          U R                   R                  (       d  [        S5      e[        R                  " U R                   R                  R
                  5        [        [        US9n[        X5      n[        U[        5      (       a  U$ [        R                  " U S5        [        U SSU05      $ ! [         aE  n[        R                  " U S[        U5       35        [        U SS[        U5      05      s SnA$ SnAff = f)	uJ   
View para gerar o relatório completo do projeto com todos os ambientes.
u   Usuário sem tenant associado.ro   u   Erro ao gerar o relatório.z"centraltermica/erro_relatorio.htmlrr   u   Erro ao gerar o relatório: erroN)r   r   r  r   r   r   r   r   r  r5   r	   r   r  r   r   r[  )r   r   rr   r  r   s        r*   gerar_relatorio_completor    s    
W||"""#CDD 	gll11==> $G
; 37G h--Ow =>gCiQXEYZZ Ww">s1vh GHgCfcRSfEUVVWs$   B	B2 %B2 2
D<:C<6D<D)r!   )N)rU   )Or   pandasr   numpyr6   matplotlib.pyplotpyplotr   
matplotlibr   docxr   docx.sharedr   django.shortcutsr   r   r   django.httpr	   r
   django.confr   	django.dbr   django.urlsr   django.contribr   django.contrib.auth.decoratorsr   	itertoolsr   r   projeto.modelsr   ctermica.modelsr   paredes.modelsr   vidros.modelsr   portas.modelsr   telhados.modelsr   termicos.modelsr   r  r   rU   r   rV   r   rW   r   calculotermica.cargastermicosr   rS   rm   r   r   r  r  r  docx.enum.textr  cag.middlewarer  rn  rt  r  r  r  django.core.exceptionsr  )calculotermica.relatorio_completo_projetor  r  r&   r]   r*   <module>r     s3   > > >    @ @ -      # 9 3  # $ !   # ) ) " & / K E
Mf'>Z GZ GZ^,Ol % - . S[oj @ @( % -:F N Nj X X|
 7 $ 9 #   3 U W Wr]   