
    pi{                     b   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  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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#7  S SK$J%r%J&r&J'r'  S SK(J)r)  S SK*J+r+  S SK,7  S/r- " S S\5      r. " S S\5      r/ " S S\5      r0 " S S\5      r1 " S  S!\5      r2 " S" S#\5      r3 " S$ S%\5      r4S& r5S6S' jr6 " S( S)\5      r7 " S* S+\5      r8 " S, S-\5      r9 " S. S/\5      r: " S0 S1\5      r; " S2 S3\5      r< " S4 S5\5      r=g)7    )django_pbkdf2_sha256)render)settings)urls)EndUser)r   redirectHttpResponse)Response)APIViewstatus)make_passwordcheck_password)RefreshTokenN)render_to_string)mail)get_authorization_header)TokenBackend   )authenticated)*)	Paginator	EmptyPagePageNotAnInteger)Q)	timesincez%https://www.googleapis.com/auth/drivec                       \ rS rSrS rSrg)UserRegister"   c                     UR                   nUR                  S5      nUR                  S5      R                  5       R                  SS5      R	                  5       nUR                  S5      n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5      n[        R                  R                  US9R                  5       nU(       a  [        SS0[        R                  S9$ [        R                  R                  X4US9n[        SS05      $ ! [         a-  n	[        S[!        U	5      0[        R"                  S9s S n	A	$ S n	A	ff = f)Nnameemail  passwordstatus_messageemail is requiredr   name is requiredpassword is requiredr"   zThe email is already registered)r!   r"   r%   z.You have been successfully registered with us.)datagetstripreplacelowerr
   r   HTTP_400_BAD_REQUESTr   r   objectsfilterfirstHTTP_409_CONFLICTcreate	ExceptionstrHTTP_500_INTERNAL_SERVER_ERROR)
selfrequestr+   r!   r"   r%   new_passwordcheck_emailuser_objes
             ,/var/www/html/tms-backend/panel_api/views.pypostUserRegister.post#   sS   [
