
    5Ej                        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rS SKrS SKrS SKJrJrJr  S SKJr  S SKJr  S SKJ r   S SK!J"r"  S S	K#J$r$  S S
K%J&r&  S SK'J(r(  S SK)J*r*J+r+J,r,J-r-J.r.J/r/  \R`                  Rc                  \R`                  Re                  \R`                  Rg                  \45      5      SSSS5      r5\R`                  Rm                  \55      (       a  \5\R`                  ;  a  \R`                  Ro                  S \55        \5\Rp                  -   \Rr                  Ru                  SS5      -   \Rr                  S'   \;" \S5      (       a   \Rx                  " \55         S SK>q> S SK?r?\R`                  Re                  \R`                  Rg                  \45      5      r@\R                  " 5         \" \B\R`                  Rc                  \@S5      \R`                  Rc                  \@S5      S9rCS\CR6                  S'   \R                  \ClE        \R                  \CR6                  S'   \R                  \CR6                  S'   \R                  (       a  \R                  \CR6                  S'   \CR                  \"5        \$" \C5        \CR                  S 5       rK\CR                  S 5       rM\CR                  SS/S 9\&S! 5       5       rO\CR                  S"5      \&S# 5       5       rP\CR                  S$5      \&S% 5       5       rQS& rRS' rSS( rTS) rUS*\VS+\V4S, jrWS- rXS. rYS/ rZS0 r[S1 r\S2 r]S3 r^S4 r_S5 r`S6 raS7 rbS8 rcS9 rdS: re\CR                  S;S/S 9\&S< 5       5       rf\CR                  S=S/S 9\&S> 5       5       rg\CR                  S?S/S 9\&S@ 5       5       rh\CR                  SASB/S 9\&SC 5       5       ri\CR                  SDS/S 9\&SE 5       5       rj\CR                  SFSG/S 9\&SH 5       5       rk\CR                  SISG/S 9\&SJ 5       5       rl\CR                  SFSK/S 9\&SL 5       5       rm\CR                  SDSK/S 9\&SM 5       5       rn\CR                  SNSG/S 9\&SO 5       5       ro\CR                  SPSB/S 9\&SQ 5       5       rp\CR                  SRS/S 9\&SS 5       5       rq\CR                  STS/S 9\&SU 5       5       rrSV rsSW rtSX ru\CR                  SYSB/S 9\&SZ 5       5       rv\CR                  S[S/S 9\&S\ 5       5       rw\CR                  S]S/S 9\&S^ 5       5       rx\CR                  S_S/S 9\&S` 5       5       ry\CR                  SaS/S 9\&Sb 5       5       rz\CR                  ScSB/S 9\&Sd 5       5       r{\CR                  Se 5       r}\CR                  Sf5      Sg 5       r~\CR                  Sh5      Si 5       r\CR                  SjSB/S 9\&Sk 5       5       rSl rSm rSn rSo rSp rSq rSr rSs rGS2St jrSu rGS3Sv jrGS2Sw jrSx r\CR                  SyS/S 9Sz 5       r\CR                  S{S/S 9\CR                  S|S/S 9S} 5       5       r\CR                  S~5      \&S 5       5       r\CR                  S5      S 5       r\CR                  S5      \&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SSK/S 9\&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SSK/S 9\&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       rS\VS\VS\S\V4S jr\CR                  SSB/S 9\&S 5       5       r\CR                  SS/S 9S 5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  S5      \&S 5       5       rS r\CR                  S5      \&S 5       5       r\CR                  S5      S 5       r\CR                  S5      \&S 5       5       r\CR                  S5      \&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SS/S 9S 5       r\CR                  SSB/S 9S 5       r\CR                  SS/S 9\&S 5       5       r\CR                  SSB/S 9S 5       r\CR                  SSB/S 9S 5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SS/S 9S 5       r\CR                  SS/S 9\&S 5       5       r\CR                  SSB/S 9S 5       r\CR                  S5      S 5       r\CR                  SSB/S 9S 5       r\CR                  SSB/S 9S 5       r\CR                  SS/S 9S 5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SSB/S 9\&S 5       5       r\CR                  SS/S 9\&S 5       5       r\CR                  SSB/S 9\&GS  5       5       r\CR                  GSS/S 9\&GS 5       5       r\CR                  GSSB/S 9\&GS 5       5       r\CR                  GSS/S 9\&GS 5       5       r\CR                  GSS/S 9\&GS 5       5       r\CR                  GS	SB/S 9\&GS
 5       5       r\CR                  GSSB/S 9\&GS 5       5       r\CR                  GSSB/S 9\&GS 5       5       r\CR                  GSSB/S 9\&GS 5       5       r\CR                  GSSB/S 9\&GS 5       5       r\CR                  GSSK/S 9\&GS 5       5       r\CR                  GSSG/S 9\&GS 5       5       r\CR                  GSSB/S 9\&GS 5       5       r\CR                  GSSG/S 9\&GS 5       5       r\BGS:X  Ga  \R`                  Rc                  \CGR                  \CGR                  =(       d    S5      r\" GSSGS9  \" GSSGS9  \" GS\R`                  Rg                  \CGR                  5      SGS9  \" GSSGS9  \" GS\R`                  Rg                  \5      SGS9  \" GS SGS9  \" GS!SGS9   S GS"KJr  \R`                  Rc                  \@GS#5      r\" \GS$GS%GS&9 r\GR                  GS'5        \GR                  GS(\GR                  " 5       GR                  GS)GS*9 GS+35        \GR                  \" 5       5        \GR                  GS,5        SSS5        \" GS-\ 3SGS9  \d" 5         \CGR                  GS/GS0\GR                  GS19  gg! \= a     GNf = f! \= a    Sq> GNf = f! \= a    Sr? GNf = f! , (       d  f       Nn= f! \ a  r\" GS.\ 3SGS9   SrCN|SrCff = f(4      )	Flaskrender_templatejsonifyrequestsessionredirecturl_formake_responseResponseN)pprint)datedatetimetime)ConfigAPP_VERSION)conectar)auth_bp)register_domain_blueprints)login_required)obter_dados_loja)ensure_pedido_periodos_tableensure_purge_eventexecutar_fechamentopreview_fechamentorelatorio_gerencial_periodoresumo_financeiro_fechamentoz.venvLibzsite-packagespywin32_system32PATH add_dll_directory	templatesstatic)template_folderstatic_folderTTEMPLATES_AUTO_RELOADSESSION_COOKIE_SAMESITESESSION_COOKIE_SECURESESSION_COOKIE_DOMAINc                      S[         0$ )Napp_versionr        Fc:\Users\user\Desktop\Projetos_em_andamento\_Mexendo\LojaOnline\app.pyinject_app_globalsr0   G   s    ;''r.   c                     U R                   R                  SS5      nSU;   a-  SU R                   S'   SU R                   S'   SU R                   S	'   U $ )
uQ   Respostas HTML sempre frescas — 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)headersget)responsects     r/   _evitar_cache_htmlr9   L   sY     
				nb	1Bb,R)%/"&)#Or.   z/formas-pagamentoGET)methodsc                      [        S5      $ )Nzformas_pagamento.htmlr   r-   r.   r/   formas_pagamento_pager>   X   s     233r.   z/configuracoesc                      [         R                  " S5      n [        U 5      =(       d    0 nUR                  SS5      n[        SU US9$ )N
id_clientenome
Minha Lojazconfiguracoes.htmlr@   nome_fantasiar   r6   r   r   r@   
dados_lojarD   s      r/   configuracoesrH   ^   sG     \*J!*-3JNN6<8M# r.   z/configuracoes-dadosc                      [        S5      $ )uP   Tabela de configurações (JSON) — link a partir do painel de configurações.zconfiguracoes_dados.htmlr=   r-   r.   r/   configuracoes_dadosrJ   k   s     566r.   c           	      n   [         R                  R                  [        S5      n SS S[        R
                  " S5       SU  SU S3	n[        USSS9 nUR                  U5        S	S	S	5        g	! , (       d  f       g	= f! [         a*  n [        S
USS9   S	nAg	! [         a      S	nAg	f = fS	nAff = f)uN   Registra erros em disco (útil quando o app roda com pythonw.exe sem console).zloja_erros.log
<============================================================z%Y-%m-%d %H:%M:%S autf-8encodingNz[LOJA_ERROS.LOG]Tflush)
ospathjoin	_BASE_DIRr   strftimeopenwrite	Exceptionprint)titulodetalhes_textorV   blocoflog_excs         r/   _append_loja_erro_logrc   r   s    77<<	#34D
"}}012!F82b" 	
 $g.!GGEN /.. 	$gT: 		sM   .B  A/&B  /
A=9B  =B   
B4B
B,%B/+B,,B//B4c                  4   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       b3  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 TABLES LIKE 'mesa'z&SHOW COLUMNS FROM mesa LIKE 'obs_item'z.ALTER TABLE mesa ADD COLUMN obs_item TEXT NULLz[OBS COLUNAS ERRO]TrS   	r   cursorexecutefetchonecommitr\   rollbackr]   closeconncures      r/   _ensure_obs_columnsrp      s8   D
CzkkmHI<<>!KKTUIJ<<>!KKUV-.<<>%KK@A||~%LM IIKJJL   3	 		"AT23 IIKJJL sH   C%D 
E#&D>=E>
EE
EEE& E##E& &1Fc           	      \   SR                  S [        U=(       d    S5       5       5      nU(       d  g U R                  SU45        U R                  5       =(       d    / nU H  nSR                  S [        U=(       d    0 R	                  S5      =(       d    S5       5       5      nU(       d  MN  Xc:X  d.  UR                  U5      (       d  UR                  U5      (       d  M   [        U=(       d    0 R	                  S5      =(       d    S5      =(       d    S s  $    g ! [         a     M  f = f)Nr!   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7fNisdigit.0chs     r/   	<genexpr>9_buscar_nropedido_aguarde_por_telefone.<locals>.<genexpr>   s     N&=&=   '	'a(  
        SELECT nropedido, telefone
        FROM pedido_diarios
        WHERE id_cliente = %s
          AND origem = 'DELIVERY'
          AND UPPER(COALESCE(status_pedido, '')) = 'AGUARDE'
          AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
        ORDER BY nropedido ASC
        c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   rz      s     ]&LPZPZP\&Lr{   telefone	nropedidor   )rW   strrg   fetchallr6   endswithintr\   )rn   r@   telefone_raw
tel_digitsrowsrowdb_tels          r/   &_buscar_nropedido_aguarde_por_telefoner      s    Nc,*<"&=NNJKK	 
 <<>RD]c39"//**E*K&L]]6??:#>#>*BUBUV\B]B]CI2??;7<1=EE    s   #4D
D+*D+c                 0   SR                  S [        U =(       d    S5       5       5      nSR                  S [        U=(       d    S5       5       5      nU(       a  U(       d  gX#:H  =(       d)    UR                  U5      =(       d    UR                  U5      $ )Nr!   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   )_telefones_compativeis.<locals>.<genexpr>        >-r-r{   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   r      r   r{   F)rW   r   r   )a_rawb_rawrO   bs       r/   _telefones_compativeisr      sf    
>S"->>A
>S"->>AA63QZZ]3ajjm3r.   
table_namereturnc                 (    U S:X  a  SOSnSU SU  S3$ )Npedido_periodosarquivado_emzNULL AS arquivado_emz1
        SELECT origem, nropedido, data_criacao, zX, telefone, produto,
               quantidade, preco, obs_item, obs_geral
        FROM z
        WHERE id_cliente = %s
          AND UPPER(TRIM(COALESCE(origem, ''))) IN ('DELIVERY', 'BALCAO')
          AND UPPER(TRIM(COALESCE(status_pedido, ''))) = 'RECEBIDO'
        ORDER BY data_criacao DESC, chave DESC
        LIMIT 2000
    r-   )r   arq_cols     r/   _sql_historico_cliente_recebidor      s5     *.? ?nE[G118	 :\ 	 	r.   c                     / nU =(       d    /  H?  n[        U=(       d    0 R                  S5      U5      (       d  M.  UR                  U5        MA     U$ )Nr}   )r   r6   append)r   r}   outr   s       r/   &_filtrar_linhas_historico_por_telefoner      sC    
Czrz!39"//*"=xHHJJsO  Jr.   c                 J   0 nU =(       d    /  GH  n[        U=(       d    0 R                  S5      =(       d    S5      R                  5       R                  5       =(       d    Sn[	        U=(       d    0 R                  S5      =(       d    S5      nUS::  a  M  X44nUR                  U5      nU=(       d    0 R                  S5      =(       d#    U=(       d    0 R                  S5      =(       d    SnUcT  UUUb  [        U5      OSU[        U=(       d    0 R                  S5      =(       d    S5      R                  5       / S	.nXaU'   O_U(       aX  UR                  S
5      (       a0  [        U5      [        UR                  S
5      =(       d    S5      :  a  XvS
'   [        U5      US'   UR                  S5      (       dE  [        U=(       d    0 R                  S5      =(       d    S5      R                  5       nU(       a  XS'   [        U=(       d    0 R                  S5      =(       d    S5      R                  5       n	U	(       d  GM6  US   R                  U	[        U=(       d    0 R                  S5      =(       d    S5      [        U=(       d    0 R                  S5      =(       d    S5      [        U=(       d    0 R                  S5      =(       d    S5      R                  5       S.5        GM     [        UR                  5       S SS9n
U
 H  nUR                  S
S 5        M     U
$ )Norigemr!   DELIVERYr~   r   data_criacaor   	obs_geralr~   r   data
_data_sortr   itensr   r   produtor   
quantidadeprecoobs_itemr   r   r   r   c                     [        U R                  S5      =(       d    S5      [        U R                  S5      =(       d    S5      4$ Nr   r!   r~   r   r   r6   r   xs    r/   <lambda>4_agrupar_pedidos_historico_cliente.<locals>.<lambda>  0    s155.4"5s155;M;RQR7STr.   Tkeyreverse)
r   r6   stripupperr   r   floatsortedvaluespop)r   pedidosr   r   nror   bucketdata_refog	item_nomeorderedr   s               r/   "_agrupar_pedidos_historico_clienter      s]   GzrzciR__X.4"5;;=CCES39"//+.3!4!8mS!I2??>2[syboon6U[Y[>  )1)=H2& #)!=!CDJJLF "CLvzz,773x=3vzzZfOgOmkmKn;n#+<  ]F6Nzz+&&ciR__[17R8>>@B&({#	28b9??A	97O""("'(E(J"K"CI2??7#;#@qA #SYBOOJ$?$E2 F L L N	7 F TG
 	lD! Nr.   c                     / nS HH  n U R                  [        U5      U45        UR                  U R                  5       =(       d    / 5        MJ     [        X25      n[        U5      $ ! [         a     Mo  f = f)N)pedido_diariosr   )rg   r   extendr   r\   r   r   )rn   r@   r}   r   tbls        r/   &_historico_cliente_from_pedido_tabelasr     sn    D4	KK7<zmLKK,"- 5 2$AD-d33  		s   AA''
A54A5c                    U R                  SU45        U R                  5       =(       d    / n[        X25      n0 nU GH  n[        UR	                  S5      =(       d    S5      nUS::  a  M/  SU4nUR	                  U5      n	U	c  UR	                  S5      =(       db    UR	                  S5      =(       dJ    UR	                  S5      =(       d2    UR	                  S5      =(       d    UR	                  S	5      =(       d    S
n
USU
b  [        U
5      OS
U
[        UR	                  S5      =(       d    S
5      R                  5       / S.n	XU'   [        UR	                  S5      =(       d    S
5      R                  5       nU(       d  GMF  U	S   R                  U[        UR	                  S5      =(       d    S5      [        UR	                  S5      =(       d    S5      [        UR	                  S5      =(       d    S
5      R                  5       S.5        GM     [        UR                  5       S SS9nU H  nUR                  SS 5        M     U$ )Nz~
        SELECT *
        FROM liquidada
        WHERE id_cliente = %s
        ORDER BY chave DESC
        LIMIT 2000
        r~   r   LEGADOr   r   
datapedidodatahora
created_atr!   r   r   r   r   r   r   r   r   c                     [        U R                  S5      =(       d    S5      [        U R                  S5      =(       d    S5      4$ r   r   r   s    r/   r   3_historico_cliente_from_liquidada.<locals>.<lambda>K  r   r.   Tr   r   )rg   r   r   r   r6   r   r   r   r   r   r   r   )rn   r@   r}   all_rowsr   r   r   r   r   r   r   r   r   r   s                 r/   !_historico_cliente_from_liquidadar     s   KK	 
	 ||~#H1(EDG#''+&+!,!8oS!>' 776?77<( 77:& 77<(	
   !")1)=H2& !5!;<BBDF "CL	*0b1779	97O""("'(=(B"C"3777#3#8q9 #CGGJ$7$=2 > D D F	5 D TG
 	lD! Nr.   c                    U(       a  Uc  g[        5       nU Ho  n[        U=(       d    0 R                  S5      =(       d    S5      R                  5       nUR	                  5       (       d  MT   UR                  [        U5      5        Mq     0 nU(       a  [        U5      nSR                  S/[        U5      -  5      nU R                  SU S3U/UQ75        U R                  5       =(       d    /  HJ  n	U	(       d  M  [        U	R                  S5      =(       d    S5      U[        U	R                  S	5      5      '   ML     U Hx  nU(       d  M  [        UR                  S5      =(       d    S5      R                  5       nUR	                  5       (       a!   UR                  [        U5      S5      US
'   Ms  SUS
'   Mz     g! [        [        4 a     GM  f = f! [        [        4 a	    SUS
'    M  f = f)u   
Preenche descricao_produto sem JOIN na query principal (evita erro SQL com
codigoproduto não numérico, p.ex. AJUSTE_TECNICO, e diferenças de modo estrito).
Ncodigoprodutor!   ,%szcSELECT chave, IFNULL(descricao, '') AS descricao FROM produtos WHERE id_cliente = %s AND chave IN ()	descricaochavedescricao_produto)setr   r6   r   ru   addr   	TypeError
ValueErrorr   rW   lenrg   r   )
rn   r@   r   chaves_unicasrcpdesc_maplistaphprs
             r/   )_enriquecer_descricao_produto_pedido_rowsr   S  s   
 :%EM!'r/526<<>::<<!!#b'*	  H}%XXtfs5z)*qrtquuvw % 	
 ,,.&B&Br14RVVK5H5NB1ORVVG_-. ' '-2.446::<<,)1c"gr)B%& &(A!"  z* ( z* ,)+%&,s$   -F=G=GGG.-G.c                j   / SQn[        U=(       d    S5      R                  5       R                  5       [        U5      [        U=(       d    S5      [        U=(       d    S5      [        U=(       d    S5      [        U=(       d    S5      [        U=(       d    S5      [        U=(       d    S5      [        U=(       d    S5      [        U	=(       d    S5      [        U
=(       d    S5      [        U=(       d    S5      [	        U=(       d    S5      [	        U=(       d    S5      [        U=(       d    S5      [        U=(       d    S5      [        U=(       d    S5      [        U=(       d    S5      UU[        U=(       d    S5      [        U5      [        U=(       d    S5      Ub  [        U=(       d    S5      OS Ub  [        U=(       d    S5      OS [        U=(       d    S5      /nSR                  S/[        U5      -  5      nU R                  S	SR                  U5       S
U S3[        U5      5        g )N)r   r~   status_pedidostatus_comandar}   ceprA   endereconrocasacomplementor   r   r   r   r   
dados_itemr   classe
cod_classecod_usuarioclienter@   formapagamento
lancamentonrolancamento
entregadorr!   AGUARDENORMALr      , r   INSERT INTO pedido_diarios (
) VALUES (r   )	r   r   r   r   r   rW   r   rg   tuple)rn   r   r~   r@   r}   r   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   colsvalsr   s                                 r/    _insert_pedido_diarios_from_casar   z  s   <D: 	FLb!'')IM&Y'N&h'HNCI2DJBHNGMrK2MR GMrejqjoAHNJ"IOFLbGMrJN b! * 6JO!D#0#<MQ$J"5D8 
D6CI%	&BKK
&tyy&7z"QGdr.   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	                  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)Nz8SHOW COLUMNS FROM deliverypendente LIKE 'status_comanda'zGALTER TABLE deliverypendente ADD COLUMN status_comanda VARCHAR(20) NULLz[STATUS_COMANDA COLUNA ERRO]TrS   re   rl   s      r/   _ensure_status_comanda_columnr    s    D
CzkkmNO<<>!KKabKKM IIKJJL   =	 		,at<= IIKJJL H   AB 
CB65C6
C CCCC CC 1Dc                  x   S n S n [        5       n U R                  5       n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                  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)Na  
            CREATE TABLE IF NOT EXISTS pedido_diarios (
                chave INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                origem VARCHAR(20) NOT NULL,
                nropedido INT NOT NULL,
                status_pedido VARCHAR(20) NULL,
                status_comanda VARCHAR(30) NULL,
                telefone VARCHAR(30) NULL,
                cep VARCHAR(20) NULL,
                nome VARCHAR(255) NULL,
                endereco VARCHAR(255) NULL,
                nrocasa VARCHAR(40) NULL,
                complemento VARCHAR(120) NULL,
                referencia VARCHAR(255) NULL,
                bairro VARCHAR(120) NULL,
                cidade VARCHAR(120) NULL,
                estado VARCHAR(10) NULL,
                codigoproduto VARCHAR(80) NULL,
                produto VARCHAR(255) NOT NULL,
                preco DECIMAL(10,2) DEFAULT 0,
                quantidade DECIMAL(10,3) DEFAULT 1,
                obs_item TEXT NULL,
                dados_item TEXT NULL,
                obs_geral TEXT NULL,
                classe VARCHAR(120) NULL,
                cod_classe INT NULL,
                cod_usuario INT NULL,
                cliente VARCHAR(255) NULL,
                id_cliente INT NOT NULL,
                formapagamento VARCHAR(80) NULL,
                lancamento INT NULL,
                nrolancamento BIGINT NULL,
                data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                INDEX idx_pd_cliente_pedido (id_cliente, nropedido),
                INDEX idx_pd_origem_status (origem, status_pedido),
                INDEX idx_pd_status_comanda (status_comanda),
                INDEX idx_pd_codproduto (codigoproduto),
                INDEX idx_pd_lancamento (lancamento, nrolancamento)
            )
            3SHOW COLUMNS FROM pedido_diarios LIKE 'status_mesa'RALTER TABLE pedido_diarios ADD COLUMN status_mesa VARCHAR(20) NULL AFTER nropedidoz2SHOW COLUMNS FROM pedido_diarios LIKE 'entregador'zOALTER TABLE pedido_diarios ADD COLUMN entregador VARCHAR(150) NULL AFTER classez2SHOW COLUMNS FROM pedido_diarios LIKE 'dados_item'zIALTER TABLE pedido_diarios ADD COLUMN dados_item TEXT NULL AFTER obs_item7SHOW COLUMNS FROM pedido_diarios LIKE 'baixa_pagamento'TALTER TABLE pedido_diarios ADD COLUMN baixa_pagamento TEXT NULL AFTER formapagamentoz[PEDIDO_DIARIOS TABELA ERRO]TrS   re   rl   s      r/   _ensure_pedido_diarios_tabler	    sZ   D
CEzkkm')	
T 	IJ<<>!KKlmHI<<>!KKijHI<<>!KKcdMN<<>!KKno IIKJJL   =	 		,at<= IIKJJL sH   DD= =
FE F  
E-*F ,E--F ;F  FF 1F9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	                  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)N-SHOW COLUMNS FROM formapagamento LIKE 'troco'zTALTER TABLE formapagamento ADD COLUMN troco CHAR(1) NOT NULL DEFAULT 'N' AFTER formaz"[FORMAPAGAMENTO TROCO COLUNA ERRO]TrS   re   rl   s      r/   #_ensure_formapagamento_troco_columnr  8  s    D
CzkkmCD<<>!KKf 	 IIKJJL   C	 		2ATBC IIKJJL r  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	                  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)Nz8SHOW COLUMNS FROM pedido_diarios LIKE 'valor_pago_troco'z^ALTER TABLE pedido_diarios ADD COLUMN valor_pago_troco DECIMAL(12,2) NULL AFTER formapagamentoz&[PEDIDO_DIARIOS VALOR_PAGO_TROCO ERRO]TrS   re   rl   s      r/   '_ensure_pedido_diarios_valor_pago_trocor  R  s    D
CzkkmNO<<>!KKp 	 IIKJJL   G	 		6FG IIKJJL r  c                 (   U(       a  U=(       d    SR                  5       (       d  gU R                  S5        U R                  5       c  gU R                  SXR                  5       45        U R                  5       nU(       d  g[        U[        5      (       aD  [        UR                  S5      =(       d    S5      R                  5       R                  5       nUS;   $ [        US   =(       d    S5      R                  5       R                  5       nUS;   $ )z3True se cadastro da forma indica troco (S/SIM/1/Y).r!   Fr  z
        SELECT UPPER(TRIM(COALESCE(troco, ''))) AS t
        FROM formapagamento
        WHERE id_cliente = %s AND UPPER(TRIM(forma)) = UPPER(TRIM(%s))
        LIMIT 1
        tr   )SSIM1Y)r   rg   rh   
isinstancedictr   r6   r   )rn   r@   
nome_formar   r  s        r/   _forma_pagamento_exige_trocor  l  s    j.B5577KK?@
||~KK	 
%%'( ,,.C#t"#))+113 &&& A"##%++-&&&r.   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                  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 classificacao LIKE 'op_tamanhos'z:ALTER TABLE classificacao ADD COLUMN op_tamanhos TEXT NULLz0SHOW COLUMNS FROM classificacao LIKE 'op_massas'z8ALTER TABLE classificacao ADD COLUMN op_massas TEXT NULLz0SHOW COLUMNS FROM classificacao LIKE 'op_bordas'z8ALTER TABLE classificacao ADD COLUMN op_bordas TEXT NULLz4SHOW COLUMNS FROM classificacao LIKE 'op_coberturas'z<ALTER TABLE classificacao ADD COLUMN op_coberturas TEXT NULLz4SHOW COLUMNS FROM classificacao LIKE 'op_adicionais'z<ALTER TABLE classificacao ADD COLUMN op_adicionais TEXT NULLz#[CLASSIFICACAO OPCOES COLUNAS ERRO]TrS   re   rl   s      r/   $_ensure_classificacao_opcoes_columnsr    sm   D
CzkkmHI<<>!KKTUFG<<>!KKRSFG<<>!KKRSJK<<>!KKVWJK<<>!KKVW IIKJJL   D	 		3QdCD IIKJJL sH   D)E 
F'*FF"
FF"FF"F* "F''F* *1Gc                  (    [        5         [        5         [        5         [        5         [	        5         [        5         [        5         [        5         [        5         g ! [         a*  n [        SU SS9  [        R                  " 5          S n A g S n A ff = f)Nz[SCHEMA BOOTSTRAP ERRO]TrS   )rp   r  r	  r  r  r   r   r  _ensure_impressoras_tabler\   r]   	traceback	print_exc)ro   s    r/   bootstrap_schemar    si    %'$&+-/1$&,.!# '$7s   AA 
B' BBc                     S n S n [        5       n U R                  5       n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)Nz
            CREATE TABLE IF NOT EXISTS impressoras (
                id INT AUTO_INCREMENT PRIMARY KEY,
                nomedaimpressora VARCHAR(255) NOT NULL,
                imprenro TINYINT NOT NULL DEFAULT 0
            )
            z[IMPRESSORAS TABELA ERRO]TrS   )r   rf   rg   ri   r\   rj   r]   rk   rl   s      r/   r  r    s    D
Czkkm	
 	 IIKJJL   :	 		)1D9: IIKJJL sG   ;A1 1
B9<BB4
B!B4 B!!B4/B< 4B99B< <1C-z/api/casa/pedido-aguardec                     S n S n [         R                  " S5      nU(       d?  [        SSS.5      S4U(       a  UR                  5         U (       a  U R                  5         $ $ [        R
                  R                  S5      nSR                  S [        U=(       d    S5       5       5      nU(       d=  [        S	SS
.5      U(       a  UR                  5         U (       a  U R                  5         $ $ [        5       n U R                  S	S9n[        XU5      nU(       d=  [        S	SS
.5      U(       a  UR                  5         U (       a  U R                  5         $ $ [        S	S	[        U5      S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [         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)Nr@   F   Sessão inválida.sucessoerro  r}   r!   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   *api_casa_pedido_aguarde.<locals>.<genexpr>  s     N*=BRR*=r{   T)r$  
encontrado
dictionary)r$  r)  r~   z[CASA PEDIDO AGUARDE ERRO]rS     )r   r6   r   rk   r   argsrW   r   r   rf   r   r   r\   r]   r  r  )rm   rn   r@   r}   r   r~   ro   s          r/   api_casa_pedido_aguarder.    s    D
C[[.
u6JKLcQ  IIKJJL # <<##J/WWN#hn"*=NN
t5AB IIKJJL  zkkTk*:3JW	t5AB IIKJJL  4t#i.YZ IIKJJL   @*AT:5#a&9:C??IIKJJL @
 IIKJJL sB   ,F "AF /9F F 
H)8H!H"H HH 1Iz/api/casa/pedidos-aguardec                  >   Sn S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                  SS9nUR                  S	U45        UR                  5       =(       d    / n/ nU H  n[        U=(       d    0 R                  S
5      =(       d    S5      nU(       d  M8  U=(       d    0 R                  S5      =(       d    SnU=(       d    0 R                  S5      =(       d#    U=(       d    0 R                  S5      =(       d    SnUR                  UU[        U5      R                  5       [        U=(       d    0 R                  S5      =(       d    S5      S.5        M     [        SU[        U5      S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [         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)u[   Lista pedidos distintos ainda em AGUARDE (ex.: após novo número sem concluir o anterior).Nr@   Fr"  r#  r&  Tr*  aj  
            SELECT d.nropedido AS nropedido,
                   MAX(NULLIF(TRIM(d.telefone), '')) AS telefone,
                   MAX(NULLIF(TRIM(d.nome), '')) AS nome,
                   MAX(NULLIF(TRIM(d.cliente), '')) AS cliente,
                   COUNT(*) AS linhas
            FROM pedido_diarios d
            WHERE d.id_cliente = %s
              AND d.origem IN ('DELIVERY','BALCAO')
              AND UPPER(COALESCE(d.status_pedido, '')) = 'AGUARDE'
              AND UPPER(COALESCE(d.status_pedido, '')) <> 'ITEM_REMOVIDO'
            GROUP BY d.nropedido
            ORDER BY d.nropedido DESC
            r~   r   r}   r!   rA   r   linhas)r~   r}   rA   r0  )r$  r   totalz[CASA PEDIDOS AGUARDE ERRO]rS   r,  )r   r6   r   rk   r   rf   rg   r   r   r   r   r   r   r\   r]   r  r  )
rm   rn   r@   r   r   r   nptelrA   ro   s
             r/   api_casa_pedidos_aguarder4    s    D
C0[[.
u6JKLcQT IIKJJL W zkkTk* M	
" ||~#CciR__[16Q7B9"//*-3CI2??6*Nsybooi.HNBDNN!# #IOO-!39"//(";"@qA	  4Gc'lST IIKJJL   @+Qd;5#a&9:C??IIKJJL @
 IIKJJL s6   ,G, "EG, ,
I(68I#.I(/I+ #I((I+ +1Jz/api/casa/buscar-cepc            
         [         R                  R                  SS5      R                  5       n SR	                  S U  5       5      n[        U5      S:w  a  [        SSS.5      S4$  [        R                  " S	U S
3SSS0S9nUR                  S:w  a  [        SSS.5      S4$ UR                  5       nUR                  S5      (       a  [        SSS.5      S4$ [        SUSS  SUSS  3UR                  S5      =(       d    SUR                  S5      =(       d    SUR                  S5      =(       d    SUR                  S5      =(       d    S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) uV   Consulta ViaCEP e retorna campos de endereço para preenchimento automático no /casa.r   r!   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   &api_casa_buscar_cep.<locals>.<genexpr>3  s     >ggr{      Fu   CEP deve ter 8 dígitos.r#    zhttps://viacep.com.br/ws/z/json/   
User-Agentznovaloja-cep/1.0timeoutr5      u   CEP não encontrado.  r%  TN   -
logradourobairro
localidadeuf)r$  r   rB  rC  cidadeestadoz[BUSCAR CEP ERRO]rS   zFalha ao consultar CEP.r,  )r   r-  r6   r   rW   r   r   requestsstatus_codejsonr\   r]   )cep_raw
cep_digitsr   r   ro   s        r/   api_casa_buscar_ceprM  .  s    llub)//1G>g>>J
:!52LMNPSSSSLL'
|6:!#56

 ==Cu6LMNPSSSvvx88Fu6LMNPSSS !n%Qz!"~&67((<06Bhhx(.Bhh|,2hhtn*
  	  S!1D152KLMsRRSs+   ';E #5E A<E 
F F :F Fz/api/casa/itemPOSTc                  2"  ^5 S n S n [         R                  " SS9=(       d    0 nUR                  S5      nUR                  S5      =(       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U(       d?  [	        SSS	.5      S4U(       a  UR                  5         U (       a  U R                  5         $ $ [        5       n  U R                  5         U R                  SS9n[        UR                  S5      =(       d    S5      R                  5       R                  5       nUR                  S5      =(       d    SR                  5       nUR                  5       n	US;   a  Un
O4U	R                  S5      (       a  Sn
OU	R                  S5      (       a  Sn
OSn
Sn Ub(  [        U5      R                  5       S:w  a  [        U5      OSnU
S;   a:  US:  a4  UR                  S[        U5      U45        UR!                  5       (       d  SnU
S:X  aF  U(       d?  [	        SSS	.5      S
4U(       a  UR                  5         U (       a  U R                  5         $ $ U
S:X  a{  U(       df  UR                  SU45        UR!                  5       nU(       a'  [        US   5      S-   nUR                  SX45        UnOUR                  SU45        SnS[        U5       3nU
S:X  Ga  SR#                  S [        U=(       d    S5       5       5      nU(       d?  [	        SSS	.5      S
4U(       a  UR                  5         U (       a  U R                  5         $ $ [%        XU5      nU(       d  [%        XU5      nU(       a  [        U5      nOmU(       df  UR                  SU45        UR!                  5       nU(       a'  [        US   5      S-   nUR                  SX45        UnOUR                  SU45        SnS nUR                  S!U S"3[        U5      U45        UR'                  5       =(       d    / nSnU H;  nU=(       d    0 R                  S5      nU(       d  M&  [)        UU5      (       a  M9  Sn  O   U(       a_  [%        XU5      nU(       a  [        U5      nO@[	        SS#S$S%.5      S&4U(       a  UR                  5         U (       a  U R                  5         $ $ U(       a  [        U5      OUnUR                  S'[        U5      U45        UR!                  5       (       a?  [	        SS(S	.5      S&4U(       a  UR                  5         U (       a  U R                  5         $ $ [+        UR                  S)5      5      n[-        UR                  S*5      [.        5      (       a  UR                  S*5      O/ n[        UR                  S+5      =(       d    S5      R                  5       R1                  5       nS n[        UR                  S,5      =(       d    S5      R                  5       nU(       aa  UR                  S-UU45        UR!                  5       =(       d    0 nUR                  S.5      nUc   UR3                  5       (       a  [        U5      nS n[        R                  " S/5      nUb   [        U5      nUc{  [        [        R                  " S05      =(       d    S5      R                  5       nU(       a>  UR                  S1UU45        UR!                  5       =(       d    0 nUR                  S.5      n[+        UR                  S25      5      n S3n!U(       Ga  [5        U5      S4:  Ga  [7        S[5        U5      5      n"UR                  S5U[        U5      U
45        UR!                  5       =(       d    0 n#[        U#R                  S65      =(       d    S5      n$U$S-   n%U%S7:  a  Sn%U V&s/ s H/  n&[9        U&=(       d    0 R                  S85      =(       d    S5      PM1     sn&m5T5(       a   [7        [;        [5        T55      5      U54S9 jS:9OSn'T5(       a  [7        T55      O"[9        UR                  S85      =(       d    S5      n(S n)[=        U5       GH0  u  n*n+[        U+=(       d    0 R                  S5      =(       d    U5      R                  5       =(       d    Un,U"S4:  a	  S;U" S<U, 3n-OU,n-[        U+=(       d    0 R                  S=5      =(       d    UR                  S=5      =(       d    S5      n.[        U+=(       d    0 R                  S>5      =(       d    S5      R                  5       n/U+=(       d    0 R                  S?5      n0U0c  UR                  S?5      n0S@n1U*U':X  a  [9        U(5      n1[?        U40 SAU
_SU_SU_SU_SBUR                  SB5      =(       d    SR                  5       _SUR                  S5      =(       d    SR                  5       _SCUR                  SC5      =(       d    SR                  5       _SDUR                  SD5      =(       d    SR                  5       _SEUR                  SE5      =(       d    SR                  5       _S=U._SFU-_S8U1_SG[9        UR                  SH5      =(       d    S5      _S,[        UR                  S,5      =(       d    S5      _S>U/_S?U0_SI[        UR                  SI5      =(       d    S5      _SJUR                  SJ5      =(       d    UR                  S5      =(       d    SR                  5       _SKU_SLU_SMU!=(       d    S3_SNU!SO:X  a  SPOSQ_SRU%_SSS _ST[        UR                  ST5      =(       d    S5      _SU[        UR                  SU5      =(       d    S5      _6  UR@                  n)GM3     U RC                  5         [	        SU)[        U5      U%SUSV.5      U(       a  UR                  5         U (       a  U R                  5         $ $ UR                  SWU[        U5      U
45        UR!                  5       =(       d    0 n#[        U#R                  S65      =(       d    S5      S-   n2U2S7:  a  Sn2[?        U40 SAU
_SU_SU_SU_SBUR                  SB5      =(       d    SR                  5       _SUR                  S5      =(       d    SR                  5       _SCUR                  SC5      =(       d    SR                  5       _SDUR                  SD5      =(       d    SR                  5       _SEUR                  SE5      =(       d    SR                  5       _S=[        UR                  S=5      =(       d    S5      _SFU_S8[9        UR                  S85      =(       d    S5      _SG[9        UR                  SH5      =(       d    S5      _S,[        UR                  S,5      =(       d    S5      _S>[        UR                  S>5      =(       d    S5      _S?UR                  S?5      _SI[        UR                  SI5      =(       d    S5      _SJUR                  SJ5      =(       d    UR                  S5      =(       d    SR                  5       _SKU_SLU_SMU!=(       d    S3_SNU!SO:X  a  SPOSQ_SRU2_SSS _ST[        UR                  ST5      =(       d    S5      _SU[        UR                  SU5      =(       d    S5      _6  UR@                  n3U (       a  UR                  SX[        U5      U45        U RC                  5         [	        SU3[        U5      SY.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [         a     GNf = f! [         a    Sn GNf = f! [         a    S n G	N f = fs  sn&f ! [         a  n4U (       a  U RE                  5         [G        SZU4SS[9   [G        S\W 3SS[9  [G        S][        R                  " S5       3SS[9  O! [         a     Of = f[H        RJ                  " 5         [	        S[        U45      S	.5      S^4s S n4A4U(       a  UR                  5         U (       a  U R                  5         $ $ S n4A4ff = f! U(       a  UR                  5         U (       a  U R                  5         f f = f)_NTsilentr~   itemrA   r!   Fu   Nome do item é obrigatórior#  r9  r@   uE   Sessão inválida: id_cliente não encontrado. Faça login novamente.r&  r*  modor}   )r   BALCAOMESArT  rU  r   r   r   rT  z
                SELECT 1
                FROM pedido_diarios
                WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
                LIMIT 1
                u   nropedido é obrigatóriozDSELECT contador FROM contadorpedido WHERE id_cliente = %s FOR UPDATEcontadorr   =UPDATE contadorpedido SET contador = %s WHERE id_cliente = %s@INSERT INTO contadorpedido (contador, id_cliente) VALUES (1, %s)c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   $api_casa_add_item.<locals>.<genexpr>  s     %W3FR**,bb3Fr{   u!   Telefone inválido para Delivery.z AND origem = 'DELIVERY'  AND UPPER(COALESCE(status_pedido, '')) = 'AGUARDE'  AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO' z
                SELECT DISTINCT telefone
                FROM pedido_diarios
                WHERE nropedido = %s AND id_cliente = %s
                z
                z;Pedido atual pertence a outro telefone. Localize novamente.CONFLITO_TELEFONE_PEDIDO)r$  r%  codigo     
            SELECT 1
            FROM pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
              AND UPPER(TRIM(COALESCE(status_pedido,''))) IN ('RECEBIDO','ROTA')
            LIMIT 1
            D   Pedido em ROTA ou já RECEBIDO não pode ser alterado na tela /casa.
fracionadopartesformadecobrarr   z
                SELECT chave
                FROM classificacao
                WHERE nomeclassificacao = %s AND id_cliente = %s
                LIMIT 1
                r   
id_usuariousuario_logado
                    SELECT chave
                    FROM usuarios
                    WHERE usuario = %s AND id_cliente = %s
                    LIMIT 1
                    em_recuperacaor      z
                SELECT COALESCE(MAX(lancamento), 0) AS max_lancamento
                FROM pedido_diarios
                WHERE id_cliente = %s AND nropedido = %s AND origem = %s
                max_lancamentor   c                    > TU    $ rs   r-   )iprecoss    r/   r   #api_casa_add_item.<locals>.<lambda>  s	    fQir.   r   z1/rN   r   r   r           r   r   r   r   r   r   r   qtdr   r   r   r   r   r   ABERTO
MODIFICADAr   r   r   r   r   )r$  idr~   r   ra  rc  
            SELECT COALESCE(MAX(lancamento), 0) AS max_lancamento
            FROM pedido_diarios
            WHERE id_cliente = %s AND nropedido = %s AND origem = %s
            z
                UPDATE pedido_diarios
                SET status_comanda = 'MODIFICADA'
                WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
                )r$  rt  r~   z[CASA ADD ITEM ERRO]rS   z[CASA ADD ITEM ERRO] payload=z'[CASA ADD ITEM ERRO] id_cliente_sessao=r,  )&r   get_jsonr6   r   r   rk   r   r   start_transactionr\   rf   r   r   
startswithr   rg   rh   rW   r   r   r   boolr  listlowerru   r   maxr   range	enumerater   	lastrowidri   rj   r]   r  r  )6rm   rn   r   r~   rR  rA   r@   modo_payloadr}   telefone_upperr   nropedido_intresultado_cntnovo_numerotelefone_digitspedido_aguardestatus_clausetelefones_pedidoconflito_telefoner   tel_existentepedido_aguarde_telra  rb  rc  r   classe_nomerow_clsr   id_usuario_sessaore  row_usrrg  status_pedido_insertqtd_escolhidarow_maxri  r   p	maior_idx
preco_base
last_pd_idrl  parte
nome_partenome_parte_db	cod_parte	obs_partedados_partepreco_partelancamento_simplesnovo_idro   rm  s6                                                        @r/   api_casa_add_itemr  N  sf    D
Cut,2HH[)	xx%2 &B--/u6TUVX[[X	 IIKJJL Y	 [[.
u6}~  BE  EP	 IIKJJL S	 z	""$ kkTk*488F+1r288:@@BHHZ(.B557!)99!F&&x00F&&v..FF	.7.CIH\H\H^bdHdC	NjkM ++0AKK ]#Z0 <<>> !VMu6QRSUXXH IIKJJL K X beodqr # "%mJ&?"@1"DKKK _bmaz{$/MKK beodqr$%MM 234HZ gg%W3x~23F%WWO"5:]^_addh IIKJJL k DCUdeN!!GYa!b #N 3"beodqr # "%mJ&?"@1"DKKK _bmaz{$/MKK beodqr$%MN 
 KK   	 ]#Z0  #||~3 %'!$
 ;$-m_MM(,% ( !%KC]l%m"%$'(:$;M"#( ]"<$  	P IIKJJL K +8C&]	 ^Z(		
 <<>>u6|}~  AD  Dl IIKJJL m $((<01
'1$((82Dd'K'K(#QSDHH_5;<BBDJJL
$((8,2399;KK j) lln*G W-J!k&9&9&;&; -
#KK5(#!"34  -=!>!D"EKKMN $Z0 ,,..B%kk'2dhh'789  )#f+*3v;/MKK
 S^V4 lln*G '++.>"?"D1FN'!+JJ&
BHI&QeQW"MM'27a8&IFLRE#f+.4GHXYI(.VE$((7:K:Pq4QJJ%f-5 %+2!2!26!:!BdCIIKSt
 A%&(q$EM$.M" 1 1/ B edhhF_ ecef	" 1 1* = CDJJL	${//=&"&((<"8K!	>"'
"3K0! (  *	
 & %.B557 ((6*0b779 #hhz28b??A "XXi06B==? "&-!8!>B E E G #, * &  %TXXe_%9: txx17R8  '!"  +#$ "$((;"7"=2>%& "XXi0JDHHV4DJQQS'(  *)* !,+, $8#D9-. 5IH4TLZb/0  *12 #'34 $'txx0@'A'GR#H56  #488L#9#?R@7: !]]
W .X KKMt:CPYNjt  EI  \i  j  kH IIKJJL I 	
 Y0	
 ,,.&B '++.>"?"D1FJ
*!"(	
	
  	
 "		

 	
 %&B--/	
 ((6"(b//1	
 hhz*0b779	
 XXi(.B557	
 -06B==?	
 dhh7=2>	
 	
 ).Q/	
 TXXe_12	
 txx)/R0	
  *-34!	
" xx-#	
$ $((;/526%	
& XXi(BDHHV,<BIIK'	
( ")	
* $+	
, 0<9-	
. -AH,LLRZ/	
0 *1	
2 3	
4 txx(89?R@5	
6 488L17R87	
: --KK
 Y, 	4wS^TU IIKJJL M	  		"  	M	r  #"#J JR  
@MMO$at4	1$8E;GKK<U;VW_cd 		5#a&9:C??IIKJJL 
@ IIKJJL s8  BA@ =,A@ 
A@ $ 4CA@ :-$ 'AA@ 3CA@ +DA@ <A@ /AA@ 4EA@ ;7 D2A@ 86A@
.OA@ +L8A@ 
!A@  !!A@ $40A@ 344A@ 7A@@A@ @A@@A@ @
AC"@"AC@<.AA+A*ACA+
AA8A5ACA7AA8A80ACB(AC"B)AC% CAC"C"AC% C%1ADz/api/casa/<int:nropedido>c                 \   S nS n [         R                  " S5      nUc?  [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [	        [
        R                  R                  S5      =(       d    S5      R                  5       R                  5       n[	        [
        R                  R                  S5      =(       d    S	5      R                  5       R                  5       nS	R                  S
 [	        [
        R                  R                  S5      =(       d    S	5       5       5      n[        5       nUR                  SSS9nUS:H  nUS:H  nUS;   n	[	        [
        R                  R                  S5      =(       d    S	5      R                  5       R                  5       n
U(       aE  U(       d>  [        S/ S	S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ SnU	(       a
  US:X  a  SOSnUnU(       a	  US:w  a  SnOU(       a  SnO	U	(       a  SnS	nSnXU/nSnU(       a  SnX/nU
S;   a  SnXU
/nU(       a  U(       a  SnOSnUR                  U5        UR                  SU SU SU S 3[        U5      5        UR!                  5       =(       d    / nU(       a  / nU H  nS	R                  S! [	        UR                  S5      =(       d    S	5       5       5      nU(       d  ME  UU:X  d.  UR#                  U5      (       d  UR#                  U5      (       d  My  UR                  U5        M     Un[%        X#U5        U Vs/ s H  n['        U5      PM     nnS	nS	nS nU(       a  US"   R                  S#5      =(       d    S	R                  5       n[	        US"   R                  S$5      =(       d    S	5      R                  5       nUS"   R                  S%5      nUb)  [	        U5      R                  5       S	:w  a   [)        U5      n0 nS	nU(       a  US"   n[	        UR                  S5      =(       d    S	5      R                  5       R                  5       nUR                  S5      =(       d    S	UR                  S&5      =(       d    S	UR                  S'5      =(       d    S	UR                  S(5      =(       d    S	UR                  S)5      =(       d    S	S	S	S	S	UR                  S*5      =(       d    S	S+.
nGOcU(       Ga[  U
S;   a  UR                  S,XU
45        OUR                  S-X45        UR/                  5       =(       d    0 n[	        UR                  S5      =(       d    S	5      R                  5       R                  5       nU(       a  [	        UR                  S#5      =(       d    S	5      R                  5       nUR                  S5      =(       d    S	UR                  S&5      =(       d    S	UR                  S'5      =(       d    S	UR                  S(5      =(       d    S	UR                  S)5      =(       d    S	S	S	S	S	UR                  S*5      =(       d    S	S+.
nS.nU(       a/  U
S;   a  UR                  S/XU
45        O(UR                  S0X45        OUR                  S1XU45        UR/                  5       =(       d    0 n[	        U=(       d    0 R                  S25      =(       d    S.5      R                  5       R                  5       =(       d    S.nSn  UR                  S3[1        U 5      U45        UR/                  5       S Ln [        SUUUUUUU=(       d    UU S4.	5      U(       a  UR                  5         U(       a  UR                  5         $ $ s  snf ! [*        [,        4 a    S n GNf = f! [2         a    Sn  Nyf = f! [2         Ga  n![5        S5U!SS69  [6        R8                  " 5         [6        R:                  " 5       n" S7R                  S8U < 3S9[         R                  " S5      < 3S:[=        [
        R                  5      < 3[?        U!5      R@                   S;U!< 3U"/5      n#[C        S<U#5        O! [2         a     Of = f[        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)>Nr@   Fu5   Sessão sem loja (id_cliente). Faça login novamente.r#  r&  rS  deliverystatusr!   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   (api_casa_listar_itens.<locals>.<genexpr>  s     d,SbWaWaWcrr,Sr{   r}   T)r+  bufferedrecuperacao)balcaomesar   )r$  	registrosr   r   r  rT  rU  rr  r   z AND d.origem = %s z= AND UPPER(COALESCE(d.status_pedido, '')) <> 'ITEM_REMOVIDO' z' AND d.origem IN ('DELIVERY','BALCAO') rV  zK AND UPPER(COALESCE(d.status_pedido, '')) IN ('ABERTO','ABERTA','AGUARDE') z/ AND UPPER(COALESCE(d.status_pedido, '')) = %s a/  
            SELECT d.chave AS chave, d.nropedido, d.produto, d.preco, d.quantidade, d.codigoproduto, d.classe, d.obs_item, d.dados_item, d.obs_geral,
                   '' AS descricao_produto, d.telefone, d.origem,
                   d.nome, d.endereco, d.nrocasa, d.complemento, d.cep,
                   COALESCE(d.lancamento, 0) AS lancamento,
                   COALESCE(d.formapagamento, '') AS formapagamento,
                   d.valor_pago_troco
            FROM pedido_diarios d
            WHERE d.nropedido = %s AND d.id_cliente = %s
            
            z/
            ORDER BY d.chave DESC
            c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   r    s      ].LPZPZP\.Lr{   r   r   r   valor_pago_trocorA   r   r   r   r   )
r}   rA   r   r   r   
referenciarC  rF  rG  r   a&  
                    SELECT d.telefone, d.nome, d.endereco, d.nrocasa, d.complemento, d.cep,
                           UPPER(COALESCE(d.origem, '')) AS origem,
                           UPPER(COALESCE(d.status_comanda, 'NORMAL')) AS st_comanda,
                           COALESCE(d.obs_geral, '') AS obs_geral
                    FROM pedido_diarios d
                    WHERE d.nropedido = %s AND d.id_cliente = %s
                      AND d.origem = %s
                    ORDER BY d.chave DESC
                    LIMIT 1
                    a:  
                    SELECT d.telefone, d.nome, d.endereco, d.nrocasa, d.complemento, d.cep,
                           UPPER(COALESCE(d.origem, '')) AS origem,
                           UPPER(COALESCE(d.status_comanda, 'NORMAL')) AS st_comanda,
                           COALESCE(d.obs_geral, '') AS obs_geral
                    FROM pedido_diarios d
                    WHERE d.nropedido = %s AND d.id_cliente = %s
                      AND d.origem IN ('DELIVERY','BALCAO')
                    ORDER BY d.chave DESC
                    LIMIT 1
                    r   a  
                    SELECT UPPER(COALESCE(status_comanda, 'NORMAL')) AS st
                    FROM pedido_diarios
                    WHERE nropedido = %s AND id_cliente = %s AND origem = %s
                    ORDER BY chave DESC
                    LIMIT 1
                    a-  
                    SELECT UPPER(COALESCE(status_comanda, 'NORMAL')) AS st
                    FROM pedido_diarios
                    WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
                    ORDER BY chave DESC
                    LIMIT 1
                    a  
                SELECT UPPER(COALESCE(status_comanda, 'NORMAL')) AS st
                FROM pedido_diarios
                WHERE nropedido = %s AND id_cliente = %s AND origem = %s
                ORDER BY chave DESC
                LIMIT 1
                sta  
                SELECT 1
                FROM pedido_diarios
                WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
                  AND UPPER(TRIM(COALESCE(status_pedido, ''))) IN ('RECEBIDO','ROTA')
                LIMIT 1
                )	r$  r  r   r   r  r   r   r   pedido_bloqueado_casaz[CASA LISTA ERRO]rS   rL   z
nropedido=zid_cliente_session=zrequest.args=: z[api_casa_listar_itens]r,  )"r   r6   r   rk   r   r   r-  r   r{  r   rW   r   rf   r   rg   r   r   r   r   convert_typesr   r   r   rh   r   r\   r]   r  r  
format_excr  type__name__rc   )$r~   rm   rn   r@   rS  
status_reqtelefone_reqmodo_is_deliverymodo_is_recuperacaomodo_is_balcao_ou_mesa
origem_req	origem_dbstatus_finalr  origem_clauseparamsstatus_removido_clauseregs	filtradosr   r   r   r   
forma_headvalor_pago_troco_headvrawcliente_dataorigem_encontradabasebase_anyr   row_scr  ro   tbctxs$                                       r/   api_casa_listar_itensr    s    D
Cr[[.
u6mnoqttX IIKJJL [ 7<<##F+9z:@@BHHJ))(39r:@@BHHJ
wwdC0@0@0L0RPR,SddzkkTDk9:-"m3!%);!;))(39r:@@BHHJ
 Lt"2NO~ IIKJJL  	!$(H$4&I!x''$L#$L-3!`EM,F33 5#<" m Ql+	 O O #$ % &M	
