
    2i                        d dl mZmZmZmZ d dlZd dlZd dlZd dl	m	Z	 d dl
Z
d dlZd dlZ	 d dlZd dlZ ee      Zd ZdZdZd Zd Zd	 Zd
 Zd Zd Zd Zd6dZd Zej=                  d      d        Zej=                  d      d        Z ej=                  ddg      d        Z!ej=                  ddg      d        Z"ej=                  ddg      d        Z#ej=                  d      d        Z$d Z%ej=                  d       d!        Z%ej=                  d"      d#        Z&ej=                  d$      d%        Z'ej=                  d&      d'        Z(ej=                  d(      d)        Z)ej=                  d*dg      d+        Z*ej=                  d,dg      d-        Z+ej=                  d.dg      d/        Z,ej=                  d0      d1        Z-ed2k(  rej]                  d3d45       yy# e$ r dZdZY w xY w)7    )Flaskrender_templatejsonifyrequestN)pprintc                  L    t         j                  j                  dddddd      S )Nz	127.0.0.1rootpctrimi  novalojaT)hostuserpasswordportdatabase
autocommit)mysql	connectorconnect     app.pyconectarr      s0    ??"" #  r   gRr|7gACPGc                    d}t        j                  || z
        }t        j                  ||z
        }t        j                  |dz        dz  t        j                  t        j                  |             t        j                  t        j                  |            z  t        j                  |dz        dz  z  z   }dt        j                  t        j
                  |      t        j
                  d|z
              z  }t        ||z  d      S )Ng     @      )mathradianssincosatan2sqrtround)	lat1lon1lat2lon2Rdlatdlonacs	            r   haversine_kmr,   %   s    A<<t$D<<t$Da!dhht||D'9:488DLLQUDV;WWX\X`X`aefgagXhjkXkkkA	DJJtyy|TYYq1u%566AQ?r   c                 Z   | rt        | j                               dk  ryd}| ddd}ddi}	 t        j                  |||d	
      }|j                  dk7  ry|j                         }|syt        |d   d         t        |d   d         fS # t        $ r}t        d|       Y d }~yd }~ww xY w)N   )NNz*https://nominatim.openstreetmap.org/searchjsonr   )qformatlimit
User-Agentznovaloja-geocoder/1.0   )paramsheaderstimeout   r   latlonz[GEOCODE ERRO])	lenstriprequestsgetstatus_coder/   float	Exceptionprint)enderecourlr5   r6   rdataes          r   geocodificarrH   -   s    s8>>+,q0
6Cv:F45G
LLVWaH==CvvxT!WU^$eDGEN&;;; "s#   (B B )!B 	B*B%%B*c           
         	 d}| d| d|  d| d| d
}t        j                  |dddi	      }|j                  d
k7  ry |j                         }|r|j                  d      dk7  ry |j                  d      xs g }|sy |d   j                  d      }	|	y t	        |	dz  d      S # t
        $ r}
t        d|
       Y d }
~
y d }
~
ww xY w)Nz/http://router.project-osrm.org/route/v1/driving/,;z.?overview=false&alternatives=false&steps=falser4   r3   znovaloja-osrm/1.0)r7   r6   r8   codeOkroutesr   distanceg     @@r   z[OSRM ERRO])r=   r>   r?   r/   r"   rA   rB   )lat_lojalon_lojalat_clilon_clibaserD   rE   rF   rO   dist_mrG   s              r   distancia_osrm_kmrW   ?   s    @az8*AgYay@noLLa,@S1TU==Cvvxtxx'4/(#)rz*>Vf_a(( mQs.   <B$ &B$ &B$ >B$ B$ $	C-B>>Cc                    | j                  dd      | j                  dd      | j                  dd      | j                  dd      | j                  dd      dg}dj                  |D cg c]  }|s|	 c}      }t        |      \  }}|;|9t        t        t
        ||      }||||fS 	 t        t        t
        ||      }|||fS yc c}w # t        $ r}t        d	|       d
||fcY d }~S d }~ww xY w)NrC    nrocasabairrocidadeestadoBrasilz, z[HAVERSINE ERRO]r   )r   NN)	r>   joinrH   rW   LOJA_LATLOJA_LONr,   rA   rB   )	dadospartespendereco_strrS   rT   	dist_osrmdist_havrG   s	            r   calcular_distancia_clienterh   V   s   		*b!		)R 		(B		(B		(BF 995A1a56L#L1GWw2%h'7K	 gw..	'#HhIHWg--  6  	'$a(gw&&	's*   (C0C+C 	C0C+%C0+C0c           	         d}d}	 t               }|j                  d      }|j                  d       |j                         }|s4t	        d       	 	 |r|j                          	 |r|j                          yy|j                  d      }|j                  d      }|Q| |k  rL|t        |      nd}t	        d	|  d
| d|        |	 |r|j                          	 |r|j                          S S t        dd      D ]  }|j                  d| d      }|j                  d| d      }	|0| |k  s6|	t        |	      nd}t	        d	|  d| d|        |c 	 |r|j                          	 |r|j                          S S  |j                  d      }
|
t        |
      nd}t	        d	|  d|        |	 |r|j                          	 |r|j                          S S # t        $ r Y w xY w# t        $ r Y yw xY w# t        $ r Y +w xY w# t        $ r Y S w xY w# t        $ r Y w xY w# t        $ r Y S w xY w# t        $ r Y |w xY w# t        $ r Y S w xY w# t        $ r\}t	        d|       Y d}~	 |r|j                          n# t        $ r Y nw xY w	 |r|j                          yy# t        $ r Y yw xY wd}~ww xY w# 	 |r|j                          n# t        $ r Y nw xY w	 |r|j                          w w # t        $ r Y w w xY wxY w)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.NT
