
    LaAiN              
       l   d dl mZmZmZmZmZmZmZ d dlZ	d dlm
Z
 d dlZd dlZd dlmZ d dlmZ d dlmZ  e         ee      Zej*                  j-                  dd      e_         ej0                  ej2                  	        ej4                  e      Zej*                  j-                  d
d      ej*                  j-                  dd      ej*                  j-                  dd      ej*                  j-                  dd       eej*                  j-                  dd            dZej*                  j-                  d
d      ej*                  j-                  dd      ej*                  j-                  dd      d eej*                  j-                  dd            dZed6d       Zd Z ejC                  dddg      d        Z"ejC                  d      d        Z#ejC                  dddg      e d                Z$ejC                  d!ddg      e d"               Z%ejC                  d#      e d$               Z&ejC                  d%ddg      e d&               Z'ejC                  d'ddg      e d(               Z(ejS                  d)      d*        Z*ejS                  d+      d,        Z+ed-k(  rej*                  j-                  d.d/      Z, eej*                  j-                  d0ej*                  j-                  d1d2                  Z-ej*                  j-                  d3d4      d4k(  Z.ej_                  e,e-e.5       yy)7    )Flaskrender_templaterequestredirecturl_forflashsessionN)Error)contextmanager)load_dotenvwraps
SECRET_KEYzdev-key-change-in-production)levelDB_HOST	localhostDB_USERrootDB_PASSWORD DB_NAME	seu_bancoDB_PORT3306)hostuserpassworddatabaseportloginc              #     K   d}	 | rt         j                         }nt        j                         }|r||d<   t        j                  j
                  di |}| 	 |r"|j                         r|j                          yyy# t        $ r}t        j                  d|         d}~ww xY w# |r"|j                         r|j                          w w w xY ww)u   Context manager para gerenciar conexões com o banco de dados
    
    Args:
        is_login: Se True, usa o banco 'login'
        database_name: Nome customizado do banco de dados
    Nr   z$Erro ao conectar ao banco de dados:  )LOGIN_DB_CONFIGcopy	DB_CONFIGmysql	connectorconnectr
   loggererroris_connectedclose)is_logindatabase_nameconnconfiges        *C:\Users\joaqu\OneDrive\pelocelular\app.pyget_db_connectionr3   &   s      D$))+F^^%F%2z"&&00

 D%%'JJL (4	  ;A3?@ D%%'JJL (4s5   CAB %C	B(
B##B((B+ +&CCc                 .     t                fd       }|S )z0Decorator para proteger rotas que requerem loginc                  d    dt         vr t        dd       t        t        d            S  | i |S )N
usuario_idu1   Por favor, faça login para acessar esta página.r*   
login_page)r	   r   r   r   )argskwargsfs     r2   decorated_functionz*login_required.<locals>.decorated_functionC   s6    w&EwOGL122$!&!!    r   )r:   r;   s   ` r2   login_requiredr=   A   s!    
1X" "
 r<   z/loginGETPOST)methodsc                  
   t         j                  dk(  rt         j                  j                  dd      j	                         } t         j                  j                  dd      j	                         }| r|s t        dd       t        t        d            S 	 t        d	      5 }|j                  d
      }|j                  d| |f       |j                         }|j                          |rl|d   t        d<   |d   t        d<   |d   t        d<   t        j                  d|         t        d|d    dd       t        t        d            cddd       S t        j!                  d|         t        dd       	 ddd       t        t        d            S dt        v rt        t        d            S t'        d      S # 1 sw Y   DxY w# t"        $ r.}t        j%                  d|        t        dd       Y d}~yd}~ww xY w)u   Página de loginr?   usuarior   senhau%   Por favor, preencha usuário e senha.r*   r7   Tr-   
dictionaryz
                    SELECT chave, usuario, id_cliente 
                    FROM login 
                    WHERE usuario = %s AND senha = %s
                chaver6   usuario_nome
id_clienteu"   Login bem-sucedido para usuário: zBem-vindo, !successindexNu(   Tentativa de login falha para usuário: u   Usuário ou senha inválidos.zErro ao fazer login: z4Erro ao conectar ao banco de dados. Tente novamente.z
login.html)r   methodformgetstripr   r   r   r3   cursorexecutefetchoner,   r	   r)   infowarningr
   r*   r   )rB   rC   r/   rQ   	resultador1   s         r2   r7   r7   K   s    ~~,,""9b1779  "-335e97CGL122	S"D1 DT5   u%	' #OO-	,5g,>GL).7	.BGN+,5l,CGL)KK"DWI NOK	)(<'=Q?K#GG$45'D D* NN%MgY#WX97C-D8 -.. w())<((ED D0  	SLL045H'RR	Ss=   G "B+F?	G $F?<G ?GG 	H$G==Hz/logoutc                      t        j                  dd      } t        j                          t        j	                  d|         t        dd       t        t        d            S )u   Faz logout do usuáriorH   u   UsuáriozLogout realizado para: zLogout realizado com sucesso!rK   r7   )r	   rO   clearr)   rT   r   r   r   )rB   s    r2   logoutrY   {   sL     kk.*5GMMO
KK)'34	
)95GL)**r<   z/senhac                      t         j                  dk(  r
t         j                  j                  dd      j	                         } t         j                  j                  dd      j	                         }t         j                  j                  dd      j	                         }| r|r|s t        dd       t        t        d            S t        |      d	k  r t        d
d       t        t        d            S ||k7  r t        dd       t        t        d            S 	 t        d      5 }|j                         }t        j                  d      }|j                  d|| f       |j                         }|s9t        dd       |j                          t        t        d            cddd       S |j                  d||f       |j                          |j                          t         j#                  d|        t        dd       t        t        d            cddd       S t)        d      S # 1 sw Y   nxY w	 t)        d      S # t$        $ rB}t         j'                  d|        t        dd       t        t        d            cY d}~S d}~ww xY w)u,   Tela para alterar a senha do usuário logador?   senha_atualr   
nova_senhaconfirmar_senhazPreencha todos os campos.r*   alterar_senha   z.A nova senha deve ter pelo menos 4 caracteres.u&   A confirmação de senha não confere.TrD   r6   z3SELECT 1 FROM login WHERE chave = %s AND senha = %szSenha atual incorreta.Nz,UPDATE login SET senha = %s WHERE chave = %szSenha alterada para usuario_id=zSenha atualizada com sucesso.rK   rL   zErro ao alterar senha: z)Erro ao alterar a senha. Tente novamente.z
senha.html)r   rM   rN   rO   rP   r   r   r   lenr3   rQ   r	   rR   rS   r,   commitr)   rT   r
   r*   r   )r[   r\   r]   r/   rQ   r6   okr1   s           r2   r^   r^      s*    ~~ll&&}b9??A\\%%lB7==?
!,,**+<bAGGI*O-w7GO455z?QBGLGO455(:GDGO455	6"D1 2T$[[6
 I- __&2G<LLN#GO$<=2 2  B, =j\JK5yA 0112 2> <((?2 2 2> <((  	6LL21#67=wGGO455	6sD   I %A;H* 	I *A+H*	I *H3/I 	J7JJJz	/usuariosc                  D	   t        j                  d      } | s t        dd       t        t	        d            S t
        j                  dk(  rt
        j                  j                  dd      }|dk(  rt
        j                  j                  d	      }|s t        d
d       t        t	        d            S t        |      t        t        j                  d            k(  r t        dd       t        t	        d            S 	 t        d      5 }|j                         }|j                  d|| f       |j                          |j                          t        dd       ddd       t        t	        d            S t
        j                  j                  dd      j#                         }t
        j                  j                  dd      j#                         }| }|r|s t        dd       t        t	        d            S t%        |      dk  r t        dd       t        t	        d            S t%        |      dk  r t        dd       t        t	        d            S 	 t        d      5 }|j                  d      }|j                  d||f       |j'                         }	|	r9t        dd       |j                          t        t	        d            cddd       S |j                  d |||f       |j                          |j                          t        j)                  d!| d"| d#       t        d$d       t        t	        d            cddd       S 	 t        d      5 }|j                  d      }|j                  d'| f       |j+                         }
|j                          ddd       t-        d*
| +      S # 1 sw Y   ^xY w# t        $ r/}t        j!                  d|        t        dd       Y d}~d}~ww xY w# 1 sw Y   nxY w# t        $ rB}t        j!                  d%|        t        d&d       t        t	        d            cY d}~S d}~ww xY w# 1 sw Y   xY w# t        $ r0}t        j!                  d(|        t        d)d       g }
Y d}~d}~ww xY w),u>   Lista e permite inclusão de novos usuários no banco de loginrI   u2   Não foi possível identificar o banco do cliente.r*   rL   r?   acaor   deleterG   u!   Chave do usuário não informada.usuariosr6   u,   Não é possível excluir o usuário logado.TrD   z6DELETE FROM login WHERE chave = %s AND id_cliente = %su   Usuário removido.rK   Nu   Erro ao excluir usuário: u*   Erro ao excluir usuário. Tente novamente.rB   rC   u   Preencha usuário e senha.   u,   O usuário deve ter pelo menos 3 caracteres.r_   z)A senha deve ter pelo menos 4 caracteres.rE   z@SELECT 1 AS ok FROM login WHERE usuario = %s AND id_cliente = %su(   Usuário já existe. Escolha outro nome.zBINSERT INTO login (usuario, senha, id_cliente) VALUES (%s, %s, %s)u   Usuário criado: z (id_cliente=)u   Usuário criado com sucesso.u   Erro ao incluir usuário: u*   Erro ao incluir usuário. Tente novamente.zVSELECT chave, usuario, id_cliente FROM login WHERE id_cliente = %s ORDER BY chave DESCu   Erro ao listar usuários: u   Erro ao listar usuários.zusuarios.html)rf   rI   )r	   rO   r   r   r   r   rM   rN   strr3   rQ   rR   ra   r,   r
   r)   r*   rP   r`   rS   rT   fetchallr   )id_cliente_atualrd   chave_deleter/   rQ   r1   novo_usuarior\   novo_id_clienteexistelistas              r2   rf   rf      s    {{<0BGL())~~||+ 8"<<++G4L97C
 344< CL(A$BBDgN
 344M&5 ;![[]FNNP%'78 KKMLLN.	:; GJ/00||''	26<<>\\%%gr288:
* :.8GJ/00|q @'JGJ/00z?Q=wGGJ/00	1"D1 5T5V!?3  *DgNLLN#GJ$785 5 X!:? /~]?J[[\]^4i@
 34+5 58- 	[[D[1FNNh!# OO%ELLN	 ?UGWXXS; ;  M9!=>BGLLM,5 5 5,  	1LL5aS9:>HGJ/00	1	 	  1!56)73s   >O 
AN7O P "A(O?
	P A0O?	P Q& AQ!Q& 7O<O 	O<$O77O<?PP 	Q7QQQQ#Q& &	R/&RR/c                  ,   d\  } }}}	 t        j                  d      }t        |      5 }|j                  d      }|j	                  d       |j                         }|rH|j                  dd      } |j                  d	d      }|j                  d
d      }|j                  dd      }|j                          ddd       t        d| |||      S # 1 sw Y   xY w# t        $ r.}t        j                  d|        t        dd       Y d}~Nd}~ww xY w)u0   Página inicial que exibe os dados mais recentes)r   r   r   r   rI   r.   TrE   z
                SELECT nome, Endereco, tel1, tel2 
                FROM dados_online 
                ORDER BY keychave DESC 
                LIMIT 1
            nomer   Enderecotel1tel2NzErro ao buscar dados: z6Erro ao carregar os dados. Tente novamente mais tarde.r*   z
index.html)rt   enderecorv   rw   )r	   rO   r3   rQ   rR   rS   r,   r
   r)   r*   r   r   )	nmendt1t2r   r/   rQ   rV   r1   s	            r2   rL   rL     s    %OBRQ;;|,X6 	$[[D[1F NN   )I]]62.mmJ3]]62.]]62.LLN'	2 <b3RbQQ3	 	*  Q-aS12FPPQs/   !C BC8C CC 	D%$DDz/mesasc                     	 t         j                  d       t        j                  j	                  dd      } t        j                  d      }t        |      5 }|j                  d      }|j                  d       |j                         }g }d	}d	}d	}| r|j                  d
