
    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<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_completo.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   L   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                 0   	 | 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        |;jp                  d   }<|<j                  }?|?j                  d   }@t        j                  |@_E        |@j                         }A|Aj                  |=ts        d.      ,       |;j                  d/      }Bt        j                  |B_E        |;j                  d0|j                          |;j                  d1|j                          |;j                  d2t        j                         j                  d3              |;j                  d4d56       |;j                         }Cd|Cj                  d7      _O        |Cj                  | d8       |;j                         }Cd|Cj                  d9      _O        |Cj                  |d:d;       |;j                  d<d56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }Ed?|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        |tM        tN                    }t        |tM        tN                    }t        |tM        tN                    }d@|fdA|fdB|fg}Ht        D|H       t        |D       |;j                  dCd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        D|j[                                t        |D       |;j                  dEd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        D|j[                                t        |D       |;j                  dFdG6       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdH|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         dI|d   fdJ|d    fdK|dL   fg}It        D|I       t        |D       |;j                  dMd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        D| j[                                t        |D       |;j                  dNd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        D|!j[                                t        |D       |;j                  dOdG6       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         dI|%d   fdJ|%d    fdK|%dP   fg}Jt        D|J       t        |D       |;j                  dQd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        D|&j[                                t        |D       |;j                  dRd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        D|'j[                                t        |D       |;j                  dSdG6       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdH|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         dI|,d   fdJ|,d    fdK|,d   fg}Kt        D|K       t        |D       |;j                  dTd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        D|-j[                                t        |D       |;j                  dUd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        D|.j[                                t        |D       |;j                  dVdG6       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdD|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         dI|3d   fdJ|3d    fdK|3dW   fg}Lt        D|L       t        |D       |;j                  dXd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdY|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        |5d   tM        tN                    }Mt        |5d   tM        tN                    }Nt        |5d   tM        tN                    }Ot        |5d   tM        tN                    }PdZ|Mfd[|Nfd\|Ofd]|Pfg}Qt        D|Q       t        |D       |;j                  d^d56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }Ed_|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         t        |tM        tN                    }Rt        |tM        tN                    }Sd`|Rfda|Sfg}Tt        D|T       t        |D       |;j                  dbd56       |;j                  d5tM        tN              d5z   =      }Dd>|D_Q        |Dj                  d   j                  }EdY|Ed   _T        t        tN              D ]  \  }F}G|GE|Fd5z      _T         dc|6fdd|7fde|8fg}Ut        D|U       t        |D       |;j                  dfd56       |;j                         }Cd|Cj                  dg      _O        |Cj                  |9dhdi       |9djz  }V|;j                         }Cd|Cj                  dk      _O        |Cj                  |Vdhdl       |;j                  dmd56       t|        j~                  j                  t        j                  dn      }Wt}        j                  |Wdo       t        tN        |8|W      \  }X}Y|;j                  dp       |;j                  |Xts        dq      ,       |;j                  d-   }>t        j                  |>_E        |;j                  |Yts        dq      ,       |;j                  d-   }>t        j                  |>_E        t|        j~                  j                  t        j                  drds|j                   dt|j                   du      }Zt}        j                  t|        j~                  j                  |Z      do       |;j                  |Z       t        |Zdv      5 }[t        |[j                         dwx      }\dy|j                   dt|j                   du|\dz<   |\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        d{t+        |              t        d|t+        |       d}~      cY d }~S d }~ww xY w)Nu'   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 de Cálculo de Carga Térmicaz	Projeto: z
Ambiente: zData: z%d/%m/%Yu   Informações Básicasr   )levelz
Altitude: z mzDensidade do Ar: z.4fu    kg/m³u   Vazões de Ar)r   colsz
Table Gridu   Tipo de Vazãou   Vazão de Infiltraçãou   Vazão de Renovaçãou   Vazão Total de Ar Exterioru-   Cargas Térmicas das Paredes por Orientaçãou   Orientaçãou2   Cargas de Insolação das Paredes por OrientaçãozTotais das Cargas das ParedesrP   Tipou   Total Carga Térmicau   Total Carga InsolaçãozTotal Geralr   u,   Cargas Térmicas dos Vidros por Orientaçãou1   Cargas de Insolação dos Vidros por OrientaçãozTotais das Cargas dos Vidrosr   u,   Cargas Térmicas das Portas por Orientaçãou1   Cargas de Insolação das Portas por OrientaçãozTotais das Cargas das Portasu   Cargas Térmicas dos Telhadosu"   Cargas de Insolação dos TelhadoszTotais das Cargas dos Telhadosr   zCargas do AmbientezTipo de Cargau   Carga Sensível PessoaszCarga Latente Pessoasu   Carga IluminaçãozCarga EquipamentoszCalor do Ar ExteriorzTipo de Caloru   Calor SensívelzCalor Latenteu   Somatório das Cargas Térmicasu   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_calculo__z.docxrbzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)content_typez'attachment; filename=relatorio_calculo_zContent-DispositionzErro detalhado: u   Erro ao gerar relatório: i  )status)e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strftimer   	add_tablere   r   r   ro   rn   r   r   r   rw   r   
MEDIA_ROOTmakedirsr   dirnamesaveopenr   read	Exceptionprint)]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_paragraphr?   footer_parar   ri   pr   header_cellsr   horavazoestotais_paredetotais_vidrototais_portastotais_telhadocarga_sensivelcarga_latenter   r   
cargas_ambcalor_sensivel_valorescalor_latente_valores
calores_ar
somatoriostr_maxtemp_dirr   r   output_pathdoc_fileresponses]                                                                                                rG   gerar_relatorio_completorD     sW   E	O||,,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$ ,,q/''* 2 9 9!!#	5  JK,33 	Ig&:&:%;<=Jx'='=&>?@F8<<>#:#::#F"GHI 	0:'+		,$			XJb/".2		%&+			\#&g./ 	q113x=1+<="zz!}**/Q * 	*GAt%)L1"	* )):CMJ&HF"./FH"V '(9:$o6*,CD
 	uf%U 	GqQ 13x=1+<="zz!}**-Q * 	*GAt%)L1"	* 	ul0023U 	LTUV13x=1+<="zz!}**-Q * 	*GAt%)L1"	* 	u.4467U 	7qA13x=1+<="zz!}**%Q * 	*GAt%)L1"	* $%:;P%QR&(=>U(VW12HIJ
 	um,U 	FaP13x=1+<="zz!}**-Q * 	*GAt%)L1"	* 	u1779:U 	KSTU13x=1+<="zz!}**-Q * 	*GAt%)L1"	* 	u5;;=>U 	6a@13x=1+<="zz!}**-Q * 	*GAt%)L1"	* $%9:O%PQ&(<=T(UV01FGH
 	ul+U 	FaP13x=1+<="zz!}**-Q * 	*GAt%)L1"	* 	u1779:U 	KSTU13x=1+<="zz!}**-Q * 	*GAt%)L1"	* 	u5;;=>U 	6a@13x=1+<="zz!}**%Q * 	*GAt%)L1"	* $%9:O%PQ&(<=T(UV01FGH
 	um,U 	7qA13x=1+<="zz!}**-Q * 	*GAt%)L1"	* 	u399;<U 	<AF13x=1+<="zz!}**-Q * 	*GAt%)L1"	* 	u7==?@U 	8B13x=1+<="zz!}**-Q * 	*GAt%)L1"	* $%;<Q%RS&(>?V(WX23JKL
 	un-U 	,A613x=1+<="zz!}**.Q * 	*GAt%)L1"	* &&<=U&VX[\dXef$%;<S%TVYZbVcd'(>?Q(RTWX`Tab)*@AU*VX[\dXef '7$m4!#34!#56	

 	uj)U 	.a813x=1+<="zz!}**.Q * 	*GAt%)L1"	* "..H#h-!X ,-FH V  6734


 	uj)U 	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#<#<  ggll8#6#6"4W5I5I4J!HLbLbKcch ik
BGGOOK04@ +t$ 	#HMMO-vxH0WX_XlXlWmmnow  pF  pF  oG  GL  /MH*+		 	Y ! 	NN7CF+'#P"$S  	X	 	  O Q)*8QA#NNOs   6A_ C'A_ !A]/ 0AW8A_ \(=A^5]%	A_ ]/	A^2]8/A^-^'A^2^(A_ ^-A^2^2A_ ^5A^>^:A_ ^>A_ _	A`_
/A_?_9A`_?A`)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   rD   rI   rG   <module>ra     s    	    # 9   ; 6  " - . (  
u    $ !  " # )  y y 0 n n v v   1B % -:<@'D%6N1 F	O F	OrI   