dictionaryz'SELECT * FROM txentrega WHERE chave = 1z5[TAXA ENTREGA] Nenhuma faixa configurada em txentregag        faixa1_dfaixa1_vu   [TAXA ENTREGA] Distância u   km é menor que faixa1_d (u!   km), retornando taxa mínima: R$ r      faixa_d_vzkm cai na faixa z: R$ 	faixa10_vz"km ultrapassa todas as faixas: R$ z[TAXA ENTREGA ERRO])
r   cursorexecutefetchonerB   closerA   r>   r@   range)	distanciaconnrs   ro   	faixa_1_d	faixa_1_vtaxaifaixa_dfaixa_v
faixa_10_v
taxa_finalrG   s                r   calcular_taxa_entregar   o   sm    DF0z-@A!IJ>		

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

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

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

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

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

  		sE  A
I G %G) 9AI G8H.;I *I 0&I H*H&>3I 2H5I	G&%G&)	G54G58	HH	HH	H#"H#&	H21H25	I I	II	J8J3(J; -J   	JJJ$ $	J0/J03J88J; ;L=KL	KLKL K42L4	L =L?L  Lc                     | s| S i }| j                         D ]3  \  }}t        |t        j                        rt	        |      ||<   /|||<   5 |S )z6Converte Decimal para float para que jsonify funcione.)items
isinstancedecimalDecimalr@   )rowoutkvs       r   convert_typesr      sS    

C		 1a)1XCFCF	
 Jr   c                     d} d}	 t               } | j                         }|j                  d       |j                  d       |j                         }|r|d   nd	 	 |r|j	                          	 | r| j	                          S S # t
        $ r Y  w xY w# t
        $ r Y S w xY w# t
        $ r\}t        d|       Y d}~	 |r|j	                          n# t
        $ r Y nw xY w	 | r| j	                          yy# t
        $ r Y yw xY wd}~ww xY w# 	 |r|j	                          n# t
        $ r Y nw xY w	 | r| j	                          w w # t
        $ r Y w w xY wxY w)uE   Obtém o nome da impressora ativa da tabela impressoras (imprenro=1).Nz
            CREATE TABLE IF NOT EXISTS impressoras (
                id INT AUTO_INCREMENT PRIMARY KEY,
                nomedaimpressora VARCHAR(255) NOT NULL,
                imprenro TINYINT NOT NULL DEFAULT 0
            )
        zCSELECT nomedaimpressora FROM impressoras WHERE imprenro = 1 LIMIT 1r   z[IMPRESSORA DB ERRO])r   rs   rt   ru   rv   rA   rB   )ry   rs   r   rG   s       r   get_printer_from_dbr      s_   DFz  	 	\]oos1v$&
		

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

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

  		s   AB! B/B	BB	BB!	D*D6D	 ;C 	CCC2 2	C>=C>DD	 	EDE	D*'E)D**E.E E	EEEEc                    t         j                  dk7  st        y	 |xs t        j                         }t        j                  |      }	 t        j
                  |dd      }	 t        j                  |       t        | t              r| }nt        |       j                  dd      }t        j                  ||       t        j                  |       t        j                  |       	 t        j                  |       y	# t        j                  |       w xY w# t        j                  |       w xY w# t        $ r}d
t        |      fcY d}~S d}~ww xY w)zdEnvia texto RAW para impressora no Windows. Retorna (True, None) em sucesso, (False, erro) em falha.win32N)Fu>   Impressão silenciosa disponível apenas no Windows (pywin32).r   )PedidoNRAWcp1252replace)errors)TNF)sysplatform
win32printGetDefaultPrinterOpenPrinterStartDocPrinterStartPagePrinterr   bytesstrencodeWritePrinterEndPagePrinterEndDocPrinterClosePrinterrA   )conteudoprinter_namenomehPrinterhJobrF   rG   s          r   send_to_printerr      s   
||w*"4V=z;;=))$/	.--h;RSD
3++H5h.#Dx=///KD''$7))(3((2##H- ((2##H- c!f}sN   -D1 
D "A/C= D 'D1 =DD D..D1 1	E:EEEc                 @   d}d}	 | j                  d      }dddddddd}|D ]  }|j                  d      r$|j                  dd      j                         |d<   9|j                  d      r$|j                  dd      j                         |d	<   n|j                  d
      r$|j                  d
