
    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rg)NetvisorAdapter   z#Adapter for Netvisor payroll systemstampsemployee_idreturnc                 L   / nU G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U R                  UR                  5      nUR                  R                  5       UUUR                  (       a1  [        UR                  S5      (       a  UR                  R                  OSUR                  =(       d    SUS.nUR                  U5        GM     SUUS.0$ )z)
Transform Stamp data to Netvisor format
g        Ncode )datehourscost_center	task_codedescriptionpaycode	timesheet)r   entries)duration_parse_durationprojectget_project_mappingstrid_map_stamp_function_to_paycodestamp_functionr   	isoformattaskhasattrr   r   append)	selfr   r   r   stampr   r   r   entrys	            *D:\TimeStamps\payroll\adapters\netvisor.pytransform_stamp_data$NetvisorAdapter.transform_stamp_data   s     E<ANND((8PSE K}}"66s5==;K;K7LM 99%:N:NOG 

,,.*05

wuzzSY?Z?ZUZZ__`d$006B"E NN5!) . *"
 	
    period_start
period_endtimesheet_datac                 T    U R                    S3nUUR                  5       UR                  5       S.UEnSU R                   3SS.n[        R                  " XVU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 Netvisor API
z/timesheet/submit)r   r.   r/   Bearer application/jsonAuthorizationzContent-Type   )jsonheaderstimeout   Treference_idr   z Timesheet submitted successfully)successr;   messageerrorsFzAPI returned status zNetwork error: NzUnexpected error: )api_endpointr#   api_keyrequestspoststatus_coder7   gettext
exceptionsRequestExceptionr   	Exception)r'   r   r.   r/   r0   urlpayloadr8   responsedataes              r*   submit_timesheet NetvisorAdapter.submit_timesheet.   sU   .	&&''89C  + , 6 6 8(224 !	G $+4<<.!9 2G
  }}SQSTH##s*}}#$(HH^R$@A 	   %$&!5h6J6J5KL'}}o	  ""33 	  ",SVH5q6(	   	  "/Ax8q6(	 	s6   BB3 B3 3D'C3-D'3D' D"D'"D'c                      U R                    S3nSU R                   3SS.n[        R                  " XSS9nUR                  S:H  $ ! [
         a     gf = f)	z#
Validate Netvisor API credentials
z/auth/validater2   r3   r4   
   )r8   r9   r:   F)r?   r@   rA   rD   rC   rH   )r'   rI   r8   rK   s       r*   validate_credentials$NetvisorAdapter.validate_credentialsh   sg    
	&&'~6C#*4<<.!9 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'   rT   s     r*   get_employee_mapping$NetvisorAdapter.get_employee_mappingx       
 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
NrV   )r'   rZ   s     r*   r   #NetvisorAdapter.get_project_mapping   rY   r-   r"   c                 4    SSSSS.nUR                  US5      $ )zf
Map internal stamp_function to Netvisor paycode
Default mapping - can be extended with configuration
REGULAROVERTIMEVACATIONSICK)W1W2F1F2)rD   )r'   r"   mappings      r*   r!   .NetvisorAdapter._map_stamp_function_to_paycode   s*     	
 {{>955r-   rV   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r+   r   rN   boolrR   r   rW   r   r!   __static_attributes__rV   r-   r*   r   r      s    -!
4; !
S !
T !
F88 8 	8
 8 
8td  C HSM c hsm 6S 6S 6r-   r   )rA   typingr   r   r   r   stamps.modelsr   baser	   r   rV   r-   r*   <module>rr      s%     ' '   !I6o I6r-   