
    e2i                     D   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  S SKJrJrJr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\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r " S S\R@                  5      r!g)    )viewsetsstatus)action)Response)IsAuthenticated)get_object_or_404)date)PayrollIntegrationEmployeeMappingProjectMappingPayrollSubmission)PayrollIntegrationSerializerEmployeeMappingSerializerProjectMappingSerializerPayrollSubmissionSerializerPayrollSubmitRequestSerializer)PayrollService)MappingServicec                   b   ^  \ rS rSrSr\r\/rS r	U 4S jr
S r\" SS/S9SS	 j5       rS
rU =r$ )PayrollIntegrationViewSet   z)ViewSet for managing payroll integrationsc                     U R                   R                  R                  S5      n[        R                  R                  5       nU(       a  UR                  US9nU$ )N
company_id)r   )requestquery_paramsgetr
   objectsallfilter)selfr   querysets      D:\TimeStamps\payroll\views.pyget_queryset&PayrollIntegrationViewSet.get_queryset   sH    \\..22<@
%--113*=H    c                 B   > [         TU ]  5       nU R                  US'   U$ )z!Add request to serializer contextr   )superget_serializer_contextr   )r    context	__class__s     r"   r(   0PayrollIntegrationViewSet.get_serializer_context%   s#    '02!\\	r%   c                 `    U R                  U R                  5       5      n[        U5      nU R                  USS9n[	        UR
                  5      $ ! [         aR  nS[        U5      ;   a=  SSKnUR                  5         [	        S[        U5      S.[        R                  S9s SnA$ e SnAff = f)	z,Override list to handle serialization safelyT)manyzexpected a numberr   NzSerialization error)errordetailr   )filter_querysetr#   listget_serializerr   data
ValueErrorstr	traceback	print_excr   HTTP_500_INTERNAL_SERVER_ERROR)	r    r   argskwargsr!   queryset_list
serializerer7   s	            r"   r2   PayrollIntegrationViewSet.list+   s    	++D,=,=,?@H NM,,],FJJOO,, 	"c!f, ##%2!!f! !??A A 	s%   AA 
B-AB(!B-'B((B-Tpostr/   methodsc                 <   U R                  5       nUR                  S:X  a  [        SSS.[        R                  S9$  [        U5      nUR                  5       n[        U5      $ ! [         a.  n[        S[        U5      S.[        R                  S9s SnA$ SnAff = f)z!Test connection to payroll systemnoneFzNo payroll provider configured)validmessager0   N)

get_objectproviderr   r   HTTP_400_BAD_REQUESTr   validate_connection	Exceptionr6   r9   )r    r   pkintegrationserviceresultr>   s          r"   test_connection)PayrollIntegrationViewSet.test_connection=   s     oo'6); 113 3
	=$[1G002FF## 	=q6 ;;= =	=s   %A# #
B-#BBB )N)__name__
__module____qualname____firstlineno____doc__r   serializer_classr   permission_classesr#   r(   r2   r   rP   __static_attributes____classcell__)r*   s   @r"   r   r      sA    33)*$ 4&*= +=r%   r   c                   (    \ rS rSrSr\r\/rS r	Sr
g)EmployeeMappingViewSetS   z&ViewSet for managing employee mappingsc                     U R                   R                  R                  S5      nU(       a  [        R                  R                  US9$ [        R                  R                  5       $ Nintegration_idpayroll_integration_id)r   r   r   r   r   r   r   r    ra   s     r"   r#   #EmployeeMappingViewSet.get_querysetX   sO    22667GH"**111XX&&**,,r%   rR   N)rS   rT   rU   rV   rW   r   rX   r   rY   r#   rZ   rR   r%   r"   r]   r]   S   s    00)*-r%   r]   c                   (    \ rS rSrSr\r\/rS r	Sr
g)ProjectMappingViewSet_   z%ViewSet for managing project mappingsc                     U R                   R                  R                  S5      nU(       a  [        R                  R                  US9$ [        R                  R                  5       $ r`   )r   r   r   r   r   r   r   rd   s     r"   r#   "ProjectMappingViewSet.get_querysetd   sO    22667GH!))000WW%%))++r%   rR   N)rS   rT   rU   rV   rW   r   rX   r   rY   r#   rZ   rR   r%   r"   rg   rg   _   s    //)*,r%   rg   c                   D    \ rS rSrSr\r\/rS r	\
" SS/S9S 5       rSrg	)
PayrollSubmissionViewSetk   z'ViewSet for viewing payroll submissionsc                 .   U R                   R                  R                  S5      nU R                   R                  R                  S5      n[        R                  R                  5       nU(       a  UR                  US9nU(       a  UR                  US9nU$ )Nra   user_idrb   )ro   )r   r   r   r   r   r   r   )r    ra   ro   r!   s       r"   r#   %PayrollSubmissionViewSet.get_querysetp   sv    22667GH,,++//	:$,,002nMHw7Hr%   Fr@   rA   c                    [        UR                  S9nUR                  5       (       d"  [        UR                  [
        R                  S9$ UR                  nUS   nUS   nUS   nUR                  S/ 5      nSSK	J
n   UR                  R                  US	9n	UR                  R                  S
5      n
U
(       a-  [        R                  R                  U
SS9R                  5       nO+[        R                  R                  SS9R                  5       nU(       d  [        SS0[
        R                  S9$ [        U5      nUR!                  [#        U5      UUU(       a  U Vs/ s H  n[#        U5      PM     snOSS9n[%        U5      n[        UR                  [
        R&                  S9$ s  snf ! UR(                   a    [        SS0[
        R*                  S9s $ [,         a-  n[        S[#        U5      0[
        R                  S9s SnA$ SnAf[.         a-  n[        S[#        U5      0[
        R0                  S9s SnA$ SnAff = f)z"Submit timesheet to payroll system)r4   r0   ro   period_start
period_end	stamp_idsr   )User)idra   T)rv   	is_active)rw   r.   z#No active payroll integration foundN)ro   rr   rs   rt   zUser not found)r   r4   is_validr   errorsr   rI   validated_datar   user.modelsru   r   r
   r   firstr   submit_timesheetr6   r   HTTP_201_CREATEDDoesNotExistHTTP_404_NOT_FOUNDr5   rK   r9   )r    r   submit_serializerr4   ro   rr   rs   rt   ru   userra   rM   rN   sid
submissionr=   r>   s                    r"   submitPayrollSubmissionViewSet.submit}   s    ;M ))++-44V=X=XYY //y/N+,'
HH["-	
 	%$	=<<##w#/D$\\--.>?N088??>]a?bhhj088??$?OUUWB! 557 7 %[1G 11G)%=Fy9y3s8y9D	 2 J 5Z@JJOOF4K4KLL	 :    	1)//1 1  	3Q113 3  	=Q;;= =	=sO   ?B3F. 3-F.  F)53F. )F. .*I	I#"HII"I :I IrR   N)rS   rT   rU   rV   rW   r   rX   r   rY   r#   r   r   rZ   rR   r%   r"   rl   rl   k   s6    12)* 56(+4= ,4=r%   rl   N)"rest_frameworkr   r   rest_framework.decoratorsr   rest_framework.responser   rest_framework.permissionsr   django.shortcutsr   datetimer	   payroll.modelsr
   r   r   r   payroll.serializersr   r   r   r   r    payroll.services.payroll_servicer    payroll.services.mapping_servicer   ModelViewSetr   r]   rg   ReadOnlyModelViewSetrl   rR   r%   r"   <module>r      s~    + , , 6 .    < ;8= 5 5 8=v	-X22 	-	,H11 	,G=x<< G=r%   