
    {gY                        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	  S SK
JrJr  S SKJr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 SKr\R8                  " S5        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 SK(J)r)  S SK*J+r+  S SK,J-r-  S SK.J/r/  SSK0J1r1J2r2J3r3  SSK4J5r5  SSK6J7r7J8r8J9r9  SSK:J;r;J<r<J=r=  SSK>J?r?J@r@JArAJBrBJCrCJDrDJErE  / SQrF/ SQrGS SKJrJHrH  S SKJr  S rIS  rJS! rKS%S" jrLS# rM\S$ 5       rNg)&    N)datetime)settings)messages)login_required)
connection)HttpResponseHttpResponseForbidden)renderget_object_or_404)Document)InchesPt)WD_ALIGN_PARAGRAPH)WD_ROW_HEIGHT_RULE)
WD_SECTIONAgg)Ambiente)Parede)Porta)Projeto)Telhado)DadosTermicos)Vidro   )calcular_carga_termica_paredecalcular_carga_insolacao_paredecarregar_temperaturas_projeto2)calcular_cargas_vidros)calcular_carga_insolacao_portacalcular_carga_termica_portacalcular_cargas_portas)calcular_cargas_telhados calcular_carga_insolacao_telhadocalcular_carga_termica_telhado)!calcular_cargas_termicas_ambiente#calcular_calor_sensivel_ar_exterior"calcular_calor_latente_ar_exteriorcalcular_vazao_ar_infiltracaocalcular_vazao_ar_renovacao calcular_vazao_total_ar_exteriorcalcular_densidade_ar)nortesullesteoeste)z06:00z07:00z08:00z09:00z10:00z11:00z12:00z13:00z14:00z15:00z16:00z17:00z18:00)r   RGBColorc                 
   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.
u-   VERSÃO DE TESTE – NÃO USAR COMERCIALMENTEr         z