" ||~#I ]c#''*2E2K.L ]]\)V__\-J-JlNcNcdjNkNk$$S)  D1#4H*./$Qa $/	
 $a[17R>>@IT!W[[)9:@bAGGIJ7;;12DCIOO$5$;1,1$K) 7D #DHHX$6$<" = C C E K K M!XXj17R&)/R!XXj17R HHY/52 $ 7 =2 -2L !33
 J7 
 + ||~+H #HLL$:$@b A G G I O O Q[ 9 ?R@FFH	!)j!9!?R%\\&17R!)j!9!?R (Y 7 =2$,LL$?$E2"$   $LL/52  "33 J7	  +	 KK 	2	 %2fl//5ABHHJPPR^V^ %	*KK Y,	 %(LLN$$>! "( 5#,'49%:

 
< IIKJJL I 0 ":. 1,0)1l  	*$)!	*  @!1D1!!#	)) .)'++l*C)FG#D$6#9:Aw''(1%0C "";SA 		5#a&9:C??IIKJJL +@& IIKJJL s   (_! E3_! D<_! '_! (^1=B"_!  ^6 +L	_! 5/_ $_! 1_! 6__! __! __! __! !c7,5c2"A2bc2
b"c2!b""c2=c7>c: 2c77c: :1d+z,/api/casa/<int:nropedido>/item/<int:item_id>PATCHc                    S nS n [         R                  " SS9=(       d    0 nUR                  SS 5      nUR                  SS 5      nUR                  SS 5      nUcE  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       nUR                  5       nUR                  SX45        UR                  5       (       a?  [        SSS.5      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ / 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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)NTrP  rq  r   r   FNada para atualizarr#  r9  r@   r_  r`  r^  r   "Quantidade deve ser maior que zeroquantidade = %sobs_item = %sdados_item = %szUPDATE pedido_diarios SET r   z\ WHERE chave = %s AND nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')   Item não encontrador?  r$  z[CASA PATCH ITEM ERRO]rS   r,  r   rv  r6   r   rk   r   r   rf   rg   rh   r   r   r   r   r   rW   ri   rowcountr\   rj   r]   r  r  )r~   item_idrm   rn   r   qtd_rawr   r   r@   	set_partsr  rq  ro   s                r/   api_casa_alterar_itemr    s4    D
C7t,2((5$'88J-XXlD1
?x/J4Fu6KLMsR\ IIKJJL _ [[.
zkkm #		
 <<>>u6|}~  AD  D> IIKJJL A 	1%Cax5:^_`bee2 IIKJJL 5 ./MM#_-MM#h---/0!./MM#j///12w:67(9)=(>  ?[  \	
 	<<1u6LMNPSS IIKJJL  	4() IIKJJL   @MMO&65#a&9:C??IIKJJL @ IIKJJL sK   A+L !A'L 80L DL 	L 
NANNN NN 1O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       nUR                  5       nUR                  SX45        UR                  5       (       a?  [        SSS	.5      S
4U(       a  UR                  5         U(       a  UR                  5         $ $ 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)NTrP  r   r!   r@   r_  Fr`  r#  r^  zuUPDATE pedido_diarios SET obs_geral = %s WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')r$  z[CASA OBS GERAL ERRO]rS   r,  )r   rv  r6   r   r   r   rf   rg   rh   r   rk   ri   r\   rj   r]   r  r  r   )r~   rm   rn   r   r   r@   ro   s          r/   api_casa_obs_geralr    s    D
C"t,2XXk*0b779	[[.
zkkm #		
 <<>>u6|}~  AD  D IIKJJL  	 D:.	
 		4() IIKJJL   @MMO%q55#a&9:C??IIKJJL @ IIKJJL s7   B,E "0E 
GAGGG GG 1H	DELETEc                    S nS n [         R                  " S5      n[        5       nUR                  5       nUR	                  SX45        UR                  5       (       a?  [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR	                  SXU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S
   =(       d    S
5      n[        US   =(       d    S5      R                  5       n[        US   =(       d    S5      R                  5       =(       d    SnUS
:  a  UR	                  SXX45        OUR	                  SXXH4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  [         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)Nr@   r_  Fr`  r#  r^  ab  
            SELECT COALESCE(lancamento, 0) AS lancamento,
                   UPPER(COALESCE(status_pedido,'')) AS status_pedido,
                   UPPER(COALESCE(origem,'')) AS origem
            FROM pedido_diarios
            WHERE chave = %s AND nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
            LIMIT 1
            r  r?  r   r   r!   rh  r   z
                UPDATE pedido_diarios
                SET status_pedido = 'ITEM_REMOVIDO'
                WHERE nropedido = %s AND id_cliente = %s AND origem = %s AND lancamento = %s
                z
                UPDATE pedido_diarios
                SET status_pedido = 'ITEM_REMOVIDO'
                WHERE chave = %s AND nropedido = %s AND id_cliente = %s AND origem = %s
                Tr$  	removidosz[CASA DELETE ITEM ERRO]rS   r,  )r   r6   r   rf   rg   rh   r   rk   r   r   r   r  ri   r\   rj   r]   r  r  )r~   r  rm   rn   r@   r   r   status_pedido_alvoorigem_alvoremovidos_pdro   s              r/   api_casa_remover_itemr    sV    D
CA[[.
zkkm #		
 <<>>u6|}~  AD  D^ IIKJJL a 	 ,
	
 llnu6LMNPSSB IIKJJL E Q1%
 Q2.446#a&,B'--/=:>KK
 @ KK
 Z= ||4lCD IIKJJL   @MMO'$75#a&9:C??IIKJJL @ IIKJJL s>   A'G9 :G9 CG9 9
JAJJJ JJ 1K c                    S nS n [         R                  " S5      n[        5       nUR                  5       nUR	                  SX45        UR                  5       (       a?  [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR	                  SX4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  [        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)Nr@   r_  Fr`  r#  r^  z
            UPDATE pedido_diarios
            SET status_pedido = 'ITEM_REMOVIDO'
            WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
            Tr  z[CASA LIMPAR PEDIDO ERRO]rS   r,  )r   r6   r   rf   rg   rh   r   rk   r  ri   r\   rj   r]   r  r  r   )r~   rm   rn   r@   r  ro   s         r/   api_casa_limpar_pedidor  6  s}    D
C%[[.
zkkm #		
 <<>>u6|}~  AD  D& IIKJJL ) 	
 #	
 ||4lCD IIKJJL   @MMO)1D95#a&9:C??IIKJJL @ IIKJJL s7   A'D	 <D	 	
FAF"F#F FF 1Gz(/api/casa/<int:nropedido>/formapagamentoc                 
   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UR                  S
S 5      nS nUbP  [        U5      R                  5       S:w  a3   [        [        U5      R                  5       R                  SS5      5      n[        5       nUR                  5       n[        5         UR                  SX45        UR!                  5       (       a?  [	        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       =(       d    Sn[        U(       a  US   OS=(       d    S5      n	[#        X%U5      n
S nU
(       a  Uc?  [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ US-   U	:  a?  [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UnSnUR                  SU S3X45        UR!                  5       =(       d    Sn[%        U(       a  US   OS=(       d    S5      nUS::  a  UR                  SX45        UR!                  5       =(       d    Sn[%        U(       a  US   OS=(       d    S5      nUS:  a  SnO[UR                  SX45        UR!                  5       =(       d    Sn[%        U(       a  US   OS=(       d    S5      nUS:  a  SnOSU  S 3n[	        SUS.5      S!4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  S"U S3XKX45        UR'                  5         [	        SS#S$.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        [        4 aB    [	        SSS.5      S4s U(       a  UR                  5         U(       a  UR                  5         $ $ f = f! [(         a  nU(       a  UR+                  5         [-        S%USS&9  [.        R0                  " 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)(NTrP  formar!   Fu"   Forma de pagamento é obrigatóriar#  r9  r@   r  r   .u   Valor pago inválido.r_  r`  r^  a-  
            SELECT COALESCE(SUM(COALESCE(preco, 0) * COALESCE(quantidade, 0)), 0) AS tot
            FROM pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
              AND UPPER(TRIM(COALESCE(status_pedido, ''))) <> 'ITEM_REMOVIDO'
            r-   r   zGInforme com quanto o cliente vai pagar (valor maior ou igual ao total).gư>z6Valor pago deve ser maior ou igual ao total do pedido.zA AND UPPER(TRIM(COALESCE(status_pedido, ''))) <> 'ITEM_REMOVIDO' z
            SELECT COUNT(*) FROM pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
            r  )r   z
                SELECT COUNT(*) FROM pedido_diarios
                WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
                u^   Não há itens ativos neste pedido (itens removidos). Adicione itens ou abra o pedido correto.zLSELECT COUNT(*) FROM pedido_diarios WHERE nropedido = %s AND id_cliente = %sux   Pedido encontrado com outra origem (ex.: mesa). Na /casa só é possível definir pagamento em pedidos delivery/balcão.zPedido #um    não encontrado para esta loja ou ainda sem linhas em pedido_diarios. Recarregue a tela e confira o número.r?  a  
            UPDATE pedido_diarios
            SET formapagamento = %s,
                valor_pago_troco = CASE WHEN origem = 'DELIVERY' THEN %s ELSE NULL END
            WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
            zForma de pagamento atualizadar$  mensagemz[CASA FORMAPAGAMENTO ERRO]rS   r,  )r   rv  r6   r   r   rk   r   r   r   replacer   r   r   rf   r  rg   rh   r  r   ri   r\   rj   r]   r  r  )r~   rm   rn   r   r  r@   raw_vp	valor_reqrow_tottotal_pedidoexigevalor_para_deliverywc_ativorow_nn_ativosrow_g
n_qualquermsgrow_an_outra_origemro   s                        r/   api_casa_formapagamentor  b  s    D
Crt,2'"(b//1u6Z[\^aaV IIKJJL Y [[.
,d3	#f+"3"3"5";Y!#f+"3"3"5"="=c3"GH	 zkkm/1 #		
 <<>>u6|}~  AD  Dh IIKJJL k 	 #	
 ,,.&BGgaj@qA,SeD"  %/xyH IIKJJL G 4,. %/gh@ IIKJJL  #,V J 
 #	
 &$Eaq6Q7q=KK ' LLN*dE%eAhQ<1=JA~vb+ .$!$%eAhQ%D1!E!A%c  #9+ .h h  uc:;S@( IIKJJL + 	
 J  ?		
 	45TUV IIKJJL M z* Y5:QRSUXXXF IIKJJL MYz  @MMO*AT:5#a&9:C??IIKJJL @ IIKJJL sw   AR A
R 2P2 AR A3R <R DR 5R 2 RR RR 
TAT T!T TT 1Uz%/api/casa/<int:nropedido>/ajuste-itemc           
      .   S nS n [         R                  " SS9=(       d    0 n[        UR                  S5      =(       d    S5      nUS:X  a?  [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        R                  " S	5      n[        5       nUR                  SS
9nUR                  SX45        UR                  5       (       a?  [	        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       nU(       d?  [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ S nUR                  S5      nUc?  [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ S n[        R                  " S5      n	U	b   [        U	5      nUcz  [        [        R                  " S5      =(       d    S5      R                  5       n
U
(       a=  UR                  SX45        UR                  5       =(       d    0 nUR                  S5      nUc?  [	        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        UR                  S5      =(       d    S5      R                  5       S:X  a  SOSnUS:  a  SOSnSn[        UR                  S5      =(       d    S5      R                  5       R                  5       =(       dI    [        UR                  S 5      =(       d    S5      R                  5       R!                  S!5      (       a  S!OS"nUR                  S#[        U 5      X^U45        UR                  S$U[        U 5      U45        UR                  5       =(       d    0 n[        UR                  S%5      =(       d    S5      S&-   nUS':  a  S&n[#        U40 SU_S(U _S	U_S [        UR                  S 5      =(       d    S5      _S)[        UR                  S)5      =(       d    S5      _S*[        UR                  S*5      =(       d    S5      _S+[        UR                  S+5      =(       d    S5      _S,[        UR                  S,5      =(       d    S5      _S-[        UR                  S-5      =(       d    S5      _S.U_S/U_S0[        U5      _S1S2_S3S_S4[        UR                  S55      =(       d    S5      R                  5       _S6S_S7S_S8[        UR                  S85      =(       d    UR                  S*5      =(       d    S5      _SU_S9U_SU_S:S;_S<U_S=S _S>[        UR                  S>5      =(       d    S5      _S?[        UR                  S?5      =(       d    S5      _6  UR%                  5         [	        SXS@.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a    S n GNCf = f! [         a  nU(       a  UR'                  5         [)        SAUSSB9  [*        R,                  " 5         [	        S[        U5      S.5      SC4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)DNTrP  valorr   F+Valor do ajuste deve ser diferente de zero.r#  r9  r@   r*  r_  r`  r^  a  
            SELECT telefone, cep, nome, endereco, nrocasa, complemento, cliente, formapagamento,
                   cod_classe, entregador, origem,
                   UPPER(COALESCE(status_pedido,'')) AS status_pedido
            FROM pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem IN ('DELIVERY','BALCAO')
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
            ORDER BY chave DESC
            LIMIT 1
            z%Pedido sem itens para aplicar ajuste.r?  r   u<   Não foi possível resolver cod_classe para ajuste técnico.rd  re  r!   rf  r   u;   Não foi possível resolver cod_usuario do usuário logado.r   rr  r   
TAXA EXTRADESCONTOAJUSTE_TECNICOr   r}   rT  r   z
            DELETE FROM pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND codigoproduto = %s AND origem = %s
            ru  ri  r   rj  r~   r   rA   r   r   r   r   r   r   r         ?r   r   r   r   r   r   r   r   rs  r   r   r   r   r$  r   r  z[CASA AJUSTE ITEM ERRO]rS   r,  )r   rv  r   r6   r   rk   r   r   rf   rg   rh   r   r\   r   r   r   rx  r   ri   rj   r]   r  r  )r~   rm   rn   r   r  r@   r  r   r   r  re  r  status_insertr   r   	origem_pdr  r   ro   s                      r/   api_casa_ajuste_itemr    s    D
CEt,2dhhw',1-A:u6cdegjj| IIKJJL  [[.
zkkTk* #		
 <<>>u6|}~  AD  D^ IIKJJL a 		 #	
 ||~u6]^_add~ IIKJJL  
XXl+
u6tuvx{{t IIKJJL u #KK5(#!"34  -=!>!D"EKKMN $0 ,,..B%kk'2u6stuwzzD IIKJJL E %((A(GR$H$N$N$PT\$\bk"'!),( *0b1779??A  `RUVZV^V^_iVjVpnpRqRwRwRy  SE  SE  FN  SO  SOh  U_	 ^Z	B	
 	
 Y3	
 ,,.&B'++&67<1>B

"J(	
	
  	
 "		

 *-34	
 DHHUO)r*	
 TXXf%+,	
 *-34	
 +1r2	
 DHH]39r:	
 (	
 	
 ,	
 	
 $	
  +.4"5;;=!	
" #	
$ %	
& +Etxx/?E2F'	
( ")	
* $+	
, (-	
. (/	
0 "1	
2 3	
4 txx(89?R@5	
6 488L17R87	
: 	4GLM IIKJJL k  #"#X  @MMO'$75#a&9:C??IIKJJL @ IIKJJL sv   AY A&Y !9Y 
%Y Y ;X: BY MY :Y
Y 	Y

Y 
[ A[&[ '[# [  [# #1\z/api/casa/ddd-padraoc                      [         R                  " S5      n [        U 5      n[        U=(       d    0 R                  S5      =(       d    S5      R	                  5       nSR                  S U 5       5      S S n[        SUS.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)Nr@   dddr!   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   &api_casa_ddd_padrao.<locals>.<genexpr>n  s     73R**,bb3r{      T)r$  r	  z[CASA DDD PADRAO ERRO]rS   Fr#  r,  )r   r6   r   r   r   rW   r   r\   r]   r  r  )r@   dadosr	  ro   s       r/   api_casa_ddd_padraor  g  s    	@[[.
 ,5;B##E*0b1779gg7377;4455 @&65#a&9:C??@s   BB 
C8CCCz/api/casa/historico-clientec                  p   S n S n [         R                  " S5      nU(       d?  [        SSS.5      S4U(       a  UR                  5         U (       a  U R                  5         $ $ SR	                  S [        [        R                  R                  S5      =(       d    S5       5       5      nU(       d?  [        SS	S.5      S
4U(       a  UR                  5         U (       a  U R                  5         $ $ [        5       n U R                  SS9n[        U[        U5      U5      nU(       d  [        U[        U5      U5      n[        S[        U5      US S S.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [         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)Nr@   Fr"  r#  r&  r!   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   -api_casa_historico_cliente.<locals>.<genexpr>~  s     `(O"S]S]S_22(Or{   r}      Telefone é obrigatórior9  Tr*  r  )r$  total_pedidosr   z[CASA HISTORICO CLIENTE ERRO]rS   r,  )r   r6   r   rk   rW   r   r   r-  r   rf   r   r   r   r   r\   r]   r  r  )rm   rn   r@   r}   r   ro   s         r/   api_casa_historico_clienter  u  s    D
C[[.
u6JKLcQ IIKJJL ! 77`GLL,<,<Z,H,NB(O``u6PQRTWW IIKJJL  zkkTk*8c*oxX7S_hWG4#g,SZ[]\]S^_` IIKJJL   @-q=5#a&9:C??IIKJJL @
 IIKJJL s=   ,F "AF /A&F 
H8G<HH <HH 1H5c                      [         R                  R                  S5      =(       d    SR                  5       n U (       a  U $ S$ )uW   Pasta base dos .txt do /casa (override: variável de ambiente LOJA_PEDIDOS_SALVOS_DIR).LOJA_PEDIDOS_SALVOS_DIRr!   zC:\Geral\Pedidos_Salvos)rU   environr6   r   )ds    r/   _dir_pedidos_salvos_configurador    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)rU   rV   abspathr  dirname__file__rW   tempfile
gettempdirr   normcasenormpathr   r   )primaryherefallback_projfallback_tempseenr   r  ks           r/   _uniq_base_dirs_candidatesr*    s    ggoo=?@G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[	        5       nS
n[        U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)u   
Grava o .txt do pedido. Tenta em ordem: pasta configurada, projeto, %TEMP%.
Qualquer OSError em uma pasta tenta a seguinte (ex.: C:\Geral sem permissão).
Retorna (caminho_completo, nome_arquivo, usou_fallback).
z%Y-%m-%dz%H%M%Spedido_
sem_numero_z.txtr!   z
FORMA DE PAGAMENTO: rL   NT)exist_okwrP   rQ   r   u.   Não foi possível gravar o arquivo do pedido.)r   rY   r   r   r*  r~  rU   rV   rW   makedirsrZ   r[   OSError)conteudor~   forma_pagamentodata_dirsufixonome_arquivocorpo
candidatosultimoidxbase_dirpastacaminhora   ro   s                  r/   _salvar_txt_pedido_casar?    s#    }}Z(H]]8$FY6,7qELB%%'E)/):"==+-JF":.		GGLL4EKK-ggll57GgsW5 6#'11 / 
B
CC 65  	F	s1   AD6,D%>D6%
D3	/D66
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)NTrP  r3  r!   r~   r   r4  Fu   Conteúdo vazio para salvarr#  r9  )r$  r>  arquivouG  Não foi possível gravar em C:\Geral\Pedidos_Salvos (permissão negada ou pasta bloqueada). O arquivo foi salvo em pasta alternativa (projeto ou %TEMP%\LojaOnline_Pedidos_Salvos). Defina LOJA_PEDIDOS_SALVOS_DIR com um caminho gravável ou dê permissão de escrita em C:\Geral\Pedidos_Salvos (utilizador do serviço / Python).avisoz[CASA SALVAR TXT ERRO]rS   r,  )r   rv  r   r6   r   r   r   r?  r\   r]   r  r  )	r  r3  r~   r4  r>  r7  usou_fallbackr   ro   s	            r/   api_casa_salvar_txtrD    s   @  -3uyyR06B7==?		+.3!4	eii(92>D"EKKMu6STUWZZZ/F0
,} 7L5 L s| @&65#a&9:C??@s$   B:C( =*C( (
D528D0*D50D5z/api/baixa/pedidosc                  	   S n S n [         R                  " S5      n[        5       n U R                  SS9nUR	                  SU45        UR                  5       =(       d    / n/ nU GHb  n[        UR                  S5      =(       d    S5      S:  a  M-  [        UR                  S5      =(       d    S5      n[        UR                  S5      =(       d    S5      nUS::  a  US::  a  M  [        UR                  S	5      =(       d    S
5      R                  5       [        UR                  S5      =(       d    S
5      R                  5       /nSR                  U V	s/ s H  o(       d  M  U	PM     sn	5      n
[        UR                  S5      =(       d    S
5      R                  5       nU(       a  U
(       a  U
S-   U-   OUn
US:  a  SnOQUS:  a  SnOH[        UR                  S5      =(       d    S5      R                  5       R                  5       =(       d    Sn[        UR                  S5      =(       d    S
5      R                  5       n[        UR                  S5      =(       d    S
5      R                  5       nUR                  [        UR                  S5      =(       d    S
5      R                  5       [        UR                  S5      =(       d    S5      [        UR                  S5      =(       d    S5      [        UR                  S5      =(       d    S
5      R                  5       [        UR                  S5      =(       d    S
5      R                  5       U
[        UR                  S5      =(       d    S
5      R                  5       UR                  S5      b#  [        UR                  S5      =(       d    S5      OS UUUS.5        GMe     [        SUS.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)"Nr@   Tr*  a%  
            SELECT
                pd.origem,
                pd.nropedido,
                MAX(pd.chave) AS last_id,
                SUM(COALESCE(pd.preco, 0) * COALESCE(pd.quantidade, 0)) AS total,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(pd.status_pedido, ''))) IN ('ABERTO','ABERTA') THEN 1 ELSE 0 END) AS aberto_count,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(pd.status_pedido, ''))) = 'ROTA' THEN 1 ELSE 0 END) AS rota_count,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(pd.status_pedido, ''))) = 'AGUARDE' THEN 1 ELSE 0 END) AS aguarde_count,
                MAX(COALESCE(pd.cliente, pd.nome, '')) AS cliente,
                MAX(COALESCE(pd.telefone, '')) AS telefone,
                MAX(COALESCE(pd.endereco, '')) AS endereco,
                MAX(COALESCE(pd.nrocasa, '')) AS nrocasa,
                MAX(COALESCE(pd.complemento, '')) AS complemento,
                MAX(COALESCE(pd.formapagamento, '')) AS formapagamento,
                MAX(pd.valor_pago_troco) AS valor_pago_troco,
                MAX(COALESCE(pd.entregador, '')) AS entregador_codigo,
                MAX(UPPER(TRIM(COALESCE(pd.status_pedido, '')))) AS status_pedido,
                MAX(e.nome) AS entregador_nome
            FROM pedido_diarios pd
            LEFT JOIN entregador e
              ON e.id_cliente = pd.id_cliente
             AND (
                  BINARY CAST(e.chave AS CHAR) = BINARY TRIM(COALESCE(pd.entregador, ''))
                  OR e.chave = CAST(NULLIF(TRIM(pd.entregador), '') AS UNSIGNED)
                 )
            WHERE pd.id_cliente = %s
              AND pd.origem IN ('DELIVERY','BALCAO')
              AND UPPER(TRIM(COALESCE(pd.status_pedido, ''))) <> 'ITEM_REMOVIDO'
            GROUP BY pd.origem, pd.nropedido
            ORDER BY last_id DESC
            LIMIT 250
            aguarde_countr   aberto_count
rota_countr   r!   r   r   r   z - rr  ROTAr   entregador_codigoentregador_nomer   r~   r1  r   r}   r   r  )r   r~   r1  r   r}   r   r   r  r   rJ  rK  r$  r   z[BAIXA PEDIDOS ERRO]rS   Fr#  r,  )r   r6   r   rf   rg   r   r   r   r   rW   r   r   r   r   rk   r\   r]   r  r  )rm   rn   r@   r   r   r   rG  rH  	end_partsr  endcomp	status_uicod_entnome_entro   s                   r/   api_baixa_pedidosrS    s    D
CX[[.
zkkTk* B ME#	
H ||~#A155).Q/!3quu^49:LQUU<05A6Jq Z1_QUU:.4"5;;=s155CSCYWY?Z?`?`?bcI))	7	1QQ	78Cquu]+1r288:D.1sU{T)ta$	a"	o 6 B(CIIKQQS_W_	!%% 34:;AACG155!239r:@@BHJJ!!%%/"7R8>>@!$QUU;%7%<1!="155>#6Q7"155#3#9r:@@B #AEE*$5$; < B B D #&)!%%0@*A*GR&H&N&N&Puu/0< ).aee4F.G.L1(M%.)0'/) J 4C89 IIKJJL K 8<  @$at45#a&9:C??IIKJJL @
 IIKJJL sI   EP 
P	
%P	
+I.P 	P 
R
8RR
R R

R 1R>z/api/dashboard/delivery-balcaoc                      S n S n [         R                  " S5      n[        [        R                  R                  S5      =(       d    S5      R                  5       R                  5       nUS;  a  Sn[        5       n U R                  SS9nSnUS:X  d  US:X  a  SnOUS	:X  a  S
nOSnUR                  SU S3U45        UR                  5       =(       d    / n/ nU GH  n[        UR                  S5      =(       d    S5      n[        UR                  S5      =(       d    S5      n	[        UR                  S5      =(       d    S5      n
U
S:  a  US::  a	  U	S::  a  SnO`U	S:  a	  US::  a  SnOQUS:  a  SnOH[        UR                  S5      =(       d    S5      R                  5       R                  5       =(       d    SnUR                  [        UR                  S5      =(       d    S5      R                  5       R                  5       [        UR                  S5      =(       d    S5      [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       UR                  S 5      b#  [        UR                  S 5      =(       d    S5      OS U[        UR                  S!5      =(       d    S5      [        UR                  S"5      =(       d    S5      [        UR                  S#5      S$S 5      (       a  UR                  S#5      R!                  5       O"[        UR                  S#5      =(       d    S5      S%.5        GM     [#        SUS&.5      U(       a  UR%                  5         U (       a  U R%                  5         $ $ ! [&         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),Nr@   r  r!   )r!   abertorecebidotodosTr*  rU  zMAND UPPER(TRIM(COALESCE(pd.status_pedido, ''))) IN ('ABERTO','ABERTA','ROTA')rV  z<AND UPPER(TRIM(COALESCE(pd.status_pedido, ''))) = 'RECEBIDO'zXAND UPPER(TRIM(COALESCE(pd.status_pedido, ''))) IN ('ABERTO','ABERTA','RECEBIDO','ROTA')aF  
            SELECT
                pd.origem,
                pd.nropedido,
                MAX(pd.chave) AS last_id,
                SUM(COALESCE(pd.preco, 0) * COALESCE(pd.quantidade, 0)) AS total,
                SUM(COALESCE(pd.quantidade, 0)) AS total_itens,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(pd.status_pedido, ''))) IN ('ABERTO','ABERTA') THEN 1 ELSE 0 END) AS aberto_count,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(pd.status_pedido, ''))) = 'ROTA' THEN 1 ELSE 0 END) AS rota_count,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(pd.status_pedido, ''))) = 'RECEBIDO' THEN 1 ELSE 0 END) AS recebido_count,
                MAX(COALESCE(pd.telefone, '')) AS telefone,
                MAX(COALESCE(pd.nome, '')) AS nome,
                MAX(COALESCE(pd.endereco, '')) AS endereco,
                MAX(COALESCE(pd.nrocasa, '')) AS nrocasa,
                MAX(COALESCE(pd.complemento, '')) AS complemento,
                MAX(COALESCE(pd.entregador, '')) AS entregador,
                MAX(en.nome) AS entregador_nome,
                MAX(COALESCE(pd.formapagamento, '')) AS formapagamento,
                MAX(pd.valor_pago_troco) AS valor_pago_troco,
                MAX(UPPER(TRIM(COALESCE(pd.status_pedido, '')))) AS status_pedido,
                MAX(COALESCE(pd.data_criacao, CURRENT_TIMESTAMP)) AS data_criacao
            FROM pedido_diarios pd
            LEFT JOIN entregador en
              ON en.id_cliente = pd.id_cliente
             AND (
                  BINARY CAST(en.chave AS CHAR) = BINARY TRIM(COALESCE(pd.entregador, ''))
                  OR en.chave = CAST(NULLIF(TRIM(pd.entregador), '') AS UNSIGNED)
                 )
            WHERE pd.id_cliente = %s
              AND pd.origem IN ('DELIVERY','BALCAO')
              AND UPPER(TRIM(COALESCE(pd.status_pedido, ''))) <> 'ITEM_REMOVIDO'
              zr
            GROUP BY pd.origem, pd.nropedido
            ORDER BY last_id DESC
            LIMIT 250
            rG  r   rH  recebido_countRECEBIDOrI  rr  r   r   r~   r}   rA   r   r   r   r   rK  r   r  r1  total_itensr   	isoformat)r   r~   r}   rA   r   r   r   r   rK  r   r  r   r1  rZ  r   rL  z[DASH DELIVERY/BALCAO ERRO]rS   Fr#  r,  )r   r6   r   r   r-  r   r{  r   rf   rg   r   r   r   r   r   getattrr[  r   rk   r\   r]   r  r  )rm   rn   r@   r  status_filter_sqlr   r   r   rG  rH  rX  st_calcro   s                r/   api_dashboard_delivery_balcaor_  C  sj    D
Ca[[.
W\\%%h/526<<>DDF<<FzkkTk*R<6X- oz! ^ z> !! "?#H MK&	
N ||~#Aquu^49:LQUU<05A6J '7!8!=A>N!la&7J!O$aLA$5 !"aeeO4@AGGIOOQ]U]JJ!!%%/"7R8>>@FFH!$QUU;%7%<1!= #AEE*$5$; < B B Df 34::< #AEE*$5$; < B B D"155#3#9r:@@B#&quu]';'Ar#B#H#H#J"%aeeL&9&?R"@"F"F"H'*1551B+C+Ir'J'P'P'R&)!%%0@*A*GR&H&N&N&Puu/0< ).aee4F.G.L1(M%,"155>#6Q7#(})=)B#CJQRSRWRWXfRgitvzJ{J{QUU>%:%D%D%F  BE  FG  FK  FK  LZ  F[  Fa  _a  Bb# B 4C89 IIKJJL   @+Qd;5#a&9:C??IIKJJL @
 IIKJJL s0   RS 
U	8UU	U U		U 1U=z5/api/dashboard/pedido/<string:origem>/<int:nropedido>c                 
   S nS n [         R                  " S5      n[        U =(       d    S5      R                  5       R	                  5       nUS;  a?  [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        U=(       d    S5      S::  a?  [        SS	S.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        5       nUR                  S
S9nUR                  S5        UR                  5       S LnU(       a  SOSnUR                  SU S3XE[        U5      45        UR                  5       =(       d    0 n[        UR                  S5      =(       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XE[        U5      45        UR                  5       =(       d    / n
[        S
U[        U5      [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       [        UR                  S5      =(       d    S5      R                  5       UR                  S5      b#  [        UR                  S5      =(       d    S5      OS [        UR                  S5      =(       d    S5      R                  5       R	                  5       U	[        UR                  S5      =(       d    S5      R                  5       S .U
 Vs/ s H  n[        U5      PM     snS!.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)%Nr@   r!   rV  F   Origem inválidar#  r9  r   u   Pedido inválidoTr*  r  z6, MAX(COALESCE(baixa_pagamento,'')) AS baixa_pagamentoz, '' AS baixa_pagamentoa  
            SELECT
              MAX(COALESCE(pd.telefone,'')) AS telefone,
              MAX(COALESCE(pd.nome,'')) AS nome,
              MAX(COALESCE(pd.endereco,'')) AS endereco,
              MAX(COALESCE(pd.nrocasa,'')) AS nrocasa,
              MAX(COALESCE(pd.complemento,'')) AS complemento,
              MAX(COALESCE(pd.entregador,'')) AS entregador,
              MAX(en.nome) AS entregador_nome,
              MAX(COALESCE(pd.formapagamento,'')) AS formapagamento,
              MAX(pd.valor_pago_troco) AS valor_pago_troco,
              MAX(UPPER(TRIM(COALESCE(pd.status_pedido,'')))) AS status_pedido,
              SUM(COALESCE(pd.preco,0) * COALESCE(pd.quantidade,0)) AS total
              a  
            FROM pedido_diarios pd
            LEFT JOIN entregador en
              ON en.id_cliente = pd.id_cliente
             AND (
                  BINARY CAST(en.chave AS CHAR) = BINARY TRIM(COALESCE(pd.entregador, ''))
                  OR en.chave = CAST(NULLIF(TRIM(pd.entregador), '') AS UNSIGNED)
                 )
            WHERE pd.id_cliente = %s
              AND pd.origem = %s
              AND pd.nropedido = %s
              AND UPPER(TRIM(COALESCE(pd.status_pedido,''))) <> 'ITEM_REMOVIDO'
            r1     Pedido não encontrador?  a  
            SELECT
              chave,
              produto,
              COALESCE(quantidade,0) AS quantidade,
              COALESCE(preco,0) AS preco,
              obs_item,
              dados_item
            FROM pedido_diarios
            WHERE id_cliente = %s
              AND origem = %s
              AND nropedido = %s
              AND UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO'
            ORDER BY chave ASC
            r}   rA   r   r   r   r   rK  r   r  r   baixa_pagamento)r   r~   r}   rA   r   r   r   r   rK  r   r  r   r1  rc  )r$  pedidor   z[DASH PEDIDO DETALHE ERRO]rS   r,  )r   r6   r   r   r   r   rk   r   r   rf   rg   rh   r   r   r  r\   r]   r  r  )r   r~   rm   rn   r@   orig	has_baixaselect_baixaheadr1  r   rl  ro   s                r/   api_dashboard_pedido_detalheri    s     D
Cd[[.
6<R &&(..0--u6HIJCOz IIKJJL } y~A!#u6HIJCOv IIKJJL w zkkTk*MNLLN$.	S\Ob{ n 4 s9~.7	
: ||~#dhhw',1-A:u6NOPRUUd IIKJJL e 	 s9~.!	
$ $""!$Y #DHHZ$8$>B ? E E G 0 6B7==? #DHHZ$8$>B ? E E G"488I#6#<"=CCE#&txx'>'D"#E#K#K#M"%dhh|&<&B"C"I"I"K'*4884E+F+L"'M'S'S'U&)$((3C*D*J&K&Q&Q&Sxx 23? ).dhh7I.J.Oa(P%(/)B)Hb%I%O%O%Q%W%W%Y"'*4884E+F+L"'M'S'S'U!$ 5::Eq-*E:)
: IIKJJL  ;  @*AT:5#a&9:C??IIKJJL @
 IIKJJL sV   AR 'R (B9R I2R RR R 
T8TTT TT 1Uz!/api/dashboard/mesa/<int:mesanro>c                 	   S nS n [         R                  " S5      n[        U =(       d    S5      S::  a?  [        SSS.5      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ [        5       nUR                  SS9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       S LnUR                  SU[        U 5      45        UR                  5       =(       d    0 n[        UR                  S5      =(       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      =(       d    S5      nUS::  a  SnUR                  SU45        UR                  5       =(       d    0 n [        UR                  S5      =(       d    S5      n	U	S:  a  Sn	U	(       a$  [        [        U5      [        U	5      S-  -  S5      OSn
[        [        U5      [        U
5      -   S5      nUS:  a!  [        [        U5      [        U5      -  S5      O
[        U5      nSnU(       ag  UR                  SU[        U 5      45        UR                  5       =(       d    0 n[        UR                  S5      =(       d    S5      R                  5       nUR                  SU[        U 5      45        UR                  5       =(       d    / n[        SS[        U 5      [        UR                  S5      =(       d    S5      R                  5       R                  5       UUU
UUUS.	U Vs/ s H  n[!        U5      PM     snS .5      U(       a  UR	                  5         U(       a  UR	                  5         $ $ ! [         a    Sn GN=f = f! [         a    Sn	 GNf = f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)$Nr@   r   Fu   Mesa inválidar#  r9  Tr*  r  r  4SHOW COLUMNS FROM pedido_diarios LIKE 'pessoas_mesa'MALTER TABLE pedido_diarios ADD COLUMN pessoas_mesa INT NULL AFTER status_mesar  a  
            SELECT
              SUM(CASE WHEN UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO' THEN COALESCE(preco,0) * COALESCE(quantidade,0) ELSE 0 END) AS subtotal,
              MAX(UPPER(COALESCE(status_mesa,''))) AS status_mesa,
              MAX(COALESCE(pessoas_mesa, 0)) AS pessoas_mesa
            FROM pedido_diarios
            WHERE id_cliente = %s
              AND origem = 'MESA'
              AND nropedido = %s
            subtotalu   Mesa não encontradar?  pessoas_mesar   VSELECT servicomesa FROM configuracao WHERE id_cliente = %s ORDER BY chave DESC LIMIT 1servicomesarp        Y@rh  r!   z
                SELECT MAX(COALESCE(baixa_pagamento,'')) AS baixa_pagamento
                FROM pedido_diarios
                WHERE id_cliente = %s AND origem = 'MESA' AND nropedido = %s
                rc  a  
            SELECT
              chave,
              produto,
              COALESCE(quantidade,0) AS quantidade,
              COALESCE(preco,0) AS preco,
              obs_item,
              dados_item
            FROM pedido_diarios
            WHERE id_cliente = %s
              AND origem = 'MESA'
              AND nropedido = %s
              AND UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO'
            ORDER BY chave ASC
            rU  status_mesa)	r   mesanrorr  rn  rm  servicor1  
por_pessoarc  )r$  r  r   z[DASH MESA DETALHE ERRO]rS   r,  )r   r6   r   r   rk   r   rf   rg   rh   r   r\   roundr   r   r   r   r  r]   r  r  )rs  rm   rn   r@   rf  rh  rm  rn  cfgpctrt  r1  ru  	baixa_txtrow_br   rl  ro   s                     r/   api_dashboard_mesa_detalher{  	  s"    D
Cq[[.
w|!!u6FGH#MV IIKJJL W zkkTk*IJ<<>!KKlmJK<<>!KKghMNLLN$.		 W&	
 ||~#*-23q=u6LMNPSSZ IIKJJL ]	txx7<1=L 1LdM	
 lln"	.3!4C 7CFI%h5:+=>BseHog6:EQTUEUU5<%*==qA[`af[g
	KK
 S\* LLN(bEEII&78>B?EEGI W&!	
$ $"$"7|#&txx'>'D"#E#K#K#M#S#S#U$0 (&"",'0
 5::Eq-*E:
, IIKJJL Y  	L	  	C	l ;  @(!485#a&9:C??IIKJJL @
 IIKJJL s   =P0 3DP0 4#P 4P0 #P /F	P0 8P+P0 PP0 PP0 P($P0 'P((P0 0
R,:8R'2R,3R/ 'R,,R/ /1S z/api/baixa/receberc                  V   S n S n [         R                  " SS9=(       d    0 n[        UR                  S5      =(       d    S5      n[	        UR                  S5      =(       d    S5      R                  5       R                  5       nUS;  a?  [        SS	S
.5      S4U(       a  UR                  5         U (       a  U R                  5         $ $ US::  a?  [        SSS
.5      S4U(       a  UR                  5         U (       a  U R                  5         $ $ [        UR                  S5      [        5      (       a  UR                  S5      O/ n/ nSnU H  n[        U[        5      (       d  M  [	        UR                  S5      =(       d    S5      R                  5       n	 [        [	        UR                  S5      =(       d    S5      R                  SS5      5      n
U	(       a  U
S::  a  M  [        [        U
5      S5      n
Xz-  nUR!                  XS.5        M     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         U R)                  SS9nUR+                  S5        UR-                  5       c  UR+                  S5        UR+                  SX;U45        UR-                  5       =(       d    0 n[        UR                  S5      =(       d    S5      n[        UR                  S5      =(       d    S5      n[        UR                  S5      =(       d    S5      n[        UR                  S5      =(       d    S5      nUS::  aO  U R/                  5         [        SSS
.5      S 4U(       a  UR                  5         U (       a  U R                  5         $ $ US::  aU  US::  aO  U R/                  5         [        SS!S
.5      S"4U(       a  UR                  5         U (       a  U R                  5         $ $ US:  aO  U R/                  5         [        SS#S
.5      S"4U(       a  UR                  5         U (       a  U R                  5         $ $ [        [        U5      S5      n[        [        U5      S5      n[        X-
  S5      nUS$:  aQ  U R/                  5         [        SS%XUS&.5      S4U(       a  UR                  5         U (       a  U R                  5         $ $ [	        ["        R                  " S'5      =(       d    S5      R                  5       n[        [1        S[        U5      [        U5      -
  5      S5      nS(UUUUUU[        [2        R2                  " 5       5      S).n[4        R6                  " USS*9n[9        U5      S(:X  a5  [	        US   R                  S5      =(       d    S5      R                  5       nOS+nUR+                  S,UUX;U45        UR:                  S::  aO  U R/                  5         [        SS-S
.5      S.4U(       a  UR                  5         U (       a  U R                  5         $ $ U R=                  5         [        S/S05      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [         a    Sn
 GNf = f! [         a  n U (       a  U R/                  5         O! [         a     Of = f[?        S0USS19  [@        RB                  " 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)2NTrP  r~   r   r   r!   rV  Fra  r#  r9  u   nropedido inválido
pagamentosrp  r  r  r   r  rh  r  r  4Informe pelo menos uma forma de pagamento com valor.r@   r*  r  r  a  
            SELECT
                SUM(COALESCE(preco, 0) * COALESCE(quantidade, 0)) AS total,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(status_pedido, ''))) IN ('ABERTO','ABERTA') THEN 1 ELSE 0 END) AS aberto_count,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(status_pedido, ''))) = 'ROTA' THEN 1 ELSE 0 END) AS rota_count,
                SUM(CASE WHEN UPPER(TRIM(COALESCE(status_pedido, ''))) = 'AGUARDE' THEN 1 ELSE 0 END) AS aguarde_count
            FROM pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem = %s
              AND UPPER(TRIM(COALESCE(status_pedido, ''))) <> 'ITEM_REMOVIDO'
            r1  rG  rH  rF  u$   Pedido não encontrado ou sem itens.r?  z6Pedido precisa estar ABERTO ou em ROTA para dar baixa.r^  u4   Pedido ainda está em AGUARDE e não pode dar baixa.{Gz?u*   Valores não fecham com o total do pedido.r$  r%  r1  somadorestantere  r   )vr~   r   r1  r}  trocousuariotsensure_asciiMISTOa  
            UPDATE pedido_diarios
            SET status_pedido = 'RECEBIDO',
                baixa_pagamento = %s,
                formapagamento = %s
            WHERE nropedido = %s AND id_cliente = %s AND origem = %s
              AND UPPER(TRIM(COALESCE(status_pedido, ''))) <> 'ITEM_REMOVIDO'
              AND UPPER(TRIM(COALESCE(status_pedido, ''))) IN ('ABERTO','ABERTA','ROTA')
            u&   Não foi possível atualizar o pedido.r,  r$  z[BAIXA RECEBER ERRO]rS   )"r   rv  r   r6   r   r   r   r   rk   r  rz  r  r   r  r\   rv  r   r   r   rw  rf   rg   rh   rj   r|  r   rJ  dumpsr   r  ri   r]   r  r  )rm   rn   r   r~   r   r}  pagossomar  r  r  r@   r   r1  rG  rH  rF  diffr  r  	baixa_objry  forma_finalro   s                           r/   api_baixa_receberr  	  sM    D
Cvt,2-23	TXXh'-2.446<<>//u6HIJCO\ IIKJJL _ >u6KLMsRX IIKJJL [ 0:$((<:PRV/W/WTXXl+]_
Aa&&g,"-335Ec!%%."5A6>>sCHI EQJ%,*EMDLL59:  u6lmnpsst IIKJJL u [[.
z kkTk*MN<<>!KKno	 F+	
 lln"cggg&+!,377>27a8.3!4
CGGO49:A:MMOu6\]^`ccx IIKJJL { 1qMMOu6nopruur IIKJJL u 1MMOu6lmnpssl IIKJJL m U4[!$eElA&U\1%$;MMOu6bmr  QU  V  W  Y\  \^ IIKJJL _ gkk"239r:@@Bc#uT{U5\9:A>"diik"	
	 JJyu=	u:?eAhll739r:@@BK!K YFC	
 <<1MMOu6^_`bee IIKJJL  		4() IIKJJL I  p  @	 		$at45#a&9:C??IIKJJL @ IIKJJL s   B[ 
[ B[ <Z<A[ E[ +[ 4%[ 	A[ D([ 0[ <[[ [[ 
]4[21]/2
[?<]/>[??;]/:]4;]7 /]44]7 71^(c                     [         R                  (       d  g [        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: r@   rL   u.   [LOG][before_request] Sessão usuario_logado: re  )r   LOG_SESSION_DEBUGsysstderrr[   r   r6   rT   r-   r.   r/   log_id_cliente_globalr  
  s}    ##JJA'++lB[A\\^_`JJJJEgkkRbFcEddfghJJr.   z/pingc                      g)N)pongr>  r-   r-   r.   r/   pingr  
  s    r.   z/rota_testec                      g)NzRota de teste OK!r-   r-   r.   r/   
rota_tester  
  s    r.   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!   r@   Fu!   Forma de pagamento não informadar  r9  z>INSERT INTO formapagamento (forma, id_cliente) VALUES (%s, %s)Tz)Forma de pagamento adicionada com sucessorf   rm   r,  )r   rv  r6   r   r   r   r   rf   rg   ri   localsrk   r\   r   )r   r  r@   rm   rf   ro   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                 *   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     @rh  r   )mathradianssincosatan2sqrtrv  )	lat1lon1lat2lon2RdlatdlonrO   cs	            r/   haversine_kmr  7
  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)Nr@  NNz*https://nominatim.openstreetmap.org/searchrJ  r   )qformatlimitr;  znovaloja-geocoder/1.0r8  )r  r5   r=  r>  r   latlonz[GEOCODE ERRO])	r   r   rH  r6   rI  rJ  r   r\   r]   )r   urlr  r5   r   r   ro   s          r/   geocodificarr  ?
  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/r   ;z.?overview=false&alternatives=false&steps=falser8  r;  znovaloja-osrm/1.0r<  r>  codeOkroutesr   distanceg     @@rh  z[OSRM ERRO])rH  r6   rI  rJ  rv  r\   r]   )lat_lojalon_lojalat_clilon_clir  r  r   r   r  dist_mro   s              r/   distancia_osrm_kmr  Q
  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                 $   [         R                  " S5      n[        U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  of(       d  M  UPM     sn5      n[	        U5      u  pUb'  U	b$  [        X4X5      n
U
b  XU	4$  [        X4X5      nXU	4$ gs  snf ! [         a  n[        SU5        SX4s SnA$ SnAff = f)uD   Calcula distância entre a loja e o cliente usando dados cadastradosr@   latitude	longituder   r!   r   rC  rF  rG  Brasilr   Nz[HAVERSINE ERRO]r   )r   NN)	r   r6   r   rW   r  r  r  r\   r]   )r  r@   lojaloja_latloja_lonrb  r  endereco_strr  r  	dist_osrmdist_havro   s                r/   calcular_distancia_clienter  h
  s&    \*JJ'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+ +
D5D
D
Dc           	         SnSn [        5       nUR                  SS9nUR                  SU4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*  ;SELECT * FROM txentrega WHERE chave = 1 AND id_cliente = %sz5[TAXA ENTREGA] Nenhuma faixa configurada em txentregarp  faixa1_dfaixa1_vu   [TAXA ENTREGA] Distância u   km é menor que faixa1_d (u!   km), retornando taxa mínima: R$ r      faixa_d_vzkm cai na faixa z: R$ 	faixa10_vz"km ultrapassa todas as faixas: R$ z[TAXA ENTREGA ERRO])
r   rf   rg   rh   r]   rk   r\   r6   r   r}  )	distanciar@   rm   rf   r  	faixa_1_d	faixa_1_vtaxarl  faixa_dfaixa_v
faixa_10_v
taxa_finalro   s                 r/   calcular_taxa_entregar  
  sj    DF0z-TWaVcd!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 5II&5J I/4I?
HH
H+*H+.
H<;H<?
II
II
I,+I,/
I<;I<?
JJ
LK<%L *K 
KKK, ,
K98K9<LL MLM
L+(M*L++M/MM
MMMMc                    U (       d  U $ 0 nU R                  5        H  u  p#[        U[        R                  5      (       a  [	        U5      X'   M3  [        U[
        5      (       a  UR                  SSS9X'   M\  [        U[        5      (       a  UR                  5       X'   M  [        U[        5      (       a  UR                  SS9X'   M  [        U[        [        45      (       a  [        U5      R                  SSS9X'   M  X1U'   M     U$ )uA   Converte tipos não-JSON (Decimal, datetime, bytes) para jsonify.rN   seconds)septimespecr  rP   r  errors)itemsr  decimalDecimalr   r   r[  r   dt_timebytes	bytearraydecode)r   r   r)  r  s       r/   r  r  
  s    

C		a))1XCF8$$[[S9[=CF4  [[]CF7##[[)[4CFE9-..1X__WY_?CFF  Jr.   c                 T   [        U =(       d    S5      R                  5       nU(       d  g[        R                  " SU5      nSR	                  S U 5       5      nUR                  5       n[        R                  " SSU5      n[        R                  " SSU5      R                  5       nU$ )Nr!   NFKDc              3   `   #    U  H$  n[         R                  " U5      (       a  M   Uv   M&     g 7frs   )unicodedata	combiningrv   s     r/   ry   *_normalize_printer_name.<locals>.<genexpr>
  s     @Qrk&;&;B&?Qs   .	.z
[^a-z0-9]+rN   z\s+)r   r   r  	normalizerW   r{  resub)valuess     r/   _normalize_printer_namer  
  s    EKR Afa(A
@Q@@A		A
}c1%A
vsA$$&AHr.   c                    [        U =(       d    S5      R                  5       nU(       a  U(       d  g UR                  5       nU H;  n[        U=(       d    S5      R                  5       R                  5       U:X  d  M9  Us  $    [        U5      nU(       d  g / nU H)  n[        U5      nU(       d  M  UR	                  XG45        M+     U H  u  pGXu:X  d  M  Us  $    U VVs/ s H  u  pGXW;   d  M  XG4PM     nnnU(       d'  U VVs/ s H  u  pGU(       d  M  Xu;   d  M  XG4PM     nnnU(       d  g UR                  S S9  US   S   $ s  snnf s  snnf )Nr!   c                 D    [        U S   5      U S   R                  5       4$ )Nr   r   )r   r{  r   s    r/   r   *_find_best_printer_match.<locals>.<lambda>   s    QqTAaDJJL 9r.   ro  r   )r   r   r{  r  r   sort)	desired_nameavailable_namesdesired_rawdesired_lowerndesired_norm
norm_pairsnncontainss	            r/   _find_best_printer_matchr	  
  s-   l(b)//1Ko%%'MqwB<%%'=8H  +;7LJ$Q'2qg& 
 H  (2HzGQ\5GzHH+5S:G@RGQG:SMM9M:A;q> ISs    E/EEEEc                 L   SnSn [        5       nUR                  5       nUR                  S5        UR                  5       SLn[	        U =(       d    S5      R                  5       R                  5       S;   a  UR                  S5        UR                  5       SLnU(       a  U(       a  UR                  S5        OUR                  S5        UR                  5       nU(       a@  US   (       a6  US    U(       a  UR                  5          U(       a  UR                  5         $ $ U(       a  UR                  S	5        O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     Nf = f! [         a     $ f = f! [         a     NFf = f! [         a     $ f = f! [        R                  R                   a  n [        USS5      S:X  aW   SnA U(       a  UR                  5         O! [         a     Of = f U(       a  UR                  5         gg! [         a     gf = fO! [         a     Of = f[        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[         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)u2   Obtém o nome da impressora da tabela impressoras.N,SHOW COLUMNS FROM impressoras LIKE 'caminho'r!   >   r  conta
conta_mesaz/SHOW COLUMNS FROM impressoras LIKE 'conta_mesa'a  
                        SELECT
                          CASE
                            WHEN COALESCE(TRIM(caminho),'') <> '' THEN TRIM(caminho)
                            ELSE TRIM(nomedaimpressora)
                          END AS printer
                        FROM impressoras
                        WHERE UPPER(COALESCE(conta_mesa,'')) IN ('S','SIM','1','Y','YES','T','TRUE')
                          AND (
                            COALESCE(TRIM(nomedaimpressora),'') <> ''
                            OR COALESCE(TRIM(caminho),'') <> ''
                          )
                        ORDER BY COALESCE(imprenro,0) DESC, id DESC
                        LIMIT 1
                        a  
                        SELECT TRIM(nomedaimpressora) AS printer
                        FROM impressoras
                        WHERE UPPER(COALESCE(conta_mesa,'')) IN ('S','SIM','1','Y','YES','T','TRUE')
                          AND COALESCE(TRIM(nomedaimpressora),'') <> ''
                        ORDER BY COALESCE(imprenro,0) DESC, id DESC
                        LIMIT 1
                        r   a9  
                SELECT
                  CASE
                    WHEN COALESCE(TRIM(caminho),'') <> '' THEN TRIM(caminho)
                    ELSE TRIM(nomedaimpressora)
                  END AS printer
                FROM impressoras
                WHERE imprenro = 1
                LIMIT 1
                zCSELECT nomedaimpressora FROM impressoras WHERE imprenro = 1 LIMIT 1errnoiz  z[IMPRESSORA DB ERRO])r   rf   rg   rh   r   r   r{  rk   r\   mysql	connectorErrorr\  r]   )purposerm   rf   has_caminhohas_conta_mesar   db_errro   s           r/   get_printer_from_dbr    sC   DFOzEFoo't3w}"##%++-1PPNNLM#__.d:NNN$ NN	 oo'3q6q6<		

 G NN	 NN`aoos1v$&		

   		
  		  		
  		) ??   	vw-5	 			

  		% 6 		$f-
	 			

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

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

  		sc  C*G 1F	F,"AG +F<G
F)(F),
F98F9<
G	G	
GGM;I$M H) )
H65H6:I 
I I #K$
I1.K0I11K M J 
J*)J*.K 
KKM$M0M 5L 
LLL7 7
MMMM N#M)(N#)
M63N#5M66N#:NN#
N N#N  N#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   r  rh  )r  platform
win32printr\   PRINTER_ENUM_LOCALPRINTER_ENUM_CONNECTIONSEnumPrintersr   r   r   r   r   r{  r   )_win32printnomesflagsr  vistosunicosr  lks           r/   list_installed_printersr$  Y  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                 0   [         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nU(       aM  UR                  5       U Vs1 s H  oR                  5       iM     sn;  a  [        XV5      n	U	(       d  SS	U 34$ U	n[        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: r   )PedidoNRAWcp1252r  r  s   dbematechdarumas   mepsons   ielgintancadiebolds   V TN)r  r  r  r\   r   GetDefaultPrinterr   r$  r{  r	  OpenPrinterStartDocPrinterStartPagePrinterr  r  encodeWritePrinterEndPagePrinterEndDocPrinterClosePrinter)r3  printer_namemarca_impressorar  ro   nome_pedidodisponiveisrA   r   melhorhPrinterhJobr   marcas                 r/   send_to_printerrA  w  sX    ||wNs||n]]]	9,$J/,N**F*F*HNBOUUWF-/;,,.+6V+Qwwy+6VV-kGF G}UUUD))$/	.--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-_  	94QC888	9 7WH ((2##H- c!f}s   H AI4 ?&I4 %H9>I4 I4 6I CH> -I I4 
H6%H1+H61H69I4 >II I11I4 4
J>J
JJ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[        R                  " S5      nUR                  SU[        US   =(       d    S5      45        UR                  5       =(       d    0 n[        UR                  S5      =(       d    S5      S-   nUS:  a  SnSn[        R                  " S5      nUb   [        U5      nU GH  nUR                  SS5      n[        UR                  SS5      =(       d    S5      n[        UR                  SS5      =(       d    S5      nUR                  S S5      nUR                  S!S5      nS"U;   a  S#nS#n[!        U40 S$S%_S[        US   =(       d    S5      _SU_SUS   _S	US	   _SUS   _SUS   _SUS   _SUS   _S&[#        U=(       d    S5      _S'[#        U=(       d    S5      _S[        U=(       d    S5      _S([        U=(       d    S5      _S![#        U=(       d    S5      _S)S_S*S_S+S_S,UR                  S,US   5      _S-S_S.U_S/S0_S1S2_S3U_S4S_S5U=(       d    S_S6S_6  [        S7U S8U S9U S:US    S;U 3
5        GM     UR%                  5          U(       a   UR                  5         U(       a   UR                  5         gg!   SUS'    GM  = f!    GN= f!    g= f! [         a    Sn GNf = f! [         a  n[        S<U 35        e SnAff = f!    No= f!    g= f! U(       a   UR                  5         O!    O= fU(       a   UR                  5         f !    f = ff = f)=znGrava dados do pedido na tabela pedido_diarios (origem DELIVERY), incluindo a forma de pagamento se fornecida.NrL   r!   r   )r}   r   rA   r   r   r   r~   zTel:r}   zCEP:r   zNome:rA   zCompl:r   zEnd:r   r   r   rh  r   zPEDIDO NRO:r~   u/   [DELIVERY PENDENTE] Sem telefone, não gravandoTr*  r@   z
            SELECT COALESCE(MAX(lancamento), 0) AS max_lancamento
            FROM pedido_diarios
            WHERE id_cliente = %s AND nropedido = %s AND origem = 'DELIVERY'
            ri  rj  rd  r   rq  r   r   zTAXA ENTREGA	TXENTREGAr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z[PEDIDO_DIARIOS] z (cod: z
, classe: z) gravado para z
 | Forma: [DELIVERY PENDENTE ERRO] )splitrx  r  r   r   r   r]   rk   r   rf   r   r6   rg   rh   r\   r   r   r   ri   )r3  produtosr4  rm   rf   r0  r  linhaend_inforb  nro_strr@   r  lancamento_blocor   r  prod	prod_nome
prod_precoprod_qtd
prod_chaveprod_classero   s                          r/   gravar_delivery_pendenterQ    s   DFu%
 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N  

 W z-[[.

 \+6;!<=	
 //#)r,< = BDqHj( #KK5(#!"34 D,Itxx38q9JTXXeQ/415H'2.J((8R0K*(
),! l;7<1= &	
 &j1 !' "&) &j1 %Y/ )7 "*"23 IO, JO!, !Q/ ;,"-  !" #$ %& %((L4HI'(  )* (+, (-.  (/0 ,12 #34 !0 5256 7: %i[
|:k]Zijv  xB  kC  jD  DN  O^  N_  `  aO P 	
  

 c201L-\s  #"#X  )!-. 

	 s   F(T 3 T S"T S+ S3 /B:T *S: 5F5T 3T. T5 S($T +S03S7:T
T 	T

T 
T+T&&T++T< .T25T9<U>UU>UU>%U65U>6U:8U>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      $ )uS   Texto único usado em /onde-esta-o-servidor e /loja-build (pasta real do processo).r#   painel_menu.htmlrL   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=)
rU   rV   rW   rX   r  r  getcwdappr%   isfile)_pms    r/   _loja_diagnostico_textorX  /  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$ )uc   Confirma em texto plano qual app.py está a servir a porta (alinhar com a pasta que o Cursor abre).text/plain; charset=utf-8mimetyper   rX  r-   r.   r/   onde_esta_o_servidorr^  @  s     +-8STTr.   z/loja-buildz/__loja_buildc                  &    [        [        5       SS9$ )ud   Diagnóstico: mesmo conteúdo que /onde-esta-o-servidor (/loja-build evita bloqueios a URLs com __).rZ  r[  r]  r-   r.   r/   loja_build_infor`  F  s     +-8STTr.   r  c                  <   [         R                  " S5      n [        U 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$ )	Nr@   rA   rB   r#   rS  )r@   rD   _painel_templatezpainel-menu-build-13zX-Loja-Inicio)r   r6   r   rU   rV   rW   rX   r   r  r
   r5   )r@   rG   rD   rW  htmlresps         r/   indexre  M  s     \*J!*-JNN6<8M
'',,y+/A
BC#-	D D$:DLL!Kr.   z/logoutc                      [         R                  " SS5        [         R                  " SS5        [         R                  " SS5        [        [        S5      5      $ )u   Desloga o usuáriore  Nr@   funcaozauth.login_page)r   r   r   r	   r-   r.   r/   logoutrh  ^  s@     KK $'KKd#KK$G-.//r.   z/casac                     [         R                  " S5      n [        U 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)r@   rA   rB   r#   z
index.html)r@   rD   _pedidos_template)	r   r6   r   rU   rV   rW   rX   r   r  )r@   rG   rD   _idxs       r/   casarl  f  sh     \*J!*-JNN6<8M77<<	;=D#''//$/	 r.   z/delivery-pendente-viewc                  |    [         R                  " S5      n [        U 5      nUR                  SS5      n[        SXS9$ )u4   Página para visualizar pedidos pendentes de entregar@   rA   rB   zdelivery_pendente.htmlrC   rE   rF   s      r/   delivery_pendente_viewrn  u  s:     \*J!*-JNN6<8M3
hhr.   z/canceladasc                  |    [         R                  " S5      n [        U 5      nUR                  SS5      n[        SXS9$ )u*   Página para visualizar pedidos canceladosr@   rA   rB   zcanceladas.htmlrC   rE   rF   s      r/   canceladas_viewrp  ~  :     \*J!*-JNN6<8M,aar.   z	/comandasc                  |    [         R                  " S5      n [        U 5      nUR                  SS5      n[        SXS9$ )u)   Página para visualizar comandas fechadasr@   rA   rB   zcomandas.htmlrC   rE   rF   s      r/   comandas_viewrs    s9     \*J!*-JNN6<8M?z__r.   z/cadastrar-entregadorc                  |    [         R                  " S5      n [        U 5      nUR                  SS5      n[        SXS9$ )u#   Página de cadastro de entregadoresr@   rA   rB   zcadastrar_entregador.htmlrC   rE   rF   s      r/   cadastrar_entregadorru    s:     \*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 entregadoresNrA   r!   r}   r   F   Nome é obrigatórior#  r9  r@   zw
            INSERT INTO entregador (nome, telefone, endereco, id_cliente)
            VALUES (%s, %s, %s, %s)
        z[ENTREGADOR CADASTRADO]     (código: z, telefone: r   TEntregador 'u$   ' cadastrado com sucesso! (Código: r  
[DB ERROR]z+Erro ao salvar entregador no banco de dadosr,  )r   rJ  r6   r   r   rk   r   rf   r   rg   ri   r  r]   r  r  r  )	rm   rf   r  rA   r}   r   r@   chave_geradar  s	            r/   salvar_entregadorr|    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*  r@   z
            SELECT chave, nome, telefone, endereco
            FROM entregador
            WHERE id_cliente = %s
            ORDER BY nome
        )r$  entregadoresrz  FzErro ao listar entregadoresr#  r,  r   rf   r   r6   rg   r   r   rk   r  r  r  r]   )rm   rf   r@   r~  r  s        r/   listar_entregadoresr    s    DFz-[[.
 
 ]	 ((
  LLNJJL  ??   WlF#52OPQSVVV LLNJJL W
 LLNJJL s0   AB D3DDD DD 1D<z/api/delivery-pedidos-despachoc                     [         R                  " S5      n U (       d  [        SSS.5      S4$ SnSn [        5         [	        5       nUR                  SS9nUR                  S	U 45        UR                  5       =(       d    / nU H)  nUR                  S
5      c  M   [        US
   5      US
'   M+     [        SUS.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        [        4 a	    SUS
'    M  f = f! [        R                  R                   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)uf   Lista pedidos DELIVERY cujas linhas ativas estão todas em ABERTO (elegíveis para despacho → ROTA).r@   Fr"  r#  r&  NTr*  a  
            SELECT
                d.nropedido,
                MAX(NULLIF(TRIM(COALESCE(d.telefone, '')), '')) AS telefone,
                MAX(NULLIF(TRIM(COALESCE(d.cliente, '')), '')) AS cliente,
                MAX(NULLIF(TRIM(COALESCE(d.nome, '')), '')) AS nome,
                COALESCE(SUM(d.preco * d.quantidade), 0) AS total_valor,
                COUNT(*) AS linhas
            FROM pedido_diarios d
            WHERE d.id_cliente = %s
              AND d.origem = 'DELIVERY'
            GROUP BY d.nropedido
            HAVING SUM(CASE WHEN UPPER(COALESCE(d.status_pedido, '')) <> 'ITEM_REMOVIDO' THEN 1 ELSE 0 END) > 0
               AND SUM(
                    CASE
                      WHEN UPPER(COALESCE(d.status_pedido, '')) = 'ITEM_REMOVIDO' THEN 0
                      WHEN UPPER(COALESCE(d.status_pedido, '')) = 'ABERTO' THEN 0
                      ELSE 1
                    END
                ) = 0
            ORDER BY d.nropedido DESC
            total_valorrp  rL  z[DELIVERY_DESPACHO LIST]rS   r,  )r   r6   r   r	  r   rf   rg   r   r   r   r   rk   r  r  r  r]   r  r  r   )r@   rm   rn   r   r  ro   s         r/   api_delivery_pedidos_despachor    s    \*J52FGH#MMD
C-$&zkkTk*, M/	
2 ,,.&BAuu]#/+',Q}-='>Am$  4G<= IIKJJL  ":. +'*Am$+ ??   @(!485#a&9:C??IIKJJL @
 IIKJJL sT   A$D
 C.-D
 .DD
 DD
 
F(8F F!F FF 1Gz/api/despachar-deliveryc                  t   [         R                  " S5      n U (       d  [        SSS.5      S4$ [        R                  " SS9=(       d    0 n [        UR                  S5      =(       d    S	5      n [        UR                  S
5      =(       d    S	5      nUS	::  d  US	::  a  [        SSS.5      S4$ SnSn [        5         [        5       nUR                  5         UR                  SS9nUR                  SX045        UR                  5       cO  UR                  5         [        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       =(       d    0 n[        UR                  S5      =(       d    S	5      S	:  aO  UR                  5         [        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       =(       d    0 n[        UR                  S5      =(       d    S	5      S	::  aO  UR                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [!        U5      nUR                  SXU45        [#        US5      (       a  UR$                  OS	n	UR'                  5         [        SSU	S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [        [        4 a    S	n GNf = f! [        [        4 a    S	n GNf = f! [(        R*                  R,                   a  n
U(       a  UR                  5         [/        SU
SS9  [0        R2                  " 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)uc   Grava código do entregador (chave) e altera status_pedido para ROTA nas linhas DELIVERY em ABERTO.r@   Fr"  r#  r&  TrP  r~   r   codigo_entregadoru/   Informe nropedido e codigo_entregador válidos.r9  Nr*  zESELECT 1 FROM entregador WHERE chave = %s AND id_cliente = %s LIMIT 1u-   Entregador não encontrado para este cliente.r?  aB  
            SELECT COUNT(*) AS bad
            FROM pedido_diarios
            WHERE id_cliente = %s
              AND origem = 'DELIVERY'
              AND nropedido = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
              AND UPPER(COALESCE(status_pedido, '')) <> 'ABERTO'
            baduG   Pedido não está elegível (existem linhas que não estão em ABERTO).z
            SELECT COUNT(*) AS ok
            FROM pedido_diarios
            WHERE id_cliente = %s
              AND origem = 'DELIVERY'
              AND nropedido = %s
              AND UPPER(COALESCE(status_pedido, '')) = 'ABERTO'
            okz&Nenhuma linha ABERTO para este pedido.a   
            UPDATE pedido_diarios
            SET entregador = %s,
                status_pedido = 'ROTA'
            WHERE id_cliente = %s
              AND origem = 'DELIVERY'
              AND nropedido = %s
              AND UPPER(COALESCE(status_pedido, '')) = 'ABERTO'
            r  u1   Pedido despachado (ROTA) e entregador atribuído.)r$  r  linhas_atualizadasz[DESPACHAR_DELIVERY]rS   r,  )r   r6   r   r   rv  r   r   r   r	  r   rw  rf   rg   rh   rj   rk   r   hasattrr  ri   r  r  r  r]   r  r  )r@   bodyr~   r  rm   rn   row_badrow_ok
codigo_straffro   s              r/   api_despachar_deliveryr  $  s    \*J52FGH#MM4(.BD-23	)< = BC A~*a/52cdegjjjD
CT$&z kkTk*S+	
 <<>!MMOu6efgillJ IIKJJL K 	 #	
 ,,.&Bw{{5!&Q'!+MMO$e
 h IIKJJL _ 	 #
	
 %2vzz$$1%*MMOu6^_`bee> IIKJJL ? *+
 Y/	
 &c:66cllAO&)
 IIKJJL } z" 	 z" b ??   @MMO$at45#a&9:C??IIKJJL @ IIKJJL sk   #L* 0#M 4A6M A2M <A2M AM *M ?M MMP:AO>	P
P >PP 1P7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*  r@   z
            SELECT chave, nome, telefone, endereco
            FROM entregador
            WHERE chave = %s AND id_cliente = %s
        )r$  r   F   Entregador não encontrador#  r?  rz  zErro ao obter entregadorr,  r   rf   r   r6   rg   rh   r   rk   r  r  r  r]   r   rm   rf   r@   r   r  s         r/   obter_entregadorr    sG    DFz-[[.
   		" __&
(  LLNJJL  u6RSTVYY LLNJJL  ??   TlF#52LMNPSSS LLNJJL T
 LLNJJL s6   A&C C E9E	EE 	EE 1Fz"/api/editar-entregador/<int:chave>PUTc                    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 existenteNrA   r!   r}   r   Frw  r#  r9  r@   z
            UPDATE entregador 
            SET nome = %s, telefone = %s, endereco = %s
            WHERE chave = %s AND id_cliente = %s
        r   z[ENTREGADOR ATUALIZADO] rx  r   Try  z' atualizado com sucesso!r  r  r?  rz  zErro ao editar entregadorr,  )r   rJ  r6   r   r   rk   r   rf   r   rg   ri   r  r]   r  r  r  )	r   rm   rf   r  rA   r}   r   r@   r  s	            r/   editar_entregadorr    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*  r@   z@SELECT nome FROM entregador WHERE chave = %s AND id_cliente = %sFr  r#  r?  z;DELETE FROM entregador WHERE chave = %s AND id_cliente = %su   [ENTREGADOR EXCLUÍDO] rA   rx  r   ry  u   ' excluído com sucesso!r  rz  zErro ao excluir entregadorr,  r   rf   r   r6   rg   rh   r   rk   ri   r]   r  r  r  r  s         r/   excluir_entregadorr    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 7   A(D AD F8FFF FF 1Gz/cadastrar-classificacaoc                  |    [         R                  " S5      n [        U 5      nUR                  SS5      n[        SXS9$ )u'   Página de cadastro de classificaçõesr@   rA   rB   zcadastrar_classificacao.htmlrC   rE   rF   s      r/   cadastrar_classificacaor    s:     \*J!*-JNN6<8M9jnnr.   z/api/salvar-classificacaoc                  8   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R                  S5      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      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UUUUb'  [        U5      R                  5       R                  5       OSUUU	U
UU4
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çãoNnomeclassificacaor!   quantidadepartesnrofotorc  op_tamanhos	op_massas	op_bordasop_coberturasop_adicionaisF'   Nome da classificação é obrigatórior  r9  r@   z
            INSERT INTO classificacao (nomeclassificacao, quantidadepartes, nrofoto, formadecobrar, op_tamanhos, op_massas, op_bordas, op_coberturas, op_adicionais, id_cliente)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        u   [CLASSIFICAÇÃO CADASTRADA] rx  r   T   Classificação 'z' cadastrada com sucesso!rz  u0   Erro ao salvar classificação no banco de dadosr,  )r   rJ  r6   r   r   rk   r   rf   r   rg   r   r   ri   r  r]   r  r  r  )rm   rf   r  r  r  r  rc  r  r  r  r  r  r@   r{  r  s                  r/   salvar_classificacaor    sJ    DF4"!II&92>DDF 99%78))I&		/2ii.IIk*	IIk*			/2		/2 u:cdegjjH LLNJJL I z[[.
  3@3LS%%'--/RV
	  	''-.?-@L>YZ[\+,=+>>WX
  LLNJJL  ??   plF#56hijlooo LLNJJL p
 LLNJJL s7   CG2 B5G2 2I%I +I%,I(  I%%I( (1J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*  r@   a  
            SELECT chave, nomeclassificacao, quantidadepartes, nrofoto, formadecobrar,
                   op_tamanhos, op_massas, op_bordas, op_coberturas, op_adicionais
            FROM classificacao
            WHERE id_cliente = %s
            ORDER BY nomeclassificacao
        zQSELECT produto AS nome, preco FROM produtos WHERE classe = %s AND id_cliente = %sr  rF  rz  Fu   Erro ao listar classificaçõesr  r,  r  )rm   rf   r@   classificacoesclassifrF  r  s          r/   listar_classificacoesr  P  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*  r@   a  
            SELECT chave, nomeclassificacao, quantidadepartes, nrofoto, formadecobrar,
                   op_tamanhos, op_massas, op_bordas, op_coberturas, op_adicionais
            FROM classificacao
            WHERE chave = %s AND id_cliente = %s
        F   Classificação não encontradar  r?  rz  u   Erro ao obter classificaçãor,  r  r   rm   rf   r@   classificacaor  s         r/   obter_classificacaor  q  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R                  S5      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      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UUUUb'  [        U5      R                  5       R                  5       OSUU	U
UUU 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!   r  r  rc  r  r  r  r  r  Fr  r  r9  r@   a  
            UPDATE classificacao 
            SET nomeclassificacao = %s,
                quantidadepartes = %s,
                nrofoto = %s,
                formadecobrar = %s,
                op_tamanhos = %s,
                op_massas = %s,
                op_bordas = %s,
                op_coberturas = %s,
                op_adicionais = %s
            WHERE chave = %s AND id_cliente = %s
        r   u   [CLASSIFICAÇÃO ATUALIZADA] rx  r   Tr  z' atualizada com sucesso!r  r?  rz  u   Erro ao editar classificaçãor,  )r   rJ  r6   r   r   rk   r   rf   r   rg   r   r   ri   r  r]   r  r  r  )r   rm   rf   r  r  r  r  rc  r  r  r  r  r  r@   r  s                  r/   editar_classificacaor    s    DF@"!II&92>DDF 99%78))I&		/2ii.IIk*	IIk*			/2		/2 u:cdegjj` LLNJJL a z[[.
  3@3LS%%'--/RV
	4 	??Q12C1DKPUwVWXY/0A/BB[\  LLNJJL  u:[\]_bb LLNJJL  ??   ^lF#56VWXZ]]] LLNJJL ^
 LLNJJL s=   CH6 B:H6 7H6 6J)J$/J)0J, $J))J, ,1K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*  r@   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  rx  r   r  u   ' excluída com sucesso!rz  u   Erro ao excluir classificaçãor#  r,  r  r  s         r/   excluir_classificacaor    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  z/dados-lojac                  |    [         R                  " S5      n [        U 5      nUR                  SS5      n[        SXS9$ )u%   Página de cadastro dos dados da lojar@   rA   rB   zdados_loja.htmlrC   rE   rF   s      r/   rG   rG     rq  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 lojaNrA   r!   r   rC  rF  r   r}   cnpjr  r  r	  r@   F%   id_cliente não encontrado na sessãor#  r9  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 = %srY  Tz Dados da loja salvos com sucessor  
[ERRO DB] r,  [ERRO] )r   rJ  r6   r   r   rk   r   rf   rg   rh   ri   r  r  r  r]   r   r\   )rm   rf   r  rA   r   rC  rF  r   r}   r  r  r  r	  r@   existeexiste_contadorro   s                    r/   salvar_dados_lojar    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[        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 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*  r@   z5SELECT * FROM dadosloja WHERE id_cliente = %s LIMIT 1r$  r  r  Fr#  r,  r   rf   r   r6   rg   rh   r   rk   r  r  r  r]   r   )rm   rf   r@   r  ro   s        r/   buscar_dados_lojar  O  s7    DFz-[[.
NQ[P]^!te<= LLNJJL  td;< LLNJJL  ??   @
1#5#a&9:C??LLNJJL @ LLNJJL s6   A&C C E7&EEE EE 1Fz/cadastrar-taxac                  |    [         R                  " S5      n [        U 5      nUR                  SS5      n[        SXS9$ )u'   Página de cadastro de taxas de entregar@   rA   rB   zcadastrar_taxa.htmlrC   rE   rF   s      r/   cadastrar_taxar  l  s:     \*J!*-JNN6<8M0Zeer.   z/api/dados-loja-infoc                       [         R                  " S5      n [        U 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çãor@   Tr  r  Fr#  r,  N)r   r6   r   r   r\   r]   r   )r@   r  ro   s      r/   dados_loja_infor  u  si    @[[.
 ,4%899 @sm5#a&9:C??@s   .1 
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   r   r@   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  rz  Fr#  r,  )r   rJ  r6   r   r}  r   r   rf   rg   rh   rW   r   r]   r   ri   r   rk   r  r  r  r   )rm   rf   r  r   r@   camposvaloresrl  r  r  r  sqlcampos_insertplaceholdersvalores_insertr  s                   r/   salvar_taxar    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*  r@   r  )r$  r  rz  Fr#  r,  r  )rm   rf   r@   r  r  s        r/   
obter_taxar    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*  r@   z<SELECT faixa1_v FROM txentrega WHERE id_cliente = %s LIMIT 1r  )r$  taxa_padraor   r  Fr#  r,  )r   rf   r   r6   rg   rh   r   r   rk   r  r  r  r]   r   )rm   rf   r@   r  ro   s        r/   buscar_taxa_padraor    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*  r@   u-   [BUSCAR CONFIG DEBUG] id_cliente da sessão: z (tipo: r   LSELECT * FROM configuracao WHERE id_cliente = %s ORDER BY chave DESC LIMIT 1z![BUSCAR CONFIG DEBUG] Resultado: )r$  configr  Fr#  r,  )r   rf   r   r6   r]   r  rg   rh   r   rk   r  r  r  r   )rm   rf   r@   r  ro   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r  r3  copias
origem_tagc           	         XU=(       d    SSS.n[        [        S[        U=(       d    S5      5      5       Hd  n [        R                  " U R                  5       USS9nUR                  S:  d  M:  SS	UR                   S
UR                  =(       d    SSS  34s  $    g! [        R                   a  nS[        U5      4s SnAs  $ SnAff = f)u:   Envia conteúdo ao serviço de impressão em URL (bridge).r]   r   )r3  textor   r  #   )rJ  r=  FNr9  zHTTP r  r!   r/  )
r}  r|  r   rH  postr   RequestExceptionr   rI  text)r  r3  r  r  r  _ird  excs           r/   _impressao_http_caminhor     s     z?TW`abDC3v{+,-	#==4DD s"E$"2"2!32tyyB6M5NOOO . 	 (( 	##c(?"	#s   $B  C4C CCz	/imprimirc                     [         R                  =(       d    0 n [        U R                  SS5      =(       d    S5      R	                  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S;   nU R                  SS5      n [        U R                  SS	5      =(       d    S	5      n [        U R                  S
S5      5      nUS:  d  US:  a  [        SSS.5      S4$ U(       d  [        SSS.5      S4$ Uc  / n[        U[        5      (       d  [        SSS.5      S4$ Sn	U R                  S5      n
U
Gb;  [        U
5      R	                  5       S:w  Ga   [        U
5      n[        5       nUR                  SS9nUR                  S5        UR                  5       SLnU(       a  UR                  SU45        OUR                  SU45        UR                  5       nUR!                  5         UR!                  5         U(       d  [        SSS.5      S4$ UR                  S5      =(       d    SR	                  5       nUR                  S5      =(       d    SR	                  5       nU(       d  U(       d  [        SSS.5      S4$ UR                  5       nUR#                  S 5      (       d  UR#                  S!5      (       a  US"-   n[%        UUX=(       d    S#5      u  nnU(       d  [        SUU=(       d    US$.5      S%4$ [         R&                  R                  S&5      S':X  d  [         R(                  (       a  [        SU=(       d    UUS(S).5      $ [+        S*5      $ U=(       d    UR	                  5       nS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(       d	  US/U S"3-  nUS"-  nU(       a  US0:w  a  U(       d   [1        XU5        US4:X  d  [9        U R                  S55      5      (       a  S5OSn[        [;        US69=(       d    S5      R	                  5       nU	(       a  U(       a  UnGO&U=(       d?    U=(       d6    [<        R>                  S7:X  a   [@        (       a  [@        RB                  " 5       OSnU(       an  [E        5       nU(       a\  UR                  5       U Vs1 s H  nUR                  5       iM     sn;  a)  [G        UU5      nU(       d  [        SS8U 3US9.5      S4$ UnOi[E        5       nU(       aX  U(       aQ  [        U5      R                  5       U Vs1 s H  nUR                  5       iM     sn;  a  [G        UU5      nU(       a  Un[        5       nUR                  SS9n[H        R                  " S:5      nUR                  S;U45        UR                  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R!                  5         U(       a  UR!                  5         [-        S>U S?35        / n$[K        U5       HJ  n%[M        UUU!5      u  n&n'U&(       a  M  U$RO                  S@U%S-    SAU' 35        [-        SBU%S-    SCU' 35        ML     U$(       a   [        SSDRQ                  U$5      US$.5      S34$ US0:X  a  US	:  a  U(       d  Sn(Sn) [        5       n(U(R                  5       n)[H        R                  " S:5      nU)R                  SEUU45        U(RS                  5         U)(       a  U)R!                  5         U((       a  U(R!                  5         [         R&                  R                  S&5      S':X  d  [         R(                  (       a  [        SUUSH.5      $ [+        S*5      $ ! [        [        4 a    S	n GN7f = f! [        [        4 a    [        SSS.5      S4s $ f = f! [        [        4 a    [        SSS.5      S4s $ f = f! [2         a=  n[-        S1U 35        [4        R6                  " 5         [        SS2S.5      S34s SnA$ SnAff = fs  snf s  snf ! [2         aD  nU((       a  U(RU                  5         [-        SFU 3SSG9  [4        R6                  " 5          SnAGNSnAff = f! U)(       a  U)R!                  5         U((       a  U(R!                  5         f f = f)Iu   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.
r3  r!   printerrF  r   )fechamento_caixa
fechamentor4  r~   r   r  r   Fu   Número de cópias inválido.r#  r9  r@  u*   Número de cópias deve estar entre 1 e 5.u   Conteúdo de impressão vazio.Nu   Lista de produtos inválida.impressora_idu   impressora_id inválido.Tr*  r  zgSELECT id, nomedaimpressora, TRIM(COALESCE(caminho,'')) AS caminho FROM impressoras WHERE id=%s LIMIT 1zOSELECT id, nomedaimpressora, '' AS caminho FROM impressoras WHERE id=%s LIMIT 1u&   Impressora cadastrada não encontrada.r>  nomedaimpressoraz.Cadastro da impressora sem nome e sem caminho.zhttp://zhttps://rL   r]   r$  r%  r  i  zX-Requested-WithXMLHttpRequesthttp_caminho)r$  r  r  viar  z"[IMPRESSAO DEBUG] Dados recebidos:z  - copias (raw): z  - copias (type): z  - copias (convertido): zFORMA DE PAGAMENTO: rl  rD  z"Falha ao gravar delivery pendente.r,  r  r  )r  r  u*   Impressora informada não foi encontrada: )r$  r%  impressoras_disponiveisr@   r  imp_comandadelivery	marca_impz[IMPRESSAO] Imprimindo u    cópia(s)...u   Cópia r  u   [IMPRESSAO ERRO] Cópia z	 falhou: z; aF  
                    UPDATE pedido_diarios
                    SET status_pedido = 'ABERTO'
                    WHERE nropedido = %s
                      AND id_cliente = %s
                      AND origem IN ('DELIVERY','BALCAO')
                      AND UPPER(COALESCE(status_pedido, '')) = 'AGUARDE'
                    z[IMPRESSAO STATUS_PEDIDO ERRO] rS   )r$  r  r  )+r   rJ  r   r6   r   r{  r   r   r   r   r  rz  r   rf   rg   rh   rk   rx  r  r5   is_jsonr   r]   r  rQ  r\   r  r  ry  r  r  r  r  r0  r$  r	  r   r}  rA  r   rW   ri   rj   )*r  r3  printer_paramrF  r   	origem_fcr4  r~   r  skip_printer_enum_checkimpressora_id_rawiidconn_impcur_imphas_caminho_colrow_imp	caminho_vnome_vclconteudo_httpok_httperr_httpro   r  
printer_dbprinter_resolvedr<  r   r=  rm   rf   r@   r  r:  nro_impcampo_marcaerrosrl  r  errconn_status
cur_statuss*                                             r/   imprimirr	  -  s    LLBE599Z,2399;H		)R06B7==?MyyR(Hii!'R..0668F<<Iii 126O		+q16Q7	YUYYx+, zVaZ52^_`beee52RSTVYYYh%%52PQRTWWW#		/2$->)?)E)E)G2)M	X'(C ://T/2FG!**,D8OOy
 OOa ""$u6^_`beee[[+1r88:	++017R>>@u6fghjmmm__==##r}}Z'@'@$tOM 7	=RXZkdk lGX5(vObYbcdfiii""#56:JJgoo4F<Oi[ajxyzzC= ",f335"&	.0	uyy23
45	UYYx%8 9:
;<	%fX
./ y*?*;2>> H
 Ff$Y	b$XI %.$uyy7N2O2OlUYG(9?R@FFHJ=((  QJ  Q^a^j^jnu^u  {E  {E:;W;W;Y  LP13K}224P[<\P[1QWWYP[<\\1-M"#("L]O \3>$  	 
 $* 13K/C8H4I4O4O4QmxYymxhiZ[ZaZaZcmxYy4y12BKP'-$ :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 V	AiKJ(&j(//1
$[[6
"" 
+
 ""$ $$&%%' ??126FF'//t8HTZ[\\}S z" 	 z" Y52QRSUXXXY  :& 	Xu6PQRTWWW	Xn  	b-aS12!u6Z[\^aaa	b =] Zzl  &((*7s;4H##%%	& $$&%%' s   $`$ `= 1a# b	 =c;cAc $`:9`:= a a # bb	
c2ccc
d+'9d& d. &d++d. .1e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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(   *** TESTE DE IMPRESSÃO - NOVALOJA ***
T)r$  r  Fr  r,  )r   r   r-  r6   r   r  r  r  r  r0  rA  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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  r0  r\   r   )r  default_names     r/   r  r    s\     $%EL
||w::	 %779L tERSS  	 L	 s   A AAz/api/impressoras-cadastroc                     Sn Sn [        5       n U R                  SS9nUR                  S5        UR                  5       SLnU(       a  UR                  S5        OUR                  S5        UR	                  5       =(       d    / n[        SUS.5      U(       a  UR                  5         U (       a  U R                  5         $ $ ! [         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)zNImpressoras cadastradas na tabela impressoras (nome + caminho quando existir).NTr*  r  z
                SELECT id, nomedaimpressora, TRIM(COALESCE(caminho,'')) AS caminho
                FROM impressoras
                ORDER BY COALESCE(imprenro,0) DESC, nomedaimpressora
                z
                SELECT id, nomedaimpressora, '' AS caminho
                FROM impressoras
                ORDER BY COALESCE(imprenro,0) DESC, nomedaimpressora
                )r$  r  z[IMPRESSORAS CADASTRO]rS   Fr#  r,  )r   rf   rg   rh   r   r   rk   r\   r]   r  r  r   )rm   rn   r  r   ro   s        r/   api_impressoras_cadastror    s/    D
CzkkTk*BCllnD0KK KK ||~#4=> IIKJJL   @&65#a&9:C??IIKJJL @
 IIKJJL s0   BC 
D>8D9D>E 9D>>E 1E2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 deliverypendenter3  r!   rF  F   Conteúdo vazior#  r9  pedido_impressaorD  Nr$  Tu   [PREPARAR IMPRESSÃO ERRO]r,  )r   rJ  r6   r   r   rQ  r\   r]   r  r  r   )r  r3  rF  ro   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[        U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.r@   rA   rB   zvisualizar_pedido.html)r3  r@   rD   rE   )r3  r@   rG   rD   s       r/   visualizar_pedidor  H  sV     {{-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      =(       d    S5      R                  5       nUR                  S	/ 5      nUc  / n[        U[        5      (       d  [        S
SS.5      S4$ 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.                  R1                  SU
5      nUR3                  XS9nU u  pUR5                  SS5        UR7                  S5      nUS-
  nU HH  nUS:  a'  UR9                  5         UR5                  SS5        US-
  nUR;                  SUU5        US-  nMJ     UR=                  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
[        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r   r3  r!   rF  Fu   Lista de produtos inválidar#  r9  r  rD  z%Y%m%d_%H%M%Sr,  z.pdfc:\novaloja1\pedidos)pagesizeCourier
   rL   (      Tz	/pedidos/)r$  rA  caminho_completoz[GERAR PDF ERRO]r,  )reportlab.lib.pagesizesr  reportlab.pdfgenr  reportlab.lib.unitsr  rU   r   r   rJ  r   r6   r   r  rz  r   rQ  r\   r]   r  r  nowrY   rV   rW   CanvassetFontrE  showPage
drawStringsave)r  r  r  rU   r   r  r3  rF  ro   	timestampr7  r$  r  larguraalturar0  yrG  s                     r/   	gerar_pdfr2  T  s   =@.+*%"uyyR06B7==?99Z,H(D))u6STUWZZZ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??@sU   B"G7 %G7 <G7 F< C,G7 <
G4#G/)G7 /G44G7 7
I9I :I I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*  r@   zrSELECT chave, nomeclassificacao, quantidadepartes, nrofoto AS nro_da_foto FROM classificacao WHERE id_cliente = %sr   r  nro_da_fotoz/static/img/z.jpegr!   r  r   )rA  r   rA   r|  z[CARROSSEL] imagens montadas:[WARN] falha ao fechar cursor:"   [WARN] falha ao fechar conexÃ£o:rz  Erro de banco de dadosr%  detalhesr,  [ERROR]Erro interno no servidor)r   rf   r   r6   rg   r   r   r   r   r]   r   r\   r   rk   r  r  r  r  r  )rm   rf   r@   r0  imagensr   r   r  r   rA  ro   r  s               r/   carrossel_imagensr=    sL    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'.rA   Nr5  r6  Tr*  z=SELECT produto, preco, classe FROM produtos WHERE classe = %srz  r7  r8  r,  r:  r;  )r   r-  r6   r   rk   r\   r]   r   rf   rg   r   r  r  r  r  r  r  r   )rA   rm   rf   ro   
resultadosr   r  s          r/   _produtos_filtrar_legacyrA    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?  rA   Nr5  r6  Tr*  r@   zXSELECT produto, preco, classe, chave FROM produtos WHERE classe = %s AND id_cliente = %srz  r7  r8  r,  r:  r;  )r   r-  r6   r   rk   r\   r]   r   rf   r   rg   r   r  r  r  r  r  r  r   )rA   rm   rf   ro   r@   r@  r   r  s           r/   produtos_filtrarrC    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: r@   z<SELECT * FROM produtos WHERE classe = %s AND id_cliente = %sr5  r6  u   Produto nÃ£o encontrado)r%  r   r?  rz  r7  r8  r,  r:  r;  )r   rf   r]   r   r6   rg   rh   r   r   r  r   rk   r\   r  r  r  r  r  r   )r   rm   rf   r@   	resultadoro   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S
R                  S [        U 5       5       5      nUR                  SU45        UR                  5       =(       d    / nS nU Hz  nS
R                  S [        UR                  S5      =(       d    S
5       5       5      n	U	(       d  ME  X:X  d.  U	R                  U5      (       d  UR                  U	5      (       d  Mx  Un  O   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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! [
         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 fornecidor9  r5      [WARN] falha ao fechar conexão:Tr*  r@   r!   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   !buscar_cliente.<locals>.<genexpr>]  s     H-B::<RR-r{   zKSELECT * FROM clientes WHERE id_cliente = %s ORDER BY chave DESC LIMIT 1500c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7frs   rt   rv   s     r/   ry   rI  b  s     Y*HBJJLRR*Hr{   u   Cliente não encontrador?  rz  r7  r8  r,  r:  r;  )r   r-  r6   r   rk   r\   r]   r   rf   r   rW   r   rg   r   r   r  r  r  r  r  r  )r}   rm   rf   ro   r@   r   r   rE  r   r   r  s              r/   buscar_clienterK  P  s    ||
+HDF-9F$=>?DD	7	9

 M z-[[.
WWH#h-HH
dgqfst &B	CWWY#cggj.A.GR*HYYF#vz'B'BjFYFYZ`FaFa	  %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  K G8H,C4K $"K H?I"8K JJ(8
HHH
H<&H77H<?
I	II"
J,I==J
J%J  J%(
K2KKQ))9N "Q)#Q, (M  
M 
MM $M==
NNN Q)-9Q$&Q)'Q, ,P
P$PP$(Q
Q!QQ!$Q))Q, ,S&.RS&
R&R!S&!R&&S&*SS&
S#SS&S##S&z/forma-cobrarc                     [         R                  R                  SS5      n 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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)NrA   r!   Tr*  r@   zXSELECT formadecobrar FROM classificacao WHERE nomeclassificacao = %s AND id_cliente = %src  r  r5  rG  normalrz  r7  r8  r,  r:  r;  )r   r-  r6   r   rf   r   rg   rh   r   r   r{  r   r   rk   r\   r]   r  r  r  r  r  )rA   rm   rf   r@   rE  r  ro   r  s           r/   forma_cobrarrN    sF    <<FB'DDF%9z-[[.
f	
 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  B5G E4E.G F2F4
E+E&&E+.
F8F		F
F1F,,F14
G>GGM559J,.M5/M8 4I
I,I''I,0J		
J)J$$J),M599M02M53M8 8L
L0L++L04M
M-M((M-0M55M8 8O2:NO2
N2N-(O2-N22O26OO2
O/O*%O2*O//O2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(       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UR                  SXR45        UnOUR                  SU45        SnU R                  5         [	        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         O! [         a     Of = f[	        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*  r@   r%  r  r9  r5  rG  9SELECT contador FROM contadorpedido WHERE id_cliente = %srW  r   rX  rY  numerorz  r7  r8  r,  r:  r;  )r   rf   r   r6   r   rk   r\   r]   rg   rh   ri   r  r  r  r  r  rj   r   )rm   rf   r@   ro   rE  r  rQ  r  s           r/   proximo_pedidorR    sk    DF29z-[[.
F$KLMsRF	7	9

 M 	RU_TabOO%	#J/!3KNNZ]h\uv F NN]`j_lmF&)*$	7	9

   	72A66	7
  	94a88	9  	72A66	7
  	94a88	91 ??   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F3 D'#E
<A9F3 6E-F'
E1EE

E*E%%E*-
F7FF
F0F++F03M:(J1:H
J1
HJ1HJ13M:4M= 9I
I1I,,I15J
J.J))J.1M:>9M57M:8M= =L
L5L00L59M
M2M--M25M::M= =O7?NO7
N7!N2-O72N77O7;OO7
O4O/*O7/O44O7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*  r@   r%  r  r9  r5  rG  rP  rW  r   rQ  rz  r7  r8  r,  r:  r;  )r   rf   r   r6   r   rk   r\   r]   rg   rh   r  r  r  r  r  rj   r   )rm   rf   r@   ro   rE  rQ  r  s          r/   numero_pedido_atualrT    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*  a5  
            SELECT 
                MIN(COALESCE(nrolancamento, chave)) as chave,
                nropedido,
                telefone,
                cep,
                nome,
                endereco,
                nrocasa,
                complemento,
                MAX(entregador) as entregador,
                SUM(CAST(preco AS DECIMAL(10,2)) * CAST(quantidade AS DECIMAL(10,3))) as total_preco,
                COUNT(*) as total_produtos
            FROM pedido_diarios
            WHERE id_cliente = %s
              AND origem = 'DELIVERY'
              AND UPPER(COALESCE(status_pedido, '')) = 'AGUARDE'
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
            GROUP BY nropedido, telefone, cep, nome, endereco, nrocasa, complemento
            ORDER BY MIN(chave) DESC
        r@   )r$  r1  r  r5  rG  rz  r7  r8  r,  r:  r;  )r   rf   rg   r   r6   r   r  r   r   rk   r\   r]   r  r  r  r  r  r   )rm   rf   r  r   ro   r  s         r/   listar_delivery_pendenterV     s    DF8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         $ $ [        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UR                  SXCU4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NnS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NnS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NXS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)z<Atribui um entregador a um pedido na tabela deliverypendenteNr~   r   r!   r%  !   Número do pedido é obrigatórior9  r5  rG  u"   Nome do entregador é obrigatórior@   r  z
            UPDATE pedido_diarios
            SET entregador = %s
            WHERE nropedido = %s AND id_cliente = %s AND origem = 'DELIVERY'
            z[ENTREGADOR] u    atribuído ao pedido TzEntregador r  rz  r7  r8  r,  r:  r;  )r   rJ  r6   r   r   rk   r\   r]   r   r   rf   rg   ri   r  r  r  r  r  r   )rm   rf   r  r~   r   ro   r@   r  s           r/   atribuir_entregadorrY  _  s\    DF99"IIk*	YY|R0668
F$GHI3NT	7	9

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

 W [[.
F$KLMsRF	7	9

 O z 	
 J/	
 	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  	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K+ &G>G3K+ -HH:+K+ 
I"J;A"K+ J$6K
G0G++G03
H=HH
H7 H22H7:
III
I>'I99I>
J!JJ!$
K.K  K
K(K##K(+R		9O R	R M  
N *M;;N N
N='N88N= R	9RR	R P$$
Q.P??QQ!!
R+Q<<RR		R TR&%T&
S0S<TST
S#!T#
T-S>9T>TT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 comandar1  r   )r$  colunastotal_registrosrz  Fr#  r,  )r   rf   rg   r   rh   r   rk   r  r  r  r]   r   )rm   rf   r[  r1  r  s        r/   diagnostico_comandar]    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         $ $ [        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X54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         $ $ 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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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! [        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)zDTransfere um pedido de pedido_diarios para comanda (fecha a comanda)Nr~   r%  rX  r9  r5  rG  r@   r  Tr*  a  
            SELECT entregador
            FROM pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem = 'DELIVERY'
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
            ORDER BY chave DESC
            LIMIT 1
            rb  r?  r   r!   u=   Não é possível fechar a comanda sem atribuir um entregadorae  
            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 pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem = 'DELIVERY'
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
        
            DELETE FROM pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem = 'DELIVERY'
            z[FECHAR COMANDA] Pedido z transferido para comanda ( registros)zComanda do pedido z fechada com sucessor$  r  registros_transferidosrz  Fr#  r,  r:  )r   rJ  r6   r   rk   r\   r]   r   r   rf   rg   rh   r   r  ri   r  r  r  r  r  r   )
rm   rf   r  r~   ro   r@   rE  r   rb  r  s
             r/   fechar_comandarc    s6    DF]9"IIk*	F$GHI3N^	7	9

 g [[.
F$KLMsRV	7	9

 _ z- 	 #
	
 OO%	F$<=>Cl	7	9

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

 i 		 #	
 "( 	 #	
 	(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  	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  ?N? IJ 7+N? #J#;KAN? &K*>L;N? L1+MA&N? +M8N
I=&I88I= 
J 
JJ #
K-J??K
K'K""K'*
L4LL
L.L))L.1
M;MM
M5M00M58
NNN
N<&N77N<?U9RUU  P44
Q>QQQ11
R;RRU!9UUU   S88
TTTT55
U?UUUU   W"U:9W:
VVWVWV75W7
WWWWW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         $ $ [        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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GNES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)z5Transfere um pedido de pedido_diarios para canceladasNr~   r%  rX  r9  r5  rG  r@   r  aL  
            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 pedido_diarios
            WHERE nropedido = %s AND id_cliente = %s AND origem = 'DELIVERY'
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
            r_  z[CANCELAR PEDIDO] Pedido z transferido para canceladas (r`  TzPedido z cancelado com sucessora  rz  Fr#  r,  r:  )r   rJ  r6   r   rk   r\   r]   r   r   rf   rg   r  ri   r  r  r  r  r  r   )rm   rf   r  r~   ro   r@   rb  r  s           r/   cancelar_pedidore  %  s    DFF9"IIk*	F$GHI3Np	7	9

 y [[.
F$KLMsRh	7	9

 q 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  	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  ?I FF*7+I #G;G1B I H-H7
F'F""F'*
G
4GG

G.G))G.1
H;HH
H4H//H47
IIIO889L/1O82O; 7K
K/K**K/3L
L,L''L,/O8<9O35O86O; ;N
N3N..N37O
O0O++O03O88O; ;Q5=PQ5
P5P0+Q50P55Q59QQ5
Q2Q-(Q5-Q22Q5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[#        X5      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)=NrL   rM   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%  r  r9  r5  rG  Tr*  r@   zMSELECT calculodistancia FROM configuracao WHERE chave = 1 AND id_cliente = %scalculodistanciaSim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 = %srA   r!   r   r   r   r  rC  rF  rG  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 sucessorz  r7  r8  r,  r:  r;  )r   rJ  r]   r6   r  r   rk   r\   r   rf   r   rg   rh   r   r{  r   r  r  ri   r  r  r  r  r  r  rj   r   )rm   rf   r  r}   ro   r@   r  calculo_habilitadocalculo_distdistancia_brutadistancia_calcr  r  distancia_finaltaxa_entregacliente_existentetem_lat_lontem_cepr  r  r  s                        r/   salvar_clienterv  r  s7    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ML;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*  r@   z+SELECT * FROM comanda WHERE id_cliente = %sr$  r  rz  Fr7  r#  r,  r:  r;  r   rf   r   r6   rg   r   r   rk   r  r  r  r]   r\   rm   rf   r@   r  r  ro   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*  r@   z.SELECT * FROM canceladas WHERE id_cliente = %srx  rz  Fr7  r#  r,  r:  r;  ry  rz  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  rz  Fr7  )r$  r%  r9  r,  r:  zErro interno)r   rf   rg   rh   r]   r   rk   r  r  r  r   r\   )rm   rf   r  ro   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  rz  Fr#  r,  )r   rf   rg   rh   ri   r]   r   rk   r  r  r  r   )rm   rf   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  rz  Fr#  r,  )r   rf   rg   r  ri   r]   r   rk   r  r  r  r   )rm   rf   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[  rz  Fr#  r,  )r   rf   rg   r   r   rk   r  r  r  r]   r   )rm   rf   r[  r  s       r/   verificar_estrutura_produtosr  F  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/fechamento/previewc                      [         R                  " S5      n U (       d  [        SSS.5      S4$ [        R                  " SS9=(       d    0 n[        UR                  S5      =(       d    S	5      R                  5       n[        UR                  S
5      =(       d    S	5      R                  5       n[        [        U 5      X#5      n[        U5      $ ! [         a#  n[        S[        U5      S.5      S4s SnA$ SnAf[         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)zFResumo de linhas RECEBIDO/ITEM_REMOVIDO no intervalo (pedido_diarios).r@   F.   Sessão inválida: id_cliente não encontrado.r#  r&  TrP  data_inicior!   data_fimr9  Nz[FECHAMENTO PREVIEW]rS   r,  )r   r6   r   r   rv  r   r   r   r   r   r\   r]   r  r  r@   r   didfr   vero   s          r/   api_fechamento_previewr  `  s   @[[.
u6fghjmmmt,2-(.B/557*%+,224 Z"9s| A5#b':;S@@ @$at45#a&9:C??@5   ,C BC 
EC60E6E8E;EEz!/api/fechamento/resumo-financeiroc                      [         R                  " S5      n U (       d  [        SSS.5      S4$ [        R                  " SS9=(       d    0 n[        UR                  S5      =(       d    S	5      R                  5       n[        UR                  S
5      =(       d    S	5      R                  5       n[        [        U 5      X#5      n[        U5      $ ! [         a#  n[        S[        U5      S.5      S4s SnA$ SnAf[         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)uL   Totais por status e forma de pagamento no período (RECEBIDO/ITEM_REMOVIDO).r@   Fr  r#  r&  TrP  r  r!   r  r9  Nz[FECHAMENTO RESUMO FINANCEIRO]rS   r,  )r   r6   r   r   rv  r   r   r   r   r   r\   r]   r  r  r  s          r/    api_fechamento_resumo_financeiror  u  s   @[[.
u6fghjmmmt,2-(.B/557*%+,224*3z?BCs| A5#b':;S@@ @.>5#a&9:C??@r  z#/api/fechamento/relatorio-gerencialc                      [         R                  " S5      n U (       d  [        SSS.5      S4$ [        R                  " SS9=(       d    0 n[        UR                  S5      =(       d    S	5      R                  5       n[        UR                  S
5      =(       d    S	5      R                  5       n[        [        U 5      X#5      n[        U5      $ ! [         a#  n[        S[        U5      S.5      S4s SnA$ SnAf[         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)uk   Prestação de contas: canais, pagamentos (JSON baixa), cancelamentos, produtos, horários, clientes novos.r@   Fr  r#  r&  TrP  r  r!   r  r9  Nz [FECHAMENTO RELATORIO GERENCIAL]rS   r,  )r   r6   r   r   rv  r   r   r   r   r   r\   r]   r  r  r  s          r/   "api_fechamento_relatorio_gerencialr    s   @[[.
u6fghjmmmt,2-(.B/557*%+,224)#j/2Bs| A5#b':;S@@ @0!4@5#a&9:C??@r  z/api/fechamento/executarc                      [         R                  " S5      n U (       d  [        SSS.5      S4$ [        R                  " SS9=(       d    0 n[        UR                  S5      =(       d    S	5      R                  5       n[        UR                  S
5      =(       d    S	5      R                  5       n[        [        U 5      X#5      nUR                  S5      (       d  [        U5      S4$ [        U5      $ ! [         a#  n[        S[        U5      S.5      S4s SnA$ SnAf[         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)uF   Arquiva em pedido_periodos, remove do diário e grava relatório .txt.r@   Fr  r#  r&  TrP  r  r!   r  r$  r9  Nz[FECHAMENTO EXECUTAR]rS   r,  )r   r6   r   r   rv  r   r   r   r   r   r\   r]   r  r  r  s          r/   api_fechamento_executarr    s&   @[[.
u6fghjmmmt,2-(.B/557*%+,224!#j/2:wwy!!3<$$s| A5#b':;S@@ @%q55#a&9:C??@s;   ,C1 B6C1 &
C1 1
E);DE)E)&8E$E)$E)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*  r@   4  
            SELECT COUNT(DISTINCT nropedido) as total
            FROM pedido_diarios
            WHERE id_cliente = %s
              AND origem = 'DELIVERY'
              AND UPPER(COALESCE(status_pedido, '')) = 'AGUARDE'
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
            r1  r   r  r1  rz  Fr  r1  r%  r,  r  rm   rf   r@   rE  r1  r  s         r/   verificar_delivery_pendenter    s&    DF!z- [[.
 M
	
 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[        R                  " S5      nUR	                  SU45        UR                  5       nU(       a  US   OSnUR	                  SU45        U R                  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@   r  r   a  
            DELETE FROM pedido_diarios
            WHERE id_cliente = %s
              AND origem = 'DELIVERY'
              AND UPPER(COALESCE(status_pedido, '')) = 'AGUARDE'
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
            Tz" pedido(s) deletado(s) com sucesso)r$  registros_deletadosr  rz  Fr  r,  )r   rf   r   r6   rg   rh   ri   r   rk   r  r  r  r]   r   )rm   rf   r@   rE  pedidos_deletadosr  s         r/   limpar_delivery_pendenter    sS    DF1z[[.
 M
	
 OO%	,5IaL1 M		
 	#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*  r@   LSELECT COUNT(DISTINCT nropedido) as total FROM comanda WHERE id_cliente = %sr1  r   r  rz  Fr  r,  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[        R                  " S5      nUR	                  SU45        UR                  5       nU(       a  US   OSnUS:  a&  UR	                  SU45        UR	                  SU45        [        SU 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 contadorNr@   r  r   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: rP  z[RESET CONTADOR] Valor atual: Tz9 pedido(s) transferido(s) com sucesso e contador resetado)r$  rb  contador_atualr  rz  Fr  r,  )r   rf   r   r6   rg   rh   r]   r  ri   r   rk   r  r  r  r   )rm   rf   r@   rE  pedidos_transferidosr  contador_valorr  s           r/   transferir_comandas_liquidadasr  7  s    DF6z[[.
 	ehrgtuOO%	/8y|a!#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;$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        [        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*  r@   u   [DEBUG] id_cliente na sessão: z2SELECT * FROM formapagamento WHERE id_cliente = %sz[DEBUG] Formas encontradas: )r$  formasz[ERRO FORMAS PAGAMENTO]Fr#  r,  )r   rf   r   r6   r]   rg   r   r   rk   r\   r   )rm   rf   r@   r  ro   s        r/   formas_pagamento_apir  x  s    DFz-[[.
/
|<=Kj]["(b,VH5646:;
 LLNJJL   @'+5#a&9:C??LLNJJL @ LLNJJL s0   BB: :
D"$D(D")D% D""D% %1Ez/api/mesa/<int:mesanro>c                 v    [         R                  " S5      n[        SU  S[        U 5       SU 3SS9  [	        5       nUR                  SS9nU(       d  [        SS	S
.5      S4$ UR                  S5        UR                  5       c  UR                  S5        UR                  S5        UR                  5       c  UR                  S5        X/nSn[        SUR                  5        SU 3SS9  UR                  XT5        UR                  5       =(       d    / nUR                  SX45        UR                  5       =(       d    0 n[        UR                  S5      =(       d    S5      n[        UR                  S5      =(       d    S5      n	US:  a  SO	U	S:  a  SOSn
 [        UR                  S5      =(       d    S5      nUS::  a  SnUR                  5         UR                  5         [        SUSXS.5      $ ! [         a    Sn NFf = f! [         a%  n[        SUSS9  [        SSS
.5      S 4s S nA$ S nAff = f)!Nr@   z0[DEBUG] /api/mesa/<mesanro> chamado com mesanro=z (type=z) e id_cliente=TrS   r*  Fr"  r  r&  r  r  rk  rl  a#  
            SELECT
                chave AS id,
                nropedido AS mesanro,
                produto,
                preco,
                quantidade,
                codigoproduto,
                classe,
                id_cliente,
                COALESCE(lancamento, nrolancamento) AS lancamento,
                COALESCE(lancamento, nrolancamento) AS nrolancamento,
                obs_item,
                dados_item,
                IFNULL(produto, '') AS descricao_produto
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
              AND UPPER(COALESCE(status_mesa, '')) <> 'RECEBIDO'
              AND id_cliente = %s
            ORDER BY chave ASC
        z#[DEBUG] Query pedido_diarios mesa: z params=a  
            SELECT
              SUM(CASE WHEN UPPER(COALESCE(status_mesa,'')) = 'CONTA' THEN 1 ELSE 0 END) AS conta_count,
              SUM(CASE WHEN UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO' AND UPPER(COALESCE(status_mesa,'')) <> 'RECEBIDO' THEN 1 ELSE 0 END) AS ativa_count,
              MAX(COALESCE(pessoas_mesa, 0)) AS pessoas_mesa
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
            conta_countr   ativa_countCONTAATIVALIVRErn  r   r   )r$  r  fontemesa_statusrn  z"[ERRO] ao buscar produtos da mesa:z Erro ao buscar produtos da mesa.r,  )r   r6   r]   r  r   rf   r   rg   rh   r   r   r   r\   rk   )rs  r@   rm   rn   	params_pdquery_pdr  st_rowr  r  r  rn  ro   s                r/   buscar_mesar    s/   D`[[.
@	QUV]Q^P__noynz{  DH  	IzkkTk*u:NOPRUUUIJ<<>!KKlmJK<<>!KKgh)		. 	3HNN4D3EXi[YaefH(LLN(b		 !	
 %2&**]38q9&**]38q9!,qg+PQ/wW^	vzz.9>Q?L 1L		

4iJZkv  V  W  	W  	L	  `2ATB56XYZ\___`sI   A!H	 $D7H	 #G7 ?7H	 7HH	 HH	 	
H8H3-H83H8z/api/mesa/<int:mesanro>/pessoasc                    S nS n [         R                  " SS9=(       d    0 n [        UR                  S5      =(       d    S5      nUS:  d  US:  a?  [        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       nUR                  5         UR                  SS9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X45        UR                  5       =(       d    0 n[        UR                  S5      =(       d    S5      S::  aO  UR                  5         [        SSS	.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        UR                  S5      =(       d    S5      R                  5       R!                  5       nUS:X  aO  UR                  5         [        SSS	.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  SX@U45        UR#                  5         [        SUS.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a    Sn GNf = f! [         a  n U(       a  UR                  5         O! [         a     Of = f[%        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)!NTrP  pessoasr   r   2   Fu+   Informe um número de pessoas entre 1 e 50.r#  r9  r@   r"  r&  r*  r  r  rk  rl  a[  
            SELECT
              SUM(CASE WHEN UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO' THEN 1 ELSE 0 END) AS total_itens,
              MAX(UPPER(COALESCE(status_mesa,''))) AS status_mesa
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
            rZ  Mesa sem itens.r?  rr  r!   rY  u1   Mesa já está RECEBIDO e não pode ser alterada.r^  z
            UPDATE pedido_diarios
            SET pessoas_mesa = %s
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO'
            )r$  rn  z[MESA PESSOAS ERRO]rS   r,  )r   rv  r   r6   r\   r   rk   r   r   rw  rf   rg   rh   rj   r   r   r   ri   r]   r  r  )	rs  rm   rn   r   r  r@   r   r  ro   s	            r/   api_mesa_set_pessoasr    sD    D
CFt,2	$((9-23G Q;'B,u6cdegjjx IIKJJL y [[.
u6JKLcQp IIKJJL q z kkTk*IJ<<>!KKlmJK<<>!KKgh !	
 lln"sww}%*+q0MMOu6GHI3N: IIKJJL = '-2.446<<>MMOu6ijkmpp2 IIKJJL 3 	 z*
	
 	4AB IIKJJL C  	G	j  @	 		#Qd35#a&9:C??IIKJJL @ IIKJJL s   L' #L L' ,L' .DL' A$L' 31L' L$ L' #L$$L' '
O2M
	O

MOM;OOO OO 1P z/api/mesa/<int:mesanro>/reabrirc                    S nS 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         UR                  SS9nUR                  S5        UR                  5       c  UR                  S	5        UR                  S
X45        UR                  5       =(       d    0 n[        UR                  S5      =(       d    S5      S::  aO  UR                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        UR                  S5      =(       d    S5      S::  aO  UR                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  SX45        UR                  S::  aO  UR                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  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         O! [         a     Of = f[        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)Nr@   Fr"  r#  r&  Tr*  r  r  a  
            SELECT
              SUM(CASE WHEN UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO' AND UPPER(COALESCE(status_mesa,'')) <> 'RECEBIDO' THEN 1 ELSE 0 END) AS total_ativos,
              SUM(CASE WHEN UPPER(COALESCE(status_mesa,'')) = 'CONTA' THEN 1 ELSE 0 END) AS conta_count
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
            total_ativosr   r  r?  r  u   Mesa não está em CONTA.r^  a@  
            UPDATE pedido_diarios
            SET status_mesa = 'ABERTA'
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
              AND UPPER(COALESCE(status_mesa, '')) = 'CONTA'
            u"   Não foi possível reabrir a mesa.r,  r$  z[MESA REABRIR ERRO]rS   )r   r6   r   rk   r   rw  rf   rg   rh   r   rj   r  ri   r\   r]   r  r  r   )rs  rm   rn   r@   r   ro   s         r/   api_mesa_reabrirr  (  s    D
C=[[.
u6JKLcQn IIKJJL q z kkTk*IJ<<>!KKlm !	
 lln"sww~&+!,1MMOu6GHI3N@ IIKJJL C sww}%*+q0MMOu6QRSUXX: IIKJJL ; 	 !	
 <<1MMOu6Z[\^aa IIKJJL  		4() IIKJJL   @	 		#Qd35#a&9:C??IIKJJL @ IIKJJL sh   ,J "CJ  AJ AJ J 
L9J76L47
KL4K;L4?L9 L< 4L99L< <1M-z"/api/mesa/<int:mesanro>/transferirc                 0	   S nS n [         R                  " SS9=(       d    0 n [        UR                  S5      =(       d    S5      nUS::  a?  [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ U[        U 5      :X  a?  [        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       nUR                  5         UR                  SS9nUR                  S5        UR                  5       c  UR                  S5        UR                  SX45        UR                  5       =(       d    0 n[        UR                  S5      =(       d    S5      S::  aO  UR                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  SXE45        UR                  5       =(       d    0 n[        UR                  S5      =(       d    S5      S:  aO  UR                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  SX@U45        UR                  S::  aO  UR                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  5         [        S[        U 5      [        U5      S.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a    Sn GNqf = f! [         a  n U(       a  UR                  5         O! [         a     Of = f[!        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)NTrP  parar   Fu   Mesa destino inválida.r#  r9  z*Mesa destino deve ser diferente da origem.r@   r"  r&  r*  r  r  aL  
            SELECT
              SUM(CASE WHEN UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO' AND UPPER(COALESCE(status_mesa,'')) <> 'RECEBIDO' THEN 1 ELSE 0 END) AS ativos_origem
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
            ativos_origemzMesa origem sem itens.r?  aM  
            SELECT
              SUM(CASE WHEN UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO' AND UPPER(COALESCE(status_mesa,'')) <> 'RECEBIDO' THEN 1 ELSE 0 END) AS ativos_destino
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
            ativos_destinou   Mesa destino já possui itens.r^  a:  
            UPDATE pedido_diarios
            SET nropedido = %s
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO'
              AND UPPER(COALESCE(status_mesa,'')) <> 'RECEBIDO'
            u%   Não foi possível transferir a mesa.r,  )r$  der  z[MESA TRANSFERIR ERRO]rS   )r   rv  r   r6   r\   r   rk   r   r   rw  rf   rg   rh   rj   r  ri   r]   r  r  r   )	rs  rm   rn   r   	mesa_parar@   row_orow_dro   s	            r/   api_mesa_transferirr  m  s    D
CUt,2	DHHV,12I >u6OPQSVVV IIKJJL Y G$u6bcdfiiR IIKJJL S [[.
u6JKLcQJ IIKJJL K z kkTk*IJ<<>!KKlm !
	
 $"uyy).Q/14MMOu6NOPRUU\ IIKJJL ] 	 #
	
 $"uyy)*/a014MMOu6VWXZ]]< IIKJJL = 	 ,	
 <<1MMOu6]^_add IIKJJL  	4s7|S^TU IIKJJL a  	I	H  @	 		&65#a&9:C??IIKJJL @ IIKJJL s   N< #N) N< N< ,N< 6CN< 4A2N< AN< 	0N< )N95N< 8N99N< <
Q!OQ
O,)Q+O,,;Q'Q!(Q$ Q!!Q$ $1Rz/api/mesa/<int:mesanro>/statusc                 "   S nS n [         R                  " SS9=(       d    0 n[        UR                  S5      =(       d    S5      R	                  5       R                  5       nUS;  a?  [        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       nUR                  5         UR                  SS9nUR                  S5        UR                  5       c  UR                  S5        UR                  SX45        UR                  5       =(       d    0 n[        UR                  S5      =(       d    S5      S::  aO  UR                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ US:X  aO  UR                  5         [        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S05      U(       a  UR                  5         U(       a  UR                  5         $ $ ! ["         a  n U(       a  UR                  5         O! ["         a     Of = f[%        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)NTrP  r  r!   )r  rY  Fu   Status inválido.r#  r9  r@   r"  r&  r*  r  r  aK  
            SELECT
              SUM(CASE WHEN UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO' AND UPPER(COALESCE(status_mesa,'')) <> 'RECEBIDO' THEN 1 ELSE 0 END) AS total_ativos
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
            r  r   r  r?  rY  z4Use o recebimento da mesa para marcar como RECEBIDO.r^  aC  
            UPDATE pedido_diarios
            SET status_mesa = 'CONTA'
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
              AND UPPER(COALESCE(status_mesa, '')) <> 'RECEBIDO'
            r$  z[MESA STATUS ERRO]rS   r,  )r   rv  r   r6   r   r   r   rk   r   r   rw  rf   rg   rh   r   rj   ri   r\   r]   r  r  )rs  rm   rn   r   r  r@   r   ro   s           r/   api_mesa_set_statusr    s    D
C;t,2TXXh'-2.446<<>..u6IJKSPh IIKJJL k [[.
u6JKLcQb IIKJJL e z kkTk*IJ<<>!KKlm !
	
 lln"sww~&+!,1MMOu6GHI3N8 IIKJJL ; ZMMOu6lmnpss2 IIKJJL 5 	 !	
 		4() IIKJJL   @	 		"AT25#a&9:C??IIKJJL @ IIKJJL sg   A1J5 ',J5 CJ5 %J5 /J5 5
M KM
K%"M$K%%;M M!M MM 1Nz/api/mesa/<int:mesanro>/receberc                    S nS n [         R                  " SS9=(       d    0 n[        UR                  S5      [        5      (       a  UR                  S5      O/ n/ nSnU H  n[        U[
        5      (       d  M  [        UR                  S5      =(       d    S5      R                  5       n [        [        UR                  S5      =(       d    S5      R                  S	S
5      5      n	U(       a  U	S::  a  M  [        [        U	5      S5      n	Xi-  nUR                  XS.5        M     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       nUR#                  5         UR%                  SS9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X
45        UR)                  5       =(       d    0 n[        UR                  S5      =(       d    S5      n[+        UR                  S5      =(       d    S5      n[+        UR                  S5      =(       d    S5      nUS::  aO  UR-                  5         [        SSS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ US::  aO  UR-                  5         [        SSS.5      S 4U(       a  UR                  5         U(       a  UR                  5         $ $ US:  aO  UR-                  5         [        SS!S.5      S 4U(       a  UR                  5         U(       a  UR                  5         $ $ UR'                  S"U
45        UR)                  5       =(       d    0 n [        UR                  S#5      =(       d    S5      nUS:  a  SnU(       a$  [        [        U5      [        U5      S$-  -  S5      OSn[        [        U5      [        U5      -   S5      n[        [        U5      S5      n[        UU-
  S5      nUS%:  aR  UR-                  5         [        SS&UUUS'.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        [/        S[        U5      [        U5      -
  5      S5      n[        [        R                  " S(5      =(       d    S5      R                  5       nS)S*[+        U 5      [        [        U5      S5      UUUUU[+        [0        R0                  " 5       5      S+.
n[2        R4                  " USS,9n[7        U5      S):X  a5  [        US   R                  S5      =(       d    S5      R                  5       nOS-nUR'                  S.UUX
45        UR8                  S::  aO  UR-                  5         [        SS/S.5      S04U(       a  UR                  5         U(       a  UR                  5         $ $ UR;                  5         [        S1S05      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a    Sn	 GNf = f! [         a    Sn GNf = f! [         a  n U(       a  UR-                  5         O! [         a     Of = f[=        S2USS39  [>        R@                  " 5         [        S[        U5      S.5      S04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)4NTrP  r}  rp  r  r!   r  r   r   r  rh  r~  Fr  r#  r9  r@   r"  r&  r*  r  r  r  r  a  
            SELECT
              SUM(COALESCE(preco, 0) * COALESCE(quantidade, 0)) AS subtotal,
              SUM(CASE WHEN UPPER(COALESCE(status_mesa,'')) = 'CONTA' THEN 1 ELSE 0 END) AS conta_count,
              SUM(CASE WHEN UPPER(COALESCE(status_pedido,'')) <> 'ITEM_REMOVIDO' AND UPPER(COALESCE(status_mesa,'')) NOT IN ('CONTA','RECEBIDO') THEN 1 ELSE 0 END) AS outros_ativos
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
              AND UPPER(COALESCE(status_mesa, '')) <> 'RECEBIDO'
            rm  r  outros_ativosr  r?  z)Mesa precisa estar em CONTA para receber.r^  u$   Mesa não está totalmente em CONTA.ro  rp  rq  r  u(   Valores não fecham com o total da mesa.r  re  r   rU  )
r  r   r~   rm  rt  r1  r}  r  r  r  r  r  a  
            UPDATE pedido_diarios
            SET status_mesa = 'RECEBIDO',
                baixa_pagamento = %s,
                formapagamento = %s
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
              AND UPPER(COALESCE(status_mesa, '')) = 'CONTA'
            u$   Não foi possível atualizar a mesa.r,  r$  z[MESA RECEBER ERRO]rS   )!r   rv  r  r6   rz  r  r   r   r   r  r\   rv  r   r   rk   r   r   rw  rf   rg   rh   r   rj   r|  r   rJ  r  r   r  ri   r]   r  r  )rs  rm   rn   r   r}  r  r  r  r  r  r@   r   rm  r  r  rw  rx  rt  r1  r  r  r  r  ry  r  ro   s                             r/   api_mesa_receberr    s{    D
CIt,2/9$((<:PRV/W/WTXXl+]_
Aa&&g,"-335Ec!%%."5A6>>sCHI EQJ%,*EMDLL59:  u6lmnpssf IIKJJL g [[.
u6JKLcQ^ IIKJJL _ z kkTk*MN<<>!KKnoIJ<<>!KKlm !	
 lln",12#''-05A6CGGO49:q=MMOu6GHI3NZ IIKJJL ] !MMOu6abcehhT IIKJJL W 1MMOu6\]^`ccN IIKJJL O 	dM	
 lln"	.3!4C 7CFI%h5:+=>BseHog6:U4[!$UT\1%$;MMOu6`kp  }A  OS  T  U  WZ  Zf IIKJJL g c#uT{U5\9:A>gkk"239r:@@BWeHoq1diik"
	 JJyu=	u:?eAhll739r:@@BK!K
 W9	
 <<1MMOu6\]^`cc IIKJJL  		4() IIKJJL {  z  	C	h  @	 		#Qd35#a&9:C??IIKJJL @ IIKJJL s   B%[5 ,<[(A[5 -,[5 	E	[5 %[5 %[5 ,,[5 #[" <B"[5 E[5 [5 [[5 [[5 "[2.[5 1[22[5 5
^ \^
\%"^$\%%;^ ^!^ ^^ 1_z*/api/mesa/<int:mesanro>/item/<int:item_id>c                     [         R                  " S5      n[        SU SU  SU 3SS9  U(       d  [        SSS	.5      S
4$ [	        5       nUR                  SS9nUR                  S5        UR                  5       c  UR                  S5        UR                  SX45        UR                  5       (       a0  UR                  5         UR                  5         [        SSS	.5      S4$ UR                  SXU45        UR                  5       nU(       d0  UR                  5         UR                  5         [        SSS	.5      S4$ UR                  S5      =(       d    UR                  S5      n[        UR                  S5      =(       d    S5      R                  5       nUbQ  [        U5      S:  aB  US:X  a  UR                  SX[        U5      45        OMUR                  SX[        U5      45        O/US:X  a  UR                  SXU45        OUR                  SXU45        UR                  5         UR                  5         UR                  5         [        SSS	.5      $ ! [         aa  nS[        5       ;   a  W(       a  UR                  5         [        SU 3SS9  [         R"                  " 5         [        SS S	.5      S!4s S nA$ S nAff = f)"Nr@   z[DEBUG] Removendo item z	 da mesa z para id_cliente=TrS   Fr"  r  r&  r*  r  r    
            SELECT 1
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_mesa, '')) IN ('CONTA', 'RECEBIDO')
            LIMIT 1
            -   Mesa está em CONTA e não pode ser alterada.r^  a   
            SELECT *
            FROM pedido_diarios
            WHERE chave = %s
              AND nropedido = %s
              AND origem = 'MESA'
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
            LIMIT 1
            u5   Item não encontrado ou não pertence a este cliente.r?  r   r   r   r   r   a  
                    DELETE FROM pedido_diarios
                    WHERE origem = 'MESA'
                      AND nropedido = %s
                      AND id_cliente = %s
                      AND COALESCE(nrolancamento, lancamento) = %s
                    a7  
                    UPDATE pedido_diarios
                    SET status_pedido = 'ITEM_REMOVIDO'
                    WHERE origem = 'MESA'
                      AND nropedido = %s
                      AND id_cliente = %s
                      AND COALESCE(nrolancamento, lancamento) = %s
                    z
                    DELETE FROM pedido_diarios
                    WHERE chave = %s
                      AND origem = 'MESA'
                      AND nropedido = %s
                      AND id_cliente = %s
                    a  
                    UPDATE pedido_diarios
                    SET status_pedido = 'ITEM_REMOVIDO'
                    WHERE chave = %s
                      AND origem = 'MESA'
                      AND nropedido = %s
                      AND id_cliente = %s
                    zItem removido com sucesso.rm   z [ERRO] ao remover item da mesa: zErro ao remover item da mesa.r,  )r   r6   r]   r   r   rf   rg   rh   rk   r   r   r   ri   r\   r  rj   r  r  )	rs  r  r@   rm   rn   rR  r   status_itemro   s	            r/   remover_item_mesar    s   l][[.
'y	'BST^S_`hlmu:NOPRUUUzkkTk*IJ<<>!KKlm !	
 <<>>IIKJJLu:ijkmppp	 z*	
 ||~IIKJJLu:qrsuxxx.K$((?2K$((?3@yAGGI$]);a)?i' #m*<=	  #m*<=
 i' z2	  z2
 			

45QRSS ]VX$MMO04DA56UVWY\\\]s3   ?I B#I &AI DI 
K&AK<KKc                    S nS n [         R                  " SS9=(       d    0 nUR                  SS 5      nUR                  SS 5      nUR                  SS 5      nUcE  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       nUR                  5       nUR                  S5        UR                  5       c  UR                  S5        UR                  SX45        UR                  5       (       a?  [        SSS.5      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ / 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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)NTrP  rq  r   r   Fr  r  r9  r@   r  r  r  r  r^  r   r  r  r  r  z3
            UPDATE pedido_diarios
            SET r   z
            WHERE chave = %s
              AND nropedido = %s
              AND origem = 'MESA'
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
               Item não encontrado.r?  r$  z[MESA PATCH ITEM ERRO]rS   r,  r  )rs  r  rm   rn   r   r  r   r   r@   r  r  rq  ro   s                r/   alterar_item_mesar    s[    D
CDt,2((5$'88J-XXlD1
?x/J4Fu:OPQSVVv IIKJJL y [[.
zkkmIJ<<>!KKlm !	
 <<>>u:ijkmppN IIKJJL Q 	1%Cax5>bcdfiiB IIKJJL E ./MM#_-MM#h---/0!./MM#j///12w459%& ' 	
 	<<1u:QRSUXX IIKJJL  	4() IIKJJL   DMMO&65c!f=>CCIIKJJL D IIKJJL sK   A+L8 !BL8 +0L8 DL8 <L8 8
OAOOO OO 1O?z#/api/mesa/<int:mesanro>/ajuste-itemc                    S nS n [         R                  " SS9=(       d    0 n[        UR                  S5      =(       d    S5      nUS:X  aA  Sn[	        SXUS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        R                  " S	5      nU(       dA  S
n[	        SXUS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ [        5       nUR                  5         UR                  SS9nUR                  S5        UR                  5       c  UR                  S5        UR                  SX45        UR                  5       (       aQ  UR                  5         Sn[	        SXUS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  SX45        UR                  5       nU(       d#  UR                  SX45        UR                  5       nU(       dQ  UR                  5         Sn[	        SXUS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  S5      nUR                  S5      n	U	c%  [        R                  " S5      n
U
b   [        U
5      n	U	cz  [        [        R                  " S5      =(       d    S5      R!                  5       nU(       a=  UR                  SX45        UR                  5       =(       d    0 nUR                  S5      n	[        UR                  S5      =(       d    S5      R#                  5       S:X  a  SOSnUS:  a  SOS nS!nS!n[        UR                  S"5      =(       d    S5      R!                  5       nUR                  S5        UR                  5       S LnUR                  S#5        UR                  5       S LnU(       dO  UR                  5         [	        SS$S%.5      S&4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  S'X45        UR                  S(X`45        UR                  5       =(       d    0 n[        UR                  S)5      =(       d    S5      S*-   n/ S+QnS,[        U 5      US-UU[        U5      S.UUUU	SUU/nU(       a$  UR%                  S/S05        UR%                  S/S15        S2R'                  S3/[)        U5      -  5      nUR                  S4S2R'                  U5       S5U S63[+        U5      5        UR-                  5         [	        SXS7.5      U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         a    S n	 GNf = f! [         a  nU(       a  UR                  5         [/        S8USS99  [0        R2                  " 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):NTrP  r  r   r  F)r$  r%  r  r9  r@   r"  r&  r*  r  r  r  r  r^  a  
            SELECT cod_classe, cod_usuario, status_pedido
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
              AND UPPER(TRIM(COALESCE(codigoproduto, ''))) <> 'AJUSTE_TECNICO'
            ORDER BY chave DESC
            LIMIT 1
            al  
                SELECT cod_classe, cod_usuario, status_pedido
                FROM pedido_diarios
                WHERE origem = 'MESA'
                  AND nropedido = %s
                  AND id_cliente = %s
                  AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
                ORDER BY chave DESC
                LIMIT 1
                zEMesa vazia: lance pelo menos um item antes da taxa extra ou desconto.r   r   rd  re  r!   zISELECT chave FROM usuarios WHERE usuario = %s AND id_cliente = %s LIMIT 1r   r   rr  r   r   r  r  r   z2SHOW COLUMNS FROM pedido_diarios LIKE 'lancamento'z,Coluna lancamento ausente em pedido_diarios.r#  r,  z
            DELETE FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(TRIM(COALESCE(codigoproduto, ''))) = 'AJUSTE_TECNICO'
            z
            SELECT COALESCE(MAX(COALESCE(lancamento, 0)), 0) AS max_lancamento
            FROM pedido_diarios
            WHERE origem = 'MESA' AND id_cliente = %s AND nropedido = %s
            ri  r   )r   r~   r   r   r   r   r   r   r   r   r   r   r   r@   r   rU  r   r  rh  rr  ABERTAr   r   r   r   r   r  z[MESA AJUSTE ITEM ERRO]rS   )r   rv  r   r6   r   rk   r   r   rw  rf   rg   rh   rj   r   r\   r   r   r   insertrW   r   r   ri   r]   r  r  )rs  rm   rn   r   r  r  r@   r  r   r   r  re  row_ur  r   r   r   r   has_status_mesa_colhas_lancamento_colrow_lanclancamento_atualr   r   r  ro   s                             r/   api_mesa_ajuste_itemr  [  s    D
Crt,2dhhw',1-A:?CucKLcQT IIKJJL W [[.
&CucKLcQL IIKJJL O z kkTk*IJ<<>!KKlm !	
 <<>>MMOACucKLcQ` IIKJJL a 	
 !	
 ||~KK	 % <<>DMMOYCucKLcQZ IIKJJL [ XXl+
hh}- 'L 9 ,'"%&7"8K  -=!>!D"EKKMN_#0 ,"#ii0$'(A(GR$H$N$N$PT\$\bk"'!),(!txx,2399;IJ!llnD8HI \\^47!MMOu6defhkkX IIKJJL Y 	 !		
 	
 !	
 <<>'Rx||,<=BCaG
$ L%L
" KK=)KK8$yy$#d)!34*499T?*;:l^STU$K	
 	4GLM IIKJJL M ! '"&K'z  @MMO'$75#a&9:C??IIKJJL @ IIKJJL sw   AV& .V& +B%V&  A5V& %>V& $V /E!V&  D#V& V#V& "V##V& &
X90AX4?X9 X< 4X99X< <1Y-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       nUR                  5       nUR                  S5        UR                  5       c  UR                  S5        UR                  SX45        UR                  5       (       a?  [        S	S
S.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ UR                  SXQX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)NTrP  r   r!   r@   r  r  r  Fr  r  r^  a  
            UPDATE pedido_diarios
            SET obs_item = %s
            WHERE chave = %s
              AND nropedido = %s
              AND origem = 'MESA'
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) <> 'ITEM_REMOVIDO'
            r   r  r?  r$  z[MESA OBS_ITEM ERRO]rS   u$   Erro ao salvar observação do item.r,  )r   rv  r6   r   r   r   rf   rg   rh   r   rk   ri   r  r\   rj   r]   r  r  )rs  r  rm   rn   r   r   r@   ro   s           r/   atualizar_obs_item_mesar    s    D
C1t,2HHZ(.B557[[.
zkkmIJ<<>!KKlm !	
 <<>>u:ijkmpp0 IIKJJL 3 	 4	
 	<<1u:QRSUXX IIKJJL  	4() IIKJJL   dMMO$at456\]^`cccIIKJJL d IIKJJL s>   CG AG G 
IAI	II 	II 1J__main__z?
==============================================================rS   z-[LojaOnline] A arrancar a partir desta pasta:rN   z,[LojaOnline] Templates (HTML) carregados de:z<[LojaOnline] Menu principal (/) = templates/painel_menu.htmlz?==============================================================
r  zultimo_arranque_loja.txtr0  rP   rQ   zGerado automaticamente ao iniciar app.py nesta pasta.
Se o caminho abaixo NAO for a pasta do Cursor, o servidor nao e o mesmo projeto.

zquando_local=r  r  z

rL   z%[LojaOnline] Diagnostico gravado em: z?[LojaOnline] Nao foi possivel gravar ultimo_arranque_loja.txt: z0.0.0.0i  )hostportdebugrs   r  )r  r   r   r   r   r   r   r	   r
   r   mysql.connectorr  r  r  r   rH  r  r  r  r   rU   r   rJ  r  r   r   r  r  r   versionr   databaser   auth_routesr   
blueprintsr   
decoratorsr   services.dados_lojar   services.fechamento_periodor   r   r   r   r   r   rV   rW   r  r  r  _PYWIN32_SYSisdirr  pathsepr  r6   r  r"   r\   r  win32apirX   validate_requiredr  rU  
SECRET_KEY
secret_keyr(   r)   r*   register_blueprintcontext_processorr0   after_requestr9   router>   rH   rJ   rc   rp   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r.  r4  rM  r  r  r  r  r  r  r  r  r  r  r  r*  r?  rD  rS  r_  ri  r{  r  before_requestr  r  r  r  r  r  r  r  r  r  r  r	  r  r$  rA  rQ  rX  r^  r`  re  rh  rl  rn  rp  rs  ru  r|  r  r  r  r  r  r  r  r  r  r  r  r  rG   r  r  r  r  r  r  r  r  r   r  r	  r  r  r  r  r  r2  r=  rA  rC  r   rK  rN  rR  rT  rV  rY  r]  rc  re  rv  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  	root_pathr%   _tplr]   _markerrZ   _mfr[   r(  r[  r2  _erunFLASK_DEBUGr-   r.   r/   <module>r     sF   o o o       	 
  	    4 4     1 % 0  ww||BGGOOBGGOOH,EFQVXgi{|77==388#<(%

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

" #""(.(F(F

$ %&,&B&B

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