
    zgE                        d dl Z d dl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mZ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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l(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 d dl8m9Z9  e	d           d0dZ:d Z;ed1d            Z<d  Z=d! Z>d d"lm?Z?m@Z@ d d#lAmBZB d d$lCmDZD 	 d2d&ZEed'             ZFd d"lm?Z?m@Z@ d d#lAmBZB d( ZGed)             ZHed*             ZId d+lmZmZ d d,lmZ d dlmZ d d
lmZ d dlmZ d d-lJmKZK d d.lLmMZM ed/             ZNdS )3    N)use)Document)Inches)renderget_object_or_404redirect)HttpResponseHttp404)settings)
connection)reverse)messages)login_required)combinations_with_replacement)datetime)Projeto)Ambiente)Parede)Vidro)Porta)Telhado)DadosTermicos   )RENOVADOR_MODELOS)HIWALL_MODELOS)TIPODUTO_MODELOS)CASSETE_4VIAS_MODELOS) calcular_vazao_total_ar_exteriorAgg   c                    t          | ||||          }t          |t          j        t          f          r"t          t          j        |                    }nt          |          }|dz  }t          d         }d |d         D             }|                                 |D ]K|k    rCt          fd|d         D                       }	|
                                }
|	g|
d<   |
g|dc S Ld}t          d          }t          d          }t          d	d
          D ]n}t          ||          D ][}t          |          }||k    rD||z
  }t          |          |k     st          |          |k    r||k     r|}|}t          |          }\o|r\g }|D ]Rt          fd|d         D                       }	|
                                }
|	g|
d<   |                    |
           S||dS g |dS )u   
    Seleciona a combinação ideal de renovadores para atender à vazão necessária.
    Busca primeiro um único aparelho que atenda, depois a melhor combinação possível.
    r    r   c                     g | ]
}|d          S )vazao_maxima_m3h ).0
velocidades     )/var/www/html/cag/centraltermica/views.py
<listcomp>z/escolher_aparelho_renovacao.<locals>.<listcomp>;   s.        	%&      velocidadesc              3   4   K   | ]}|d          k    |V  dS r#   Nr$   )r%   vvazaos     r'   	<genexpr>z.escolher_aparelho_renovacao.<locals>.<genexpr>E   s@       ( ('(E11 1111( (r)   )melhor_combvazao_total_ar_exteriorNinf   
   c              3   4   K   | ]}|d          k    |V  dS r,   r$   )r%   r-   vazao_necessarias     r'   r/   z.escolher_aparelho_renovacao.<locals>.<genexpr>e   sA       ( ('(,<<< <<<<( (r)   )r   
isinstancenpndarraylistfloatsumr   sortnextcopyranger   lenappend)	area_piso
pe_direitonumero_pessoastaxa_renovacao	horas_diar1   
vazao_horaaparelho_disponivelvazoes_disponiveisvelocidade_escolhidaaparelhor0   menor_excessomenor_quantidaden_aparelhoscomb
soma_vazaoexcesso	resultador.   r6   s                      @@r'   escolher_aparelho_renovacaorT   (   s    ?y*Vdftv  A  A )BJ+=>> A"'/F(G(G"H"H"'(?"@"@ )2-J ,A. -m<    $  J#' ( ( ( (.}=( ( ( $ $  +//11H';&<H]# (z+5      K%LLMU|| Q|| 	1 	112DkRR 	1 	1DTJZ''$z1II 000YY"222w7N7N"&K$+M'*4yy$	1  
	 + 	' 	'#' ( ( ( (.}=( ( ( $ $  +//11H';&<H]#X&&&& %'1
 
 	
 #-  r)   c           	         |dk    rt           }n|dk    rt          }n|dk    rt          }ndS t          |d           }d}t	          d          }t	          d          }t          d	|  d
|            t          dd          D ]}t          ||          D ]}t          d |D                       }|| z
  }	|| k    rbt          |          |k     st          |          |k    r<|	|k     r6|}|	}t          |          }t          dt          |           d| d           |r=t          |          }
t          dt          |
           dd |
D                         |
S t          d           dS )u   
    Determina a combinação de aparelhos (hiwall, tipoduto ou cassete4vias) para atender a 'carga_maxima_watts'.
    Retorna a melhor combinação possível (menor excesso e menor quantidade).
    hiwalltipodutocassete4viasu   Tipo de aparelho não suportadoc                     | d         S )Ncapacidade_resfriamento_wr$   )xs    r'   <lambda>z%determinar_aparelho.<locals>.<lambda>   s    2M0N r)   )keyNr2   u   Carga máxima: z
 W, Tipo: r      c              3   &   K   | ]}|d          V  dS )rZ   Nr$   )r%   as     r'   r/   z&determinar_aparelho.<locals>.<genexpr>   s(      "P"Pa1%@#A"P"P"P"P"P"Pr)   u   Combinação encontrada: z aparelhos, Capacidade:  WzRetornando z aparelhos: c                     g | ]
}|d          S )modelor$   )r%   aps     r'   r(   z'determinar_aparelho.<locals>.<listcomp>   s    8Z8Z8Z"H8Z8Z8Zr)   u(   Nenhuma combinação adequada encontradau,   Não há combinação adequada de aparelhos.)r   r   r   sortedr;   printr@   r   r<   rA   r:   )carga_maxima_wattstipo_aparelho	aparelhosr0   rM   rN   rrP   capacidade_totalrR   rS   s              r'   determinar_aparelhorl   {   s   
   "			*	$	$$			.	(	()		00y&N&NOOOIK%LLMU||	
