
    chY                        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mZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZ d dlZ ej8                  d       d dlm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l0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE g dZFg dZGd dlmZmHZH d dlmZ d ZId  ZJd! ZKd%d"ZLd# ZMed$        ZNy)&    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                    d}| j                   D ]e  }|j                  }|j                  r|j                  d   n|j                         }|j	                  |      }t        d      |j                  _        t        ddd      |j                  j                  _
        t        j                  |_        |j	                  d|z          |j                  }|j                  r|j                  d   n|j                         }|j	                  |      }t        d      |j                  _        t        ddd      |j                  j                  _
        t        j                  |_        |j	                  d|z          h y)uq   
    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	            J/var/www/html/cagpublico/cag/calculotermica/relatorio_ambiente_resumido.pyinserir_marca_daguarH   .   s7    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           	      b   |D cg c]  }|dz  	 }}t         j                  j                  d       t        j                  d       t        j                  | |dd       t        j
                  dd	
       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        |      D ]5  \  }}t        j                  |t        |      t        |      dddd       7 t        j                  |      }||   }| |   }	t        j                  ddd|dd|	 dddd       t        j                   g d       t"        j$                  j'                  |d      }
t        j(                  |
d d!"       t        j*                          t        j                  d       t        j                  | |d#d       t        j
                  d$d	
       t        j                  d       t        j                  d%       t        j                  d       t        j                  d       t        |      D ]#  \  }}t        j                  |||dd&dd       % t        j                  |      }||   }| |   }t        j                  ddd|dd'| dddd       t        j                   g d       t"        j$                  j'                  |d(      }t        j(                  |d d!"       t        j*                          |
|fS c c}w ))u5   
    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HHX3UaHII6B?JJzJJ#$HHTNJJ 67 L1E!Hq#a0X(KL ))89K.{;K+&J KKTnoz{~n  @P  Q[  P\  \]  ^bt5 /*77<<
M:LKK#7;IIK JJwHHXx!4II7R@JJzJJ$%HHTNJJ (# ?1A!C|X>? 99X&LL)L<(K KKTno{|  oA  AR  S^  R_  _`  abt5 /*GGLL^<MKK3G<IIK&&w >s   L,c                 F   | j                   D ]C  }t        d      |j                  d   _        |j                  dd D ]  }t        d      |_         E | j                   D ]  }|j                  D ]  }|j                  d   }|j
                  }t        d      |_        t        d      |_        t        j                  |_        |j                  D ]-  }t        d      |j                  _        d|j                  _        /   | j                   d   j                  D ]O  }|j                  D ]>  }|j                  D ]-  }d	|j                  _        t        d      |j                  _        / @ Q | j                   D ]'  }t        d
      |_        t$        j&                  |_        ) y)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      sr   
 zz %#C[		!IIabM 	%DDJ	%	% zz (II 	(D*I(99,.qE)+-a5("4";";I ~~ ( "1 '(	(( 