d      j                         |d<   |j                  d      r$|j                  dd      j                         |d<   |j                  d      r}|j                  dd      j                         }|j                  d      }t	        |      dk\  r|d   j                         |d<   t	        |      dk\  sN|d   j                         |d<   fd|v sl|j                  dd      j                         }		 t        |	      |d<    |d   s4t        d       	 |r	 |j                          |r	 |j                          yyt               }|j                  d      }|D ]  }
|
j                  dd      }t        |
j                  dd            }t        |
j                  dd            }|
j                  dd      }|
j                  dd      }d|v rd}d}d}|d   |d   |d	   |d   |d   |d   |d   |||||f}|j                  ||       |j                          t        d | d!| d"| d#|d            	 |r	 |j                          |r	 |j                          yy#  d|d<   Y xY w#  Y HxY w#  Y yxY w# t        $ r}t        d$|         d}~ww xY w#  Y UxY w#  Y yxY w# |r	 |j                          n#  Y nxY w|r	 |j                          w #  Y w xY ww xY w)%z0Grava dados do pedido na tabela deliverypendenteN
rY   r   )telefonecepr   rC   rZ   complemento	nropedidozTel:r   zCEP:r   zNome:r   zCompl:r   zEnd:rK   r   rC   r   rZ   zPEDIDO NRO:r   u/   [DELIVERY PENDENTE] Sem telefone, não gravandoTrj   precoqtdchaveclassezTAXA ENTREGA	TXENTREGAzINSERT INTO deliverypendente 
                    (nropedido, telefone, cep, nome, endereco, nrocasa, complemento, produto, preco, quantidade, codigoproduto, classe)
                    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)z[DELIVERY PENDENTE] z	 (chave: z
, classe: z) gravado para [DELIVERY PENDENTE ERRO] )split
startswithr   r<   r;   intrB   rv   r   rs   r>   r@   rt   commitrA   )r   produtosry   rs   linhascliente_datalinhaend_inforc   nro_strprod	prod_nome
prod_precoprod_qtd
prod_chaveprod_classesqlvaloresrG   s                      r   gravar_delivery_pendenter      s   DF[%
  	2E'+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-'	20 J'CDV  

 ] z-  	KD,Itxx34J488E1-.H'2.J((8R0K *(
)OC [)Z(U#V$Z(Y']+G NN3(KKM(9ZL
S^R__no{  }G  pH  oI  J  K?	KJ  

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

	 s   E)L7 1L7  L7 0L>L7 L( (L0 :C8L7 6M 	M L%"L7 (L-0L47	M MMM% MM"%N)M:9N:M><NNNNNrJ   c                      t        d      S )Nz
index.htmlr   r   r   r   indexr   Q  s    <((r   z/delivery-pendente-viewc                      t        d      S )u4   Página para visualizar pedidos pendentes de entregazdelivery_pendente.htmlr   r   r   r   delivery_pendente_viewr   U  s     344r   z	/imprimirPOST)methodsc                     t         j                  xs i } | j                  dd      }| j                  d      }| j                  dg       }|r|r	 t        ||       t               }|xs3 |xs/ t        j                  dk(  rt        rt        j                         nd}t        ||      \  }}|rt        d|d	      S t        d
||d      dfS # t        $ r,}t        d|        t        j                          Y d}~d}~ww xY w)u   Endpoint de impressão silenciosa. Resolve nome da impressora pela ordem: parâmetro -> DB -> padrão do Windows.
    Retorna JSON com sucesso/erro e o nome da impressora utilizado.
    r   rY   printerr   r   Nr   Tsucessor   Fr   error     )r   r/   r>   r   rA   rB   	traceback	print_excr   r   r   r   r   r   r   )	rb   r   printer_paramr   rG   
printer_dbprinter_resolvedokerrs	            r   imprimirr   Z  s   
 LLBEyyR(HIIi(MyyR(H H	"$Xx8 %&J$  M
  MZ]ZfZfjqZq  wAz7S7S7U  HLh(89GB	44DEFF5#BRSTVYYY  	"-aS12!!	"s   C 	D"C<<Dz/testar-impressoraGETc                      t               } | xs/ t        j                  dk(  rt        rt        j                         nd}d}t        ||      \  }}|rt        d|d      S t        d||d      dfS )	z7Envia uma linha de teste para a impressora configurada.r   Nu(   *** TESTE DE IMPRESSÃO - NOVALOJA ***
Tr   Fr   r   )r   r   r   r   r   r   r   )r   r   tester   r   s        r   testar_impressorar   v  su     %&J!{Y`I`eoj&B&B&Dvz8Ee%56GB	44DEFF5#BRSTVYYYr   z
/gerar-pdfc                     	 ddl m}  ddlm} ddlm} ddl}ddlm} t        j                  xs i }|j                  dd      }|j                  d	g       }|st        d
dd      dfS |r	 t        ||       |j#                         j%                  d      }	d|	 d}
|j&                  j)                  d|
      }|j+                  ||       }| \  }}|j-                  dd       |j/                  d      }|dz
  }|D ]F  }|dk  r'|j1                          |j-                  dd       |dz
  }|j3                  d||       |dz  }H |j5                          t        dd|
 |d      S # t        $ r-}t        d|        t        j                           Y d}~d}~ww xY w# t        $ rC}t        d|       t        j                           t        d
