
    {g}                        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j        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%             ZNdS )&    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 ]O}|j        }|j        r|j        d         n|                                }|                    |          }t          d          |j        _        t          ddd          |j        j	        _
        t          j        |_        |                    d|z              |j        }|j        r|j        d         n|                                }|                    |          }t          d          |j        _        t          ddd          |j        j	        _
        t          j        |_        |                    d|z              QdS )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	            >/var/www/html/cag/calculotermica/relatorio_completo_projeto.pyinserir_marca_daguarG   ?   sL    EN< : :393D`6,Q//&J^J^J`J`%--n==
!"vv
$,S#s$;$;
!%7%>" 	  .!8999 393D`6,Q//&J^J^J`J`%--n==
!"vv
$,S#s$;$;
!%7%>" 	  .!89999+: :    c           	      "   d |D             }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 ]<\  }}t          j	        |t          |          t          |          dddd           =t          j        |          }	||	         }
| |	         }t          j        ddd|
dd| dddd           t          j        g d            t          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                            ||          }t          j        |d!d"#           t          j                     ||fS ))uy   
    Cria gráficos de carga térmica em W e TR para um ambiente específico,
    gerando nomes de arquivos únicos.
    c                     g | ]}|d z  S )i   ).0ws     rF   
<listcomp>z&create_load_graphs.<locals>.<listcomp>b   s    ???QD???rH   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 .rQ   )r]   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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   \   sO    @?">???H 4+3335K555 JwHX3UaHHHHI6B????JzJ#$$$HTNNNJ677 L L1E!HHq0000X(KKKKK)899K.{;K+&JKTOkOOO*OOObt   
 ///****7<<
,<==LK#7;;;;IKKK JwHXx!4444I7R@@@@JzJ$%%%HTNNNJ(## ? ?1A!||||X>>>>>9X&&LL)L<(KKTRlRRRKRRRbt   
 ///****GLL->??MK3G<<<<IKKK&&rH   c                    | j         D ]G}t          d          |j        d         _        |j        dd         D ]}t          d          |_        H| 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        |_        (dS )uL   
    Formata uma tabela do Word (largura, fonte, centralização etc.).
    g      @r   r   Ng      ?rT      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      sX    z % %#C[[	!IabbM 	% 	%DDJJ	% z 	( 	(I 	( 	(D*I(9,.qEE)+-a55("4";I ~ ( ( "1 '(	( z!}"1%038   z 6 6C[[
,56 6rH   c                 ^   |D ]}|                                  j        }t          |d                   |d         _        t	          |d                   D ]X\  }}t          |t          t          j        f          r|dd||dz            _        ;t          |          ||dz            _        YdS )uf   
    Adiciona linhas a uma tabela, onde data é uma lista de tuplas: (rótulo, array_de_valores).
    r   r   r_    WN)	add_rowr   strrq   rp   
isinstancerr   rs   float64)r   datarow_data	row_cellsr   values         rF   add_table_rowsr      s      1 1MMOO)	,,	!!(1+.. 	1 	1HAu%%!455 1).&6&6&6&6	!A###&)%jj	!A###		11 1rH   c                 2   t          | t          t          t          j        f          rt          |           g|z  S t          | t          j                  r|                                 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   rr   intrs   r   ndarraytolistlistlen)r   lengths     rF   ensure_arrayr      s    
 %%bj122 e~&&	E2:	&	& ||~~	E4	 	  SZZ6%9%9uV|rH   c                 "   |                      |d           |                                s|                     d           dS |                     dt	          |                    }d|_        |j        d         j        }t          |          D ]\  }}|||         _	        |D ][}	|
                                j        }
t          |          D ]0\  }}t          |	|d	          }t          |          |
|         _	        1\t          |           dS )
u   
    Cria uma tabela no documento Word para um queryset, exibindo
    apenas os campos especificados em 'fields' com rótulos 'headers'.
    rT   levelzNenhum dado cadastrado.Nr   r   cols