1## & 	&I ~~ & $ "1&	&& zz 6C[
,556rI   c                    |D ]  }| j                         j                  }|d   |d   _        t        |d         D ]M  \  }}t	        |t
        t        j                  f      r|dd||dz      _        8t        |      ||dz      _        O  y)zE
    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      1MMO))	$QK	!!(1+. 	1HAu%%!45).s2&6	!A##&)%j	!A##		11rI   c                     t        | t        t        j                  f      rt        |       g|z  S t        | t        j                        r| j                         S | S )zH
    Garante que um valor seja um array de determinado comprimento.
    )r   rp   rq   r   ndarraytolist)r   lengths     rG   ensure_arrayr      sG     %%,-e~&&	E2::	&||~LrI   c                 V   	 | j                   j                  r| j                   j                  st        d      S t	        j
                  | j                   j                  j                         t        t        |      }t        t        ||      }t        t        |      }t        j                  j                  |      }t        j                  j                  |      }t        j                  j                  |      }t         j                  j                  |      }		 t#        |      \  }
}}|j.                  }|j0                  |j0                  nd}t3        |      }t5        |j6                  |j8                        }t;        |j<                  |j>                        }tA        |j6                  |j8                  |j<                  |j>                        }tC        ||
||      }tE        ||||jF                  |	      }i }i }tI        jJ                  tM        tN                    }tI        jJ                  tM        tN                    }|D ]c  }tP        D ]X  }tS        ||||      }tU        ||      }|tI        jV                  |      z  }|tI        jV                  |      z  }||| <   ||| <   Z e ||z   }|||d
}tY        |||      \  } }!tI        jJ                  tM        tN                    }"tI        jJ                  tM        tN                    }#| j[                         D ]  \  }}|"tI        jV                  |      z  }" |!j[                         D ]  \  }}|#tI        jV                  |      z  }# |"|#z   }$|"|#|$d}%i }&i }'tI        jJ                  tM        tN                    }(tI        jJ                  tM        tN                    })|D ]  }*tP        D ]  }t]        ||*||      }t_        |*|      }|&ja                  |tI        jJ                  tM        tN                          tI        jV                  |      z   |&|<   |'ja                  |tI        jJ                  tM        tN                          tI        jV                  |      z   |'|<   |(tI        jV                  |      z  }(|)tI        jV                  |      z  })  |(|)z   }+|(|)|+d},i }-i }.tI        jJ                  tM        tN                    }/tI        jJ                  tM        tN                    }0|	D ]p  }1tc        ||1|      }te        ||1|      }||-d|1jf                   <   ||.d|1jf                   <   |/tI        jV                  |      z  }/|0tI        jV                  |      z  }0r |/|0z   }2|/|0|2d}3ti        |      }4d|4vr"tI        jJ                  tM        tN                    n|4d   d|4vr"tI        jJ                  tM        tN                    n|4d   d|4vr"tI        jJ                  tM        tN                    n|4d   d|4vr"tI        jJ                  tM        tN                    n|4d   d}5||$z   |+z   |2z   tI        jV                  |5d         z   |z   tI        jV                  |5d         z   tI        jV                  |5d         z   }6tI        jV                  |5d         |z   }7|7|6z   }8tk        |8      }9i d|d|d|d|%d|+d|3d|5d|d|d| d|!d|(d |)d!|-d"|.d#|4d$|||||tN        |||6|7|8|9d%}:tm               };| j                   j                  j                  d&k(  rto        |;       |;jp                  d   }<ts        d'      |<_:        ts        d'      |<_;        ts        d(      |<_<        ts        d)      |<_=        d*}=t|        j~                  j                  |=      r@|;j                  |=ts        d+      ,       |;j                  d-   }>t        j                  |>_E        |<j                  j                  d   }?t        j                  |?_E        |?j                         }@t|        j~                  j                  |=      r@j                  |=ts        d.      ,       |;j                  d/d      }At        j                  |A_E        |;j                  d0|j                          |;j                  d1|j                          |;j                  d2t        j                         j                  d3              |;j                  d4d56       |;j                  d5tM        tN              d5z   7      }Bd8|B_P        |Bj                  d   j                  }Cd9|Cd   _S        t        tN              D ]  \  }D}E|EC|Dd5z      _S         d:|6fd;|7fd<|8fg}Ft        B|F       t        |B       |;j                  d=d56       |;j                         }Gd|Gj                  d>      _W        |Gj                  |9d?d@       |9dAz  }H|;j                         }Gd|Gj                  dB      _W        |Gj                  |Hd?dC       |;j                  dDd56       t|        j~                  j                  t        j                  dE      }It}        j                  |IdF       t        tN        |8|I      \  }J}K|;j                  dG       |;j                  |Jts        dH      ,       |;j                  d-   }>t        j                  |>_E        |;j                  |Kts        dH      ,       |;j                  d-   }>t        j                  |>_E        t|        j~                  j                  t        j                  dIdJ|j                   dK|j                   dL      }Lt}        j                  t|        j~                  j                  |L      dF       |;j                  |L       t        |LdM      5 }Mt        |Mj                         dNO      }NdP|j                   dK|j                   dL|NdQ<   |Ncd d d        S # t$        $ r:}t'        j(                  | t+        |             t-        | d||dd      cY d }~S d }~ww xY w# 1 sw Y   y xY w# t        $ r:}t        dRt+        |              t        dRt+        |       dST      cY d }~S d }~ww xY w)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= @z@/var/www/html/cagpublico/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+w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(?% 		DF) D
 =j&RZ\f g"A&*"U+rxx/FF+-/1JJ-0=
|-4C J<1D		D  ;=ZZ#>%B$8!
 8NjZ`bj7k44%'XXc(m%<"')xxH'>$)<)B)B)D 	B%J&"((=*AA&	B+B+H+H+J 	F'J(BHH_,EE(	F 9;WW#=%A#6 
 !"$%'XXc(m%<"')xxH'>$ 		JE) J
 <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,J		J 9;WW $>%A#6 
 !#$&!')xxH'>$)+#h-)@& 	HG::wPXYM>z7T\]O=J!HWZZL"9:AP%&=>(BHH],CC(*bhh.GG*	H !=?] ]#?%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 W	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sr   6q% C'q% !p 0jq% =q		q% 	q/qqq% qq% q"q% "q% %	r(./r#r(#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   