t7        |      d      dfcY d}~S d}~ww xY w)z^Gera PDF do pedido e salva em c:\novaloja1\pedidos\. Retorna o caminho relativo para download.r   )A4)canvas)mmN)datetimer   rY   r   Fu   Conteúdo vazio)r   r     r   z%Y%m%d_%H%M%Spedido_z.pdfc:\novaloja1\pedidos)pagesizeCourier
   r   (      Tz	/pedidos/)r   arquivocaminho_completoz[GERAR PDF ERRO]r   )reportlab.lib.pagesizesr   reportlab.pdfgenr   reportlab.lib.unitsr   osr   r   r/   r>   r   r   rA   rB   r   r   nowstrftimepathr_   CanvassetFontr   showPage
drawStringsaver   )r   r   r   r   r   rb   r   r   rG   	timestampnome_arquivor   r+   larguraalturar   yr   s                     r   	gerar_pdfr    s   9@.+*%"99Z,99Z,u6GHI3NN &(8< LLN++O<	 4077<<(@,O MM*RM8 	
		)R  %RK 	E2v

		)R(RKLLQ&GA	 	
 "<.1 0
  	=  &1!56##%%&H  @ !$5#a&9:C??@sO   A%F (F +E% 7C-F %	F."FF FF 	G*'8G%G*%G*z/carrossel-imagensc                     d } d }	 t               } | j                  d      }|j                  d       |j                         xs g }g }|D ]  }|j	                  d      }|j	                  d      }|j	                  d      }|9dt        |       d}|j                  ||t        |      nd	|xs d	t        |j	                  d
      xs d      d        t        d       	 t        |       t        |      	 |r|j                          	 | r| j                          S S # t        $ r Y =w xY w# t        $ r}	t        d|	       Y d }	~	>d }	~	ww xY w# t        $ r}	t        d|	       Y d }	~	S d }	~	ww xY w# t        j                  j                  $ r}
t        d|
       t!        j"                          t        dt        |
      d      dfcY d }
~
	 |r|j                          n"# t        $ r}	t        d|	       Y d }	~	nd }	~	ww xY w	 | r| j                          S S # t        $ r}	t        d|	       Y d }	~	S d }	~	ww xY wd }
~
wt        $ r}	t        d|	       t!        j"                          t        dt        |	      d      dfcY d }	~		 |r|j                          n"# t        $ r}	t        d|	       Y d }	~	nd }	~	ww xY w	 | r| j                          S S # t        $ r}	t        d|	       Y d }	~	S d }	~	ww xY wd }	~	ww xY w# 	 |r|j                          n"# t        $ r}	t        d|	       Y d }	~	nd }	~	ww xY w	 | r| j                          w w # t        $ r}	t        d|	       Y d }	~	w d }	~	ww xY wxY w)NTrj   z\SELECT chave, nomeclassificacao, quantidadepartes, nrofoto AS nro_da_foto FROM classificacaor   nomeclassificacaonro_da_fotoz/static/img/z.jpegrY   quantidadepartesr   )r   r   r   maxz[CARROSSEL] imagens montadas:[WARN] falha ao fechar cursor:"   [WARN] falha ao fechar conexÃ£o:
[DB ERROR]Erro de banco de dadosr   detalhesr   [ERROR]Erro interno no servidor)r   rs   rt   fetchallr>   r   appendr   rB   r   rA   r   rv   r   r   Errorr   r   )ry   rs   r   imagensr   r   r  nror   rG   db_errs              r   carrossel_imagensr    s-   DF-;z-uv"(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  CE4 $D! /
E4 :D0E!	D-*E4 ,D--E4 0	E9E

E	E1E,,E14K68H;	K6
K9 G""	H+G<<HH	H8"H33H8;K68K1?K6 K9 J	J7!J22J7;K	K.K))K.1K66K9 9M';LM'	L-L(#M'(L--M'1MM'	M$MM'M$$M'c                     t         j                  j                  d      } d}d}	 | s2t        g       	 |r|j	                          	 |r|j	                          S S t               }|j                  d      }|j                  d| f       |j                         xs g }|D cg c]  }t        |       }}t        |      	 |r|j	                          	 |r|j	                          S S # t
        $ r}t        d|       Y d}~d}~ww xY w# t
        $ r}t        d|       Y d}~S d}~ww xY wc c}w # t
        $ r}t        d|       Y d}~xd}~ww xY w# t
        $ r}t        d|       Y d}~S d}~ww xY w# t        j                  j                  $ r}t        d|       t        j                           t        d	t#        |      d
      dfcY d}~	 |r|j	                          n"# t
        $ r}t        d|       Y d}~nd}~ww xY w	 |r|j	                          S S # t
        $ r}t        d|       Y d}~S d}~ww xY wd}~wt
        $ r}t        d|       t        j                           t        dt#        |      d
      dfcY d}~	 |r|j	                          n"# t
        $ r}t        d|       Y d}~nd}~ww xY w	 |r|j	                          S S # t
        $ r}t        d|       Y d}~S d}~ww xY wd}~ww xY w# 	 |r|j	                          n"# t
        $ r}t        d|       Y d}~nd}~ww xY w	 |r|j	                          w w # t
        $ r}t        d|       Y d}~w d}~ww xY wxY w)MRetorna produtos onde produtos.classe = nomeclassificacao recebido em 'nome'.r   Nr	  r
  Trj   z=SELECT produto, preco, classe FROM produtos WHERE classe = %sr  r  r  r   r  r  r   argsr>   r   rv   rA   rB   r   rs   rt   r  r   r   r   r  r   r   r   r   ry   rs   rG   