,,4
((6
488G""$,,S"5;;=5hhz"8
%&9:&B]B]^^
%&89A\A\]]
%&<=VE`E`aa)<''e'4::<;%&GHPVPhPhii%%4\%RH
$%UV
WW	 [
$SV,F4Y4Y
ZZ[s7   BE  E / E AE '*E 
F	"F>F	F	 N__name__
__module____qualname____firstlineno__r@   __static_attributes__rB       r?   r   r   "       [rI   r   c                       \ rS rSrS rSrg)	LoginUser;   c                    UR                   R                  S5      nUR                   R                  S5      nU(       d  [        SS0[        R                  S9$ U(       d  [        SS0[        R                  S9$  [
        R                  R                  US9n[        X4R                  5      (       d  [        SS	0[        R                  S9$ [        R                  " U5      nUR                  UR                  [        UR                   5      [        U5      S
S.n[        [        R"                  SUS.[        R"                  S9$ ! [
        R                   a    [        SS0[        R                  S9s $ f = f)Nr"   r%   r&   r'   r   r)   r*   zUser Not credentialszInvalid credentialsuser)r"   is_password_changedaccessrefreshtypezLogin successfulstatus_coder&   r+   )r+   r,   r
   r   r0   r   r1   DoesNotExistHTTP_401_UNAUTHORIZEDr   r%   r   for_userr"   password_changedr7   access_tokenHTTP_200_OK)r9   r:   r"   r%   rO   rR   all_datas          r?   r@   LoginUser.post<   sL   
,,

7
#%\\j)(	
$%89A\A\
]]	
$%;<FD_D_
``d
//

E

*4 
--	0	0
$&;<VEaEa
bb!!$''::..%%&'l
( 
$$'
 	
    
		 d
$&<=fFbFb
ccds   :E .E43E4rB   NrC   rB   rI   r?   rL   rL   ;   s     rI   rL   c                       \ rS rSrS rSrg)UserForgetpassword\   c                 X    UR                   nUR                  S5      R                  5       R                  5       nU(       d  [	        SS05      $ [
        R                  R                  US9R                  5       nUS:X  a  [	        SS0[        R                  S9$ [
        R                  R                  US9R                  5       nU(       a  [        R                  " SS	S
5      nXel        UR                  5         [!        SUS5        UR"                  nSn[%        SSU05      n	U	n
[&        R(                  n[*        R,                  " XX/U	S9  [	        SU	S.5      $ [	        SS05      $ ! [.         a8  n[!        U5        [	        S[1        U5      0[        R2                  S9s S nA$ S nAff = f)Nr"   r&   Email is requiredr*   r   zPThis email does not exist in our database, please enter the valid email address.r   i  i'     z--------------theotpzForget Password OTPzforget_password_otp.htmlotp)html_messagezRendered HTML)r&   htmlzEmail not exists)r+   r,   r-   r/   r
   r   r1   r2   countr   HTTP_404_NOT_FOUNDr3   random	randrangeforgot_password_otpsaveprintr"   r   r   EMAIL_HOST_USERr   	send_mailr6   r7   r8   )r9   r:   r+   r"   rO   r=   rd   to_emailsubjectrf   plane_message
from_emailr>   s                r?   r@   UserForgetpassword.post]   s   \
,,4
((7

!
!
#
)
)
+5
%&9:;;
//
 
 
 
.
4
4
64
ai%&xy  BH  B[  B[  \  \oo$$E$288:8d4*F#) MMO	
8H-nnH#G#$>f~NL M))JNN7J\Z   %&89::	 \	!H%c!f-V5Z5Z[[\s2   AE' A
E' B?E' E' '
F)1-F$F)$F)rB   NrC   rB   rI   r?   r_   r_   \   s    \rI   r_   c                       \ rS rSrS rSrg)verifyForgetPasswordOTPz   c                     UR                   R                  S5      R                  5       R                  5       nU(       d)  [	        [
        R                  SS.[
        R                  S9$ UR                   R                  S5      nU(       d)  [	        [
        R                  SS.[
        R                  S9$ [        R                  R                  US9R                  5       nU(       d)  [	        [
        R                  SS.[
        R                  S9$ [        R                  R                  X#S	9R                  5       nU(       a  [	        [
        R                  S
S.5      $ [	        [
        R                  SS.5      $ ! [         a<  n[	        [
        R                  [        U5      S.[
        R                  S9s S nA$ S nAff = f)Nr"   rb   rU   r&   r   re   zotp is Requiredr*   zEmail not exist)r"   rl   zSuccessfully VerifiedzInvalid otp)r+   r,   r-   r/   r
   r   r0   r   r1   r2   existsr3   r[   r6   r8   r7   )r9   r:   r"   re   email_checkr=   r>   s          r?   r@   verifyForgetPasswordOTP.post{   s   P
,,

7
#
)
)
+
1
1
35
6#>#>Pcdlr  mH  mH  I  I			%	 3
6#>#>Pabkq  lG  lG  H  H&&u&5<<>;
F$?$?Qbckq  lG  lG  H  Hoo$$U$MSSU86#5#5G^_``6#>#>P]^__	 P6#H#HZ]^_Z`aio  jO  jO  P  PPs9   A&E9 )A
E9 4AE9 AE9 E9 9
F?1F:4F?:F?rB   NrC   rB   rI   r?   rw   rw   z   s    PrI   rw   c                       \ rS rSrS rSrg)changeForgetPassword   c                 `    UR                   R                  S5      R                  5       R                  5       nU(       d  [	        SS0[
        R                  S9$ [        R                  R                  US9R                  5       nU(       d  [	        SS0[
        R                  S9$ UR                   R                  S5      nU(       d  [	        SS0[
        R                  S9$ UR                   R                  S	5      nU(       d  [	        SS
0[
        R                  S9$ XE:w  a  [	        SS0[
        R                  S9$ [        R                  " U5      nXcl        UR!                  5         [	        SS05      $ ! ["         a-  n[	        S[%        U5      0[
        R&                  S9s S nA$ S nAff = f)Nr"   r&   r'   r   r*   user not foundr;   new password is requiredconfirm_passwordzconfirm password is requiredz+Password and confirm password are not same.Success)r+   r,   r-   r/   r
   r   ri   r   r1   r2   r3   r0   HTTP_403_FORBIDDENhandlerhashr%   rm   r6   r7   r8   )r9   r:   r"   r=   r;   r   encrypt_passwordr>   s           r?   r@   changeForgetPassword.post   sl   [<<G$**,2245
%':;FD]D]^^oo$$5$17798
%'78AZAZ[[,,"">2<
%&@AIdIdeell&&'9:
%&DEVMhMhii&%&ST\b\u\uvvll#34'==?
$Y/
00	 [
$SV,F4Y4Y
ZZ[s=   AE6 AE6 &;E6 ";E6 E6 =8E6 6
F- "F("F-(F-rB   NrC   rB   rI   r?   r   r      rJ   rI   r   c                        \ rS rSrS rS rSrg)UserProfile   c                      [        U5      n[        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ [        R                  R                  UR                  S9nUR                  UR                  UR                  UR                  UR                   UR"                  UR$                  S.n[        [        R&                  SUS.[        R&                  S9$ ! [         a-  n[        S[        U5      0[        R
                  S9s S nA$ S nAff = f! [        R(                   a    [        SS	0[        R                  S9s $ f = f)
Nr&   r   idr   r*   r!   r"   phone_numberimageis_profile_completed
created_at
updated_atzProfile fetched successfullyrT   User not found)r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   r,   r"   r!   r   r   r   r   r   r[   rV   )r9   r:   uidr>   r=   rO   r+   s          r?   r,   UserProfile.get   s?   [S

 C oo$$$,2248
%'78AZAZ[[
//

HNN

34IIZZ%%JJ 55////4 $$4 	! !  S%c!f-V5Q5QRRS( 
		 [
$&67@Y@Y
ZZ[sB   C; AD5 B D5 ;
D2"D-'D2(D5 -D22D5 5.E&%E&c                      [        U5      n[        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ [        R                  R                  UR                  S9nUR                  R                  S5      nU(       d  [        SS0[        R                  S9$ UR                  R                  S5      nU(       d  [        SS	0[        R                  S9$ UR                  R                  S
5      nU(       d  [        SS0[        R                  S9$ [        S[         R"                  5        [         R"                  n	Xel        Xul        Xl        SUl        UR-                  5         UR$                  UR                  UR&                  UR(                  UR*                  UR.                  UR0                  S.n
[        [        R2                  SU
S.[        R2                  S9$ ! [         a-  n[        S[        U5      0[        R
                  S9s S nA$ S nAff = f! [        R4                   a    [        SS0[        R                  S9s $ f = f)Nr&   r   r   r   r*   r!   r(   r   zphone is requiredr   zimage is requiredzMEDIA_ROOT:Tr   zProfile updated successfullyrT   r   )r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   r,   r"   r+   r0   rn   r   
MEDIA_ROOTr!   r   r   r   rm   r   r   r[   rV   )r9   r:   r   r>   r=   rO   r!   phoner   
media_rootr+   s              r?   r@   UserProfile.post   s   2[S

 C oo$$$,2248
%'78AZAZ[[
//

HNN

34 ,,

6
"4
%'9:6C^C^__<<N+5
%':;FD_D_``<<G$5
%':;FD_D_``++,!!:9:#499; IIZZ%%JJ 55////4 %%4 	! !O  S%c!f-V5Q5QRRS\ 
		 [
$&67@Y@Y
ZZ[sU   H AH< A"H< =;H< 9;H< 5CH< 
H9"H4.H9/H< 4H99H< <.I-,I-rB   N)rD   rE   rF   rG   r,   r@   rH   rB   rI   r?   r   r      s    [63[rI   r   c                       \ rS rSrS rSrg)ResetPasswordi  c                      [        U5      n[        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ UR                  R                  S5      nU(       d  [        SS0[        R                  S9$ UR                  R                  S5      nU(       d  [        SS0[        R                  S9$ UR                  n[        R                   " XW5      nUS	:X  a  [        SS
0[        R"                  S9$ Un	[        R$                  " U	5      n
Xl        SUl        UR)                  5         [        [        R*                  SS.[        R*                  S9$ ! [         a-  n[        S[        U5      0[        R
                  S9s S nA$ S nAff = f! [         a-  n[        S[        U5      0[        R,                  S9s S nA$ S nAff = f)Nr&   r   r   r   old_passwordzold password is requiredr;   r   FzOld password is incorrectTr   rz   )r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   r+   r,   r0   r%   r   verifyr   r   rY   rm   r[   r8   )r9   r:   r   r>   r=   r   r;   r   checkr%   r   s              r?   r@   ResetPassword.post  s   [U

 C oo$$$,2248
%'78AZAZ[[,,"">2<
%&@AIdIdee,,"">2<
%&@AIdIdee%%>>>,65un%&AB&JcJcdd8ll8,'#8==?
6#5#5yQY_YkYk
ll/  U%s1v.v7S7STTU0 
 [
$SV,F4Y4Y
ZZ[sa   E2 AF, ;F, ;F, AF, AF, 2
F)<"F$F)F, $F))F, ,
G#6"GG#G#rB   NrC   rB   rI   r?   r   r     s    [rI   r   c                  L    [         R                  S[        S9n [        SSU S9nU$ )Nz>/var/www/html/tms-backend/machineshop-477507-6a7362cb7e7f.json)scopesdrivev3)credentials)Credentialsfrom_service_account_fileSCOPESbuild)credsservices     r?   get_drive_servicer   !  s/    		.	.1oy	.  
A$E2rI   c                    SSK J n  UR                  5       R                  S5      nSU SUR                   SUR                   SUR
                   3n[        US5        USS.nU R                  5       R                  US	S
9R                  5       nUR                  S	5      n[        US5        U(       a1  U R                  5       R                  USSUS.S	S9R                  5         / SQn	U	 H  n
U
SU/S.nU R                  5       R                  US	S
9R                  5       nU(       d  M?  U R                  5       R                  UR                  S	5      SSUS.S	S9R                  5         M     U$ )zt
Create a main project folder with subfolders in Google Drive.
Optionally share the main folder with a given email.
r   )datetimez%Y%m%dz[TEMPLATE] _z -------------->>> folder_namez"application/vnd.google-apps.folder)r!   mimeTyper   )bodyfieldsz========main_folder_id=======rO   writer)rS   roleemailAddress)fileIdr   r   )DeliverablesNotesSpecs
Milestones)r!   r   parents)r   nowstrftimeclient_nameproject_titleproject_typern   filesr5   executer,   permissions)r   projectshare_emailr   date_strfolder_namefolder_metadatamain_foldermain_folder_id
subfolderssubsubfolder_metadata	subfolders                r?   create_project_folderr   (  s   
 "||~&&x0Hz7+>+>*?qAVAV@WWXY`YmYmXnoK	+78 8O
 --/((od(KSSUK __T*N	.9:$$!  +
  	% 	
 ')AJ<&'

 MMO**0B4*PXXZ	 ;!(( }}T*"$$/
  )  gi% ( rI   c                   0    \ rS rSrS rSS jrS rS rSrg)	AddProjectModulesi_  c                      [        U5      n[        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ / SQnU Vs/ sH&  oaR                  R                  U5      (       a  M$  UPM(     nnU(       a,  [        SSSR                  U5       30[        R                  S9$ [        R                  R!                  UUR                  R                  S5      UR                  R                  S	5      UR                  R                  S
5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      S9n[#        5       n	[%        XSS9n
['        U
5        Xl        UR+                  5         [        [        R,                  SU
S.[        R.                  S9$ ! [         a-  n[        S[        U5      0[        R
                  S9s S nA$ S nAff = fs  snf ! [         a9  n['        SU5        [        S[        U5      0[        R0                  S9s S nA$ S nAff = f)Nr&   r   r   r   deliverabes_listformat_specsresolution_aspect_rationotes_spec_reqinitial_bid_budgetdeposite_percentagedeposite_valuepayment_structureproducerexecutive_producer_supervisor
start_dateend_datekey_milestonesr   r   r   client_initialszMissing required fields: z, r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rO   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   zmachinedeveloper6@gmail.com)r   z#Project module created successfully)rU   r&   google_drive_folder_idError:)r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   r+   r,   joinr0   ProjectModuler5   r   r   rn   r   rm   r[   HTTP_201_CREATEDr8   )r9   r:   r   r>   r=   required_fieldsfieldmissing_fieldsproject_datar   	folder_ids              r?   r@   AddProjectModules.post`  s   @]U

 C oo$$$,2248
%'78AZAZ[[? )8Wu||?O?OPU?VU>W3DIIn4M3NOP'' 
  ''..	\\%%&89!!.1#LL,,-FG<<##$45||''(<=(()>?<<##$45ll&&':;\\j)"),,"2"23R"S||-\\j)<<##$45,,""?3  /!!.1LL$$%67% / <*  7$WHef9 *3&
%%;' $$	& &m  U%s1v.v7S7STTU  XV 
 ]1
$c!f-f6[6[
\\]sf   K9 AL8 L8 ""L3L34L8 H5L8 9
L0"L+%L0&L8 +L00L8 8
M;.M60M;6M;Nc           	      
     [        U5      n[        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ U(       Ga  [        R                  R                  X%R                  S9R                  5       nU(       d  [        SS0[        R                  S9$ 0 SUR                  _S	UR                  _S
UR                  _SUR                  _SUR                   _SUR"                  _SUR$                  _SUR&                  _SUR(                  _SUR*                  _SUR,                  _SUR.                  _SUR0                  _SUR2                  _SUR4                  _SUR6                  _SUR8                  _UR:                  UR<                  UR>                  (       a  UR>                  OS[A        US5      (       a  URB                  OSS.En[        [        RD                  SUS.[        RD                  S9$ [        R                  R                  UR                  S9RG                  S5      nURH                  RK                  SS 5      n	URH                  RK                  S!S"5      n
 [M        U
5      n
U
S :  a  S"n
U
S#:  a  S#n
[S        X5      n URU                  U	5      nURZ                   Vs/ sGH%  n0 SUR                  _S	UR                  _S
UR                  _SUR                  _SUR                   _S$UR"                  _SUR$                  _SUR&                  _SUR(                  _SUR*                  _S%UR,                  _S&UR.                  _SUR0                  _SUR2                  _SUR4                  _SUR6                  _SUR8                  _UR:                  UR<                  UR>                  (       a  UR>                  OSURB                  S.EPGM(     nn[        UR\                  UR^                  UR`                  U
US'.[        RD                  S9$ ! [         a-  n[        S[        U5      0[        R
                  S9s SnA$ SnAff = f! [N        [P        4 a    S"n
 GNf = f! [V        [X        4 a    URU                  S 5      n GNf = fs  snf ! [         aH  n[c        S(U5        [        [        Rd                  [        U5      S).[        Rd                  S9s SnA$ SnAff = f)*z;Get single project detail or paginated list of all projectsr&   r   Nr   r   )r   rO   Project not foundr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   is_archivedproject_statusr   Fetched SuccessfullyrT   rO   z-idpager   	page_size
   d   deliverables_listdeposit_percentagedeposit_value)total_projectstotal_pagescurrent_pager   projectsr   rz   )3r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   hasattrr   r[   order_byGETr,   int
ValueError	TypeErrorr   get_pager   r   object_listrh   	num_pagesnumberrn   r8   )r9   r:   pkr   r>   r=   r   r   r  page_numberr   	paginatorpage_objproject_lists                 r?   r,   AddProjectModules.get  sy   eRU

 C oo$$$,2248
%'78AZAZ[[ 	##**b{{*CIIKG&(;<VE^E^__	7::g++ G'' //	
 W)) 11 W))  ? ? w-- 755 G77 w-- '33 !! %g&K&K  7%%!" !!#$ --&&181G1Gw--T)0,)G)G7%%T+L. F$6$6I_htu  E  Q  Q  R  R##***<EEeL8 +;{{{B/9II1}Y3Y -9%!!+.H8 ''10 (/	7::g++ G'' //	
 W)) '22 W))  ? ? w-- 755 766 g,, '33 !! %g&K&K  7%%!" !!#$ --&&181G1Gw--T%%+. (1  6 oo&&OO ! !q  U%s1v.v7S7STTUf y
! I &
' %!!!$H%F 
 R1
6#H#H[^_`[abkq  lQ  lQ  R  RRs   P5 AR5 AR5 8ER5 A.R5 Q/  R5 ,R =R5 D,R07=R5 5
Q,?"Q'!Q,"R5 'Q,,R5 /RR5 RR5 !R-)R5 ,R--R5 5
T?=T<TTc                      [        U5      n[        R                  R                  US9R                  5       nU(       d)  [        [        R                  SS.[        R                  S9$ [        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ / SQnU H9  nXR                  ;   d  M  [        XhUR                  R                  U5      5        M;     UR                  5         [        [        R                   S	S.[        R                   S9$ ! [         a<  n[        [        R                  [        U5      S.[        R                  S9s SnA$ SnAff = f! [         aH  n[#        S
U5        [        [        R$                  [        U5      S.[        R$                  S9s SnA$ SnAff = f)z!Update an existing project modulerz   r   Nr   r   r&   r   r   z#Project module updated successfullyr   )r   r6   r
   r   rW   r7   r   r1   r2   r3   ri   r   r+   setattrr,   rm   r[   rn   r8   )	r9   r:   r  r   r>   r=   r   updatable_fieldsr   s	            r?   putAddProjectModules.put  s    RA

 C oo$$$,2248
F$=$=P`ajp  kD  kD  E  E""))R)06687
%':;FD]D]^^ !uWW\\--e45 ! <<>
6#5#5Hmnw}  xJ  xJ  K  K3  AF$@$@SVWXSYZcicc  A  AA6 
 R1
6#H#H[^_`[abkq  lQ  lQ  R  RRs[   D1 AE: )AE: 5E: A!E: 1
E7;1E2,E7-E: 2E77E: :
G=GGGc                 6     [        U5      n[        R                  R                  US9R                  5       nU(       d)  [        [        R                  SS.[        R                  S9$ [        R                  R                  US9R                  5       nU(       d)  [        [        R                  SS.[        R                  S9$ UR                  5         [        [        R                  SS.[        R                  S9$ ! [         a<  n[        [        R                  [        U5      S.[        R                  S9s SnA$ SnAff = f! [         aH  n[        SU5        [        [        R                  [        U5      S.[        R                  S9s SnA$ SnAff = f)	zDelete a project modulerz   r   Nr   r   r   z#Project module deleted successfullyr   )r   r6   r
   r   rW   r7   r   r1   r2   r3   ri   r   deleter[   rn   r8   )r9   r:   r  r   r>   r=   r   s          r?   r  AddProjectModules.delete4  s   Q@

 C oo$$$,2248
6#<#<O_`io  jC  jC  D  D""))R)06687
6#<#<Obclr  mF  mF  G  G
>>
6#5#5Hmnw}  xJ  xJ  K  K  @6#?#?RUVWRXYbhb~b~@ 
 Q1
&"G"GZ]^_Z`ajp  kP  kP  Q  QQsT   C= AE )AE 8E =
E1D>8E9E >EE 
F=FFFrB   N)	rD   rE   rF   rG   r@   r,   r  r  rH   rB   rI   r?   r   r   _  s    A]HgRV"RJQrI   r   c                       \ rS rSrS rSrg)getUserNotificationsiK  c                 "     [        U5      n[        R                  R                  US9R                  5       nU(       d)  [        [        R                  SS.[        R                  S9$ [        R                  R                  5       R                  5       nUR                  S:X  a4  [        [        R                  SUR                  S.[        R                  S9$ [        R                  R                  UR                   S9n/ nU HZ  nUR                   UR"                  UR$                  UR&                  [)        UR*                  5      S	-   S
.n	UR-                  U	5        M\     [        [        R.                  SUS.5      $ ! [         a<  n[        [        R                  [        U5      S.[        R                  S9s S nA$ S nAff = f! [         a<  n[        [        R0                  [        U5      S.[        R0                  S9s S nA$ S nAff = f)Nrz   r   r   r   F8Your account has been Inactive, Please contact to admin.rU   r&   r"   )user_idz ago)r   messageis_readrS   r   r   rT   )r   r6   r
   r   rW   r7   r   r1   r2   r3   ri   
SuperAdminallHTTP_406_NOT_ACCEPTABLEr"   EndUserNotificationsr   r"  r#  rS   r   r   appendr[   r8   )
r9   r:   r   r>   r=   	admin_obj
notify_objall_Datanotifyr\   s
             r?   r,   getUserNotifications.getL  s   O@

 C oo$$$,2248
6#<#<O_`io  jC  jC  D  D##'')//19oo%6#A#A  TN  W`  Wf  Wf  g  ou  oM  oM  N  N$,,33X[[3J:8v
))~~~~KKF--.v5H OOH  &"4"4F\dlm
nn+  @6#?#?RUVWRXYbhb~b~@, 
 O
&"G"GY\]^Y_`hn  iN  iN  O  OOsU   E? AG )A/G B%G ?
G	1G :G;G  GG 
H1H	H	HrB   NrD   rE   rF   rG   r,   rH   rB   rI   r?   r  r  K  s    OrI   r  c                       \ rS rSrS rSrg)deleteUserNotificationsij  c                      [        U5      n[        R                  R                  US9R                  5       nU(       d)  [        [        R                  SS.[        R                  S9$ [        R                  R                  5       R                  5       nUR                  S:X  a4  [        [        R                  SUR                  S.[        R                  S9$ UR                  R!                  S	5      nU(       d)  [        [        R                  S
S.[        R                  S9$ ["        R                  R                  US9R                  5       nUR%                  5         [        [        R&                  SS.[        R&                  S9$ ! [         a-  n[        S[        U5      0[        R
                  S9s S nA$ S nAff = f! [         a<  n[        [        R(                  [        U5      S.[        R(                  S9s S nA$ S nAff = f)Nr&   r   r   r   rz   Fr  r   notification_idznotification_id id requiredzDeleted Successfully)r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   r$  r%  r&  r"   r+   r,   r'  r  r[   r8   )r9   r:   r   r>   r=   r)  r2  not_objs           r?   r@   deleteUserNotifications.postk  s   OU

 C oo$$$,2248
6#<#<O_`io  jC  jC  D  D##'')//19oo%6#A#A  TN  W`  Wf  Wf  g  ou  oM  oM  N  N\\%%&78?
6#<#<Olmv|  wP  wP  Q  Q"**111GMMO7
>>
&"4"4F\]ekewew
xx  U%s1v.v7S7STTU  
 O
&"G"GY\]^Y_`hn  iN  iN  O  OOs\   F AG )A/G A
G $A#G 
F?"F:4F?5G :F??G 
H1H=HHrB   NrC   rB   rI   r?   r0  r0  j  s    OrI   r0  c                       \ rS rSrS rSrg)ArchiveProjectUseri  c                 0     [        U5      n[        R                  R                  US9R                  5       nU(       d)  [        [        R                  SS.[        R                  S9$ [        R                  R                  5       R                  5       nUR                  S:X  a4  [        [        R                  SUR                  S.[        R                  S9$ UR                  R!                  S	5      n ["        R                  R!                  US9nS
Ul        UR'                  5         [        [        R(                  SS.[        R(                  S9$ ! [         a-  n[        S[        U5      0[        R
                  S9s S nA$ S nAff = f! ["        R*                   a,    [        [        R                  SS.[        R                  S9s $ f = f! [         a<  n[        [        R,                  [        U5      S.[        R,                  S9s S nA$ S nAff = f)Nr&   r   r   r   rz   Fr  r   
project_idTzProject archived successfullyr   )r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   r$  r%  r&  r"   r+   r,   r   r   rm   r[   rV   r8   )r9   r:   r   r>   r=   r)  r8  r   s           r?   r@   ArchiveProjectUser.post  s   OU

 C oo$$$,2248
F$=$=P`ajp  kD  kD  E  E##'')//19oo%F$B$B  UO  Xa  Xg  Xg  h  pv  pN  pN  O  O  .:H##'':'6GGLLNF$6$6Jijrx  sE  sE  F  F  U%s1v.v7S7STTU 
$
$ HF$=$=Qdems  nG  nG  H  HH 
 O
&"G"GY\]^Y_`hn  iN  iN  O  OOss   E AG )A/G G 5AF 
F	"F>F	?G F		G =G	G GG 
H1H
HHrB   NrC   rB   rI   r?   r6  r6    s    OrI   r6  c                       \ rS rSrSS jrSrg)UpdateUserprojectStatusi  Nc                      [        U5      n[        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ U(       d  [        SS0[        R                  S9$ [        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ UR                  R                  S5      nU(       d  [        SS0[        R                  S9$ Xul        UR!                  5         [        [        R"                  S	U S
3UR$                  UR$                  S.[        R"                  S9$ ! [         a-  n[        S[        U5      0[        R
                  S9s S nA$ S nAff = f! [         a-  n[        S[        U5      0[        R&                  S9s S nA$ S nAff = f)Nr&   r   r   r   zproject_id is requiredr   r   zproject_status is requiredzUser status updated to '')rU   r&   r!  r8  r"  )r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   r0   r   r+   r,   r   rm   r[   r   r8   )r9   r:   r8  r   r>   r=   r   
new_statuss           r?   r@   UpdateUserprojectStatus.post  s   !	_a#G, ---5;;=H!13C DVMfMfgg!13K LU[UpUpqq#++22j2AGGIG!13F GPVPiPijj !))*:;J!13O PY_YtYtuu&0#MMO%11$<ZL"J#;;%jj	
 ((* *-  a!13q6 :6C_C_``a:  	_YA/8]8]^^	_sa   E AF  F ;AF ;F AF 
F&"FF	F FF 
G "GGGrB   r  rC   rB   rI   r?   r;  r;    s    "_rI   r;  c                       \ rS rSrS rSrg)Userdashboardi  c           	      h     [        U5      n[        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ [        R                  R                  US9nUR                  SS9R                  5       UR                  SS9R                  5       UR                  S	S9R                  5       UR                  S
S9R                  5       UR                  SS9R                  5       UR                  SS9R                  5       S.n[        SUS.[        R                  S9$ ! [         a0  n[        SS[        U5       30[        R
                  S9s S nA$ S nAff = f! [         a-  n[        S[        U5      0[        R                  S9s S nA$ S nAff = f)Nr&   Authentication failed: r   r   r   r   PendingInquiryBidApproved	DeliveredArchived)rD  rE  rF  rG  rH  rI  success)r&   r+   )r   r6   r
   r7   r   rW   r   r1   r2   r3   ri   ProjectAssignmentrh   r[   r8   )r9   r:   r   r>   r=   assignmentsstatus_countss          r?   r,   Userdashboard.get  s   	f#G, ---5;;=H!13C DVMfMfgg+33:::IK '--Y-?EEG&--Y-?EEG")))7==?'..j.AGGI(//{/CIIK'..j.AGGIM "+% ((* *+  %)@Q'IJ!77 4  	f-s1v6v?d?dee	fsN   D= AE: C"E: =
E7%E2,E7-E: 2E77E: :
F1"F,&F1,F1rB   Nr.  rB   rI   r?   rA  rA    s    frI   rA  c                       \ rS rSrS rSrg)AssignProjecti  c           	           [        U5      nUR                  R                  S5      nU(       d  [        SS0[        R                  S9$ [        R                  R                  US9R                  5       nU(       d  [        SS0[        R                  S9$ UR                  R                  S5      n[        R                  R                  US9R                  5       nU(       d  [        SS	0[        R                  S9$ [        R                  R                  XWS
9R                  5       nU(       a  Sn	O][        R                  R!                  UUUR                  R                  S5      S9nSn	["        R                  R!                  USU S3SS9  [        U	UR$                  UR&                  R$                  UR(                  R$                  UR                  UR*                  S.S.[        R,                  S9$ ! [         a0  n[        SS[        U5       30[        R
                  S9s S nA$ S nAff = f! [         a-  n[        S[        U5      0[        R.                  S9s S nA$ S nAff = f)Nr&   rC  r   r!  zuser_id is requiredr   r   r8  r   )rO   r   zProject already assignedr   )rO   r   r   zProject assigned successfullyz#You have been assigned to project 'r=  project_assignment)rO   r"  rS   )r   r8  r!  r   assigned_at)r&   
assignment)r   r6   r
   r7   r   rW   r+   r,   r0   r   r1   r2   r3   ri   r   rK  r5   r'  r   r   rO   rS  r[   r8   )
r9   r:   r   r>   r!  r=   r8  project_objrT  r"  s
             r?   r@   AssignProject.post  s5   4	f#G, ll&&y1G!13H IRXRmRmnn---9??AH!13C DVMfMfgg )),7J'//66*6EKKMK!13F GPVPiPijj*2299x9]cceJ4.66==!'"<<++H5 > 

 :$,,33!A+aP- 4  ")$--","4"4"7"7)11(//#-#9#9
 ((
* 
*I  %)@Q'IJ!77 `  	f-s1v6v?d?dee	fs[   G6 ;H3 
AH3 A&H3 =C8H3 6
H0 %H+%H0&H3 +H00H3 3
I*="I%I*%I*rB   NrC   rB   rI   r?   rP  rP    s    5frI   rP  r  )>passlib.hashr   r   django.shortcutsr   machine_shopr   	panel_apir   panel_api.modelsr   r   r	   rest_framework.responser
   rest_framework.viewsr   rest_frameworkr   django.contrib.auth.hashersr   r   rest_framework_simplejwt.tokensr   rj   django.template.loaderr   django.corer   rest_framework.authenticationr   !rest_framework_simplejwt.backendsr   authenticationr   modelsdjango.core.paginatorr   r   r   django.db.modelsr   django.utils.timesincer   admin_panel.modelsr   r   rL   r_   rw   r   r   r   r   r   r   r  r0  r6  r;  rA  rP  rB   rI   r?   <module>rk     s.   8 # !  $ : : , ( ! E 8  3  B : )  H H  ,   2	2[7 [2   B\ \<Pg P0[7 [8O[' O[f[G [@4njQ jQXO7 O>Og O2O O6#_g #_L fG  fD6fG 6frI   