| f       |j                         }	|	D ]h  }
|
d   }|
d   }|dk\  r||z  }n|}|dk(  rd}n|dk(  rd}n|dk(  rd}nt        |      }|j                  |
d   |
d   |
d   ||dd       ||z  }|
d   }j |r||dz  z  }||z   }nd	}|}|j                  d       |j                         }d	}d	}|D ])  }
|
d   }|
d   }|dk\  r||z  }n|}||z  }|
d   s%|
d   }+ |rr||dz  z  }||z   }nd	}|}|j                          ddd       t        d| | rdnd| rdnd| rdnddddt              d	kD        S # 1 sw Y   CxY w# t        $ rB}t         j!                  d |        t#        d!d"       t%        t'        d#            cY d}~S d}~ww xY w)$zRota para movimento de mesaszAcessando movimento de mesasclassificacaor   rI   rs   TrE   z
                SELECT DISTINCT mesanro, status, taxaservico 
                FROM mesa_online 
                ORDER BY mesanro
            r   z
                    SELECT lancamento, codpro, nomedprod, quantidade, valor, taxaservico
                    FROM mesa_online 
                    WHERE mesanro = %s 
                    ORDER BY lancamento
                
quantidadevalor   g      ?z1/2gZd;O?z1/3g      ?z1/4
lancamentocodpro	nomedprod.2f)r   codigo	descricaor   r   taxaservicod   zd
                SELECT quantidade, valor, taxaservico
                FROM mesa_online
            Nz