N)sectionsheader
paragraphsadd_paragraphadd_runr   fontsizer0   colorrgbr   CENTER	alignmentfooter)	docwatermark_textsectionr5   paragraph_header
run_headerr?   paragraph_footer
run_footers	            ?/var/www/html/cag/calculotermica/relatorio_ambiente_resumido.pyinserir_marca_daguarH   .   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+      c           	      .   U Vs/ s H  o3S-  PM	     nn[         R                  R                  S5        [         R                  " SS9  [         R                  " XSSS9  [         R
                  " SS	S
9  [         R                  " S5        [         R                  " S5        [         R                  " S5        [         R                  " SS9  [        U5       H3  u  pV[         R                  " U[        U5      [        U5      S S3SSS9  M5     [        R                  " U5      nX   nX   n	[         R                  " SSSUS SU	 S3SSSS9  [         R                   " / SQS9  ["        R$                  R'                  US5      n
[         R(                  " U
S S!S"9  [         R*                  " 5         [         R                  " SS9  [         R                  " XS#SS9  [         R
                  " S$S	S
9  [         R                  " S5        [         R                  " S%5        [         R                  " S5        [         R                  " SS9  [        U5       H   u  pV[         R                  " XVUS S&3SSS9  M"     [        R                  " U5      nXK   nX   n[         R                  " SSSUS S'U S3SSSS9  [         R                   " / SQS9  ["        R$                  R'                  US(5      n[         R(                  " US S!S"9  [         R*                  " 5         X4$ s  snf ))u-   
Cria gráficos de carga térmica em W e TR.
  default)      )figsizezb-o   )	linewidthu&   Variação da Carga Térmica Total (W)   )padu   Horáriou   Carga Térmica (W)T-   )rotationz.0fWcenterbottom)havag      ?g{Gz?u\   O gráfico demonstra a variação da carga térmica ao longo do dia, com o valor máximo de .2fu    W atingido às .rM   )rY   fontsizewrap)r   gQ?r   r   )rectzgraph_w.pngi,  tight)dpibbox_incheszr-ou'   Variação da Carga Térmica Total (TR)u   Carga Térmica (TR)TRu    TR atingido às zgraph_tr.png)pltstyleusefigureplottitlexlabelylabelgridxticks	enumeratetextfloatnpargmaxfigtexttight_layoutospathjoinsavefigclose)horarioscarga_termica_total_ambiente
output_dirwcarga_trivmax_index_wmax_value_w
max_hour_wgraph_w_pathmax_index_trmax_value_trmax_hour_trgraph_tr_paths                  rG   create_load_graphsr   K   s   
 !== <1$ <H= IIMM) JJwHHXUaHII6B?JJzJJ#$HHTNJJ 67E!Hq#a0X(K 8 ))89K.;K&J KKTnoz{~n  @P  Q[  P\  \]  ^bt5 /*77<<
M:LKK#7;IIK JJwHHX!4II7R@JJzJJ$%HHTNJJ (#!C|X> $ 99X&L)L(K KKTno{|  oA  AR  S^  R_  _`  abt5 /*GGLL^<MKK3G<IIK&&w >s   Lc                 j   U R                    HF  n[        S5      UR                  S   l        UR                  SS  H  n[        S5      Ul        M     MH     U R                    H  nUR                   H  nUR                  S   nUR
                  n[        S5      Ul        [        S5      Ul        [        R                  Ul        UR                   H.  n[        S5      UR                  l        SUR                  l        M0     M     M     U R                   S   R                   HT  nUR                   HA  nUR                   H.  nS	UR                  l        [        S5      UR                  l        M0     MC     MV     U R                    H(  n[        S
5      Ul        [$        R&                  Ul        M*     g)z
Formata uma tabela do Word.
g      @r   r   Ng      ?rP      ArialTg333333?)rowsr   cellswidthr6   paragraph_formatr   space_beforespace_afterr   r=   r>   runsr9   r:   nameboldheightr   AT_LEASTheight_rule)tablerowcell	paragraphr   runs         rG   format_tabler      sE   
 zz#C[		!IIabMDDJ "	  zzIID*I(99,.qE)+-a5("4";";I ~~ "1 ' &   

1##I ~~ $ "1 & ) $ zzC[
,55 rI   c                 *   U H  nU R                  5       R                  nUS   US   l        [        US   5       HQ  u  pV[	        U[
        [        R                  45      (       a  US S3XES-      l        M<  [        U5      XES-      l        MS     M     g)z=
Adiciona linhas a uma tabela com base nos dados fornecidos.
r   r   r[    WN)	add_rowr   ro   rn   
isinstancerp   rq   float64str)r   datar5   row_data	row_cellsr   values          rG   add_table_rowsr      s     MMO))	$QK	!!(1+.HA%%!455).s2&6	A##&)%j	A##	 / rI   c                     [        U [        [        R                  45      (       a  [        U 5      /U-  $ [        U [        R                  5      (       a  U R                  5       $ U $ )z@
Garante que um valor seja um array de determinado comprimento.
)r   rp   rq   r   ndarraytolist)r   lengths     rG   ensure_arrayr      sM     %%,--e~&&	E2::	&	&||~LrI   c                     U R                   R                  (       a  U R                   R                  (       d  [        S5      $ [        R
                  " U R                   R                  R                  5        [        [        US9n[        [        X#S9n[        [        US9n[        R                  R                  US9n[        R                  R                  US9n[        R                  R                  US9n[         R                  R                  US9n	 [#        U5      u  pnUR.                  nUR0                  b  UR0                  OSn[3        U5      n[5        UR6                  UR8                  5      n[;        UR<                  UR>                  5      n[A        UR6                  UR8                  UR<                  UR>                  5      n[C        XZUU5      n[E        UUUURF                  US	9n0 n0 n[H        RJ                  " [M        [N        5      5      n[H        RJ                  " [M        [N        5      5      nU Hh  n[P         H[  n[S        UUUU5      n[U        UU5      nU[H        RV                  " U5      -  nU[H        RV                  " U5      -  nUUU '   UUU '   M]     Mj     UU-   nUUUS
.n[Y        XU5      u  n n![H        RJ                  " [M        [N        5      5      n"[H        RJ                  " [M        [N        5      5      n#U R[                  5        H  u  nnU"[H        RV                  " U5      -  n"M!     U!R[                  5        H  u  nnU#[H        RV                  " U5      -  n#M!     U"U#-   n$U"U#U$S.n%0 n&0 n'[H        RJ                  " [M        [N        5      5      n([H        RJ                  " [M        [N        5      5      n)U H  n*[P         H  n[]        UU*UU5      n[_        U*U5      nU&Ra                  U[H        RJ                  " [M        [N        5      5      5      [H        RV                  " U5      -   U&U'   U'Ra                  U[H        RJ                  " [M        [N        5      5      5      [H        RV                  " U5      -   U'U'   U([H        RV                  " U5      -  n(U)[H        RV                  " U5      -  n)M     M     U(U)-   n+U(U)U+S.n,0 n-0 n.[H        RJ                  " [M        [N        5      5      n/[H        RJ                  " [M        [N        5      5      n0U	 Hs  n1[c        UU1U5      n[e        UU1U5      nUU-SU1Rf                   3'   UU.SU1Rf                   3'   U/[H        RV                  " U5      -  n/U0[H        RV                  " U5      -  n0Mu     U/U0-   n2U/U0U2S.n3[i        U5      n4SU4;  a#  [H        RJ                  " [M        [N        5      5      OU4S   SU4;  a#  [H        RJ                  " [M        [N        5      5      OU4S   SU4;  a#  [H        RJ                  " [M        [N        5      5      OU4S   SU4;  a#  [H        RJ                  " [M        [N        5      5      OU4S   S.n5UU$-   U+-   U2-   [H        RV                  " U5S   5      -   U-   [H        RV                  " U5S   5      -   [H        RV                  " U5S   5      -   n6[H        RV                  " U5S   5      U-   n7U7U6-   n8[k        U85      n90 SU_SU_SU_SU%_SU+_SU3_SU5_SU_SU_SU _SU!_SU(_S U)_S!U-_S"U._S#U4_S$U_UUUU[N        UUU6U7U8U9S%.En:[m        5       n;U R                   R                  R                  S&:X  a  [o        U;5        U;Rp                  S   n<[s        S'5      U<l:        [s        S'5      U<l;        [s        S(5      U<l<        [s        S)5      U<l=        S*n=[|        R~                  R                  U=5      (       a=  U;R                  U=[s        S+5      S,9  U;R                  S-   n>[        R                  U>lE        U<R                  R                  S   n?[        R                  U?lE        U?R                  5       n@[|        R~                  R                  U=5      (       a  W@R                  U=[s        S.5      S,9  U;R                  S/S5      nA[        R                  UAlE        U;R                  S0UR                   35        U;R                  S1UR                   35        U;R                  S2[        R                  " 5       R                  S35       35        U;R                  S4S5S69  U;R                  S5[M        [N        5      S5-   S79nBS8UBlP        UBR                  S   R                  nCS9UCS   lS        [        [N        5       H  u  nDnEUEWCUDS5-      lS        M     S:U64S;U74S<U84/nF[        WBUF5        [        UB5        U;R                  S=S5S69  U;R                  5       nGSUGR                  S>5      lW        UGR                  U9S? S@35        U9SA-  nHU;R                  5       nGSUGR                  SB5      lW        UGR                  UHS? SC35        U;R                  SDS5S69  [|        R~                  R                  [        R                  SE5      nI[|        R                  " UISSF9  [        [N        U8UI5      u  nJnKU;R                  SG5        U;R                  UJ[s        SH5      S,9  U;R                  S-   n>[        R                  U>lE        U;R                  UK[s        SH5      S,9  U;R                  S-   n>[        R                  U>lE        [|        R~                  R                  [        R                  SISJUR                   SKUR                   SL35      nL[|        R                  " [|        R~                  R                  UL5      SSF9  U;R                  UL5        [        ULSM5       nM[        UMR                  5       SNSO9nNSPUR                   SKUR                   SL3UNSQ'   UNsS S S 5        $ ! [$         a;  n[&        R(                  " U [+        U5      5        [-        U SUUSS.5      s S nA$ S nAff = f! , (       d  f       g = f! [         a7  n[        SR[+        U5       35        [        SR[+        U5       3SSST9s S nA$ S nAff = f)UNu'   Usuário não autenticado ou sem tenant)id)r   projeto)ambientez+calculotermica/resultados_cargatermica.htmlT)r   r   error   )hlv)total_carga_termicatotal_carga_insolacaototal_parede_calculo)r   r   total_vidro_calculo)r   r   total_porta_calculotelhado_)r   r   total_telhado_calculocarga_sensivel_pessoascarga_latente_pessoascarga_iluminacaocarga_equipamentos)r   r   r   r   r   r   cargas_totais_paredescargas_totais_vidrosr   cargas_totais_telhadoscargas_totais_ambientecargas_termocargas_insolacaocargas_termo_vidroscargas_insolacao_vidrosr   r   cargas_termo_telhadoscargas_insolacao_telhadoscargas_ambientevazao_infiltracao)vazao_renovacaovazao_total_ar_exteriorcalor_sensivel_ar_exteriorcalor_latente_ar_exteriorrz   altitudedensidade_arsomatorio_carga_sensivel_totalsomatorio_carga_latente_totalr{    carga_termica_total_ambiente_maxtestegffffff?gzGa'@g
ףp= @z5/var/www/html/cag/static/relatorio/grf_graph_logo.png   )r   g      ?u%   Relatório Resumido de Carga Térmicaz	Projeto: z
Ambiente: zData: z%d/%m/%Yu   Somatório das Cargas Térmicasr   )level)r   colsz
Table GridzTipo de Cargau   Somatório Carga Sensívelu   Somatório Carga Latenteu   Carga Térmica Totalu   Carga Térmica Total Máximau   Valor Máximo: r[   r   rK   u   Valor Máximo em TR: z TRu)   Gráficos de Variação da Carga Térmicatemp_graphs)exist_oku   Os gráficos abaixo mostram a variação da carga térmica total ao longo do dia. O primeiro gráfico apresenta os valores em Watts (W) e o segundo em Toneladas de Refrigeração (TR). Observe os picos de carga e a variação ao longo das horas do dia.
   
relatoriosrelatorio_resumido__z.docxrbzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)content_typez(attachment; filename=relatorio_resumido_zContent-Dispositionu#   Erro ao gerar relatório resumido: i  )status)duseris_authenticatedtenantr	   r   
set_schemaschema_namer   r   r   r   r   objectsfilterr   r   r   r   FileNotFoundErrorr   errorr   r
   temperatura_internar   r+   r(   	area_piso
pe_direitor)   numero_pessoastaxa_renovacaor*   r&   r'   umidade_absoluta_internarq   zeroslenHORARIOSORIENTACOESr   r   arrayr   itemsr    r   getr$   r#   r   r%   maxr   rH   r4   r   left_marginright_margin
page_widthpage_heightru   rv   existsadd_picturer6   r   r=   r>   r?   r8   add_headingr7   nome_projetonome_ambienter   nowstrftime	add_tablere   r   r   ro   rn   r   r   r   rw   r   
MEDIA_ROOTmakedirsr   dirnamesaveopenr   read	Exceptionprint)Orequest
projeto_idambiente_idr   r   termicosparedesvidrosportastelhadostemperaturas_externasumidade_absoluta_externacalor_latente_aguaer   r   r   r   r   r   r   r   r   r   total_carga_termica_paredestotal_carga_insolacao_paredesparede
orientacaocarga_termicacarga_insolacaor   r   r   r   total_carga_termica_vidrostotal_carga_insolacao_vidrosr   r   cargas_termo_portascargas_insolacao_portastotal_carga_termica_portastotal_carga_insolacao_portasportar   cargas_totais_portasr   r   total_carga_termica_telhadostotal_carga_insolacao_telhadostelhador   r   r   r   r   r   r{   r   contextor@   rB   	logo_pathlast_paragraphfooter_parar   titulor   header_cellsr   hora
somatoriosptr_maxtemp_dirr   r   output_patharqresponsesO                                                                                  rG   gerar_relatorio_resumidor9     s   @X||,,GLL4G4G()RSSgll11==>#G
;$X+O$]XF..''':%%x%8%%x%8??))8)<	Rpq{R|O!=O '::'.'7'7'C7##,X6 :(:L:LhNaNab5h6M6MxOfOfg"B 3 3X5L5LhNeNe#
 &I-@BY&
" %G#$--"%
!  ')hhs8}&=#(*X(?%F)
 =j&RZ\f g"A&*"U+rxx/FF+-/1JJ-0=
|-4C J<1 *   ;=ZZ#>%B$8!
 8Njbj7k44%'XXc(m%<"')xxH'>$)<)B)B)D%J&"((=*AA& *E+B+H+H+J'J(BHH_,EE( ,K 9;WW#=%A#6 
 !"$%'XXc(m%<"')xxH'>$E)
 <ZPXZd e"@
"S2E2I2I*VXV^V^_bck_lVm2nqsqyqy  {H  rI  3I#J/6M6Q6QR\^`^f^fgjksgt^u6vy{  zB  zB  CR  zS  7S'
3*bhh}.EE*,0II, *  9;WW $>%A#6 
 !#$&!')xxH'>$)+#h-)@&G::wPXYM>z7T\]O=J!HWZZL"9:AP%&=>(BHH],CC(*bhh.GG*   !=?] ]#?%C%:"
 <HEAYapApbhhs8}&=  wF  G_  w`@W_n@nRXXc(m%<  uD  E\  u];MUd;dX 7jy  {M  kN=QYh=h"((3x="9n}  S  oT	"
 !   "" HH+,DEF	G
 '' HH+,>?@A HH+,@ABC 	' HH+,CDE%& 	&
 (EGe'e$+./K+L(
w

 $%:
 #$8	

 "#6
 %&<
 %&<
 L
  0
 "#6
 &'>
 "#=
 $%A
 $%:
 ()B
  !
"  !2#
$  /'>*D)B  (.L-J,H0P9
@ j
 <<**g5$ ,,q/$Sk%c{#E]$Tl L	77>>)$$OOIVAYO7 ^^B/N'9'@'@N$ nn//2 2 9 9!!#77>>)$$OOIVC[O9 !H!L-44 	Ig&:&:%;<=Jx'='=&>?@F8<<>#:#::#F"GHI 	9C13x=1+<="zz!}**.Q *GAt%)L1" +
 *+IJ')FG#%AB

 	uj)U 	6a@,0		#$)			5c:"=> 2D826		)*/			VCL$% 	C1M 77<< 3 3]C
Ht, '9('
#m 	 s 	t
 	F2J7+#5#<#< VBZ8+#5#<#<  ggll!'"6"6!7q9O9O8PPUV
 	BGGOOK04@ +t$#CHHJfH 1YY`YmYmXnnopx  qG  qG  pH  HM  /NH*+ %$M	 ! 	NN7CF+'#P"$S  	L	 %$  X3CF8<=A#a&JSVWWXst   A q= Cq= p$ $j<q=  :q,	q= $
q).0q$q)q= $q))q= ,
q:6q= :q= =
r>,r93r>9r>)F)Oru   r   django.confr   django.contribr   django.contrib.auth.decoratorsr   	django.dbr   django.httpr   r	   django.shortcutsr
   r   docxr   docx.sharedr   r   docx.enum.textr   docx.enum.tabler   docx.enum.sectionr   
matplotlibrf   matplotlib.pyplotpyplotrd   numpyrq   ctermica.modelsr   paredes.modelsr   portas.modelsr   projeto.modelsr   telhados.modelsr   termicos.modelsr   vidros.modelsr   cargasparedesr   r   r   cargasvidrosr   cargasportasr   r    r!   cargastelhadosr"   r#   r$   cargastermicosr%   r&   r'   r(   r)   r*   r+   r   r   r0   rH   r   r   r   r   r9   rI   rG   <module>rV     s    	    # 9   ; 6  " - . (  
u    $ !  " # )  y y 0 n n v v   1B % -::@'D%6N1 AX AXrI   