
    e2i                     @   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   " S S\R                  5      r " S S\R                  5      r " S	 S
\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R$                  5      rg)    )serializers)PayrollIntegrationEmployeeMappingProjectMappingPayrollSubmissionPayrollSubmissionStamp)User)Projectc                      ^  \ rS rSr\R
                  " 5       r " S S5      rU 4S jrS r	S r
S rU 4S jrU 4S	 jrS
rU =r$ )PayrollIntegrationSerializer   c                   ,    \ rS rSr\r/ SQr/ SQr/ rSr	g)!PayrollIntegrationSerializer.Meta   )idcompany_nameprovider	is_activeapi_endpointapi_key
api_secret	last_syncsync_frequency
created_at
updated_at)r   r   r   r    N)
__name__
__module____qualname____firstlineno__r   modelfieldsread_only_fieldsexclude__static_attributes__r       $D:\TimeStamps\payroll\serializers.pyMetar      s    "

 Kr&   r(   c                 b   > [         TU ]  " U0 UD6  SU R                  ;   a  U R                  S	 g g )Ncompany)super__init__r"   )selfargskwargs	__class__s      r'   r,   %PayrollIntegrationSerializer.__init__   s2    $)&)#I& $r&   c                      UR                   (       d  gSSKJn  UR                  R	                  UR                   S9R                  S5      R                  5       nU(       a  UR                  $ S$ ! [         a     gf = f)z6Get company name safely without accessing relationshipNr   Companyr   name)	
company_idcompany.modelsr4   objectsfilteronlyfirstr6   	Exception)r-   objr4   r*   s       r'   get_company_name-PayrollIntegrationSerializer.get_company_name!   sf    	>>.oo,,,?DDVLRRTG#*7<<44 		s   A/ AA/ -A/ /
A<;A<c                 h   [        UR                  5      UR                  (       a  [        UR                  5      OSU R                  U5      UR                  UR
                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  S.nU$ )zWOverride to ensure UUID fields are serialized as strings and add company field manuallyN)r   r*   r   r   r   r   r   r   r   r   r   r   )strr   r7   r?   r   r   r   r   r   r   r   r   r   )r-   instancerepresentations      r'   to_representation.PayrollIntegrationSerializer.to_representation-   s     hkk"3;3F3Fs8../D 11(; ))!++$11''"--!++&55"--"--
 r&   c                    UR                  S5      (       am  UR                  S5      S:w  aX  UR                  S5      (       d  [        R                  " S5      eUR                  S5      (       d  [        R                  " S5      eU$ )z6Validate that API credentials are provided when activer   r   noner   z3API endpoint is required when integration is activer   z.API key is required when integration is active)getr   ValidationErrorr-   datas     r'   validate%PayrollIntegrationSerializer.validate@   sh    88K  TXXj%9V%C88N++!112ghh88I&&!112bccr&   c                   > U R                   R                  S5      R                  R                  S5      nU(       d  UR                  SS5      nU(       d  [        R
                  " SS05      eSSKJn   UR                  R                  US9nXAS'   [        TU ]-  U5      $ ! UR                   a    [        R
                  " SS05      ef = f)	z3Override create to set company from request contextrequestr*   Nz/Company is required. Please provide company ID.r   r3   r5   Company not found.)contextrI   rL   popr   rJ   r8   r4   r9   DoesNotExistr+   create)r-   validated_datar7   r4   r*   r0   s        r'   rU   #PayrollIntegrationSerializer.createI   s     \\%%i05599)D
'++It<J--L/  
 	+	oo))Z)8G %,y!w~n-- ## 	--//  	s   5B! !)C
c                 8  > U R                   R                  S5      R                  R                  S5      nU(       a$  SSKJn   UR
                  R                  US9nXRS'   [        TU ])  X5      $ ! UR                   a    [        R                  " SS05      ef = f)z-Override update to handle company if providedrP   r*   r   r3   r5   rQ   )rR   rI   rL   r8   r4   r9   rT   r   rJ   r+   update)r-   rC   rV   r7   r4   r*   r0   s         r'   rY   #PayrollIntegrationSerializer.updatec   s    \\%%i05599)D
.!//---<,3y) w~h77 '' !1133  s   A0 0)Br   )r   r   r   r    r   SerializerMethodFieldr   r(   r,   r?   rE   rM   rU   rY   r%   __classcell__)r0   s   @r'   r   r      s>    446L	 	'
&.48 8r&   r   c                   r    \ rS rSr\R
                  " 5       r\R                  " SSS9r " S S5      r	S r
Srg	)
EmployeeMappingSerializers   
user.emailTsource	read_onlyc                   :    \ rS rSr\r/ SQr/ SQrSS0SS0S.rSr	g)	EmployeeMappingSerializer.Metaw   )	r   user	user_name
user_emailpayroll_integrationexternal_employee_idr   r   r   r   r   r   requiredT)rg   rj   r   N)
r   r   r   r    r   r!   r"   r#   extra_kwargsr%   r   r&   r'   r(   re   w   s-    
 >&$.#5