I.
I
I-
I
IJJJ1b\\ 
o 
o1)Q?? 		o 		oD""P"P4"P"P"PPP&);;G#555t99///CIIAQ4Q4QV]`mVmVm"&K$+M'*4yy$mc$iimmYimmmnnn		o  >%%	\C	NN\\8Z8ZPY8Z8Z8Z\\]]]8999==r)   c                 :   | j         j        r/| j         j        r#t          j        | j         j        j                   t          t          |          }t          j	        
                    ||          }i }|D ]/}| j                            d|j         d           }|||j        <   0g }|D ]Y}	|                    |	j                  p|	j        pd}
|	j        |
k    r|
|	_        |	                                 	 t           j                            t&          j        d|j                   }t           j                            ||	j         d          }t           j                            |          rQt/          j        |d          }d	|j        v r-|d	                                         }t7          ||
          pg }n	d
}g }nd}g }n# t8          $ r}d| }g }Y d }~nd }~ww xY w|                    |	j        |||
d           [|||d}t=          | d|          S )Nidprojetonome_ambientetipo_aparelho_rV   z!arquivos_cargas_termicas/projeto__resultados_termicos.xlsxopenpyxlengine   Carga Térmica Total Ambienteu   Coluna não encontradau   Arquivo não encontradozErro ao processar arquivo: )nomecarga_termica_maxaparelho_detalhesrh   )rq   lista_ambientestipos_aparelhosz1centraltermica/lista_ambientes_carga_termica.html)useris_authenticatedtenantr   
set_schemaschema_namer   r   r   objectsfilterGETgetrr   rh   saveospathjoinr   BASE_DIRnome_projetoexistspd
read_excelcolumnsmaxrl   	ExceptionrB   r   )request
projeto_idambiente_nomerq   	ambientesr}   ambrh   r|   ambientetipo_aparelho_atualcaminho_basecaminho_arquivodfrz   aparelhos_recomendadosecontextos                     r'   lista_projetos_ambientesr      s   |$ ?)< ?gl1=>>>J777G ''}'UUI O ; ;(L9J(L(LdSS-:)**O ! !-11(2HIIoXMcogo !%888%8H"MMOOO	(7<<(9;u_f_s;u;uvvL gll<H<R9m9m9mnnOw~~o.. 
,]?:FFF2bj@@(*+J(K(O(O(Q(Q%-@ARTg-h-h-nln**(@%-/**$=!)+& 	( 	( 	( Aa A A%'""""""	( 	*!2!70	 
  
 	 	 	 	 ** H
 'NPXYYYs   8CG
G"GG"c           	      x   t          j        t           j                            |          d           | d         dz  }t	          j        d           t	          j        | d         |dd	
           t          |          D ]/\  }}t	          j        | d         |         ||ddddd           0t	          j	        d           t	          j
        d           t	          j        d           t	          j                     t	          j                     t	          j        |           t	          j                     dS )u]   
    Gera e salva o gráfico da carga térmica total (convertida em TR) ao longo do dia.
    Texist_okrx   i  )r4      )figsizeu   Horáriou   Carga Térmica Total (TR)o)labelmarker.2fz TRcenterbottom   )havafontsizeu   Horário do Diau8   Carga Térmica Total do Ambiente ao Longo do Dia (em TR)N)r   makedirsr   dirnamepltfigureplot	enumeratetextxlabelylabeltitlelegendgridsavefigclose)r   caminho_graficocarga_termica_trivalors        r'   gerar_grafico_carga_termicar      s'    K004@@@@9:TAJwHR
^-5PY\]]]].// d d5J"Ee+<+<+<+<habcccccJ !!!J*+++IHIIIJLLLHJJJK   IKKKKKr)   c                    t           j                            t          j        d| j         d          }t          j        |d           i d|gd|j        gd|j        gd|j	        gd	|j
        gd
|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gi d|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j        gd|j         gd |j!        gd!|j"        gd"|j#        gd#|j$        gd$|j%        gd%|j&        gd&|j'        gi d'|j(        gd(|j)        gd)|j*        gd*|j+        gd+|j,        gd,|j-        gd-|j.        gd.|j/        gd/|j0        gd0|j1        gd1|j2        gd2|j3        gd3|j4        gd4|j5        gd5|j6        gd6|j7        gd7|j8        g|j9        g|j:        g|j;        g|j<        g|j=        gd8}t}          j?        |          }	t           j                            || d9          }
|	@                    |
d:;           |	S )<uG   
    Salva as variáveis do ambiente em CSV e retorna o DataFrame.
    z./var/www/html/cag/arquivos_climaticos/projeto_/Tr   rr   area_parede_nortecoeficiente_parede_nortetipo_parede_nortearea_parede_sulcoeficiente_parede_sultipo_parede_sularea_parede_lestecoeficiente_parede_lestetipo_parede_lestearea_parede_oestecoeficiente_parede_oestetipo_parede_oestearea_vidro_nortecoeficiente_vidro_nortetipo_vidro_nortearea_vidro_sulcoeficiente_vidro_sultipo_vidro_sularea_vidro_lestecoeficiente_vidro_lestetipo_vidro_lestearea_vidro_oestecoeficiente_vidro_oestetipo_vidro_oestearea_porta_nortecoeficiente_porta_nortetipo_porta_norte!diferencial_insolacao_porta_nortearea_porta_sulcoeficiente_porta_sultipo_porta_suldiferencial_insolacao_porta_sularea_porta_lestecoeficiente_porta_lestetipo_porta_leste!diferencial_insolacao_porta_lestearea_porta_oestecoeficiente_porta_oestetipo_porta_oeste!diferencial_insolacao_porta_oestetipo_telhadocoeficiente_transmissao_telhadoarea_telhadodiferencial_insolacao_telhadocalor_sensivel_pessoacalor_latente_pessoarE   taxa_iluminacaodissipacao_equipamentosrD   )rC   temperatura_internaumidade_relativa_internaumidade_absoluta_internarF   z
_dados.csvF)index)Ar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   diferencial_insolacao_norter   r   r   diferencial_insolacao_sulr   r   r   diferencial_insolacao_lester   r   r   diferencial_insolacao_oester   coeficiente_telhador   r   r   r   rE   r   r   rD   rC   r   r   r   rF   r   	DataFrameto_csv)rq   rr   paredevidroportatelhadotermicor   dadosr   caminho_csvs              r'   salvar_dados_em_csvr     s    7<< 13{dkdx3{3{3{||LKt,,,,C-C 	f67	C
 	#V%D$EC 	f67C 	F23C 	!6#@"AC 	F23C 	f67C 	#V%D$EC 	f67C 	f67C 	#V%D$EC 	f67C$ 	U34%C& 	"E$A#B'C( 	U34)C* 	5/0+C C, 	 %"=!>-C. 	5/0/C0 	U341C2 	"E$A#B3C4 	U345C6 	U347C8 	"E$A#B9C: 	U34;C@ 	U34ACB 	"E$A#BCCD 	U34ECF 	,e.O-PGCH 	5/0ICJ 	 %"=!>KCL 	5/0MCN 	*E,K+LOCP 	U34QC C CR 	"E$A#BSCT 	U34UCV 	,e.O-PWCX 	U34YCZ 	"E$A#B[C\ 	U34]C^ 	,e.O-P_Cd 	-.eCf 	*G,G+HgCh 	-.iCj 	('*O)PkCp 	 '"?!@qCr 	!= >sCt 	712uCv 	G34wCx 	"G$C#DyCz 	w)*{C C| '( ' ;<%,%E$F%,%E$F"12EC C CEJ 
e		B',,|-I-I-IJJKIIkI'''Ir)   )PtRGBColor)WD_ALIGN_PARAGRAPH)get_current_requestrV   c                    t                      }t                      }|r|j        j        j        dk    r|j        D ]}	|	j        }
|
j        r|
j        d         n|
                                }d|_	        t          j        |_        |j        d         }t          d          |j        _        t#          ddd          |j        j        _        |                    dd           |                    d	| j                    |                    d
| j                    |                    d| j         d| j         d           |                    dt3          j                                        d                      |                    d           |                    dd           ||j        s|                    dd          }d|_        |j        d         j         }d|d         _	        d|d         _	        |j!        d         "                                D ]R\  }}|#                                j         }tI          |          |d         _	        tI          |          |d         _	        Sn|                    d           |                    d           tJ          j&        '                    |          r%|(                    |tS          d                     n|                    d           |                    dd           |                    d|*                                            tJ          j&        +                    tX          j-        dd d!          tJ          j&        +                    tX          j-        dd d"          tJ          j&        +                    tX          j-        dd d#          d$}|.                    |          }|rDtJ          j&        '                    |          r%|(                    |tS          d%                     n|                    d&           |rlt_          |t`                    rV|                    dd'          }d|_        |j        d         j         }g d(}tc          |          D ]\  }}
|
||         _	        |D ]}t_          |td                    r|#                                j         }|.                    d)d*          |d         _	        |.                    d+d*           d,|d         _	        |.                    d-d*           d,|d         _	        |.                    d.d*          |d%         _	        |.                    d/d*          |d0         _	        |.                    d1d*          |d         _	        n|                    d2           |                    d3d           |                    d4           tJ          j&        +                    tX          j-        dd d5          }tJ          j&        '                    |          r%|(                    |tS          d%                     n|                    d6           tJ          j&        +                    tX          j-        d7| j         d8|j3         d9          }tK          j4        tJ          j&        5                    |          d:;           |6                    |           |S )<u   
    Gera um arquivo DOCX contendo:
      - Informações do projeto
      - Dados do ambiente
      - Gráfico de carga térmica
      - Aparelhos recomendados
      - Sistema de renovação de ar (imagem + dados estáticos de exemplo)
    Retorna o caminho do arquivo .docx gerado.
    tester   -   VERSÃO DE TESTE – NÃO USAR COMERCIALMENTE$      u+   Relatório de Carga Térmica e Equipamentosr   level	Projeto: Cidade: Coordenadas: (, )u   Data de Criação: z%Y-%m-%d %H:%M:%SP________________________________________________________________________________Dados do Ambienter3   Nrowscols
Table Grid
   ParâmetroValor#   Dados do ambiente não encontrados.u   
Gráfico de Carga Térmica:   width   (Gráfico não disponível)zAparelhos RecomendadosTipo de Aparelho Selecionado: staticimagenshi-wall-02.jpgPDuto_Inverter.jpgPCassete_Inverter.jpgrV   rW   rX      %   (Imagem do aparelho não disponível)r   )Modeloz
Cap. Resf.z
Cap. Aque.   Alimentaçãou   Tubulação	   Potênciarc   N/Acapacidade_resfriamento_btuz BTU/hcapacidade_aquecimento_btufonte_alimentacao%tubulacao_refrigerante_liquido_gas_mm   potencia_motor_w+Nenhum aparelho recomendado foi encontrado.   Sistema de Renovação de Aru-   Vazão Total Necessária (Exemplo): N/A m³/hrenovador.jpg&   (Imagem do renovador não disponível)arquivos_relatorios_relatorio_z.docxTr   )7r   r  r~   r   r   sectionsheader
paragraphsadd_paragraphr   r
  CENTER	alignmentrunsr  fontsizer	  colorrgbadd_headingr   cidadelatitude	longituder   nowstrftimeempty	add_tablestyler  cellsilocitemsadd_rowstrr   r   r   add_picturer   
capitalizer   r   r   r   r7   r:   r   dictrr   r   r   r   )rq   r   dados_ambienter   r   df_dados_ambienterh   docr   sectionr?  header_paragraphruntabela	hdr_cellscolval	row_cellsr'  caminho_imagem_aparelhoheadersr   rL   imagem_renovadorcaminho_docxs                            r'   gerar_relatorio_docxri  V  s    **C
 "##G 97<&2g==| 	9 	9G^F7=7Hdv033fNbNbNdNd$S!);)B&"'*CrFFCHM!)#sC!8!8CHN OOAOKKK8'"688999111222Ow'7OO7;LOOOPPPZHLNN,C,CDW,X,XZZ[[[h OO'qO111$->-D$AA..#KN(	(	!#	!).q17799 	) 	)HC((.I #CIaL #CIaL	)
 	?@@@ 5666	w~~o&& 9vayy99997888 OO,AO666S}7O7O7Q7QSSTTT ',,x0(IGWXXGLL!2HiI]^^X%6)Mdee G
 &kk-88 C27>>2I#J#J C/vayyAAAAABBB  I*-CT"J"J IAA..#KN(	eee"7++ 	' 	'IAv &IaL. 	L 	LH(D)) L"NN,,2	$,LL5$A$A	!!'/||4QSX'Y'Y$a$a$a	!!'/||4PRW'X'X$`$`$`	!!$,LL1De$L$L	!!$,LL1XZ_$`$`	!!$,LL1CU$K$K	!!	L 	GHHH OO2!O<<<EFFFw||H$5xO\\	w~~&'' D(q		::::BCCC 7<< 13HWMa  KL  KLnv  oE  KL  KL  KL  M  MLK--====HH\r)   c                    | j         j        r/| j         j        r#t          j        | j         j        j                   | j        dk    r| j                            d          }t          t          |          }t          t          ||          }||_        |                                 t          j        | d           t!          t#          d||d                    S d S )	NPOSTrh   rn   rp   z%Tipo de aparelho salvo com sucesso!!!r   )r   r   )kwargs)r~   r   r   r   r   r   methodrk  r   r   r   r   rh   r   r   successr   r   )r   r   r   rh   rq   r   s         r'   salvar_tipo_aparelhoro    s    |$ ?)< ?gl1=>>>~((99#G
;;;$Xwm\\\!."IJJJ :R\o|C}C}~~~  r)   c                    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.
    r  r         z

N)r>  r?  r@  rA  add_runr  rE  rF  r	  rG  rH  r
  rB  rC  footer)	r\  watermark_textr]  r?  paragraph_header
run_headerrt  paragraph_footer
run_footers	            r'   inserir_marca_daguarz    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+: :r)   c           	         | j         j        r/| j         j        r#t          j        | j         j        j                   t          t          |          }t          t          |          }t          t          |          }t          t          |          }t          t          |          }t          t          |          }t          t          |          }	t          j                            t"          j        d|j         |j         d          }
t          j                            |
          rAt-          j        |
d          }|d                                         |d         |d	         d
}ndddd
}t3          ||j        |||||	          }t          j                            t"          j        dd|j         d          }t          j                            |
          rt5          ||           |j        }|d         dk    rt9          |d         |          }ng }t;                      }| j         j        j        dk    rt=          |           |j        d         j         }|j!        r|j!        d         n|"                                }d}t          j                            |          rI|#                                }|$                    |tK          d                     tL          j'        |_(        d|#                    d          _)        |#                    d|j         d           |#                    d|j         d           |#                    d|j*         d           |#                    dtW          j,                    -                    d           d           |"                    d           |.                    dd            ||j/        s|0                    dd"#          }d$|_1        |j2        d         j3        }d%|d         _4        d&|d         _4        |j5        d         6                                D ]R\  }}|7                                j3        }tq          |          |d         _4        tq          |          |d         _4        Sn|"                    d'           |.                    d(d            t          j                            |          r%|$                    |tK          d)                     n|"                    d*           |.                    d+d            |"                    d,|9                                            t          j                            t"          j        d-d.d/          t          j                            t"          j        d-d.d0          t          j                            t"          j        d-d.d1          d2}|:                    |          }|rDt          j                            |          r%|$                    |tK          d3                     n|"                    d4           |rwtw          |tx                    ra|0                    dd5#          }d$|_1        |j2        d         j3        }g d6}t{          |          D ]\  }} | ||         _4        |D ]}!tw          |!t|                    r|7                                j3        }|!:                    d7d          |d         _4        |!:                    d8d           |d         _4        |!:                    d9d           |d"         _4        |!:                    d:d          |d3         _4        |!:                    d;d          |d<         _4        tq          |!:                    d=d                    |d)         _4        n|"                    d>           |.                    d?d            |T|j/        sM|d@         j5        d         }"|dA         j5        d         }#|dB         j5        d         }$|dC         j5        d         }%ndD\  }"}#}$}%t          |"|#|$|%          }&|&:                    dEd          }'|"                    dF|'dGdH           t          j                            t"          j        d-d.dI          }(t          j                            |(          r%|$                    |(tK          d3                     n|"                    dJ           |&:                    dKg           })|)r|"                    dLt          |)           dM           |0                    ddN#          }*d$|*_1        |*j2        d         j3        }g dO}t{          |          D ]\  }} | ||         _4        d}+t{          |)d          D ]\  },}-|*7                                j3        }|-:                    d7d          }.|-dP         dQ         }/|+|/dR         z  }+tq          |,          |d         _4        |.|d         _4        |/dS         |d"         _4        |/dR          dH|d3         _4        |/dT          dU|d<         _4        |/dV          dW|d)         _4        |/d=          dX|d5         _4        |"                    dY|+ dH           |+|'k    r|"                    dZ           n+|"                    d[           n|"                    d\           |j         d]}0t          j                            t"          j        d^|0          }1t          jA        t          j        B                    |1          d_           |C                    |1           t          |1d`          5 }2t          |2F                                dab          }3dct          j        G                    |1           dd|3de<   d!d!d!           n# 1 swxY w Y   |3S )fu   
    Gera o relatório DOCX de um ambiente específico e devolve como download,
    incluindo dados do ambiente, gráfico, aparelhos de ar condicionado e
    sistema de renovação de ar.
    rn   r   3/var/www/html/cag/arquivos_cargas_termicas/projeto_rt   ru   rv   rx       Somatório Carga Sensível Total   Somatório Carga Latente Total carga_termica_total_ambiente_maxsomatorio_carga_sensivel_totalsomatorio_carga_latente_totalr1  mediagrafico_carga_termica_.pngr  r  r   5/var/www/html/cag/static/relatorio/grf_graph_logo.png      @r"  Tu   
Relatório do Ambiente

Ambiente: 
r  r     Data de geração: %d/%m/%Yr  r  r   r  Nr3   r  r  r  r  r   u"   Gráfico de Carga Térmica (em TR)r!  r$  )Aparelhos de Ar Condicionado Recomendadosr%  r&  r'  r(  r)  r*  r+  r,  r-  r   r.  zCap. Resf. (BTU/h)zCap. Aque. (BTU/h)r/  u   Tubulação (mm)u   Potência (W)rc   r2  r3  r4  r5  r6  r7  r8  r9  rC   rD   rE   rF   r   r   r   r   r1   u+   Vazão Total Necessária para Renovação: r       m³/hr:  r;  r0      Combinação de  Renovador(es) Selecionada.   Aparelhor.  
Velocidadeu   Vazãou   Pressãou   Nível Sonoror0  r*   r#   ry   pressao_maxima_mmca mmCAnivel_pressao_sonora_dba dBAra      Vazão Total da Combinação: >   ✓ A combinação atende à necessidade de renovação de ar.Q   ⚠ A combinação não atende completamente à necessidade de renovação de ar.4Nenhum renovador foi selecionado para este ambiente.z_relatorio.docxr<  r   rbGapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentcontent_typeattachment; filename=""Content-Disposition)Hr~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   r   r   r  r   rh   rl   r   rz  r>  r?  r@  rA  rs  rW  r   r
  rB  rC  boldrJ  r   rM  rN  rI  rO  rP  rQ  r  rR  r   rS  rT  rU  rV  rX  r   r7   r:   r   rY  rT   rA   r   r   r   openr	   readbasename)4r   r   ambiente_idrq   r   r   r  r  r  r  caminho_xlsxr   rZ  r[  r   rh   r   r\  header_sectionr^  	logo_pathr_  r`  ra  rb  rc  rd  r'  re  	tabela_arrf  r   r?  rL   rC   rD   rE   rF   renovador_infor6   rg  combinacao_renovadores	tabela_rnvazao_total_combinadaidx	renovador
modelo_renr&   	nome_docxrh  fresponses4                                                       r'   gerar_relatorio_ambienter    s2    |$ ?)< ?gl1=>>>J777G k:::H v999Feh777Eeh777E(;;;GAAAG
 7<<Tg>RTT!<<< L
 
w~~l## 
]<
;;;023R0S0W0W0Y0Y.01S.T-/0P-Q
 
 16.3-2
 
 ,  gll=!7=== O
 
w~~l## 9#B888
 *M89UBB!4=>"
 "

 "$
 **C |&'11C    \!_+N7E7Pt~033VdVrVrVtVt HI	w~~i   ?&&((	555%7%>" CG9::?D(*@DDDEEEA)=AAABBB::::;;;Z8<>>3J3J:3V3VZZZ[[[ h OO'qO111$->-D$AA..#KN(	(	!#	!).q17799 	) 	)HC((.I #CIaL #CIaL	)
 	?@@@
 OO8OBBB	w~~o&& 9vayy99997888
 OO?qOIIIS}7O7O7Q7QSSTTT ',,x0(IGWXXGLL!2HiI]^^X%6)Mdee G
 &kk-88 C27>>2I#J#J C/vayyAAAAABBB  I*-CT"J"J IMMqqM11	&	N1%+	
 
 
 #7++ 	' 	'IAv &IaL. 	Q 	QH(D)) Q%--//5	$,LL5$A$A	!!'/||4QSX'Y'Y$[	!!'/||4PRW'X'X$Z	!!$,LL1De$L$L	!!$,LL1XZ_$`$`	!!$'5G(O(O$P$P	!!	Q 	GHHH
 OO2!O<<<$->-D$%k27:	&|49!<
*+;<A!D*+;<A!D@J=	:~~ 1	 N &))*CQGG`DT````aaa w||H$5xO\\	w~~&'' D(q		::::BCCC ,//rBB ReS1G-H-HeeefffMMqqM11	&	N1%+	jjj"7++ 	' 	'IAv &IaL !'(>BB 	F 	FNC!))++1I"x77J"=1"5J!Z0B%CC! #CIaL *IaL *6 2IaL#-.@#A I I IIaL#-.C#D K K KIaL#-.H#I O O OIaL#-.@#A E E EIaLX;PXXXYYY $444^____qrrrrPQQQ
 ):::I7<< 13H)TTLK--====HH\ 
lD	!	! eQFFHHb
 
 
 +e27CSCST`CaCa*d*d*d&'e e e e e e e e e e e e e e e Os   A
o''o+.o+c           
          | j         j        r/| j         j        r#t          j        | j         j        j                   t          t          |          }t          j	        
                    |          }|                                s$t          j        | d           t          d          S |                                }t!                      }| j         j        j        dk    rt#          |           |                    dd           |                    d	|j                    |                    d
|j                    |                    d|j         d|j         d           |                    dt1          j                                        d                      |                    d           |j        d         j        }|j        r|j        d         n|                                }d}t<          j                            |          rI|                                 }	|	!                    |tE          d                     tF          j$        |_%        d|                     d          _&        |                     d|j'         d           |                     d	|j         d           |                     d
|j         d           |                     dt1          j                                        d           d           |                    d           |                    dd           tQ          |d          D ]&\  }
}|                    |
 d|j'         d           '|)                                 g }g }|D 	]g}|                    d|j'         d           t          tT          |          }t          tV          |          }t          tX          |          }t          tZ          |          }t          t\          |          }t<          j        /                    t`          j1        d |j         |j'         d!          }t<          j                            |          rAte          j3        |d"#          }|d$         4                                |d%         |d&         d'}nd(d(d(d'}tk          ||j'        |||||          }t<          j        /                    t`          j1        d)d*|j'         d+          }t<          j                            |          rtm          ||           |                    d,d-           ||j7        s|8                    dd-/          }d0|_9        |j:        d         j;        }d1|d         _<        d2|d         _<        |j=        d         >                                D ]R\  }}|?                                j;        }t          |          |d         _<        t          |          |d         _<        Sn|                    d3           |                    d4d-           t<          j                            |          r%|!                    |tE          d5                     n|                    d6           |                    d7d-           |jA        }|                    d8|B                                            t<          j        /                    t`          j1        d9d:d;          t<          j        /                    t`          j1        d9d:d<          t<          j        /                    t`          j1        d9d:d=          d>}|C                    |          }|rDt<          j                            |          r%|!                    |tE          d?                     n|                    d@           |dA         d(k    rt          |dA         |          } ng } | rt          | t                    r|8                    ddB/          }!d0|!_9        |!j:        d         j;        }g dC}"tQ          |"          D ]\  }
}#|#||
         _<        | D ]4}$t          |$t                    r|!?                                j;        }|$C                    dDd(          |d         _<        t          |$C                    dEd(                    |d         _<        t          |$C                    dFd(                    |d-         _<        |$C                    dGd(          |d?         _<        |$C                    dHd(          |dI         _<        t          |$C                    dJd(                    |d5         _<        |H                    |$           6n|                    dK           |                    dLd-           |T|j7        sM|dM         j=        d         }%|dN         j=        d         }&|dO         j=        d         }'|dP         j=        d         }(ndQ\  }%}&}'}(t          |%|&|'|(          })|)C                    dRd          }*|                    dS|*dTdU           t<          j        /                    t`          j1        d9d:dV          }+t<          j                            |+          r%|!                    |+tE          d?                     n|                    dW           |)C                    dXg           },|,r|                    dYt          |,           dZ           |8                    dd[/          }-d0|-_9        |-j:        d         j;        }g d\}"tQ          |"          D ]\  }
}#|#||
         _<        d}.tQ          |,d          D ]\  }/}0|-?                                j;        }|0C                    dDd(          }1|0d]         d^         }2|.|2d_         z  }.t          |/          |d         _<        |1|d         _<        |2d`         |d-         _<        |2d_          dU|d?         _<        |2da          db|dI         _<        |2dc          dd|d5         _<        |2dJ          de|dB         _<        |H                    |0           |                    df|. dU           |.|*k    r|                    dg           	;|                    dh           	R|                    di           	i|                    djd           |                    dkd-           i }3|D ]4}$|$C                    dDd(          }4|3C                    |4d          dz   |3|4<   5|3r|8                    dd-/          }!d0|!_9        |!j:        d         j;        }dl|d         _<        dm|d         _<        |3>                                D ]E\  }4}5|!?                                j;        }|4|d         _<        t          |5          |d         _<        Fn|                    dn           |                    do           |                    dpd-           i }6|D ]O}0|0C                    dDd(          }4|0d]         d^         d`         }2|4 dq|2 }7|6C                    |7d          dz   |6|7<   P|6r|8                    dd-/          }-d0|-_9        |-j:        d         j;        }dr|d         _<        dm|d         _<        |6>                                D ]E\  }8}5|-?                                j;        }|8|d         _<        t          |5          |d         _<        Fn|                    ds           t<          j        /                    t`          j1        dt|j         du          }9t=          jK        t<          j        L                    |9          dv           |M                    |9           t          |9dw          5 }:t          |:P                                dxy          };dzt<          j        Q                    |9           d{|;d|<   d.d.d.           n# 1 swxY w Y   |;S )}u   
    Gera um relatório DOCX para todos os ambientes do projeto, incluindo:
      - Capa
      - Índice (simplificado)
      - Seção de cada ambiente (dados, gráfico, aparelhos, renovador)
      - Resumo final de todos os aparelhos
    rn   )rq   u-   Não há ambientes cadastrados neste projeto.lista_projetosr  u   Relatório do Projetor   r  r  r  r  r  r  r  r  r  r  r  r"  Tu   
Relatório do Projeto
zAmbiente (exemplo): r  u   Índicer   )startz. Ambiente: zList Number)rQ  r  r|  r}  rt   ru   rv   rx   r~  r  r  r1  r  r  r  r  r3   Nr  r  r  r  r   u4   Gráfico de Carga Térmica Total do Ambiente (em TR)r!  r$  r  r%  r&  r'  r(  r)  r*  r+  r,  r-  r  r   r  rc   r2  r3  r4  r5  r6  r7  r8  r9  rC   rD   rE   rF   r  r1   u   Vazão Total Necessária: r   r  r:  r;  r0   r  r  r  r  r*   r  r#   ry   r  r  r  r  ra   r  r  r  r  zResumo Final dos EquipamentoszAparelhos de Ar Condicionador.  
Quantidadez/Nenhum aparelho de ar condicionado selecionado. zRenovadores de Arz - zModelo / VelocidadezNenhum renovador selecionado.r<  z_relatorio_projeto.docxr   r  r  r  r  r  r  )Rr~   r   r   r   r   r   r   r   r   r   r   r   r   errorr   firstr   rz  rI  rA  r   rJ  rK  rL  r   rM  rN  r>  r?  r@  r   r   rs  rW  r   r
  rB  rC  r  rr   r   add_page_breakr   r   r   r   r   r   r   r   r   r   r   r  r   rO  rP  rQ  r  rR  r   rS  rT  rU  rV  rh   rX  r   rl   r7   r:   rY  rB   rT   rA   r   r   r   r  r	   r  r  )<r   r   rq   r   ambiente_exemplor\  r  r^  r  r_  r   r   aparelhos_selecionadosrenovadores_selecionadosr   r  r  r  r  r  r   rZ  r[  r   tabela_dadosra  rb  rc  rd  rh   r'  re  recomendadosr  rf  r?  rL   rC   rD   rE   rF   r  r6   rg  r  r  r  r  r  r  r&   aparelhos_por_modelorc   qtdrenovadores_agrupadoschavemvcaminho_docx_projetor  r  s<                                                               r'   gerar_relatorio_projetor    s    |$ ?)< ?gl1=>>>J777G '''88I  *w OPPP())) (( **C
 |&'11C   
 OO+1O5558'"688999111222Ow'7OO7;LOOOPPPQHLNN,C,CJ,O,OQQRRRh
 \!_+N7E7Pt~033VdVrVrVtVt HI	w~~i   ?&&((	555%7%>" BF899>V4D4RVVVWWWA)=AAABBB::::;;;Z8<>>3J3J:3V3VZZZ[[[h
 OOIQO''' !444 [ [8QDDH,BDDMZZZZ  !
  AV AV=X%;==QGGG #6H===!%(;;;!%(;;;#Gh???#MHEEE w||X'BVXX%@@@
 

 7>>,'' 	|J???B467V4W4[4[4]4]245W2X134T1U NN 5:2716 N 0"
 
 ',,AX%;AAA
 

 7>>,'' 	='O<<<
 	+1555(1B1H(==aa=88L!-L$)!,2I ,IaL 'IaL-215;;== - -S(00228	$'HH	!!$'HH	!!!-
 CDDD
 	NVWXXX7>>/** 	=OOO6!99O====;<<<
 	C1MMM .W=;S;S;U;UWWXXX gll8#4h	K[\\X%6)MabbGLL):HiQhii
 

 #*++m"<"<" 	Grw~~6M'N'N 	GOO36!99OEEEEEFFF <=FF.AB LL
 L 	MJ|T:: 	M1155I*IO!q)/I  G 'w// + +	6$*	!!!( < <h-- 
< ) 1 1 3 3 9I(0Xu(E(EIaL%(+HLL9VX],^,^(_(_IaL%(+HLL9UW\,],](^(^IaL%(05H%(P(PIaL%(05\^c(d(dIaL%(+HLL9KU,S,S(T(TIaL% +11(;;;< KLLL
 	6a@@@ (1B1H()+6;A>I*<8=a@J./?@EaHN./?@EaHNNDNAIz>>4Y
N\jkk)--.GKKS7GSSSSTTT 7<<(98YP_``7>>*++ 	HOO,F1IIO>>>>FGGG!/!3!3M2!F!F!  	Vi5K1L1Liiijjj1155I*IO!q)/InnnG&w// + +	6$*	!!!$%!"+,BA"F"F ; ;Y%--//5	&]]8U;;
&}5b9
%4F)GG%$'HH	!!$.	!!$.v$6	!!'12D'E$M$M$M	!!'12G'H$O$O$O	!!'12L'M$S$S$S	!!'12D'E$I$I$I	!! )//	::::\?T\\\]]]$(888!!"bcccc!!"uvvvvTUUUU OO31O=== OO2!O<<<* O Oh..';'?'?'J'JQ'NV$$ MMMqqM11	&	N1%+	$	!(	!/5577 	) 	)KFC!))++1I &IaL #CIaL	)
 	KLLLb OO'qO111- O O	x//}-b1&9
**j**'<'@'@'J'JQ'Ne$$ ;MMqqM11	&	N1%+	1	!(	!,2244 	) 	)GB!))++1I "IaL #CIaL	)
 	9:::
 7<<888 
 K 455EEEEHH!""" 
"D	)	) mQFFHHb
 
 
 +m27CSCSThCiCi*l*l*l&'m m m m m m m m m m m m m m m Os   A
A@4@4A@8@;A@8)r   r   )r	   )PermissionDenied)gerar_relatorio_todos_ambientesc           	         	 | j         j        st          d          t          j        | j         j        j                   t          t          |          }t          | |          }t          |t                    r|S t          j        | d           t          | dd|i          S # t          $ rO}t          j        | dt          |                      t          | ddt          |          i          cY d}~S d}~ww xY w)	uR   
    View para gerar o relatório completo do projeto com todos os ambientes.
    u   Usuário sem tenant associado.rn   u   Erro ao gerar o relatório.z"centraltermica/erro_relatorio.htmlrq   u   Erro ao gerar o relatório: erroN)r~   r   r  r   r   r   r   r   r  r7   r	   r   r  r   r   rV  )r   r   rq   r  r   s        r'   gerar_relatorio_completor    s   
W|" 	E"#CDDD 	gl1=>>> $G
;;; 37JGG h-- 	Ow =>>>gCiQXEYZZZ W W Ww Gs1vv G GHHHgCfcRSffEUVVVVVVVVWs%   A:B% ='B% %
C>/AC93C>9C>)r    )N)rV   )Or   pandasr   numpyr8   matplotlib.pyplotpyplotr   
matplotlibr   docxr   docx.sharedr   django.shortcutsr   r   r   django.httpr	   r
   django.confr   	django.dbr   django.urlsr   django.contribr   django.contrib.auth.decoratorsr   	itertoolsr   r   projeto.modelsr   ctermica.modelsr   paredes.modelsr   vidros.modelsr   portas.modelsr   telhados.modelsr   termicos.modelsr   r  r   rV   r   rW   r   rX   r   calculotermica.cargastermicosr   rT   rl   r   r   r  r  r	  docx.enum.textr
  cag.middlewarer  ri  ro  rz  r  r  django.core.exceptionsr  )calculotermica.relatorio_completo_projetor  r  r$   r)   r'   <module>r     s)   > > > > > > > > > > > > > > > > > >                   @ @ @ @ @ @ @ @ @ @ - - - - - - - -                               # # # # # # 9 9 9 9 9 9 3 3 3 3 3 3       # " " " " " $ $ $ $ $ $ ! ! ! ! ! !             # # # # # # ) ) ) ) ) ) ) ( ( ( ( ( " " " " " " & & & & & & / / / / / / K J J J J J E


M M M Mf'> '> '>Z 7Z 7Z 7Z 7Zz  ,O O Ol % $ $ $ $ $ $ $ - - - - - - . . . . . . S[o o o oj @ @ @( % $ $ $ $ $ $ $ - - - - - -: : :F N N Nj X X X|
 7 6 6 6 6 6 6 6 $ $ $ $ $ $ 9 9 9 9 9 9 # # # # # #             3 3 3 3 3 3 U U U U U U W W W W Wr)   