
    Lx'iX                         S SK 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Jr  S SKJrJr  SS	KJr  SS
KJrJr  S SKJr   " S S\R.                  5      rg)    )render)viewsetsstatus)action)Response)transaction)timezone)check_passwordmake_password   )User)UserSerializerUserReadSerializer)	log_errorc                   "  ^  \ rS rSr\R
                  R                  5       r\r	Sr
S rU 4S jrU 4S jrU 4S jrU 4S jrU 4S jrS	 r\" S
S/S9SS j5       r\" S
S/S9SS j5       r\" S
/ SQS9SS j5       r\" S
S/S9SS j5       rSrU =r$ )UserViewSet   idc                 :    U R                   S;   a  [        $ [        $ )N)listretrieve)r   r   r   )selfs    D:\TimeStamps\user\views.pyget_serializer_class UserViewSet.get_serializer_class   s    ;;..%%    c                    > [         T	U ]  5       nU R                  R                  R	                  SS5      R                  5       S:H  nU(       Ga  U R                  R                  (       a  [        U R                  R                  S5      (       a   SSKJ	n  SSK
Jn  UR                  R                  U R                  R                  R                  S9nUR                  5       (       a_  [!        UR#                  S	S
S9R%                  5       5      nUR                  R                  US9R#                  SS
S9nUR                  US9nU$ UR'                  5       n U$ U$ ! [(         a  n[+        SU5         SnAU$ SnAff = f)z[
Override queryset to filter by supervisor group when for_time_stamps parameter is present
for_time_stamps truer   r   )SupervisorGroup)UserSettings)user_idgroupT)flat)supervisor_code__inr#   )id__inz-UserViewSet.get_queryset.filter_by_supervisorN)superget_querysetrequestquery_paramsgetloweruserhasattrsupervisorgroup.modelsr!   userSettings.modelsr"   objectsfilterr   existsr   values_listdistinctnone	Exceptionr   )
r   querysetr   r!   r"   supervisor_groupssupervisor_codesuser_idsfilter_error	__class__s
            r   r)   UserViewSet.get_queryset   s`    7') ,,33778I2NTTVZ`` t||00WT\\=N=NPT5U5UYB< %4$;$;$B$B4<<K\K\K_K_$B$`!$++--'+,=,I,I'X\,I,],f,f,h'i$  ,33::,<  ;  !k)$k7 
  (h?H   (}}H x  YI<XX Ys   B5E E 
