U
    Ž"<j I  ã                   @   s  d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ ddlZedeƒZd	d
„ Ze d¡eedd„ ƒƒƒZejddgdeedd„ ƒƒƒZe d¡eedd„ ƒƒƒZe d¡eedd„ ƒƒƒZe d¡edd„ ƒƒZdS )zMesa floor and related APIs.é    N)Ú	BlueprintÚjsonifyÚrender_templateÚrequestÚsessionÚurl_for)Úlogin_requiredÚrestaurant_only)Úconectar)Úfetch_mesa_recent_for_client)Úobter_dados_lojaÚ	mesa_shopc                  C   sè   d } d }zÀzdtƒ } |  ¡ }| d¡ | d¡ | ¡ d krD| d¡ | d¡ | ¡ d krd| d¡ |  ¡  W nV tk
rÄ } z8z| rŽ|  ¡  W n tk
r¤   Y nX td|dd W 5 d }~X Y nX W 5 |rÖ|  ¡  | râ|   ¡  X d S )	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,
                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'zRALTER TABLE pedido_diarios ADD COLUMN status_mesa VARCHAR(20) NULL AFTER nropedidoú4SHOW COLUMNS FROM pedido_diarios LIKE 'pessoas_mesa'zMALTER TABLE pedido_diarios ADD COLUMN pessoas_mesa INT NULL AFTER status_mesaz[MESA_BP PEDIDO_DIARIOS ERRO]T©Úflush)	Úcloser
   ÚcursorÚexecuteÚfetchoneÚcommitÚ	ExceptionÚrollbackÚprint)ÚconnÚcurÚe© r   ú0/var/www/html/LojaOnline/blueprints/mesa_shop.pyÚ_ensure_pedido_diarios_table   s4    ÿ)



$r   z/api/mesa-todosc               
   C   sv   z6t  d¡} | s"tddiƒdfW S t| ƒ}td|iƒW S  tk
rp } ztdt|ƒiƒdf W Y ¢S d }~X Y nX d S )NÚ
id_clienteÚerrou   SessÃ£o sem id_clienteé‘  Ú	registroséô  )r   Úgetr   r   r   Ústr)r    r#   r   r   r   r   Úlistar_todas_mesasT   s    
r'   z/api/salvar-mesaÚPOST)Úmethodsc            -      C   sú  z¼z\t ¡ }| dg ¡}| d¡}t d¡}| d¡}| dd ¡}|rN|shtdd	d
œƒdfW W ¢ZS tƒ }| ¡  | 	¡ } |j	dd}|  
d¡ |  ¡ d k	}	|  
d||f¡ |  ¡ rÚ| ¡  tddd
œƒdfW W ¢èS | 
d||f¡ | ¡ }
|
r|
 d¡r|