Table Gridr   zN/A)add_headingexistsr6   	add_tabler   styler   r   rp   rq   r   getattrr   r   )r?   rk   querysetfieldsheadersr   header_cellsr   r4   objr   fieldvalors                rF   add_table_from_querysetr      s   
 OOEO###?? 3444MMqs6{{M33EEK :a=&Lw'' & &	6%Q  + +MMOO)	!&)) 	+ 	+HAuC..E #E

IaL	+ rH   c           	      23   	 | j         j        r| j         j        st          d          S t	          j        | j         j        j                   t          t          |          }t          j
                            |                              d          }|                                s*t          j        | d           t!          | d|g dd          S 	 t#          |          \  }}}nN# t$          $ rA}t          j        | t)          |                     t!          | d||dd          cY d	}~S d	}~ww xY wt+                      }| j         j        j        d
k    rt-          |           |j        d         }	t1          d          |	_        t1          d          |	_        t1          d          |	_        t1          d          |	_        t:          j        |                    dd          _         t:          j        |!                    d|j"                   _         t:          j        |!                    dtG          j$                    %                    d                     _         d}
tL          j'                            |
          r@|(                    |
t1          d                     t:          j        |j)        d         _         |	j*        }|j)        d         }t:          j        |_         |+                                }tL          j'                            |
          r$|(                    |
t1          d                     |,                                 t[          |          D ]
\  }}t          t\          |          }t^          j
                            |          }t`          j
                            |          }tb          j
                            |          }td          j
                            |          }|j3        }|j4        |j4        nd}tk          |          }tm          |j7        |j8                  }ts          |j:        |j;                  }ty          |j7        |j8        |j:        |j;                  }t{          ||||          }t}          ||||j?        |          }i }i }t          jA        t          t                              }t          jA        t          t                              } |D ]f}!t          D ]\}"t          ||!||"          }#t          |!|"          }$|t          jG        |#          z  }| t          jG        |$          z  } |#||"<   |$||"<   ]g|| z   }%|| |%d}&t          |||          \  }'}(t          jA        t          t                              })t          jA        t          t                              }*|'I                                D ]\  }"}+|)t          jG        |+          z  })|(I                                D ]\  }"}+|*t          jG        |+          z  }*|)|*z   },|)|*|,d}-i }.i }/t          jA        t          t                              }0t          jA        t          t                              }1t          tb          |          }t          D ]\}"t          ||||"          }#t          ||"          }$|0t          jG        |#          z  }0|1t          jG        |$          z  }1|#|.|"<   |$|/|"<   ]|0|1z   }2|0|1|2d}3i }4i }5t          jA        t          t                              }6t          jA        t          t                              }7|D ]l}8t          ||8|          }9t          ||8|          }:|6t          jG        |9          z  }6|7t          jG        |:          z  }7|9|4d|8jN         <   |:|5d|8jN         <   m|6|7z   };|6|7|;d}<t          |          }=t          |=Q                    dd           t          t                              }>t          |=Q                    d!d           t          t                              }?t          |=Q                    d"d           t          t                              }@t          |=Q                    d#d           t          t                              }A|>|?|@|Ad$}B|%|,z   |2z   |;z   t          jG        |>          z   t          jG        |          z   t          jG        |@          z   t          jG        |A          z   }Ct          jG        |?          t          jG        |          z   }D|C|Dz   }Et          |E          }F|Fd%z  }G|                    d&|jS         d'(           |!                    d)| d*           |!                    d+|d,d-           |                    d.d/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }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           |                    d6d/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }Id7|Id         _X        t[          t                    D ]\  }J}K|K|I|Jd'z            _X        t          |Ht          |I                                                     t          |H           |                    d8d/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }Id7|Id         _X        t[          t                    D ]\  }J}K|K|I|Jd'z            _X        t          |Ht          |I                                                     t          |H           |                    d9d(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }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           |                    dAd/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }Id7|Id         _X        t[          t                    D ]\  }J}K|K|I|Jd'z            _X        t          |Ht          |'I                                                     t          |H           |                    dBd/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }Id7|Id         _X        t[          t                    D ]\  }J}K|K|I|Jd'z            _X        t          |Ht          |(I                                                     t          |H           |                    dCd(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }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           |                    dEd/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }Id7|Id         _X        t[          t                    D ]\  }J}K|K|I|Jd'z            _X        t          |Ht          |.I                                                     t          |H           |                    dFd/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }Id7|Id         _X        t[          t                    D ]\  }J}K|K|I|Jd'z            _X        t          |Ht          |/I                                                     t          |H           |                    dGd(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }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           |                    dId/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }IdJ|Id         _X        t[          t                    D ]\  }J}K|K|I|Jd'z            _X        t          |Ht          |4I                                                     t          |H           |                    dKd/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }IdJ|Id         _X        t[          t                    D ]\  }J}K|K|I|Jd'z            _X        t          |Ht          |5I                                                     t          |H           |                    dLd(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }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           |                    dNd/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }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           |                    dSd/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }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           |                    dVd/(           |T                    d't          t                    d'z   0          }Hd1|H_U        |HjV        d         jW        }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           |!                    dZ|Fd[d\           |!                    d]|Gd[d^           |                    d_d/(           tL          j'        \                    t          j^        d`          }WtM          j_        |Wda           t          t          |E|W|jN                  \  }X}Y|(                    |Xt1          db                     t:          j        |j)        d         _         |(                    |Yt1          db                     t:          j        |j)        d         _         |t          |          d'z
  k     r|,                                 dc|j"         dd}ZtL          j'        \                    t          j^        de|Z          }[tM          j_        tL          j'        a                    |[          da           |b                    |[           t          |[df          5 }\t          |\e                                dgh          }]di|Z |]dj<   |]cd	d	d	           S # 1 swxY w Y   d	S # t          $ rJ}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/%Yz5/var/www/html/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)rT   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: r_   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strftimerw   rx   add_picturer5   r>   r7   add_page_breakrp   r   r   r   r   r   temperatura_internaaltituder*   r'   	area_piso