resultadosrE   r  s          r   produtos_filtrarr    s   <<F#DDF ;2;*	7	;

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

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

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

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

  	;6::	;s  E3 C&DAE3  D*2E3 ?D/E&	D/D  D	D'D""D'*E3 /	E8E		E	E0E++E03K58H:K5	K8 G!!	H *G;;H H	H7!H22H7:K58K0>K5?K8 J	J6 J11J6:K	K-K((K-0K55K8 8M&:LM&	L,L'"M&'L,,M&0MM&	M#MM&M##M&z/produtos-filtrarc                     t         j                  j                  d      } d}d}	 | s2t        g       	 |r|j	                          	 |r|j	                          S S t               }|j                  d      }|j                  d| f       |j                         xs g }|D cg c]  }t        |       }}t        |      	 |r|j	                          	 |r|j	                          S S # t
        $ r}t        d|       Y d}~d}~ww xY w# t
        $ r}t        d|       Y d}~S d}~ww xY wc c}w # t
        $ r}t        d|       Y d}~xd}~ww xY w# t
        $ r}t        d|       Y d}~S d}~ww xY w# t        j                  j                  $ r}t        d|       t        j                           t        d	t#        |      d
      dfcY d}~	 |r|j	                          n"# t
        $ r}t        d|       Y d}~nd}~ww xY w	 |r|j	                          S S # t
        $ r}t        d|       Y d}~S d}~ww xY wd}~wt
        $ r}t        d|       t        j                           t        dt#        |      d
      dfcY d}~	 |r|j	                          n"# t
        $ r}t        d|       Y d}~nd}~ww xY w	 |r|j	                          S S # t
        $ r}t        d|       Y d}~S d}~ww xY wd}~ww xY w# 	 |r|j	                          n"# t
        $ r}t        d|       Y d}~nd}~ww xY w	 |r|j	                          w w # t
        $ r}t        d|       Y d}~w d}~ww xY wxY w)r  r   Nr	  r
  Trj   zDSELECT produto, preco, classe, chave FROM produtos WHERE classe = %sr  r  r  r   r  r  r  r  s          r   r  r    s    <<F#DDF ;2;*	7	;

 3 z-]`d_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::	;r  z/listar-produtosc                     d } d }	 t               } | j                  d      }|j                  d       |j                         }|j                          |D cg c]  }t	        |       }}t        |      	 |r|j                          	 | r| j                          S S c c}w # t        $ r}t        d|       Y d }~4d }~ww xY w# t        $ r}t        d|       Y d }~S d }~ww xY w# t        j                  j                  $ r}t        d|       t        j                          t        dt        |      d      d	fcY d }~	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 | r| j                          S S # t        $ r}t        d|       Y d }~S d }~ww xY wd }~wt        $ r}t        d
|       t        j                          t        dt        |      d      d	fcY d }~	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 | r| j                          S S # t        $ r}t        d|       Y d }~S d }~ww xY wd }~ww xY w# 	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 | r| j                          w w # t        $ r}t        d|       Y d }~w d }~ww xY wxY w)NTrj   z#SELECT produto, preco FROM produtosr	  r
  r  r  r  r   r  r  )r   rs   rt   r  r   r   rv   rA   rB   r   r   r  r   r   r   )ry   rs   r  r   rG   r  s         r   listar_produtosr"  A  s   DF!;z-<=__&
 5??SmC(?
?z"	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::	;s>  AC& B)C& 6B"	CC& "	C+B<<C	C#CC#&I(8F-;I(<I+ E	E3E..E37F	F*F%%F*-I(98I#1I(2I+ 7H

	H)H$$H)-I	I 
II #I((I+ +K-J ?K 	J	JKJK#J75K7	K KKKKz/produto/<classe>c                    d }d }	 t               }|j                  d      }t        d|         |j                  d| f       |j	                         }|j                          t        |       t        |      }|r2t        |      	 |r|j                          	 |r|j                          S S t        d| d      d	f	 |r|j                          	 |r|j                          S S # t        $ r}t        d|       Y d }~fd }~ww xY w# t        $ r}t        d|       Y d }~S d }~ww xY w# t        $ r}t        d|       Y d }~sd }~ww xY w# t        $ r}t        d|       Y d }~S d }~ww xY w# t        j                  j                  $ r}t        d
|       t        j                          t        dt!        |      d      dfcY d }~	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j                          S S # t        $ r}t        d|       Y d }~S d }~ww xY wd }~wt        $ r}t        d|       t        j                          t        dt!        |      d      dfcY d }~	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j                          S S # t        $ r}t        d|       Y d }~S d }~ww xY wd }~ww xY w# 	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j                          w w # t        $ r}t        d|       Y d }~w d }~ww xY wxY w)NTrj   z&[DEBUG] Consulta produto pela classe: z(SELECT * FROM produtos WHERE classe = %sr	  r
  u   Produto nÃ£o encontrado)r   r     r  r  r  r   r  r  )r   rs   rB   rt   ru   r  r   r   r   rv   rA   r   r   r  r   r   r   )r   ry   rs   	resultadorG   r  s         r   produtor&  h  s   DF+;z- 	6vh?@AF9M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  A?E, C$D-E, =D(E
$	D-C>>D	D%D  D%(	E1EE
	E)E$$E),K.	8H3K.K1 G	G9#G44G9=H	H0H++H03K.?8K)7K.8K1 =J	J/J**J/3K	K&K!!K&)K..K1 1M3LM	L%L M L%%M)L=;M=	MMMMMz/buscar-clientec                     t         j                  j                  d      } d }d }	 | s6t        ddi      df	 |r|j	                          	 |r|j	                          S S t               }|j                  d      }|j                  d	| f       |j                         }|j                          |r=t        |      }t        |      	 |r|j	                          	 |r|j	                          S S t        dd
i      df	 |r|j	                          	 |r|j	                          S S # t
        $ r}t        d|       Y d }~d }~ww xY w# t
        $ r}t        d|       Y d }~S d }~ww xY w# t
        $ r}t        d|       Y d }~d }~ww xY w# t
        $ r}t        d|       Y d }~S d }~ww xY w# t
        $ r}t        d|       Y d }~d }~ww xY w# t
        $ r}t        d|       Y d }~S d }~ww xY w# t        j                  j                  $ r}t        d|       t!        j"                          t        dt%        |      d      dfcY d }~	 |r|j	                          n"# t
        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j	                          S S # t
        $ r}t        d|       Y d }~S d }~ww xY wd }~wt
        $ r}t        d|       t!        j"                          t        dt%        |      d      dfcY d }~	 |r|j	                          n"# t
        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j	                          S S # t
        $ r}t        d|       Y d }~S d }~ww xY wd }~ww xY w# 	 |r|j	                          n"# t
        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j	                          w w # t
        $ r}t        d|       Y d }~w d }~ww xY wxY w)Nr   r   u   Telefone não fornecidor   r	      [WARN] falha ao fechar conexão:Trj   z*SELECT * FROM clientes WHERE telefone = %su   Cliente não encontrador$  r  r  r  r   r  r  )r   r  r>   r   rv   rA   rB   r   rs   rt   ru   r  r   r   r   r  r   r   r   )r   ry   rs   rG   r%  r  s         r   buscar_clienter)    s   ||
+HDF$9F$=>?D2	7	9

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

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

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

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

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

  	94a88	9s  G- D!	EA&G- E%F+G- :F)G!	E *D;;E 	E"EE"%	F.E??F	F&F!!F&)	G2GG	G*G%%G*-M/
8J4M/M2 I	I:$I55I:>J	J1J,,J14M/ 8M*8M/9M2 >L	L0L++L04M	M'M""M'*M//M2 2O 4NO 	N&N!O !N&&O *N><O >	OOO OO z/forma-cobrarc                  0   t         j                  j                  dd      } d }d }	 t               }|j	                  d      }|j                  d| f       |j                         }|j                          |ro|j                  d      r^t        |d         j                         j                         }t        d|i      	 |r|j                          	 |r|j                          S S t        dd
i      	 |r|j                          	 |r|j                          S S # t        $ r}t        d|       Y d }~cd }~ww xY w# t        $ r}t        d	|       Y d }~S d }~ww xY w# t        $ r}t        d|       Y d }~sd }~ww xY w# t        $ r}t        d	|       Y d }~S d }~ww xY w# t        j                   j"                  $ r}t        d|       t%        j&                          t        dt        |      d      dfcY d }~	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j                          S S # t        $ r}t        d	|       Y d }~S d }~ww xY wd }~wt        $ r}t        d|       t%        j&                          t        dt        |      d      dfcY d }~	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j                          S S # t        $ r}t        d	|       Y d }~S d }~ww xY wd }~ww xY w# 	 |r|j                          n"# t        $ r}t        d|       Y d }~nd }~ww xY w	 |r|j                          w w # t        $ r}t        d	|       Y d }~w d }~ww xY wxY w)Nr   rY   Trj   zDSELECT formadecobrar FROM classificacao WHERE nomeclassificacao = %sformadecobrarformar	  r(  normalr  r  r  r   r  r  )r   r  r>   r   rs   rt   ru   r  r   lowerr<   r   rv   rA   rB   r   r   r  r   r   )r   ry   rs   r%  r,  rG   r  s          r   forma_cobrarr/    s/   <<FB'DDF!9z-]`d_fgOO%	7	/2399;AACEGU+,	7	9

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

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

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

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

  	94a88	9sb  BF" ?DD<&F" 3EF 	D9#D44D9<	EEE	E='E88E= 	F	FF"L$?8I)7L$8L' =H	H/H**H/3I	I&I!!I&)L$58L-L$.L' 3K	K%K  K%)K==	LLLL$$L' 'N)L<;N<	MMNMNM31N3	N<NNNNz/proximo-pedidoc                  .   d } d }	 t               } | j                  d      }|j                  d       |j                  d       |j                         }|r|d   dz   }|j                  d|f       |}n|j                  d       d}| j	                          t        d	|i      	 |r|j                          	 | r| j                          S S # t        $ r}t        d
