
    jJ                       S SK JrJrJrJrJrJrJrJrJ	r	  S SK
rS SKrS SKrS SKJr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  \R.                  R1                  \R.                  R3                  \R.                  R5                  \5      5      SSSS5      r\R.                  R;                  \5      (       a  \\R.                  ;  a  \R.                  R=                  S \5        \\R>                  -   \R@                  RC                  S	S
5      -   \R@                  S	'   \"" \S5      (       a   \RF                  " \5         S SK%q% S SK&r&S r'\R.                  R3                  \R.                  R5                  \5      5      r(\" \)\R.                  R1                  \(S5      \R.                  R1                  \(S5      S9r*S\*l+        S\*RX                  S'   S\*RX                  S'   S\*RX                  S'   S\*RX                  S'   \*RZ                  S 5       r.\*R_                  S5      S 5       r0\*R_                  SS/S9\'S 5       5       r1\*R_                  S5      \'S  5       5       r2\*R_                  S!5      \'S" 5       5       r3\*R_                  S#S$/S9\'S% 5       5       r4S& r5\*R_                  S'S$/S9\'S( 5       5       r6\*R_                  S)S/S9\'S* 5       5       r7\*R_                  S+S,/S9\'S- 5       5       r8\*R_                  S.S,/S9\'S/ 5       5       r9\*R_                  S+S0/S9\'S1 5       5       r:\*R_                  S)S0/S9\'S2 5       5       r;\*R_                  S3S,/S9\'S4 5       5       r<S5 r=S6 r>S7 r?\*R_                  S8S$/S9\'S9 5       5       r@\*R                  S: 5       rB\*R_                  S;5      S< 5       rC\*R_                  S=5      S> 5       rD\*R_                  S?5      \'S@ 5       5       rE\*R_                  SA5      \'SB 5       5       rF\*R_                  SC5      SD 5       rG\*R_                  SES$/S9\'SF 5       5       rHSG rISH rJSI rKSJ rLSK rMSL rNSM rOSN rPSO rQSP rRSSQ jrSSSR jrTSS rU\*R_                  STS/S9SU 5       rV\*R_                  SVS/S9\*R_                  SWS/S9SX 5       5       rW\*R_                  SY5      \'SZ 5       5       rX\*R_                  S[5      S\ 5       rY\*R_                  S[S$/S9S] 5       rZ\*R_                  S^5      S_ 5       r[\*R_                  S`5      \'Sa 5       5       r\\*R_                  Sb5      \'Sc 5       5       r]\*R_                  Sd5      \'Se 5       5       r^\*R_                  Sf5      \'Sg 5       5       r_\*R_                  Sh5      \'Si 5       5       r`\*R_                  SjS$/S9\'Sk 5       5       ra\*R_                  SlS/S9\'Sm 5       5       rb\*R_                  SnS/S9\'So 5       5       rc\*R_                  SpSq/S9\'Sr 5       5       rd\*R_                  SsS0/S9\'St 5       5       re\*R_                  Su5      \'Sv 5       5       rf\*R_                  SwS$/S9\'Sx 5       5       rg\*R_                  SyS/S9\'Sz 5       5       rh\*R_                  S{S/S9\'S| 5       5       ri\*R_                  S}Sq/S9\'S~ 5       5       rj\*R_                  SS0/S9\'S 5       5       rk\*R_                  S5      \'S 5       5       rl\*R_                  SS$/S9\'S 5       5       rm\*R_                  SS/S9\'S 5       5       rn\*R_                  SS/S9\'S 5       5       ro\*R_                  SSq/S9\'S 5       5       rp\*R_                  SS0/S9\'S 5       5       rq\*R_                  S5      \'S 5       5       rr\*R_                  SS$/S9\'S 5       5       rs\*R_                  S5      \'S 5       5       rt\*R_                  S5      \'S 5       5       ru\*R_                  S5      \'S 5       5       rv\*R_                  SS$/S9\'S 5       5       rw\*R_                  SS/S9\'S 5       5       rx\*R_                  SS/S9S 5       ry\*R_                  SS/S9S 5       rz\*R_                  SS$/S9S 5       r{\*R_                  SS/S9S 5       r|\*R_                  SS/S9\'S 5       5       r}\*R_                  SS$/S9\'S 5       5       r~\*R_                  S5      \'S 5       5       r\*R_                  SS$/S9S 5       r\*R_                  S5      S 5       rS r\*R_                  S5      S 5       r\*R_                  S5      S 5       r\*R_                  S5      S 5       r\*R_                  S5      S 5       r\*R_                  SS/S9S 5       r\*R_                  SS/S9S 5       r\*R_                  SS/S9S 5       r\*R_                  SS$/S9S 5       r\*R_                  SS/S9\'S 5       5       r\*R_                  SS$/S9S 5       r\*R_                  SS$/S9S 5       r\*R_                  SS$/S9S 5       r\*R_                  SS/S9S 5       r\*R_                  SS/S9S 5       r\*R_                  SS$/S9S 5       r\*R_                  S5      S 5       r\*R_                  SS$/S9S 5       r\*R_                  SS$/S9S 5       r\*R_                  SS/S9S 5       r\*R_                  SS/S9\'S 5       5       r\*R_                  SS$/S9\'S 5       5       r\*R_                  SS/S9\'S 5       5       r\*R_                  SS$/S9\'S 5       5       r\*R_                  SS/S9\'S 5       5       r\*R_                  SS/S9S 5       r\*R_                  SS0/S9S 5       r\*R_                  SS,/S9\'S 5       5       r\)S:X  Gar  \R.                  R1                  \*GR:                  \*GR<                  =(       d    S5      r\" SSS9  \" SSS9  \" S\R.                  R5                  \*GR:                  5      SS9  \" SSS9  \" S\R.                  R5                  \5      SS9  \" SSS9  \" SSS9   S SKJr  \R.                  R1                  \(S5      r\" \SSS9 r\GRK                  S5        \GRK                  S\GRL                  " 5       GRO                  SS9 S35        \GRK                  \U" 5       5        \GRK                  S5        SSS5        \" S\ 3SS9  \5" 5         \*GRU                  SSSS9  gg! \$ a     GNf = f! \$ a    Sq% GNf = f! \$ a    Sr& GNf = f! , (       d  f       N^= f! \ a  r\" S\ 3SS9   SrCNlSrCff = f)    )	Flaskrender_templatejsonifyrequestsessionredirecturl_formake_responseResponseN)pprintwrapsz.venvLibzsite-packagespywin32_system32PATH add_dll_directoryc                 0   ^  [        T 5      U 4S j5       nU$ )Nc                     > S[         ;  aj  [        R                  R                  S5      S:X  d#  [        R                  R                  S5      S:X  a  [	        SSS.5      S	4$ [        [        S
5      5      $ T" U 0 UD6$ )Nusuario_logadoX-Requested-WithXMLHttpRequestAcceptzapplication/jsonFu%   Sessão expirada ou não autenticada.sucessomensagem  
login_page)r   r   headersgetr   r   r	   )argskwargsfs     Pc:\Users\user\Desktop\Projetos_em_andamento\_Mexendo\LojaOnline\app-Cliente30.pydecorated_function*login_required.<locals>.decorated_function$   s{    7*""#56:JJgooNaNabjNk  pB  OB5>efgilllGL122$!&!!    r   )r#   r%   s   ` r$   login_requiredr(   #   s!    
1X" " r'   	templatesstatic)template_folderstatic_folder-novaloja_secret_key_2025_change_in_productionTTEMPLATES_AUTO_RELOADLaxSESSION_COOKIE_SAMESITEFSESSION_COOKIE_SECURESESSION_COOKIE_DOMAINc                     U R                   R                  SS5      nSU;   a-  SU R                   S'   SU R                   S'   SU R                   S	'   U $ )
uF   HTML sempre fresco — evita ver layout antigo por cache do navegador.zContent-Typer   z	text/htmlz$no-store, max-age=0, must-revalidatezCache-Controlzno-cachePragma0Expires)r   r    )responsects     r$   _evitar_cache_htmlr9   ;   sY     
				nb	1Bb,R)%/"&)#Or'   z/api/mesa-todosc                  ,    [        5       n U R                  SS9nUR                  S5        UR                  5       nUR	                  5         U R	                  5         [        SU05      $ ! [         a   n[        S[        U5      05      s S nA$ S nAff = f)NT
dictionaryz-SELECT * FROM mesa ORDER BY id DESC LIMIT 100	registroserro)conectarcursorexecutefetchallcloser   	Exceptionstr)conncurr=   es       r$   listar_todas_mesasrI   F   s|    	)zkkTk*CDLLN			

