
    (iGu                        S SK JrJr  S SKJrJrJr  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rSS	KJrJrJrJrJr  SS
KJrJrJrJrJrJrJrJrJ r J!r!J"r"  \" SS/5      S 5       r#\" S/5      S 5       r$\" S/5      S 5       r%\" S/5      S 5       r&\" S/5      S 5       r'\" S/5      S 5       r(\" S/5      S 5       r)\" S/5      \" \/5      S 5       5       r*\" S/5      \" \/5      S 5       5       r+ " S S\RX                  5      r-g)    )statusviewsets)api_viewpermission_classesaction)AllowAnyIsAuthenticated)Response)get_object_or_404)QN   )CompanyCollectiveAgreementWorkingTimePolicyVacationPolicyOnboardingProgress)CompanySerializerCompanySearchSerializerCollectiveAgreementSerializerWorkingTimePolicySerializerVacationPolicySerializerOnboardingProgressSerializerOnboardingDataSerializerStep1CompanyProfileSerializer"Step2CollectiveAgreementSerializer Step3WorkingTimePolicySerializerStep4VacationPolicySerializerGETPOSTc                    U R                   S:X  Ga)   [        R                  R                  5       nU(       d  [	        SSSSSS.5      $ [        U5      R                  SSSSS.n[        US5      (       a"  [        UR                  5      R                  US'   [        US5      (       a"  [        UR                  5      R                  US'   [        US5      (       a"  [        UR                  5      R                  US'   [        US5      (       a"  [        UR                  5      R                  US'   [	        U5      $ U R                   S
:X  a  [)        U R                  S9nUR+                  5       (       ar  UR,                  S   n[        R                  R.                  " S0 UD6n[0        R                  R/                  USS9  [	        SUR2                  S.[$        R4                  S	9$ [	        UR6                  [$        R8                  S	9$ g! [          a-  n[	        S[#        U5      0[$        R&                  S	9s SnA$ SnAff = f)zGet or create onboarding datar   N)companycollective_agreementworking_time_policyvacation_policyonboarding_progressr"   r#   r$   r%   errorr   r   datar!   company_profiler!   current_stepz$Onboarding data created successfullymessage
company_id )methodr   objectsfirstr
   r   r)   hasattrr   r"   r   r#   r   r$   r   r%   	Exceptionstrr   HTTP_500_INTERNAL_SERVER_ERRORr   is_validvalidated_datacreater   idHTTP_201_CREATEDerrorsHTTP_400_BAD_REQUEST)requestr!   r)   e
serializercompany_datas         D:\TimeStamps\company\views.pyonboarding_datarD      s    ~~"	]oo++-G#,0+/'++/!   -W5::(,'+#''+D w 677/LWMiMi/j/o/o+,w 566.I'JeJe.f.k.k*+w 122*B7CZCZ*[*`*`&'w 566.J7KfKf.g.l.l*+D>! 
6	!-7<<@
  %44Y?Loo,,<|<G &&--gL]-^(N^e^h^hi!'!8!8: :
))&2M2MNN 
"  	]Wc!f-f6[6[\\	]s$   5H 	C1H 
H?"H:4H?:H?c                 :   [        U R                  S9nUR                  5       (       a  [        R                  R                  5       nU(       a@  UR                  R                  5        H  u  p4[        X#U5        M     UR                  5         OH[        R                  R                  " S0 UR                  D6n[        R                  R                  USS9  [        SUR                  S.[        R                  S9$ [        UR                   [        R"                  S9$ )zHandle Step 1: Company Profiler(   r"   r+   z"Company profile saved successfullyr-   r'   r0   )r   r)   r8   r   r2   r3   r9   itemssetattrsaver:   r   r
   r;   r   HTTP_200_OKr=   r>   )r?   rA   r!   keyvalues        rC   step1_company_profilerL   F   s     /GLLAJ//'')(77==?
e, @LLN oo,,Iz/H/HIG&&--gLb-c$HX_XbXbc#//1 	1J%%f.I.IJJ    c                    [         R                  R                  5       nU(       d  [        SS0[        R
                  S9$ [        U R                  S9nUR                  5       (       a  [        US5      (       aL  UR                  nUR                  R                  5        H  u  pE[        X4U5        M     UR                  5         O,[        R                  R                   " S
SU0UR                  D6  UR"                  nSUl        UR                  5         [        SS	0[        R&                  S9$ [        UR(                  [        R*                  S9$ )z#Handle Step 2: Collective Agreementr&   Company not foundr'   r(   r"   r!   r#   r.   z'Collective agreement saved successfullyr0   )r   r2   r3   r
   r   HTTP_404_NOT_FOUNDr   r)   r8   r4   r"   r9   rF   rG   rH   r   r:   r%   r,   rI   r=   r>   )r?   r!   rA   r"   rJ   rK   progresss          rC   step2_collective_agreementrR   \   s    oo##%G"56v?X?XYY3FJ7233#*#?#? (77==?
,59 @ %%'''..\w\*B[B[\ .. 5$MNW]WiWijjJ%%f.I.IJJrM   c                    [         R                  R                  5       nU(       d  [        SS0[        R
                  S9$ [        U R                  S9nUR                  5       (       GaU  UR                  R                  5       nUR                  SS5      US'   XS'   U R                  (       a*  [        U R                  S5      (       a  U R                  US	'   [        R                  R                  " S0 UD6nU R                  (       ae  [        U R                  S5      (       aJ  S
SKJn   UR                  R                  U R                  R$                  S9nXFl        UR)                  5         UR,                  nSUl        UR)                  5         [        S[1        UR$                  5      S.[        R2                  S9$ [        UR4                  [        R6                  S9$ ! UR*                   a     Nf = f)z"Handle Step 3: Working Time Policyr&   rO   r'   r(   namezDefault Policyr!   r;   
created_byr   Userr;   r$   z&Working time policy saved successfully)r.   	policy_idr0   )r   r2   r3   r
   r   rP   r   r)   r8   r9   copygetuserr4   r   r:   user.modelsrW   r;   r#   rH   DoesNotExistr%   r,   r6   rI   r=   r>   )r?   r!   rA   policy_datapolicyrW   r\   rQ   s           rC   step3_working_time_policyra   v   s    oo##%G"56v?X?XYY1w||DJ //446)oof6FGF!(I<<GGLL$77(/K%"**11@K@ <<GGLL$77(||''7<<??';+1(		
 .. 1$L[^_e_h_h[ijsy  tF  tF  G  	GJ%%f.I.IJJ $$ s   *AG   G32G3c                    [         R                  R                  5       nU(       d  [        SS0[        R
                  S9$ [        U R                  S9nUR                  5       (       a  [        US5      (       aL  UR                  nUR                  R                  5        H  u  pE[        X4U5        M     UR                  5         O,[        R                  R                   " SSU0UR                  D6  UR"                  nSUl        SUl        UR                  5         [        S	S
0[        R(                  S9$ [        UR*                  [        R,                  S9$ )zHandle Step 4: Vacation Policyr&   rO   r'   r(   r$   r!   	completedTr.   z9Vacation policy saved successfully. Onboarding completed!r0   )r   r2   r3   r
   r   rP   r   r)   r8   r4   r$   r9   rF   rG   rH   r   r:   r%   r,   is_completedrI   r=   r>   )r?   r!   rA   r$   rJ   rK   rQ   s          rC   step4_vacation_policyre      s    oo##%G"56v?X?XYY.GLLAJ7-..%55O(77==?
e4 @  """))W'WZ=V=VW .. + $$_`#//1 	1J%%f.I.IJJrM   c                 ,   [         R                  R                  5       nU(       d  [        SS0[        R
                  S9$ [        US5      (       a*  [        UR                  5      n[        UR                  5      $ [        SSS.[        R                  S9$ )zGet current onboarding progressr&   rO   r'   r%   r*   F)r,   rd   )r   r2   r3   r
   r   rP   r4   r   r%   r)   rI   )r?   r!   rA   s      rC   r%   r%      s}     oo##%G"56v?X?XYYw-..1'2M2MN

(():ER#//1 	1rM   c                     [        / SQ[        R                  [        R                  [
        R                  / SQS.5      $ )z*Get available options for onboarding forms))constructionConstruction)
technology
Technology)
healthcare
Healthcare)retailRetail)manufacturingManufacturing)servicesServices)agricultureAgriculture)forestryForestry)miningMining)energyEnergy)transportationTransportation)hospitalityHospitality)	education	Education)financeFinance)real_estatezReal Estate)otherOther))FIFinland)SESweden)NONorway)DKDenmark)
industriescompany_sizesagreement_typesvacation_accrual_types	countries)r
   r   COMPANY_SIZE_CHOICESr   AGREEMENT_TYPE_CHOICESr   VACATION_ACCRUAL_CHOICES)r?   s    rC   onboarding_optionsr      s=     
$ !55.EE"0"I"I
-  rM   c                 d   U R                   R                  SS5      R                  5       nU(       d  [        S/ 0[        R
                  S9$ [        R                  R                  [        US95      R                  S5      SS n[        US	S
9n[        SUR                  0[        R
                  S9$ )zSearch companies by nameq 	companiesr'   )name__icontainsrT   N
   Tmany)r   r[   stripr
   r   rI   r   r2   filterr   order_byr   r)   )r?   queryr   rA   s       rC   search_companiesr      s     KKOOC$**,Eb)&2D2DEE &&	% hvsI )>J[*//26;M;MNNrM   c           
      2  ^ U R                   R                  S5      nU R                   R                  S5      nU R                   R                  S5      nU(       a  U(       d  [        SS0[        R                  S9$ U(       Gd&  SSKJn  SS	KJn  SS
K	J
n   UR                  R                  US9nU" X7R                  5      (       Ga  SSKJn  UR                  R                  UR                   S9R#                  5       n	U	(       d  [        SS0[        R$                  S9$ ['        UR(                  5      n
UR(                  (       aF  SSKJn  SSKnU" UR/                  S5      5      Ul        UR1                  5         UR3                  5         UR5                  U5      n[7        UR8                  5      n[7        U5      n[:        R                  R=                  5       mT(       d!  [:        R                  R?                  SSSSSS9m[A        T5      R                   nSSK!J"n  U" U5      nUR                   nU
US'   SUUTRF                  =(       d    SUUU
S.n[        U[        RH                  S9nURK                  SUSS9  URK                  SUSS9  U$ [        SS 0[        RL                  S9$  [:        R                  R                  US!9mTRF                  (       d  [        SS#0[        R                  S9$ SS$K)J*n  SSK+nS%nTRF                  (       a&  S&S'S(S)TRF                  /n[Y        U4S* jU 5       5      nU(       Gap  SSKJn  SS+KJnJn  SS
K	J
n   UR                  R                  US9nU" X7R                  5      (       Ga  UR(                  n
UR(                  (       a@  SSKnU" UR/                  S5      5      Ul        UR1                  5         UR3                  5         UR5                  U5      n[7        UR8                  5      n[7        U5      nSSK!J"n  U" U5      nUR                   nU
US'   SU[A        T5      R                   TRF                  UUU
S.n[        U[        RH                  S9nURK                  SUSS9  URK                  SUSS9  U$ [        SS 0[        RL                  S9$  [Z        R\                  " TRF                  X#S,.S-S.S/0S09nUR^                  S1:X  Ga]  URa                  5       nSSKJn  SSKJn   UR                  R                  US9nU" U5      Ul        S2U;   a!  UR                  S2URb                  5      Ul1        S3U;   a!  UR                  S3URd                  5      Ul2        UR1                  5         SSK!J"n  SS
K	J
n  U" U5      nUR5                  U5      n[7        UR8                  5      n[7        U5      nSUR                   [A        T5      R                   TRF                  UUUR(                  S.n[        U[        RH                  S9nURK                  SUSS9  URK                  SUSS9  U$ [        SS 0[        RL                  S9$ ! URN                   a    [        SS 0[        RL                  S9s $ f = f! [:        RN                   a    [        SS"0[        RP                  S9s $ f = f! URN                   a    [        SS 0[        RL                  S9s $ f = f! URN                   aF    UR                  R?                  UU" U5      UR                  S2S5      UR                  S3S5      S49n GNf = f! [Z        Rf                  Rh                   a0  n[        SS5[7        U5       30[        Rj                  S9s SnA$ SnAff = f)6zLogin user using company API endpoint. Company ID is optional - if not provided, authenticates directly from local User database.r/   emailpasswordr&   zemail and password are requiredr'   r   rV   )check_password)RefreshToken)r   )SupervisorGroup)user_idz/Access not allowed. Supervisor rights required.)make_passwordN    zDefault Companyr   z1-5Unknownr   )rT   industrycompany_sizeprimary_locationapi_endpointUserReadSerializermust_change_passwordT)successr\   r!   r   accessrefreshr   access_tokenLax)samesiterefresh_tokenzInvalid email or passwordrX   rO   z#Company API endpoint not configured)settingsFz0.0.0.0z	127.0.0.1	localhostz192.168.1.104c              3   @   >#    U  H  oTR                   ;   v   M     g 7fN)r   ).0patternr!   s     rC   	<genexpr>login.<locals>.<genexpr>t  s     ^~G7+?+? ?~s   )r   r   )r   r   r   zContent-Typezapplication/json)jsontimeoutheaders   	firstnamelastname)r   r   r   r   z"Failed to connect to company API: )6r)   r[   r
   r   r>   r]   rW   django.contrib.auth.hashersr   rest_framework_simplejwt.tokensr   r2   r   supervisorgroup.modelsr   r   r;   existsHTTP_403_FORBIDDENboolr   r   secretstoken_urlsaferH   refresh_from_dbfor_userr6   r   r   r3   r:   r   user.serializersr   r   rI   
set_cookieHTTP_401_UNAUTHORIZEDr^   rP   django.confr   reanyrequestspoststatus_coder   r   r   
exceptionsRequestExceptionHTTP_503_SERVICE_UNAVAILABLE)r?   r/   r   r   rW   r   r   r\   r   is_supervisormust_change_password_flagr   r   r   r   r   rB   r   user_serializer	user_datar)   respr   r   is_local_endpointlocal_patternsauth_response	auth_datar@   r!   s                                @rC   loginr      s    !!,/JLLW%E||
+H78..
 	
 $>@O	<<##%#0Dh66B / 7 7 > >tww > O V V X$# "ST%88  -11J1J,K) ,,I" %2'2G2G2K$LDMIIK((* '//5"7#7#78 #G "////1%oo44.!(%*)2%' 5 G  7w?DD @"4T":+00	4M	01  $%+$+$8$8$>B*,,E  V-?-?@uMO9:!77 
//%%%4 ;<..
 	
 % #[+wOcOcd^~^^$M@6	<<##%#0Dh66,0,E,E) ,," %2'2G2G2K$LDMIIK((* '//5"7#7#78 #G @"4T":+00	4M	01  $%6w?DD$+$8$8*,,E  V-?-?@uMO9:!77 D	$MM$$$;');<	M ((C/)..0	 -E<<++%+8D$1($;DM"i/)2{DNN)S!Y.(1j$--(PIIK @H"4T": '//5"7#7#78 #G  $+006w?DD$+$8$8*,,0,E,E  V-?-?@uMO9:!77 u    	5633 	  
)*,,
 	

^    	5633 	@ (( <<..#!.x!8"+--R"@!*z2!>	 / DN ""33 	>s1vhGH:: 	s   BY E/Y Y *Z E Z? Z? .A] B[/ B;] ] *ZZ.Z<;Z<?*[,+[,/A]] ]] ^&%^^^c                   n   ^  \ rS rSrSr\r\/rS r	U 4S jr
S rS rS r\" SS	/S
9SS j5       rSrU =r$ )WorkingTimePolicyViewSeti  z*ViewSet for managing Working Time Policiesc                    U R                   R                  n[        USS5      nU(       a,  [        R                  R                  US9R                  S5      $ [        R                  R                  5       nU(       a,  [        R                  R                  US9R                  S5      $ [        R                  R                  5       $ )zFilter policies by companyr/   N)r/   z-created_at)r!   )
r?   r\   getattrr   r2   r   r   r   r3   none)selfr\   r/   r!   s       rC   get_queryset%WorkingTimePolicyViewSet.get_queryset  s     ||  T<6
$,,33z3JSSTabb oo++-G(00777HQQR_``$,,1133rM   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     rC   r   /WorkingTimePolicyViewSet.get_serializer_context  s#    '02!\\	rM   c                 .   U R                   R                  n[        USS5      nU(       d1  [        R                  R                  5       nU(       a  UR                  nU(       a$  UR                  U[        US5      (       a  UOSS9  gSSK	J
n  U" SS05      e)	z(Set company and created_by when creatingr/   Nr;   )r/   rU   r   )ValidationErrorr!   z?No company found. Please ensure a company exists in the system.)r?   r\   r   r   r2   r3   r;   rH   r4   rest_framework.exceptionsr   )r   rA   r\   r/   r!   r   s         rC   perform_create'WorkingTimePolicyViewSet.perform_create  sz    ||  T<6
oo++-G$ZZ
OOzgdTXFYFYd_cOd B!9.o"pqqrM   c                 z   0 n/ SQn[        UR                  S5      (       a  UR                  R                  5       nO6[        UR                  [        5      (       a  [	        UR                  5      O0 nU H  nXv;   d  M
  UR                  U5      XG'   M     U R                  US9nUR                  SS9  U R                  U5        U R                  UR                  5      n	[        UR                  [        R                  U	S9n
U(       a   [        UR                  SS5      nU(       d1  [        R                   R#                  5       nU(       a  UR$                  nU(       a  [        R                   R'                  US	9n[        US
5      (       aC  UR(                  nUR+                  5        H  u  p[-        XU5        M     UR/                  5         U
$ [0        R                   R2                  " SSU0UD6  U
$ U
$ ! [4         a8  nSSKnUR9                  [:        5      nUR=                  SU 35         SnAU
$ SnAff = f)z:Override create to handle vacation policy data if providedvacation_accrual_typecustom_accrual_ratevacation_year_startvacation_period_startvacation_period_endtrack_vacation_daystrack_flex_timetrack_time_banktrack_overtime_balance
track_toilself_certification_dayssick_pay_percentageinclude_finnish_holidaysinclude_swedish_holidaysrZ   r(   Traise_exception)r   r   r/   NrX   r$   r!   r   z Error creating vacation policy: r0   )r4   r)   rZ   
isinstancedictpopget_serializerr8   r   get_success_headersr
   r   r<   r   r\   r   r2   r3   r;   r[   r$   rF   rG   rH   r   r:   r5   logging	getLogger__name__r&   )r   r?   argskwargsvacation_datavacation_fieldsrequest_datafieldrA   r   responser/   r!   r$   rJ   rK   r@   r  loggers                      rC   r:   WorkingTimePolicyViewSet.create(  s    
 7<<(("<<,,.L1;GLL$1O1O4-UWL$E$'3'7'7'>$ %
 ((l(;
D1J'**:??;JOOF4K4KU\] E$W\\<F
!%oo335G%,ZZ
%oo11Z1@Gw(9::*1*A*A*7*=*=*?JC#O%@ +@',,.  '..55WgWW x  E **84?sCDDEs   CG8 "G8 8
H:-H55H:c                    0 n/ SQn[        UR                  S5      (       a  UR                  R                  5       nO6[        UR                  [        5      (       a  [	        UR                  5      O0 nU H  nXv;   d  M
  UR                  U5      XG'   M     UR                  SS5      nU R                  5       n	U R                  XUS9n
U
R                  SS9  U R                  U
5        [        U	SS	5      (       a  0 U	l        [        U
R                  5      nU(       a   [        UR                  S
S	5      nU(       d1  [        R                  R!                  5       nU(       a  UR"                  nU(       a  [        R                  R%                  US9n[        US5      (       aD  UR&                  nUR)                  5        H  u  nn[+        XU5        M     UR-                  5         U$ [.        R                  R0                  " SSU0UD6  U$ U$ ! [2         a8  nSS	KnUR7                  [8        5      nUR;                  SU 35         S	nAU$ S	nAff = f)z:Override update to handle vacation policy data if providedr   rZ   partialF)r)   r"  Tr  _prefetched_objects_cacheNr/   rX   r$   r!   r   z Error updating vacation policy: r0   )r4   r)   rZ   r  r  r  
get_objectr  r8   perform_updater   r#  r
   r\   r   r2   r3   r;   r[   r$   rF   rG   rH   r   r:   r5   r  r  r  r&   )r   r?   r  r  r  r  r  r  r"  instancerA   r  r/   r!   r$   rJ   rK   r@   r  r  s                       rC   updateWorkingTimePolicyViewSet.update`  s    
 7<<(("<<,,.L1;GLL$1O1O4-UWL$E$'3'7'7'>$ %
 **Y.??$((g(V
D1J'88$??13H.JOO, E$W\\<F
!%oo335G%,ZZ
%oo11Z1@Gw(9::*1*A*A*7*=*=*?JC#O%@ +@',,.  '..55WgWW x  E **84?sCDDEs   CH &"H 
I-I		ITr[   )detailmethodsc                     U R                  5       nSSKJn  UR                  R	                  5       nU" USS9n[        UR                  5      $ )z)Get list of users assigned to this policyr   r   Tr   )r$  r   r   assigned_usersallr
   r)   )r   r?   pkr`   r   usersrA   s          rC   r,  'WorkingTimePolicyViewSet.assigned_users  sB     "7%%))+'D9

((rM   r0   r   )r  
__module____qualname____firstlineno____doc__r   serializer_classr	   r   r   r   r   r:   r'  r   r,  __static_attributes____classcell__)r   s   @rC   r   r     sN    42)*4r$6p;z 4%)) *)rM   r   ).rest_frameworkr   r   rest_framework.decoratorsr   r   r   rest_framework.permissionsr   r	   rest_framework.responser
   django.shortcutsr   django.db.modelsr   r   modelsr   r   r   r   r   serializersr   r   r   r   r   r   r   r   r   r   r   rD   rL   rR   ra   re   r%   r   r   r   ModelViewSetr   r0   rM   rC   <module>rA     sp   + J J @ , .   g g    
5&/3O 3Oj 
6(K K* 
6(K K2 
6(!K !KF 
6(K K6 
5'1 1 
5' @ 
5'XJO   O 
6(XJA   AHh)x44 h)rM   