
    i                     Z    S SK r S SKJrJrJr  S SKJr  S SKJr  SSKJ	r	   " S S\	5      r
g)	    N)ListDictOptional)datetime)Stamp   )IPayrollAdapterc            
           \ rS rSrSrS\\   S\S\4S jr	S\S\
S\
S	\S\4
S
 jrS\4S jrS\S\\   4S jrS\S\\   4S jrS\S\4S jrS\
S\
4S jrSrg)ProCounterAdapter   z%Adapter for ProCounter payroll systemstampsemployee_idreturnc                    / nU H  nUR                   (       a  U R                  UR                   5      OSnSnUR                  (       a.  U R                  [	        UR                  R
                  5      5      nSnUR                  (       a3  [        UR                  S5      (       a  UR                  R                  OSnUR                  R                  5       UUUUR                  =(       d    SS.nUR                  U5        M     SUUS.0$ )z+
Transform Stamp data to ProCounter format
z0:00Ncode )dayhoursjob_codeactivity_codenotestimesheet_submission)employee_numbertime_entries)duration_format_duration_for_procounterprojectget_project_mappingstridtaskhasattrr   date	isoformatdescriptionappend)	selfr   r   r   stamp	hours_strr   r   entrys	            ,D:\TimeStamps\payroll\adapters\procounter.pytransform_stamp_data&ProCounterAdapter.transform_stamp_data   s     EPUP^P^<<U^^LdjI H}}33C8H8H4IJ !Mzz3:5::v3N3N

TX zz++-"$!.**0bE &+ 0 ##. ,%
 	
    period_start
period_endtimesheet_datac                 R    U R                    S3nU R                  U5      nUUR                  5       S.UEnU R                  SS.n[        R
                  " XWUSS9n	U	R                  S:X  a'  U	R                  5       n
SU
R                  S	S
5      S/ S.$ SS
SU	R                   3U	R                  /S.$ ! [        R                  R                   a'  nSS
S[        U5       3[        U5      /S.s SnA$ SnAf[         a'  nSS
S[        U5       3[        U5      /S.s SnA$ SnAff = f)z$
Submit timesheet to ProCounter API
z/api/timesheet/submit)r   week_endingapplication/jsonz	X-API-KeyzContent-Type   )jsonheaderstimeout   Tsubmission_idr   z Timesheet submitted successfully)successreference_idmessageerrorsFzAPI returned status zNetwork error: NzUnexpected error: )api_endpoint_calculate_week_endingr$   api_keyrequestspoststatus_coder7   gettext
exceptionsRequestExceptionr   	Exception)r'   r   r/   r0   r1   urlr3   payloadr8   responsedataes               r+   submit_timesheet"ProCounterAdapter.submit_timesheet/   sT   0	&&''<=C 55jAK $/*446 !G "\\ 2G
  }}SQSTH##s*}}#$(HH_b$AA 	   %$&!5h6J6J5KL'}}o	  ""33 	  ",SVH5q6(	   	  "/Ax8q6(	 	s6   BB2 B2 2D&C2,D&2D&?D!D&!D&c                      U R                    S3nU R                  SS.n[        R                  " XSS9nUR                  S:H  $ ! [
         a     gf = f)z%
Validate ProCounter API credentials
z/api/auth/validater4   r5   
   )r8   r9   r:   F)r@   rB   rC   rF   rE   rJ   )r'   rK   r8   rM   s       r+   validate_credentials&ProCounterAdapter.validate_credentialsk   sa    
	&&''9:C!\\ 2G
  ||C"EH''3.. 		s   AA 
AAuser_idc                     g)z
This should be implemented by the service layer using EmployeeMapping model
For now, return None as this requires database access
N )r'   rV   s     r+   get_employee_mapping&ProCounterAdapter.get_employee_mapping{       
 r.   
project_idc                     g)z
This should be implemented by the service layer using ProjectMapping model
For now, return None as this requires database access
NrX   )r'   r\   s     r+   r   %ProCounterAdapter.get_project_mapping   r[   r.   duration_strc                 j    U R                  U5      n[        U5      n[        X#-
  S-  5      nU SUS 3$ )z1
Convert duration to HH:MM format for ProCounter
<   :02d)_parse_durationint)r'   r_   r   hms        r+   r   1ProCounterAdapter._format_duration_for_procounter   s@     $$\2Jb !AaW~r.   r#   c                 Z    SUR                  5       -
  S-  nUS:X  a  SnSSKJn  X" US9-   $ )z6
Calculate week ending date (Saturday) for ProCounter
      r   )	timedelta)days)weekdayr   rl   )r'   r#   days_until_saturdayrl   s       r+   rA   (ProCounterAdapter._calculate_week_ending   s<      !4<<>1Q6!#"#&i%8999r.   rX   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r,   r   rP   boolrT   r   rY   r   r   rA   __static_attributes__rX   r.   r+   r   r      s    /"
4; "
S "
T "
H:: : 	:
 : 
:xd  C HSM c hsm C C :8 : :r.   r   )rC   typingr   r   r   r   stamps.modelsr   baser	   r   rX   r.   r+   <module>r{      s%     ' '   !R: R:r.   