
    ;JSh                        S SK r S SKrS SKJrJr  S SKJrJr  S SKJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  SSKJr  SSKJrJrJ r J!r!J"r"J#r#  SSK$J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*J+r+  SSK,J-r-  SSKJ.r.  S SK/J0r0  SSK'J1r1  SSK2J3r3  \S 5       r4\3\S 5       5       r5\3\S 5       5       r6\3\S 5       5       r7\3\S 5       5       r8\3\S 5       5       r9\3\\S 5       5       5       r:\3\S 5       5       r;S S KJ<r<  \S! 5       r=\3\S" 5       5       r>\3\S# 5       5       r?\3\S$ 5       5       r@\3\\S% 5       5       5       rA\3\\S& 5       5       5       rB/ S'QrCS(rDS S)KEJFrF  S S
KJr  S SK/J0r0  S SKJr  S SKGrG\GR                  " \I5      rJ\\\FS* 5       5       5       rK\3\\S+ 5       5       5       rL\3\S, 5       5       rM\3\S- 5       5       rNS SKOrOS SKPrPS S.KQJRrR  S S/KSJTrT  S S0KUJVrV  S S1KJWrW  S SKJrJ	r	J
r
  S S	KJr  S SKJr  S SKJr  SS2KJrJXrX  SSK2J3r3  S3 rY\3\S4 5       5       rZ\3\S5 5       5       r[SS6KJXrXJr  \3\S7 5       5       r\\S8 5       r]\S9 5       r^S S:KJrJ
r
  S SKJr  S S;K_J`r`  SS<KJrJ!r!J r J#r#  S SKJr  S S:KJrJ
r
  S SKJr  S SKJr  S S;K_J`r`  S S=KaJbrb  S S>KJr  S S?KcJdrd  S SKrS S<KeJrJ!r!J r J#r#  \3\S@ 5       5       rfg)A    N)datedatetime)DecimalInvalidOperation)renderredirectget_object_or_404)JsonResponse)reverse)login_required)logout)messages)require_POST)