pe_direitor(   numero_pessoastaxa_renovacaor)   r%   r&   umidade_absoluta_internars   zerosr   HORARIOSORIENTACOESr   r   arrayr   itemsr    r   r#   r"   r   r$   r   getmaxnome_ambienter   r   r   r   rq   r   r   r   ry   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_totalr}    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_ambientesr]     s   }O|, 	TGL4G 	T()RSSSgl1=>>>#G
;;;$++G+<<EEdKK	!! 	W&WXXX'#P"S S   	Rpq{R|R|O!#;=O=O  	 	 	N7CFF+++'#P"&S S        	 jj
 <*g55$$$ ,q/$Skk%c{{#E]]$Tll TfSlBAFFPJ\Jc<g&:<<==GVhVoH8<>>#:#::#F#FHHIIS L	7>>)$$ 	EOOIVAYYO777+=+DCN2( '* 2 9 ((**
7>>)$$ 	A""9F3KK"@@@ 	 'y11 e	% e	%MC(JJJHn++X+>>G]))8)<<FM((((;;E--x-@@H #+">+2+;+Gw''QH0::L !>h>PRZRe f f9(:QS[SjkkO&F"#''	' '# *M%#'	* *& )K'(1&) ) )% L!*,(3x==*A*A',.HS]],C,C)! C C"- 
C 
CJ$A"FHj% %M 'F
' 'O 028M3J3JJ/1RXo5N5NN1/<L,3B$Z00
C $?A^#^ 'B)F(<% %! <RFH< <8!8 *,#h--)@)@&+-8CMM+B+B(#6#<#<#>#> < <
C*bhsmm;**#:#@#@#B#B > >
C,=,,"<?["['A)E':$ $  #%&(#)+#h--)@)@&+-8CMM+B+B(%eh???E) 
F 
F
 <x! ! #A:# # +bh}.E.EE*,0I0II,2?#J/6E'
33#=@\#\  (B)E(<$ $  %'!(*%+-8CMM+B+B(-/Xc(mm-D-D*# 
Z 
Z%C& &" (H( ($ -9K0L0LL,."(;O2P2PP.AS%&=&=&=>EY)*AWZ*A*ABB$@Ca$a!'C)G)>& &" @IIO!-o.A.ABZ\_.`.`befnbobo!p!p!-o.A.ABY[^._._befnbobo!p!p!-o.A.ABTVY.Z.Zcfgocpcp!q!qL!-o.A.ABVX[.\.\cfgocpcp!q!qN +=):$0&4	& &" %#$$% && +,,	-
 3445 &&' (() + *++2334 * ,JLi+i(/23O/P/P,5>F
 OOA)?AAOKKK 78777888K,KKKKLLL OO31O===MMqs8}}QM??E&EK :a=.L#3LO $X.. . .4)-QqS!&&"#4c(mmDDG"?CMMBBG"#:CMMJJG'1%w/('2K
 5+... OOOWXOYYYMMqs8}}QM??E&EK :a=.L#1LO $X.. . .4)-QqS!&&5$|'9'9';';"<"<===OOC1OMMMMMqs8}}QM??E&EK :a=.L#1LO $X.. . .4)-QqS!&&5$'7'='='?'?"@"@AAAOO?qOII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GGMMqs8}}QM??E&EK :a=.L#1LO $X.. . .4)-QqS!&&5$':'@'@'B'B"C"CDDDOOB!OLLLMMqs8}}QM??E&EK :a=.L#1LO $X.. . .4)-QqS!&&5$'>'D'D'F'F"G"GHHHOO>aOHH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GGMMqs8}}QM??E&EK :a=.L#1LO $X.. . .4)-QqS!&&5$':'@'@'B'B"C"CDDDOOB!OLLLMMqs8}}QM??E&EK :a=.L#1LO $X.. . .4)-QqS!&&5$'>'D'D'F'F"G"GHH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IIMMqs8}}QM??E&EK :a=.L#,LO $X.. . .4)-QqS!&&5$'<'B'B'D'D"E"EFFFOODAONNNMMqs8}}QM??E&EK :a=.L#,LO $X.. . .4)-QqS!&&5$'@'F'F'H'H"I"IJJ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G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#YZG 5'*** OOAOKKKMMqs8}}QM??E&EK :a=.L#)LO $X.. . .4)-QqS!&&-/MN+-JK')EFI
 5),,, S+KSSSS   GGGGG  
 OOGqOQQQw||H$7GGHK40000*<,	+ +'L- OOLq		O:::+=+DCN2(OOMO;;;+=+DCN2( S^^a'''""$$$ HG,@GGGgll8#6lSS
BGOOK004@@@@ +t$$ 	#f  H /Ul.T.TH*+	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  O O O)Q))***AQAA#NNNNNNNNNOs   &Ae B)Ae C( 'Ae (
D326D.(D3)Ae .D33A_Ae c;-Ad5d(Ae d5Ad9d9Ae d<Ad9d=Ae e
Afe?AffAffAf)Orw   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pyplotrh   numpyrs   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   r]  rK   rH   rF   <module>rz     sl   				                   # # # # # # 9 9 9 9 9 9             ; ; ; ; ; ; ; ; 6 6 6 6 6 6 6 6       " " " " " " " " - - - - - - . . . . . . ( ( ( ( ( (     
u              $ $ $ $ $ $ ! ! ! ! ! !       " " " " " " # # # # # # ) ) ) ) ) )               
 1 0 0 0 0 0 n n n n n n n n n n                         100   % $ $ $ $ $ $ $ - - - - - -: : ::>' >' >'B6 6 6<1 1 1    6 BO BO BO BO BOrH   