
    7iH0                         d Z ddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ 	 ddlZddlZd Zd Zd Zdd	Zd
 Zd Zd ZddZddZy# e$ r dZdZY *w xY w)z:Shared helpers: geo, taxa, printing, delivery persistence.    N)session)conectar)obter_dados_lojac                    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	            3C:\Users\joaquim\OneDrive\LojaOnline\helpers_app.pyhaversine_kmr      s    A<<t$D<<t$Da$((4<<+=">$,,W[J\A]"]`d`h`himpqiq`rvw`w"wwA	DJJtyy|TYYq1u%566AQ?    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urlr%   r&   rdataes          r   geocodificarr8      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=falser$   r#   znovaloja-osrm/1.0)r'   r&   r(   codeOkroutesr   distanceg     @@r   z[OSRM ERRO])r-   r.   r/   r   r   r1   r2   )lat_lojalon_lojalat_clilon_clibaser4   r5   r6   r?   dist_mr7   s              r   distancia_osrm_kmrG   1   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                    t        |      }|d   }|d   }| 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        |      \  }}	|+|	)t	        ||||	      }
|
|
||	fS 	 t        ||||	      }|||	fS yc c}w # t        $ r}t        d|       d||	fcY d}~S d}~ww xY w)uD   Calcula distância entre a loja e o cliente usando dados cadastradoslatitude	longituder3    nrocasabairrocidadeestadoBrasil, Nz[HAVERSINE ERRO]r   )r   NN)r   r.   joinr8   rG   r   r1   r2   )dados
id_clientelojaloja_latloja_lonpartespendereco_strrC   rD   	dist_osrmdist_havr7   s                r   calcular_distancia_clienter]   G   s&   J'DJHK H 			*b!		)R 		(B		(B		(BF 995A1a56L#L1GWw2%h'7K	 gw..	'#HhIHWg--  6  	'$a(gw&&	's*   =CC8C 	C5C0*C50C5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)uF   Calcula taxa de entrega baseado na distância usando tabela txentrega.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fetchoner2   closer1   r.   r0   range)	distanciaconnrh   rd   	faixa_1_d	faixa_1_vtaxaifaixa_dfaixa_v
faixa_10_v
taxa_finalr7   s                r   calcular_taxa_entregarw   d   sg   DF/z-@A!IJ<		

 E IIj)	IIj)	 Y%:'0'<5##D,YK7QR[Q\\}  C  ~D  E (		

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

 1  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Decimalr0   )rowoutkvs       r   convert_typesr      sN    

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   rh   ri   rj   rk   r1   r2   )rn   rh   r}   r7   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| }nvt        |       j                  dd      }|d	z  }|rN|j                         j                         }d
|v sd|v r|dz  }n'd|v r|dz  }nd|v sd|v sd|v r|dz  }n|dz  }n|dz  }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)z+Envia texto RAW para impressora no Windows.win32N)Fu>   Impressão silenciosa disponível apenas no Windows (pywin32).r   )PedidoNRAWcp1252replace)errorss   dbematechdarumas   mepsons   ielgintancadiebolds   V )TNF)sysplatform
win32printGetDefaultPrinterOpenPrinterStartDocPrinterStartPagePrinterrz   bytesstrencoder,   lowerWritePrinterEndPagePrinterEndDocPrinterClosePrinterr1   )	conteudoprinter_namemarca_impressoranomehPrinterhJobr6   marcar7   s	            r   send_to_printerr      s   
||w*"4V =z;;=))$/	.--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- ((2##H- c!f}sN   -F 
E1 "C	E +E1 F E..E1 1FF 	F+F& F+&F+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}t        j                  d      }g d }|d   |d   |d	   |d   |d   |d   |d   ||||||j                  d!|d         |g}|"|j                  d"       |j                  |       d#d$j                  |       d%d$j                  d&gt	        |      z         d'}|j!                  ||       |j#                          t        d(| d)| d*| d+|d    d,| 
       b 	 |r	 |j                          |r	 |j                          yy# t        $ r	 d|d<   Y w xY w# t        $ r Y w xY w# t        $ r Y yw xY w# t        $ r}t        d-|         d}~ww xY w# t        $ r Y tw xY w# t        $ r Y yw xY w# |r!	 |j                          n# t        $ r Y nw xY w|r!	 |j                          w # t        $ r Y w w xY ww xY w).z1Grava dados do pedido na tabela deliverypendente.N
rK   r   )telefonecepr   r3   rL   complemento	nropedidozTel:r   zCEP:r   zNome:r   zCompl:r   zEnd:r;   r   r3   r   rL   zPEDIDO NRO:r   u/   [DELIVERY PENDENTE] Sem telefone, não gravandoTr_   precoqtdchaveclassezTAXA ENTREGA	TXENTREGArT   )r   r   r   r   r3   rL   r   produtor   
quantidadecodigoprodutor   clienterT   r   formapagamentozINSERT INTO deliverypendente (rQ   z
) VALUES (z%s)z[DELIVERY PENDENTE] z	 (chave: z
, classe: z) gravado para z
 | Forma: z[DELIVERY PENDENTE ERRO] )split
startswithr   r,   r+   intr1   r2   rk   r   rh   r.   r0   r   appendrR   ri   commit)r   produtosforma_pagamentorn   rh   linhascliente_datalinhaend_inforX   nro_strprod	prod_nome
prod_precoprod_qtd
prod_chaveprod_classerT   colunasvaloressqlr7   s                         r   gravar_delivery_pendenter      s   DFf%
 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t  

 } z-D,Itxx34J488E1-.H'2.J((8R0K*(
) \2JG" [)Z(U#V$Z(Y']+  L,@AG  */0/2499W3E2FjQUQZQZ\`[adghodp[pQqPrrstCNN3(KKM&yk:,jQ\P]]lmy  {E  nF  mG  GQ  Ra  Qb  ca n  

 G ! 201L-2B  
    )!-.  
    

  s   E)O 1O  O 0N$>O N9 (O	 :FO ?O8 P $N62O 5N66O 9	OO		OO	O5!O00O55P 8	PP	PPQP+*Q+	P74Q6P77Q=QQ	QQQQ)Nr   )__doc__r{   r	   r   mysql.connectormysqlr-   flaskr   databaser   services.dados_lojar   r   win32apir1   r   r8   rG   r]   rw   r   r   r   r    r   r   <module>r      sx    @   
     0&,:3l
 F$NjC  JHs   A 	AA