
    ch}                        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< ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD g dZEg dZFd dlmZmGZG d dlmZ d ZHd  ZId! ZJd" ZKd# 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_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sizer/   colorrgbr   CENTER	alignmentfooter)	docwatermark_textsectionr4   paragraph_header
run_headerr>   paragraph_footer
run_footers	            I/var/www/html/cagpublico/cag/calculotermica/relatorio_completo_projeto.pyinserir_marca_daguarG   ?   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           	      <   |D cg c]  }|dz  	 }}d| d}d| 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#                  ||      }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#                  ||      }t        j$                  |d!d"#       t        j&                          ||fS c c}w ))uy   
    Cria gráficos de carga térmica em W e TR para um ambiente específico,
    gerando nomes de arquivos únicos.
    i  graph_w_z.png	graph_tr_)      )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 valor máximo de .2fu    W é atingido às .rL   )rX   fontsizewrap)r   gQ?r   r   )recti,  tight)dpibbox_incheszr-ou'   Variação da Carga Térmica Total (TR)u   Carga Térmica (TR)TRu    TR é atingido às )plt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ambiente_idwcarga_trgraph_w_filenamegraph_tr_filename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                     rF   create_load_graphsr   \   s    #??QD?H? "+d3#K=5 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
k#..A*QObt
 /*77<<
,<=LKK#7;IIK JJwHHXx!4II7R@JJzJJ$%HHTNJJ(# ?1A!C|X>?99X&LL)L<(KKKT
l3//CK=PQRbt
 /*GGLL->?MKK3G<IIK&&q @s   Lc                    | 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   j                  d   j                  D ]  }d	|j                  _         | j                   D ]'  }t        d
      |_        t$        j&                  |_        ) y)uL   
    Formata uma tabela do Word (largura, fonte, centralização etc.).
    g      @r   r   Ng      ?rO      ArialTg333333?)rowsr   cellswidthr5   paragraph_formatr   space_beforespace_afterr   r<   r=   runsr8   r9   nameboldheightr   AT_LEASTheight_rule)tablerowcell	paragraphr   runs         rF   format_tabler      sS    zz %#C[		!IIabM 	%DDJ	%% zz 	(II 	(D*I(99,.qE)+-a5("4";";I ~~ ( "1 '(	(	( zz!}""1%00388  zz 6C[
,556rH   c                 .   |D ]  }| j                         j                  }t        |d         |d   _        t	        |d         D ]M  \  }}t        |t        t        j                  f      r|dd||dz      _        8t        |      ||dz      _        O  y)uf   
    Adiciona linhas a uma tabela, onde data é uma lista de tuplas: (rótulo, array_de_valores).
    r   r   rZ    WN)	add_rowr   strrl   rk   
isinstancerm   rn   float64)r   datarow_data	row_cellsr   values         rF   add_table_rowsr      s      1MMO))	,	!!(1+. 	1HAu%%!45).s2&6	!A##&)%j	!A##		11rH   c                 
   t        | t        t        t        j                  f      rt        |       g|z  S t        | t        j
                        r| j                         S t        | t              rt        |       |k(  r| S dg|z  S )z
    Garante que um valor seja um array de tamanho 'length'.
    Caso seja escalar ou array parcial, transforma em list do tamanho adequado.
            )	r   rm   intrn   r   ndarraytolistlistlen)r   lengths     rF   ensure_arrayr      sj    
 %%bjj12e~&&	E2::	&||~	E4	 SZ6%9uV|rH   c                    | j                  |d       |j                         s| j                  d       y| j                  dt	        |            }d|_        |j                  d   j                  }t        |      D ]  \  }}|||   _	         |D ]O  }	|j                         j                  }
t        |      D ]%  \  }}t        |	|d	      }t        |      |
|   _	        ' Q t        |       y)
u   
    Cria uma tabela no documento Word para um queryset, exibindo
    apenas os campos especificados em 'fields' com rótulos 'headers'.
    rO   levelzNenhum dado cadastrado.Nr   r   cols
Table Gridr   zN/A)add_headingexistsr6   	add_tabler   styler   r   rk   rl   r   getattrr   r   )r?   rf   querysetfieldsheadersr   header_cellsr   r4   objr   fieldvalors                rF   add_table_from_querysetr      s    
 OOEO#??34MMqs6{M3EEK ::a=&&Lw' &	6%Q&  +MMO))	!&) 	+HAuC.E #E
IaL	++ rH   c           	      (.   	 | j                   j                  r| j                   j                  st        d      S t	        j
                  | j                   j                  j                         t        t        |      }t        j                  j                  |      j                  d      }|j                         s't        j                  | d       t!        | d|g dd      S 	 t#        |      \  }}}t+               }| j                   j                  j                  d
k(  rt-        |       |j.                  d   }	t1        d      |	_        t1        d      |	_        t1        d      |	_        t1        d      |	_        t:        j<                  |j?                  dd      _         t:        j<                  |jC                  d|jD                         _         t:        j<                  |jC                  dtG        jH                         jK                  d             _         d}
tL        jN                  j                  |
      r>|jQ                  |
t1        d             t:        j<                  |jR                  d   _         |	jT                  }|jR                  d   }t:        j<                  |_         |jW                         }tL        jN                  j                  |
      r|jQ                  |
t1        d             |jY                          t[        |      D ]  \  }}t        t\        |      }t^        j                  j                  |      }t`        j                  j                  |      }tb        j                  j                  |      }td        j                  j                  |      }|jf                  }|jh                  |jh                  nd}tk        |      }tm        |jn                  |jp                        }ts        |jt                  |jv                        }ty        |jn                  |jp                  |jt                  |jv                        }t{        ||||      }t}        ||||j~                  |      }i }i }t        j                  t        t                    }t        j                  t        t                    } |D ]a  }!t        D ]V  }"t        ||!||"      }#t        |!|"      }$|t        j                  |#      z  }| t        j                  |$      z  } |#||"<   |$||"<   X c || z   }%|| |%d}&t        |||      \  }'}(t        j                  t        t                    })t        j                  t        t                    }*|'j                         D ]  \  }"}+|)t        j                  |+      z  }) |(j                         D ]  \  }"}+|*t        j                  |+      z  }* |)|*z   },|)|*|,d}-i }.i }/t        j                  t        t                    }0t        j                  t        t                    }1t        tb        |      }t        D ]V  }"t        ||||"      }#t        ||"      }$|0t        j                  |#      z  }0|1t        j                  |$      z  }1|#|.|"<   |$|/|"<   X |0|1z   }2|0|1|2d}3i }4i }5t        j                  t        t                    }6t        j                  t        t                    }7|D ]p  }8t        ||8|      }9t        ||8|      }:|6t        j                  |9      z  }6|7t        j                  |:      z  }7|9|4d|8j                   <   |:|5d|8j                   <   r |6|7z   };|6|7|;d}<t        |      }=t        |=j                  dd       t        t                    }>t        |=j                  d!d       t        t                    }?t        |=j                  d"d       t        t                    }@t        |=j                  d#d       t        t                    }A|>|?|@|Ad$}B|%|,z   |2z   |;z   t        j                  |>      z   t        j                  |      z   t        j                  |@      z   t        j                  |A      z   }Ct        j                  |?      t        j                  |      z   }D|C|Dz   }Et        |E      }F|Fd%z  }G|j?                  d&|j                   d'(       |jC                  d)| d*       |jC                  d+|d,d-       |j?                  d.d/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id2|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        |t        t                    }Lt        |t        t                    }Mt        |t        t                    }Nd3|Lfd4|Mfd5|Nfg}Ot        H|O       t        |H       |j?                  d6d/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id7|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        Ht        |j                                      t        |H       |j?                  d8d/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id7|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        Ht        |j                                      t        |H       |j?                  d9d(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id:|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         d;|&d<   fd=|&d>   fd?|&d@   fg}Pt        H|P       t        |H       |j?                  dAd/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id7|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        Ht        |'j                                      t        |H       |j?                  dBd/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id7|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        Ht        |(j                                      t        |H       |j?                  dCd(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id:|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         d;|-d<   fd=|-d>   fd?|-dD   fg}Qt        H|Q       t        |H       |j?                  dEd/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id7|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        Ht        |.j                                      t        |H       |j?                  dFd/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id7|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        Ht        |/j                                      t        |H       |j?                  dGd(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id:|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         d;|3d<   fd=|3d>   fd?|3dH   fg}Rt        H|R       t        |H       |j?                  dId/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }IdJ|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        Ht        |4j                                      t        |H       |j?                  dKd/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }IdJ|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         t        Ht        |5j                                      t        |H       |j?                  dLd(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id:|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         d;|<d<   fd=|<d>   fd?|<dM   fg}St        H|S       t        |H       |j?                  dNd/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id:|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         dO|>fdP|?fdQ@fdRAfg}Tt        H|T       t        |H       |j?                  dSd/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id:|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         dTt        |t        t                    fdUt        |t        t                    fg}Ut        H|U       t        |H       |j?                  dVd/(       |j                  d't        t              d'z   0      }Hd1|H_U        |Hj                  d   j                  }Id:|Id   _X        t[        t              D ]  \  }J}K|KI|Jd'z      _X         dWCfdXDfdYEfg}Vt        H|V       t        |H       |jC                  dZFd[d\       |jC                  d]Gd[d^       |j?                  d_d/(       tL        jN                  j                  t        j                  d`      }WtM        j                  |Wda       t        t        |E|W|j                        \  }X}Y|jQ                  |Xt1        db             t:        j<                  |jR                  d   _         |jQ                  |Yt1        db             t:        j<                  |jR                  d   _         |t        |      d'z
  k  s|jY                           dc|jD                   dd}ZtL        jN                  j                  t        j                  de|Z      }[tM        j                  tL        jN                  j                  |[      da       |j                  |[       t        |[df      5 }\t        |\j                         dgh      }]diZ |]dj<   |]c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        dkt)        |              t        dlt)        |       dmn      cY d	}~S d	}~ww xY w)ou   
    Gera um único relatório Word contendo todos os ambientes do projeto,
    incluindo quebra de página para cada ambiente.
    u'   Usuário não autenticado ou sem tenant)id)projetor   u/   Este projeto não possui ambientes cadastrados.z+calculotermica/resultados_cargatermica.htmlT)r   	ambienteserroNtester   gffffff?gzGa'@g
ףp= @u(   Relatório de Cálculo de Carga Térmicaz	Projeto: zData: z%d/%m/%Yz@/var/www/html/cagpublico/cag/static/relatorio/grf_graph_logo.png   )r   g      ?)ambiente)hlv)total_carga_termicatotal_carga_insolacaototal_parede_calculo)r   r   total_vidro_calculo)r   r   total_portas_calculozTelhado )r   r   total_telhado_calculocarga_sensivel_pessoasr   carga_latente_pessoascarga_iluminacaocarga_equipamentos)r   r   r   r   g     z@z
Ambiente: r   r   z
Altitude: z mzDensidade do Ar: z.4fu    kg/m³u   Vazões de Ar (m³/h)rO   r   r   u   Tipo de Vazãou   Vazão Infiltraçãou   Vazão Renovaçãou   Vazão Total Exterioru1   Cargas Térmicas das Paredes por Orientação (W)u   Orientaçãou%   Cargas de Insolação das Paredes (W)z!Totais das Cargas das Paredes (W)Tipou   Total Carga Térmicar   u   Total Carga Insolaçãor   zTotal Geralr   u   Cargas Térmicas dos Vidros (W)u$   Cargas de Insolação dos Vidros (W)z Totais das Cargas dos Vidros (W)r   u   Cargas Térmicas das Portas (W)u$   Cargas de Insolação das Portas (W)zTotais das Portas (W)r   u!   Cargas Térmicas dos Telhados (W)r   u&   Cargas de Insolação dos Telhados (W)zTotais dos Telhados (W)r   zCargas Internas do Ambiente (W)u   Carga Sensível PessoaszCarga Latente Pessoasu   Carga IluminaçãozCarga EquipamentoszCalor do Ar Exterior (W)u   Calor SensívelzCalor Latenteu#   Somatório das Cargas Térmicas (W)u   Somatório Carga Sensívelu   Somatório Carga Latenteu   Carga Térmica Totalu   Carga Térmica Máxima: rZ   r   u%   Em Toneladas de Refrigeração (TR): z TRu)   Gráficos de Variação de Carga Térmicatemp_graphs)exist_ok	   relatorio_calculo_z.docx
relatoriosrbzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)content_typezattachment; filename=zContent-DispositionzErro detalhado: u   Erro ao gerar relatório: i  )status)huseris_authenticatedtenantr	   r   
set_schemaschema_namer   r   r   objectsfilterorder_byr   r   warningr
   r   FileNotFoundErrorerrorr   r   rG   r3   r   left_marginright_margin
page_widthpage_heightr   r<   r   r=   r6   nome_projetor   nowstrftimerr   rs   add_picturer5   r>   r7   add_page_breakrk   r   r   r   r   r   temperatura_internaaltituder*   r'   	area_piso
pe_direitor(   numero_pessoastaxa_renovacaor)   r%   r&   umidade_absoluta_internarn   zerosr   HORARIOSORIENTACOESr   r   arrayr   itemsr    r   r#   r"   r   r$   r   getmaxnome_ambienter   r   r   r   rl   r   r   r   rt   r   
MEDIA_ROOTmakedirsr   dirnamesaveopenr   read	Exceptionprint)^request
projeto_idr   r   temperaturas_externasumidade_absoluta_externacalor_latente_aguaer?   rA   	logo_pathr>   footer_pararE   idxr   termicosparedesvidrosportatelhadosr   r   densidade_arvazao_infiltracaovazao_renovacaovazao_total_ar_exteriorcalor_sensivel_ar_exteriorcalor_latente_ar_exteriorcargas_termocargas_insolacaototal_carga_termica_paredestotal_carga_insolacao_paredesparede
orientacaocarga_termicacarga_insolacaor   cargas_totais_paredescargas_termo_vidroscargas_insolacao_vidrostotal_carga_termica_vidrostotal_carga_insolacao_vidrosvalr   cargas_totais_vidroscargas_termo_portascargas_insolacao_portastotal_carga_termica_portastotal_carga_insolacao_portasr   cargas_totais_portascargas_termo_telhadoscargas_insolacao_telhadostotal_carga_termica_telhadostotal_carga_insolacao_telhadostelhadocarga_termica_telhcarga_insolacao_telhr   cargas_totais_telhadoscargas_ambientec_sensivel_pessoasc_latente_pessoasc_iluminacaoc_equipamentoscargas_totais_ambientesomatorio_carga_sensivel_totalsomatorio_carga_latente_totalrx    carga_termica_total_ambiente_maxtr_maxr   r   r   horav_infilv_renovv_totalvazoes_dataparede_data
vidro_dataportas_datatelhado_dataamb_dataar_data	soma_datatemp_dirr   r   nome_arquivooutput_pathdoc_fileresponses^                                                                                                 rF   gerar_relatorio_todos_ambientesrY     s   }O||,,GLL4G4G()RSSgll11==>#G
;$$++G+<EEdK	!W&WX'#P"S  	Rpq{R|O!#;=O j
 <<**g5$ ,,q/$Sk%c{#E]$Tl TfSlSlBAFPJ\JcJcIg&:&:%;<=GVhVoVoF8<<>#:#::#F"GHIS W	77>>)$OOIVAYO7+=+D+DCNN2( ''* 2 9 9 ((*
77>>)$""9F3K"@ 	 'y1 e	%MC(JHnn++X+>G]]))8)<FMM((((;E--x-@H #+">">+2+;+;+Gw''QH0:L !>h>P>PRZReRe f9(:Q:QS[SjSjkO&F""##''''	'# *M%#'	*& )K'(11&)% L!*,((3x=*A',.HHS],C)! C"- 
CJ$A"FHj%M 'F
'O 0288M3JJ/1RXXo5NN1/<L,3B$Z0
CC $?A^#^ 'B)F(<%! <RFH<8!8 *,#h-)@&+-88CM+B(#6#<#<#> <
C*bhhsm;*<#:#@#@#B >
C,=,> #=?["['A)E':$  #%&(#)+#h-)@&+-88CM+B(%eh?E) 
F
 <x! #A:# +bhh}.EE*,0II,2?#J/6E'
3
F $>@\#\  (B)E(<$  %'!(*%+-88CM+B(-/XXc(m-D*# 
Z%C&" (H($ -9K0LL,."((;O2PP.AS%&=>EY)HWZZL*AB
Z %ACa$a!'C)G)>&" @IO!-o.A.ABZ\_.`befnbo!p!-o.A.ABY[^._befnbo!p!-o.A.ABTVY.Zcfgocp!qL!-o.A.ABVX[.\cfgocp!qN +=):$0&4	&" %#$$% && +,	-
 345 &' () + *+234 * ,JLi+i(/23O/P,5>F
 OOj)?)?(@AOK 
8*B78 1,s1C7KL OO31O=MMqs8}QM?E&EK ::a=..L#3LO $X. .4)-QqS!&. ##4c(mDG"?CMBG"#:CMJG'1%w/('2K
 5+. OOOWXOYMMqs8}QM?E&EK ::a=..L#1LO $X. .4)-QqS!&.5$|'9'9';"<=OOC1OMMMqs8}QM?E&EK ::a=..L#1LO $X. .4)-QqS!&.5$'7'='='?"@AOO?qOIMMqs8}QM?E&EK ::a=..L#)LO $X. .4)-QqS!&. ()>?T)UV*,ABY,Z[ 56L MNK
 5+. OO=QOGMMqs8}QM?E&EK ::a=..L#1LO $X. .4)-QqS!&.5$':'@'@'B"CDOOB!OLMMqs8}QM?E&EK ::a=..L#1LO $X. .4)-QqS!&.5$'>'D'D'F"GHOO>aOHMMqs8}QM?E&EK ::a=..L#)LO $X. .4)-QqS!&. ()=>S)TU*,@AX,YZ 45J KLJ
 5*- OO=QOGMMqs8}QM?E&EK ::a=..L#1LO $X. .4)-QqS!&.5$':'@'@'B"CDOOB!OLMMqs8}QM?E&EK ::a=..L#1LO $X. .4)-QqS!&.5$'>'D'D'F"GHOO31O=MMqs8}QM?E&EK ::a=..L#)LO $X. .4)-QqS!&. ()=>S)TU*,@AX,YZ 45K LMK
 5+. OO?qOIMMqs8}QM?E&EK ::a=..L#,LO $X. .4)-QqS!&.5$'<'B'B'D"EFOODAONMMqs8}QM?E&EK ::a=..L#,LO $X. .4)-QqS!&.5$'@'F'F'H"IJOO5QO?MMqs8}QM?E&EK ::a=..L#)LO $X. .4)-QqS!&. ()?@U)VW*,BCZ,[\ 67N OPL
 5,/ OO=QOGMMqs8}QM?E&EK ::a=..L#)LO $X. .4)-QqS!&. +,>?(*;<%|4%~6	H 5(+ OO6aO@MMqs8}QM?E&EK ::a=..L#)LO $X. .4)-QqS!&. #L1KSQY]$[\ <0I3x=#YZG 5'* OOAOKMMqs8}QM?E&EK ::a=..L#)LO $X. .4)-QqS!&. ./MN+-JK')EFI
 5), *+KC*PPRS 7s|3G
 OOGqOQww||H$7$7GHKK40*<,	+'L- OOLq	O:+=+D+DCNN2(OOMO;+=+D+DCNN2( S^a''""$Ke	%P ,G,@,@+AGggll8#6#6lS
BGGOOK04@ +t$ 	#fH 1Fl^.TH*+	 	} ! 	NN7CF+'#P"&S  	|	 	  O Q)*8QA#NNOs   6A[ B)A[ $AY< 3AR5A[ V*B#A[ Y%A[Y2	A[ Y<	AZ?Z/AZ:Z4AZ?Z5A[ Z:AZ?Z?A[ [A[[A[ [A[ [	A\[/A\\A\\A\)Orr   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   
matplotlibusematplotlib.pyplotpyplotrc   numpyrn   ctermica.modelsr   paredes.modelsr   portas.modelsr   projeto.modelsr   telhados.modelsr   termicos.modelsr   vidros.modelsr   cargasparedesr   r   r   cargasvidrosr   cargasportasr   r    r!   cargastelhadosr"   r#   cargastermicosr$   r%   r&   r'   r(   r)   r*   r   r   r/   rG   r   r   r   r   r   rY   rH   rF   <module>rw     s    	    # 9   ; 6  " - . (  
u    $ !  " # )  
 1 n n   1 % -::>'B6<16 BO BOrH   