d  ¡  ¡ nd}| 
d||f¡ | ¡ p4i }| d¡}t d¡}|d krštt d¡pddƒ ¡ }|rš| 
d||f¡ | ¡ pŽi }| d¡}| ¡  |  
d¡ |  ¡ d k	}	|  
d¡ |  ¡ d k	}d}|rB|  
d||f¡ |  ¡ }|d kr d}n4t|tƒr"t| d¡pdƒ}nt|d p0dƒ}|dkrBd}|  
d ¡ |  ¡ d k	}|  
d!¡ |  ¡ d k	}|s|td"ƒ‚|  
d#||f¡ |  ¡ }|d kr¤d}n4t|tƒrÆt| d$¡pÀdƒ}nt|d pÔdƒ}|d%krtt|ƒdkrtt|ƒ}g }|D ]B}z| t| d&d¡ƒ¡ W n  tk
r>   | d¡ Y nX q |d'krp|dkrjtt|ƒ| d(ƒnd}n|r~t|ƒnd}ztt|pdƒ d)d*¡ƒ}W n tk
rº   d+}Y nX |rØtt|ƒt|ƒ d(ƒ}|d7 }t|ƒD ]„\}}| d,¡}|dkrd-|› d.nd}|› |› } | d/¡}!| d0¡p:d ¡ }"| d1¡pNd ¡ }#t| d2¡pddƒ ¡ }$|dkrz|nd}%d3dd4d5d2d6d&d7d0dd8d9d:dd;g}&d<|d=d>|$| |%|!|"|||d||g}'|	rà|& d(d?¡ |' d(d@¡ |r|& d5¡}(|& |(d¡ |' |(|¡ |r4|& d0¡d })|& |)d1¡ |' |)|#¡ dA dBgt|'ƒ ¡}*|  
dCdA |&¡› dD|*› dEt |'ƒ¡ qènÔ|D ]Ì}| d,¡} | d&¡}+| d/¡}!| d2¡}$| d0¡p´d ¡ }"| d1¡pÈd ¡ }#ztt|pÜdƒ d)d*¡ƒ}W n tk
r   d+}Y nX |rNz tt|+pdƒt|ƒ d(ƒ}+W n tk
rL   t|ƒ}+Y nX |d7 }d3dd4d5d2d6d&d7d0dd8d9d:dd;g}&d<|d=d>|$| |+|!|"|||d||g}'|	r¸|& d(d?¡ |' d(d@¡ |rà|& d5¡}(|& |(d¡ |' |(|¡ |r|& d0¡d })|& |)d1¡ |' |)|#¡ dA dBgt|'ƒ ¡}*|  
dCdA |&¡› dD|*› dEt |'ƒ¡ qx| !¡  tddFd
œƒW W ¢^S  tk
rº }, z8t"dG|,ddH t# $¡  tdt|,ƒd
œƒdIf W Y ¢W ¢S d },~,X Y nX W 5 dt ƒ krÚ| rÚ|  ¡  dt ƒ krô|rô| ¡  X d S )JNr   r   ÚprodutosÚacrescimo_totalr    Ú	nropedidoÚclasseFu,   Produtos ou nÃºmero da mesa nÃ£o informados.)ÚsucessoÚmensagemi  T©Ú
dictionaryr   zø
            SELECT 1
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND nropedido = %s
              AND id_cliente = %s
              AND UPPER(COALESCE(status_mesa, '')) = 'CONTA'
            LIMIT 1
            u-   Mesa estÃ¡ em CONTA e nÃ£o pode ser alterada.i™  z`SELECT formadecobrar FROM classificacao WHERE nomeclassificacao = %s AND id_cliente = %s LIMIT 1ÚformadecobrarÚnormalzXSELECT chave FROM classificacao WHERE nomeclassificacao = %s AND id_cliente = %s LIMIT 1ÚchaveÚ
id_usuarioÚusuario_logadoÚ zISELECT chave FROM usuarios WHERE usuario = %s AND id_cliente = %s LIMIT 1r   é   zÈ
                SELECT MAX(COALESCE(pessoas_mesa, 0)) AS pessoas_mesa
                FROM pedido_diarios
                WHERE origem = 'MESA' AND id_cliente = %s AND nropedido = %s
                Úpessoas_mesar   ú2SHOW COLUMNS FROM pedido_diarios LIKE 'dados_item'z2SHOW COLUMNS FROM pedido_diarios LIKE 'lancamento'uC   Coluna obrigatÃ³ria 'lancamento' nÃ£o encontrada em pedido_diarios.zÅ
            SELECT COALESCE(MAX(COALESCE(lancamento, 0)), 0) AS max_lancamento
            FROM pedido_diarios
            WHERE origem = 'MESA' AND id_cliente = %s AND nropedido = %s
            Úmax_lancamento)ÚmediaZmaiorÚprecor<   é   Ú,Ú.g        Únomez1/Ú ÚqtdÚobs_itemÚ
dados_itemÚcodigoprodutoÚorigemÚstatus_pedidoÚstatus_comandaÚprodutoÚ
quantidadeÚ
cod_classeÚcod_usuarioÚclienteÚ
lancamentoÚMESAÚAGUARDEÚNORMALÚstatus_mesaÚABERTAz, z%szINSERT INTO pedido_diarios (z
) VALUES (ú)z*Produtos enviados para a mesa com sucesso!z"[ERRO] ao salvar produtos na mesa:r   r$   )%Úlocalsr   r   Úget_jsonr%   r   r   r
   Ústart_transactionr   r   r   r   ÚlowerÚstripr&   Ú
isinstanceÚdictÚintÚRuntimeErrorÚlenÚappendÚfloatr   ÚroundÚsumÚmaxÚreplaceÚ	enumerateÚinsertÚindexÚjoinÚtupler   r   Ú	tracebackÚ	print_exc)-r   r   Údatar*   r+   r    Úmesanror-   Úcursor_classÚhas_status_mesa_colZ	class_rowr2   Zrow_cod_classerL   rM   r6   Úrow_uZhas_pessoas_mesa_colZpessoas_mesa_valZrow_pmÚhas_dados_item_colÚhas_lancamento_colÚrow_lancÚlancamento_atualÚpartesÚprecosÚprodZvalor_principalZacresÚidxZnome_originalZprefixorA   rC   rD   rE   rF   Zpreco_gravarÚcolsÚvalsZidx_pmZidx_diÚplaceholdersr=   r   r   r   r   Úsalvar_mesab   sP   



	öþÿÿýþ


þ


ú



ú

"


""
,





 ""
(4r}   z
/mesa_testc                   C   s   t dƒS )Nzmesa_test.html)r   r   r   r   r   Ú	mesa_test+  s    r~   z/mesac               
   C   sd  t  d¡} td| › dd t| ƒ}| dd¡}td|› dd g }tƒ }d }zÌtƒ }|jdd}| d	| f¡ | ¡ }| d
| f¡ | ¡ }t	tdd„ |D ƒƒƒ}z,| d| f¡ | 
¡ }td|› dd W n6 tk
r }	 ztd|	› dd W 5 d }	~	X Y nX | ¡  | ¡  W n2 tk
rN }
 ztd|
dd W 5 d }
~
X Y nX td| ||||dS )Nr    u$   [LOG] (mesa) id_cliente na sessÃ£o: Tr   rA   z
Minha Lojaz[LOG] (mesa) nome_fantasia: r0   zLSELECT * FROM classificacao WHERE id_cliente = %s ORDER BY nomeclassificacaozü
            SELECT DISTINCT nropedido AS mesanro
            FROM pedido_diarios
            WHERE origem = 'MESA'
              AND id_cliente = %s
              AND UPPER(COALESCE(status_pedido, '')) NOT IN ('ITEM_REMOVIDO', 'RECEBIDO')
            c                 s   s$   | ]}|  d ¡dk	r|d  V  qdS )rn   N)r%   )Ú.0Úrowr   r   r   Ú	<genexpr>Q  s      zmesa.<locals>.<genexpr>zLSELECT * FROM configuracao WHERE id_cliente = %s ORDER BY chave DESC LIMIT 1z%[LOG] (mesa) configuracao carregada: z[ERRO] ao buscar configuracao: u<   [ERRO] ao buscar classificaÃ§Ãµes ou mesas para o carrossel:z	mesa.html)r    Únome_fantasiaÚclassificacoesÚmesas_com_registroÚconfig)r   r%   r   r   Úsetr
   r   r   ÚfetchallÚlistr   r   r   r   )r    Ú
dados_lojar‚   rƒ   r„   r…   r   r   Z
mesas_rowsZe_confr   r   r   r   Úmesa2  sV    
þø
þ$ úrŠ   z0/produtos_por_classificacao/<nome_classificacao>c              
   C   sŒ  t j d| › d¡ t j ¡  d }d }z@zÖtddd td| › dt| ƒ› ddd t d	| ¡ 	¡ }t
ƒ }|jdd
}| d¡ | ¡ d k	}t d¡}td|› dd |sàtddd tddd tddiƒdfW W ¢ŒS td||fdd | d||f¡ | ¡ }td|› dd |sjtd| › d|› dd tddd tdd| › d|› iƒdfW W ¢S |d }td|› dd td||fdd | d||f¡ | ¡ }td|› dd |sê| d¡ | ¡ }	td |	› dd tddd t|ƒW W ¢hS  tk
rd }
 zBtd!|
dd t ¡  tddd tdt|
ƒiƒd"f W Y ¢W ¢S d }
~
X Y nX W 5 |rx| ¡  |r†| ¡  X d S )#NzK[DEBUG] Entrou na rota /produtos_por_classificacao com nome_classificacao: Ú
uS   
==================== INÃCIO LOG PRODUTOS POR CLASSIFICAÃ‡ÃƒO ====================Tr   z+[LOG] nome_classificacao recebido na URL: 'z	' (type: rU   ÚNFKCr0   r:   r    u   [LOG] id_cliente na sessÃ£o: u-   [ERRO] id_cliente nÃ£o encontrado na sessÃ£o!uO   ==================== FIM LOG PRODUTOS POR CLASSIFICAÃ‡ÃƒO ====================
r!   u%   id_cliente nÃ£o encontrado na sessÃ£or"   zy[LOG] Executando SELECT nomeclassificacao, id_cliente FROM classificacao WHERE nomeclassificacao = %s AND id_cliente = %szhSELECT nomeclassificacao, id_cliente FROM classificacao WHERE nomeclassificacao = %s AND id_cliente = %sz)[LOG] Resultado do SELECT classificacao: u   [ERRO] ClassificaÃ§Ã£o 'u!   ' nÃ£o encontrada para o cliente u   ClassificaÃ§Ã£o 'i”  Únomeclassificacaoz$[LOG] nomeclassificacao encontrada: zl[LOG] Executando SELECT chave, produto, preco, descricao FROM produtos WHERE classe = %s AND id_cliente = %szzSELECT chave, produto AS nome, preco, descricao AS observacao, barcode FROM produtos WHERE classe = %s AND id_cliente = %sz[LOG] Produtos retornados: z0SELECT DISTINCT classe, id_cliente FROM produtosz0[LOG] Todas as classes e id_cliente existentes: u.   [ERRO] ao buscar produtos por classificaÃ§Ã£o:r$   )ÚsysÚstderrÚwriter   r   r   ÚtypeÚunicodedataÚ	normalizerZ   r
   r   r   r   r   r%   r   r‡   r   rk   rl   r&   )Znome_classificacaor   r   Znome_classificacao_normrr   r    r€   Znome_classificacao_dbr*   Ztodas_classesr   r   r   r   Úprodutos_por_classificacaoi  s’    
ÿ
þ

ýþþÿþýþ
2r”   )Ú__doc__rŽ   rk   r’   Úflaskr   r   r   r   r   r   Ú
decoratorsr   r	   Údatabaser
   Zrepositories.mesa_repor   Úservices.dados_lojar   ÚtimeÚ__name__Úmesa_shop_bpr   Úrouter'   r}   r~   rŠ   r”   r   r   r   r   Ú<module>   s>    
D G4