Y/00 )A'(()s   A&A) )
B3BBBz/formas-pagamentoGET)methodsc                      [        S5      $ )Nzformas_pagamento.htmlr    r'   r$   formas_pagamento_pagerO   U   s     233r'   z/configuracoesc                  t   [         R                  " S5      n Sn [        5       nUR                  SS9nU (       aE  UR	                  SU 45        UR                  5       nU(       a  UR                  S5      (       a  US   nUR                  5         UR                  5         [        SU US9$ ! [         a     Nf = f)	N
id_cliente
Minha LojaTr;   z8SELECT nome FROM dadosloja WHERE id_cliente = %s LIMIT 1nomezconfiguracoes.htmlrQ   nome_fantasia)	r   r    r?   r@   rA   fetchonerC   rD   r   )rQ   rU   rF   rG   rows        r$   configuracoesrX   [   s     \*J MzkkTk*KKRU_Tab,,.Cswwv #F		

 #   s   BB* *
B76B7z/configuracoes-dadosc                      [        S5      $ )Nzconfiguracoes_dados.htmlrM   rN   r'   r$   configuracoes_dadosrZ   s   s     566r'   z/api/salvar-mesaPOSTc                  	    [         R                  " 5       n U R                  S/ 5      n[        R                  " S5      n[	        5         U R                  S5      nU R                  SS 5      nU(       a  U(       d\  [        SSS.5      S4S	[        5       ;   a  W(       a  UR                  5         S
[        5       ;   a  W(       a  UR                  5         $ $ $ [        5       nUR                  5       nUR                  SS9nUR                  SXB45        UR                  5       nU(       a7  UR                  S5      (       a!  US   R                  5       R                  5       OSn	UR                  5         U	S;   GaQ  [        U5      S:  GaA  [        U5      n
/ nU H.  n UR                  [!        UR                  SS5      5      5        M0     U	S:X  a!  U
S:  a  [%        ['        U5      U
-  S5      OSnOU(       a  [)        U5      OSnSS Kn[-        UR*                  " 5       S-  5      nU SU SU 3n[/        U5       H  u  nnUR                  S5      nU
S:  a  SU
 S3OSnU U 3nUR                  S5      nUR                  S5      =(       d    SR                  5       nUnUS:X  a  UOSnUR                  SUUUUUXBUU4	5        M     OSS KnU H  nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      =(       d    SR                  5       n[-        UR*                  " 5       S-  5      nUR                  SUUUUUXBUU4	5        M     UR1                  5         [        SS S.5      S	[        5       ;   a  U(       a  UR                  5         S
[        5       ;   a  U(       a  UR                  5         $ $ $ ! ["         a    UR                  S5         GMk  f = f! ["         a  n[3        S!USS"9  [4        R6                  " 5         [        S[9        U5      S.5      S#4s S nAS	[        5       ;   a  W(       a  UR                  5         S
[        5       ;   a  W(       a  UR                  5         $ $ $ S nAff = f! S	[        5       ;   a  W(       a  UR                  5         S
[        5       ;   a  W(       a  UR                  5         f f f = f)$NprodutosrQ   	nropedidoclasseFu,   Produtos ou número da mesa não informados.r     r@   rF   Tr;   z`SELECT formadecobrar FROM classificacao WHERE nomeclassificacao = %s AND id_cliente = %s LIMIT 1formadecobrarnormal)mediamaior   precor   rc      i  _rS   z1/ r   qtdobs_itemz
                    INSERT INTO mesa (mesanro, produto, preco, quantidade, codigoproduto, classe, id_cliente, nrolancamento, obs_item)
                    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
                    codigoprodutoz*Produtos enviados para a mesa com sucesso!z"[ERRO] ao salvar produtos na mesa:flush  )r   get_jsonr    r   _ensure_obs_columnsr   localsrC   r?   r@   rA   rV   lowerstriplenappendfloatrD   roundsummaxtimeint	enumeratecommitprint	traceback	print_excrE   )datar]   rQ   mesanror_   r@   rF   cursor_class	class_rowra   partesprecosprodvalor_principalr{   nrolancamentocodigo_multiparteidxnome_originalprefixorS   rj   rk   rl   preco_gravarrf   rH   s                              r$   salvar_mesar   y   sB   S5!88J+[[.
((;'(D)wu:hijlooT vxFFLLNVX$

$U z{{d{3  CI  BV  	W ))+	GPU^UbUbcrUsUs?399;AAC  zB..3x=13D]FF %MM%!(<"=> !
 'DJQJ%Ff(<a"@TU17#f+Q 		d 23M $+)1VHAm_ E&x0	T $ 0,2QJBvha.B!=/2hhuo HHZ06B==? 125( dL#}fZgiqr 1$  xx')hhuo $ 9 HHZ06B==? !$DIIK$$6 7 dE3vS`bjk !" 	45abc vxFFLLNVX$

$w ! %MM!$$%j  D2ATB5c!f=>CCvxFFLLNVX$

$D
 vxFFLLNVX$

$s]   BP CP *O$GP $P?P PP 
R 8R	R 
R# R  R# #AS1c                     S n S n [        5       n U R                  5       nUR                  S5        UR                  5       c  UR                  S5        UR                  S5        UR                  5       c  UR                  S5        UR                  S5        UR                  5       c  UR                  S5        U R	                  5         U(       a  UR                  5         U (       a  U R                  5         g g ! [
         a>  n U (       a  U R                  5         O! [
         a     Of = f[        SUSS	9   S nANsS nAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)
Nz2SHOW COLUMNS FROM deliverypendente LIKE 'obs_item'z:ALTER TABLE deliverypendente ADD COLUMN obs_item TEXT NULLz3SHOW COLUMNS FROM deliverypendente LIKE 'obs_geral'z;ALTER TABLE deliverypendente ADD COLUMN obs_geral TEXT NULLz&SHOW COLUMNS FROM mesa LIKE 'obs_item'z.ALTER TABLE mesa ADD COLUMN obs_item TEXT NULLz[OBS COLUNAS ERRO]Trm   )	r?   r@   rA   rV   r~   rD   rollbackr   rC   )rF   rG   rH   s      r$   rq   rq      s   D
CzkkmHI<<>!KKTUIJ<<>!KKUV<=<<>!KKHI IIKJJL   3	 		"AT23 IIKJJL sH   CC9 9
EDD<
D)&D<(D))D<7E <EE 1E5z/api/casa/itemc                  	   S n S n [         R                  " SS9=(       d    0 nUR                  S5      nUR                  S5      =(       d    0 nU(       d?  [        SSS.5      S4U(       a  UR	                  5         U (       a  U R	                  5         $ $ UR                  S	5      =(       d    S
R                  5       nU(       d?  [        SSS.5      S4U(       a  UR	                  5         U (       a  U R	                  5         $ $ [        R                  " S5      nU(       d?  [        SSS.5      S4U(       a  UR	                  5         U (       a  U R	                  5         $ $ [        5         [        5       n U R                  SS9n[        U5      UR                  S5      =(       d    S
R                  5       UR                  S5      =(       d    S
R                  5       UR                  S	5      =(       d    S
R                  5       UR                  S5      =(       d    S
R                  5       UR                  S5      =(       d    S
R                  5       UR                  S5      =(       d    S
R                  5       U[        UR                  S5      =(       d    S5      [        UR                  S5      =(       d    S5      [        UR                  S5      =(       d    S
5      [        UR                  S5      =(       d    S
5      [        UR                  S5      =(       d    S
5      [        UR                  S5      =(       d    S
5      UR                  S5      =(       d    UR                  S	5      =(       d    S
R                  5       U4nUR                  SU5        UR                  nU R                  5         [        SUS.5      U(       a  UR	                  5         U (       a  U R	                  5         $ $ ! [          a  n	U (       a  U R#                  5         [%        S U	SS!9   [%        S"W 3SS!9  [%        S#[        R                  " S5       3SS!9  O! [          a     Of = f[&        R(                  " 5         [        S[        U	5      S.5      S$4s S n	A	U(       a  UR	                  5         U (       a  U R	                  5         $ $ S n	A	ff = f! U(       a  UR	                  5         U (       a  U R	                  5         f f = f)%NTsilentr^   itemFu   nropedido é obrigatórior   r>   r`   rS   r   u   Nome do item é obrigatóriorQ   uE   Sessão inválida: id_cliente não encontrado. Faça login novamente.r   r;   telefonecependereconrocasacomplementorf   r   rj   re   rl   r_   rk   	obs_geralclientea4  
            INSERT INTO deliverypendente
            (nropedido, telefone, cep, nome, endereco, nrocasa, complemento, produto, preco, quantidade, codigoproduto, classe, obs_item, obs_geral, cliente, id_cliente)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            )r   idz[CASA ADD ITEM ERRO]rm   z[CASA ADD ITEM ERRO] payload=z'[CASA ADD ITEM ERRO] id_cliente_sessao=ro   )r   rp   r    r   rC   rt   r   rq   r?   r@   r|   rw   rE   rA   	lastrowidr~   rD   r   r   r   r   )
rF   rG   r   r^   r   rS   rQ   valoresnovo_idrH   s
             r$   api_casa_add_itemr      s    D
C<t,2HH[)	xx%2u6QRSUXXh IIKJJL k  &B--/u6TUVX[[b IIKJJL c [[.
u6}~  BE  EZ IIKJJL ] 	zkkTk*	NXXj!'R..0XXe_"))+XXf#**,XXj!'R..0XXi &B--/XXm$*113$((7#(q)$((5/&Q')/R0"(b)$*+%+,XXi :DHHV$4:AAC!
$ 	
 	
 --4w78 IIKJJL   
@MMO$at4	1$8E;GKK<U;VW_cd 		5#a&9:C??IIKJJL 
@ IIKJJL sg   AO/ >O/ ,O/ I!O/ /
S9"R=.Q
R=
QR=Q0R=S	S =SS 1S6z/api/casa/<int:nropedido>c                 ^   S nS n [         R                  " S5      n[        5         [        5       nUR	                  SS9nUR                  SX45        UR                  5       =(       d    / nU Vs/ s H  n[        U5      PM     nnSnU(       a+  US   R                  S5      =(       d    SR                  5       n[        SXFS.5      U(       a  UR                  5         U(       a  UR                  5         $ $ s  snf ! [         ar  n[        S	USS
9  [        R                  " 5         [        S[        U5      S.5      S4s S nAU(       a  UR                  5         U(       a  UR                  5         $ $ S nAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)NrQ   Tr;   a  
            SELECT d.chave, d.nropedido, d.produto, d.preco, d.quantidade, d.codigoproduto, d.classe, d.obs_item, d.obs_geral,
                   IFNULL(p.descricao, '') AS descricao_produto
            FROM deliverypendente d
            LEFT JOIN produtos p ON p.chave = CAST(d.codigoproduto AS UNSIGNED) AND p.id_cliente = d.id_cliente
            WHERE d.nropedido = %s AND d.id_cliente = %s
            ORDER BY chave DESC
            r   r   r   )r   r=   r   z[CASA LISTA ERRO]rm   Fr   ro   )r   r    rq   r?   r@   rA   rB   convert_typesrt   r   rC   rD   r   r   r   rE   )r^   rF   rG   rQ   regsrr   rH   s           r$   api_casa_listar_itensr   3  s^    D
C[[.
zkkTk* #
	
 ||~#*./$Qa $/	a[17R>>@I4dST IIKJJL  0
  @!1D15#a&9:C??IIKJJL @
 IIKJJL sC   A)C< /C7AC< 7C< <
E88E3>E8?E; 3E88E; ;1F,z,/api/casa/<int:nropedido>/item/<int:item_id>PATCHc                 B   S nS n [         R                  " SS9=(       d    0 nUR                  SS 5      nUR                  SS 5      nUcB  Uc?  [        SSS.5      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ [
        R                  " S	5      n[        5         [        5       nUR                  5       n/ n/ n	Ub{  [        U=(       d    S
5      n
U
S
::  a?  [        SSS.5      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ UR                  S5        U	R                  U
5        Ub9  UR                  S5        U	R                  [        U5      R                  5       5        U	R                  XU/5        UR                  SSR                  U5       S3U	5        UR!                  5         UR"                  S
:X  a?  [        SSS.5      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ [        SS05      U(       a  UR	                  5         U(       a  UR	                  5         $ $ ! [$         a  nU(       a  UR'                  5         [)        SUSS9  [*        R,                  " 5         [        S[        U5      S.5      S4s S nAU(       a  UR	                  5         U(       a  UR	                  5         $ $ S nAff = f! U(       a  UR	                  5         U(       a  UR	                  5         f f = f)NTr   rj   rk   FzNada para atualizarr   r`   rQ   r   z"Quantidade deve ser maior que zerozquantidade = %szobs_item = %szUPDATE deliverypendente SET , z8 WHERE chave = %s AND nropedido = %s AND id_cliente = %su   Item não encontrado  r   z[CASA PATCH ITEM ERRO]rm   ro   )r   rp   r    r   rC   r   rq   r?   r@   rw   rv   rE   rt   extendrA   joinr~   rowcountrD   r   r   r   r   )r^   item_idrF   rG   r   qtd_rawrk   rQ   	set_partsparamsrj   rH   s               r$   api_casa_alterar_itemr   Y  s    D
C(t,2((5$'88J-?x/u6KLMsR@ IIKJJL C [[.
zkkm	1%Cax5:^_`bee, IIKJJL / ./MM#_-MM#h---/0w:67*499Y+?*@@xy	
 	<<1u6LMNPSS IIKJJL  	4() IIKJJL   @MMO&65#a&9:C??IIKJJL @ IIKJJL sE   AI A*I &CI I 
K*!AK%0K*1K- %K**K- -1Lz#/api/casa/<int:nropedido>/obs-geralc                 ^   S nS n [         R                  " SS9=(       d    0 nUR                  S5      =(       d    SR                  5       n[        R                  " S5      n[        5         [        5       nUR                  5       nUR                  SX@U45        UR                  5         [        SS05      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a  nU(       a  UR                  5         [        SUSS	9  [        R                   " 5         [        S
[#        U5      S.5      S4s S nAU(       a  UR                  5         U(       a  UR                  5         $ $ S nAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)NTr   r   r   rQ   zSUPDATE deliverypendente SET obs_geral = %s WHERE nropedido = %s AND id_cliente = %sr   z[CASA OBS GERAL ERRO]rm   Fr   ro   )r   rp   r    rt   r   rq   r?   r@   rA   r~   r   rC   rD   r   r   r   r   rE   )r^   rF   rG   r   r   rQ   rH   s          r$   api_casa_obs_geralr     sG    D
Ct,2XXk*0b779	[[.
zkkma:.	
 		4() IIKJJL   @MMO%q55#a&9:C??IIKJJL @ IIKJJL s1   B/C% %
E8/AE3>E8?E; 3E88E; ;1F,DELETEc                    S nS n [         R                  " S5      n[        5       nUR                  5       nUR	                  SXU45        UR                  5         [        SUR                  S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a  nU(       a  UR                  5         [        SUSS9  [        R                  " 5         [        S[        U5      S.5      S	4s S nAU(       a  UR                  5         U(       a  UR                  5         $ $ S nAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)
NrQ   zTDELETE FROM deliverypendente WHERE chave = %s AND nropedido = %s AND id_cliente = %sTr   	removidosz[CASA DELETE ITEM ERRO]rm   Fr   ro   r   r    r?   r@   rA   r~   r   r   rC   rD   r   r   r   r   rE   )r^   r   rF   rG   rQ   rH   s         r$   api_casa_remover_itemr     s    D
C[[.
zkkmb,	
 	4cllCD IIKJJL   @MMO'$75#a&9:C??IIKJJL @ IIKJJL s1   A+B! !
D4+AD/:D4;D7 /D44D7 71E(c                    S nS n [         R                  " S5      n[        5       nUR                  5       nUR	                  SX45        UR                  5         [        SUR                  S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a  nU(       a  UR                  5         [        SUSS9  [        R                  " 5         [        S[        U5      S.5      S	4s S nAU(       a  UR                  5         U(       a  UR                  5         $ $ S nAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)
NrQ   zEDELETE FROM deliverypendente WHERE nropedido = %s AND id_cliente = %sTr   z[CASA LIMPAR PEDIDO ERRO]rm   Fr   ro   r   )r^   rF   rG   rQ   rH   s        r$   api_casa_limpar_pedidor     s    D
C[[.
zkkmS#	
 	4cllCD IIKJJL   @MMO)1D95#a&9:C??IIKJJL @ IIKJJL s1   A*B   
D3*AD.9D3:D6 .D33D6 61E'z(/api/casa/<int:nropedido>/formapagamentoc                 v   S nS n [         R                  " SS9=(       d    0 nUR                  S5      =(       d    SR                  5       nU(       d?  [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        R                  " S	5      n[        5       nUR                  5       nUR                  S
X@U45        UR                  5         UR                  S:X  a?  [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [	        SSS.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a  nU(       a  UR                  5         [        SUSS9  [        R                   " 5         [	        S[#        U5      S.5      S4s S nAU(       a  UR                  5         U(       a  UR                  5         $ $ S nAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)NTr   formar   Fu"   Forma de pagamento é obrigatóriar   r`   rQ   z
            UPDATE deliverypendente
            SET formapagamento = %s
            WHERE nropedido = %s AND id_cliente = %s
            r   z'Pedido sem itens para definir pagamentor   zForma de pagamento atualizadar   z[CASA FORMAPAGAMENTO ERRO]rm   ro   )r   rp   r    rt   r   rC   r   r?   r@   rA   r~   r   rD   r   r   r   r   rE   )r^   rF   rG   r   r   rQ   rH   s          r$   api_casa_formapagamentor     s    D
Ct,2'"(b//1u6Z[\^aa. IIKJJL 1 [[.
zkkm
 z*	
 	<<1u6_`acff IIKJJL  45TUV IIKJJL   @MMO*AT:5#a&9:C??IIKJJL @ IIKJJL s>   AE1 A3E1 4E1 1
H;AG?
HH ?HH 1H8c                      [         R                  R                  S5      =(       d    SR                  5       n U (       a  U $ S$ )NLOJA_PEDIDOS_SALVOS_DIRr   zC:\Geral\Pedidos_Salvos)osenvironr    rt   )ds    r$   %_dir_pedidos_salvos_configurado_cli30r     s1    	1	2	8b??AA1111r'   c                     [         R                  R                  [        5       5      n [         R                  R	                  [         R                  R                  [
        5      5      n[         R                  R                  [         R                  R                  US5      5      n[         R                  R                  [         R                  R                  [        R                  " 5       S5      5      n[        5       n/ nXU4 Hh  n[         R                  R                  [         R                  R                  U5      5      nXt;  d  MF  UR                  U5        UR                  U5        Mj     U$ )Npedidos_salvos_exportLojaOnline_Pedidos_Salvos)r   pathabspathr   dirname__file__r   tempfile
gettempdirsetnormcasenormpathaddrv   )primaryherefallback_projfallback_tempseenoutpks           r$    _uniq_base_dirs_candidates_cli30r     s    ggooCEFG77??277??845DGGOOBGGLL7N$OPMGGOO
X((*,GHM 5D
Cm4GGRWW--a01=HHQKJJqM	 5
 Jr'   c                    [         R                  " S5      n[         R                  " S5      nSU=(       d    S SU S3n[        U =(       d    S5      R                  5       nU(       a	  USU S	3-  nS n[	        [        5       5       H  u  p [        R                  R                  X5      n
[        R                  " U
S
S9  [        R                  R                  X5      n[        USSS9 nUR                  U5        S S S 5        XUS:  4s  $    U(       a  Ue[        S5      e! , (       d  f       N-= f! [         a  nUn S nAM  S nAff = f)Nz%Y-%m-%dz%H%M%Spedido_
sem_numerorh   z.txtr   z
FORMA DE PAGAMENTO: 
T)exist_okwutf-8encodingr   u.   Não foi possível gravar o arquivo do pedido.)r{   strftimerE   rt   r}   r   r   r   r   makedirsopenwriteOSError)conteudor^   forma_pagamentodata_dirsufixonome_arquivocorpoultimor   base_dirpastacaminhor#   rH   s                 r$   _salvar_txt_pedido_casa_cli30r     s   }}Z(H]]8$FY6,7qELB%%'E)/):"==F"#C#EF		GGLL4EKK-ggll57GgsW5 6#'11 G 
B
CC 65  	F	s1   AD4*D#<D4#
D1	-D44
E>EEz/api/casa/salvar-txtc                  p    [         R                  " SS9=(       d    0 n [        U R                  SS5      =(       d    S5      R	                  5       n[        U R                  S5      =(       d    S5      n[        U R                  SS5      =(       d    S5      R	                  5       nU(       d  [        SS	S
.5      S4$ [        XU5      u  pEnSXES.nU(       a  SUS'   [        U5      $ ! [         aC  n[        SUSS9  [        R                  " 5         [        S[        U5      S
.5      S4s S nA$ S nAff = f)NTr   r   r   r^   r   r   Fu   Conteúdo vazio para salvarr   r`   )r   r   arquivou   Não foi possível gravar em C:\Geral\Pedidos_Salvos. Arquivo salvo em pasta alternativa (projeto ou %TEMP%\LojaOnline_Pedidos_Salvos).avisoz[CASA SALVAR TXT ERRO]rm   ro   )r   rp   rE   r    rt   r|   r   r   rD   r   r   r   )	dadosr   r^   r   r   r   usou_fallbackr   rH   s	            r$   api_casa_salvar_txtr   0  s   @  -3uyyR06B7==?		+.3!4	eii(92>D"EKKMu6STUWZZZ/LXbq/r,}7Le L s| @&65#a&9:C??@s$   B:C( =*C( (
D528D0*D50D5c                  X   [         R                  R                  S[        R                  " S5       S35        [         R                  R                  5         [         R                  R                  S[        R                  " S5       S35        [         R                  R                  5         g )Nu*   [LOG][before_request] Sessão id_cliente: rQ   r   u.   [LOG][before_request] Sessão usuario_logado: r   )sysstderrr   r   r    rn   rN   r'   r$   log_id_cliente_globalr   H  sq    JJA'++lB[A\\^_`JJJJEgkkRbFcEddfghJJr'   z/pingc                      g)N)pong   rN   rN   r'   r$   pingr  P  s    r'   z/rota_testec                      g)NzRota de teste OK!rN   rN   r'   r$   
rota_tester  U  s    r'   z
/mesa_testc                      [        S5      $ )Nzmesa_test.htmlrM   rN   r'   r$   	mesa_testr  Z  s     +,,r'   z/mesac            	         [         R                  " S5      n [        SU  3SS9  [        5       nUR                  SS5      n[        SU 3SS9  / n[	        5       nS n [        5       nUR                  SS9nUR                  S	U 45        UR                  5       nUR                  S
U 45        UR                  5       n[	        S U 5       5      n UR                  SU 45        UR                  5       n[        SU 3SS9  UR                  5         UR                  5         [        SXX4US9$ ! [         a  n	[        SU	 3SS9   S n	A	NHS n	A	ff = f! [         a  n
[        SU
SS9   S n
A
NJS n
A
ff = f)NrQ   u$   [LOG] (mesa) id_cliente na sessão: Trm   rS   rR   z[LOG] (mesa) nome_fantasia: r;   zLSELECT * FROM classificacao WHERE id_cliente = %s ORDER BY nomeclassificacaoz7SELECT DISTINCT mesanro FROM mesa WHERE id_cliente = %sc              3   R   #    U  H  oR                  S 5      c  M  US    v   M     g7f)r   N)r    ).0rW   s     r$   	<genexpr>mesa.<locals>.<genexpr>t  s       h:CQZI[Y:s   ''LSELECT * FROM configuracao WHERE id_cliente = %s ORDER BY chave DESC LIMIT 1z%[LOG] (mesa) configuracao carregada: z[ERRO] ao buscar configuracao: u<   [ERRO] ao buscar classificações ou mesas para o carrossel:z	mesa.html)rQ   rU   classificacoesmesas_com_registroconfig)r   r    r   obter_dados_lojar   r?   r@   rA   rB   rV   rD   rC   r   )rQ   
dados_lojarU   r  r  r  rF   rG   
mesas_rowse_confrH   s              r$   mesar  `  sy    \*J	0
=TJ!#JNN6<8M	(
8ENF]zkkTk*beodqrMPZ}]\\^
  h: hh	JKKfishuv\\^F9&B$O 			

 ;:ky  jp  q  q  	J3F8<DI	J  ]LaW[\]sC   A1E 0D* > E *
E4EE EE 
E-E((E-z0/produtos_por_classificacao/<nome_classificacao>c                 f   SS K nSS KnUR                  R                  SU  S35        UR                  R	                  5         S[
        ;  d  [
        R                  " S5      (       dD  UR                  R                  S5        UR                  R	                  5         [        SS05      S4$ UR                  R                  S	[
        R                  " S5       S35        UR                  R	                  5         UR                  R                  S
U  S35        UR                  R	                  5         S nS n [        SSS9  [        SU  S[        U 5       S3SS9  UR                  SU 5      R                  5       n[        5       nUR                  SS9n[
        R                  " S5      n[        SU 3SS9  U(       dR  [        SSS9  [        SSS9  [        SS05      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        SXV4SS9  UR                  SXV45        UR!                  5       n[        SU 3SS9  U(       d^  [        SU  SU 3SS9  [        SSS9  [        SSU  SU 305      S4U(       a  UR                  5         U(       a  UR                  5         $ $ US   n[        SU 3SS9  [        S X4SS9  UR                  S!X45        UR#                  5       n	[        S"U	 3SS9  U	(       d.  UR                  S#5        UR#                  5       n
[        S$U
 3SS9  [        SSS9  [        U	5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [$         a{  n[        S%USS9  [&        R(                  " 5         [        SSS9  [        S[+        U5      05      S&4s S nAU(       a  UR                  5         U(       a  UR                  5         $ $ S nAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)'Nr   zK[DEBUG] Entrou na rota /produtos_por_classificacao com nome_classificacao: r   rQ   u\   [ERRO] Sessão não autenticada ou id_cliente ausente ao acessar produtos_por_classificacao
r>   u.   Sessão não autenticada ou id_cliente ausenter   u6   [LOG][produtos_por_classificacao] Sessão id_cliente: uA   [LOG][produtos_por_classificacao] Nome classificação recebido: uS   
==================== INÍCIO LOG PRODUTOS POR CLASSIFICAÇÃO ====================Trm   z+[LOG] nome_classificacao recebido na URL: 'z	' (type: )NFKCr;   u   [LOG] id_cliente na sessão: u-   [ERRO] id_cliente não encontrado na sessão!uO   ==================== FIM LOG PRODUTOS POR CLASSIFICAÇÃO ====================
%   id_cliente não encontrado na sessãozy[LOG] Executando SELECT nomeclassificacao, id_cliente FROM classificacao WHERE nomeclassificacao = %s AND id_cliente = %szhSELECT nomeclassificacao, id_cliente FROM classificacao WHERE nomeclassificacao = %s AND id_cliente = %sz)[LOG] Resultado do SELECT classificacao: u   [ERRO] Classificação 'u!   ' não encontrada para o cliente    Classificação 'r   nomeclassificacaoz$[LOG] nomeclassificacao encontrada: zl[LOG] Executando SELECT chave, produto, preco, descricao FROM produtos WHERE classe = %s AND id_cliente = %szqSELECT chave, produto AS nome, preco, descricao AS observacao FROM produtos WHERE classe = %s AND id_cliente = %sz[LOG] Produtos retornados: z0SELECT DISTINCT classe, id_cliente FROM produtosz0[LOG] Todas as classes e id_cliente existentes: u.   [ERRO] ao buscar produtos por classificação:ro   )r   unicodedatar   r   rn   r   r    r   r   type	normalizert   r?   r@   rC   rA   rV   rB   rD   r   r   rE   )nome_classificacaor   r  rF   r@   nome_classificacao_normrQ   rW   nome_classificacao_dbr]   todas_classesrH   s               r$   produtos_por_classificacaor$    s(   JJbcubvvxyzJJ7"'++l*C*C

xy

 PQRTWWWJJMgkkZfNgMhhjklJJJJXYkXllnopJJDF-dlpq;<N;OyY]^pYqXrrst  }A  	B"-"7"7@R"S"Y"Y"[z-[[.
-j\:$GANdlpqF$KLMsR> LLNJJL = 	  J  Ne  Mr  z~  	  B  E\  Di  	joo9#?tL,-?,@@ablamnvz{dlpqF&78J7KKlmwlx$yz{  ~A  A* LLNJJL - !$$7 845J4KLTXY 	|  AV  @c  ko  	p  K  Nc  Mp  	q??$+H:6dCNNMN"OO-MD]OT\`a`hlmx  LLNJJL   .>N`hlmA'(#--LLNJJL . LLNJJL s@   6B)M7 A1M7 0BM7 7
O<AO7O<O? 7O<<O? ?1P0z/api/salvar-forma-pagamentoc                     [         R                  " 5       n U R                  SS5      R                  5       n[        R                  " S5      nU(       d  [        SSS.5      S4$  [        5       nUR                  5       nUR                  SX45        UR                  5         [        S	S
S.5      S[        5       ;   a  U(       a  UR                  5         S[        5       ;   a  U(       a  UR                  5         $ $ $ ! [         ao  n[        S[        U5      S.5      S4s S nAS[        5       ;   a  W(       a  UR                  5         S[        5       ;   a  W(       a  UR                  5         $ $ $ S nAff = f! S[        5       ;   a  W(       a  UR                  5         S[        5       ;   a  W(       a  UR                  5         f f f = f)Nr   r   rQ   Fu!   Forma de pagamento não informadar   r`   z>INSERT INTO formapagamento (forma, id_cliente) VALUES (%s, %s)Tz)Forma de pagamento adicionada com sucessor@   rF   ro   )r   rp   r    rt   r   r   r?   r@   rA   r~   rr   rC   rD   rE   )r   r   rQ   rF   r@   rH   s         r$   salvar_forma_pagamentor&    sM    DHHWb!'')E\*J56YZ[]```
5zWZ_Ylm45`ab vxFFLLNVX$

$	  D5c!f=>CCvxFFLLNVX$

$	D vxFFLLNVX$

$s2   $A
C; ;
E4E/E4E7 /E44E7 7AGc            	      F    [         R                  R                  SSSSSSS9$ )Nz	127.0.0.1rootpctrimi  loja2001T)hostuserpasswordportdatabase
autocommit)mysql	connectorconnectrN   r'   r$   r?   r?     s0    ??"" #  r'   c                  >   Sn Sn [        5       n U R                  SS9nSSKnUR                  5       R                  nSnU(       a  SUR
                  ;   a  UR
                  S   nU(       a  UR                  SU45        OUR                  S5        UR                  5       nU(       a1  UU(       a  UR                  5         U (       a  U R                  5         $ $  U(       a  UR                  5         U (       a  U R                  5         gg! [         aT  n[        SU 35        S	S
SSSSSSSSS.
s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)u4   Obtém dados da loja cadastrados na tabela dadoslojaNTr;   r   rQ   z5SELECT * FROM dadosloja WHERE id_cliente = %s LIMIT 1'SELECT * FROM dadosloja WHERE chave = 1z$[ERRO] Erro ao obter dados da loja: g9/FQg/nDrR   u   Praça São Pedrou   Aerolândiaz
Picos - PIz	64600-000r   89)
latitude	longituderS   r   bairrocidader   r   dddcnpj)r?   r@   inspectcurrentframef_backf_localsrA   rV   rC   rD   r   )rF   r@   r=  framerQ   r   rH   s          r$   r  r    sa   DF"z-$$&--
\U^^35JNNRU_TabNNDE!  LLNJJL ' " LLNJJL #  
4QC89"$ +#"
 	
 LLNJJL #
 LLNJJL s0   B#D
 

E(E#.E(/E+ #E((E+ +1Fc                 *   Sn[         R                  " X -
  5      n[         R                  " X1-
  5      n[         R                  " US-  5      S-  [         R                  " [         R                  " U 5      5      [         R                  " [         R                  " U5      5      -  [         R                  " US-  5      S-  -  -   nS[         R                  " [         R
                  " U5      [         R
                  " SU-
  5      5      -  n[        XH-  S5      $ )Ng     @rg   re   )mathradianssincosatan2sqrtrx   )	lat1lon1lat2lon2Rdlatdlonacs	            r$   haversine_kmrR  	  s    A<<$D<<$Da!dhht||D'9:488DLLQUDV;WWX\X`X`aefgagXhjkXkkkA	DJJtyy|TYYq1u%566A?r'   c                 n   U (       a  [        U R                  5       5      S:  a  gSnU SSS.nSS0n [        R                  " XUS	S
9nUR                  S:w  a  gUR                  5       nU(       d  g[        US   S   5      [        US   S   5      4$ ! [         a  n[        SU5         S nAgS nAff = f)N   NNz*https://nominatim.openstreetmap.org/searchjsonre   )qformatlimit
User-Agentznovaloja-geocoder/1.0   )r   r   timeoutr  r   latlonz[GEOCODE ERRO])	ru   rt   requestsr    status_coderV  rw   rD   r   )r   urlr   r   r   r   rH   s          r$   geocodificarrb    s    s8>>+,q0
6Cv:F45G
LLWaH==CvvxT!WU^$eDGEN&;;; "s#   &B B 2!B 
B4B//B4c           
          SnU SU SU  SU SU S3
n[         R                  " USSS0S	9nUR                  S
:w  a  g UR                  5       nU(       a  UR                  S5      S:w  a  g UR                  S5      =(       d    / nU(       d  g US   R                  S5      n	U	c  g [	        U	S-  S5      $ ! [
         a  n
[        SU
5         S n
A
g S n
A
ff = f)Nz/http://router.project-osrm.org/route/v1/driving/,;z.?overview=false&alternatives=false&steps=falser[  rZ  znovaloja-osrm/1.0)r\  r   r  codeOkroutesr   distanceg     @@rg   z[OSRM ERRO])r_  r    r`  rV  rx   rD   r   )lat_lojalon_lojalat_clilon_clibasera  r   r   ri  dist_mrH   s              r$   distancia_osrm_kmrq  #  s    @az8*AgYay@noLLa,@S1TU==Cvvxtxx'4/(#)rz*>Vf_a(( mQs.   ;B4 ,B4 +!B4 B4 %B4 4
C>CCc                    [        5       nUS   nUS   nU R                  SS5      U R                  SS5      U R                  SS5      U R                  SS5      U R                  SS5      S	/nS
R                  U Vs/ s H  oU(       d  M  UPM     sn5      n[        U5      u  pxUb'  Ub$  [	        X#Xx5      n	U	b  XU4$  [        X#Xx5      n
XU4$ gs  snf ! [         a  n[        SU5        SXx4s SnA$ SnAff = f)uD   Calcula distância entre a loja e o cliente usando dados cadastradosr7  r8  r   r   r   r9  r:  estadoBrasilr   Nz[HAVERSINE ERRO]r   )r   NN)r  r    r   rb  rq  rR  rD   r   )r   lojaloja_latloja_lonr   r   endereco_strrm  rn  	dist_osrmdist_havrH   s               r$   calcular_distancia_clienter{  :  s    DJHK H 			*b!		)R 		(B		(B		(BF 995A1a56L#L1Gw2%h'K	 w..	'#HIHg--  6  	'$a(g&&	's*   <
C
C>C 
C8C3-C83C8c           	         SnSn [        5       nUR                  SS9nUR                  S5        UR                  5       nU(       d>  [	        S5          U(       a  UR                  5          U(       a  UR                  5         ggUR                  S5      nUR                  S5      nUb\  X:  aW  Ub  [        U5      OSn[	        S	U  S
U SU 35        U U(       a  UR                  5          U(       a  UR                  5         $ $ [        SS5       H  nUR                  SU S35      nUR                  SU S35      n	Uc  M2  X::  d  M9  U	b  [        U	5      OSn[	        S	U  SU SU 35        Us   U(       a  UR                  5          U(       a  UR                  5         $ $    UR                  S5      n
U
b  [        U
5      OSn[	        S	U  SU 35        U U(       a  UR                  5          U(       a  UR                  5         $ $ ! [         a     GNf = f! [         a     gf = f! [         a     GNMf = f! [         a     $ f = f! [         a     Nf = f! [         a     $ f = f! [         a     Nf = f! [         a     $ f = f! [         ah  n[	        SU5         SnA U(       a  UR                  5         O! [         a     Of = f U(       a  UR                  5         gg! [         a     gf = fSnAff = f!  U(       a  UR                  5         O! [         a     Of = f U(       a  UR                  5         f f ! [         a     f f = f= f)u   Calcula taxa de entrega baseado na distância usando tabela txentrega.
Se distância for menor que faixa1_d, utiliza faixa1_v (taxa mínima).
Retorna o valor da taxa ou 0.0 se erro.NTr;   z'SELECT * FROM txentrega WHERE chave = 1z5[TAXA ENTREGA] Nenhuma faixa configurada em txentregag        faixa1_dfaixa1_vu   [TAXA ENTREGA] Distância u   km é menor que faixa1_d (u!   km), retornando taxa mínima: R$ re      faixa_d_vzkm cai na faixa z: R$ 	faixa10_vz"km ultrapassa todas as faixas: R$ z[TAXA ENTREGA ERRO])
r?   r@   rA   rV   r   rC   rD   r    rw   range)	distanciarF   r@   r  	faixa_1_d	faixa_1_vtaxaifaixa_dfaixa_v
faixa_10_v
taxa_finalrH   s                r$   calcular_taxa_entregar  Y  sd    DF0z-@A!IJ>		

 E IIj)	IIj)	 Y%:'0'<5##D.yk9ST]S^^  AE  @F  G  H,		

 3 q"Aii%s".Gii%s".G"y';)0)<uW~#29+=MaSPUVZU[\]		

 3  YY{+
*4*@U:&c
*9+5WXbWcde		

   		
  		  		
  		  		
  		  		
  		  #Q'	 			

  			 			

  		sE  AJ H ,H AJ H,-H=:J J 'J 3II$5J I-2I=
HH
H)(H),
H:9H:=
I
	I

II
I*)I*-
I:9I:=
J
	J

K?K:#L (K   
KKK* *
K76K7:K??L MLM
L)&M(L))M-MM
MMMMc                     U (       d  U $ 0 nU R                  5        H7  u  p#[        U[        R                  5      (       a  [	        U5      X'   M3  X1U'   M9     U$ )z6Converte Decimal para float para que jsonify funcione.)items
isinstancedecimalDecimalrw   )rW   r   r   vs       r$   r   r     sK    

C		a))1XCFF	 
 Jr'   c                     Sn Sn [        5       n U R                  5       nUR                  S5        UR                  S5        UR                  5       nU(       a  US   OS  U(       a  UR	                  5          U (       a  U R	                  5         $ $ ! [
         a     N&f = f! [
         a     $ f = f! [
         ah  n[        SU5         SnA U(       a  UR	                  5         O! [
         a     Of = f U (       a  U R	                  5         gg! [
         a     gf = fSnAff = f!  U(       a  UR	                  5         O! [
         a     Of = f U (       a  U R	                  5         f f ! [
         a     f f = f= f)uE   Obtém o nome da impressora ativa da tabela impressoras (imprenro=1).Nz
            CREATE TABLE IF NOT EXISTS impressoras (
                id INT AUTO_INCREMENT PRIMARY KEY,
                nomedaimpressora VARCHAR(255) NOT NULL,
                imprenro TINYINT NOT NULL DEFAULT 0
            )
        zCSELECT nomedaimpressora FROM impressoras WHERE imprenro = 1 LIMIT 1r   z[IMPRESSORA DB ERRO])r?   r@   rA   rV   rC   rD   r   )rF   r@   rW   rH   s       r$   get_printer_from_dbr    s_   DFz  	 	\]oos1v$&
		

   		
  		  $a(	 			

  			 			

  		s   AB2 !B9B"
BB"
B/.B/2
D$<DD' C% %
C21C26D 
DDD$$D' 'E;)E E;
EE;EE;E+)E;+
E85E;7E88E;c                  D   [         R                  S:w  a  / $ [        c   SSKn U q/ n [        R                  [        R
                  -  n[        R                  " U5       HK  n[        U5      S:  d  M  US   (       d  M   UR                  [        US   5      R                  5       5        MM     [        5       n/ nU H<  nUR                  5       nXt;  d  M  UR                  U5        UR                  U5        M>     U$ ! [         a    / s $ f = f! [         a    / s $ f = f)u9   Lista impressoras visíveis para o processo Python atual.win32Nr      rg   )r   platform
win32printrD   PRINTER_ENUM_LOCALPRINTER_ENUM_CONNECTIONSEnumPrintersru   rv   rE   rt   r   rs   r   )_win32printnomesflagsr   vistosunicosnlks           r$   list_installed_printersr    s     ||w		,$J E--
0S0SS((/A1v{qttS1Y__./ 0 AB

2a 	 
   	I	   	s6   C> AD 3D ?AD 'D >DDDDc                    [         R                  S:w  a  SS[         R                   34$ [        c   SSKnUq [	        U=(       d    [        R
                  " 5       =(       d    S5      R                  5       nU(       d  g[        5       nU(       a9  UR                  5       U Vs1 s H  owR                  5       iM     sn;  a  SS	U 34$ [        R                  " U5      n [        R                  " US
S5      n	 [        R                  " U5        [        U [        5      (       a  U n
O[	        U 5      R                  SSS9n
U
S-  n
U(       aZ  UR                  5       R                  5       nSU;   d  SU;   a  U
S-  n
O/SU;   a  U
S-  n
O#SU;   d  SU;   d  SU;   a  U
S-  n
OU
S-  n
OU
S-  n
[        R                  " X5        [        R                   " U5        [        R"                  " U5         [        R$                  " U5        g! [         a  nSSU 34s SnA$ SnAff = fs  snf ! [        R"                  " U5        f = f! [        R$                  " U5        f = f! [         a  nS[	        U5      4s SnA$ SnAff = f)zdEnvia texto RAW para impressora no Windows. Retorna (True, None) em sucesso, (False, erro) em falha.r  Fu6   Sistema atual sem suporte para impressão silenciosa: Nr   u   pywin32 não carregado: r   )Fu*   Nenhuma impressora disponível no Windows.u'   Impressora não encontrada no Windows: re   )PedidoNRAWcp1252replace)errorss   dbematechdarumas   mepsons   ielgintancadiebolds   V )TN)r   r  r  rD   rE   GetDefaultPrinterrt   r  rs   OpenPrinterStartDocPrinterStartPagePrinterr  bytesencodeWritePrinterEndPagePrinterEndDocPrinterClosePrinter)r   printer_namemarca_impressorar  rH   rS   disponiveisxhPrinterhJobr   marcas               r$   send_to_printerr    s>    ||wNs||n]]]	9,$J+<G:#?#?#AGRHNNPF-/4::<;/O;a	;/OOCD6JJJ))$/	.--h;RSD3++H5h..#Dx=///KDO+D' 0 6 6 8 > > @%.(e2C K/D$- K/D$-E1AYRWEW O3D !K/D +''7))(3((2##H-W  	94QC888	9 0PB ((2##H- c!f}s   H AI ?$I #H#<I 	I  I 9CH( I .I 
H HH H #I (I  I II 
I?(I:4I?:I?c                    SnSn U R                  S5      nSSSSSSSS.nU GH  nUR                  S5      (       a%  UR                  SS5      R                  5       US'   M?  UR                  S5      (       a%  UR                  SS5      R                  5       US	'   Mz  UR                  S
5      (       a%  UR                  S
S5      R                  5       US'   M  UR                  S5      (       a%  UR                  SS5      R                  5       US'   M  UR                  S5      (       a  UR                  SS5      R                  5       nUR                  S5      n	[	        U	5      S:  a  U	S   R                  5       US'   [	        U	5      S:  a  U	S   R                  5       US'   GM  GM  SU;   d  GM  UR                  SS5      R                  5       n
 [        U
5      US'   GM     US   (       d>  [        S5         U(       a   UR                  5         U(       a   UR                  5         gg[        5       nUR                  SS9nU GHR  nUR                  SS5      n[        UR                  SS5      5      n[        UR                  SS5      5      nUR                  SS5      nSU;   a  SnSn[        R                  " S5      n/ SQnUS   US   US	   US   US   US   US   UUUUWUR                  S US   5      U/nUb"  UR                  S!5        UR                  U5        S"S#R                  U5       S$S#R                  S%/[	        U5      -  5       S&3nUR                  UU5        UR!                  5         [        S'U S(U S)U S*US    S+U 3
5        GMU      U(       a   UR                  5         U(       a   UR                  5         gg!   SUS'    GM  = f!    GN= f!    g= f! ["         a  n[        S,U 35        e SnAff = f!    N\= f!    g= f! U(       a   UR                  5         O!    O= fU(       a   UR                  5         f !    f = ff = f)-z^Grava dados do pedido na tabela deliverypendente, incluindo a forma de pagamento se fornecida.Nr   r   r   )r   r   rS   r   r   r   r^   zTel:r   zCEP:r   zNome:rS   zCompl:r   zEnd:re  re   r   rg   r   zPEDIDO NRO:r^   u/   [DELIVERY PENDENTE] Sem telefone, não gravandoTr;   rf   rj   chavezTAXA ENTREGA	TXENTREGArQ   )r^   r   r   rS   r   r   r   produtorf   
quantidaderl   r_   r   rQ   r   formapagamentozINSERT INTO deliverypendente (r   
) VALUES (%sr  z[DELIVERY PENDENTE] z	 (chave: 
, classe: z) gravado para z
 | Forma: [DELIVERY PENDENTE ERRO] )split
startswithr  rt   ru   r|   r   rC   r?   r@   r    rw   r   rv   r   rA   r~   rD   )r   r]   r   rF   r@   linhascliente_datalinhaend_infor   nro_strr   	prod_nome
prod_precoprod_qtd
prod_chaveprod_classerQ   colunasr   sqlrH   s                         r$   gravar_delivery_pendenter    s   DFY%
 E''+0==+D+J+J+LZ(!!&))&+mmFB&?&E&E&GU#!!'**',}}Wb'A'G'G'IV$!!(++.3mmHb.I.O.O.Q]+!!&)) ==4::<!,v;!#/5ay/@L,v;!#.4Qioo.?L+ $%'--r:@@B203GL-' . J'CDV  

 _ z-D,Itxx34J488E1-.H'2.J*(
) \2J {G[)Z(U#V$Z(Y']+  L,@AG  */0/2499W3E2FjQUQZQZ\`[abefmbn[nQoPppqrCNN3(KKM(9ZL
S^R__no{  }G  pH  oI  IS  Tc  Sd  e  fE N  

 k201L-d  )!-. 

	 s   F(O1 3 O1 O"O1 O" O* /E2O1 *P P OO1 "O'*O.1
P;P

PP  PP Q")P:9Q":P><Q"	QQ"QQ"c                     [         R                  R                  [        SS5      n SR                  SSS[         R                  R	                  [
        5       3S[         R                  " 5        3S[         3S	[         R                  R	                  [        R                  5       3S
[         R                  R	                  U 5       3S[         R                  R                  U 5       3/5      $ )Nr)   painel_menu.htmlr   zLOJA_BUILD=13zArotas_diagnostico=/onde-esta-o-servidor /loja-build /__loja_buildzapp_py=zcwd=z	BASE_DIR=ztemplate_folder=zpainel_menu=zexiste_painel=)
r   r   r   	_BASE_DIRr   r   getcwdappr+   isfile)_pms    r$   _loja_diagnostico_textor  s  s    
'',,y+/A
BC99Obggooh/01299;- 	{#rwws/B/BCDE277??3/01RWW^^C012		
 r'   z/onde-esta-o-servidorc                  &    [        [        5       SS9$ Nztext/plain; charset=utf-8)mimetyper   r  rN   r'   r$   onde_esta_o_servidorr    s    +-8STTr'   z/loja-buildz/__loja_buildc                  &    [        [        5       SS9$ r  r  rN   r'   r$   loja_build_infor    s     +-8STTr'   rd  c                  :   [         R                  " S5      n [        5       nUR                  SS5      n[        R                  R                  [        SS5      n[        SU U[        R                  R                  U5      S9n[        U5      nSUR                  S'   U$ )	NrQ   rS   rR   r)   r  )rQ   rU   _painel_templatezpainel-menu-build-13zX-Loja-Inicio)r   r    r  r   r   r   r  r   r   r
   r   )rQ   r  rU   r  htmlresps         r$   indexr    s     \*J!#JNN6<8M
'',,y+/A
BC#-	D D$:DLL!Kr'   z/loginc            	          [         R                  R                  S5      S:X  a
  [        SSS9$ [        SS[	        SS	S
9S9$ )uN   Splash antes do login; use /login?skip_splash=1 para ir direto ao formulário.skip_splash1z
login.htmlr   )
csrf_tokenzsplash.htmli  r   re   )r  )delay_msredirect_url)r   r!   r    r   r	   rN   r'   r$   r   r     sE     ||&#-|;;\q9 r'   c                     [         R                  =(       d    0 n U R                  SS5      R                  5       nU R                  SS5      R                  5       nSnSn [	        5       nUR                  SS9nUR                  SX45        UR                  5       nU(       Ga%  U[        S'   UR                  S	5      [        S	'   UR                  S	5      nSnSn [	        5       nUR                  SS9nUR                  S
U45        UR                  5       n	U(       a  UR                  5         U(       a  UR                  5         U	(       d?  [        SSSUS.5      U(       a  UR                  5         U(       a  UR                  5         $ $ [        SSUS.5      U(       a  UR                  5         U(       a  UR                  5         $ $ [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ ! U(       a  UR                  5         U(       a  UR                  5         f f = f! [        R                  R                   aU  n
[        SU
5        [        SSS.5      S4s Sn
A
U(       a  UR                  5         U(       a  UR                  5         $ $ Sn
A
ff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)u-   Autentica o usuário usando a tabela usuariosusuarior   senhaNTr;   z8SELECT * FROM usuarios WHERE usuario = %s AND senha = %sr   rQ   z5SELECT 1 FROM dadosloja WHERE id_cliente = %s LIMIT 1/dados-lojazComplete os dados da loja)r   redirecionarr   rQ   zLogin realizado com sucesso)r   r   rQ   Fu   Usuário ou senha incorretosr   r   z[DB ERROR LOGIN]zErro ao validar loginro   )r   rV  r    rt   r?   r@   rA   rV   r   rC   r   r1  r2  Errorr   )r   r  r  rF   r@   usuario_encontradorQ   conn2cursor2dadosloja_existedb_errs              r$   loginr    sc    LLBEii	2&,,.GIIgr"((*EDF(z- 	QT[Scd#__.(/G$%$6$:$:<$HGL!+//=JEG	" 
,,$,7 WZdYfg#*#3#3#5 MMOKKM#4\w  HR   S  T LLNJJL  t9Vfpqr LLNJJL  u6TUVX[[ LLNJJL % MMOKKM  ??   Q &)52IJKSPP LLNJJL Q
 LLNJJL sV   A:H; <H AH; 
H; H; 1H88H; ;J.J)4J.5J1 )J..J1 11K"z/logoutc                      [         R                  " SS5        [         R                  " SS5        [        [        S5      5      $ )u   Desloga o usuárior   NrQ   r   )r   popr   r	   rN   r'   r$   logoutr    s1     KK $'KKd#GL)**r'   z/casac                     [         R                  " S5      n [        5       nUR                  SS5      n[        R                  R                  [        SS5      n[        SU U[        R                  R                  U5      S9$ )u   Página de pedidos (carrossel)rQ   rS   rR   r)   z
index.html)rQ   rU   _pedidos_template)	r   r    r  r   r   r   r  r   r   )rQ   r  rU   _idxs       r$   casar
    sf     \*J!#JNN6<8M77<<	;=D#''//$/	 r'   z/delivery-pendente-viewc                  z    [         R                  " S5      n [        5       nUR                  SS5      n[        SXS9$ )u4   Página para visualizar pedidos pendentes de entregarQ   rS   rR   zdelivery_pendente.htmlrT   r   r    r  r   rQ   r  rU   s      r$   delivery_pendente_viewr    8     \*J!#JNN6<8M3
hhr'   z/canceladasc                  z    [         R                  " S5      n [        5       nUR                  SS5      n[        SXS9$ )u*   Página para visualizar pedidos canceladosrQ   rS   rR   zcanceladas.htmlrT   r  r  s      r$   canceladas_viewr    8     \*J!#JNN6<8M,aar'   z	/comandasc                  z    [         R                  " S5      n [        5       nUR                  SS5      n[        SXS9$ )u)   Página para visualizar comandas fechadasrQ   rS   rR   zcomandas.htmlrT   r  r  s      r$   comandas_viewr    s7     \*J!#JNN6<8M?z__r'   z/cadastrar-produtoc                  z    [         R                  " S5      n [        5       nUR                  SS5      n[        SXS9$ )u   Página para cadastrar produtosrQ   rS   rR   zcadastrar_produto.htmlrT   r  r  s      r$   cadastrar_produto_viewr    r  r'   z/api/salvar-produtoc                  b   Sn Sn [         R                  =(       d    0 nUR                  SS5      R                  5       nUR                  SS5      nUR                  SS5      R                  5       R	                  5       nUR                  SS5      nUR                  S	S
5      nUR                  SS5      nUR                  SS5      n	UR                  SS5      n
UR                  SS5      nUR                  SS5      nU(       a  U(       d?  [        SSS.5      S4U(       a  UR                  5         U (       a  U R                  5         $ $ [        5       n U R                  5       n[        R                  " S5      nUR                  SX4XVXxXXU45        U R                  5         UR                  n[        SU SU SU S35        [        SSU SU S3S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                    aU  n[        S U5        [        SS!S.5      S"4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)#z+Salva um novo produto na tabela de produtosNr  r   rf   r   r_   porkiloNao
impressorare   cfop5102ncmdisplayvendaliberadaSim	descricaoF+   Classe e nome do produto são obrigatóriosr   r`   rQ   z
            INSERT INTO produtos (produto, preco, classe, porkilo, impressora, cfop, ncm, display, vendaliberada, descricao, id_cliente)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        z[PRODUTO CADASTRADO]     (código: r  r  T	Produto '$   ' cadastrado com sucesso! (Código: r   
[DB ERROR]z(Erro ao salvar produto no banco de dadosro   )r   rV  r    rt   upperr   rC   r?   r@   r   rA   r~   r   r   r1  r2  r  )rF   r@   r   r  rf   r_   r  r  r  r  r  r  r!  rQ   chave_geradar  s                   r$   salvar_produtor)    sW    DF+"))Ir*002		'1%8R(..0668))Iu-YY|Q/
yy(iir"))Iq)		/59IIk2.	Wu6cdegjj4 LLNJJL 5 z [[.
  fz}ist	v
 	''%gYk,zRXQYYZ[\#G9,PQ]P^^_`
  LLNJJL  ??   dlF#52\]^`ccc LLNJJL d
 LLNJJL s7   DH 
BH I:%I5 I:I= 5I::I= =1J.z/api/listar-produtosc                  ~   Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       n[        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SS	S
.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)z#Lista todos os produtos cadastradosNTr;   rQ   z
            SELECT chave, produto, preco, classe, porkilo, impressora, cfop, ncm, 
                   display, vendaliberada, descricao
            FROM produtos
            WHERE id_cliente = %s
            ORDER BY produto
        )r   r]   r&  FzErro ao listar produtosr   ro   r?   r@   r   r    rA   rB   r   rC   r1  r2  r  r   )rF   r@   rQ   r]   r  s        r$   listar_produtosr,  J  s    DFz-[[.
  ]	 ??$ 
  LLNJJL  ??   SlF#52KLMsRR LLNJJL S
 LLNJJL 0   AB D3DDD DD 1D<z/api/obter-produto/<int:chave>c                 
   SnSn [        5       nUR                  SS9n[        R                  " S5      nUR	                  SX45        UR                  5       nU(       a=  [        SUS.5      U(       a  UR                  5         U(       a  UR                  5         $ $ [        SSS	.5      S
4U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SSS	.5      S4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)u&   Obtém dados de um produto específicoNTr;   rQ   z
            SELECT chave, produto, preco, classe, porkilo, impressora, cfop, ncm, 
                   display, vendaliberada, descricao
            FROM produtos
            WHERE chave = %s AND id_cliente = %s
        )r   r  F   Produto não encontrador   r   r&  zErro ao obter produtoro   r?   r@   r   r    rA   rV   r   rC   r1  r2  r  r   r  rF   r@   rQ   r  r  s         r$   obter_produtor2  n  sF    DFz-[[.
 
  	" //#"  LLNJJL  u6OPQSVV LLNJJL  ??   QlF#52IJKSPP LLNJJL Q
 LLNJJL 6   A&C C E9E	EE 	EE 1Fz/api/editar-produto/<int:chave>PUTc                    SnSn [         R                  =(       d    0 nUR                  SS5      R                  5       nUR                  SS5      nUR                  SS5      R                  5       R	                  5       nUR                  SS5      nUR                  S	S
5      nUR                  SS5      n	UR                  SS5      n
UR                  SS5      nUR                  SS5      nUR                  SS5      nU(       a  U(       d?  [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        5       nUR                  5       n[        R                  " S5      nUR                  SXEXgXXXX45        UR                  5         UR                  S:  aS  [        SU SU  S35        [        SSU S3S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ [        SSS.5      S 4U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                    aU  n[        S!U5        [        SS"S.5      S#4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)$zEdita um produto existenteNr  r   rf   r   r_   r  r  r  re   r  r  r  r  r  r   r!  Fr"  r   r`   rQ   a  
            UPDATE produtos 
            SET produto = %s, preco = %s, classe = %s, porkilo = %s, 
                impressora = %s, cfop = %s, ncm = %s, display = %s, 
                vendaliberada = %s, descricao = %s
            WHERE chave = %s AND id_cliente = %s
        z[PRODUTO ATUALIZADO] r#  r  Tr$  ' atualizado com sucesso!r   r/  r   r&  zErro ao editar produtoro   )r   rV  r    rt   r'  r   rC   r?   r@   r   rA   r~   r   r   r1  r2  r  )r  rF   r@   r   r  rf   r_   r  r  r  r  r  r  r!  rQ   r  s                   r$   editar_produtor7    sx    DF/"))Ir*002		'1%8R(..0668))Iu-YY|Q/
yy(iir"))Iq)		/59IIk2.	Wu6cdegjj< LLNJJL = z[[.
  fz}in{	} 	??Q)'+eWAFG'y0IJ  LLNJJL  u6OPQSVV LLNJJL  ??   RlF#52JKLcQQ LLNJJL R
 LLNJJL s=   DI 
BI I J7"J2=J7>J: 2J77J: :1K+z /api/excluir-produto/<int:chave>c                    SnSn [        5       nUR                  SS9n[        R                  " S5      nUR	                  SX45        UR                  5       nU(       d?  [        SSS.5      S	4U(       a  UR                  5         U(       a  UR                  5         $ $ UR	                  S
X45        UR                  5         [        SUS    SU  S35        [        SSUS    S3S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SSS.5      S4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)zExclui um produtoNTr;   rQ   zASELECT produto FROM produtos WHERE chave = %s AND id_cliente = %sFr/  r   r   z9DELETE FROM produtos WHERE chave = %s AND id_cliente = %su   [PRODUTO EXCLUÍDO] r  r#  r  r$     ' excluído com sucesso!r   r&  zErro ao excluir produtoro   r?   r@   r   r    rA   rV   r   rC   r~   r   r1  r2  r  r1  s         r$   excluir_produtor;    s    DFz- [[.
Z]b\op//#u6OPQSVV" LLNJJL ! 	RUZTgh$WY%7$8E7!LM#GI$6#77OP
  LLNJJL  ??   SlF#52KLMsRR LLNJJL S
 LLNJJL 7   A(D AD F8FFF FF 1Gz/cadastrar-entregadorc                  z    [         R                  " S5      n [        5       nUR                  SS5      n[        SXS9$ )u#   Página de cadastro de entregadoresrQ   rS   rR   zcadastrar_entregador.htmlrT   r  r  s      r$   cadastrar_entregadorr>    s8     \*J!#JNN6<8M6:kkr'   z/api/salvar-entregadorc            	      P   Sn Sn [         R                  =(       d    0 nUR                  SS5      R                  5       nUR                  SS5      R                  5       nUR                  SS5      R                  5       nU(       d?  [	        SSS.5      S	4U(       a  UR                  5         U (       a  U R                  5         $ $ [        5       n U R                  5       n[        R                  " S
5      nUR                  SX4XV45        U R                  5         UR                  n[        SU SU SU S35        [	        SSU SU S3S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   aU  n[        SU5        [	        SSS.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)z2Salva um novo entregador na tabela de entregadoresNrS   r   r   r   F   Nome é obrigatórior   r`   rQ   zw
            INSERT INTO entregador (nome, telefone, endereco, id_cliente)
            VALUES (%s, %s, %s, %s)
        z[ENTREGADOR CADASTRADO] r#  z, telefone: r  TEntregador 'r%  r   r&  z+Erro ao salvar entregador no banco de dadosro   r   rV  r    rt   r   rC   r?   r@   r   rA   r~   r   r   r1  r2  r  )	rF   r@   r   rS   r   r   rQ   r(  r  s	            r$   salvar_entregadorrC    s    DF$"yy$**,99Z,22499Z,224u6LMNPSS4 LLNJJL 5 z [[.
  h3	5
 	''(k,|T\S]]^_`&tf,PQ]P^^_`
  LLNJJL  ??   glF#52_`acfff LLNJJL g
 LLNJJL s7   BE> B	E> >G1G,7G18G4 ,G11G4 41H%z/api/listar-entregadoresc                  ~   Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       n[        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SS	S
.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)z'Lista todos os entregadores cadastradosNTr;   rQ   z
            SELECT chave, nome, telefone, endereco
            FROM entregador
            WHERE id_cliente = %s
            ORDER BY nome
        )r   entregadoresr&  FzErro ao listar entregadoresr   ro   r+  )rF   r@   rQ   rE  r  s        r$   listar_entregadoresrF  (  s    DFz-[[.
 
 ]	 ((
  LLNJJL  ??   WlF#52OPQSVVV LLNJJL W
 LLNJJL r-  z!/api/obter-entregador/<int:chave>c                 
   SnSn [        5       nUR                  SS9n[        R                  " S5      nUR	                  SX45        UR                  5       nU(       a=  [        SUS.5      U(       a  UR                  5         U(       a  UR                  5         $ $ [        SSS	.5      S
4U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SSS	.5      S4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)u)   Obtém dados de um entregador específicoNTr;   rQ   z
            SELECT chave, nome, telefone, endereco
            FROM entregador
            WHERE chave = %s AND id_cliente = %s
        )r   
entregadorF   Entregador não encontrador   r   r&  zErro ao obter entregadorro   r0  r  rF   r@   rQ   rH  r  s         r$   obter_entregadorrK  K  sG    DFz-[[.
   		" __&
(  LLNJJL  u6RSTVYY LLNJJL  ??   TlF#52LMNPSSS LLNJJL T
 LLNJJL r3  z"/api/editar-entregador/<int:chave>c                    SnSn [         R                  =(       d    0 nUR                  SS5      R                  5       nUR                  SS5      R                  5       nUR                  SS5      R                  5       nU(       d?  [	        SSS.5      S	4U(       a  UR                  5         U(       a  UR                  5         $ $ [        5       nUR                  5       n[        R                  " S
5      nUR                  SXEX`U45        UR                  5         UR                  S:  aS  [        SU SU  S35        [	        SSU S3S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                   aU  n[        SU5        [	        SSS.5      S4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)zEdita um entregador existenteNrS   r   r   r   Fr@  r   r`   rQ   z
            UPDATE entregador 
            SET nome = %s, telefone = %s, endereco = %s
            WHERE chave = %s AND id_cliente = %s
        r   z[ENTREGADOR ATUALIZADO] r#  r  TrA  r6  r   rI  r   r&  zErro ao editar entregadorro   r   rV  r    rt   r   rC   r?   r@   r   rA   r~   r   r   r1  r2  r  )	r  rF   r@   r   rS   r   r   rQ   r  s	            r$   editar_entregadorrN  p  s    DF&"yy$**,99Z,22499Z,224u6LMNPSS8 LLNJJL 9 z[[.
  hz:		< 	??Q,TF+eWAFG*4&0IJ  LLNJJL  u6RSTVYY LLNJJL  ??   UlF#52MNOQTTT LLNJJL U
 LLNJJL s=   BF< BF< =F< <H/H*5H/6H2 *H//H2 21I#z#/api/excluir-entregador/<int:chave>c                    SnSn [        5       nUR                  SS9n[        R                  " S5      nUR	                  SX45        UR                  5       nU(       d?  [        SSS.5      S	4U(       a  UR                  5         U(       a  UR                  5         $ $ UR	                  S
X45        UR                  5         [        SUS    SU  S35        [        SSUS    S3S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SSS.5      S4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)zExclui um entregadorNTr;   rQ   z@SELECT nome FROM entregador WHERE chave = %s AND id_cliente = %sFrI  r   r   z;DELETE FROM entregador WHERE chave = %s AND id_cliente = %su   [ENTREGADOR EXCLUÍDO] rS   r#  r  rA  r9  r   r&  zErro ao excluir entregadorro   r:  rJ  s         r$   excluir_entregadorrP    s    DFz- [[.
Y\a[no__&
u6RSTVYY" LLNJJL ! 	TW\Vij'
6(:';;ugQOP&z&'9&::RS
  LLNJJL  ??   VlF#52NOPRUUU LLNJJL V
 LLNJJL r<  z/cadastrar-classificacaoc                  z    [         R                  " S5      n [        5       nUR                  SS5      n[        SXS9$ )u'   Página de cadastro de classificaçõesrQ   rS   rR   zcadastrar_classificacao.htmlrT   r  r  s      r$   cadastrar_classificacaorR    s8     \*J!#JNN6<8M9jnnr'   z/api/salvar-classificacaoc                     Sn Sn [         R                  =(       d    0 nUR                  SS5      R                  5       nUR                  S5      nUR                  S5      nU(       d?  [	        SSS.5      S	4U(       a  UR                  5         U (       a  U R                  5         $ $ [        5       n U R                  5       n[        R                  " S
5      nUR                  SX4XV45        U R                  5         UR                  n[        SU SU S35        [	        SSU S3S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   aU  n[        SU5        [	        SSS.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)u   Salva uma nova classificaçãoNr  r   quantidadepartesnrofotoF'   Nome da classificação é obrigatórior   r`   rQ   z
            INSERT INTO classificacao (nomeclassificacao, quantidadepartes, nrofoto, id_cliente)
            VALUES (%s, %s, %s, %s)
        u   [CLASSIFICAÇÃO CADASTRADA] r#  r  Tr  z' cadastrada com sucesso!r&  u0   Erro ao salvar classificação no banco de dadosro   rB  )	rF   r@   r   r  rT  rU  rQ   r(  r  s	            r$   salvar_classificacaorW    s    DF#"!II&92>DDF 99%78))I& u:cdegjj2 LLNJJL 3 z[[.
   7G	I
 	''-.?-@L>YZ[\+,=+>>WX
  LLNJJL  ??   plF#56hijlooo LLNJJL p
 LLNJJL s7   A1E 'BE G8GGG GG 1Hz/api/listar-classificacoesc                     Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       nU H.  nUR	                  SUS   U45        UR                  5       nXTS'   M0     [        U5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   aU  n[        S	U5        [        S
SS.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)u+   Lista todas as classificações cadastradasNTr;   rQ   z
            SELECT chave, nomeclassificacao, quantidadepartes, nrofoto, formadecobrar
            FROM classificacao
            WHERE id_cliente = %s
            ORDER BY nomeclassificacao
        zQSELECT produto AS nome, preco FROM produtos WHERE classe = %s AND id_cliente = %sr  r]   r&  Fu   Erro ao listar classificaçõesr   ro   r+  )rF   r@   rQ   r  classifr]   r  s          r$   listar_classificacoesrZ    sP    DFz-[[.
 
 ]	  *%GNNnqx  zM  rN  PZ  q[  \(H"*J & ~&
 LLNJJL  ??   _lF#56WXY[^^^LLNJJL _ LLNJJL s0   BC D9$D4?D9 D< 4D99D< <1E-z$/api/obter-classificacao/<int:chave>c                    SnSn [        5       nUR                  SS9n[        R                  " S5      nUR	                  SX45        UR                  5       nU(       a:  [        U5      U(       a  UR                  5         U(       a  UR                  5         $ $ [        SSS.5      S	4U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                   aU  n[        S
U5        [        SSS.5      S4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)u/   Obtém dados de uma classificação específicaNTr;   rQ   z
            SELECT chave, nomeclassificacao, quantidadepartes, nrofoto, formadecobrar
            FROM classificacao
            WHERE chave = %s AND id_cliente = %s
        F   Classificação não encontradar   r   r&  u   Erro ao obter classificaçãoro   r0  r  rF   r@   rQ   classificacaor  s         r$   obter_classificacaor_    s<    DFz-[[.
   		" )=) LLNJJL  u:[\]_bb LLNJJL  ??   ]lF#56UVWY\\\ LLNJJL ]
 LLNJJL s6   A#C C E6EEE EE 1E?z%/api/editar-classificacao/<int:chave>c                    SnSn [         R                  =(       d    0 nUR                  SS5      R                  5       nUR                  S5      nUR                  S5      nU(       d?  [	        SSS.5      S	4U(       a  UR                  5         U(       a  UR                  5         $ $ [        5       nUR                  5       n[        R                  " S
5      nUR                  SXEX`U45        UR                  5         UR                  S:  aS  [        SU SU  S35        [	        SSU S3S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                   aU  n[        SU5        [	        SSS.5      S4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)u#   Edita uma classificação existenteNr  r   rT  rU  FrV  r   r`   rQ   z
            UPDATE classificacao 
            SET nomeclassificacao = %s, quantidadepartes = %s, nrofoto = %s
            WHERE chave = %s AND id_cliente = %s
        r   u   [CLASSIFICAÇÃO ATUALIZADA] r#  r  Tr  z' atualizada com sucesso!r\  r   r&  u   Erro ao editar classificaçãoro   rM  )	r  rF   r@   r   r  rT  rU  rQ   r  s	            r$   editar_classificacaora  <  s    DF&"!II&92>DDF 99%78))I& u:cdegjj8 LLNJJL 9 z[[.
   7:N		P 	??Q12C1DKPUwVWXY/0A/BB[\  LLNJJL  u:[\]_bb LLNJJL  ??   ^lF#56VWXZ]]] LLNJJL ^
 LLNJJL s=   A1F 'BF F H<HHH HH 1Iz&/api/excluir-classificacao/<int:chave>c                    SnSn [        5       nUR                  SS9n[        R                  " S5      nUR	                  SX45        UR                  5       nU(       d?  [        SSS.5      S	4U(       a  UR                  5         U(       a  UR                  5         $ $ UR	                  S
X45        UR                  5         [        SUS    SU  S35        [        SSUS    S3S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SSS.5      S4s SnAU(       a  UR                  5         U(       a  UR                  5         $ $ SnAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)u   Exclui uma classificaçãoNTr;   rQ   zPSELECT nomeclassificacao FROM classificacao WHERE chave = %s AND id_cliente = %sFr\  r   r   z>DELETE FROM classificacao WHERE chave = %s AND id_cliente = %su   [CLASSIFICAÇÃO EXCLUÍDA] r  r#  r  r  u   ' excluída com sucesso!r&  u   Erro ao excluir classificaçãor   ro   r:  r]  s         r$   excluir_classificacaorc  j  s    DFz- [[.
ilqk~)u:[\]_bb" LLNJJL ! 	WZ_Ylm,];N-O,PP[\a[bbcde+M:M,N+OOgh
  LLNJJL  ??   [lF#52STUWZZZ LLNJJL [
 LLNJJL r<  r  c                  z    [         R                  " S5      n [        5       nUR                  SS5      n[        SXS9$ )u%   Página de cadastro dos dados da lojarQ   rS   rR   zdados_loja.htmlrT   r  r  s      r$   r  r    r  r'   z/api/salvar-dados-lojac                     Sn Sn [         R                  =(       d    0 nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  S	S5      n	UR                  S
S5      n
UR                  SS5      nUR                  SS5      n[        R                  " S5      nU(       d?  [	        SSS.5      S4U(       a  UR                  5         U (       a  U R                  5         $ $ [        5       n U R                  5       nUR                  SU45        UR                  5       nU(       a  UR                  SX4XVXxXXU45        OUUR                  SXXEXgXXU45        UR                  SU45        UR                  5       nU(       d  UR                  SU45        U R                  5         [	        SSS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a`  n[        SU 35        [	        S[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAf[          a`  n[        SU 35        [	        S[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)zSalva os dados da lojaNrS   r   r   r9  r:  r   r   r<  r7  r8  r;  rQ   Fr  r   r`   z6SELECT id_cliente FROM dadosloja WHERE id_cliente = %sz
                UPDATE dadosloja 
                SET nome = %s, endereco = %s, bairro = %s, cidade = %s, cep = %s, telefone = %s, cnpj = %s, latitude = %s, longitude = %s, ddd = %s
                WHERE id_cliente = %s
            z
                INSERT INTO dadosloja (id_cliente, nome, endereco, bairro, cidade, cep, telefone, cnpj, latitude, longitude, ddd)
                VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            z;SELECT id_cliente FROM contadorpedido WHERE id_cliente = %s@INSERT INTO contadorpedido (contador, id_cliente) VALUES (1, %s)Tz Dados da loja salvos com sucessor   
[ERRO DB] ro   [ERRO] )r   rV  r    r   r   rC   r?   r@   rA   rV   r~   r1  r2  r  r   rE   rD   )rF   r@   r   rS   r   r9  r:  r   r   r<  r7  r8  r;  rQ   existeexiste_contadorrH   s                    r$   salvar_dados_lojark    s    DF:"yy$99Z,8R(8R(iir"99Z,yy$99Z,IIk2.	iir"[[.
u6]^_addP LLNJJL Q z 	OR\Q^_"NN  &#QZakl	n NN  Hf8S[hkln NNX[eZgh$oo/O"adncpq45WXY LLNJJL  ??   @
1#5#a&9:C??
 LLNJJL   @sm5#a&9:C??LLNJJL @ LLNJJL sO   C9H. /CH. .L&J'2L3L 'L4&LLL LL 1Mz/api/buscar-dados-lojac                     Sn Sn [        5       n U R                  SS9nUR                  S5        UR                  5       nU(       a=  [	        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ [	        SSS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a`  n[        SU 35        [	        S[        U5      S.5      S	4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)
zBusca os dados da lojaNTr;   r5  r   r   rg  Fr   ro   )r?   r@   rA   rV   r   rC   r1  r2  r  r   rE   )rF   r@   r   rH   s       r$   buscar_dados_lojarn    s#    DFz-@A!te<= LLNJJL  td;< LLNJJL  ??   @
1#5#a&9:C??LLNJJL @ LLNJJL s6   AC C D?&D:D?E :D??E 1E3z/cadastrar-taxac                  z    [         R                  " S5      n [        5       nUR                  SS5      n[        SXS9$ )u'   Página de cadastro de taxas de entregarQ   rS   rR   zcadastrar_taxa.htmlrT   r  r  s      r$   cadastrar_taxarp    s8     \*J!#JNN6<8M0Zeer'   z/api/dados-loja-infoc                       [        5       n [        SU S.5      $ ! [         a1  n[        SU 35        [        S[	        U5      S.5      S4s SnA$ SnAff = f)u-   Retorna informações da loja para exibiçãoTrm  rh  Fr   ro   N)r  r   rD   r   rE   )r   rH   s     r$   dados_loja_inforr    sY    @ "4%899 @sm5#a&9:C??@s    
A&A
AAz/api/salvar-taxac                  D   Sn Sn [         R                  =(       d    0 nUR                  SS5      n[        R                  " S5      n/ n/ n[	        SS5       Hy  nUR                  SU S35      nUR                  SU S35      n	UR                  SU S	35        UR                  SU S
35        UR                  U5        UR                  U	5        M{     [        5       n U R                  5       nUR                  SX445        UR                  5       n
U
(       ae  SSR                  U5       S3nUR                  U5        UR                  U5        UR                  U[        U5      5        [        SU SU 35        GOSS/[	        SS5       Vs/ s H	  nSU S3PM     sn-   [	        SS5       Vs/ s H	  nSU S3PM     sn-   nS/[        U5      -  nX4/n[	        SS5       H'  nUR                  UR                  SU S35      5        M)     [	        SS5       H'  nUR                  UR                  SU S35      5        M)     SSR                  U5       SSR                  U5       S3nUR                  U[        U5      5        [        SU SU 35        U R                  5         [        SSS.5      U(       a  UR!                  5         U (       a  U R!                  5         $ $ s  snf s  snf ! ["        R$                  R&                   a^  n[        SU5        [        S[)        U5      S.5      S4s SnAU(       a  UR!                  5         U (       a  U R!                  5         $ $ SnAff = f! U(       a  UR!                  5         U (       a  U R!                  5         f f = f)z%Salva ou atualiza as taxas de entregaNr  re   rQ   r  r  r  r  z_d = %sz_v = %sz@SELECT chave FROM txentrega WHERE chave = %s AND id_cliente = %szUPDATE txentrega SET r   z% WHERE chave = %s AND id_cliente = %sz [TAXA ENTREGA ATUALIZADA] chave z, id_cliente r  zINSERT INTO txentrega (r  r  z[TAXA ENTREGA CRIADA] chave Tz$Taxas de entrega salvas com sucesso!r   r&  Fr   ro   )r   rV  r    r   r  rv   r?   r@   rA   rV   r   tupler   ru   r~   r   rC   r1  r2  r  rE   )rF   r@   r   r  rQ   camposr   r  r  r  ri  r  campos_insertplaceholdersvalores_insertr  s                   r$   salvar_taxary    sj    DF>"		'1%[[.
 q"Aii%s".Gii%s".GMME!G,-MME!G,-NN7#NN7#  z 	Y\a[no")$))F*;)<<abCNN5!NN:&NN3g/4UG=UV %l3eTUWYl6[lqc}l6[[v{|}  @B  wC  _D  wCqrafghfiik_l  wC  _D  DM 6C$66L#0N1b\%%eii%s"&>? "1b\%%eii%s"&>? " ,DIIm,D+EZPTPYPYZfPgOhhijCNN3n 560}ZLQR>
  LLNJJL 7 7\  _D( ??   ElF#5#f+>?DD LLNJJL E
 LLNJJL sO   FK/ K%K/ 0K* C5K/ %
K/ /M+$M&1M+2M. &M++M. .1Nz/api/obter-taxac                     Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       nU(       a=  [        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ [        SSS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a^  n[        SU5        [        S[        U5      S	.5      S
4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)u'   Obtém as taxas de entrega configuradasNTr;   rQ   z;SELECT * FROM txentrega WHERE chave = 1 AND id_cliente = %s)r   r  r&  Fr   ro   r?   r@   r   r    rA   rV   r   rC   r1  r2  r  r   rE   )rF   r@   rQ   r  r  s        r$   
obter_taxar|  S  s4    DFz-[[.
TWaVcd tT:; LLNJJL  tT:; LLNJJL  ??   ElF#5#f+>?DD LLNJJL E
 LLNJJL s6   A&C C E7$EEE EE 1F	z/api/buscar-taxa-padraoc                  `   Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       nU(       a_  UR                  S5      (       aI  [        S[        US   5      S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ [        SSS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a`  n[        S	U 35        [        S
[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)u9   Busca o valor da primeira faixa de entrega (taxa padrão)NTr;   rQ   z<SELECT faixa1_v FROM txentrega WHERE id_cliente = %s LIMIT 1r~  )r   taxa_padraor   rg  Fr   ro   )r?   r@   r   r    rA   rV   r   rw   rC   r1  r2  r  r   rE   )rF   r@   rQ   r  rH   s        r$   buscar_taxa_padraor  q  sO    DFz-[[.
UXbWde DHHZ((tE$zBR<STU LLNJJL  tA>? LLNJJL  ??   @
1#5#a&9:C??LLNJJL @ LLNJJL s6   BC; >C; ;E9&E4?E9 E< 4E99E< <1F-z/api/buscar-configuracaoc                  n   Sn Sn [        5       n U R                  SS9n[        R                  " S5      n[	        SU S[        U5       S35        UR                  SU45        UR                  5       n[	        S	U 35        U(       a=  [        SUS
.5      U(       a  UR                  5         U (       a  U R                  5         $ $ [        SSS
.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a`  n[	        SU 35        [        S[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)u#   Busca as configurações do sistemaNTr;   rQ   u-   [BUSCAR CONFIG DEBUG] id_cliente da sessão: z (tipo: r  r  z![BUSCAR CONFIG DEBUG] Resultado: )r   r  rg  Fr   ro   )r?   r@   r   r    r   r  rA   rV   r   rC   r1  r2  r  rE   )rF   r@   rQ   r  rH   s        r$   buscar_configuracaor    sh    DFz-[[.
=j\RVWaRbQccdefehrgtu"1&:;tv>? LLNJJL  tt<= LLNJJL  ??   @
1#5#a&9:C??LLNJJL @ LLNJJL s6   BD D F  &E;F F ;F  F 1F4z	/imprimirc                     [         R                  =(       d    0 n U R                  SS5      n[        U R                  SS5      =(       d    S5      R	                  5       nU R                  S/ 5      nU R                  S5      =(       d    SR	                  5       R                  5       nU R                  SS5      n[        U R                  SS5      5      n[        S	5        [        S
U R                  S5       35        [        S[        U R                  S5      5       35        [        SU 35        U(       a	  USU S3-  nUS-  nU(       a  U(       a  US:w  a   [        XU5        [        [        5       =(       d    S5      R	                  5       nU=(       d?    U=(       d6    [        R                  S:X  a   [         (       a  [         R"                  " 5       OSn	U(       aW  [%        5       n
U
(       aF  UR                  5       U
 Vs1 s H  oR                  5       iM     sn;  a  ['        SSU 3U
S.5      S4$ [)        5       nUR+                  SS9n[,        R                  " S5      nUR/                  SU45        UR1                  5       nSnU(       a.  UR                  S5      nU(       a  SU 3nUR                  U5      nU(       a  UR3                  5         U(       a  UR3                  5         [        SU S35        / n[5        U5       HI  n[7        XU5      u  nnU(       a  M  UR9                  SUS-    S U 35        [        S!US-    S"U 35        MK     U(       a   ['        SS#R;                  U5      U	S$.5      S%4$ [         R<                  R                  S&5      S':X  d  [         R>                  (       a  ['        SXS(.5      $ [A        S)5      $ ! [         a.  n[        SU 35        [        R                  " 5          SnAGNSnAff = fs  snf )*u   Endpoint de impressão silenciosa. Resolve nome da impressora pela ordem: parâmetro -> DB -> padrão do Windows.
Retorna JSON com sucesso/erro e o nome da impressora utilizado.
r   r   printerr]   origemr   copiasre   z"[IMPRESSAO DEBUG] Dados recebidos:z  - copias (raw): z  - copias (type): z  - copias (convertido): zFORMA DE PAGAMENTO: r   r
  r  Nr  Fu*   Impressora informada não foi encontrada: )r   r>   impressoras_disponiveisr`   Tr;   rQ   r  imp_comandadelivery	marca_impz[IMPRESSAO] Imprimindo u    cópia(s)...u   Cópia : u   [IMPRESSAO ERRO] Cópia z	 falhou: z; r   r>   r  ro   r   r   )r   r  r  rd  )!r   rV  r    rE   rt   rs   r|   r   r  r  rD   r   r   r  r   r  r  r  r  r   r?   r@   r   rA   rV   rC   r  r  rv   r   r   is_jsonr   )r   r   printer_paramr]   r  r   r  rH   
printer_dbprinter_resolvedr  r  rF   r@   rQ   r  r  nro_impcampo_marcaerrosr  okerrs                          r$   imprimirr    s   
 LLBEyyR(H		)R06B7==?MyyR(Hii!'R..0668Fii 126O8Q'(F	.0	uyy23
45	UYYx%8 9:
;<	%fX
./ *?*;2>> H
 H6!1	"$XI (*0b1779J$  M
  MZ]ZfZfjqZq  wA  wAz7S7S7U  HL-/=..0K8XKqK8XX D]OT+6  	  :D[[D[)F\*J
NNadncpq__F**23%gY/K%zz+6

 
#F8=
9:E6]!(>NOCrLL71Q3%r#/0,QqSE3%@A	  5$))E2BO_`acfff ??126FF'//t8H[\\}c  	"-aS12!!	" 9Ys   O P
P#P  Pz/testar-impressorac                     [        [        R                  R                  SS5      =(       d    S5      R	                  5       n [        [        5       =(       d    S5      R	                  5       nU =(       d?    U=(       d6    [        R                  S:X  a   [        (       a  [        R                  " 5       OSn[        SU S3SS9  S	n[        X25      u  pEU(       a  [        SUS
.5      $ [        SXRS.5      S4$ )z7Envia uma linha de teste para a impressora configurada.r  r   r  Nu,   [IMPRESSORA] Nome buscado para impressão: ''Trm   u(   *** TESTE DE IMPRESSÃO - NOVALOJA ***
)r   r  Fr  ro   )rE   r   r!   r    rt   r  r   r  r  r  r   r  r   )r  r  r  tester  r  s         r$   testar_impressorar    s     ((B7=2>DDFM(*0b1779J$  M
  MZ]ZfZfjqZq  wA  wAz7S7S7U  HL	89I8J!
LTXY8Ee6GB	44DEFF5#STVYYYr'   z/api/impressoras-disponiveisc                      [        5       n Sn[        R                  S:X  a!  [        (       a   [        R                  " 5       n[        SXS.5      $ ! [
         a    Sn Nf = f)u?   Retorna impressoras disponíveis para diagnóstico no frontend.Nr  T)r   impressoraspadrao)r  r   r  r  r  rD   r   )r  default_names     r$   r  r  		  s\     $%EL
||w::	 %779L tERSS  	 L	 s   A AAz/preparar-impressaoc                      [         R                  =(       d    0 n U R                  SS5      nU R                  S/ 5      nU(       d  [        SSS.5      S4$ U[        S'   U(       a   [        X5        [        SS05      $ ! [         a-  n[        S	U 35        [        R                  " 5          S
nAN?S
nAff = f! [         aD  n[        SU5        [        R                  " 5         [        S[        U5      S.5      S4s S
nA$ S
nAff = f)u<   Prepara o pedido para impressão e grava em deliverypendenter   r   r]   F   Conteúdo vazior   r`   pedido_impressaor  Nr   Tu   [PREPARAR IMPRESSÃO ERRO]ro   )r   rV  r    r   r   r  rD   r   r   r   rE   )r   r   r]   rH   s       r$   preparar_impressaor  	  s    @"99Z,99Z,u6GHI3NN '/"# &(<
 	4())	  &1!56##%%&  @*A.5#a&9:C??@sN   AB9 B9 'A? 2B9 ?
B6	#B1,B9 1B66B9 9
D9D<DDz/visualizar-pedidoc                      [         R                  " SS5      n U (       d  Sn [         R                  " S5      n[        5       nUR                  SS5      n[        SXUS9$ )	u@   Exibe página HTML com o pedido formatado e botão de impressãor  r   u.   Nenhum pedido disponível para visualização.rQ   rS   rR   zvisualizar_pedido.html)r   rQ   rU   r  )r   rQ   r  rU   s       r$   visualizar_pedidor  4	  sT     {{-r2HC\*J!#JNN6<8M3hmz{{r'   z
/gerar-pdfc                      SSK Jn   SSKJn  SSKJn  SSKnSSKJn  [        R                  =(       d    0 nUR                  SS5      nUR                  S	/ 5      nU(       d  [        S
SS.5      S4$ U(       a   [        Xg5        UR"                  " 5       R%                  S5      n	SU	 S3n
UR&                  R)                  SU
5      nUR+                  XS9nU u  pUR-                  SS5        UR/                  S5      nUS-
  nU HH  nUS:  a'  UR1                  5         UR-                  SS5        US-
  nUR3                  SUU5        US-  nMJ     UR5                  5         [        SSU
 3US.5      $ ! [         a.  n[        SU 35        [        R                   " 5          SnAGN SnAff = f! [         aD  n[        SU5        [        R                   " 5         [        S
[7        U5      S.5      S4s SnA$ SnAff = f)z^Gera PDF do pedido e salva em c:\novaloja1\pedidos\. Retorna o caminho relativo para download.r   )A4)canvas)mmNdatetimer   r   r]   Fr  r   r`   r  z%Y%m%d_%H%M%Sr   z.pdfc:\novaloja1\pedidos)pagesizeCourier
   r   (      Tz	/pedidos/)r   r   caminho_completoz[GERAR PDF ERRO]ro   )reportlab.lib.pagesizesr  reportlab.pdfgenr  reportlab.lib.unitsr  r   r  r   rV  r    r   r  rD   r   r   r   nowr   r   r   CanvassetFontr  showPage
drawStringsaverE   )r  r  r  r   r  r   r   r]   rH   	timestampr   r  rQ  larguraalturar  yr  s                     r$   	gerar_pdfr  @	  s   9@.+*%"99Z,99Z,u6GHI3NN &(< LLN++O<	 4077<<(@,O MM*M8 	
		)R  %RKE2v

		)R(RKLLQ&GA  	
 "<.1 0
  	=  &1!56##%%&H  @ !$5#a&9:C??@sO   A/F- 2F- :E2 C,F- 2
F*<#F%F- %F**F- -
G;79G60G;6G;z/carrossel-imagensc                     S n S n [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       =(       d    / n/ nU H  nUR                  S5      nUR                  S5      nUR                  S5      nUc  M;  S[        U5       S	3n	UR                  U	Ub  [        U5      OS
U=(       d    S
[        UR                  S5      =(       d    S5      S.5        M     [        S5         [        U5        [        U5       U(       a  UR                  5          U (       a  U R                  5         $ $ ! [         a     NHf = f! [         a  n
[        SU
5         S n
A
NES n
A
ff = f! [         a  n
[        SU
5         S n
A
$ S n
A
ff = f! [        R                  R                    a  n[        SU5        ["        R$                  " 5         [        S[        U5      S.5      S4s S nA U(       a  UR                  5         O#! [         a  n
[        SU
5         S n
A
OS n
A
ff = f U (       a  U R                  5         $ $ ! [         a  n
[        SU
5         S n
A
$ S n
A
ff = fS nAf[         a  n
[        SU
5        ["        R$                  " 5         [        S[        U
5      S.5      S4s S n
A
 U(       a  UR                  5         O#! [         a  n
[        SU
5         S n
A
OS n
A
ff = f U (       a  U R                  5         $ $ ! [         a  n
[        SU
5         S n
A
$ S n
A
ff = fS n
A
ff = f!  U(       a  UR                  5         O#! [         a  n
[        SU
5         S n
A
OS n
A
ff = f U (       a  U R                  5         f f ! [         a  n
[        SU
5         S n
A
f S n
A
ff = f= f)NTr;   rQ   zrSELECT chave, nomeclassificacao, quantidadepartes, nrofoto AS nro_da_foto FROM classificacao WHERE id_cliente = %sr  r  nro_da_fotoz/static/img/z.jpegr   rT  r   )r   r_   rS   rz   z[CARROSSEL] imagens montadas:[WARN] falha ao fechar cursor:"   [WARN] falha ao fechar conexÃ£o:r&  Erro de banco de dadosr>   detalhesro   [ERROR]Erro interno no servidor)r?   r@   r   r    rA   rB   r|   rv   rE   r   r   rD   r   rC   r1  r2  r  r   r   )rF   r@   rQ   r  imagensrW   r_   r  nror   rH   r  s               r$   carrossel_imagensr  ~	  sJ   DF/;z-[[.
  L  OY  N[  	\"(bCWWW%F #(; <''-(C{$SXJe4GNN")/);#f+)/R377#56;!<	   	-.	7O w	7	;

 %  		  	72A66	7
  	;6::	;# ??   YlF# 8c&kRSUXXX	7 	72A66	7	;

  	;6::	;  Vi :AOPRUUU	7 	72A66	7	;

  	;6::	;V
	7 	72A66	7	;

  	;6::	;sP  DF* E 
F* #E$;F
E!F*  E!!F* $
F.E??F
F'F""F'*M9I?MM H
H?)H::H?I
I<&I77I<?M9MMM K##
L-K>>LL  
M *L;;M MM OM%$O%
N/N ;O NO	N" O"
O,N=8O=OOc                  f   [         R                  R                  S5      n SnSn U (       d<  [        / 5       U(       a  UR	                  5          U(       a  UR	                  5         $ $ [        5       nUR                  SS9nUR                  SU 45        UR                  5       =(       d    / nU Vs/ s H  n[        U5      PM     nn[        U5       U(       a  UR	                  5          U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         SnANSnAff = f! [
         a  n[        SU5         SnA$ SnAff = fs  snf ! [
         a  n[        SU5         SnANSnAff = f! [
         a  n[        SU5         SnA$ SnAff = f! [        R                  R                   a  n[        SU5        [        R                   " 5         [        S	[#        U5      S
.5      S4s SnA U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         SnA$ SnAff = fSnAf[
         a  n[        SU5        [        R                   " 5         [        S[#        U5      S
.5      S4s SnA U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         SnA$ SnAff = fSnAff = f!  U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U(       a  UR	                  5         f f ! [
         a  n[        SU5         SnAf SnAff = f= f)MRetorna produtos onde produtos.classe = nomeclassificacao recebido em 'nome'.rS   Nr  r  Tr;   z=SELECT produto, preco, classe FROM produtos WHERE classe = %sr&  r  r  ro   r  r  )r   r!   r    r   rC   rD   r   r?   r@   rA   rB   r   r1  r2  r  r   r   rE   )rS   rF   r@   rH   
resultadosr   r  s          r$   produtos_filtrarr  	  s   <<F#DDF ;2;*	7	;

 3 z-VY]X_`__&,"
0:;
1mA&

;z"	7	;

   	72A66	7
  	;6::	;- <"  	72A66	7
  	;6::	;' ??   YlF# 8c&kRSUXXX	7 	72A66	7	;

  	;6::	;  Vi :AOPRUUU	7 	72A66	7	;

  	;6::	;V	7 	72A66	7	;

  	;6::	;ss  F DD'(A	F 1E
F E+E2
D$DD$'
E1EE
F 
E/E**E/2
F<FFL339I*,L3-L6 2H


H*H%%H*.I
I'I""I'*L379L.0L31L6 6K
K.K))K.2L
L+L&&L+.L33L6 6N08MN0
M0M+&N0+M00N04NN0
N-N(#N0(N--N0z/produtos-filtrarc                     [         R                  R                  S5      n SnSn U (       d<  [        / 5       U(       a  UR	                  5          U(       a  UR	                  5         $ $ [        5       nUR                  SS9n[        R                  " S5      nUR                  SX45        UR                  5       =(       d    / nU Vs/ s H  n[        U5      PM     nn[        U5       U(       a  UR	                  5          U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         SnANSnAff = f! [
         a  n[        SU5         SnA$ SnAff = fs  snf ! [
         a  n[        SU5         SnANSnAff = f! [
         a  n[        SU5         SnA$ SnAff = f! [        R                  R                   a  n[        S	U5        [         R"                  " 5         [        S
[%        U5      S.5      S4s SnA U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         SnA$ SnAff = fSnAf[
         a  n[        SU5        [         R"                  " 5         [        S[%        U5      S.5      S4s SnA U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         SnA$ SnAff = fSnAff = f!  U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U(       a  UR	                  5         f f ! [
         a  n[        SU5         SnAf SnAff = f= f)r  rS   Nr  r  Tr;   rQ   zXSELECT produto, preco, classe, chave FROM produtos WHERE classe = %s AND id_cliente = %sr&  r  r  ro   r  r  )r   r!   r    r   rC   rD   r   r?   r@   r   rA   rB   r   r1  r2  r  r   r   rE   )rS   rF   r@   rH   rQ   r  r   r  s           r$   r  r  	  s&    <<F#DDF!;2;,	7	;

 5 z-[[.
qtx  tF  	G__&,"
0:;
1mA&

;z"	7	;

   	72A66	7
  	;6::	;- <"  	72A66	7
  	;6::	;' ??   YlF# 8c&kRSUXXX	7 	72A66	7	;

  	;6::	;  Vi :AOPRUUU	7 	72A66	7	;

  	;6::	;V	7 	72A66	7	;

  	;6::	;ss  F+ DD=(AF+ E F+ )E%F
D:$D55D:=
EEE F+ %
F/F  F
F(F##F(+M		9J M	M H  
I *H;;I I
I='I88I= M	9MM	M K$$
L.K??LL!!
M+L<<MM		M OM&%O&
N0N<ONO
N#!O#
O-N>9O>OOz/produto/<classe>c                 t   S nS n [        5       nUR                  SS9n[        SU  35        [        R                  " S5      nUR                  SX45        UR                  5       nUR                  5         [        U5        [        U5      nU(       a<  [        U5       U(       a  UR                  5          U(       a  UR                  5         $ $ [        SU S	.5      S
4 U(       a  UR                  5          U(       a  UR                  5         $ $ ! [         a  n[        SU5         S nANvS nAff = f! [         a  n[        SU5         S nA$ S nAff = f! [         a  n[        SU5         S nAN{S nAff = f! [         a  n[        SU5         S nA$ S nAff = f! [        R                  R                   a  n[        SU5        [         R"                  " 5         [        S[%        U5      S.5      S4s S nA U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U(       a  UR                  5         $ $ ! [         a  n[        SU5         S nA$ S nAff = fS nAf[         a  n[        SU5        [         R"                  " 5         [        S[%        U5      S.5      S4s S nA U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U(       a  UR                  5         $ $ ! [         a  n[        SU5         S nA$ S nAff = fS nAff = f!  U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U(       a  UR                  5         f f ! [         a  n[        SU5         S nAf S nAff = f= f)NTr;   z&[DEBUG] Consulta produto pela classe: rQ   z<SELECT * FROM produtos WHERE classe = %s AND id_cliente = %sr  r  u   Produto nÃ£o encontrado)r>   r_   r   r&  r  r  ro   r  r  )r?   r@   r   r   r    rA   rV   rB   r   r   r   rC   rD   r1  r2  r  r   r   rE   )r_   rF   r@   rQ   	resultadorH   r  s          r$   r  r  
  s#   DF,;z- 	6vh?@[[.
UX^WklOO%	y!),	 9%"	7	;

 - $?6RSUXX	7	;

 	  	72A66	7  	;6::	;  	72A66	7  	;6::	;- ??   YlF# 8c&kRSUXXX	7 	72A66	7	;

  	;6::	;!  Vi :AOPRUUU	7 	72A66	7	;

  	;6::	;!V	7 	72A66	7	;

  	;6::	;sb  BF D6D3F E7E9
D0D++D03
E=EE
E6 E11E69
FFFL::9I13L:4L= 9H
H1H,,H15I
I.I))I.1L:>9L57L:8L= =K
K5K00K59L
L2L--L25L::L= =N7?MN7
M7!M2-N72M77N7;NN7
N4N/*N7/N44N7z/buscar-clientec                     [         R                  R                  S5      n S nS n U (       d@  [        SS05      S4 U(       a  UR	                  5          U(       a  UR	                  5         $ $ [        5       nUR                  SS9n[        R                  " S	5      nUR                  S
X45        UR                  5       nUR                  5         U(       aG  [        U5      n[        U5       U(       a  UR	                  5          U(       a  UR	                  5         $ $ [        SS05      S4 U(       a  UR	                  5          U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         S nAGN&S nAff = f! [
         a  n[        SU5         S nA$ S nAff = f! [
         a  n[        SU5         S nANS nAff = f! [
         a  n[        SU5         S nA$ S nAff = f! [
         a  n[        SU5         S nANS nAff = f! [
         a  n[        SU5         S nA$ S nAff = f! [        R                  R                    a  n[        SU5        ["        R$                  " 5         [        S['        U5      S.5      S4s S nA U(       a  UR	                  5         O#! [
         a  n[        SU5         S nAOS nAff = f U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         S nA$ S nAff = fS nAf[
         a  n[        SU5        ["        R$                  " 5         [        S['        U5      S.5      S4s S nA U(       a  UR	                  5         O#! [
         a  n[        SU5         S nAOS nAff = f U(       a  UR	                  5         $ $ ! [
         a  n[        SU5         S nA$ S nAff = fS nAff = f!  U(       a  UR	                  5         O#! [
         a  n[        SU5         S nAOS nAff = f U(       a  UR	                  5         f f ! [
         a  n[        SU5         S nAf S nAff = f= f)Nr   r>   u   Telefone não fornecidor`   r      [WARN] falha ao fechar conexão:Tr;   rQ   z>SELECT * FROM clientes WHERE telefone = %s AND id_cliente = %su   Cliente não encontrador   r&  r  r  ro   r  r  )r   r!   r    r   rC   rD   r   r?   r@   r   rA   rV   rB   r   r1  r2  r  r   r   rE   )r   rF   r@   rH   rQ   r  r  s          r$   buscar_clienter  5
  s   ||
+HDF%9F$=>?D4	7	9

 = z-[[.
WZbYopOO%	%i0I9%	7	9

 ' F$=>?D	7	9

   	72A66	7
  	94a88	9  	72A66	7
  	94a88	9  	72A66	7
  	94a88	9' ??   YlF# 8c&kRSUXXX	7 	72A66	7	9

  	94a88	9  Vi :AOPRUUU	7 	72A66	7	9

  	94a88	9V	7 	72A66	7	9

  	94a88	9s  H/ EF ,A>H/ +F#GH/ +G)H
E=&E88E= 
F 
FF #
G-F>>G
G&G!!G&)
H	3HH	
H,H''H,/O9LOO J$$
K.J??KK!!
L+K<<LO9O
OO M((
N2NNN%%
O/O  OOO Q
O*)Q
*
P
4P Q
P

Q
P'%Q
'
Q1Q=Q
QQ
z/forma-cobrarc                     [         R                  R                  SS5      n S nS n [        5       nUR	                  SS9nUR                  SU 45        UR                  5       nUR                  5         U(       a~  UR                  S5      (       ah  [        US   5      R                  5       R                  5       n[        SU05       U(       a  UR                  5          U(       a  UR                  5         $ $ [        SS
05       U(       a  UR                  5          U(       a  UR                  5         $ $ ! [         a  n[        SU5         S nANsS nAff = f! [         a  n[        S	U5         S nA$ S nAff = f! [         a  n[        SU5         S nAN{S nAff = f! [         a  n[        S	U5         S nA$ S nAff = f! [        R                   R"                   a  n[        SU5        [$        R&                  " 5         [        S[        U5      S.5      S4s S nA U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U(       a  UR                  5         $ $ ! [         a  n[        S	U5         S nA$ S nAff = fS nAf[         a  n[        SU5        [$        R&                  " 5         [        S[        U5      S.5      S4s S nA U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U(       a  UR                  5         $ $ ! [         a  n[        S	U5         S nA$ S nAff = fS nAff = f!  U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U(       a  UR                  5         f f ! [         a  n[        S	U5         S nAf S nAff = f= f)NrS   r   Tr;   zDSELECT formadecobrar FROM classificacao WHERE nomeclassificacao = %sra   r   r  r  rb   r&  r  r  ro   r  r  )r   r!   r    r?   r@   rA   rV   rB   rE   rs   rt   r   rC   rD   r   r1  r2  r  r   r   )rS   rF   r@   r  r   rH   r  s          r$   forma_cobrarr  a
  s2   <<FB'DDF!9z-]`d_fgOO%	77	/2399;AACEGU+,	7	9

 ' GX./	7	9

   	72A66	7
  	94a88	9  	72A66	7
  	94a88	9' ??   YlF# 8c&kRSUXXX	7 	72A66	7	9

  	94a88	9  Vi :AOPRUUU	7 	72A66	7	9

  	94a88	9V	7 	72A66	7	9

  	94a88	9sb  BG D5E7G E;F5
E?EE
E8"E33E8;
FFF
F>(F99F>M9JMM" H66
I III33
J=JJM#9MMM" "K::
LLLL77
MMMMM" "O$M<;O<
NNONO N97O9
OOOOOz/proximo-pedidoc                  "   S n S n [        5       n U R                  SS9n[        R                  " S5      nU(       d  [	        SS05      S4$ UR                  SU45        UR                  5       nU(       a  US   S	-   nUR                  S
XB45        UnOUR                  SU45        S	nU R                  5         [	        SU05      $ ! [        R                  R                   a+  n[        SU5        [        R                  " 5          S nAg S nAff = f)NTr;   rQ   r>   r  r`   9SELECT contador FROM contadorpedido WHERE id_cliente = %scontadorre   z=UPDATE contadorpedido SET contador = %s WHERE id_cliente = %srf  numeror&  )r?   r@   r   r    r   rA   rV   r~   r1  r2  r  r   r   r   )rF   r@   rQ   r  novo_numeror  r  s          r$   proximo_pedidor  
  s    DFz-[[.
F$KLMsRR 	RU_TabOO%	#J/!3KNNZ]h\uv F NN]`j_lmF&)**??   lF#s   AC A9C D#!D		Dz/numero-pedido-atualc                  `   Sn Sn [        5       n U R                  SS9n[        R                  " S5      nU(       d@  [	        SS05      S4 U(       a  UR                  5          U (       a  U R                  5         $ $ UR                  S
U45        UR                  5       nU(       a	  US   S-   nOSn[	        SU05       U(       a  UR                  5          U (       a  U R                  5         $ $ ! [         a  n[        SU5         SnANSnAff = f! [         a  n[        S	U5         SnA$ SnAff = f! [         a  n[        SU5         SnAN{SnAff = f! [         a  n[        S	U5         SnA$ SnAff = f! [        R                  R                   a  n[        SU5        [        R                  " 5         U (       a  U R                  5         [	        S[!        U5      S.5      S4s SnA U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         $ $ ! [         a  n[        S	U5         SnA$ SnAff = fSnAf[         a  n[        SU5        [        R                  " 5         [	        S[!        U5      S.5      S4s SnA U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         $ $ ! [         a  n[        S	U5         SnA$ SnAff = fSnAff = f!  U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         f f ! [         a  n[        S	U5         SnAf SnAff = f= f)u?   Retorna o próximo número de pedido SEM incrementar o contadorNTr;   rQ   r>   r  r`   r  r  r  r  re   r  r&  r  r  ro   r  r  )r?   r@   r   r    r   rC   rD   r   rA   rV   r1  r2  r  r   r   r   rE   )rF   r@   rQ   rH   r  r  r  s          r$   numero_pedido_atualr  
  s    DF+9z-[[.
F$KLMsR8	7	9

 ? 	RU_TabOO%	z*Q.F F&)*	7	9

   	72A66	7
  	94a88	9  	72A66	7
  	94a88	9+ ??   YlF#MMO 8c&kRSUXXX	7 	72A66	7	9

  	94a88	9  Vi :AOPRUUU	7 	72A66	7	9

  	94a88	9V	7 	72A66	7	9

  	94a88	9sd  AE; C/#D<AE; >D5E/
D9D

D
D2D--D25
E?EE
E8"E33E8;L0AI')L0*L3 /H
H'H""H'+I
I$II$'L049L+-L0.L3 3K
K+K&&K+/L
L(L##L(+L00L3 3N-5MN-
M-M(#N-(M--N-1N
N-

N*N% N-%N**N-z/delivery-pendentec                  X   Sn Sn [        5       n U R                  SS9nUR                  S[        R                  " S5      45        UR                  5       =(       d    / nU Vs/ s H  n[        U5      PM     nn[        S[        U5      US.5       U(       a  UR                  5          U (       a  U R                  5         $ $ s  snf ! [         a  n[        SU5         SnAN:SnAff = f! [         a  n[        SU5         SnA$ SnAff = f! [        R                  R                   a  n[        S	U5        [        R                   " 5         [        S
[#        U5      S.5      S4s SnA U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         $ $ ! [         a  n[        SU5         SnA$ SnAff = fSnAf[         a  n[        SU5        [        R                   " 5         [        S[#        U5      S.5      S4s SnA U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         $ $ ! [         a  n[        SU5         SnA$ SnAff = fSnAff = f!  U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         f f ! [         a  n[        SU5         SnAf SnAff = f= f)zFLista todos os registros pendentes de entrega, agrupados por nropedidoNTr;   aK  
            SELECT 
                MIN(chave) as chave,
                nropedido,
                telefone,
                cep,
                nome,
                endereco,
                nrocasa,
                complemento,
                MAX(entregador) as entregador,
                SUM(CAST(preco AS DECIMAL(10,2))) as total_preco,
                COUNT(*) as total_produtos
            FROM deliverypendente
            WHERE id_cliente = %s
            GROUP BY nropedido, telefone, cep, nome, endereco, nrocasa, complemento
            ORDER BY MIN(chave) DESC
        rQ   )r   totalr=   r  r  r&  r  r  ro   r  r  )r?   r@   rA   r   r    rB   r   r   ru   rC   rD   r   r1  r2  r  r   r   rE   )rF   r@   r=   r   rH   r  s         r$   listar_delivery_pendenter  
  s    DF59z- 	 " kk,')#	+& OO%+	/89y!]1%y	9^"
 "	7	9

 3 :,  	72A66	7
  	94a88	9' ??   YlF# 8c&kRSUXXX	7 	72A66	7	9

  	94a88	9  Vi :AOPRUUU	7 	72A66	7	9

  	94a88	9V	7 	72A66	7	9

  	94a88	9s>  AD #C8D C*C+D 
C(C##C(+
D5DDJ,,9G#%J,&J/ +F
F#FF#'G  
G 
GG #J,09J')J,*J/ /I
I'I""I'+J
J$JJ$'J,,J/ /L)1K	L)	
K)K$L)$K))L)-LL)
L&L!L)!L&&L)z/atribuir-entregadorc                     Sn Sn [         R                  =(       d    0 nUR                  S5      nUR                  SS5      R                  5       nU(       d@  [	        SS05      S4 U(       a  UR                  5          U (       a  U R                  5         $ $ U(       d@  [	        SS
05      S4 U(       a  UR                  5          U (       a  U R                  5         $ $ [        5       n U R                  5       nUR                  SXC45        U R                  5         [        SU SU 35        [	        SSU SU 3S.5       U(       a  UR                  5          U (       a  U R                  5         $ $ ! [         a  n[        SU5         SnAGNSnAff = f! [         a  n[        S	U5         SnA$ SnAff = f! [         a  n[        SU5         SnAGNSnAff = f! [         a  n[        S	U5         SnA$ SnAff = f! [         a  n[        SU5         SnANSnAff = f! [         a  n[        S	U5         SnA$ SnAff = f! [        R                  R                   a  n[        SU5        [        R                   " 5         [	        S[#        U5      S.5      S4s SnA U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         $ $ ! [         a  n[        S	U5         SnA$ SnAff = fSnAf[         a  n[        SU5        [        R                   " 5         [	        S[#        U5      S.5      S4s SnA U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         $ $ ! [         a  n[        S	U5         SnA$ SnAff = fSnAff = f!  U(       a  UR                  5         O#! [         a  n[        SU5         SnAOSnAff = f U (       a  U R                  5         f f ! [         a  n[        S	U5         SnAf SnAff = f= f)z<Atribui um entregador a um pedido na tabela deliverypendenteNr^   rH  r   r>   !   Número do pedido é obrigatórior`   r  r  u"   Nome do entregador é obrigatóriozp
            UPDATE deliverypendente 
            SET entregador = %s 
            WHERE nropedido = %s
        z[ENTREGADOR] u    atribuído ao pedido TzEntregador r   r&  r  r  ro   r  r  )r   rV  r    rt   r   rC   rD   r   r?   r@   rA   r~   r1  r2  r  r   r   rE   )rF   r@   r   r^   rH  rH   r  s          r$   atribuir_entregadorr    s    DF29"IIk*	YY|R0668
F$GHI3NF	7	9

 O F$HIJCO@	7	9

 I z 	  $		& 	j\)?	{KL%j\1G	{S
  	7	9

   	72A66	7
  	94a88	9  	72A66	7
  	94a88	9  	72A66	7
  	94a88	9' ??   YlF# 8c&kRSUXXX	7 	72A66	7	9

  	94a88	9  Vi :AOPRUUU	7 	72A66	7	9

  	94a88	9V	7 	72A66	7	9

  	94a88	9s  AI &E1>FI -F8GA!I  G?H"1
F;FF
F5F00F58
GGG
G<&G77G<?
H	HH"
I,H==IO##9LO#O& "J::
KKKK77
LLLO#'9O O#!O& &M>>
NNN"N;;
OOOO##O& &Q (P ?Q  
P 
PQ P  Q $P=;Q =
QQQ QQ z/api/diagnostico-comandac                     Sn Sn [        5       n U R                  SS9nUR                  S5        UR                  5       nUR                  S5        UR	                  5       n[        SUU(       a  US   OSS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a^  n[        S	U5        [        S
[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)z&Verifica a estrutura da tabela comandaNTr;   zDESCRIBE comandaz%SELECT COUNT(*) as total FROM comandar  r   )r   r  total_registrosr&  Fr   ro   )r?   r@   rA   rB   rV   r   rC   r1  r2  r  r   rE   )rF   r@   r  r  r  s        r$   diagnostico_comandar  S  s    DFz- 	)*//# 	>?!16uW~A
  LLNJJL  ??   ElF#5#f+>?DD LLNJJL E
 LLNJJL s0   A5B+ +D'	$D"-D'.D* "D''D* *1Ez/fechar-comandac                  
   Sn Sn [         R                  =(       d    0 nUR                  S5      nU(       d@  [        SS05      S4 U(       a  UR	                  5          U (       a  U R	                  5         $ $ [        5       n U R                  SS	9nUR                  S
U45        UR                  5       nU(       d@  [        SS05      S4 U(       a  UR	                  5          U (       a  U R	                  5         $ $ UR                  SS5      nU(       a  UR                  5       S:X  a@  [        SS05      S4 U(       a  UR	                  5          U (       a  U R	                  5         $ $ [        R                  " S5      nUR                  SX745        UR                  nUR                  SX745        U R                  5         [        SU SU S35        [        SSU S3US.5       U(       a  UR	                  5          U (       a  U R	                  5         $ $ ! [
         a  n[        SU5         SnAGNSnAff = f! [
         a  n[        SU5         SnA$ SnAff = f! [
         a  n[        SU5         SnAGNSnAff = f! [
         a  n[        SU5         SnA$ SnAff = f! [
         a  n[        SU5         SnAGNrSnAff = f! [
         a  n[        SU5         SnA$ SnAff = f! [
         a  n[        SU5         SnAGNSnAff = f! [
         a  n[        SU5         SnA$ SnAff = f! [        R                   R"                   a  n	[        SU	5        [$        R&                  " 5         [        S[)        U	5      S.5      S4s Sn	A	 U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U (       a  U R	                  5         $ $ ! [
         a  n[        SU5         SnA$ SnAff = fSn	A	f[
         a  n[        SU5        [$        R&                  " 5         [        S[)        U5      S.5      S4s SnA U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U (       a  U R	                  5         $ $ ! [
         a  n[        SU5         SnA$ SnAff = fSnAff = f!  U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U (       a  U R	                  5         f f ! [
         a  n[        SU5         SnAf SnAff = f= f)zFTransfere um pedido de deliverypendente para comanda (fecha a comanda)Nr^   r>   r  r`   r  r  Tr;   z
            SELECT entregador 
            FROM deliverypendente 
            WHERE nropedido = %s 
            LIMIT 1
        u   Pedido não encontrador   rH  r   u=   Não é possível fechar a comanda sem atribuir um entregadorrQ   a	  
            INSERT INTO comanda 
            (nropedido, telefone, cep, nome, endereco, nrocasa, complemento, 
             codigoproduto, produto, preco, quantidade, classe, entregador, cliente, id_cliente, formapagamento)
            SELECT nropedido, telefone, cep, nome, endereco, nrocasa, complemento,
                   codigoproduto, produto, preco, quantidade, classe, entregador, cliente, id_cliente, formapagamento
            FROM deliverypendente
            WHERE nropedido = %s AND id_cliente = %s
        h
            DELETE FROM deliverypendente 
            WHERE nropedido = %s AND id_cliente = %s
        z[FECHAR COMANDA] Pedido z transferido para comanda ( registros)zComanda do pedido z fechada com sucessor   r   registros_transferidosr&  Fr   ro   r  )r   rV  r    r   rC   rD   r   r?   r@   rA   rV   rt   r   r   r~   r1  r2  r  r   r   rE   )
rF   r@   r   r^   rH   r  rH  rQ   r  r  s
             r$   fechar_comandar  u  s    DFN9"IIk*	F$GHI3N@	7	9

 I z- 	 
 \	 OO%	F$<=>C`	7	9

 i ]]<4
Z--/25F$cdegjjV	7	9

 ] [[.
  $	& "( 	  $	&
 	(3NOeNffqrs,YK7KL&<
 "	7	9

   	72A66	7
  	94a88	9  	72A66	7
  	94a88	9  	72A66	7
  	94a88	9  	72A66	7
  	94a88	9' ??   ElF#5#f+>?DD	7 	72A66	7	9

  	94a88	9  @i5#a&9:C??	7 	72A66	7	9

  	94a88	9@	7 	72A66	7	9

  	94a88	9s  ?L1 HH97AL1 	I!J :;L1 6J#K'A<L1 $K*<L
H6H11H69
III
I=&I88I= 
J 
JJ #
K-J??K
K'K""K'*
L4LL
L.L))L.1S9PS	S N&&
O0OO
O##
P-O>>PS9S
SS Q**
R
4RR
R''
S1SS
SS US,+U,
T6TUTUT)'U)
U	3U?UU		Uz/cancelar-pedidoc                     Sn Sn [         R                  =(       d    0 nUR                  S5      nU(       d@  [        SS05      S4 U(       a  UR	                  5          U (       a  U R	                  5         $ $ [        5       n U R                  5       n[        R                  " S5      nUR                  S	X545        UR                  nUR                  S
X545        U R                  5         [        SU SU S35        [        SSU S3US.5       U(       a  UR	                  5          U (       a  U R	                  5         $ $ ! [
         a  n[        SU5         SnANSnAff = f! [
         a  n[        SU5         SnA$ SnAff = f! [
         a  n[        SU5         SnAN{SnAff = f! [
         a  n[        SU5         SnA$ SnAff = f! [        R                  R                   a  n[        SU5        [         R"                  " 5         [        S[%        U5      S.5      S4s SnA U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U (       a  U R	                  5         $ $ ! [
         a  n[        SU5         SnA$ SnAff = fSnAf[
         a  n[        SU5        [         R"                  " 5         [        S[%        U5      S.5      S4s SnA U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U (       a  U R	                  5         $ $ ! [
         a  n[        SU5         SnA$ SnAff = fSnAff = f!  U(       a  UR	                  5         O#! [
         a  n[        SU5         SnAOSnAff = f U (       a  U R	                  5         f f ! [
         a  n[        SU5         SnAf SnAff = f= f)z7Transfere um pedido de deliverypendente para canceladasNr^   r>   r  r`   r  r  rQ   a  
            INSERT INTO canceladas 
            (nropedido, cliente, telefone, nome, cep, endereco, nrocasa, complemento, 
             codigoproduto, produto, preco, quantidade, classe, entregador, id_cliente)
            SELECT nropedido, cliente, telefone, nome, cep, endereco, nrocasa, complemento,
                   codigoproduto, produto, preco, quantidade, classe, entregador, id_cliente
            FROM deliverypendente
            WHERE nropedido = %s AND id_cliente = %s
        r  z[CANCELAR PEDIDO] Pedido z transferido para canceladas (r  TzPedido z cancelado com sucessor  r&  Fr   ro   r  )r   rV  r    r   rC   rD   r   r?   r@   r   rA   r   r~   r1  r2  r  r   r   rE   )rF   r@   r   r^   rH   rQ   r  r  s           r$   cancelar_pedidor    sk    DF<9"IIk*	F$GHI3N\	7	9

 e z [[.
  $	& "( 	  $	&
 	))4RSiRjjuvw!),BC&<
 "	7	9

   	72A66	7
  	94a88	9  	72A66	7
  	94a88	9' ??   ElF#5#f+>?DD	7 	72A66	7	9

  	94a88	9  @i5#a&9:C??	7 	72A66	7	9

  	94a88	9@	7 	72A66	7	9

  	94a88	9sb  ?G D?E"7BG F&F(?
E	EE"
F,E==F
F%F  F%(
G2GGM))9J "M)#M, (I  
I 
II $I==
JJJ M)-9M$&M)'M, ,L
L$LL$(M
M!MM!$M))M, ,O&.NO&
N&N!O&!N&&O&*OO&
O#OO&O##O&z/salvar-clientec                     S n S n [         R                  =(       d    0 n[        SS 35        [        S5        [        U5        [        S 5        [        S5        [        SUR                  S5       35        [        S[	        UR                  S5      5       35        [        SUR                  S	5       35        [        S
[	        UR                  S	5      5       35        [        S S35        UR                  S5      nU(       d@  [        SS05      S4 U(       a  UR                  5          U (       a  U R                  5         $ $ [        5       n U R                  SS9n[        R                  " S5      nUR                  SU45        UR                  5       nSnU(       aL  UR                  S5      =(       d    SR                  5       R                  5       nUS:H  n[        SU SU 35        U(       aS  UR                  S	S5      n	 [        U	5      n	[!        U5      u  pnU	S:  a  U	OU
n[#        U5      n[        SU SU 35        O][        UR                  S	S5      =(       d    S5      n[        UR                  SS5      =(       d    S5      nS nS n[        SU SU 35        U R                  SS9n[        R                  " S5      nUR                  SX545        UR                  5       nUR                  S5        UR                  5       S LnUR                  S 5        UR                  5       S LnU(       Ga  U(       a  U(       a  S!nUR                  S"S#5      UR                  S$S#5      UR                  S%S#5      UR                  S&S#5      UR                  S'S#5      UR                  S(S#5      UR                  S)S#5      UR                  S*S#5      UUUUUR                  S+S#5      UU4nGOU(       a  U(       d  S,nUR                  S"S#5      UR                  S$S#5      UR                  S%S#5      UR                  S&S#5      UR                  S'S#5      UR                  S(S#5      UR                  S)S#5      UR                  S*S#5      UUUUUU4nGO@U(       a  U(       d  S-nUR                  S"S#5      UR                  S$S#5      UR                  S%S#5      UR                  S&S#5      UR                  S'S#5      UR                  S(S#5      UR                  S)S#5      UR                  S*S#5      UUUR                  S+S#5      UU4nOS.nUR                  S"S#5      UR                  S$S#5      UR                  S%S#5      UR                  S&S#5      UR                  S'S#5      UR                  S(S#5      UR                  S)S#5      UR                  S*S#5      UUUU4nUR                  UU5        U R%                  5         [        SS/US0   XS1.5       U(       a  UR                  5          U (       a  U R                  5         $ $ U(       a  U(       a  S2nUUR                  S"S#5      UR                  S$S#5      UR                  S%S#5      UR                  S&S#5      UR                  S'S#5      UR                  S(S#5      UR                  S)S#5      UR                  S*S#5      UUUUUR                  S+S#5      U4nGOU(       a  U(       d  S3nUUR                  S"S#5      UR                  S$S#5      UR                  S%S#5      UR                  S&S#5      UR                  S'S#5      UR                  S(S#5      UR                  S)S#5      UR                  S*S#5      UUUUU4nGO@U(       a  U(       d  S4nUUR                  S"S#5      UR                  S$S#5      UR                  S%S#5      UR                  S&S#5      UR                  S'S#5      UR                  S(S#5      UR                  S)S#5      UR                  S*S#5      UUUR                  S+S#5      U4nOS5nUUR                  S"S#5      UR                  S$S#5      UR                  S%S#5      UR                  S&S#5      UR                  S'S#5      UR                  S(S#5      UR                  S)S#5      UR                  S*S#5      UUU4nUR                  UU5        U R%                  5         [        SS6UR&                  XS1.5       U(       a  UR                  5          U (       a  U R                  5         $ $ ! [         a  n[        SU5         S nAGN'S nAff = f! [         a  n[        SU5         S nA$ S nAff = f! [         a    Sn	 GN{f = f! [         a  n[        SU5         S nAGNS nAff = f! [         a  n[        SU5         S nA$ S nAff = f! [         a  n[        SU5         S nANS nAff = f! [         a  n[        SU5         S nA$ S nAff = f! [(        R*                  R,                   a  n[        S7U5        [.        R0                  " 5         U (       a  U R3                  5         [        S8[5        U5      S9.5      S:4s S nA U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U (       a  U R                  5         $ $ ! [         a  n[        SU5         S nA$ S nAff = fS nAf[         a  n[        S;U5        [.        R0                  " 5         [        S<[5        U5      S9.5      S:4s S nA U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U (       a  U R                  5         $ $ ! [         a  n[        SU5         S nA$ S nAff = fS nAff = f!  U(       a  UR                  5         O#! [         a  n[        SU5         S nAOS nAff = f U (       a  U R                  5         f f ! [         a  n[        SU5         S nAf S nAff = f= f)=Nr   z<============================================================z'[SALVAR CLIENTE] REQUEST JSON COMPLETO:z![SALVAR CLIENTE] Dados recebidos:u     - Taxa do formulário (raw): taxaentregau      - Taxa do formulário (type): u%     - Distância do formulário (raw): r  u&     - Distância do formulário (type): r   r>   u   Telefone é obrigatórior`   r  r  Tr;   rQ   zMSELECT calculodistancia FROM configuracao WHERE chave = 1 AND id_cliente = %scalculodistanciar   simu2   [SALVAR CLIENTE] Configuração: calculodistancia=z, habilitado=r   z'[SALVAR CLIENTE] Modo CALCULADO - Taxa=z, Dist=z$[SALVAR CLIENTE] Modo MANUAL - Taxa=zBSELECT chave FROM clientes WHERE telefone = %s AND id_cliente = %sz-SHOW COLUMNS FROM clientes LIKE 'lat_cliente'z%SHOW COLUMNS FROM clientes LIKE 'cep'aa  UPDATE clientes SET 
                         nome = %s, endereco = %s, nrocasa = %s, complemento = %s,
                         referencia = %s, bairro = %s, cidade = %s, estado = %s,
                         taxaentrega = %s, distancia = %s, lat_cliente = %s, lon_cliente = %s, cep = %s
                         WHERE telefone = %s AND id_cliente = %srS   r   r   r   r   
referenciar9  r:  rs  r   aW  UPDATE clientes SET 
                         nome = %s, endereco = %s, nrocasa = %s, complemento = %s,
                         referencia = %s, bairro = %s, cidade = %s, estado = %s,
                         taxaentrega = %s, distancia = %s, lat_cliente = %s, lon_cliente = %s
                         WHERE telefone = %s AND id_cliente = %sa=  UPDATE clientes SET 
                         nome = %s, endereco = %s, nrocasa = %s, complemento = %s,
                         referencia = %s, bairro = %s, cidade = %s, estado = %s,
                         taxaentrega = %s, distancia = %s, cep = %s
                         WHERE telefone = %s AND id_cliente = %sa3  UPDATE clientes SET 
                         nome = %s, endereco = %s, nrocasa = %s, complemento = %s,
                         referencia = %s, bairro = %s, cidade = %s, estado = %s,
                         taxaentrega = %s, distancia = %s
                         WHERE telefone = %s AND id_cliente = %szCliente atualizado com sucessor  )r   r   r  distancia_calculadataxa_calculadaa>  INSERT INTO clientes 
                         (telefone, nome, endereco, nrocasa, complemento, referencia, 
                          bairro, cidade, estado, taxaentrega, distancia, lat_cliente, lon_cliente, cep, id_cliente)
                         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)a5  INSERT INTO clientes 
                         (telefone, nome, endereco, nrocasa, complemento, referencia, 
                          bairro, cidade, estado, taxaentrega, distancia, lat_cliente, lon_cliente, id_cliente)
                         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)a  INSERT INTO clientes 
                         (telefone, nome, endereco, nrocasa, complemento, referencia, 
                          bairro, cidade, estado, taxaentrega, distancia, cep, id_cliente)
                         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)a  INSERT INTO clientes 
                         (telefone, nome, endereco, nrocasa, complemento, referencia, 
                          bairro, cidade, estado, taxaentrega, distancia, id_cliente)
                         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)zCliente cadastrado com sucessor&  r  r  ro   r  r  )r   rV  r   r    r  r   rC   rD   r?   r@   r   rA   rV   rt   rs   rw   r{  r  r~   r   r1  r2  r  r   r   r   rE   )rF   r@   r   r   rH   rQ   r  calculo_habilitadocalculo_distdistancia_brutadistancia_calcrm  rn  distancia_finaltaxa_entregacliente_existentetem_lat_lontem_cepr  r   r  s                        r$   salvar_clienter    s5   DFM9" 	6(m79e13/		-0H/IJK0eii6N1O0PQR5eii6L5MNO6tEIIk<R7S6TUVm99Z(F$>?@#Ed	7	9

 m z- [[.
fishuv"!"JJ'9:CeJJLRRTL".%"7F|nTabtauvw #iiQ7O$"'"8 0J%/P,NW1@11Do.O 1AL;L>Q`Pabc $EIIk1$=$BCO =!!<!ABLGG8goM^_`- [[.
[^f]st"OO- 	FGoo't3>?//#4/wD IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ #IIeR(" WD IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ #  D IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ #IIeR( D IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ # NN3(KKMt9Yduv}d~  Xg  H  IL	7	9

 S w`
 IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ #IIeR(" W\
 IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ #  X
 IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ #IIeR( T
 IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ # NN3(KKMt9Ydjdtdt  N]  ~  	7	9

   	72A66	7
  	94a88	9K  $"#$@  	72A66	7
  	94a88	9  	72A66	7
  	94a88	9+ ??   YlF#MMO 8c&kRSUXXX	7 	72A66	7	9

  	94a88	9  Vi :AOPRUUU	7 	72A66	7	9

  	94a88	9V	7 	72A66	7	9

  	94a88	9s  Dh d7-eC h e> O1h ff55Kh gg;7
eee
e;%e66e;>f
h fh 
f2f--f25
g?gg
g8"g33g8;
hhho<Al
oo j**
k
4kk
k''
l1ll
o9ooo m..
n8n		nn++
o5oooo qo0/q0
p:pqpqp-+q-
q7qqqqz/api/comandasc                  J   Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       =(       d    / n[        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SS	S
.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAf[         aU  n[        SU5        [        SSS
.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)z4Retorna todos os registros da tabela comanda em JSONNTr;   rQ   z+SELECT * FROM comanda WHERE id_cliente = %sr   r=   r&  Fr  r   ro   r  r  r?   r@   r   r    rA   rB   r   rC   r1  r2  r  r   rD   rF   r@   rQ   r=   r  rH   s         r$   api_comandasr     sU    DFz-[[.
DzmTOO%+	"
  LLNJJL  ??   RlF#52JKLcQQ LLNJJL   Ti52LMNPSSS LLNJJL T
 LLNJJL H   A(B E.<DE.E1 E.E)4E.5E1 )E..E1 11F"z/api/canceladasc                  J   Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       =(       d    / n[        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   aU  n[        SU5        [        SS	S
.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAf[         aU  n[        SU5        [        SSS
.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)z7Retorna todos os registros da tabela canceladas em JSONNTr;   rQ   z.SELECT * FROM canceladas WHERE id_cliente = %sr  r&  Fr  r   ro   r  r  r  r  s         r$   api_canceladasr  @  sU    DFz-[[.
G*WOO%+	"
  LLNJJL  ??   RlF#52JKLcQQ LLNJJL   Ti52LMNPSSS LLNJJL T
 LLNJJL r  z /criar-coluna-cliente-canceladasc                     Sn Sn [        5       n U R                  5       nUR                  S5        UR                  5       c  UR                  S5        [	        S5        UR                  S5        UR                  5       c  UR                  S5        [	        S5        UR                  S5        UR                  5       c  UR                  S	5        [	        S
5        UR                  S5        UR                  5       c  UR                  S5        [	        S5        [        SSS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a_  n[	        SU5        [        SS[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAf[         a_  n[	        SU5        [        SS[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)u^   Adiciona as colunas cliente nas tabelas canceladas, comanda e deliverypendente se não existirNz+SHOW COLUMNS FROM canceladas LIKE 'cliente'z;ALTER TABLE canceladas ADD COLUMN cliente VARCHAR(255) NULLu7   [INFO] Coluna 'cliente' adicionada à tabela canceladasz(SHOW COLUMNS FROM comanda LIKE 'cliente'z8ALTER TABLE comanda ADD COLUMN cliente VARCHAR(255) NULLu4   [INFO] Coluna 'cliente' adicionada à tabela comandaz1SHOW COLUMNS FROM deliverypendente LIKE 'cliente'zAALTER TABLE deliverypendente ADD COLUMN cliente VARCHAR(255) NULLu=   [INFO] Coluna 'cliente' adicionada à tabela deliverypendentez,SHOW COLUMNS FROM canceladas LIKE 'telefone'zKALTER TABLE canceladas ADD COLUMN telefone VARCHAR(20) NULL AFTER nropedidou8   [INFO] Coluna 'telefone' adicionada à tabela canceladasTzColunas adicionadas com sucessor   r&  Fr  )r   r>   r  ro   r  zErro interno)r?   r@   rA   rV   r   r   rC   r1  r2  r  rE   rD   )rF   r@   r  rH   s       r$   criar_coluna_cliente_canceladasr	  `  s    DF+z 	DE??$NNXYKL 	AB??$NNUVHI 	JK??$NN^_QR 	EF??$NNhiLM45VWX LLNJJL  ??   klF#52JX[\bXcdegjjj LLNJJL   \i5.cRSfUVX[[[ LLNJJL \
 LLNJJL sH   DE H93%GH9H< H9%H4?H9 H< 4H99H< <1I-z/pedidos/<path:filename>c                      SSK Jn  U" SU 5      $ )z$Serve PDFs gerados da pasta pedidos.r   )send_from_directoryr  )flaskr  )filenamer  s     r$   
servir_pdfr    s     *7BBr'   z/criar-tabela-usuariosc                     Sn Sn [        5       n U R                  5       nUR                  S5        UR                  S5        UR                  5       S   S:X  a  UR                  S5        U R	                  5         [        S5        [        SSS	.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a^  n[        S
U5        [        S[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)u%   Cria a tabela de usuários para loginNa#  
            CREATE TABLE IF NOT EXISTS usuarios (
                chave INT AUTO_INCREMENT PRIMARY KEY,
                usuario VARCHAR(100) NOT NULL UNIQUE,
                senha VARCHAR(255) NOT NULL,
                data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        z5SELECT COUNT(*) FROM usuarios WHERE usuario = 'admin'r   z?INSERT INTO usuarios (usuario, senha) VALUES ('admin', 'admin')z+[INFO] Tabela 'usuarios' criada com sucessoTu&   Tabela de usuários criada com sucessor   r&  Fr   ro   )r?   r@   rA   rV   r~   r   r   rC   r1  r2  r  rE   )rF   r@   r  s      r$   criar_tabela_usuariosr    s'    DF z 	  	 	NO??Q1$NN\];<45]^_ LLNJJL  ??   ElF#5#f+>?DD LLNJJL E
 LLNJJL s0   BC D> $D9D>E 9D>>E 1E2z/atualizar-cliente-comandac                     Sn Sn [        5       n U R                  5       nUR                  S5        UR                  nU R	                  5         [        SU S35        [        SU S3S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a^  n[        SU5        [        S	[        U5      S
.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)z;Atualiza o campo cliente na tabela comanda copiando de nomeNzGUPDATE comanda SET cliente = nome WHERE cliente IS NULL OR cliente = ''z[INFO] z( registros atualizados na tabela comandaTz" registros atualizados com sucessor   r&  Fr   ro   )r?   r@   rA   r   r~   r   r   rC   r1  r2  r  rE   )rF   r@   registros_atualizadosr  s       r$   atualizar_cliente_comandar    s    DFz 	`a &-..VWX011ST
  LLNJJL  ??   ElF#5#f+>?DD LLNJJL E
 LLNJJL s0   A&B D:$DDD DD 1Ez/verificar-estrutura-produtosc                  `   Sn Sn [        5       n U R                  SS9nUR                  S5        UR                  5       n[	        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a^  n[        SU5        [	        S[        U5      S.5      S	4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)
z&Retorna a estrutura da tabela produtosNTr;   zDESCRIBE produtos)r   r  r&  Fr   ro   )r?   r@   rA   rB   r   rC   r1  r2  r  r   rE   )rF   r@   r  r  s       r$   verificar_estrutura_produtosr    s     DFz- 	*+//#4G<= LLNJJL  ??   ElF#5#f+>?DD LLNJJL E
 LLNJJL s0   AA= =C9$C4?C9 C< 4C99C< <1D-z /api/verificar-delivery-pendentec                     Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       nU(       a  US   OSn[        US:  US.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a_  n[        S	U5        [        S
S[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)uY   Verifica se existem registros na tabela deliverypendente, contando apenas pedidos únicosNTr;   rQ   USELECT COUNT(DISTINCT nropedido) as total FROM deliverypendente WHERE id_cliente = %sr  r   ri  r  r&  Fri  r  r>   ro   r{  rF   r@   rQ   r  r  r  s         r$   verificar_delivery_pendenter    s    DFz- [[.
nq{p}~OO%	&/	'"Qai
  LLNJJL  ??   PlF#%!S[IJCOO LLNJJL P
 LLNJJL 0   A0B& &D#%D)D#*D& D##D& &1Ez/api/limpar-delivery-pendentec                      Sn Sn [        5       n U R                  5       nUR                  S[        R                  " S5      45        UR                  5       nU(       a  US   OSnUR                  S[        R                  " S5      45        [        SUU S3S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a^  n[        S	U5        [        S
[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)z3Apaga todos os registros da tabela deliverypendenteNr  rQ   r   z2DELETE FROM deliverypendente WHERE id_cliente = %sTz" pedido(s) deletado(s) com sucesso)r   registros_deletadosr   r&  Fr   ro   )r?   r@   rA   r   r    rV   r   rC   r1  r2  r  r   rE   )rF   r@   r  pedidos_deletadosr  s        r$   limpar_delivery_pendenter     sT    DFz 	nqxq|q|  ~J  rK  qM  	NOO%	,5IaL1KgkkZfNgMij#4,--OP
  LLNJJL  ??   lF#F
   	 LLNJJL  LLNJJL s0   BC E	+$EE	E E		E 1E=z/api/verificar-comandasc                     Sn Sn [        5       n U R                  SS9n[        R                  " S5      nUR	                  SU45        UR                  5       nU(       a  US   OSn[        US:  US.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a_  n[        S	U5        [        S
S[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)uQ   Verifica se existem registros na tabela comandas, contando apenas pedidos únicosNTr;   rQ   zLSELECT COUNT(DISTINCT nropedido) as total FROM comanda WHERE id_cliente = %sr  r   r  r&  Fr  ro   r{  r  s         r$   verificar_comandasr"  ;  s    DFz- [[.
ehrgtuOO%	&/	'"Qai
  LLNJJL  ??   PlF#%!S[IJCOO LLNJJL P
 LLNJJL r  z#/api/transferir-comandas-liquidadasc                     Sn Sn [        5       n U R                  5       nUR                  S5        UR                  5       nU(       a  US   OSnUS:  a<  [        R
                  " S5      nUR                  SU45        UR                  SU45        [        SW 35        UR                  SU45        [        S	UR                   35        U R                  5         UR                  S
U45        UR                  5       nU(       a  US   OSn[        SU 35        [        SUUU S3S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [        R                  R                   a^  n[        SU5        [        S[        U5      S.5      S4s SnAU(       a  UR                  5         U (       a  U R                  5         $ $ SnAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)zHTransfere registros da tabela comanda para liquidada e reseta o contadorNz6SELECT COUNT(DISTINCT nropedido) as total FROM comandar   rQ   a  
                INSERT INTO liquidada 
                (nropedido, telefone, cep, nome, endereco, nrocasa, complemento, 
                 codigoproduto, produto, preco, quantidade, classe, entregador, cliente, data_criacao, id_cliente, formapagamento)
                SELECT nropedido, telefone, cep, nome, endereco, nrocasa, complemento,
                       codigoproduto, produto, preco, quantidade, classe, entregador, cliente, data_criacao, id_cliente, formapagamento
                FROM comanda WHERE id_cliente = %s
            z)DELETE FROM comanda WHERE id_cliente = %sz[RESET CONTADOR] id_cliente=z<UPDATE contadorpedido SET contador = 0 WHERE id_cliente = %sz"[RESET CONTADOR] Linhas afetadas: r  z[RESET CONTADOR] Valor atual: Tz9 pedido(s) transferido(s) com sucesso e contador resetado)r   r  contador_atualr   r&  Fr   ro   )r?   r@   rA   rV   r   r    r   r   r~   r   rC   r1  r2  r  rE   )rF   r@   r  pedidos_transferidosrQ   r$  contador_valorr  s           r$   transferir_comandas_liquidadasr'  Z  s    DF6z 	OPOO%	/8y|a!# \2JNN    NNFV 	,ZL9:UXbWde26??2CDE 	RU_Tab*.<*!.~.>?@&:,/00ij	
  LLNJJL  ??   lF#F
   	 LLNJJL  LLNJJL s0   D%E G9$GGG GG 1Hz/api/formas-pagamentoc                     S n S n [        5       n U R                  SS9n[        R                  " S5      n[	        SU 35        UR                  SU45        UR                  5       =(       d    / n[	        SU 35        U(       d  [	        SU 35        [        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [         a^  n[	        S	U5        [        S
[        U5      S.5      S4s S nAU(       a  UR                  5         U (       a  U R                  5         $ $ S nAff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)NTr;   rQ   u3   [LOG][formas_pagamento_api] id_cliente na sessão: z2SELECT * FROM formapagamento WHERE id_cliente = %sz0[LOG][formas_pagamento_api] Formas encontradas: zF[LOG][formas_pagamento_api] Nenhuma forma encontrada para id_cliente: )r   formasz[ERRO FORMAS PAGAMENTO]Fr   ro   )r?   r@   r   r    r   rA   rB   r   rC   rD   rE   )rF   r@   rQ   r)  rH   s        r$   formas_pagamento_apir*    s0    DFz-[[.
CJ<PQKj]["(b@IJZ[eZfgh46:;
 LLNJJL   @'+5#a&9:C??LLNJJL @ LLNJJL s0   BC 
D7$D2=D7>D: 2D77D: :1E+z/api/mesa/<int:mesanro>c                 @    [         R                  " S5      n[        SU  S[        U 5       SU 3SS9  [	        5       nUR                  SS9nU(       a  SnU [        U 5      U4nOS	nU [        U 5      4n[        S
UR                  5        SU 3SS9  UR                  XE5        UR                  5       n[        SU 3SS9  UR                  5         UR                  5         [        SUS.5      $ ! [         a%  n[        SUSS9  [        SSS.5      S4s S nA$ S nAff = f)NrQ   z0[DEBUG] /api/mesa/<mesanro> chamado com mesanro=z (type=z) e id_cliente=Trm   r;   a^  
                SELECT m.*, IFNULL(p.descricao, '') AS descricao_produto
                FROM mesa m
                LEFT JOIN produtos p ON p.chave = CAST(m.codigoproduto AS UNSIGNED) AND p.id_cliente = m.id_cliente
                WHERE (m.mesanro = %s OR m.mesanro = %s) AND m.id_cliente = %s 
                ORDER BY m.mesanro DESC
            aG  
                SELECT m.*, IFNULL(p.descricao, '') AS descricao_produto
                FROM mesa m
                LEFT JOIN produtos p ON p.chave = CAST(m.codigoproduto AS UNSIGNED) AND p.id_cliente = m.id_cliente
                WHERE (m.mesanro = %s OR m.mesanro = %s)
                ORDER BY m.mesanro DESC
            z[DEBUG] Executando query: z com params: z[DEBUG] Registros retornados: r  z"[ERRO] ao buscar produtos da mesa:Fz Erro ao buscar produtos da mesa.r   ro   )r   r    r   r  r?   r@   rE   rt   rA   rB   rC   r   rD   )r   rQ   rF   rG   queryr   r=   rH   s           r$   buscar_mesar-    s1   !`[[.
@	QUV]Q^P__noynz{  DH  	IzkkTk*E s7|Z8FE s7|,F*5;;=/vhOW[\E"LLN	.yk:$G		

4i@AA `2ATB56XYZ\___`s   C+C. .
D8DDDz*/api/mesa/<int:mesanro>/item/<int:item_id>c           	      J  ^  [         R                  " S5      n[        SU SU  SU 3SS9  [        5       nUR	                  SS9mS[
        S	[        4U4S
 jjnU" S5      (       a  SOSnU" S5      (       a  SOSnU" S5      (       a  SOS nU" S5      (       a  SOS nU" S5      (       a  SOS n	U" S5      n
U
(       d  SOSnX[        U 5      /nU
(       d  / OU/nSU SU SU SU S3	n[        SU SX-    3SS9  TR                  XU-   5        TR                  5       nU(       d0  TR                  5         UR                  5         [        SSS.5      S4$ [        SU 3SS9  UR                  S 5      n[        S!U 3SS9  UGb0  US":  Ga)  S#nU/nU
(       a  US-  nUR                  U5        [        S$U SU 3SS9  TR                  UU5        TR                  5       S%   n[        S&U S'U 3SS9  US(:  a\  S)nU/nU
(       a  US-  nUR                  U5        [        S*U SU 3SS9  TR                  UU5        [        S+TR                   3SS9  OS,U S-3nU/nU
(       a  US-  nUR                  U5        [        S.U SU 3SS9  TR                  UU5        [        S/TR                   3SS9  O_S,U S-3nU/nU
(       a  US-  nUR                  U5        [        S0U SU 3SS9  TR                  UU5        [        S1TR                   3SS9  UR                  5         [        S2SS9  TR                  5         UR                  5         [        SS3S.5      $ ! [         a<  n[        S4U 3SS9  [        R                   " 5         [        SS5S.5      S64s S nA$ S nAff = f)7NrQ   z[DEBUG] Removendo item z	 da mesa z para id_cliente=Trm   r;   nome_colunareturnc                    >  TR                  SU 45        TR                  5       n[        U=(       a    UR                  S5      5      $ ! [         a  n[        SU  SU 3SS9   S nAgS nAff = f)NzSELECT COUNT(*) AS existe FROM information_schema.columns
                        WHERE table_schema = DATABASE() AND table_name = 'mesa' AND column_name = %sri  z![WARN] Falha ao verificar coluna r  Trm   F)rA   rV   boolr    rD   r   )r/  rW   rH   rG   s      r$   coluna_existe(remover_item_mesa.<locals>.coluna_existe  sq    
h N
 llnC5CGGH$566 9+bLTXYs   AA	 	
A-A((A-r   r  r   r^   rl   r  r_   r   z AND id_cliente = %sz3
            SELECT * FROM mesa
            WHERE (z = %s) AND (z	 = %s OR z = %s)z	
        z[DEBUG] SELECT remover_item: z params=Fu5   Item não encontrado ou não pertence a este cliente.r   r   z[DEBUG] Item encontrado: r   z[DEBUG] nrolancamento do item: r   z;SELECT COUNT(*) as total FROM mesa WHERE nrolancamento = %sz[DEBUG] COUNT SQL: r  z.[DEBUG] Quantidade de itens com nrolancamento=r  re   z)DELETE FROM mesa WHERE nrolancamento = %sz+[DEBUG] DELETE multiparte (nrolancamento): z'[DEBUG] Linhas deletadas (multiparte): zDELETE FROM mesa WHERE z = %su   [DEBUG] DELETE único (ID): u#   [DEBUG] Linhas deletadas (único): z"[DEBUG] DELETE sem nrolancamento: z[DEBUG] Linhas deletadas: u)   [DEBUG] Remoção concluída com sucesso.zItem removido com sucesso.z [ERRO] ao remover item da mesa: zErro ao remover item da mesa.ro   )r   r    r   r?   r@   rE   r2  rA   rV   rC   r   rv   r   r~   rD   r   r   )r   r   rQ   rF   r3  col_idcol_mesacol_codcol_prod
col_classetem_id_clientewhere_clienteparams_baseparams_cliente
select_sqlr   r   	count_sqlcount_params	qtd_items
delete_sqldelete_paramsrH   rG   s                          @r$   remover_item_mesarD    s   n][[.
'y	'BST^S_`hlmzkkTk*	s 	t 	 't,,' -i 8 89k%2?%C%C/ -i 8 89d!.x!8!8Xd
&|4 #16LW6#1
|8<z8*F=/ Z	
 	-j\+B^A_`hlmJn <=||~IIKJJLu:qrsuxxx 	)$0= 1/?tL$):UI)?L33	##J/'	{(<.IQUVKK	<0w/IB=/QST]S^_gkl1}H
!.!"88J!((4CJ<xXeWfgostJ6?~NVZ[  7vheD
!(	!"88J!((44ZLX`deJ6;CLL>JRVW 36(%@J$IM44
$$Z06zl(=/ZbfgKK
M2.s||n=TJ9$G		

45QRSS ]04DA56UVWY\\\]s%   EM HM 
N"&1NN"N"z./api/mesa/<int:mesanro>/item/<int:item_id>/obsc           	          S nS n [         R                  " SS9=(       d    0 nUR                  S5      =(       d    SR                  5       n[        R                  " S5      n[        5         [        5       nUR                  5       nUR                  SXQU [        U 5      U45        UR                  5         UR                  S:X  a?  [        SS	S
.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        SS05      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a  nU(       a  UR                  5         [!        SUSS9  ["        R$                  " 5         [        SSS
.5      S4s S nAU(       a  UR                  5         U(       a  UR                  5         $ $ S nAff = f! U(       a  UR                  5         U(       a  UR                  5         f f = f)NTr   rk   r   rQ   z
            UPDATE mesa
            SET obs_item = %s
            WHERE chave = %s AND (mesanro = %s OR mesanro = %s) AND id_cliente = %s
            r   Fu   Item não encontrado.r   r   r   z[MESA OBS_ITEM ERRO]rm   u$   Erro ao salvar observação do item.ro   )r   rp   r    rt   r   rq   r?   r@   rA   rE   r~   r   r   rC   rD   r   r   r   r   )r   r   rF   rG   r   rk   rQ   rH   s           r$   atualizar_obs_item_mesarF  M  s    D
Ct,2HHZ(.B557[[.
zkkm
 WzB	
 	<<1u:QRSUXX IIKJJL  	4() IIKJJL   dMMO$at456\]^`cccIIKJJL d IIKJJL s7   CD? D? ?
G		AGG	G G		G 1G=__main__z?
==============================================================rm   z&[LojaOnline / Cliente30] Pasta do app:ri   z*[LojaOnline / Cliente30] Templates (HTML):z>[LojaOnline / Cliente30] Menu (/) = templates/painel_menu.htmlz?==============================================================
r  zultimo_arranque_loja.txtr   r   r   zpGerado ao iniciar app-Cliente30.py nesta pasta.
Se o caminho NAO for a pasta do Cursor, nao e o mesmo projeto.

zquando_local=seconds)timespecz

r   z$[Cliente30] Diagnostico gravado em: z>[Cliente30] Nao foi possivel gravar ultimo_arranque_loja.txt: z0.0.0.0i  )r+  r.  debugrU  )N)r  r   r   r   r   r   r   r	   r
   r   mysql.connectorr1  r  r   r   r_  rC  r   r   r   r{   	functoolsr   r   r   r   r   r   _PYWIN32_SYSisdirinsertpathsepr   r    hasattrr   rD   r  win32apir(   r  __name__r  
secret_keyr  after_requestr9   routerI   rO   rX   rZ   r   rq   r   r   r   r   r   r   r   r   r   r   r   before_requestr   r  r  r  r  r$  r&  r?   r  rR  rb  rq  r{  r  r   r  r  r  r  r  r  r  r  r   r  r  r
  r  r  r  r  r)  r,  r2  r7  r;  r>  rC  rF  rK  rN  rP  rR  rW  rZ  r_  ra  rc  r  rk  rn  rp  rr  ry  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'  r*  r-  rD  rF  	root_pathr+   _tplr   r  _markerr   _mfr   r  	isoformatr   _erunrN   r'   r$   <module>r_     s   o o o       
 	   ww||BGGOOBGGOOH,EFQVXgi{|77==388#<(%

2RZZ^^FB5OOBJJvr&''	  .
 GGOOBGGOOH56	GGLLK8'',,y(3
 A&*

" #(-

$ %&+

" #&*

" #   
) 
) 04  14   , !"7  #7 x0T5  1T5n: fX.?  /?D &8!  9!H 9G9M+  N+Z 07)D  E8 9H:N  O4 &
;  <2 5yI!  J!F2
"D0 !F84@  5@,   7  =  <-  - 7q  q@ =>< ?<@ (6(;5  <5$&P$.>6p
@86p]@  "UG4U 5U =5'*?UG,U - +U 3   8  8fX&0 '0d 9+ + 7   $%i  &i =b  b ;`  `  i  !i  6(3/  4/b !E73   4 D +eW="  >"H ,ug>3  ?3j -zB"  C"L "#l  $l #fX6(  7(T %w7  8B .@!  A!F /%A*  B*X 08*E"  F"L %&o  'o &9'  :'R '%9  :< 1E7C  D@ 2UGD*  E*X 3hZH"  I"L =b  b #fX6>  7>@ #$  %4 f  f !"@  #@ x0B  1BH ug.  /8 $ug6 72 %w7 8: ;)O *Ob %1Z 2Z )E7;	T  <	T  6(3@  4@8  |  !| <&*;@ +;@z  2; !2;f%;N &;  &;P /;  /;d )9 )9V ?%9 %9N ug. /@ !E73/9 4/9f %199 299v !F8469 569p %w7  8@ vh/R9 0R9h x0@9 1@9D vh/P9 0P9d ?UG, -> ug. /> -x@/ A/d %&C 'C
 #fX6$ 7$L '&: ;< *UG< =0 -w?  @: *VH=   > D $ug6  7: 06(C:  D:~ "UG4  50 $ug6"` 7"`J 7(Lo] Mo]b ;gYO   P F z77<<s':':'IkJD	/&	
2$?	#rwws}}-T:	
6dC	#rwwt$D1	
JRVW	/&a%'',,y*DE'31SIIU IIhlln&>&>	&>&R%SSWXYII-/0IIdO 2 	4WI>dK GGTG23 yz  		
  J  H@{ 21  aNrdS[_`asg   ,t ?t  t/ *u 6A0t>&u tt t,+t,/t;:t;>
uu u)
u$$u)