
    -i;.                     x    S r SSKJr  SSKJrJrJr  SSKJr  SSKJ	r	J
r
JrJr  S rS\
S\4S	 jr " S
 S5      rg)ui   Lógica de adecuaciones curriculares por curso: tipos, course_curricular_adequacies, subjects y students.    )datetime)OptionalAnyList)Session)CurricularAdequacyTypeModelCourseCurricularAdequacyModel$CourseCurricularAdequacySubjectModel$CourseCurricularAdequacyStudentModelc                 t    U c  g [        U S5      (       a  U R                  5       $ U (       a  [        U 5      $ S $ )N	isoformat)hasattrr   str)vs    fC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\course_curricular_adequacy_class.py_serialize_dater      s4    yq+{{}3q6 D     rreturnc                    U R                   U R                  U R                  U R                  U R                  U R
                  [        U R                  5      [        U R                  5      [        U R                  5      S.	$ )N)	id	course_idcurricular_adequacy_type_idapplied
scope_textstrategies_text
added_dateupdated_datedeleted_date)
r   r   r   r   r   r   r   r   r   r   )r   s    r   _adequacy_to_dictr       s^    dd[['('D'D99ll,,%all3'7'7
 
r   c                       \ rS rSrS\4S jrS\4S jrS\S\4S jr	S\S\4S	 jr
S
\S\4S jrS\S
\S\4S jrS\S\4S jrS\S\\   SS4S jrS\S\\   SS4S jrSrg)CourseCurricularAdequacyClass$   dbc                     Xl         g )Nr$   )selfr$   s     r   __init__&CourseCurricularAdequacyClass.__init__%   s    r   r   c           	          U R                   R                  [        5      R                  [        R                  R                  S5      5      R                  [        R                  5      R                  5       nSU Vs/ s H2  nUR                  UR                  UR                  UR                  S.PM4     snS.$ s  snf ! [         a  nS[        U5      / S.s SnA$ SnAff = f)u_   Lista tipos de adecuación curricular activos (deleted_date is None), ordenados por sort_order.Nsuccessr   keylabel
sort_orderstatusdataerrorr1   messager2   )r$   queryr   filterr   is_order_byr/   allr   r-   r.   	Exceptionr   )r'   rowsr   es       r   	get_types'CourseCurricularAdequacyClass.get_types(   s    	F9:3@@DDTJK5@@A	  $ "! 44q||\! 
  	F%#a&"EE	Fs0   A;C  =9B;6C  ;C   
C#
CC#C#r   c                     U R                   R                  [        5      R                  [        R                  R                  S5      5      R                  [        R                  5      R                  5       nU R                   R                  [        5      R                  [        R                  U:H  [        R                  R                  S5      5      R                  5       nU Vs0 s H  oDR                  U_M     nn/ nU GH  nUR                  UR                  5      n/ n	/ n
U(       a  U R                   R                  [        R                  5      R                  [        R                   UR                  :H  5      R                  5        Vs/ s H  nUS   PM
     n	nU R                   R                  ["        R$                  5      R                  ["        R                   UR                  :H  5      R                  5        Vs/ s H  nUS   PM
     n
nUR'                  UR                  UR(                  UR*                  UR                  S.U(       a  [-        U5      OSU(       a  UR.                  OSU(       a  UR0                  OSU(       a  UR2                  OSU	U
S.5        GM     SUS.$ s  snf s  snf s  snf ! [4         a  nS[7        U5      / S.s SnA$ SnAff = f)	zzEstructura completa para el curso: cada tipo con su fila (applied, scope_text, strategies_text, subject_ids, student_ids).Nr   r,   )typeadequacyr   r   r   subject_idsstudent_idsr+   r0   r3   r4   )r$   r6   r   r7   r   r8   r9   r/   r:   r	   r   r   getr   r
   
subject_idcourse_curricular_adequacy_idr   
student_idappendr-   r.   r    r   r   r   r;   r   )r'   r   
types_rows
adequaciesaadj_by_typeresulttadjrC   rD   sr=   s                r   get_by_course_id.CourseCurricularAdequacyClass.get_by_course_id;   sf   -	F9:3@@DDTJK5@@A	  ;<1;;yH1>>BB4H   FPPZ88!;ZKPF!ooadd+   "&/S/^/^!_ D b bfiflfl lm"#"A !"   # "&/S/^/^!_ D b bfiflfl lm"#"A !"   # #$44WXWcWcd:= 1# 64.1s{{q47#..T>As':':t#.#. #  4 (889 Q##   	F%#a&"EE	FsK   C%J? 'J0=BJ? J5A%J? J:BJ? 0J? ?
K"	KK"K"r   c                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSSS.$ [        U5      nU R                   R                  [        R                  5      R                  [        R                  U:H  5      R                  5        Vs/ s H  nUS   PM
     snUS'   U R                   R                  [        R                  5      R                  [        R                  U:H  5      R                  5        Vs/ s H  nUS   PM
     snUS'   SUS	.$ s  snf s  snf ! [         a  nS[        U5      SS.s SnA$ SnAff = f)
u=   Obtiene una adecuación por id con subject_ids y student_ids.r3   Registro no encontrado.Nr4   r   rC   rD   r+   r0   )r$   r6   r	   r7   r   firstr    r
   rF   rG   r:   r   rH   r;   r   )r'   r   rowr2   rQ   r=   s         r   	get_by_id'CourseCurricularAdequacyClass.get_by_idl   s[   	H;<588B>? 
 ")6OY]^^$S)D 'K'V'VW<ZZ^``a#A !#D 'K'V'VW<ZZ^``a#A !#D (66##  	H%#a&$GG	HsD   AE A$E  EAE .E=
E 
E 
E5E0*E50E5r2   c                     UR                  S5      nUR                  S5      nUb  Uc  SSS.$ [        U5      n[        U5      nUR                  S5      nUS;   a  S	OS
nUR                  S5      =(       d    SR                  5       =(       d    SnUR                  S5      =(       d    SR                  5       =(       d    SnUR                  S5      =(       d    / nUR                  S5      =(       d    / n	[        R                  " 5       n
U R
                  R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       nU(       ac  X[l        Xkl        X{l        Xl        SUl        U R
                  R#                  5         U R
                  R%                  U5        UR&                  nSnOn[        UUUUUU
U
SS9nU R
                  R)                  U5        U R
                  R#                  5         U R
                  R%                  U5        UR&                  nSnU R+                  X5        U R-                  X5        U R
                  R#                  5         SX[/        U5      S.$ ! [0         a2  nU R
                  R3                  5         S[5        U5      S.s SnA$ SnAff = f)ut   Crea o actualiza una adecuación por (course_id, curricular_adequacy_type_id). Sincroniza subject_ids y student_ids.r   r   Nr3   z7course_id y curricular_adequacy_type_id son requeridos.r1   r5   r   T   1r]   r   r    r   rC   rD   u   Adecuación actualizada.)r   r   r   r   r   r   r   r   u   Adecuación creada.r+   r1   r5   r   r2   )rE   intstripr   nowr$   r6   r	   r7   r   r   rV   r   r   r   r   r   commitrefreshr   add_sync_subjects_sync_studentsr    r;   rollbackr   )r'   r2   r   r   applied_valr   r   r   rC   rD   rc   rW   response_idmsgr=   s                  r   store#CourseCurricularAdequacyClass.store   sF   8	:-I*.((3P*Q' $?$G")6oppII*-.I*J'((9-K&.8aaG((<06B==?G4J#xx(9:@bGGIQTO((=17RK((=17RK,,.C ;<1;;yH1MMQll   %!+&5##& #'  $!ff03'0K#)$3"!$!%	 C  $!ff+99GGNN'CTefiTjkk 	:GG%#a&99	:s#   ,J IJ 
K	'K>K	K	c                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ SU;   a  US   S;   a  SOSUl        SU;   a*  US   =(       d    S	R                  5       =(       d    S
Ul        SU;   a*  US   =(       d    S	R                  5       =(       d    S
Ul	        [        R                  " 5       Ul        U R                   R                  5         SU;   a  U R                  XS   =(       d    / 5        SU;   a  U R                  XS   =(       d    / 5        U R                   R                  5         U R                   R!                  U5        SSU[#        U5      S.$ ! [$         a2  nU R                   R'                  5         S[)        U5      S.s S
nA$ S
nAff = f)uk   Actualiza una adecuación por id. Opcional: applied, scope_text, strategies_text, subject_ids, student_ids.r3   rU   r[   r   r\   r]   r   r   r_   Nr   rC   rD   r+   zRegistro actualizado.r`   )r$   r6   r	   r7   r   rV   r   rb   r   r   r   rc   r   rd   rg   rh   re   r    r;   ri   r   )r'   r   r2   rW   r=   s        r   update$CourseCurricularAdequacyClass.update   sx   	:''-- =>EEFcFfFfjlFlmssuC")6OPPD #'	?n#Da!t#"&|"4":!A!A!C!Kt D('+,='>'D"&K&K&M&UQU#'||~CGGNN$##B](;(ArB$##B](;(ArBGGNNGGOOC '4KSU_pqt_uvv 	:GG%#a&99	:s%   AF D6F 
G'G	G	Gc                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ [        R                  " 5       Ul        UR                  Ul	        U R                   R                  5         SSUS.$ ! [         a2  nU R                   R                  5         S[        U5      S.s SnA$ SnAff = f)u   Borrado lógico (deleted_date).r3   rU   r[   r+   zRegistro eliminado.)r1   r5   r   N)r$   r6   r	   r7   r   rV   r   rc   r   r   rd   r;   ri   r   )r'   r   rW   r=   s       r   delete$CourseCurricularAdequacyClass.delete   s    
	:''-- =>EEFcFfFfjlFlmssuC")6OPP'||~C"//CGGNN'4IQSTT 	:GG%#a&99	:s%   AB& A
B& &
C"0'CC"C"rG   rC   Nc           	      D   U R                   R                  [        5      R                  [        R                  U:H  5      R                  SS9  [        R                  " 5       nU H9  nU(       d  M  U R                   R                  [        U[        U5      US95        M;     g )NFsynchronize_session)rG   rF   r   )
r$   r6   r
   r7   rG   rs   r   rc   rf   ra   )r'   rG   rC   rc   sids        r   rg   ,CourseCurricularAdequacyClass._sync_subjects   y    :;BB0NNRoo	

&U&
+llnCGGKK<.Ks8  r   rD   c           	      D   U R                   R                  [        5      R                  [        R                  U:H  5      R                  SS9  [        R                  " 5       nU H9  nU(       d  M  U R                   R                  [        U[        U5      US95        M;     g )NFrv   )rG   rH   r   )
r$   r6   r   r7   rG   rs   r   rc   rf   ra   )r'   rG   rD   rc   rx   s        r   rh   ,CourseCurricularAdequacyClass._sync_students   rz   r   r&   )__name__
__module____qualname____firstlineno__r   r(   r   r>   ra   rR   rX   dictrm   rp   rs   r   rg   rh   __static_attributes__ r   r   r"   r"   $   s    7 F3 F&/F# /F# /FbHC HC H6::$ ::3 ::x: :D :S :2: : :C dSVi \` C dSVi \` r   r"   N)__doc__r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr   r	   r
   r   r   r   r    r"   r   r   r   <module>r      sC    o  & & " !6 4 ` `r   