connection)Sum   )ObraForm)ObraFotoObra	Pagamento	EtapaObraGrupoAtividadeFoto)	materiais)ETAPAS_PADRAO)user_file_pathsalvar_arquivo_com_limiteatingiu_limite_hduso_hd_formatado)gerar_relatorio_pdf_api)DocumentoEtapa)default_storage)comprimir_imagem)nao_equipe_requiredc                     [        U 5        [        R                  " U 5      n[        U5        [        R                  " U S5        [        S5      $ )Nu   Você saiu com sucesso.login)r   r   get_messageslistinfor   )requeststorages     &/var/www/html/minhaobra/obras/views.pylogout_viewr-      s:    
7O##G,GMMM'45G    c                 n   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        R                  R                  U R                   S9n[        U R                   5      n[        U SUUS.5      $ )Nusuariozobras/minhas_obras.html)obrasuso_hd)useris_authenticatedtenantr   
set_schemaschema_namer   objectsfilterr   r   )r*   r2   r3   s      r,   minhas_obrasr;   )   s     ||$$)<)<gll11==>LL5Egll+F'47  r.   c                 \   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9nU R                  S:X  a  UR                  5         [        S5      $ )Nidr1   POSTr;   )r4   r5   r6   r   r7   r8   r	   r   methoddeleter   r*   obra_idobras      r,   deletar_obrarE   8   sk     ||$$)<)<gll11==>Tg||DD~~N##r.   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        U R                  S:X  af  [        U R                  5      nUR                  5       (       a;  UR                  SS9nU R                   Ul        UR                  5         [        S5      $ O
[        5       n[        U SSU05      $ )Nr?   F)commitr;   zobras/cadastrar_obra.htmlform)r4   r5   r6   r   r7   r8   r@   r   r?   is_validsaver1   r   r   )r*   rH   	nova_obras      r,   cadastrar_obrarL   E   s     ||$$)<)<gll11==>~~%==??			/I 'INNN++	  z'6GGr.   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9nUR                  (       a/  [        R                  " 5       UR                  -
  R                   S3OSn[        R                  R                  USS9n[        R                  R                  USS9nS nU" U5      nU" U5      n[        UR!                  5       5      n	[        UR!                  5       5      n
[#        UR$                  =(       d    S5      nX-
  nU(       a  ['        X-  S	-  5      OSn[)        U S
UUU	UUU[*        R,                  " U5      [*        R,                  " U5      U
S.	5      $ )Nr=    dias   —TrD   pagoFc                     0 nU  HH  nUR                   R                  S5      nUR                  US5      [        UR                  5      -   X'   MJ     U$ )N%Y-%m-%dr   )datastrftimegetfloatvalor)querysetdadosprT   s       r,   agrupar_por_data%painel_obra.<locals>.agrupar_por_datak   sI    A66??:.D))D!,uQWW~=EK  r.   r   d   zobras/painel_obra.html)	rD   orcamento_totaltotal_gastosaldo
percentualtempo_decorridofeitos_por_dataagendados_por_dataagendados_total)r4   r5   r6   r   r7   r8   r	   r   data_inicior   todaydaysr   r9   r:   sumvaluesrW   r_   intr   jsondumps)r*   rC   rD   rc   pagamentos_feitospagamentos_agendadosr\   rd   re   r`   total_agendador_   ra   rb   s                 r,   painel_obrarr   Y   sz    ||$$)<)<gll11==> Tg||DD =A<L<LDJJL4+++11
2%8RW 
 "))00d0F$,,33E3J ''89O)*>?o,,./K+2245ND005A6O)E?Nk3s:;TUJ'3*" *::o6"jj);<)
6 
 
r.   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9n[        R                  R                  US9R                  S5      n[        [        R                  " 5       5      n[        R                  " 5        VVVs/ s H  u  pVU  H  nXWS   US   S.PM     M     nnnn0 n	[         R                  R                  USS9R                  S	5      n
U
 H  nUR"                  (       d  M  [%        UR"                  R&                  5      nU	R)                  U/ 5      R+                  UR,                  [/        UR0                  5      UR2                  R5                  S
5      UR6                  =(       d    SUR8                  (       a  UR8                  R:                  OSS.5        M     [         R                  R                  USS9R                  S	5      n[         R                  R                  USS9nU R<                  S:X  Ga  [?        U R                   5      (       aR  [A        U SUUU[B        RD                  " U5      [B        RD                  " U	5      UU[F        RH                  " 5       SS.	5      $ U RJ                  RM                  S5      n[        [        U RJ                  RM                  S5      US9nU RJ                  RM                  SS5      RO                  SS5      RO                  SS5      n [Q        U5      nU RJ                  RM                  S	5      nU RT                  RM                  S5      nU RJ                  RM                  S5      nS nU(       a!  [V        R                  RY                  USS9u  nnU RJ                  RM                  S5      nUS:X  a  U RJ                  RM                  S5      OUnUS :X  a  U RJ                  RM                  S!5      OS nUS :X  a  UOUnU RJ                  RM                  S"5      nU(       a  [Q        URO                  SS5      5      OS nU RJ                  RM                  S5      =(       d    S nU[%        [F        RH                  " 5       5      :H  n[         R                  R[                  UUUUUUS:X  a  UOS UUUUUUS#9  []        S$UR&                  S%9$ [A        U SUUU[B        RD                  " U5      [B        RD                  " U	5      UU[F        RH                  " 5       S&.5      $ s  snnnf ! [R         a    [Q        S5      n GNf = f)'Nr=   rD   ordemnomeunidade)subgruporv   rw   TrP   rT   %d/%m/%Y )tiporX   rT   	descricaocomprovante_urlF)rD   comprovante__isnullr?   zobras/pagamentos.htmlI   Você atingiu o limite de 800MB. Exclua arquivos ou adquira mais espaço.)	rD   etapasgruposmateriais_jsonpagamentos_by_etapa_jsonpagamentos_futuroscomprovantesrh   erro_hdr{   etapa_idr>   rD   rX   .,z0.00comprovantegrupomaterial)rv   r{   zOutro (digitar manualmente)material_outroProfissionalprofissional
quantidade)rD   etapar   r{   r|   r   rX   rT   r   r   rw   rQ   pagamentos_obrarC   )rD   r   r   r   r   r   r   rh   )/r4   r5   r6   r   r7   r8   r	   r   r   r9   r:   order_byr(   r   keysitemsr   r   strr>   
setdefaultappendr{   rW   rX   rT   rU   r|   r   urlr@   r   r   rm   rn   r   rh   r?   rV   replacer   r   FILESr   get_or_createcreater   ) r*   rC   rD   r   r   rx   itensitemmateriais_listapagamentos_by_etapapagamentos_confirmadosr[   eidr   r   r{   r   	valor_strrX   data_pagamentor   
grupo_nome	grupo_obj_material_selecionado	item_nomer   r|   quantidade_strr   rw   rQ   s                                    r,   r   r      s    ||$$)<)<gll11==>Tg||DD%%4%099'BF).."#F  )00OHD F|YP 	Q0   &..554d5KTTU[\#777aggjj/C**33::qww
3[[.B891==#4#42<  $ #**11t%1HQQRXY$$++5+QL~~W\\**'#:  "&**_"=,0JJ7J,K&8 ,f
= 
 
 ||'!)0@0@0LSWXLL$$Wb199#rBJJ3PST		$I&E !))&1mm''6\\%%g.
	)11??ZV`?aLIq&||//
;:NRo:oGLL$$%56  vJ	;?>;Qw||''7W[$(N$:L		 )),7BPW^33C=>VZ
,,""9-5TZZ\!22  (<@](]9cg#! 	! 	
 )477;;'2**_5$(JJ/B$C0$	5 	 	aR   	$FOE	$s   &!UU% %U>=U>c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9nUR                  R                  U R                   :w  a  [        SUR                  R                  S9$ SUl        UR                  5         [        SUR                  R                  S9$ )Nr>   r   r   T)r4   r5   r6   r   r7   r8   r	   r   rD   r1   r   r>   rQ   rJ   )r*   pagamento_id	pagamentos      r,   confirmar_pagamentor      s     ||$$)<)<gll11==>!)=I ~~-)9>>3D3DEEINNN%y~~/@/@AAr.   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5         [        R                  R                  S5      R                  US9nUR                  R                  U R                   :w  a  [        SS0SS9$ UR                  R                  S	S
9R!                  [#        S5      S9S   =(       d    Sn[        UR$                  =(       d    S['        UR(                  =(       d    S5      ['        U5      S.5      $ ! [        R                   a    [        SS0SS9s $ f = f)NrD   r   erroru   Etapa não encontrada  statusu   Acesso não autorizado  TrQ   rX   totalr   r   rz   )r   valor_orcado
valor_pago)r4   r5   r6   r   r7   r8   r   r9   select_relatedrV   DoesNotExistr
   rD   r1   pagamento_setr:   	aggregater   r   rW   r   )r*   r   r   
total_pagos       r,   
etapa_infor   	  s6    ||$$)<)<gll11==>L!!008<<<I
 zzW\\)W&>?LL 	"""-	W	&w	0 	534 
 **0be005A6J'   !! LW&=>sKKLs   ,,E
 
 E-,E-)HttpResponseForbiddenc                 N   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9nUR                  U R                   :H  n[        R                  R                  X R                   S9R                  5       nU(       d  U(       d  [        S5      $ [        R                  R                  US9nU(       a  [        SUR                   /S9nO[        S5      nU R"                  S:X  Ga	  [%        U R                   5      (       a  ['        S	S
S.SS9$ U R(                  R+                  S5      nU R(                  R+                  S5      nU R,                  R+                  S5      n	U	(       a  [/        U	5      n	S n
U(       a+  [        R                  R                  XrS9R1                  5       n
U	(       a0  U
(       a)  [2        R                  R5                  UU
U	U=(       d    SS9  [7        SUR                   S9$ [2        R                  R                  US9R9                  S5      n0 nU H  nUR:                  (       a  [=        UR:                  R                   5      OSnX;  a  / X'   X   R?                  UR@                  RB                  URD                  URF                  RI                  S5      S.5        M     UU[J        RL                  " U5      US.n[O        U SU5      $ )Nr   )rD   r1   u1   Você não tem permissão para acessar esta obra.rt   rr   argsobras_equiper?   Fr   successr   r   r   r   r|   imagemr   rz   )rD   r   r   r|   
fotos_obrar   z-data_envio	sem_etapaz%d/%m/%Y %H:%M)r   r|   
data_envio)rD   r   fotos_by_etapa_json
voltar_urlzobras/fotos.html)(r4   r5   r6   r   r7   r8   r	   r   r1   
EquipeObrar9   r:   existsr   r   r   r>   r@   r   r
   r?   rV   r   r#   firstr   r   r   r   r   r   r   r   r   r|   r   rU   rm   rn   r   )r*   rC   rD   
is_cliente	is_equiper   r   r   r|   r   r   fotosfotos_by_etapafotor   contexts                   r,   r   r   (  sx   ||$$)<)<gll11==>Tg.D -J""))t\\)JQQSI)$%XYY%%4%0F]$'';
^,
~~W\\** d!  
 <<##J/LL$$[1	""8,%f-F%%,,,DJJLEeLL#/r	    dgg66LLT*33MBEN$(JJc$**-- K$"$N"";;??//223CD$
 		  #zz.9 	G '-w77r.   c                 	   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9n[        R                  R                  US9R                  S5      n[        R                  R                  US9R                  S5      n[        UR                  =(       d    S5      n[        UR                  SS9R                  [!        S5      S	9S
   =(       d    S5      n[        UR                  SS9R                  [!        S5      S	9S
   =(       d    S5      nXV-
  n[#        U(       a  Xe-  S-  OS5      n	/ n
U GH!  n[        UR$                  =(       d    S5      n[        [        R                  R                  USS9R                  [!        S5      S	9S
   =(       d    S5      nX-
  nU
R'                  UR(                  UR*                  UR,                  (       a  UR,                  R/                  S5      OSUR0                  (       a  UR0                  R/                  S5      OSUR2                  (       a  UR2                  R/                  S5      OSUUUS.5        GM$     / n0 n0 nU GHn  nUR4                  (       a  UR4                  R(                  OSnUR6                  (       a  UR6                  OUR8                  nUR'                  UR:                  R/                  S5      UR<                  UUUR>                  (       a  [        UR>                  5      OS UR@                  =(       d    S [        URB                  5      URD                  S.5        UR:                  R/                  S5      nURD                  (       a.  URG                  US5      [        URB                  5      -   UU'   GMC  URG                  US5      [        URB                  5      -   UU'   GMq     UUUUUU	UR,                  (       a/  [H        RJ                  " 5       UR,                  -
  RL                   S3OS[N        RP                  " U
5      [N        RP                  " U5      [N        RP                  " U5      [N        RP                  " U5      S.n[S        U SU5      $ )Nr=   rt   ru   rT   r   Tr   rX   r   r   Fr^   )r   rQ   ry   rz   )rv   r   rg   data_prevista_fimdata_fimr   r   saldo_etapa)rT   r{   r   r|   r   rw   rX   rQ   rS   rN   rO   )rD   r_   r`   rq   ra   rb   rc   etapas_data_jsonpagamentos_data_jsonfeitos_por_data_jsonagendados_por_data_jsonzobras/resumo.html)*r4   r5   r6   r   r7   r8   r	   r   r   r9   r:   r   r   rW   r_   r   r   rl   r   r   rv   r   rg   rU   r   r   r   r   r|   rT   r{   r   rw   rX   rQ   rV   r   rh   ri   rm   rn   r   )r*   rC   rD   r   
pagamentosr_   r`   rq   ra   rb   etapas_datar   valor_orcado_fpagos_etapar   pagamentos_datard   re   r[   
nome_etapadesckeyr   s                          r,   resumo_obrar   n  s    ||$$)<)<gll11==> Tg||DD %%4%099'BF ""))t)4==fEJ D005A6Ot$..S\.B7KPqK u%//c'l/CGLQPQN )Eok3c9STUJ Ku116Q7$$5t$<FFSQX\FZ[bchgh
 %2JJllEJEVEV5,,55jA\^QVQhQh!8!8!A!A*!Mnp?D~~//
;SU*%&	
 		 $ OO%&WWQWW\\"
#$#3#3qFFOOJ/FF12%-4yy(D177^FF	 
 		 ffooj)66#2#6#6sA#>qww#OOC &8&<&<S!&DuQWW~&Us#% , *"( OSO_O_tzz|d.>.>>DDEUKej JJ{3 $

? ; $

? ;#'::.@#AG '.88r.   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9nU R                  R                  S5      =(       d    U R                  R                  S5      nU R                  R                  S5      =(       d    U R                  R                  S5      n[        R                  R                  US9R                  S5      n[        R                  " U0 5      nU(       a  U(       a  UR                  U/ 5      O/ nU R                   S:X  a  [#        U R                  R                  SS5      5      nU R                  R                  S	5      n	SUs=::  a  [%        U5      :  aD  O  OAXx   n
[        R                  R'                  UU
S
   UUS[(        R*                  " 5       U	U
S   S9  [-        SUR.                   SU SU 35      $ [1        U SUUU[3        [5        U5      5      UUS.5      $ )Nr=   r   rx   rt   ru   r?   etapa_padrao_idr   data_previstarv   em_andamento)rD   rv   r   rx   r   rg   r   ru   /obras//etapas/?grupo=
&subgrupo=zobras/etapas.html)rD   etapas_existentesetapas_padraoetapas_do_subgrupogrupo_escolhidosubgrupo_escolhido)r4   r5   r6   r   r7   r8   r	   r   GETrV   r?   r   r9   r:   r   r   r@   rl   lenr   r   rh   r   r>   r   r(   	enumerate)r*   rC   rD   r   r   r   etapas_grupor   r   r   r   s              r,   etapas_obrar     s    ||$$)<)<gll11==> Tg||DDkkoog.K',,2B2B72KO 4T8H8H8T "))00d0;DDWM !$$_b9LETYk))*<bAqs~~w||''(91=>((923122+5J $$'%+% JJL"/ ) % 	 '$''//9J*UgThijj'..%"9-?#@A*01  r.   c                 &   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9n[        [        X#S9nU R                  S:X  Ga  U R                  R                  SS5      R                  5       Ul        U R                  R                  SS5      R                  5       Ul        U R                  R                  SS5      R                  5       Ul        U R                  R                  SUR                   5      Ul        U R                  R                  S	S5      R                  5       nU(       a3  UR#                  S
S5      R#                  SS
5      n [%        U5      Ul        U R                  R                  S5      nU R                  R                  S5      nU(       a+   [*        R,                  " US5      R/                  5       Ul        U(       a+   [*        R,                  " US5      R/                  5       Ul        U R6                  R                  S5      (       a  U R6                  S   Ul        U R6                  R                  S5      (       a  U R6                  S   Ul        UR=                  5         U R                  R                  SS5      nU R                  R                  SS5      n	[?        SUR@                  /S9n
U(       a  U	(       a  U
SU SU	 3-  n
[C        U
5      $ [C        SUR@                  S9$ ! [(         a    S Ul         GNf = f! [2         a    S Ul         GN[f = f! [2         a    S Ul         GNAf = f)Nr   r   r?   r|   rz   r   documento_profissionalrx   r   r   r   rg   r   rS   documento_orcamentocontrato_servicor   r   r   ?grupo=r   r   )"r4   r5   r6   r   r7   r8   r	   r   r   r@   r?   rV   stripr|   r   r   rx   r   r   r   r   r   strptimer   rg   
ValueErrorr   r   r   r   rJ   r   r>   r   )r*   rC   r   rD   r   valor_orcado_strdata_inicio_strdata_fim_strr   rx   redirect_urls              r,   salvar_detalhes_etapar    s    ||$$)<)<gll11==>Tg.DiH@E~~!,,**;;AAC$\\--nbAGGI'.||'7'78PRT'U'['[']$ ))*ennE #<<++NB?EEG/77R@HHcR*%,-=%>"
 ",,**=9||''
3)$,$5$5oz$R$W$W$Y! &!)!2!2<!L!Q!Q!S
 ==233(/6K(LE%==/00%,]]3E%FE"

   "-<<##J3}DGG9=XgeWJxjAAL%%M47733C $ *%)"*  )$(!)
  &!%&s6   $M 2*M# $*M; M M #M87M8;NNc                 <   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9n[        [        X#S9nUR                  S;   a1  SUl	        [        R                  " 5       Ul        UR                  5         U R                  R                  SS5      nU R                  R                  SS5      n[!        SU S	U S
U 35      $ )Nr=   r   )r   atrasada	concluidar   rz   rx   r   r   r   )r4   r5   r6   r   r7   r8   r	   r   r   r   r   rh   r   rJ   r?   rV   r   )r*   rC   r   rD   r   r   rx   s          r,   concluir_etapar  <  s     ||$$)<)<gll11==> Tg||DD iH@E||33"

LLWb)E||
B/HggYoeWJxjQRRr.   c                 $   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9n[        [        X#S9nUR                  5         U R                  R                  SS5      nU R                  R                  SS5      n[        SUR                  /S9nU(       a  U(       a  USU S	U 3-  n[        U5      $ )
Nr=   r   r   rz   rx   r   r   r   r   )r4   r5   r6   r   r7   r8   r	   r   r   rA   r?   rV   r   r>   r   )r*   rC   r   rD   r   r   rx   r  s           r,   deletar_etapar  U  s     ||$$)<)<gll11==> Tg||DD iH@E	LLNLLWb)E||
B/H=y9L'%
8*==L!!r.   )z.jpgz.jpegz.png.pdf
   )csrf_exemptc           
         U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        X!S9nU R                  R                  S5      nU R                  R                  S5      n[        R                  SU SU SU SU 35        US;  a!  [        R                  S	5        [        S
S0SS9$ U(       d!  [        R                  S5        [        S
S0SS9$ [        U R                   5      (       a!  [        R                  S5        [        S
S0SS9$  [         R"                  R%                  UUUS9nUR&                  R(                  R+                  5       R-                  S5      n[        R                  SUR&                  R.                   35        [        UR&                  R.                  UUR0                  S.5      $ ! [2         aC  n[        R5                  S[7        U5       35        [        S
S[7        U5       30SS9s S nA$ S nAff = f)Nr>   rC   r{   arquivoz[Upload] Obra: z	, Etapa: z, Tipo: z, Arquivo: )	orcamentocontratou!   [Upload] Tipo inválido recebido.r   u   Tipo inválidoi  r   z![Upload] Nenhum arquivo recebido.u   Arquivo não enviadou$   [Upload] Limite de espaço atingido.z!Limite de armazenamento atingido.)r   r{   r  r  z+[Upload] Documento salvo com sucesso. URL: )r   is_pdfr{   z#[Upload] Erro ao salvar documento: zErro ao salvar documento: i  )r4   r5   r6   r   r7   r8   r	   r   r?   rV   r   loggerr)   warningr
   r   r!   r9   r   r  namelowerendswithr   r{   	Exceptionr   r   )	r*   rC   r   r   r{   r  docr  es	            r,   upload_documento_etapar   {  s    ||$$)<)<gll11==>iHFE<<F#Dmm	*G
KK/')H:XdV;W^V_`a ,,:;W&67DD:;W&<=cJJ &&=>W&IJSVWWZ$$++ , 
 !!'')226:A#++//ARST;;??HH
  	  Z:3q6(CDW(B3q6(&KLUXYYZs   B*H 
I8IIIc                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        R                  " U R                  5      nUR                  S5      n[        [        X!S9n[        R                  R                  XTS9R                  5       nU(       ad  UR                   R"                  nUR%                  5         [&        R(                  " U5      (       a  [&        R$                  " U5        [+        SS05      $ [+        SS0SS	9$ )
Nr   r  )r   arquivo__icontainsokTr   u   Documento não encontrador   r   )r4   r5   r6   r   r7   r8   rm   loadsbodyrV   r	   r   r!   r9   r:   r   r  pathrA   r"   r   r
   )r*   rC   r   rT   r   r   	documentocaminhos           r,   delete_documento_etapar)    s     ||$$)<)<gll11==>::gll#D
((5/CiHFE&&--E-RXXZI##((!!'**""7+T4L))"=>sKKr.   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9n[        U SSU05      $ )Nr   zobras/painel_relatorio.htmlrD   )	r4   r5   r6   r   r7   r8   r	   r   r   rB   s      r,   gerar_painel_relatorior+    s[     ||$$)<)<gll11==>Tg.D'864.IIr.   c                     U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        X5      $ )N)r4   r5   r6   r   r7   r8   r    )r*   rC   s     r,   gerar_relatorio_apir-    sF     ||$$)<)<gll11==>"744r.   )get_random_string)	send_mail)Group)get_user_model)r   r   c                     [         R                  " SU 5      R                  SS5      R                  S5      n [        R
                  " SSU 5      R                  5       n U S S $ )NNFKDASCIIignorezutf-8z\W+rz      )unicodedata	normalizeencodedecoderesubr  )rv   s    r,   limpar_nome_para_usernamer=    sS      .55gxHOOPWXD66&"d#))+D8Or.   c                    [         R                  " U R                  R                  R                  5        [        [        US9nU R                  S:X  Ga  U R                  R                  S5      nU R                  R                  S5      nU(       a  U(       d,  [        R                  " U S5        [        U R                  5      $ [        R                  R!                  X$S9R#                  5       (       a,  [        R                  " U S5        [        U R                  5      $ [%        U5      nU ['        SS	S
9 3n['        SSS
9n[)        5       nUR                  R+                  UUUUS9n	U R                  R                  U	l        SU	l        U	R/                  5         [0        R                  R3                  SS9u  pU	R4                  R7                  U
5        [        R                  R9                  UU	UUS9  [;        SSU SUR<                   SU SU S3	SU/SS9  [        R>                  " U SU S35        [        SUR@                  S9$ [C        U SS U05      $ )!Nr   r?   rv   emailu'   Preencha todos os campos obrigatórios.)rD   r?  u)   Este e-mail já foi usado para esta obra.   	123456789)lengthallowed_chars   abcdefghjkmnpqrstuvwxyz23456789)usernamer?  password
first_nameFEquipe)r  )rD   r1   rv   r?  zAcesso ao sistema Minha Obrau   
Olá u7   ,

Você foi cadastrado como membro da equipe da obra: u9   

Acesse: https://obras.grfgraph.com.br/login/
Usuário: z
Senha: uM   

Troque sua senha após o primeiro acesso.

Atenciosamente,
Equipe GRFGraph
znao-responda@grfgraph.com.brT)subjectmessage
from_emailrecipient_listfail_silentlyz)Membro cadastrado e convite enviado para r   
ver_equiper   zobras/cadastrar_equipe.htmlrD   )"r   r7   r4   r6   r8   r	   r   r@   r?   rV   r   r   r   r&  r   r9   r:   r   r=  r.  r1  create_useris_staffrJ   r0  r   groupsaddr   r/  rv   r   r>   r   )r*   rC   rD   rv   r?  base_usernamerF  senhaUserr4   r   r   s               r,   cadastrar_equiperW    s)    ',,--99:Tg.D~~||'  )5NN7$MNGLL))$$$$<CCEENN7$OPGLL)) 2$7#_%6a{%[$\]!:[\||''	 ( 
 ll))		==..H.=!!	 	" 	
 	2
V 559YYK @ * w  6!7%	
* 	$MeWTU"VWdgg66'864.IIr.   c                 <   [         R                  " U R                  R                  R                  5        [        [        X!S9nUR                  nUR                  5         UR                  5         [        R                  " U SUR                   S35        [        SUS9$ )Nr  zMembro da equipe "z" removido com sucesso.rO  r   )r   r7   r4   r6   r8   r	   r   r1   rA   r   r   rv   r   )r*   rC   	membro_idmembror1   s        r,   deletar_membro_equiper[  ;  sv     ',,--99:ziIFnnG
MMONNW 26;;-?VWXL'22r.   )r   r   c                     [         R                  " U R                  R                  R                  5        [        [        US9n[        R                  R                  US9R                  S5      n[        U SX#S.5      $ )Nr   rt   z-data_convitezobras/ver_equipe.html)rD   equipe)r   r7   r4   r6   r8   r	   r   r   r9   r:   r   r   )r*   rC   rD   r]  s       r,   rO  rO  M  se     ',,--99:Tg.D&&D&1::?KF'2T4TUUr.   c                 `   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        R                  R                  U R                   S9R                  S5      n[        U SSU05      $ )Nr0   rD   zobras/obras_equipe.htmlr2   )r4   r5   r6   r   r7   r8   r   r9   r:   r   r   )r*   r2   s     r,   r   r   X  sv    ||$$)<)<gll11==>%%gll%;JJ6RE'4w6FGGr.   c                 .   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9n[        U R                   5      (       a  [        SSS.5      $ U R                  R                  S5      nU(       a  [        U5      nU(       d  [        SSS.5      $ [        R                  R                  X#S9  [        SS	05      $ )
Nr=   Fu+   Espaço esgotado. Limite de 800MB atingido.r   r   zNenhuma foto enviada.)rD   r   r   T)r4   r5   r6   r   r7   r8   r	   r   r   r
   r   rV   r#   r   r9   r   )r*   rC   rD   r   s       r,   upload_foto_obrar`  b  s    ||$$)<)<gll11==>Tg||DD &&8efgg==V$D%8OPQQ3D)**r.   )r   r	   )now)r   r   r   r   )	mark_safe)r   )defaultdictc                 v   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        XR                   S9n[        R                  R                  US9R                  S5      n[        R                  R                  US9R                  S5      n[        R                  R                  US9R                  S5      n[        UR                  =(       d    S5      n[        UR                  SS9R!                  [#        S	5      S
9S   =(       d    S5      nXg-
  nUR$                  (       a,  [&        R(                  " 5       UR$                  -
  R*                  OSn	UR                  SS9n
UR                  SS9n[-        U Vs/ s H  n[        UR.                  5      PM     sn5      nUR                  SS9R1                  5       nSUR2                   S3n[5        [        5      n[5        [        5      nU Hq  nUR6                  R9                  S5      nUR:                  (       a"  UU==   [        UR.                  5      -  ss'   MQ  UU==   [        UR.                  5      -  ss'   Ms     [=        [>        R@                  " U5      5      n[=        [>        R@                  " U5      5      n0 SU_SU_SU_SU_SU_SU_SU_SU	_S[C        5       _SU_SU
_SU_SU_SU_S U_S!U_n[E        U S"U5      $ s  snf )#Nr=   rt   ru   rT   r   r   Tr   rX   r   r   Fr  r   z/media/relatorios/obra_z_curva_s.pngrS   rD   r   r   r   r   r   
saldo_obradias_decorrhojegrafico_curva_sr   rp   pagamentos_agendados_valoretapas_concluidasr   r   z$obras/relatorios/relatorio_obra.html)#r4   r5   r6   r   r7   r8   r	   r   r   r9   r:   r   r   r   rW   r_   r   r   rg   r   rh   ri   rj   rX   countr>   rc  rT   rU   rQ   rb  rm   rn   ra  r   )r*   rC   rD   r   r   r   r   r   re  rf  r   rp   r[   ri  rj  rh  rd   re   data_strfeitos_jsonagendados_jsonr   s                         r,   relatorio_previewro    s*    ||$$)<)<gll11==>Tg||DD %%4%099'BF""))t)4==fEJLLT*33LAE --23Lt$..S\.B7KPqJ *J<@<L<L4::<$"2"2288RSK (..D.9%,,%,8!$>R%S>ReAGGn>R%S!T [9??A 0yEO "%(O$U+66??:.66H%qww7%x(E!''N:(  DJJ78Ktzz*<=>N& 	j 		
 	 	j 	j 	{ 	 	? 	!"8 	 4 	%&@ 	." 	#$ 	">%G* 'A7KKY &Ts   	L6)gosrm   r   r   decimalr   r   django.shortcutsr   r   r	   django.httpr
   django.urlsr   django.contrib.auth.decoratorsr   django.contrib.authr   django.contribr   django.views.decorators.httpr   	django.dbr   django.db.modelsr   formsr   modelsr   r   r   r   r   r   r   r   r   uploadsr   r   r   r   	relatorior    r!   django.core.files.storager"   r#   
decoratorsr$   r-   r;   rE   rL   rr   r   r   r   r   r   r   r   r  r  r  ALLOWED_EXTENSIONSMAX_FILE_SIZE_MBdjango.views.decorators.csrfr  logging	getLogger__name__r  r   r)  r+  r-  r7  r;  django.utils.cryptor.  django.core.mailr/  django.contrib.auth.modelsr0  r1  r   r=  rW  r[  rO  r   r`  django.utils.timezonera  django.utils.safestringrb  collectionsrc  obras.modelsro   r.   r,   <module>r     s   	  # - @ @ $  9 & # 5      N N   ! c c . " 5 % +   
  
 $  $ H  H$ *  *^ a  aP B   B$   6 .@8 @8J R9  R9n .  .f 64  64| S   S, "   "0 7   4 5 5 $ 			8	$*Z   *Zf L   L( J  J 5  5  	 1 & , . @ @ #   9 $ + BJ  BJN 	3  	3 %V  V H H + +. 7   % 4 4 9 6     % -  #  9 9BL  BLr.   