r&   r(   c                 `    UR                   R                   SUR                   R                   3$ N rg   	firstnamelastnamer-   r>   s     r'   get_user_name'EmployeeMappingSerializer.get_user_name   )    (($$%Qsxx'8'8&9::r&   r   N)r   r   r   r    r   r[   rh   
EmailFieldri   r(   rv   r%   r   r&   r'   r^   r^   s   s1    113I''|tLJ

 

;r&   r^   c                   l    \ rS rSr\R
                  " SSS9r\R
                  " SSS9r " S S5      rSr	g	)
ProjectMappingSerializer   zproject.nameTra   zproject.codec                   :    \ rS rSr\r/ SQr/ SQrSS0SS0S.rSr	g)	ProjectMappingSerializer.Meta   )	r   projectproject_nameproject_coderj   external_project_coder   r   r   rl   rm   T)r   rj   r   N)
r   r   r   r    r   r!   r"   r#   rn   r%   r   r&   r'   r(   r~      s-    
 >"D)$.#5
r&   r(   r   N)
r   r   r   r    r   	CharFieldr   r   r(   r%   r   r&   r'   r{   r{      s0    (($OL(($OL

 

r&   r{   c                       \ rS rSr\R
                  " SSS9r\R                  " SSS9r\R                  " SSS9r
 " S S5      rS	rg
) PayrollSubmissionStampSerializer   z
stamp.dateTra   z
stamp.timezstamp.descriptionc                   (    \ rS rSr\r/ SQrSS/rSrg)%PayrollSubmissionStampSerializer.Meta   )r   stamp
stamp_date
stamp_timestamp_descriptionr   r   r   r   N)	r   r   r   r    r   r!   r"   r#   r%   r   r&   r'   r(   r      s    &_ ,/r&   r(   r   N)r   r   r   r    r   	DateFieldr   	TimeFieldr   r   r   r(   r%   r   r&   r'   r   r      sE    &&ldKJ&&ldKJ#--5HTXY0 0r&   r   c                       \ rS rSr\R
                  " 5       r\R                  " SSS9r\R                  " SSS9r
\" SSSS9r " S S	5      rS
 rSrg)PayrollSubmissionSerializer   r`   Tra   z(payroll_integration.get_provider_displaysubmission_stamps)rb   manyrc   c                   (    \ rS rSr\r/ SQr/ SQrSrg) PayrollSubmissionSerializer.Meta   )r   rj   provider_namerg   rh   ri   period_start
period_endsubmission_statusexternal_reference_idsubmitted_aterror_messagestampsr   r   )r   r   r   r   r   N)	r   r   r   r    r   r!   r"   r#   r%   r   r&   r'   r(   r      s    !

 Nr&   r(   c                 `    UR                   R                   SUR                   R                   3$ rp   rr   ru   s     r'   rv   )PayrollSubmissionSerializer.get_user_name   rx   r&   r   N)r   r   r   r    r   r[   rh   ry   ri   r   r   r   r   r(   rv   r%   r   r&   r'   r   r      sW    113I''|tLJ))1[gklM-5Ht_cdFN N;r&   r   c                       \ rS rSrSr\R                  " 5       r\R                  " 5       r	\R                  " 5       r
\R                  " \R                  " 5       SSS9rS rSrg)	PayrollSubmitRequestSerializer   z+Serializer for timesheet submission requestFT)childrm   allow_emptyc                 J    US   US   :  a  [         R                  " S5      eU$ )Nr   r   z&period_start must be before period_end)r   rJ   rK   s     r'   rM   'PayrollSubmitRequestSerializer.validate   s+    $|"44--.VWWr&   r   N)r   r   r   r    __doc__r   	UUIDFielduser_idr   r   r   	ListField	stamp_idsrM   r%   r   r&   r'   r   r      sV    5##%G((*L&&(J%%##%Ir&   r   N)rest_frameworkr   payroll.modelsr   r   r   r   r   user.modelsr	   projects.modelsr
   ModelSerializerr   r^   r{   r   r   
Serializerr   r   r&   r'   <module>r      s    &   #c8;#>#> c8L; ; ; ;(
{:: 
"0{'B'B 0;+"="= ;&[%;%; r&   