E=&E88E=c                    >  [         TU ]  " U/UQ70 UD6$ ! [         a0  n[        SU5        [	        SS0[
        R                  S9s S nA$ S nAff = f)NzUserViewSet.listerrorz&An error occurred while fetching usersr   )r(   r   r8   r   r   r   HTTP_500_INTERNAL_SERVER_ERRORr   r*   argskwargser>   s        r   r   UserViewSet.list@   s[    	7<9$9&99 	(!,BC<< 	    
A%AAAc                   >  [         R                  " 5          UR                  R                  SS5      n[	        U[
        5      (       a  UR                  5       S:H  nS nSUR                  ;  d?  UR                  R                  S5      (       a  UR                  R                  S5      S:X  a  SSKJnJ	n  SSK
Jn  UR                  5       n	U" U	R                  5      nXQR                  S'   S	UR                  ;   a,  UR                  R                  S	5      S
;   UR                  S	'   OU	R                  UR                  S	'   [        TU ]@  " U/UQ70 UD6n
U(       Ga(  U(       Ga   U
R"                  S:X  Ga   U
R                  nUR                  S5      =(       d    UR                  R                  S5      nUR                  R                  SS5       SUR                  R                  SS5       3R%                  5       nU(       a  U(       ax  U(       aq   ['        US5      (       a  UR)                  S5      OS nW" UUUUS9nU(       a  SU
R                  S'   XZR                  S'   OSU
R                  S'   SU
R                  S'   U
sS S S 5        $ !   S n N]= f! [*         aN  n[-        SU5        ['        U
S5      (       a'  SU
R                  S'   [        U5      U
R                  S'    S nANgS nAff = f! , (       d  f       g = f! [*         a0  n[-        SU5        [/        SS0[0        R2                  S9s S nA$ S nAff = f)N
send_emailFr    passworddefault_passwordr   generate_temp_passwordsend_welcome_emailAppSettingsmust_change_password)Tr    Truer   1   email	firstnamer    lastnamebuild_absolute_uri/login
user_email	user_nametemp_password	login_urlT
email_sentr`   z6Failed to send email. Please check SMTP configuration.email_errorzUserViewSet.create.send_emaildatazUserViewSet.createrA   z%An error occurred while creating userrB   )r   atomicrd   r,   
isinstancestrr-   configurations.email_utilsrO   rP   configurations.modelsrR   get_settingstemp_password_length&force_password_change_on_temp_passwordr(   createstatus_codestripr/   r[   r8   r   r   r   rC   )r   r*   rE   rF   rK   r`   rO   rP   rR   app_settingsresponse	user_datar^   r_   ra   rb   rc   rG   r>   s                     r   rm   UserViewSet.createJ   s   E	##%$\\--lEB
j#..!+!1!1!3v!=J !%W\\19I9I*9U9UY`YeYeYiYijtYu  zL  ZLeA#.#;#;#=L$:<;\;\$]M/<LL, .=?F||?O?OPf?g  lJ  @J%;< @L?r?r%;< !7>'CDCFC -H4H4HC4OL$,MM	%.]]7%;%Xw||?O?OPW?X
'.||'7'7R'H&I7<<K[K[\fhjKkJl$m$s$s$u	%)1T[\ceyTzTzG,F,Fx,P  AE	 *<+5*3.;*3	*J  *>Bl ;ANo >>Cl ;?wm <  } &%L1,0	  % L!"A;O"8V44:?HMM,7;>{;KHMM-8Lo &%~  	*A.AB<< 	s   L EK47BJ$J9-J&K4'JK4	L JJ
K1#AK,'K4,K11K44
L>L L 
L?%L:4L?:L?c                    >  [         TU ]  " U/UQ70 UD6$ ! [         a0  n[        SU5        [	        SS0[
        R                  S9s S nA$ S nAff = f)NzUserViewSet.retrieverA   z-An error occurred while fetching user detailsrB   )r(   r   r8   r   r   r   rC   rD   s        r   r   UserViewSet.retrieve   s\    	7#G=d=f== 	,a0IJ<< 	rI   c                   >  [         R                  " 5          U R                  5       nUR                  R	                  SS5      n[        U[        5      (       a  UR                  5       S:H  nUR                  R	                  S5      n[        U[        5      (       a  UR                  5       S:H  nS nSnS n	U(       a  SSKJ	n
J
n  SSKJn  UR                  5       nU
" UR                  5      n[        U5      Ul        Ub  Xdl        OU(       a  UR$                  Ul        UR'                  5          UR(                  nUR*                  =(       d    S S	UR,                  =(       d    S 3R/                  5       =(       d    UR(                  n [1        US
5      (       a  UR3                  S5      OS nU" UUUUS9nOUb  Xdl        UR'                  5         [8        TU ]t  " U/UQ70 UD6nU(       aU  [1        US5      (       aD  [        UR                  [<        5      (       a%  UUR                  S'   U	(       a  U	UR                  S'   UsS S S 5        $ !   S n N= f! [4         a!  n[        U5      n	[7        SU5         S nANS nAff = f! , (       d  f       g = f! [4         a0  n[7        SU5        [?        SS0[@        RB                  S9s S nA$ S nAff = f)NrK   Fr    rS   r   rN   rQ   r   rY   r[   r\   r]   zUserViewSet.update.send_emailrd   rb   rc   zUserViewSet.updaterA   z%An error occurred while updating userrB   )"r   re   
get_objectrd   r,   rf   rg   r-   rh   rO   rP   ri   rR   rj   rk   r   rL   rS   rl   saverW   rX   rZ   ro   r/   r[   r8   r   r(   updatedictr   r   rC   )r   r*   rE   rF   instancerK   rS   r`   rb   rc   rO   rP   rR   rp   r^   r_   ra   	email_errrq   rG   r>   s                       r   ry   UserViewSet.update   s   M	##%??, %\\--lEB
j#..!+!1!1!3v!=J'.||'7'78N'O$2C88+?+E+E+G6+Q( $"
" eA#.#;#;#=L$:<;\;\$]M )6m(DH% ,78L5#8D8k8k5MMON%-^^
'/'9'9'?R&@(BSBSBYWYAZ$[$a$a$c$ugogugu	-PWX_auPvPv(B(B8(L  }AI &8'1&/*7&/	&
 *54H1MMO !7>'CDCFC x00Zt5T5T6@l3&;FHMM-8M &%V-(,I % N&))n!"A9MMNi &%N  	*A.AB<< 	s   J DJ0AI$I/	I8BJ	J II
J I<7J<JJ
JJ J 
K%K
K
Kc                     [         R                  " 5          U R                  5       nUR                  R	                  5         UR	                  5         [        [        R                  S9sS S S 5        $ ! , (       d  f       g = f! [         a0  n[        SU5        [        SS0[        R                  S9s S nA$ S nAff = f)NrB   zUserViewSet.destroyrA   z%An error occurred while deleting user)r   re   rw   settingsdeleter   r   HTTP_204_NO_CONTENTr8   r   rC   )r   r*   rE   rF   r{   rG   s         r   destroyUserViewSet.destroy   s    	##%??,!!((*!v'A'AB &%%  	+Q/AB<< 	s;   B AA2(	B 2
B <B  B 
B=%B82B=8B=Tpatch)detailmethodsc                 p    U R                  5       nUR                  R                  S5      nUS;  a  [        SS0[        R
                  S9$ XCl        UR                  5         [        SUR                  S.5      $ ! [         a0  n[        SU5        [        SS	0[        R                  S9s S
nA$ S
nAff = f)z!Update user's language preferencelang)enfisvrA   z-Invalid language. Must be 'en', 'fi', or 'sv'rB   z(Language preference updated successfully)messager   zUserViewSet.update_languagez4An error occurred while updating language preferenceN)rw   rd   r,   r   r   HTTP_400_BAD_REQUESTr   rx   r8   r   rC   )r   r*   r   r.   r   rG   s         r   update_languageUserViewSet.update_language   s    	??$D<<##F+D--MN!66 
 IIIKE		    	3Q7PQ<< 	s$   A
A; -A; ;
B5%B0*B50B5c                 j    U R                  5       nUR                  R                  S5      nUc  [        SS0[        R
                  S9$ XCl        UR                  5         [        SUR                  S.5      $ ! [         a0  n[        SU5        [        SS	0[        R                  S9s SnA$ SnAff = f)
z.Update user's compliance monitoring preferencecompliance_enabledNrA   zcompliance_enabled is requiredrB   z*Compliance preference updated successfully)r   r   z(UserViewSet.update_compliance_preferencez6An error occurred while updating compliance preference)rw   rd   r,   r   r   r   r   rx   r8   r   rC   )r   r*   r   r.   r   rG   s         r   update_compliance_preference(UserViewSet.update_compliance_preference  s    	??$D!(!1!12F!G!)>?!66 
 '9#IIKG&*&=&=    	@!DRS<< 	s$   AA8 
-A8 8
B2%B-'B2-B2)putr   r   c                 d    U R                  5       nUR                  S:X  a%  SUl        UR                  5         [	        SSS.5      $ UR
                  R                  S5      nU(       d  [	        SS0[        R                  S9$ S	S
K	J
n   [        USS5      nU(       d1  [        UR                  S5      (       a  UR                  R                  nU(       a  UR                  R                  XFS9nOUR                  R                  US9nXsl        UR                  5         S	SKJn  U" U5      n	[	        SU	R
                  S.5      $ ! UR$                   a    [	        SS0[        R&                  S9s $ f = f! [(         a0  n
[+        SU
5        [	        SS0[        R,                  S9s Sn
A
$ Sn
A
ff = f)z.Assign or remove working time policy from userDELETENz(Working time policy removed successfully)r   working_time_policy	policy_idrA   zpolicy_id is requiredrB   r   )WorkingTimePolicy
company_id)r   r   r   )WorkingTimePolicySerializerz)Working time policy assigned successfullyzWorking time policy not foundzUserViewSet.working_time_policyz4An error occurred while updating working time policy)rw   methodr   rx   r   rd   r,   r   r   company.modelsr   getattrr/   r.   r   r2   company.serializersr   DoesNotExistHTTP_404_NOT_FOUNDr8   r   rC   )r   r*   r   r.   r   r   r   policyr   policy_serializerrG   s              r   r   UserViewSet.working_time_policy1  s   4	??$D~~)+/(		I+/!    ((5I56!66 
 9$T<>
!ggllL&I&I!(!8!8J.66::i:_F.66::i:HF+1(		K$?$G!J+<+A+A!   %11 =>!44 
  	7;PQ<< 	sI   AE5 ;E5 E5 
B:E *E2/E5 1E22E5 5
F/?%F*$F/*F/postc                     SnU=(       d    UR                   R                  S5      nU(       a   U R                  5       nU(       d  U(       a   SSKn [        U[        5      (       ac  UR                  SS5      n[        U5      S:X  a1  USS  SUSS	  SUS	S
  SUS
S  SUSS  3	nUR                  U5      nOUR                  U5      n[        R                  R                  US9nU(       d  [        SS0[         R$                  S9$ UR                   R                  S5      n	UR                   R                  S5      n
UR                   R                  S5      nUR&                  (       + nU(       a!  U	(       d  [        SS0[         R$                  S9$ U
(       d  [        SS0[         R$                  S9$ U(       d  [        SS0[         R$                  S9$ U(       a4  [)        XR*                  5      (       d  [        SS0[         R$                  S9$ X:w  a  [        SS0[         R$                  S9$ U(       a4  [)        XR*                  5      (       a  [        SS0[         R$                  S9$ [        U
5      S:  a  [        SS0[         R$                  S9$ [-        U
5      Ul        SUl        [.        R0                  " 5       Ul        UR5                  5         [        SS 0[         R6                  S9$ ! [         a  n[	        SU5         SnAGNSnAff = f! [        [        R                  4 a!    [        R                  R                  US9n GNdf = f! [        R                   a!    [        SSU S30[         R"                  S9s $ [         a<  n[	        SU5        [        SS[        U5       30[         R$                  S9s SnA$ SnAff = f! [         a0  n[	        S!U5        [        SS"0[         R8                  S9s SnA$ SnAff = f)#zChange user's passwordNr#   z&UserViewSet.change_password.get_objectr   -r                   r   rA   zUser not found with ID: z*. Please check your user ID and try again.rB   z$UserViewSet.change_password.get_userzError finding user: z4User ID is required. Please provide a valid user ID.old_passwordnew_passwordconfirm_passwordzOld password is requiredzNew password is requiredz!Password confirmation is requiredzOld password is incorrectz*New password and confirmation do not matchz0New password must be different from old passwordz/New password must be at least 8 characters longFr   zPassword changed successfullyzUserViewSet.change_passwordz)An error occurred while changing password)rd   r,   rw   r8   r   uuidrf   rg   replacelenUUIDr   r2   
ValueErrorr   r   r   r   r   rS   r
   rL   r   r	   nowpassword_changed_atrx   HTTP_200_OKrC   )r   r*   r   r.   r#   rG   uuid_libuser_id_cleanuser_id_formattedr   r   r   require_old_passwords                r   change_passwordUserViewSet.change_passwordj  s2   y	D7GLL,,Y7G K??,D G+<%gs33,3OOC,DM"=1R77DRa7H6I=YZ[]K^J__`anoqrtau`vvw  yF  GI  JL  yM  xN  NO  P]  ^`  ^a  Pb  Oc  5d 1*2--8I*J*2--*@#||//7/;  TU!66  #<<++N;L"<<++N;L&||//0BC (,'@'@#@  $L89!66 
  89!66 
 $AB!66  $%lMMBB# "=>%::  /JK!66  $|]](S(SPQ!66  < 1$OP!66  *,7DM(-D%'/||~D$IIK:((* *Q ! KFJJK* '(9(9: <#||//7/;< (( # $<WIEo"pq%88  ! DaH# $8Q"AB%:: ^  	3Q7EF<< 	s   -O K/  O M BL ) O 
B	O  O 5 O :O O 0:O +(O AO /
L9LO LO 7M
M O MM 2O
O 	O
1O?O
 O O

O 
P%P<PP )N)__name__
__module____qualname____firstlineno__r   r2   allr9   r   serializer_classlookup_fieldr   r)   r   rm   r   ry   r   r   r   r   r   r   __static_attributes____classcell__)r>   s   @r   r   r      s    ||!H%L
&PFPN` 4'+ ,4 4'+ ,4 4!;<6 =6p 4&*{ +{r   r   N)django.shortcutsr   rest_frameworkr   r   rest_framework.decoratorsr   rest_framework.responser   	django.dbr   django.utilsr	   django.contrib.auth.hashersr
   r   modelsr   serializersr   r   ErrorLogs.utilsr   ModelViewSetr   r   r   r   <module>r      s7    # + , , ! ! E  ; %X('' Xr   