|       Y d }~/d }~ww xY w# t        $ r}t        d|       Y d }~S d }~ww xY w# t        j                  j                  $ r}t        d|       t        j                          | r| j                          t        dt        |      d      dfcY d }~	 |r|j                          n"# t        $ r}t        d
|       Y d }~nd }~ww xY w	 | r| j                          S S # t        $ r}t        d|       Y d }~S d }~ww xY wd }~wt        $ r}t        d|       t        j                          t        dt        |      d      dfcY d }~	 |r|j                          n"# t        $ r}t        d
|       Y d }~nd }~ww xY w	 | r| j                          S S # t        $ r}t        d|       Y d }~S d }~ww xY wd }~ww xY w# 	 |r|j                          n"# t        $ r}t        d
|       Y d }~nd }~ww xY w	 | r| j                          w w # t        $ r}t        d|       Y d }~w d }~ww xY wxY w)NTrj   z
            CREATE TABLE IF NOT EXISTS contadorpedido (
                id INT PRIMARY KEY,
                contador INT NOT NULL DEFAULT 0
            )
        z0SELECT contador FROM contadorpedido WHERE id = 1contadorr   z4UPDATE contadorpedido SET contador = %s WHERE id = 1z7INSERT INTO contadorpedido (id, contador) VALUES (1, 1)numeror	  r(  r  r  r  r   r  r  )r   rs   rt   ru   r   r   rv   rA   rB   r   r   r  r   r   rollbackr   )ry   rs   r%  novo_numeror2  rG   r  s          r   proximo_pedidor5    s   DF39z- 	  	 	IJOO%	#J/!3KNNQT_Sab F NNTUF&)*	7	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-  BD $C7C-	C*C%%C*-	D6DDJ#,A
