
    h*j                        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	  S SK
Jr  S SKJr  S SKJrJrJrJrJr  S S	KJr  S S
KJrJrJr  S SKJr  S\S\4S jrS\\   4S jr S\S\S\4S jr!SS\S\"S-  S\4S jjr#S\S\S\S\$4S jr%  S S\S\ S-  S\ S-  S\&S-  S\"S-  S\&S\&S\'\\   \&4   4S jjr( SS\S\ S\ S\"S-  S\4
S jjr)SS\"S-  S\4S jjr*g)!    )datetime)BytesIO)Workbook)Font)funcselect)insert)Session)BACKUP_LABELSTYPE_LABELSAnvizDevice
AnvizErrorAnvizRecord)settings)RelojConfig	get_relojload_relojes)	Marcacioncfgreturnc                     [        U R                  U R                  U R                  [        R
                  U R                  S9$ )N)	device_idhostporttimeoutcomm_password)r   r   r   r   r   ANVIZ_TIMEOUTr   )r   s    '/var/www/reloj-farallon/app/services.py_anviz_clientr      s6    --XXXX&&''     c            
          [        5        V s/ s HH  n U R                  U R                  U R                  U R                  U R
                  U R                  S.PMJ     sn $ s  sn f )Nidnamer   r   r   enabled)r   r#   r$   r   r   r   r%   rs    r   list_relojes_configr(       s[     
  A $$FFFFFFyy	
  
 
 