mesas.htmlz0.00)
mesasmesa_selecionada
itens_mesasubtotaltaxa_servicototaltotal_geral
taxa_geraltotal_com_taxa	tem_mesaszErro na rota /mesas: u(   Erro ao processar requisição de mesas.r*   rL   )r)   rT   r   rN   rO   r	   r3   rQ   rR   rj   ri   appendr,   r   r`   	Exceptionr*   r   r   r   )r   r   r/   rQ   r   r   r   r   r   itensitemquantr   
preco_itemquant_formatada
valor_taxatodas_mesasr   r   precotaxa_percentualr   r1   s                          r2   r   r   A  s   z*23 #<<++OR@ ;;|,X6 a	$[[D[1F NN  
 OO%E JHLE  
 '(* )! 7D .E ME z%*U]
%*
 |*/%*/$*/*-e*%%&*<&8"&x.%)+%6&5$.s#3'  
*H#'#6L;7@  !)\C-?!@J$z1E!"J$E NN  
 !//+KKJ# :\*WA:!EME!Eu$&&*=&9O: (Oc,AB
!,z!9
!,LLNCa	F |#(.>(2;K#QWAQZ,<W]5EeC[6,7+<+5c*:/=c.B'*;'7!';
= 
	=Ga	 a	^  *,QC018'B())*s>   AH D-G5-G53AH 5G>:H 	I
7IIIz/diarioc                  n   	 t         j                  d       t        j                  d      } t	        |       5 }|j                  d      }|j                  d       |j                         }t        d |D              }|j                  d       |j                         }t        d	 |D              }|j                          d
d
d
       t        ddd      S # 1 sw Y   xY w# t        $ rB}t         j                  d|        t        dd       t        t        d            cY d
}~S d
}~ww xY w)u%   Rota para relatório diário e mensalu   Acessando relatório diáriorI   rs   TrE   z
                SELECT NomeGrupo, QtGrupo, ValorGrupo 
                FROM vendadiaria 
                ORDER BY chave
            c              3   &   K   | ]	  }|d      yw)
ValorGrupoNr"   .0r   s     r2   	<genexpr>zdiario.<locals>.<genexpr>  s     OdtL1O   z
                SELECT lancamento, quantidade, valor 
                FROM vendamensal 
                ORDER BY KeyChave
            c              3   &   K   | ]	  }|d      yw)r   Nr"   r   s     r2   r   zdiario.<locals>.<genexpr>  s     JtG}Jr   Nzdiario.htmlr   )relatorio_diariototal_diariorelatorio_mensaltotal_mensalzErro na rota /diario: u5   Erro ao processar requisição de relatório diário.r*   rL   )r)   rT   r	   rO   r3   rQ   rR   rj   sumr,   r   r   r*   r   r   r   )r   r/   rQ   r   r   r   r   r1   s           r2   diarior     s0   )*23 ;;|,X6 	$[[D[1F NN  
  &0 O>NOOL NN  
  &0 J9IJJLLLN3	6 }.>-9#,>.>-9#,>	A 	A7	 	B  *-aS12EwO())*s5   6C) B	CC) C&"C) )	D427D/)D4/D4  c                     t        d      dfS )zTratamento de erro 404z404.htmlr   )r   r1   s    r2   page_not_foundr     s     :&++r<     c                 L    t         j                  d|         t        d      dfS )zTratamento de erro 500zErro interno do servidor: z500.htmlr   )r)   r*   r   r   s    r2   internal_errorr     s(     LL-aS12:&++r<   __main__FLASK_RUN_HOSTz0.0.0.0FLASK_RUN_PORTPORT1472FLASK_DEBUG1)r   r   debug)FN)0flaskr   r   r   r   r   r   r	   mysql.connectorr&   r
   oslogging
contextlibr   dotenvr   	functoolsr   __name__appenvironrO   
secret_keybasicConfigINFO	getLoggerr)   intr%   r#   r3   r=   router7   rY   r^   rf   rL   r   r   errorhandlerr   r   r   r   r   runr"   r<   r2   <module>r      s*   T T T  ! 	  %   Ho.LM   ',, '			8	$ JJNN9k2JJNN9f-

}b1

y+6

y&12	 JJNN9k2JJNN9f-

}b1

y&12  4 8eV_--) .-)^ 9+ + 8eV_-3)  .3)j ;0^Y  1^Y@ 3 R   RD 8eV_-|*  .|*| 9ufo.+*  /+*Z #, , #, ,
 z::>>*I6Drzz~~.

vv0NOPDJJNN=#.#5EGGDG.	 r<   