
    {oi                     L   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Jr  S SKJr  S SKJr  S SKrS S	KJrJrJrJrJr  S S
KJrJr  S SK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)J*r*J+r+J,r,J-r-J.r.  S r/S r0S r1S r2S r3S r4S r5S r6S r7S r8S r9S r:g)    )requestjsonifymake_responseg	send_file)datetimetimezone)find_teacher_by_username)encrypt_passwordcheck_password)db)generate_token)error_responseN)FontPatternFill	AlignmentBorderSide)Selectfunc)find_school_by_id)randomize_correct_options)BytesIO)get_concept_weak_studentsget_overall_weak_studentsget_subconcept_weak_students)StudentAssesmentResultTableConceptTableSubConceptTableQuestionTableTeacherAssessmentTableStudentTablec                  D   [         R                  n [        R                  " 5       nUR	                  S5      nUR	                  S5      nU (       d  [        SS5      $ U(       a  U(       d  [        SS5      $ [        R                  R                  [        [        5      R                  [        R                  U:H  [        R                  U R                  :H  5      5      R                  5       nU(       d  [        SS5      $ UR                   Vs/ s H  oUR	                  S	5      U:w  d  M  UPM     nn[!        U5      [!        UR                  5      :X  a  [        S
S5      $ Xdl        [        R                  R#                  5         [%        SS[!        U5      US.5      S4$ s  snf )Nassessment_idquestion_idNo active teacher found  &Assessment ID and Question ID required  Assessment not found  id Question not found in assessmentTzQuestion deleted successfully)successmessagetotal_questionsquestion   )r   current_userr   get_jsongetr   r   sessionexecuter   r!   wherer,   
created_byscalar_one_or_none	questionslencommitr   )teacherbodyr$   r%   
assessmentqupdated_questionss          @D:\beyond school\05_solvesmart\server\src\controller\teachers.pydelete_question_funcrD      sa   nnGDHH_-M((=)K7==FLL ##%&,,"%%6"--;	

   4c:: %/$8$8W$8qEE$K;<V$8W
Z%9%9!::@#FF,JJ201%	 
 	  Xs   F(Fc                  	   SSK Jn   [        R                  n[        R
                  " 5       nUR                  S5      nUR                  S5      nU(       d  [        SS5      $ U(       a  U(       d  [        SS5      $ [        R                  R                  [        [        5      R                  [        R                  U:H  [        R                  UR                  :H  5      5      R!                  5       nU(       d  [        S	S
5      $ S nS n[#        UR$                  5       H   u  pU	R                  S5      U:X  d  M  U	nUn  O   U(       d  [        SS
5      $ UR                  S5      n
UR                  S5      n[        R                  R                  [        [&        5      R                  [&        R(                  U
:H  [&        R*                  UR*                  :H  [&        R,                  UR,                  :H  5      5      R!                  5       nU(       d  [        SS
5      $ [        R                  R                  [        [.        5      R                  [.        R0                  UR                  :H  [.        R(                  U:H  5      5      R!                  5       nU(       d  [        SS
5      $ [        R                  R                  [        [2        5      R                  [2        R4                  UR                  :H  5      5      R7                  5       R9                  5       nUR$                   V	s/ s H  oR                  S5      PM     nn	U V	s/ s H  oR                  U;  d  M  U	PM     nn	U(       d  [        SS
5      $ [:        R<                  " U5      n/ nSn[?        UR@                  [B        5      (       a^  [E        UR@                  RG                  5       5       H7  nUR@                  U   nURI                  U5        UURJ                  :X  d  M5  UnM9     U(       d  URJ                  nUR                  URL                  UUU
UURN                  S.n[Q        U/5      S   nUUR$                  U'   U " US5        [        R                  RS                  5         [        R                  RU                  5         [W        SSUR$                  [Y        UR$                  5      S.5      S4$ s  sn	f s  sn	f )Nr   )flag_modifiedr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   concept
subconceptzConcept not foundzSubconcept not foundz/No more questions available for this subconcept r,   r1   optionsanswerrG   rH   
difficultyr;   TzQuestion replaced successfully)r.   r/   r1   r0   r2   )-sqlalchemy.orm.attributesrF   r   r3   r   r4   r5   r   r   r6   r7   r   r!   r8   r,   r9   r:   	enumerater;   r   namegradestreamr   
concept_idr    subconcept_idscalarsallrandomchoice
isinstancerK   dictsortedkeysappendcorrect_answerr1   rM   r   flushr=   r   r<   )rF   r>   r?   r$   r%   r@   question_to_replacequestion_indexidxrA   concept_namesubconcept_name
concept_dbsubconcept_dball_questionsused_question_idsavailable_questionsnew_questionoptions_arraycorrect_answer_textkeyoption_valuenew_question_datas                          rC   replace_question_funcrp   C   s   7nnGDHH_-M((=)K7==FLL##%&,,"%%6"--;	

   4c::NJ00155;+%"# N	 2 @#FF&**95L)--l;O##|""-*"2"227>>1	
   1377JJ&&%%&&*--7  O3	

   4c::JJ&&}##''=+;+;;	
 gi	  /9.B.BC.Bt.BC&3UmttCT7T1mUOQTUU==!45LM,&&--,..3356C'//4L  .l111&2#	 7 *99 oo )) %%"-- 23D2EFqI ,=J(*k*JJJJ3((z334	 
 	 Q DUs   $SSSc                  6   [         R                  n [        R                  " 5       nUR	                  S5      nU (       d  [        SS5      $ U(       d  [        SS5      $ [        R                  R                  [        [        5      R                  [        R                  U:H  [        R                  U R                  :H  5      5      R                  5       nU(       d  [        SS5      $ SUl        [        R                  R!                  5         [#        SS	S
.5      S4$ )Nr$   r&   r'   zAssessment ID requiredr)   r*   r+   Tz5Assessment verified and sent to students successfullyr.   r/   r2   )r   r3   r   r4   r5   r   r   r6   r7   r   r!   r8   r,   r9   r:   is_verifiedr=   r   )r>   r?   r$   r@   s       rC   verify_assessment_funcrt      s    nnGDHH_-M7==6<< ##%&,,"%%6"--;	

   4c:: "JJJJ  	     c                  F   [         R                  " 5       =(       d    0 n U R                  S5      nU R                  S5      nU(       a  U(       d  [        SS5      $ [	        U5      nU(       d  [        SS5      $ UR
                  (       a(  [        UR                  U5      (       d  [        SS5      $ O[        U5      Ul        SUl        [        R                  " [        R                  5      Ul        [        R                  R!                  5         [#        UR$                  S5      n['        UR(                  5      n[+        [-        SSUR$                  UR.                  UR0                  UR2                  UR4                  S	.SS
.5      S5      nUR7                  SUSSSSS9  U$ )NusernamepasswordzInvalid credentialsr)   r'   Tr>   zTeacher logged in successfully)r,   rw   school_namegradesrR   )r.   r/   userroler2   
auth_tokenlax/i:	 )httponlysamesitepathmax_age)r   r4   r5   r   r
   
isLoggedInr   rx   r   r   nowr	   utc
last_loginr   r6   r=   r   r,   r   	school_idr   r   rw   ry   rz   rR   
set_cookie)r?   rw   rx   r>   tokenschoolresponses          rC   
login_funcr      sj   #Dxx
#Hxx
#H83S99&x0G3S99g..99!"7== : ,H5!!hll3GJJ7::y1Ew001FW3**((!--nnmm
 &  	H    ( Oru   c                     [         R                  n [        R                  " 5       =(       d    0 n[	        UR                  S5      5      nUR                  S5      nU R                  nU (       d  [        SS5      $ U(       a  U(       d  [        SS5      $ U R                  n[        R                  R                  [        5      R                  [        R                  U:H  [        R                  U:H  [        R                  U:H  5      R!                  5       nU(       d  [#        SSU S	U 3S
.5      S4$ 0 nU GHT  nUR$                  (       a  UR$                   H  n	U	R                  S5      =(       d    U	R                  S5      n
U	R                  SS5      nU	R                  SS5      nU
(       a  US:X  a  M_  UR'                  U
SSS.5        Xz   S==   U-  ss'   Xz   S==   U-  ss'   M     UR(                  (       d  M  UR(                   Hz  nUR                  S5      n
UR                  SS5      nUR                  SS5      nU
(       a  US:X  a  MG  UR'                  U
SSS.5        Xz   S==   U-  ss'   Xz   S==   U-  ss'   M|     GMW     U(       d  [        SS5      $ / nUR+                  5        H1  u  pUS   US   -  S-  nUR-                  U
[/        US5      S.5        M3     UR1                  S S9  US S  Vs/ s H  nUS   PM
     nnU(       d  [        SS5      $ / n/ nU GH@  n
[        R                  R3                  [5        [6        5      R9                  [6        R:                  U
:H  [6        R                  U:H  [6        R                  U:H  5      5      R=                  5       nU(       d  M  UR-                  U
5        [        R                  R3                  [5        [>        5      R9                  [>        R@                  URB                  :H  5      5      RE                  5       R!                  5       nU H,  nUR-                  URB                  U
UR:                  S.5        M.     GMC     U(       d  [        SS5      $ [F        RH                  " SS5      n[K        SU[M        U5      -  5      n/ nU GH~  n[        R                  R3                  [5        [N        5      R9                  [N        RP                  US    :H  5      5      RE                  5       R!                  5       n[F        RR                  " U[U        [M        U5      U5      5      nU H  n/ nS!n[W        URX                  [Z        5      (       ai  []        URX                  R_                  5       5       HB  n UR-                  URX                  U    5        U UR`                  :X  d  M3  URX                  U    nMD     UR-                  URB                  URb                  UU=(       d    UR`                  US"   US#   URd                  S$.5        M     GM     U(       d  [        S%S5      $ [F        Rf                  " U5        [i        U5      n[k        UU RB                  UUUUS&9n![        R                  Rm                  U!5        [        R                  Ro                  5         [#        S'S(U!RB                  [M        U5      UUS S US).5      S*4$ s  snf )+NrQ   sectionr&   r+   zGrade and section requiredr)   Fz#No student results found for Grade z	 Section rr   rG   conceptnametotalr   correct)r0   total_correctr0   r   z%No concept performance data availabled      )rG   accuracyc                     U S   $ )Nr    )xs    rC   <lambda>auto_ass_func.<locals>.<lambda>e  s    1Z=ru   )rm      z Unable to identify weak concepts)rT   rc   rd   z&No subconcepts found for weak concepts         rT   rI   rc   rd   rJ   z$No questions found for weak conceptsr   r9   rQ   r   conceptsr;   Tz+Auto-generated assessment sent successfully)r.   r/   r$   r0   weakest_conceptsconcept_performancer1   r2   )8r   r3   r   r4   strr5   rR   r   r   r   r6   queryr   filterrQ   r   rV   r   concept_detail
setdefaultsubconcept_detailitemsr]   roundsortr7   r   r   r8   rP   r:   r   rS   r,   rU   rW   randintmaxr<   r    rT   sampleminrY   rK   rZ   r[   r\   r^   r1   rM   shuffler   r!   addr=   )"r>   r?   rQ   r   rR   r   student_resultsconcept_statsresultconcept_objrc   r   r   subconcept_objr   statsr   cr   all_subconceptsconcept_namesre   subconceptsscr0   questions_per_subconcepttransformed_questionsr;   pickedrA   rK   r^   knew_assessments"                                     rC   auto_ass_funcr     s?   nnG#D!"Ehhy!G^^F7==:C@@!!I jj&&'BCJJ#--:#))U2#++w6 
ce	  <UG9WIV
   	 M!  %44*y9[[__]=[#3%//)Q7#uz(('(%&8 
 +,=>%G>+O<G<  5  ###"(":":-11)<&**7A6(,,Y:#uz(('(%&8 
 +,=>%G>+O<G< #;) "H EsKK ,224/*U3D-EEL""#h*$
 	  5 !89.A"1.EF.E).EF@#FF OM(ZZ''< &&!!\1""e+##v-
 

 	 \*jj((?#))**jmm;
 ')CCE	 	 B""!# ,#%77$  ) )6 FLL nnR,O"1o_9M&MNJJ&&=!''++r//BB
 ')CCE	 	 y#c)n>V*WXAGN!))T**		 01ANN199Q<0A,,,)*1 2
 "((ddJJ"(<A,<,<n- !23ll*   : !DcJJ
NN()56KL ,::'N JJNN>"JJ@'**45,22A6)  	 { Gs   ?[+c                  4   [         R                  n [        R                  " 5       nUR	                  S5      n[        UR	                  S5      5      nUR	                  S5      nU (       d  [        SS5      $ U(       a  U(       a  U(       d  [        SS5      $ / n/ n0 nU H  nUR	                  S5      n	UR	                  S	5      n
UR                  U
5        UR	                  S
/ 5       H  n[        [        5      R                  [        R                  U	:H  [        R                  U:H  5      n[        R                  R                  U5      R!                  5       R#                  5       nU H-  nUR                  UR$                  5        X4X~R$                  '   M/     M     GM     U(       d  [        SS5      $ [&        R(                  " SS5      n[+        SU[-        U5      -  5      n/ nU GH  n[        [.        5      R                  [.        R0                  U:H  5      n[        R                  R                  U5      R!                  5       R#                  5       nU(       d  Mw  [&        R2                  " U[5        [-        U5      U5      5      nU H  nUU   u  n
n/ nSn[7        UR8                  [:        5      (       a^  [=        UR8                  R?                  5       5       H7  nUR8                  U   nUR                  U5        UUR@                  :X  d  M5  UnM9     U(       d  UR@                  nUR$                  URB                  UUU
UURD                  S.nUR                  U5        M     GM     U(       d  [        SS5      $ [G        U5      n[I        U RJ                  U R$                  UUUUS9n[        R                  RM                  U5        [        R                  RO                  5         [Q        SSUU[-        U5      [-        U5      UUR$                  S.5      S4$ )Nr   rQ   r   r&   r+   zRequired field is missingr)   rS   rG   rH   zNo valid subconcepts foundr      r   rI   rJ   z+No questions found for selected subconceptsr   Tz(Assessment sent to students successfully)r.   r/   rG   r1   r0   total_subconceptsr   r$   r2   ))r   r3   r   r4   r5   r   r   r]   r   r   r8   rS   rP   r   r6   r7   rU   rV   r,   rW   r   r   r<   r    rT   r   r   rY   rK   rZ   r[   r\   r^   r1   rM   r   r!   r   r   r=   r   )r>   r?   concepts_with_subrQ   r   subconcept_idsr   subconcept_mappingrG   rS   rc   sc_namestmt_find_subconceptr   subr0   r   r   sc_idstmt_all_quesall_quesr   rA   rd   rk   rl   rm   rn   transformed_qr   s                                 rC   send_ass_funcr     s   nnGD,!"Ehhy!G7==E93??NM$[[.
{{9-\*{{<4G#)/#:#@#@**j8$$/$ 
 ZZ''(<=EEGKKMF%%cff-.:-D"66*  5 %  :C@@nnR,O"1o^9L&LM}-33''50
 ::%%m4<<>BBDxS]<T)UVA,>u,E)L/ M"$!))T**!!)).."23C#$99S>L!((6a....:+ 4 '&'&6&6# $$ !

,1+"1"#,,M "((79   R !KSQQ 66KL+''zz"+
N JJNN>"JJ= )45 0$<'**	 	 		 	ru   c                  8   [         R                  n [        R                  " 5       nU (       d  [	        SS5      $ U R
                  nU R                  nUR                  S5      nUR                  S5      nU R                  n[        [        5      R                  [        R                  U:H  [        R                  U:H  -  [        R                  U:H  -  5      n[        R                  R!                  U5      R#                  5       R%                  5       n['        U5      n	[        [(        5      R                  [(        R*                  U:H  [(        R                  U:H  -  [(        R                  U:H  -  5      n
[        R                  R!                  U
5      R#                  5       R%                  5       nU Vs/ s H  oR
                  PM     nn/ nU H.  nUR,                   H  nX;  d  M
  UR/                  U5        M     M0     [        [0        5      R                  [0        R                  [3        U5      :H  [0        R                  U:H  -  5      n[        R                  R!                  U5      R#                  5       R%                  5       n[5        U Vs/ s H  oR6                  PM     sn5      n[5        [9        [;        U5      5      5      nU Vs/ s H  oU;  d  M
  UPM     nnUU-   n[        [<        5      R                  [<        R                  U:H  [<        R                  U:H  -  [<        R                  U:H  -  [<        R>                  RA                  U5      -  5      n[        [<        5      R                  [<        R                  U:H  [<        R                  U:H  -  [<        R                  U:H  -  5      n[        R                  R!                  U5      R#                  5       R%                  5       n[        R                  R!                  U5      R#                  5       R%                  5       n['        U5      n/ nU GH  nU Vs/ s H!  nURB                  UR
                  :X  d  M  UPM#     nn0 n[;        5       n U H  n!U!RD                   H~  n"U"R                  S5      n#U"R                  SS5      n$U"R                  SS5      n%U#(       a  U RG                  U#5        U#U;  a  SSS	.UU#'   UU#   S==   U$-  ss'   UU#   S==   U%-  ss'   M     M     / n&Sn'U Hs  n(UR                  U(SSS	.5      n)U)S   n$U)S   n%U(U ;   n*U$S:  a	  U%U$-  S
-  n+OSn+S
U+-
  n,U*(       a  U'U+-  n'U&R/                  U([I        U+S5      [I        U,S5      U*S.5        Mu     [K        S U& 5       5      n-U-S:  a  [I        U'U--  S5      OSn.UR/                  UR
                  URL                   SURN                   3U.U&S.5        GM     [Q        SSU	UUUUUS.5      S4$ s  snf s  snf s  snf s  snf )Nr&   r'   rQ   r   rG   r   r   r   r   r   r   r   )rG   correct_percentwrong_percentisAttemptedc              3   <   #    U  H  oS    (       d  M  Sv   M     g7f)r   r   Nr   ).0r   s     rC   	<genexpr> overview_func.<locals>.<genexpr>  s     N)9A}=Maa)9s   	 )
student_idstudent_nameaverage_masteryconcept_analysisTz%Teacher overview fetched successfully)r.   r/   total_studentstotal_assessment_submittedtested_conceptsremaining_conceptsstudents_analysisconcept_orderr2   ))r   r3   r   r4   r   r,   r   r5   rR   r   r"   r8   rQ   r   r   r6   r7   rU   rV   r<   r!   r9   r   r]   r   r   r[   rP   listsetr   assesment_idin_r   r   r   r   sum	firstnamelastnamer   )/r>   r?   
teacher_idr   rQ   r   rR   stmt_studentsstudentsr   stmt_assessmentsassessmentsaassessment_idsr   r   stmt_conceptsall_conceptsall_concept_namestested_concepts_sortedremaining_concepts_sortedfinal_concept_orderstmt_submissions_totalstmt_submissionssubmissions_lensubmissionsr   r   studentrr   concept_summaryattempted_conceptsr   concept_datarP   r   r   r   total_accuracy_sumrG   datais_attemptedr   wrongattempted_countavg_masterys/                                                  rC   overview_funcr	  =  s   nnGD7==J!!IHHWEhhy!G^^F <(..			9	,			u	$	&				(	*M
 zz!!-088:>>@H]N 45;;		*	*j	8		%	%	.	0		'	'7	2	4
 **$$%56>>@DDFK$/0KqddKN0 OA'&&q)   <(..			s5z	)				&	(M ::%%m4<<>BBDL=1=> $D_)=$>?$!$a1G(G$  ! 13LL $$?@FF	$	.	.)	;	$	*	*e	3	5	$	,	,	7	9 
%	1	1	5	5n	E	G 9:@@	$	.	.)	;	$	*	*e	3	5	$	,	,	7	9 jj(()?@HHJNNPO**$$%56>>@DDFK!$_!5 "
"!allgjj&@A{ 	 
  U%F & 5 5#''	2$((!4&**9a8&**40.67A,FOD)%g.%7.%i0G;0 !6 & *G"&&13D ME9oG #&88Lqy#eOs2(NE "h."##"#(1#5!&ua+	% - +< N)9NN " $6:() 	
 	  !**&00173C3C2DE* 0	"
 	} J :(&@17.,	 	 		 	e 1  >!6
s$   2XX	XXX#Xc            	      $   [         R                  n [        R                  " 5       nU (       d  [	        SS5      $ U R
                  nU R                  nUR                  S5      nUR                  S5      nU R                  n[        [        5      R                  [        R                  U:H  [        R                  U:H  -  [        R                  U:H  -  5      n[        R                  R!                  U5      R#                  5       R%                  5       n[        [&        5      R                  [&        R(                  U:H  [&        R                  U:H  -  [&        R                  U:H  -  5      n	[        R                  R!                  U	5      R#                  5       R%                  5       n
U
 Vs/ s H  oR
                  PM     nn/ nU
 H.  nUR*                   H  nX;  d  M
  UR-                  U5        M     M0     [        [.        5      R                  [.        R                  [1        U5      :H  [.        R                  U:H  -  5      n[        R                  R!                  U5      R#                  5       R%                  5       n[3        U Vs/ s H  oR4                  PM     sn5      n[3        [7        [9        U5      5      5      nU Vs/ s H  oU;  d  M
  UPM     nnUU-   n[        [:        5      R                  [:        R                  U:H  [:        R                  U:H  -  [:        R                  U:H  -  5      n[        R                  R!                  U5      R#                  5       R%                  5       n/ nU GHb  nU Vs/ s H!  nUR<                  UR
                  :X  d  M  UPM#     nn0 nU Hy  nUR>                   Hf  nUR                  S5      nUR                  SS5      nUR                  SS5      n UU;  a  SSS	.UU'   UU   S==   U-  ss'   UU   S==   U -  ss'   Mh     M{     0 n!Sn"U HN  n#UR                  U#SSS	.5      n$U$S   nU$S   n US:  a  U U-  S
-  n%Sn&OSn%Sn&U"U%-  n"[A        U%S5      U&S.U!U#'   MP     [C        U5      S:  a  [A        U"[C        U5      -  S5      OSn'UR-                  URD                   SURF                   3U'U!S.5        GMe     [H        RJ                  " 5       n(U(RL                  n)SU SU S3U)l'        [Q        SSSS9n*[S        SSSS9n+[U        SSS9n,[W        [Y        SS9[Y        SS9[Y        SS9[Y        SS9S9n-SU)S'   U*U)S   l-        U+U)S   l.        U,U)S   l/        U-U)S   l0        S U)Rb                  S!   l2        [g        USS"9 Hd  u  n.n#U)Ri                  S#U.U#S$9n/U*U/l-        U+U/l.        U,U/l/        U-U/l0        S%U)Rb                  [H        Rj                  Rm                  U.5         l2        Mf     [C        U5      S-   n0U)Ri                  S#U0S&S$9n1U*U1l-        U+U1l.        U,U1l/        U-U1l0        S'U)Rb                  [H        Rj                  Rm                  U05         l2        [g        USS"9 GH  u  n2n3U-U)Ri                  U2S#U3S(   S$9l0        [g        USS"9 H  u  n4n#U3S)   R                  U#0 5      nUR                  S*S5      n5UR                  S+S5      n&U)Ri                  U2U4U5 S,3S$9n/U,U/l/        U-U/l0        U&(       aB  U5S-:  a  [Q        S.S.SS9U/l-        M  U5S/:  a  [Q        S0S0SS9U/l-        M  [Q        S1S1SS9U/l-        M  [Q        S2S2SS9U/l-        M     U)Ri                  U2U0U3S3    S,3S$9n6U,U6l/        U-U6l0        [S        SS49U6l.        GM     [o        5       n7U(Rq                  U75        U7Rs                  S5        S5U S6U S6[t        Rv                  " 5       Ry                  S75       S83n8[{        U7S9SU8S:9$ s  snf s  snf s  snf s  snf );Nr&   r'   rQ   r   rG   r   r   r   r   r   TFr   )r   r   r   )r   r   r   zGrade z	 Progress4472C4solid)start_color	end_color	fill_typeFFFFFF   )boldcolorsizecenter)
horizontalverticalthin)style)leftrighttopbottomzStudent NameA1r   A)startr   )rowcolumnvaluer   zAverage Mastery (%)r   r   r   r   r   %F   C6EFCE(   FFEB9CFFC7CEE7E6E6r   )r  Student_Progress_Grade__z%Y%m%dz.xlsxzAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet)mimetypeas_attachmentdownload_name)>r   r3   r   r4   r   r,   r   r5   rR   r   r"   r8   rQ   r   r   r6   r7   rU   rV   r!   r9   r   r]   r   r   r[   rP   r   r   r   r   r   r   r<   r   r   openpyxlWorkbookactivetitler   r   r   r   r   fillfont	alignmentbordercolumn_dimensionswidthrO   cellutilsget_column_letterr   saveseekr   r   strftimer   )9r>   r?   r   r   rQ   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   students_datar   r   r   r   r   r  rP   r   r   r   r  rG   r  r   r  r  wbwsheader_fillheader_fontcenter_alignmentr7  rb   r:  avg_col
avg_headerrow_idxstudent_datacol_idxscoreavg_celloutputfilenames9                                                            rC   download_funcrO    s    nnGD7==J!!IHHWEhhy!G^^F <(..			9	,			u	$	&				(	*M
 zz!!-088:>>@H 45;;		*	*j	8		%	%	.	0		'	'7	2	4
 **$$%56>>@DDFK$/0KqddKN0 OA'&&q)   <(..			s5z	)				&	(M ::%%m4<<>BBDL=1=> $D_)=$>?$!$a1G(G$  ! 13LL 9:@@	$	.	.)	;	$	*	*e	3	5	$	,	,	7	9
 **$$%56>>@DDFK M"
"!allgjj&@A{ 	 
 %F & 5 5#''	2$((!4&**9a8.67A,FOD)%g.%7.%i0G;0 !6 & *G"&&w!0JKDME9oGqy#eOs2#$(* $)1#5+)W% +* &'!+ $s+>'??C12 	
 	&00173C3C2DE* 0
 	] j 
			B	Bway	2BH(hRYZKDr:K HxH v&!	F BtHBtHMBtHM)BtHBtHO&(B#!"5Q?Www1Sw8		)LNX^^==cBCI @ %&*GQw6KLJ!JO!JO+JJLNB99'BCI!*=!BTZGA\.-IJQ )*=Q GGW'(:;??LL $$%6:E'++M5AL77wwqk7JD-DN DKB; +H`g hDIb[ +H`g hDI +H`g hDI'H\cd	# !H& 77!"345Q7  

 . $; "C> YFGGFO
KKN(q	8<<>;R;RS[;\:]]bcHT	 E 1  >!"
s$   '_>`	``9``c                  f   [         R                  n [        R                  " 5       nU (       d  [	        SS5      $ U R
                  nUR                  S5      nUR                  S5      nUR                  SS5      R                  5       nU(       a  U(       a  U(       d  [	        SS5      $ [        [        5      R                  [        R                  " [        R                  " [        R                  5      5      UR                  5       :H  5      n[        R                   R#                  U5      R%                  5       R'                  5       nS nU H  n	[        [        R(                  " [*        R,                  5      5      R                  [*        R.                  U	R,                  :H  [*        R0                  [3        U5      R                  5       :H  [        R                  " [*        R
                  5      UR                  5       :H  5      n
[        R                   R#                  U
5      R5                  5       nUS	:  d  M  U	n  O   U(       d  U(       a  US	   nU(       d  [	        S
U S3S5      $ [        [*        5      R                  [*        R.                  UR,                  :H  [*        R0                  [3        U5      R                  5       :H  [        R                  " [*        R
                  5      UR                  5       :H  5      R7                  [*        R,                  5      n[        R                   R#                  U5      R%                  5       R'                  5       nU(       d  [	        SU SU 3S5      $ U Vs/ s H  oR                  PM     nn[        [8        5      R                  [8        R0                  U:H  [8        R:                  U:H  [8        R<                  U R<                  :H  5      n[        R                   R#                  U5      R%                  5       R'                  5       nU(       d  [?        SU/ S	S	S.5      $ / nS	nU GH  n[        [@        5      R                  [@        RB                  UR,                  :H  [@        R0                  U:H  [@        R:                  U:H  5      n[        R                   R#                  U5      R%                  5       R'                  5       nURD                  (       a  URF                   SURD                   3OURF                  nU[I        U5      -  nU Vs0 s H
  nUS	S	S	S._M     nn[K        5       nU H  nURL                  (       d  M  URL                   H  nUR                  SS5      R                  5       R                  5       UR                  5       :X  d  ME  UR                  SS5      R                  5       nUR                  SS	5      nUR                  SS	5      nUU;   d  M  URO                  U5        UU   S==   U-  ss'   UU   S==   U-  ss'   UU   S==   S-  ss'   M     M     / n S	n!S	n"U H|  nUU   n#UU;   n$U#S   S	:  aM  U$(       aF  U#S   U#S   -  S-  n%U RQ                  UU[S        U%S5      SU#S   U#S   U#S   S.5        U!U%-  n!U"S-  n"Mc  U RQ                  UUS	SS	S	S	S.5        M~     U"S	:  a  U!U"-  OS	n&URQ                  UR,                  UU [S        U&S5      [I        U5      S.5        GM     [?        SUU[I        U5      US.5      $ s  snf s  snf )Nr&   r+   rQ   r   selected_conceptrI   zBInvalid Payload: grade, section, and selected_concept are requiredr)   r   	Concept 'z' not foundzNo subconcepts available for 'z' in Grade T)r.   rQ  r   r   r   r   )r0   correct_answersattemptsrG   rH   r   r   r0   rS  rT  r   r   r   )rH   rG   r   r   r0   rS  rT  F)r   r   subconcept_analysisr   total_assessments)*r   r3   r   r4   r   rR   r5   stripr   r   r8   r   lowertrimrP   r   r6   r7   rU   rV   countr   r,   rS   rQ   r   scalarorder_byr"   r   r   r   r   r   r   r   r<   r   r   r   r]   r   )'r>   r?   rR   rQ   r   rQ  stmt_all_conceptsall_matching_conceptsrG   candidate_concept
check_stmtrZ  stmt_subconceptsr   r   r   r   r   r   r   r   stmt_resultsresultsr   rP   subconcept_statsattempted_subconceptsr   subconcept_datard   r   r   rU  total_masterysubconcept_countr   r  r   r   s'                                          rC   concept_overview_funcri    s   nnGD7==^^FHHWEhhy!Gxx 2B7==?'7P
 	
 |,22

499\../04D4J4J4LL JJ../@AIIKOOQ G2DJJ'9'9:;AA&&*;*>*>>!!SZ%5%5%77IIo,,-?


 

"":.55719'G 3 ,'*	*:);;GMM o.44""gjj0U!1!1!33		/(()V\\^; h!!"	  **$$%56>>@DDFK,-=,>k%Q
 	

 *552wwO5 <(..e#''"3"33M
 zz!!-088:>>@H 0!#*+
  	 !"9:@@'22gjj@'--6'//7:

 **$$\2::<@@B    !7#3#3"45%,%6%6 	
 	#c'l2" (
 ( #$#$ 
 ( 	 
 !$ F''''-'?'?O&**9b9??AGGIM]McMcMee*9*=*=lB*O*U*U*W / 3 3GQ ?"1"5"5i"C*.>>155oF,_=>OPTYYP,_=>OPT[[P,_=jIQNI (@  !.O$_5E +.CCL&'!++,u5F/GG# $**"1/',_a'@#'',->'?',->'? %j 1,  0 A%  $**"1/'(#('('( !, 3  /J  !# ,,)* 	
 	  !**(#6$_a8!$W"
 	m | ,.h-&@  i 6L
s   3\)&\.c            	         [         R                  n U (       d  [        SS5      $ [        R                  " 5       nUR                  S5      nU(       d  [        SS5      $ [        [        5      R                  [        R                  [        U5      :H  [        R                  U R                  :H  -  5      n[        R                  R                  U5      R                  5       R!                  5       n/ nU HL  nUR#                  UR$                  UR&                  UR                  UR                  UR(                  S.5        MN     [+        SUS.5      $ )NzNo active teacher found.r+   rQ   zPayload required)r,   rP   rQ   rR   descriptionT)r.   r   )r   r3   r   r   r4   r5   r   r   r8   rQ   r   rR   r   r6   r7   rU   rV   r]   r,   rP   rk  r   )r>   r?   rQ   stmtr   r  r   s          rC   concept_funcrm  W  s   nnG8#>>DHHWE0#66,%%			s5z	)				.	0D ZZ%--/335FD$$FFWWhh==
 	    ru   c                      [         R                  n U (       d  [        SS5      $ [        R                  " 5       n[        UR                  S5      5      nUR                  S5      nUR                  S5      nU R                  nU(       a  U(       a  U(       d  [        SSS.5      S4$ [        R                  R                  [        [        5      R                  [        R                  U:H  [        R                   U:H  [        R                  U:H  5      5      R#                  5       nU(       d  [        S	U S
U 3S5      $ [        R                  R                  [        [$        5      R                  [$        R&                  UR(                  :H  5      5      R+                  5       R-                  5       nU(       d  [        SU 3S5      $ U Vs/ s H  oR                  PM     n	n[        SSU	[/        U	5      S.5      S4$ s  snf )NzNo active Teacher foundr)   rQ   r   rG   FzMissing required fieldsrr   rR  z' not found for grade z"No subconcepts found for concept: r+   Tz Subconcepts fetched successfully)r.   r/   r   r   r2   )r   r3   r   r   r4   r   r5   rR   r   r   r6   r7   r   r   r8   rP   rQ   r:   r   rS   r,   rU   rV   r<   )
r>   r?   rQ   r   rG   rR   r   r   rH   subconcept_lists
             rC   sub_concept_funcrp  z  s   nnG7==D!"Ehhy!Ghhy!G^^Fw0
   	
 **$$|""(%'6)	
   y 6ug>
 	

 **$$%%&&+..8	
 gi	  0	:
 	

 :EE:OE5!_%	 
 	  Fs   	G;c                     [         R                  n [        R                  " 5       nUR	                  S5      nUR	                  S5      nUR	                  SS5      nUR	                  SS5      nUR	                  SS5      nU(       a  U(       d  [        S	S
5      $ U (       d  [        SS
5      $ U R                  nU R                  nU(       Gaq  [        [        5      R                  [        R                  U:H  [        R                  U:H  5      n	[        R                  R                  U	5      R                  5       R!                  5       n
/ nU
 H  n[        ["        5      R                  ["        R$                  UR&                  :H  5      n[        R                  R                  U5      R                  5       R!                  5       nUR)                  UR&                  UR*                  UR                  UR                  U Vs/ s H  oR*                  PM     snS.5        M     [-        XU5      n[/        SUUS.5      S4$ US:X  a  [-        XU5      nO US:X  a  [1        XX55      nO[3        XX5U5      n[/        SUS.5      S4$ s  snf )NrQ   r   is_need_conceptFrc   overallrd   zAll SubconceptszGrade or section missingr)   z+Unauthorized user! Please login to continue)r,   rP   rQ   rR   r   T)r.   r   r  r2   )r.   r  )r   r3   r   r4   r5   r   rR   r   r   r   r8   rQ   r   r6   r7   rU   rV   r   rS   r,   r]   rP   r   r   r   r   )r>   r?   rQ   r   rr  rc   rd   rR   r   stmt_find_conceptr   concepts_listr   stmt_subconceptr   r   overall_studentsr   s                     rC   remedial_funcrx    s:   nnGDHHWEhhy!Ghh0%8O88NI6Lhh02CDO8#>>KSQQ^^F!!I
 "<066%'6)
 zz))*;<DDFJJLA$_5;;**add2O **,,_=EEGKKMK  dd((2=>+B+>"   5YwO%$
  	 	 y ,YwG	-	-,YwU/g_
   	 /  ?s   =I?);flaskr   r   r   r   r   r   r	   src.services.teachersr
   src.lib.bcryptr   r   srcr   src.lib.jwtr   src.utils.responser   r0  openpyxl.stylesr   r   r   r   r   
sqlalchemyr   r   rW   src.services.schoolsr   src.utils.randomr   ior   src.utils.remedialr   r   r   
src.modelsr   r   r   r    r!   r"   rD   rp   rt   r   r   r   r	  rO  ri  rm  rp  rx  r   ru   rC   <module>r     s    ? ? ' : ;  & -  F F #  2 6  q q &RpfB:zwtl^XvCLvr F3lBru   