
    Fh5             
          S SK JrJrJrJrJr  S SKJrJr  S SK	J
r
  S SKJrJr  S SK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
\5      r\" \SSS/ SQS/SS.0S9  Sr1 Skr\R2                  R5                  \5      (       d  \R6                  " \5        S r\R;                  SS/S9S 5       r\R;                  SSS/S9S 5       r\R;                  SS/S9S 5       r \R;                  SS/S9S  5       r!\R;                  S!/ S"QS9S# 5       r"\R;                  S$/ S"QS9S% 5       r#\R;                  S&SS/S9S' 5       r$\R;                  S(S/S9S) 5       r%\R;                  S*SS/S9S+ 5       r&\R;                  S,S/S9S- 5       r'\R;                  S./ S"QS9S/ 5       r(\RR                  S0 5       r*\R;                  S1S/S9S2 5       r+\R;                  S3S/S9S4 5       r,\R;                  S5S/S9S6 5       r-\R;                  S7S/S9S8 5       r.\R;                  S7S/S9S9 5       r/\R;                  S7S/S9S: 5       r0\R;                  S7S/S9S; 5       r1\R;                  S<S/S9S= 5       r2S> r3\R;                  S?S/S9S@ 5       r4\R;                  SAS/S9SB 5       r5\R;                  SCS/S9SD 5       r6\R;                  SES/S9SF 5       r7\R;                  SGS/S9SH 5       r8\R;                  SI/ S"QS9SJ 5       r9\R;                  SKS/S9SL 5       r:\R;                  SM/ SNQS9SO 5       r;\R;                  SPS/S9SQ 5       r<\R;                  SIS/S9SR 5       r=\R;                  SSS/S9ST 5       r>\R;                  SUS/S9SV 5       r?g)W    )	Blueprintrequestjsonifysessionredirect)generate_password_hashcheck_password_hash)get_connection)CORScross_originN)secure_filename)current_appurl_forwrapsr   r   user_routesT/*http://localhost:3000)GETPOSTPUTDELETEOPTIONSContent-Type)originsmethodsallow_headerssupports_credentials)r   	resources=/var/www/html/School_Mangement_New/src/backend/static/uploads>   jpgpdfpngdocxjpeg                 n    SU ;   =(       a*    U R                  SS5      S   R                  5       [        ;   $ )N.   )rsplitlowerALLOWED_EXTENSIONS)filenames    8c:\Users\user\School_Mangement_New\src\backend\routes.pyallowed_filer0   B   s0    (?WxsA6q9??AEWWW    /uploadr   )r                        S[         R                  ;  a  [        SS05      S4$ [         R                  S   n U R                  S:X  a  [        SS05      S4$ U (       at  [	        U R                  5      (       aZ  [        U R                  5      n[        R                  R                  [        U5      nU R                  U5        [        SUS.5      S	4$ [        SS
05      S4$ )NfileerrorNo file part in the request   No file selected for uploadingFile uploaded successfullymessage	file_path   File type not allowedr   filesr   r.   r0   r   ospathjoinUPLOAD_FOLDERsaver5   r.   r>   s      r/   upload_filerI   E   s    W]]"!>?@#EE== D}}!ABCSHHT]]++"4==1GGLL9			)#?iXY[^^^!89:C??r1   /admin/Teachersr                     .  ^	 [         R                  S:X  ah  [        5       n U R                  SS9n UR	                  S5        UR                  5       n[        U5      S4UR                  5         U R                  5         $ [         R                  S	:X  Ga  [         R                  m	/ S
QnT	(       a  [        U	4S jU 5       5      (       d  [        SS05      S4$ [        5       n U R                  5       n SnUR	                  UT	S   T	S   T	S   T	S   T	S   T	S   T	S   45        U R                  5         UR                  nSU 3nSnUR	                  XU45        U R                  5         [        SUS.5      S4UR                  5         U R                  5         $ g ! [         aE  n[        SS[        U5       305      S4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f! [         aU  nU R                  5         [        SS[        U5       305      S4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f)Nr   T
dictionaryڋ
                SELECT teacher_id, name, email, mobile, joining_date, subject, `class`, gender 
                FROM Teachers
            r?   r6   Failed to fetch teachers:   r   nameemailmobilejoining_datesubjectclassgender              3   D   >#    U H  nTR                  U5      v   M     g 7fNget.0fielddatas     r/   	<genexpr>"manage_teachers.<locals>.<genexpr>m   s     LO5txxO    All fields are required!r8   ڤ
                INSERT INTO Teachers (name, email, mobile, joining_date, subject, `class`, gender)
                VALUES (%s, %s, %s, %s, %s, %s, %s)
            rS   rT   rU   rV   rW   rX   rY   TEACH6UPDATE Teachers SET teacher_id = %s WHERE auto_id = %sTeacher added successfully!)r=   
teacher_id   Failed to add teacher: )r   methodr
   cursorexecutefetchallr   close	Exceptionstrjsonallcommit	lastrowidrollback)

connectionro   teacherserequired_fieldsinsert_queryauto_idrk   update_queryrb   s
            @r/   manage_teachersr   W   sf   ~~#%
""d"3	NN   (H8$c) LLN	6	!||c3LOLLLG%?@A3FF#%
""$	L NN<Vd7mT(^^$d9oWtH~* 
 &&G 	*J TLNN<g)>?'DT^_`bee
 LLNG 
"  	RG'A#a&%JKLcQQLLN		R LLN@  	O!G'>s1vh%GHI3NNLLN	O LLNs`   -F 2BH 
G(#G#=G(>G+ #G((G+ +"H
I/*I*I/I2 *I//I2 2"J/Teachers/<string:teacher_id>r                    .  ^ [         R                  m/ SQnT(       a  [        U4S jU 5       5      (       d  [        SS05      S4$ [	        5       nUR                  5       n SnUR                  UTS   TS   TS	   TS
   TS   TS   TS   U 45        UR                  5         UR                  S:X  a/  [        SS05      S4UR                  5         UR                  5         $ [        SS05      S4UR                  5         UR                  5         $ ! [         aU  nUR                  5         [        SS[        U5       305      S4s S nAUR                  5         UR                  5         $ S nAff = f! UR                  5         UR                  5         f = f)NrR                 3   D   >#    U H  nTR                  U5      v   M     g 7fr\   r]   r_   s     r/   rc   !update_teacher.<locals>.<genexpr>   s     Hu488E??re   r6   rf   r8   ڶ
            UPDATE Teachers
            SET name = %s, email = %s, mobile = %s, joining_date = %s, subject = %s, `class` = %s, gender = %s
            WHERE teacher_id = %s
        rS   rT   rU   rV   rW   rX   rY   r   Teacher not found!  r=   Teacher updated successfully!r?   Failed to update teacher: rQ   )r   ru   rv   r   r
   ro   rp   rw   rowcountrr   rs   ry   rt   )rk   r}   rz   ro   r   r|   rb   s         @r/   update_teacherr      s   <<D_OsHHHH!;<=sBB!J F
 	|L$w-h $y/M4>:&
 	
 	??aG%9:;S@ 	 	#BCDcI
 	  N#=c!fX!FGH#MMN 	s7   !AD !D 
E/*E*E/E2 *E//E2 2"Fr                       [        5       nUR                  SS9n SnUR                  X045        UR                  5       nU(       d/  [	        SS05      S4UR                  5         UR                  5         $ SnUR                  XP45        UR                  5         [	        SS	05      S
4UR                  5         UR                  5         $ ! [         aU  nUR                  5         [	        SS[        U5       305      S4s S nAUR                  5         UR                  5         $ S nAff = f! UR                  5         UR                  5         f = f)NTrM   ,SELECT * FROM Teachers WHERE teacher_id = %sr6   r   r   *DELETE FROM Teachers WHERE teacher_id = %sr=   Teacher deleted successfully!r?   Failed to delete teacher: rQ   )
r
   ro   rp   fetchoner   rr   rw   rs   ry   rt   )rk   rz   ro   select_queryteacherdelete_queryr|   s          r/   delete_teacherr      s(   !J$/FE|]3//#G%9:;S@ 	 D|]3	#BCDcI
 	  N#=c!fX!FGH#MMN 	s5   9C 52C 
D'*D"<D'=D* "D''D* *"E/admin/Students)r   r   r   r                     t  ^ [        5       n U R                  SS9n [        R                  S:X  Ga  [        R                  R                  S5      n[        R                  R                  S5      nSn/ n/ nU(       a"  UR                  S5        UR                  U5        U(       a"  UR                  S5        UR                  U5        U(       a  US	S
R                  U5      -   -  nUR                  XE5        UR                  5       n[        U5      S4UR                  5         U R                  5         $ [        R                  S:X  Ga  [        R                  m/ SQn[        U4S jU 5       5      (       d/  [        SS05      S4UR                  5         U R                  5         $ UR                  STS   TS   45        UR                  5       (       a/  [        SS05      S4UR                  5         U R                  5         $ UR                  STS   TS   TS   TS   TS   TS   TS   TS   TS   TS   4
5        U R                  5         UR                  S5        UR                  5       S   n	S U	 3n
UR                  S!X45        U R                  5         [        S"U
S#.5      S$4UR                  5         U R                  5         $ [        R                  S%:X  Ga$  [        R                  mS&T;  a/  [        SS'05      S4UR                  5         U R                  5         $ UR                  S(TS   TS   TS&   45        UR                  5       (       a/  [        SS)05      S4UR                  5         U R                  5         $ UR                  S*TS   TS   TS   TS   TS   TS   TS   TS   TS   TS   TS&   45        U R                  5         [        S+S,05      S4UR                  5         U R                  5         $ [        R                  S-:X  a  [        R                  R                  S&5      n
U
(       d/  [        SS.05      S4UR                  5         U R                  5         $ UR                  S/U
45        UR                  5       (       d/  [        SS005      S14UR                  5         U R                  5         $ UR                  S2U
45        U R                  5         [        S+S305      S4UR                  5         U R                  5         $  UR                  5         U R                  5         g ! [          aR  nU R#                  5         [        S[%        U5      05      S44s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f)5NTrM   r   rX   sectionSELECT * FROM Students
class = %ssection = %s WHERE  AND r?   r   )
rS   dobrX   r   rY   father_namemother_namerT   rU   address              3   *   >#    U H	  oT;   v   M     g 7fr\    r_   s     r/   rc   "manage_students.<locals>.<genexpr>        B/}/   r6   rf   r8   <SELECT auto_id FROM Students WHERE email = %s OR mobile = %srT   rU   8Student with this email or mobile number already exists!  
                INSERT INTO Students (
                    name, dob, class, section, gender,
                    father_name, mother_name, email, mobile, address
                ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            rS   r   rY   r   r   r   "SELECT LAST_INSERT_ID() AS last_idlast_idSTUT
                UPDATE Students SET student_id = %s WHERE auto_id = %s
            Student created successfully!)r=   
student_idrl   r   id!Student ID is required for update
                SELECT auto_id FROM Students 
                WHERE (email = %s OR mobile = %s) AND auto_id != %s
            @Another student with this email or mobile number already exists!  
                UPDATE Students SET
                    name = %s,
                    dob = %s,
                    class = %s,
                    section = %s,
                    gender = %s,
                    father_name = %s,
                    mother_name = %s,
                    email = %s,
                    mobile = %s,
                    address = %s
                WHERE auto_id = %s
            r=   Student updated successfully!r   Student ID is required2SELECT auto_id FROM Students WHERE student_id = %sStudent not found!r   *DELETE FROM Students WHERE student_id = %sStudent deleted successfully!rQ   )r
   ro   r   rn   argsr^   appendrE   rp   rq   r   rr   ru   rv   r   rw   rs   ry   rt   )rz   ro   class_filtersection_filter
base_queryparams
conditionsstudentsr}   r   r   r|   rb   s               @r/   manage_studentsr      sK   !J$/F{>>U""<<++G4L$\\--i8N1JFJ!!,/l+!!.1n-i',,z*BBB
NN:.(H8$c)H 	G ^^v%<<DO
 B/BBB)CDEsJt 	q NNY M4>:<  )cdegjjh 	e NN  Vd5k4=$y/X] 3T-5HWtH~tI	  NN?@oo'	2GwiJ NN &( 'FV`abdggt 	s ^^u$<<D4)LMNPSSj 	g NN  w-hd<>
   )klmorrX 	W NN  Vd5k4=$y/X] 3T-5HWtH~tIT
$ I'FGH#M. 	- ^^x' ))$/J)ABCSH$ 	! NNOR\Q^_??$$)=>?D 	 NNG*WI'FGH#M 	- (* 	  /Q()3../ 	sk   C6T6 3AT6 %=T6 B%T6 	9T6 #AT6 AT6 AT6 +6T6 1T6 6
V 'V'V(V VV "V7
/admin/Fee                  f  ^ [        5       n U R                  SS9n [        R                  S:X  Ga  [        R                  R                  S5      n[        R                  R                  S5      nSn/ n/ nU(       a"  UR                  S5        UR                  U5        U(       a"  UR                  S5        UR                  U5        U(       a  US	S
R                  U5      -   -  nUR                  XE5        UR                  5       n[        U5      S4UR                  5         U R                  5         $ [        R                  S:X  a  [        R                  m/ SQn[        U4S jU 5       5      (       d/  [        SS05      S4UR                  5         U R                  5         $ UR                  STS   TS   TS   TS   TS   TS   TS   45        U R                  5         [        SS05      S4UR                  5         U R                  5         $ [        R                  S:X  a  [        R                  mST;  a/  [        SS05      S4UR                  5         U R                  5         $ Sn	UR                  U	TS   TS   TS   TS   TS   45        U R                  5         [        SS05      S4UR                  5         U R                  5         $ [        R                  S :X  a  [        R                  R                  S5      n
U
(       d/  [        SS!05      S4UR                  5         U R                  5         $ S"n	UR                  X45        U R                  5         [        SS#05      S4UR                  5         U R                  5         $  UR                  5         U R                  5         g ! [         aR  nU R!                  5         [        S[#        U5      05      S$4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f)%NTrM   r   rX   payment_date
                SELECT f.fee_id, f.student_id, f.name, f.class, 
                       f.amount, f.payment_mode, f.payment_date, 
                       f.receipt_no, f.created_at
                FROM Fee f
            f.class = %sDATE(f.payment_date) = %sr   r   r?   r   )r   rS   rX   amountpayment_moder   
receipt_no              3   *   >#    U H	  oT;   v   M     g 7fr\   r   r_   s     r/   rc   manage_fee.<locals>.<genexpr>r  r   r   r6   rf   r8   ګ
                INSERT INTO Fee (student_id, name, class, amount, payment_mode, payment_date, receipt_no)
                VALUES (%s, %s, %s, %s, %s, %s, %s)
            r   rS   r   r   r   r=    Fee record created successfully!rl   r   fee_idFee ID is required for update
                UPDATE Fee SET
                    amount = %s,
                    payment_mode = %s,
                    payment_date = %s,
                    receipt_no = %s
                WHERE fee_id = %s
             Fee record updated successfully!r   Fee ID is required!DELETE FROM Fee WHERE fee_id = %s Fee record deleted successfully!rQ   )r
   ro   r   rn   r   r^   r   rE   rp   rq   r   rr   ru   rv   rw   rs   ry   rt   )rz   ro   r   r   r   r   r   fee_recordsr}   queryr   r|   rb   s               @r/   
manage_feer   M  s   !J$/FQ>>U""<<++G4L"<<++N;LJ FJ!!.1l+!!"=>l+i',,z*BBB
NN:. //+K;',l 	k ^^v%<<DuOB/BBB)CDEsJ^ 	] NN  \"DL$w-h^$d>&:D<N I'IJKSPH 	G ^^u$<<Dt#)HIJCO> 	=E NN5X^ 4^$d<&8$x.#  I'IJKSP  	 ^^x'\\%%h/F)=>?D 	 8ENN5),I'IJKSP 	 ( 	  /Q()3../ 	sX   C6N/ 3AN/ $AN/ 8N/ *AN/ AN/ :2N/ /
P9'P P!P PP "P0/admin/notices            
         [         R                  S:X  a  [        5       n U R                  SS9n UR	                  S5        UR                  5       nU H!  nUS   (       d  M  [        SUS    SS9US'   M#     [        U5      S	4UR                  5         U R                  5         $ [         R                  S:X  Ga  S[         R                  ;  d  S[         R                  ;  a  [        S
S05      S4$ [         R                  S   n[         R                  S   nUR                  S:X  a  [        S
S05      S4$ U(       Ga  [        UR                  5      (       a  [        UR                  5      n[         R"                  R%                  [&        U5      nUR)                  U5        SU 3n	[        5       n U R                  5       n Sn
UR	                  XU	45        U R+                  5         UR	                  S5        UR-                  5       S   n[        SU[        SU	SS9S.5      S4UR                  5         U R                  5         $ [        S
S05      S4$ g ! [         aE  n[        S
S[        U5       305      S4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f! [         aE  n[        S
S[        U5       305      S4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f)Nr   TrM   5SELECT id, title, file_path, uploaded_at FROM Noticesr>   staticr.   	_externalfile_urlr?   r6   Failed to fetch notices: rQ   r   titler5   Title and file are requiredr8   r9   No file selecteduploads/p
                    INSERT INTO Notices (title, file_path)
                    VALUES (%s, %s)
                2SELECT id FROM Notices WHERE id = LAST_INSERT_ID()r   Notice added successfully!)r=   	notice_idr   rl   Failed to add notice: r@   )r   rn   r
   ro   rp   rq   r   r   rr   rs   rt   formrB   r.   r0   r   rC   rD   rE   rF   rG   rw   r   )rz   ro   noticesnoticer|   r   r5   r.   r>   relative_file_pathr~   r   s               r/   manage_noticesr     s   ~~#%
""d"3	NNRSoo'G!+&&)0vkGZF[hl)mF:& "
 7#S( LLN	6	!',,&&*EG%BCDcIIW%}}V$==BG%7893>>L//&t}}5H]H=IIIi #+H:!6')J&&(F#  |5G-HI!!# ST"OO-a0	;!* ';MY] ^   	   "G%<=>CCW 
"  	QG'@Q%IJKSPPLLN		Q LLNN  R+A#a&)JKLcQQ  "	R   "sf   .I !"I A"K 
J#J8J#9J& J##J& &"K
LL/L0L LL "L?/admin/notices/<int:id>                 F   [        5       nUR                  SS9n UR                  SU 45        UR                  5       nU(       d/  [	        SS05      S4UR                  5         UR                  5         $ US   n[        R                  R                  SU5      nUR                  S	U 45        UR                  5         U(       a:  [        R                  R                  U5      (       a  [        R                  " U5        [	        S
S05      S4UR                  5         UR                  5         $ ! [         aE  n[	        SS[        U5       305      S4s S nAUR                  5         UR                  5         $ S nAff = f! UR                  5         UR                  5         f = f)NTrM   +SELECT file_path FROM Notices WHERE id = %sr6   Notice not foundr   r>   r   !DELETE FROM Notices WHERE id = %sr=   Notice deleted successfullyr?   Failed to delete notice: rQ   r
   ro   rp   r   r   rr   rC   rD   rE   rw   existsremovers   rt   r   rz   ro   rowr>   absolute_pathr|   s          r/   delete_noticer	    sZ   !J$/FDreLooG%7893>" 	! $	Xy9 	:REB 66IIm$	#@ABCG 		  M#<SVH!EFGLL	M 	6   8D, 4BD, ,
E;6E6E;E> 6E;;E> >"F /admin/timetable            
      8   [         R                  S:X  a  [        5       n U R                  SS9n UR	                  S5        UR                  5       nU H!  nUS   (       d  M  [        SUS    SS9US'   M#     [        U5      S	4UR                  5         U R                  5         $ [         R                  S:X  Ga  S[         R                  ;  d  S[         R                  ;  a  [        S
S05      S4$ [         R                  S   n[         R                  S   nUR                  S:X  a  [        S
S05      S4$ U(       Gaa  [        UR                  5      (       GaF  [        UR                  5      n[         R"                  R%                  [&        S5      n[         R"                  R)                  U5      (       d  [         R*                  " U5        [         R"                  R%                  X5      n	UR-                  U	5        SU 3n
[        5       n U R                  5       n SnUR	                  XU
45        U R/                  5         UR	                  S5        UR1                  5       S   n[        SU[        SU
SS9S.5      S4UR                  5         U R                  5         $ [        S
S05      S4$ g ! [         aE  n[        S
S[        U5       305      S4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f! [         aE  n[        S
S[        U5       305      S4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f)Nr   TrM   7SELECT id, title, file_path, uploaded_at FROM TimeTabler>   r   r   r   r?   r6   Failed to fetch timetables: rQ   r   r   r5   r   r8   r9   r   
timetablesuploads/timetables/r
                    INSERT INTO TimeTable (title, file_path)
                    VALUES (%s, %s)
                4SELECT id FROM TimeTable WHERE id = LAST_INSERT_ID()r    Timetable uploaded successfully!)r=   timetable_idr   rl   Failed to upload timetable: r@   )r   rn   r
   ro   rp   rq   r   r   rr   rs   rt   r   rB   r.   r0   r   rC   rD   rE   rF   r  makedirsrG   rw   r   )rz   ro   r  	timetabler|   r   uploaded_filer.   timetable_folderr>   r   r~   r  s                r/   manage_timetabler  5  s#   ~~#%
""d"3	NNTU*J'	[)),3H)T_J`Ianr,sIj) ( :&+ LLN	6	!',,&&*EG%BCDcIIW%f-!!R'G%7893>>\-*@*@AA&}'='=>H!ww||M<H77>>"233,-%5@Iy)#6xj!A')J&&(F#  |5G-HI!!#UV%03A$0 ';MY] ^   	   "G%<=>CC] 
"  	TG'CCF8%LMNPSSSLLN		T LLNT  X+GAx)PQRTWWW  "	X   "sf   .J. !"J. A"L% .
K=8K8K=L  8K==L   "L"%
M4/M/	M4
M7 /M44M7 7"N/admin/timetable/<int:id>                 F   [        5       nUR                  SS9n UR                  SU 45        UR                  5       nU(       d/  [	        SS05      S4UR                  5         UR                  5         $ US   n[        R                  R                  SU5      nUR                  S	U 45        UR                  5         U(       a:  [        R                  R                  U5      (       a  [        R                  " U5        [	        S
S05      S4UR                  5         UR                  5         $ ! [         aE  n[	        SS[        U5       305      S4s S nAUR                  5         UR                  5         $ S nAff = f! UR                  5         UR                  5         f = f)NTrM   -SELECT file_path FROM TimeTable WHERE id = %sr6   Timetable not foundr   r>   r   #DELETE FROM TimeTable WHERE id = %sr=   Timetable deleted successfullyr?   Failed to delete timetable: rQ   r  r  s          r/   delete_timetabler$  x  sZ   !J$/FFNooG%:;<cA" 	! $	Xy9 	<reD 66IIm$	#CDEsJ 		  P#?Ax!HIJCOO	P 	r
  /admin/assignments            	         [        5       n U R                  SS9n [        R                  S:X  at  UR	                  S5        UR                  5       nU H   nUS   (       d  M  [        SUS   SS9US'   M"     [        U5      S	4UR                  5         U R                  5         $ [        R                  S
:X  Gau  S[        R                  ;  a/  [        SS05      S4UR                  5         U R                  5         $ [        R                  S   n[        R                  R                  S5      n[        R                  R                  S5      n[        R                  R                  S5      n[        R                  R                  S5      nU(       a  U(       a  U(       a  U(       d/  [        SS05      S4UR                  5         U R                  5         $ U(       Ga!  [        UR                  5      (       Ga  [        UR                  5      n	[        R                   R#                  [$        S5      n
[        R                   R'                  U
5      (       d  [        R(                  " U
5        [        R                   R#                  X5      nUR+                  U5        SU	 3nUR	                  SXVXxU45        U R-                  5         [        S[        SUSS9S.5      S4UR                  5         U R                  5         $ [        SS05      S4UR                  5         U R                  5         $ [        R                  S:X  Ga#  [        R                  R                  S5      n[        R                  R                  S5      n[        R                  R                  S5      n[        R                  R                  S5      n[        R                  R                  S5      nU(       d/  [        SS05      S4UR                  5         U R                  5         $ UR	                  SU45        UR/                  5       nU(       d/  [        SS05      S 4UR                  5         U R                  5         $ [        R                  R                  S5      nU(       Ga~  [        UR                  5      (       Gac  [        UR                  5      n	[        R                   R#                  [$        S5      n
[        R                   R'                  U
5      (       d  [        R(                  " U
5        [        R                   R#                  X5      nUR+                  U5        [        R                   R#                  SUS   5      n[        R                   R'                  U5      (       a  [        R0                  " U5        SU	 3nUR	                  S!XVXxX45        U R-                  5         [        S"[        SUSS9S.5      S	4UR                  5         U R                  5         $ UR	                  S#XVXxU45        U R-                  5         [        S$S"05      S	4UR                  5         U R                  5         $ [        R                  S%:X  Ga]  [        R2                  R                  S5      nU(       d/  [        SS05      S4UR                  5         U R                  5         $ UR	                  S&U45        UR/                  5       nU(       d/  [        SS05      S 4UR                  5         U R                  5         $ [        R                   R#                  SUS   5      n[        R                   R'                  U5      (       a  [        R0                  " U5        UR	                  S'U45        U R-                  5         [        S$S(05      S	4UR                  5         U R                  5         $  UR                  5         U R                  5         g ! [4         aR  nU R7                  5         [        S[9        U5      05      S)4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f)*NTrM   r   ,SELECT * FROM assignments ORDER BY date DESCr>   r   r   r   r?   r   r5   r6   No file uploadedr8   r   datedescriptionrX   All fields are requiredassignmentsuploads/assignments/`INSERT INTO assignments (title, date, description, class, file_path) VALUES (%s, %s, %s, %s, %s) Assignment uploaded successfully)r=   r   rl   Invalid file typer   assignment_idAssignment ID is required'SELECT * FROM assignments WHERE id = %sAssignment not foundr   \UPDATE assignments SET title=%s, date=%s, description=%s, class=%s, file_path=%s WHERE id=%sAssignment updated successfullyNUPDATE assignments SET title=%s, date=%s, description=%s, class=%s WHERE id=%sr=   r   /SELECT file_path FROM assignments WHERE id = %s%DELETE FROM assignments WHERE id = %sAssignment deleted successfullyrQ   )r
   ro   r   rn   rp   rq   r   r   rr   rB   r   r^   r0   r.   r   rC   rD   rE   rF   r  r  rG   rw   r   r  r   rs   ry   rt   )rz   ro   r-  
assignmentr5   r   r*  r+  assignment_classr.   assignment_folderr>   relative_pathr2  old_file_pathr|   s                   r/   manage_assignmentsrA  ?  s   !J$/F}>>U"NNIJ //+K)
k**-4X
S^H_ko-pJz* * ;',d 	a ^^v%W]]*);<=sBZ 	Y ==(DLL$$W-E<<##F+D!,,**=9K&||//8d{7G)BCDcIH 	G T]]33*4==9$&GGLL$N!ww~~&788KK 12GGLL):E			)$"6xj Av+O !!#A '=TX Y   d 	] )<=>CZ 	W ^^u$#LL,,_=MLL$$W-E<<##F+D!,,**=9K&||//8 )DEFKD 	C NND}FVW*J)?@A3Fz 	y ==$$V,DT]]33*4==9$&GGLL$N!ww~~&788KK 12GGLL):E			)$ !#Xz+7N O77>>-00IIm,"6xj Ar+^ !!#@ '=TX Y   J 	C d+O !!#	+LMNPSS6 	3 ^^x'#LL,,_=M )DEFK* 	) NNL}N^_*J)?@A3F  	 Xz+/FGIww~~i((		)$NNB]DTUI'HIJCO 	3 (0 	  /Q()3.. 	/
 	s~   A_9 !!_9 #7_9 ;B9_9 D_9 >_9 -C_9 8_9 ,F_9 3_9 %A	_9 8_9 (B_9 9
a'a*a+a aa "a:                 `    SU R                   S'   SU R                   S'   SU R                   S'   U $ )N.no-store, no-cache, must-revalidate, max-age=0Cache-Controlno-cachePragma0Expires)headers)responses    r/   add_security_headersrL    s7    (XH_%!+HX"%HYOr1   /assignments                     [        5       n U R                  SS9n S[        ;  a  [        SS05      S4$  [        S   nUR	                  SU45        UR                  5       nU(       d/  [        SS	05      S
4UR                  5         U R                  5         $ US   nUR	                  SU45        UR                  5       nU H   nUS   (       d  M  [        SUS   SS9US'   M"     [        SU05      S4UR                  5         U R                  5         $ ! UR                  5         U R                  5         f = f! [         a0  n[        S[        U5       35        [        SS05      S4s S nA$ S nAff = f)NTrM   user_id
isLoggedInF  p
                SELECT class 
                FROM Students 
                WHERE student_id = %s
            r6   Student not foundr   rX   ڳ
                SELECT id, title, date, description, file_path 
                FROM assignments 
                WHERE class = %s
                ORDER BY date DESC
            r>   r   r   r   r-  r?   $Error fetching student assignments: Failed to fetch assignmentsrQ   )r
   ro   r   r   rp   r   rr   rq   r   rs   printrt   )connro   r   studentstudent_classr-  r<  r|   s           r/   get_student_assignmentsr\    s   D[[D[)F/G#e  "	 +JNN  	 
 oo'G)<=>C* LLNJJL) $G,M NN 
  !# !//+K)
k**-4X
S^H_ko-pJz* * { 
 LLNJJL LLNJJL 4SVH=>2
  	sG   D9 AD 6 D9 5D #D 3 D9 "D66D9 9
E3%E.(E3.E3/admin/signup                  F    [         R                  n U R                  S5      nU R                  S5      nU R                  S5      nU R                  S5      n[        XX4/5      (       dL  [	        SS05      S4S[        5       ;   a  WR                  5         S	[        5       ;   a  WR                  5         $ $ [        5       nUR                  5       nUS
:X  a  SnOUR                  SX1U45        UR                  5       nUR                  SX1U45        UR                  5       n	U(       a  SnOVU	(       a  SnOL[	        SS05      S4S[        5       ;   a  UR                  5         S	[        5       ;   a  UR                  5         $ $ UR                  SU45        UR                  5       (       aL  [	        SS05      S4S[        5       ;   a  UR                  5         S	[        5       ;   a  UR                  5         $ $ [        U5      n
SnUR                  XXX45        UR                  5         [	        SUSS.5      S4S[        5       ;   a  UR                  5         S	[        5       ;   a  UR                  5         $ $ ! [         ab  n[	        SS[        U5       305      S4s S nAS[        5       ;   a  WR                  5         S	[        5       ;   a  WR                  5         $ $ S nAff = f! S[        5       ;   a  WR                  5         S	[        5       ;   a  WR                  5         f f = f)NrT   	mobile_noroll_nopasswordr6   rf   r8   ro   rz   ADMIN011z
                SELECT * FROM Students 
                WHERE student_id = %s AND email = %s AND mobile = %s
            z
                SELECT * FROM Teachers 
                WHERE teacher_id = %s AND email = %s AND mobile = %s
            32GNo matching record found for the provided ID, email, and mobile number.r   $SELECT * FROM Login WHERE email = %sEmail is already registered!r   ڃ
            INSERT INTO Login (user_id, email, mobile, password_hash, user_type) 
            VALUES (%s, %s, %s, %s, %s)
        Registered Successfully!/Signin)r=   	user_typer   rl   An unexpected error occurred: rQ   )r   ru   r^   rv   r   localsrr   r
   ro   rp   r   r   rw   rs   rt   )rb   rT   rU   ra  rb  ro   rz   ro  student_resultteacher_resulthashed_passwordr~   r|   s                r/   signup_userru  >  s   F||!+&((9%88J'E7566G%?@A3Fv vxLLN68# $w $%
""$ iI NN  &)+ $__.N NN  &)+ $__.N 		f  < vxLLN68# $7 	=xH??G%CDEsJ. vxLLN68# $- 1: 	|uo%YZ1"!
  	 vxLLN68# $  R#A#a&!JKLcQQ vxLLN68# $R vxLLN68# $sD   A4I2 4BI2 ?6I2 3AI2 2
K<KKK! KK! !?L /login            	          [         R                  n U R                  S5      nU R                  S5      n[        X/5      (       d  [	        SS05      S4$ [        5       nUR                  SS9n UR                  SU45        UR                  5       nU(       a  [        US	   U5      (       d0  [	        S
SS.5      S4UR                  5         UR                  5         $ S[        l        US   [        S'   US   [        S'   [	        SSUS   US   US   S:X  a  SOUS   S:X  a  SOSS.5      nUR                  S[        S   SSSSS9  US4UR                  5         UR                  5         $ ! UR                  5         UR                  5         f = f! [         a1  n[        S[!        U5       35        [	        SSS.5      S4s S nA$ S nAff = f)Nra  rb  r6   'Both User ID and Password are required!r8   TrM   چ
                SELECT user_id, password_hash, user_type 
                FROM Login 
                WHERE user_id = %s
            password_hashInvalid User ID or Password!F)r6   rQ  rR  rP  ro  Login successful!rg  /StudentDashboardrh  /TeacherDashboard
/Dashboard)r=   rQ  rP  ro  r   r   LaxQ httponlysamesitesecuremax_ager?   Login error: Login failedrQ   )r   ru   r^   rv   r   r
   ro   rp   r   r	   rr   r   	permanent
set_cookiers   rX  rt   )rb   ra  rb  rz   ro   userrK  r|   s           r/   
login_userr    s   =||((9%88J'G&''G%NOPRUUU#%
""d"3+	NN  	
 ??$D243H(SS;"'   B LLN9 !%G!%iGI#'#4GK ."	?!+.373D3K/6:;6G36N2+  H 	"    S= LLN LLN c!fX&'#
   	sJ   AF F .AE+ ; F A.E+ 
 F +"FF 
G&G GG/admin_signup            	          [         R                  n U R                  S5      nU R                  S5      nU R                  S5      nU R                  S5      n[        XX4/5      (       d>  [	        SS05      S4W(       a  UR                  5         W(       a  UR                  5         $ $ [        5       nUR                  5       nUR                  S5        UR                  5       nU(       a&  US	   n[        UR                  S
S5      5      n	U	S-   n
OSn
S
[        U
5      R                  S5       3n[        U5      n[        SU5        [        SS5        UR                  SXX#US45        UR!                  5         [	        SUS.5      S4U(       a  UR                  5         U(       a  UR                  5         $ $ ! ["         af  n[        S[        U5      5        [	        S[        U5      05      S4s S nAW(       a  UR                  5         W(       a  UR                  5         $ $ S nAff = f! W(       a  UR                  5         W(       a  UR                  5         f f = f)NrS   rT   r`  rb  r6   rf   r8   ڤ
            SELECT user_id FROM Login
            WHERE user_id LIKE 'ADMIN%%'
            ORDER BY LENGTH(user_id) DESC, user_id DESC
            LIMIT 1
        r   ADMINr9   r*      Generated user_id:
user_type:ڌ
            INSERT INTO Login (user_id, name, email, mobile, password_hash, user_type)
            VALUES (%s, %s, %s, %s, %s, %s)
        Admin registered successfully)r=   rP  rl   -Exception occurred during admin registration:rQ   )r   ru   r^   rv   r   rr   r
   ro   rp   r   intreplacert   zfillr   rX  rw   rs   )rb   rS   rT   rU   rb  ro   rz   last_rowr   last_number
new_numberrP  r{  r|   s                 r/   signup_adminr    s   9||xx!+&88J'D233G%?@A3F\ LLN ] $%
""$ 	  	 ??$qkGgoogr:;K$qJJ #j///234 /x8 	"G,lA 	  UM1=	?
 	#BwWXZ]] LLN   /=s1vFQ()3.. LLN /
 LLN s7   A4F5 &CF5 5
H%?,H +H%,H(  H%%H( (1I                      [         R                  R                  S5      n [        5       nUR	                  SS9nU (       a  UR                  SU 45        OUR                  S5        UR                  5       n[        U5      U(       a  SO[        SS05      S	44U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         aQ  n[        S
[        U5      05      S4s S nAW(       a  UR                  5         W(       a  UR                  5         $ $ S nAff = f! W(       a  UR                  5         W(       a  UR                  5         f f = f)NrP  TrM   :SELECT * FROM Login WHERE user_id = %s AND user_type = '1')SELECT * FROM Login WHERE user_type = '1'r?   r=   No admin(s) foundr   r6   rQ   )r   r   r^   r
   ro   rp   rq   r   rr   rs   rt   )rP  rz   ro   adminsr|   s        r/   
get_adminsr    s   ,,""9-#%
""d"3NNWZaYcdNNFG"vvGYH[<\4]_b3cc LLN   /Q()3.. LLN / LLN s0   BC 
D#D)D#*D& D##D& &1E                  V    [         R                  n U R                  S5      nU(       d>  [        SS05      S4W(       a  UR	                  5         W(       a  UR	                  5         $ $ U R                  S5      nU R                  S5      nU R                  S5      nU R                  S5      n[        5       nUR                  5       n/ n/ n	U(       a"  UR                  S	5        U	R                  U5        U(       a"  UR                  S
5        U	R                  U5        U(       a"  UR                  S5        U	R                  U5        U(       a-  [        U5      n
UR                  S5        U	R                  U
5        U(       d>  [        SS05      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ U	R                  U5        UR                  SSR                  U5       S3[        U	5      5        UR                  5         UR                  S:X  a>  [        SS05      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ [        SS05      S4U(       a  UR	                  5         U(       a  UR	                  5         $ $ ! [         aQ  n[        S[        U5      05      S4s S nAW(       a  UR	                  5         W(       a  UR	                  5         $ $ S nAff = f! W(       a  UR	                  5         W(       a  UR	                  5         f f = f)NrP  r6   user_id is requiredr8   rS   rT   rU   rb  	name = %s
email = %smobile = %spassword_hash = %sr=   No fields to update
            UPDATE Login SET , 0 WHERE user_id = %s AND user_type = '1'
        r   "Admin not found or nothing updatedr   Admin updated successfullyr?   rQ   )r   ru   r^   r   rr   r
   ro   r   r   rp   rE   tuplerw   r   rs   rt   )rb   rP  ro   rz   rS   rT   rU   rb  update_fieldsupdate_valuesr{  r|   s               r/   update_adminr  "  s   7||((9%G%:;<cA^ LLN _ xx!(#88J'#%
""$  -  &  .  '  /  (28<M  !56  /I'<=>C& LLN ' 	W% "ii67 8	=!	# 	??aI'KLMsR LLN  	#?@A3F LLN   /Q()3.. LLN / LLN sC   6J (D&J >A-J J 
K4#K/:K4;K7 /K44K7 71L(                      [         R                  n [        SU 5        U R                  S5      nU(       d>  [	        SS05      S4W(       a  UR                  5         W(       a  UR                  5         $ $ [        5       nUR                  5       nUR                  SU45        UR                  5         UR                  S:X  a>  [	        SS	05      S
4U(       a  UR                  5         U(       a  UR                  5         $ $ [	        SS05      S4U(       a  UR                  5         U(       a  UR                  5         $ $ ! [         af  n[        S[        U5      5        [	        S[        U5      05      S4s S nAW(       a  UR                  5         W(       a  UR                  5         $ $ S nAff = f! W(       a  UR                  5         W(       a  UR                  5         f f = f)NDELETE request data:rP  r6   r  r8   N
            DELETE FROM Login WHERE user_id = %s AND user_type = '1'
        r   r=   Admin not foundr   Admin deleted successfullyr?   Exception in delete_admin:rQ   )r   ru   rX  r^   r   rr   r
   ro   rp   rw   r   rs   rt   )rb   rP  ro   rz   r|   s        r/   delete_adminr  ]  s   ||$d+((9%G%:;<cA* LLN + $%
""$ Z	 	??aI'89:C? LLN  	#?@A3F LLN   /*CF3Q()3.. LLN /
 LLN s=   AD= 4AD= ?D= =
F-,F(3F-4F0 (F--F0 01G!/admin/logout                       [         R                  " 5         [        SSS.5      n U R                  S5        U S4$ ! [         a)  n[        SU 35        [        SSSS	.5      S
4s S nA$ S nAff = f)NLogout successful!F)r=   rQ  r   r?   Error during logout:  An error occurred during logout./signin)r6   rQ  r   rQ   )r   clearr   delete_cookiers   rX  )rK  r|   s     r/   logout_adminr    s    +
 
 	y)} %aS)*7!
  	 	s   7: 
A-A("A-(A-                 0   ^  [        T 5      U 4S j5       nU$ )e
Decorator to protect routes that require login.
Returns JSON response if the user is not logged in.
                  J   > S[         ;  a  [        SSSS.5      S4$ T" U 0 UD6$ )NrP  FUnauthorized accessr  )rQ  r6   r   rR  r   )r   kwargsfs     r/   decorated_function*login_required.<locals>.decorated_function  sB    G##.%  	 
 $!&!!r1   r   )r  r  s   ` r/   login_requiredr    s#    
 1X" " r1   /login/status            	          S[         ;   a  [        5       n U R                  SS9n UR                  S[         S   45        UR	                  5       nU(       ak  [        SUS   US   US   S:X  a  SOUS   S:X  a  S	OS
S.5      nUR                  S[         S   SSSSS9  US4UR                  5         U R                  5         $  UR                  5         U R                  5         [        SSS.5      S4$ ! UR                  5         U R                  5         f = f! [         a1  n[        S[        U5       35        [        SSS.5      S4s S nA$ S nAff = f)NrP  TrM   ڇ
                    SELECT user_id, user_type 
                    FROM Login 
                    WHERE user_id = %s
                ro  rg  r~  rh  r  r  )rQ  rP  ro  r   r   r  Fr  r  r?   r  )rQ  r   rR  Login status check error: Failed to check login status)rQ  r6   rQ   )r   r
   ro   rp   r   r   r  rr   rs   rX  rt   )rz   ro   r  rK  r|   s        r/   check_login_statusr    s   -')J&&$&7F#   i(*	,
 (&&*#'	?%)+%6;?;LPS;S$7>B;>OSV>V':'3(  H ''!	*!%!&$ % (  $S=  "+ (   "!
   	   "  *3q6(343
   	s;   #D A;C3 ! D /D 3"DD 
E"&EEE/upload-timetable                     S[         R                  ;  a  [        SS05      S4$ [         R                  S   n U R                  S:X  a  [        SS05      S4$ U (       aw  [	        U R                  5      (       a]  [        U R                  5      n[        R                  R                  [        U5      nU R                  U5        [        SSU 3S	.5      S
4$ [        SS05      S4$ )Nr5   r6   r7   r8   r9   r:   Timetable uploaded successfully/r<   r?   r@   rA   rH   s      r/   upload_timetabler    s    W]]"!>?@#EE== D}}!ABCSHHT]]++"4==1GGLL9			)#DUVW`VaSbcdfiii!89:C??r1   /get-timetable                      [         R                  " [        5       V s/ sH  n [        U 5      (       d  M  U PM     nn U(       d  [	        SS05      S4$ [        US S9n[         R                  R                  [        U5      n[	        SSU 305      S4$ s  sn f ! [         a%  n[	        SS	[        U5       305      S
4s S nA$ S nAff = f)Nr6   No timetable foundr                        [         R                  R                  [         R                  R                  [        U 5      5      $ r\   )rC   rD   getctimerE   rF   )r  s    r/   <lambda>get_timetable.<locals>.<lambda>  s$    bgg>N>Nrww||\iklOm>nr1   )keyr>   r  r?   Failed to retrieve timetable: rQ   )
rC   listdirrF   r0   r   maxrD   rE   rs   rt   )r  timetable_fileslatest_timetabler>   r|   s        r/   get_timetabler    s    
R&(jj&?S&?<PQ?1&?SG%9:;S@@ 4noGGLL0@A	q_56;; T  R#A#a&!JKLcQQRs9   B BBB A B B 
C#C=CC/details                  R    [         R                  R                  S5      n U (       d/  S[        ;  a  [	        SS05      S4$ [        R                  " S5      n S[        ;   aC  [        R                  " S5      S:w  a)  [        R                  " S5      U :w  a  [	        SS05      S	4$ [        5       nUR                  S
S9n SnUR                  X045        UR                  5       nU(       d/  [	        SS05      S4UR                  5         UR                  5         $ [	        SU05      S4UR                  5         UR                  5         $ ! UR                  5         UR                  5         f = f! [         a0  n[        S[        U5       35        [	        SS05      S4s S nA$ S nAff = f)Nr   rP  r6   Not authenticatedrR  ro  rd  "You can only view your own profile  TrM   
                SELECT s.*, l.user_type, l.email as login_email
                FROM Students s
                JOIN Login l ON s.student_id = l.user_id
                WHERE s.student_id = %s
            rT  r   user_detailsr?   Error fetching details: Failed to fetch user detailsrQ   r   r   r^   r   r   r
   ro   rp   r   rr   rs   rX  rt   )r   rz   ro   r   r  r|   s         r/   get_user_detailsr    s~   &G\\%%l3
 ')<=>CC Y/J {{;'3.7;;y3IZ3W)MNOQTTT#%
""d"3	E NN5-0!??,L)<=>C
 LLN	 NL9:C? LLN LLN G(Q12!?@A3FFGsN   >E, A"E, $E, >9E 7 E, E & E, "E))E, ,
F&6%F!F&!F&/teacherdetails                      [         R                  R                  S5      n U (       d/  S[        ;  a  [	        SS05      S4$ [        R                  " S5      n [        R                  " S5      n[        R                  " S5      nX:w  a  [	        SS05      S4$ [        5       nUR                  S	S
9n US:X  a  SnUR                  XP45        UR                  5       nU(       d/  [	        SS05      S4UR                  5         UR                  5         $ [	        SU05      S4UR                  5         UR                  5         $ US:X  a  SnUR                  XP45        UR                  5       nU(       d/  [	        SS05      S4UR                  5         UR                  5         $ [	        SU05      S4UR                  5         UR                  5         $ [	        SS05      S4UR                  5         UR                  5         $ ! UR                  5         UR                  5         f = f! [         a.  n[        S[        U5      5        [	        SS05      S4s S nA$ S nAff = f)Nr   rP  r6   r  rR  ro  r  r  TrM   rd  
                    SELECT s.*, l.user_type, l.email AS login_email
                    FROM Students s
                    JOIN Login l ON s.student_id = l.user_id
                    WHERE s.student_id = %s
                rT  r   r  r?   rh  x  
                    SELECT t.teacher_id, t.name, t.email, t.mobile, t.joining_date,
                           t.subject, t.class, t.gender, t.created_at,
                           l.user_type, l.email AS login_email
                    FROM Teachers t
                    JOIN Login l ON t.teacher_id = l.user_id
                    WHERE t.teacher_id = %s
                Teacher not foundInvalid user typer8   Error in /teacherdetails:Server errorrQ   r  )	rP  session_user_idsession_user_typerz   ro   r   r  teacher_detailsr|   s	            r/   get__detailsr
    s'   ?7,,""<0 ')<=>CCkk),G!++i0#KK4 %G%IJKSPP#%
""d"3(	 C' uj1%0#"G-@#ABCG4 LLN3 =>C0 LLN- #c) uj1"(//"3&"G-@#ABCG LLN @A3F LLN	 )<=>C LLN LLN 7)3q62013667sr   >H# AH# H# 1?G> 0 H# G>  H#  ?G> ? H#  G> . H# G>  H# >"H  H# #
I-#III/admin/marks                  @   [        5       n U R                  SS9n [        R                  S:X  aN  UR	                  S5        UR                  5       n[        U5      S4UR                  5         U R                  5         $ [        R                  S:X  Ga  [        R                  nUR                  S5      nUR                  S5      nUR                  S	5      n[        UR                  S
5      5      n[        UR                  S5      5      n[        UR                  S5      5      n	[        UR                  S5      5      n
[        UR                  S5      5      n[        UR                  S5      5      n[        UR                  S5      5      nXx-   U	-   U
-   U-   U-   nX-  S-  nUS:  a  SnO&US:  a  SnOUS:  a  SnOUS:  a  SnOUS:  a  SnOSnUR	                  SXEXgXU
XXUU45        U R                  5         [        SS05      S 4UR                  5         U R                  5         $ [        R                  S!:X  Ga&  [        R                  nUR                  S"5      nU(       d/  [        S#S$05      S%4UR                  5         U R                  5         $ [        UR                  S
5      5      n[        UR                  S5      5      n[        UR                  S5      5      n	[        UR                  S5      5      n
[        UR                  S5      5      n[        UR                  S5      5      nUR                  S5      nUR                  S	5      n[        UR                  S5      5      nXx-   U	-   U
-   U-   U-   nX-  S-  nUS:  a  SnO&US:  a  SnOUS:  a  SnOUS:  a  SnOUS:  a  SnOSnUR	                  S&U45        UR                  5       nU(       d/  [        S#S'05      S(4UR                  5         U R                  5         $ UR	                  S)XVXxXXXUU45        U R                  5         [        SS*05      S4UR                  5         U R                  5         $ [        R                  S+:X  Ga   [        R                  R                  S"5      nU(       d/  [        S#S$05      S%4UR                  5         U R                  5         $ UR	                  S&U45        UR                  5       nU(       d/  [        S#S'05      S(4UR                  5         U R                  5         $ UR	                  S,U45        U R                  5         [        SS-05      S4UR                  5         U R                  5         $  UR                  5         U R                  5         g ! [         aR  nU R                  5         [        S#[!        U5      05      S.4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f)/NTrM   r   r  
                    SELECT 
            m.id AS marks_id,
            s.student_id,
            s.name AS student_name,
            s.dob,
            s.class,
            s.section,
            s.gender,
            s.mobile AS contact_no,
            m.exam_name,
            m.math,
            m.english,
            m.physics,
            m.chemistry,
            m.odia,
            m.hindi,
            m.total_marks,
            m.marks_obtained,
            CAST(m.percentage AS FLOAT) AS percentage,
            m.grade
        FROM marks_entry m
        JOIN Students s ON m.student_id = s.student_id;
            r?   r   r   	exam_namerX   mathenglishphysics	chemistryodiahinditotal_marksd   Z   A+P   AF   B<   C2   DF*  
                INSERT INTO marks_entry (
                    student_id, exam_name, class, math, english, physics, chemistry, odia, hindi,
                    total_marks, marks_obtained, percentage, grade
                ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            r=   Marks submitted successfullyrl   r   r   r6   Entry ID is requiredr8   'SELECT * FROM marks_entry WHERE id = %sMarks entry not foundr   
                UPDATE marks_entry
                SET exam_name=%s, class=%s, math=%s, english=%s, physics=%s,
                    chemistry=%s, odia=%s, hindi=%s, marks_obtained=%s, percentage=%s, grade=%s
                WHERE id=%s
            Marks updated successfullyr   %DELETE FROM marks_entry WHERE id = %sMarks deleted successfullyrQ   )r
   ro   r   rn   rp   rq   r   rr   ru   r^   r  rw   r   r   rs   ry   rt   )rz   ro   marksrb   r   r  
class_namer  r  r  r  r  r  r  marks_obtained
percentagegradeentry_idexistingr|   s                       r/   manage_marksr3  c  s   !J$/FW>>U"NN  0 OO%E5>3&t 	o ^^v%<<D,/J-I'*Jtxx'(D$((9-.G$((9-.GDHH[12Itxx'(D)*ETXXm45K!^g5	ADH5PN(6#=J Rr!r!r!r!NN  z9[*e I'EFGLX 	U ^^u$<<Dxx~H)?@A3FH 	G txx'(D$((9-.G$((9-.GDHH[12Itxx'(D)*E-I'*JTXXm45K "^g5	ADH5PN(6#=J Rr!r!r!r!NNDxkR(H)@ABCGF 	E NN  tg^ I'CDEsJ, 	) ^^x'||''-H)?@A3F  	 NNDxkR(H)@ABCG 	 NNBXKPI'CDEsJ 	) (& 	  /Q()3.. 	/
 	s^   AV =FV *AV EV 7V %A	V 8V (1V 
W8&'W3W8W; 3W88W; ;"X/attendance_s                  ^   [        5       n U R                  SS9n S[        ;  a/  [        SS05      S4UR	                  5         U R	                  5         $ [        S   nUR                  SU45        UR                  5       n[        U5      S4UR	                  5         U R	                  5         $ ! [         aP  n[        S	[        U5       35        [        SS
05      S4s S nAUR	                  5         U R	                  5         $ S nAff = f! UR	                  5         U R	                  5         f = f)NTrM   rP  r6   r  rR  {
            SELECT * FROM attendance 
            WHERE student_id = %s
            ORDER BY attendance_date DESC
        r?   Error fetching attendance: Something went wrongrQ   )
r
   ro   r   r   rr   rp   rq   rs   rX  rt   rY  ro   r   rb   r|   s        r/   get_attendancer;    s   D[[D[)FG#G%:;<cA& 	

% Y'
 	  ]		
  t}c! 	

  ?+CF845!7893>> 	

?
 	

s5   B- 8B- -
D7%DDD
 DD
 
"D,/attendance)r   r   r   r               	      P
   [        5       n U R                  SS9n [        R                  R	                  S5      n[        R
                  S:X  a  U(       aR  UR                  SU45        UR                  5       n[        SU05      S4UR                  5         U R                  5         $ UR                  S5        UR                  5       n[        U5      S4UR                  5         U R                  5         $ [        R
                  S	:X  a  [        R                  nUR	                  S
5      nUR	                  S5      nUR	                  S5      nUR	                  S5      nUR	                  S5      n[        XVX'U/5      (       d/  [        SS05      S4UR                  5         U R                  5         $ UR                  SXVX'U45        U R                  5         [        SS05      S4UR                  5         U R                  5         $ [        R
                  S:X  GaW  [        R                  nUR	                  S5      n	U	(       d/  [        SS05      S4UR                  5         U R                  5         $ UR	                  S
5      nUR	                  S5      nUR	                  S5      nUR	                  S5      nUR	                  S5      nUR                  SU	45        UR                  5       (       d/  [        SS05      S4UR                  5         U R                  5         $ UR                  SXVX'X45        U R                  5         [        SS05      S4UR                  5         U R                  5         $ [        R
                  S:X  a  [        R                  R	                  S5      n	U	(       d/  [        SS05      S4UR                  5         U R                  5         $ UR                  SU	45        UR                  5       (       d/  [        SS05      S4UR                  5         U R                  5         $ UR                  SU	45        U R                  5         [        SS 05      S4UR                  5         U R                  5         $  UR                  5         U R                  5         g ! [         aR  n
U R                  5         [        S[!        U
5      05      S!4s S n
A
UR                  5         U R                  5         $ S n
A
ff = f! UR                  5         U R                  5         f = f)"NTrM   rX   r   6SELECT student_id, name FROM Students WHERE class = %sr   r?   6SELECT * FROM attendance ORDER BY attendance_date DESCr   r   student_nameattendance_datestatusr6   r,  r8   ڛ
                INSERT INTO attendance (student_id, student_name, class, attendance_date, status)
                VALUES (%s, %s, %s, %s, %s)
            r=   Attendance marked successfullyrl   r   r   Attendance ID is required&SELECT * FROM attendance WHERE id = %sAttendance record not foundr   ڨ
                UPDATE attendance 
                SET student_id=%s, student_name=%s, class=%s, attendance_date=%s, status=%s
                WHERE id=%s
            Attendance updated successfullyr   ID is required$DELETE FROM attendance WHERE id = %sAttendance deleted successfullyrQ   )r
   ro   r   r   r^   rn   rp   rq   r   rr   ru   rv   rw   r   rs   ry   rt   )rY  ro   r-  r   rb   r   rA  rB  rC  attendance_idr|   s              r/   manage_attendancerO    s3   D[[D[)FQ\\%%g.
>>U"WZdYfg!??,
H56;R 	

Q WX(t}c)J 	

G ^^v%<<D,/J88N3L'*J"hh'89OXXh'F
*vVWW)BCDcIp 	

o NN  JPR
 KKMI'GHI3N` 	

] ^^u$<<D HHTNM )DEFKP 	

O ,/J88N3L'*J"hh'89OXXh'FNNCmEUV??$$)FGH#M< 	

; NN  J_	a KKMI'HIJCO* 	

' ^^x'#LL,,T2M )9:;S@ 	

 NNCmEUV??$$)FGH#M 	

 NNAMCSTKKMI'HIJCO 	

' ($ 	

  /Q()3.. 	

/
 	

sj   A+R$ '-R$ 5BR$ 03R$ AR$ 0BR$ 3R$ 0AR$ 6R$ 01R$ $
T .'S;T T ;T  T "T%/attend                     [        5       n U R                  SS9n [        R                  S:X  a  S[        ;  a/  [        SS05      S4UR                  5         U R                  5         $ [        S   nUR                  SU45        UR                  5       n[        U5      S	4UR                  5         U R                  5         $  UR                  5         U R                  5         g ! [         aP  n[        S
[        U5       35        [        SS05      S4s S nAUR                  5         U R                  5         $ S nAff = f! UR                  5         U R                  5         f = f)NTrM   r   rP  r6   r  rR  ڋ
                SELECT * FROM attendance 
                WHERE student_id = %s
                ORDER BY attendance_date DESC
            r?   Error in manage_attendance: r9  rQ   )r
   ro   r   rn   r   r   rr   rp   rq   rs   rX  rt   r:  s        r/   
attendancerU  w  s,   D[[D[)F>>U"')>?@#E* 	

) !+J NN  	 
 ??$D4=#% 	

3 #0 	

  ?,SVH56!7893>> 	

?
 	

s5   ,C# (8C# #
D=-%D8D=E  8D==E   "E"                  "    [         R                  R                  S5      n U (       dL  [        SS05      S4S[	        5       ;   a  WR                  5         S[	        5       ;   a  WR                  5         $ $ [        5       nUR                  SS9nS	nUR                  X045        UR                  5       nU(       dJ  [        / 5      S
4S[	        5       ;   a  UR                  5         S[	        5       ;   a  UR                  5         $ $ [        U5      S
4S[	        5       ;   a  UR                  5         S[	        5       ;   a  UR                  5         $ $ ! [         av  n[        S[        U5       35        [        S[        U5      05      S4s S nAS[	        5       ;   a  WR                  5         S[	        5       ;   a  WR                  5         $ $ S nAff = f! S[	        5       ;   a  WR                  5         S[	        5       ;   a  WR                  5         f f = f)Nr   r6   r   r8   ro   rz   TrM   I  
            SELECT 
                m.*,
                s.student_id,
                s.name AS student_name,
                s.class,
                CAST(m.percentage AS FLOAT) AS percentage
            FROM marks_entry m
            JOIN Students s ON m.student_id = s.student_id
            WHERE s.student_id = %s
        r?   Error fetching marks: rQ   )r   r   r^   r   rq  rr   r
   ro   rp   rq   rs   rX  rt   )r   ro   rz   r   r,  r|   s         r/   	get_marksrZ    s   "\\%%l3
G%=>?D8 vxLLN68# $9 $%
""d"3
 	um,!2;# vxLLN68# $ u~s" vxLLN68# $  /&s1vh/0Q()3..vxLLN68# $/ vxLLN68# $s<   4E 4AE E 
G.GGG GG ?H/student/marks/<student_id>                     [        5       nUR                  SS9n SnUR                  X045        UR                  5       nU(       d/  [	        SS05      S4UR                  5         UR                  5         $ [	        U/SS.5      S	4UR                  5         UR                  5         $ ! UR                  5         UR                  5         f = f! [         a0  n[        S
[        U5       35        [	        SS05      S4s S nA$ S nAff = f)NTrM   [  
                SELECT 
                    m.id AS marks_id,
                    s.student_id,
                    s.name AS student_name,
                    m.exam_name,
                    s.dob,
                    s.class,
                    s.section,
                    s.gender,
                    s.mobile AS contact_no,
                    m.math,
                    m.english,
                    m.physics,
                    m.chemistry,
                    m.odia,
                    m.hindi,
                    m.total_marks,
                    m.marks_obtained,
                    CAST(m.percentage AS FLOAT) AS percentage
                FROM marks_entry m
                JOIN Students s ON m.student_id = s.student_id
                WHERE s.student_id = %s
                ORDER BY m.id DESC
                LIMIT 1
            r6   No marks found for this studentr   Marks retrieved successfully)student_marksr=   r?   Error fetching student marks: Failed to fetch student marksrQ   )	r
   ro   rp   r   r   rr   rs   rX  rt   )r   rz   ro   r   r,  r|   s         r/   get_student_marksrd    s   6H $%
""d"3(	E4 NN5-0OO%E)JKLcQ LLN "'9   LLN LLN H.s1vh78!@ABCGGHs@   C 9B'  C 6B'  C '"C		C 
D%D;DD
/dashboard                      [        5       n U c/  [        SS05      S4WR                  5         U R                  5         $ U R                  SS9nUR	                  S5        UR                  5       nUR	                  S5        UR                  5       nUS	   US
   S.n[        U5      S4UR                  5         U R                  5         $ ! [         aP  n[        S[        U5       35        [        SS05      S4s SnAWR                  5         W R                  5         $ SnAff = f! WR                  5         W R                  5         f = f)Fetch dashboard data.Nr6   "Failed to connect to the database.rQ   TrM   /SELECT COUNT(*) AS total_teachers FROM Teachers/SELECT COUNT(*) AS total_students FROM Studentstotal_teacherstotal_students)rl  rm  r?   Error fetching dashboard data: Failed to fetch dashboard data)	r
   r   rr   ro   rp   r   rs   rX  rt   )rY  ro   rl  rm  dashboard_datar|   s         r/   get_dashboardrq    s(   <G%IJKSP0 	

/ - 	HI* 	HI* --=>,-=>

 ~&+ 	

  I/Ax89!ABCSHH 	

I
 	

s5   C A(C 
D!%D6D!7D$ D!!D$ $"E)@flaskr   r   r   r   r   werkzeug.securityr   r	   configr
   
flask_corsr   r   rC   werkzeug.utilsr   r   r   	functoolsr   __name__r   rF   r-   rD   r  r  r0   routerI   r   r   r   r   r   r   r	  r  r$  rA  after_requestrL  r\  ru  r  r  r  r  r  r  r  r  r  r  r  r
  r3  r;  rO  rU  rZ  rd  rq  r   r1   r/   <module>r{     s   @ @ I ! ) 	 * &  "x0 [t	*>() $	8 H P:  
ww~~m$$KKX 9vh/@ 0@" $ufo>4 ?4l 2UGD EB 2XJG H2 $.NO PD <)IJU KUL #eV_=?D >?DB ,xjA B< %v?AD @ADD .
C DL '1QRA SAF   >E732 42f ?VH5G 6GR 8fX.> />@ ?VH5: 6:| ?UG4 52 ?UG48 58t ?XJ7 8D ?VH5 6(  ?UG4. 5.` &9@ :@  #eW5R 6R :w/'G 0'GR $ug6@7 7@7F >+KL[ M[z ?UG4 5: =*JKU LUn 9ug. /B >E73# 4#J 05'B7H C7Hr <%1 2r1   