s   AAdbc                    [        U5      n U   UR                  5         UR                  5       nS S S 5        SnSnW H   n[        XU5      (       a  US-  nM  US-  nM"     UR                  UR                  [        U5      UUS.$ ! , (       d  f       N]= f! [        [        [
        4 a-  n[        UR                   SUR                   SU 35      UeS nAff = f)Nz (z): r      )reloj_id
reloj_name
downloadedinsertedskipped_duplicates)r   pingdownload_all_recordsr   OSErrorTimeoutErrorr$   r   _upsert_recordr#   len)r)   r   devicerecordsexcr/   skippedrecs           r   
sync_relojr<   .   s    3FEKKM113G  HG"3''MHqLG	  FFhh'l%  V . ECHH:RzSE:;DEs3   B !BB 
BB B C-(CCNr,   c                    / nU(       aA  [        U5      nUR                  (       d  [        UR                   S35      e[	        X5      /nO/ n/ n[        5        HO  nUR                  (       d   UR                  UR                   S35        M4   UR                  [	        X5      5        MQ     U(       a!  U(       d  [        SR                  U5      5      eU(       aU  U R                  5         UU[        S U 5       5      [        S U 5       5      [        S U 5       5      S.nU(       a  X'S'   U$ U R                  5         [        U5      S	:X  a  U(       d  US
   $ U[        S U 5       5      [        S U 5       5      [        S U 5       5      S.nU(       a  X'S'   U$ ! [         a&  nUR                  [        U5      5         S nAGMq  S nAff = f)Nu5    está deshabilitado en relojes.json (enabled: false)z (deshabilitado)z; c              3   *   #    U  H	  oS    v   M     g7fr.   N .0r'   s     r   	<genexpr>#sync_from_device.<locals>.<genexpr>b   s     !C7aL/7   c              3   *   #    U  H	  oS    v   M     g7fr/   Nr@   rA   s     r   rC   rD   c   s     ?w!*wrE   c              3   *   #    U  H	  oS    v   M     g7fr0   Nr@   rA   s     r   rC   rD   d   s     )S7a,@*A7rE   )resultserrorsr.   r/   r0   skipped_disabledr+   r   c              3   *   #    U  H	  oS    v   M     g7fr?   r@   rA   s     r   rC   rD   o   s     ;7aL/7rE   c              3   *   #    U  H	  oS    v   M     g7frG   r@   rA   s     r   rC   rD   p   s     7w!*wrE   c              3   *   #    U  H	  oS    v   M     g7frI   r@   rA   s     r   rC   rD   q   s     !K7a$8"97rE   )rJ   r.   r/   r0   )r   r%   r   r$   r<   r   appendstrjoincommitsumr6   )r)   r,   r:   r   rJ   rK   r9   outs           r   sync_from_devicerV   H   s   G!{{z)^_``b&'>C;;#((+;<=(z"23 " 'TYYv.//IIK" !!C7!CC?w??&))S7)S&SC *1&'JIIK
7|qqz;7;;7w77!!K7!KK	C ")J;  (c#h''(s   F
G)G

Gr;   c                 @   [        [        5      R                  UR                  UR                  UR
                  UR                  UR                  UR                  UR                  [        R                  " UR                  [        UR                  5      5      [        R                  " UR                  [        UR                  5      5      [        R                  " 5       S9
nUR!                  [        R                  S9nU R#                  U5      nUR$                  S:H  $ )N)
r,   r-   	user_codemarcacion_atbackup_typerecord_type	work_typebackup_label
type_label	synced_at)r#   r+   )mysql_insertr   valuesr#   r$   rX   	timestamprZ   r[   r\   r   getrQ   r   r   utcnowon_duplicate_key_updateexecuterowcount)r)   r   r;   stmtresults        r   r5   r5   x   s    	"))88--]]OOOO--"&&sCOO8LM??3??C4HI//# * D ''9<<'8DZZF??ar    desdehastarX   limitoffsetc                    [        [        5      n[        [        R                  " 5       5      R	                  [        5      nU(       aD  UR                  [        R                  U:  5      nUR                  [        R                  U:  5      nU(       aD  UR                  [        R                  U:*  5      nUR                  [        R                  U:*  5      nUbD  UR                  [        R                  U:H  5      nUR                  [        R                  U:H  5      nU(       aD  UR                  [        R                  U:H  5      nUR                  [        R                  U:H  5      nU R                  U5      =(       d    Sn	U R                  UR                  [        R                  R                  5       5      R                  U5      R                  U5      5      R                  5       n
[!        U
5      U	4$ )Nr   )r   r   r   countselect_fromwhererY   rX   r,   scalarscalarsorder_bydescrl   rm   alllist)r)   rj   rk   rX   r,   rl   rm   qcount_qtotalrowss              r   list_marcacionesr|      sm    	yATZZ\"..y9GGGI**e34--	 6 6% ?@GGI**e34--	 6 6% ?@GGI''945--	 3 3y @AGGI&&(23--	 2 2h >?IIg#!E


JJy--2245;;EBII&Q	

#% 	
 :ur    c                    [        XUS USSS9u  pEUR                  S S9  [        5       nUR                  nSUl        / SQnUR                  U5        US    H  n	[        S	S
9U	l        M     U H  n
UR                  U
R                  U
R                  U
R                  U
R                  R                  S5      U
R                  U
R                  U
R                  U
R                   R                  S5      /5        M     UR"                   HC  n[%        S U 5       5      n['        US-   S5      UR(                  US   R*                     l        ME     [/        5       nUR1                  U5        UR3                  S5        U$ )Ni r   )rl   rm   c                     U R                   $ N)rY   r&   s    r   <lambda>export_excel.<locals>.<lambda>   s    ANNr    )keyMarcaciones)IDReloju   Código empleadozFecha y horaTipou   Métodou   Código trabajoSincronizador+   T)boldz%Y-%m-%d %H:%M:%Sc              3   p   #    U  H,  n[        [        UR                  =(       d    S 5      5      v   M.     g7f) N)r6   rQ   value)rB   cs     r   rC   export_excel.<locals>.<genexpr>   s%     ;s!c#aggm,--ss   46   (   )r|   sortr   activetitlerP   r   fontr#   r-   rX   rY   strftimer^   r]   r\   r_   columnsmaxmincolumn_dimensionscolumn_letterwidthr   saveseek)r)   rj   rk   r,   r{   _wbwsheaderscellr'   colmax_lenbufs                 r   export_excelr      sL    
5$GD 	II*I+	B	BBH	G IIg1dO	  
		''(;<$$%89		
  zz;s;;;>w{B;OSV1128  )CGGCLHHQKJr    c                 v   U (       a  [        U 5      /O	[        5       n/ nU H  nUR                  UR                  UR                  UR
                  UR                  UR                  S.nUR                  (       d  SUS'   SUS'   UR                  U5        Mv  [        U5      n U   UR                  5       nS S S 5        UR                  W5        UR                  U5        M     U (       a  US   $ SU0$ ! , (       d  f       ND= f! [        [        [        4 a  nSUS'   [        U5      US'    S nANcS nAff = f)Nr"   F	connectedzADeshabilitado en relojes.json (reloj apagado o fuera de servicio)errorr   relojes)r   r   r#   r$   r   r   r   r%   rP   r   r1   updater   r3   r4   rQ   )r,   configsr   r   entryr7   r1   r9   s           r   device_statusr      s   '/y"#\^GG&&HHHHHH{{
 {{!&E+`E'NNN5!s#	&{{} LL 	u/ 2 qzw  G\2 	&!&E+ XE'N	&s0   $D&C57D5
D	?DD8D33D8r   )i  r   )+r   ior   openpyxlr   openpyxl.stylesr   
sqlalchemyr   r   sqlalchemy.dialects.mysqlr	   r`   sqlalchemy.ormr
   app.anviz_clientr   r   r   r   r   
app.configr   app.devicesr   r   r   
app.modelsr   r   rw   dictr(   r<   rQ   rV   boolr5   inttupler|   r   r   r@   r    r   <module>r      s{        # < "    < <  { { T$Z 7   4- -C$J -$ -` w  [  {  t  0 d? d? Tz	
 Dj   4	?C L  	222 2 Dj	2
 2j C$J  $  r    