G(6J#7J& <F	F.F))F.2G	G%G  G%(J#48J,J#-J& 2I	I$II$(I<<	JJJJ##J& &L(J;:L;	KKLKLK20L2	L;LLLLz/delivery-pendentec                     d} d}	 t               } | j                  d      }|j                  d       |j                         xs g }|D cg c]  }t	        |       }}t        dt        |      |d      	 |r|j                          	 | r| j                          S S c c}w # t        $ r}t        d|       Y d}~4d}~ww xY w# t        $ r}t        d|       Y d}~S d}~ww xY w# t        j                  j                  $ r}t        d|       t        j                          t        d	t        |      d
      dfcY d}~	 |r|j                          n"# t        $ r}t        d|       Y d}~nd}~ww xY w	 | r| j                          S S # t        $ r}t        d|       Y d}~S d}~ww xY wd}~wt        $ r}t        d|       t        j                          t        dt        |      d
      dfcY d}~	 |r|j                          n"# t        $ r}t        d|       Y d}~nd}~ww xY w	 | r| j                          S S # t        $ r}t        d|       Y d}~S d}~ww xY wd}~ww xY w# 	 |r|j                          n"# t        $ r}t        d|       Y d}~nd}~ww xY w	 | r| j                          w w # t        $ r}t        d|       Y d}~w d}~ww xY wxY w)z-Lista todos os registros pendentes de entregaNTrj   z
            SELECT id, nropedido, telefone, cep, nome, endereco, nrocasa, complemento,
                   produto, preco, quantidade, codigoproduto, classe, data_criacao
            FROM deliverypendente
            ORDER BY id DESC
        )r   total	registrosr	  r(  r  r  r  r   r  r  )r   rs   rt   r  r   r   r;   rv   rA   rB   r   r   r  r   r   r   )ry   rs   r8  rE   rG   r  s         r   listar_delivery_pendenter9  &  s    DF)9z- 	  	 OO%+	/89!]1%9	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C' BC' 7B#
CC' #	C,B==C	C$CC$'I)8F.<I)=I, E	E4E//E48F	F+F&&F+.I):8I$2I)3I, 8H	H*H%%H*.I	I!II!$I))I, ,K.J K	J 
JKJ  K$J86K8	KKKKKz/salvar-clientec                  v   d } d }	 t         j                  xs i }|j                  d      }|s6t        ddi      df	 |r|j	                          	 | r| j	                          S S |j                  dd      }	 t        |      }t        |      \  }}}|dkD  r|n|}	t        |	      }
t               } | j                  d	
      }|j                  d|f       |j                         }|j                  d       |j                         d u}|j                  d       |j                         d u}|r|r|rd}|j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |
