Ë
    „›siþ  ã                   ó<   — d Z ddlmZ ddlZddlmZ  G d„ d«      Zy)a  
ETimeOfficeAPI Class for interacting with the ETimeOffice API.

This module provides an interface to interact with the ETimeOffice API.
It includes methods to fetch punch data, validate dates, and convert response data
into Python datetime objects for further processing.
é    )ÚdatetimeN)ÚHTTPBasicAuthc                   óF   — e Zd ZdZd
d„Zdd„Zd„ Zdd„Zdd„Zdd„Z	dd„Z
y	)ÚETimeOfficeAPIzh
    A client for interacting with the ETimeOffice API to fetch punch data and related information.
    c                 óR   — || _         || _        |j                  d«      dz   | _        y)z7
        Initialize the ETimeOfficeAPI client.
        ú/N)ÚusernameÚpasswordÚrstripÚbase_url)Úselfr	   r
   r   s       ú9/var/www/python-projects/worksol/biometric/etimeoffice.pyÚ__init__zETimeOfficeAPI.__init__   s'   € ð !ˆŒØ ˆŒØ Ÿ™¨Ó,¨sÑ2ˆó    c                 ó‚   — 	 |rt        j                  |d«       yt        j                  |d«       y# t        $ r Y yw xY w)z'
        Validate date format.
        z%d/%m/%Y_%H:%Mú%d/%m/%YTF)r   ÚstrptimeÚ
ValueError)r   Údate_strÚ	with_times      r   Ú_is_valid_datezETimeOfficeAPI._is_valid_date   sG   € ð	ÙÜ×!Ñ! (Ð,<Ô=ð ô ×!Ñ! (¨JÔ7ØøÜò 	Ùð	ús   ‚2 ›2 ²	>½>c                 óö  — |j                  dd«      sºd|v r'|d   D ]  }	 t        j                  |d   d«      |d<   Œ! d|v r‹|d   D ]ƒ  }	 t        j                  |d   d«      j	                  «       |d<   	 t        j                  |d	   d
«      j                  «       |d	<   	 t        j                  |d   d
«      j                  «       |d<   Œ… |S # t        $ r Y Œ¾w xY w# t        $ r Y Œtw xY w#  Y ŒQxY w#  Y Œ±xY w)zC
        Convert punch data strings into datetime objects.
        ÚErrorTÚ	PunchDataÚ	PunchDatez%d/%m/%Y %H:%M:%SÚInOutPunchDataÚ
DateStringr   ÚINTimez%H:%MÚOUTTime)Úgetr   r   r   ÚdateÚtime)r   Úresponse_dataÚpunchs      r   Ú_convert_punch_datesz#ETimeOfficeAPI._convert_punch_dates)   s=  € ð × Ñ  ¨$Ô/Ø˜mÑ+Ø*¨;Ñ7ò EðÜ-5×->Ñ->Ø! +Ñ.Ð0Có.˜˜kÒ*ðð   =Ñ0Ø*Ð+;Ñ<ò EðÜ.6×.?Ñ.?Ø! ,Ñ/°ó/ç™$›&ð ˜lÑ+ð
Ü*2×*;Ñ*;Ø! (™O¨Wó+ç™$›&ð ˜h™ð
Ü+3×+<Ñ+<Ø! )Ñ,¨gó,ç™$›&ð ˜iÒ(ðð& Ðøô- &ò Ùðûô &ò ÙðûðÙûð
Ùús;    CÁ*CÁ6*C-Â!*C4Ã	CÃCÃ	C*Ã)C*Ã-C1Ã4C8c                 óF  — | j                  ||«      r| j                  ||«      sdd|rdz   dœS dz   dœS | j                  › |› d|› d|› d|› }t        j                  |t	        | j
                  | j                  «      d	¬
«      }| j                  |j                  «       «      S )zI
        Make an authenticated API request and parse punch data.
        Tz-Error: Invalid date format. Expected format: zDD/MM/YYYY_HH:MMz
DD/MM/YYYY)r   ÚMsgz	?Empcode=z
&FromDate=z&ToDate=é   )ÚauthÚtimeout)	r   r   Úrequestsr    r   r	   r
   r%   Újson)r   ÚendpointÚemp_codeÚ	from_dateÚto_dater   ÚurlÚresponses           r   Ú_fetch_datazETimeOfficeAPI._fetch_dataL   s¾   € ð
 ×Ñ 	¨9Ô5Ø×#Ñ# G¨YÔ7ð ØFÙ)2Ð%ñFñð ð 9EñFñð ð —‘ ˜z¨°8°*¸JÀyÀkÐQYÐZaÐYbÐcˆÜ—<‘<Ø”m D§M¡M°4·=±=ÓAÈ2ô
ˆð ×(Ñ(¨¯©«Ó9Ð9r   c                 ó.   — | j                  d|||d¬«      S )z6
        Download punch data with timestamps.
        ÚDownloadPunchDataT©r   ©r3   ©r   r/   r0   r.   s       r   Údownload_punch_dataz"ETimeOfficeAPI.download_punch_data`   s'   € ð ×ÑØ ¨9°gÈð  ó 
ð 	
r   c                 ó.   — | j                  d|||d¬«      S )zB
        Download punch data with MCID (Machine Code ID).
        ÚDownloadPunchDataMCIDTr6   r7   r8   s       r   Údownload_punch_data_mcidz'ETimeOfficeAPI.download_punch_data_mcidh   s'   € ð ×ÑØ# X¨y¸'ÈTð  ó 
ð 	
r   c                 ó.   — | j                  d|||d¬«      S )zF
        Download in and out punch data (without timestamps).
        ÚDownloadInOutPunchDataFr6   r7   r8   s       r   Údownload_in_out_punch_dataz)ETimeOfficeAPI.download_in_out_punch_datap   s'   € ð ×ÑØ$ h°	¸7Èeð  ó 
ð 	
r   N)z https://api.etimeoffice.com/api/)T)ÚALL)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r%   r3   r9   r<   r?   © r   r   r   r      s+   „ ñó3óò!óF:ó(
ó
ô
r   r   )rD   r   r+   Úrequests.authr   r   rE   r   r   ú<module>rG      s!   ðñõ ã Ý '÷g
ò g
r   