
     j[                        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
Jr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJrJrJr  S S
KJr  S SKJr  \" \5      R;                  5       R<                  r\" SS9r\" \ " \S-  5      S9r!\RE                  S\" \ " \S-  5      S9SS9  \RG                  S5      S 5       r$\RK                  S\
S9S\4S j5       r&\RK                  S5      S 5       r'\RK                  S5      S8S\ S-  4S jj5       r(\RS                  S5      \" SS S!9\" \5      4S\ S-  S"\4S# jj5       r*\RK                  S$5      \" SS%S!9\" SS%S!9SS\" S&S'S(S)9\" S S S*9\" \5      4S+\ S-  S,\ S-  S-\+S-  S\ S-  S.\+S/\+S"\4S0 jj5       r,\RK                  S15      \" S2S%S!9\" S2S%S!9S\" \5      4S+\ S,\ S\ S-  S"\4S3 jj5       r-S4\ S5\.S6\ 4S7 jr/g)9    )datetime)Path)DependsFastAPIHTTPExceptionQueryRequest)HTMLResponseStreamingResponse)StaticFiles)Jinja2Templates)Session)
AnvizError)Baseengineget_db)services)load_relojesu#   Reloj Farallón - Marcaciones Anviz)title	templates)	directoryz/staticstatic)namestartupc                  Z    [         R                  R                  [        S9  [	        5         g )N)bind)r   metadata
create_allr   r        #/var/www/reloj-farallon/app/main.pyr   r      s    MM&)Nr    /)response_classrequestc                 2    [         R                  SSU 05      $ )Nz
index.htmlr$   )r   TemplateResponse)r$   s    r!   indexr'      s    %%lY4HIIr    z/api/relojesc                  0    S[         R                  " 5       0$ )Nrelojes)r   list_relojes_configr   r    r!   api_relojesr+       s    x33566r    z/api/statusNreloj_idc                      [         R                  " U 5      $ ! [         a  n[        S[	        U5      5      UeS nAf[
         a  n[        S[	        U5      5      UeS nAff = f)N  i  )r   device_statusKeyErrorr   strFileNotFoundError)r,   excs     r!   
api_statusr4   %   sW    4%%h// 4CS*3 4CS*34s    
A 8A AA z	/api/syncz%Omitir para sincronizar los 3 relojes)descriptiondbc                      [         R                  " X5      $ ! [         a  n[        S[	        U5      5      UeS nAf[
         a  n[        S[	        U5      S9UeS nAff = f)Nr.   i  )detail)r   sync_from_devicer0   r   r1   r   )r,   r6   r3   s      r!   api_syncr:   /   sW    
;((66 4CS*3 ;CC1s:;s    
A8AAAz/api/marcacionesz
YYYY-MM-DDd      i  )gele)r=   desdehasta	user_codelimitoffsetc                    U (       a
  [        U SS9OS nU(       a
  [        USS9OS n[        R                  " XgXX4U5      u  pU
U	 Vs/ s Hk  nUR                  UR                  UR
                  UR                  UR                  R                  SS9UR                  UR                  UR                  S.PMm     snS.$ s  snf )NF
end_of_dayT )sep)idr,   
reloj_namerA   marcacion_at
type_labelbackup_label	work_type)totalitems)_parse_dater   list_marcacionesrI   r,   rJ   rA   rK   	isoformatrL   rM   rN   )r?   r@   rA   r,   rB   rC   r6   d_desded_hastarowsrO   rs               r!   api_marcacionesrX   <   s     7<k%E2G5:k%D1G++
W&KD  
  ddJJll[[ ! 8 8S 8 All ![[	 
 
s   A2B>z/api/export/excel.c                     [        U SS9n[        USS9nXE:  a  [        SS5      e[        R                  " X4XR5      nU(       a  SU 3OSnSU SU  SU S	3n[	        US
SSU S30S9$ )NFrE   T  z0La fecha inicial no puede ser mayor que la final_ marcacionesz.xlsxzAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetzContent-Dispositionzattachment; filename="")
media_typeheaders)rQ   r   r   export_excelr   )	r?   r@   r,   r6   rT   rU   bufsuffixfilenames	            r!   api_export_excelre   ]   s     %E2G%D1GC!STT


W
?C'q
^RFVHAeWAeWE:HV&*@
!(LM r    valuerF   returnc                      [         R                  " U S5      nU(       a  UR	                  SSSS9$ UR	                  SSSS9$ ! [         a  n[        SS5      UeS nAff = f)Nz%Y-%m-%drZ   u*   Formato de fecha inválido. Use YYYY-MM-DD   ;   )hourminutesecondr   )r   strptime
ValueErrorr   replace)rf   rF   dtr3   s       r!   rQ   rQ   s   sn    Xuj1 zzr"Rz88::1Qq:11	  XC!MNTWWXs   A 
AAA)N)0r   pathlibr   fastapir   r   r   r   r	   fastapi.responsesr
   r   fastapi.staticfilesr   fastapi.templatingr   sqlalchemy.ormr   app.anviz_clientr   app.databaser   r   r   appr   app.devicesr   __file__resolveparentBASE_DIRr1   r   mounton_eventr   getr'   r+   r4   postr:   intrX   re   boolrQ   r   r    r!   <module>r      sy     C C = + . " ' - -  $>!!#**9:c([*@&AB	 		)[3x(/B+CD8	 T i 
 \*J7 J +J 7 7 4t 4 4 + 3Z[&/	;Dj	;	; 	; 	d=d= sqT*a.&/:: Tz Dj	
   	 @ 	s5s5&/	 Dj 		 *2s 2 2 2r    