|	|||j                  dd      |f}n|r|sd}|j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |
|	|||f}n4|r|sd}|j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |
|	|j                  dd      |f}nd}|j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |
|	|f}|j                  ||       | j                          t        d	d|d   |	|
d      	 |r|j	                          	 | r| j	                          S S |r|rd}||j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |
|	|||j                  dd      f}n|r|sd }||j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |
|	||f}n4|r|sd!}||j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |
|	|j                  dd      f}nd"}||j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |
|	f}|j                  ||       | j                          t        d	d#|j                  |	|
d      	 |r|j	                          	 | r| j	                          S S # t
        $ r}t        d|       Y d }~d }~ww xY w# t
        $ r}t        d|       Y d }~S d }~ww xY w# t
        $ r d}Y w xY w# t
        $ r}t        d|       Y d }~^d }~ww xY w# t
        $ r}t        d|       Y d }~S d }~ww xY w# t
        $ r}t        d|       Y d }~d }~ww xY w# t
        $ r}t        d|       Y d }~S d }~ww xY w# t         j"                  j$                  $ r}t        d$|       t'        j(                          | r| j+                          t        d%t-        |      d&      d'fcY d }~	 |r|j	                          n"# t
        $ r}t        d|       Y d }~nd }~ww xY w	 | r| j	                          S S # t
        $ r}t        d|       Y d }~S d }~ww xY wd }~wt
        $ r}t        d(|       t'        j(                          t        d)t-        |      d&      d'fcY d }~	 |r|j	                          n"# t
        $ r}t        d|       Y d }~nd }~ww xY w	 | r| j	                          S S # t
        $ r}t        d|       Y d }~S d }~ww xY wd }~ww xY w# 	 |r|j	                          n"# t
        $ r}t        d|       Y d }~nd }~ww xY w	 | r| j	                          w w # t
        $ r}t        d|       Y d }~w d }~ww xY wxY w)*Nr   r   u   Telefone é obrigatórior   r	  r(  rx   r   Trj   z.SELECT chave FROM clientes WHERE telefone = %sz-SHOW COLUMNS FROM clientes LIKE 'lat_cliente'z%SHOW COLUMNS FROM clientes LIKE 'cep'aM  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 = %sr   rY   rC   rZ   r   
referenciar[   r\   r]   r   aC  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 = %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 = %sa  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 = %szCliente atualizado com sucessor   )r   mensagemr   distancia_calculadataxa_calculadaa.  INSERT INTO clientes 
                         (telefone, nome, endereco, nrocasa, complemento, referencia, 
                          bairro, cidade, estado, taxaentrega, distancia, lat_cliente, lon_cliente, cep)
                         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, lat_cliente, lon_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, cep)
                         VALUES (%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)
                         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)zCliente cadastrado com sucessor  r  r  r   r  r  )r   r/   r>   r   rv   rA   rB   r@   rh   r   r   rs   rt   ru   r   	lastrowidr   r   r  r   r   r3  r   )ry   rs   rb   r   rG   distancia_brutadistancia_calcrS   rT   distancia_finaltaxa_entregacliente_existentetem_lat_lontem_cepr   r   r  s                    r   salvar_clienterG  V  s`	   DFb9"99Z(F$>?@#Eh	7	9

 o  ))K3	 #O4O ,Fe+L(-<q-@/n -_=z- 	G(U"OO- 	FGoo't3>?//#4/w0 IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ #IIeR(  W0 IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ # 0 IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ #IIeR(0 IIfb)IIj"-IIi,IImR0IIlB/IIh+IIh+IIh+ # NN3(KKMt9Yduv}d~  Xg  {G  H  ID	7	9

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

   	72A66	7
  	94a88	9m  	 O	 b  	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  5^3 [[6#^3 6\ M^3 \*(]<J/^3 ,]/?^	[3[..[36	\?\\\'#^3 &\''^3 *	]
3]]
	],]''],/	^8^		^	^0^++^03eA
bee
  `33	a<aaa**	b	3bb	e8eee
 c))	d2ddd  	d?)d::d?ee
 
f8ef8	e>(e94f89e>>f8ff8	f5f0+f80f55f8z/pedidos/<path:filename>c                      ddl m}  |d|       S )z$Serve PDFs gerados da pasta pedidos.r   )send_from_directoryr   )flaskrI  )filenamerI  s     r   
servir_pdfrL  ?  s     *7BBr   __main__Ti  )debugr   )N)/rJ  r   r   r   r   mysql.connectorr   r   r   r   r=   r   r   r   win32apirA   __name__appr   r`   ra   r,   rH   rW   rh   r   r   r   r   r   router   r   r   r   r  r  r  r"  r&  r)  r/  r5  r9  rG  rL  runr   r   r   <module>rU     s   : :       

 Ho $.26p
@6_B 3) ) $%5 &5 ;)Z *Z6 %1	Z 2	Z <&*;@ +;@z  0; !0;b%;N %;  %;N $; $;L .;  .;b (9 (9T ?%9 %9N ug.69 /69p %1-9 2-9^ vh/e9 0e9P %&C 'C
 zGG$DG! m!  JHs   G' '	G43G4