
    ##i%                     t    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  S rS\
S\4S	 jr " S
 S5      rg)ua   Lógica de ajustes por curso: adjustment_aspects, course_adjustments, course_adjustment_students.    )datetime)OptionalAnyList)Session)AdjustmentAspectModelCourseAdjustmentModelCourseAdjustmentStudentModelc                 t    U c  g [        U S5      (       a  U R                  5       $ U (       a  [        U 5      $ S $ )N	isoformat)hasattrr   str)vs    ]C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\course_adjustment_class.py_serialize_dater      s4    yq+{{}3q6 D     rreturnc           
          U R                   U R                  U R                  U R                  U R                  [        U R                  5      [        U R                  5      [        U R                  5      S.$ )N)id	course_idadjustment_aspect_idother_aspect_textvalue
added_dateupdated_datedeleted_date)	r   r   r   r   r   r   r   r   r   )r   s    r   _adjustment_to_dictr      sW    dd[[ ! 6 600%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rg)CourseAdjustmentClass"   dbc                     Xl         g )Nr"   )selfr"   s     r   __init__CourseAdjustmentClass.__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)zRLista aspectos de ajuste activos (deleted_date is None), ordenados por sort_order.Nsuccessr   keylabel
sort_orderstatusdataerrorr/   messager0   )r"   queryr   filterr   is_order_byr-   allr   r+   r,   	Exceptionr   )r%   rowsr   es       r   get_aspects!CourseAdjustmentClass.get_aspects&   s    	F34-::>>tDE/::;	  $ " "  dd uu!"&'ll	 "   	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	U(       at  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R,                  OSU	S.5        GM     SUS.$ s  snf s  sn
f ! [.         a  nS[1        U5      / S.s SnA$ SnAff = f)	zoEstructura completa para el curso: cada aspecto con su fila de ajuste (value, other_aspect_text) y student_ids.Nr   r*   )aspect
adjustmentr   r   student_idsr)   r.   r1   r2   )r"   r4   r   r5   r   r6   r7   r-   r8   r	   r   r   getr   r
   
student_idcourse_adjustment_idappendr+   r,   r   r   r   r9   r   )r%   r   aspectsadjustmentsaadj_by_aspectresultaspadjrA   sr;   s               r   get_by_course_id&CourseAdjustmentClass.get_by_course_id>   s   )	F34-::>>tDE/::;	  34)33y@)66::4@   ALL133Q6MLF#''/  "&/K/V/V!W < Q QUXU[U[ [\"#"A !"   # !ff"ww!$&)nn	 ?B"5c":t*-SYY4BE)>)>4#.  , (881 M#&  	F%#a&"EE	Fs>   C%H/ 'H%=BH/ H*BH/ %
H/ /
I9III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'   SUS.$ s  snf ! [         a  nS[        U5      SS.s SnA$ SnAff = f)	z4Obtiene un course_adjustment por id con student_ids.r1   Registro no encontrado.Nr2   r   rA   r)   r.   )r"   r4   r	   r5   r   firstr   r
   rC   rD   r8   r9   r   )r%   r   rowr0   rM   r;   s         r   	get_by_idCourseAdjustmentClass.get_by_idk   s    	H34-00B67 
 ")6OY]^^&s+D 'C'N'NO4IIROP#A !#D (66#  	H%#a&$GG	Hs7   AC A$C  C
C C 
D)C=7D=Dr0   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R                  S5      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(       a  U=(       d    S
R                  5       =(       d    SUl        U=(       d    S
R                  5       =(       d    SUl        Xxl        SUl        U R                  R!                  5         U R                  R#                  U5        UR$                  n	Sn
O[        UUU=(       d    S
R                  5       =(       d    SU=(       d    S
R                  5       =(       d    S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                  R!                  5         SX[+        U5      S.$ ! [,         a2  nU R                  R/                  5         S[1        U5      S.s SnA$ SnAff = f)zYCrea o actualiza un ajuste por (course_id, adjustment_aspect_id). Sincroniza student_ids.r   r   Nr1   z0course_id y adjustment_aspect_id son requeridos.r/   r3   r   r   rA    zAjuste actualizado.)r   r   r   r   r   r   r   zAjuste creado.r)   r/   r3   r   r0   )rB   intr   nowr"   r4   r	   r5   r   r   rR   stripr   r   r   r   commitrefreshr   add_sync_studentsr   r9   rollbackr   )r%   r0   r   r   r   r   rA   r[   rS   response_idmsgr;   s               r   storeCourseAdjustmentClass.store   s*   2	:-I#'88,B#C  $8$@")6hiiII#&';#<  $)< =HHW%E((=17RK,,.C 34)33y@)>>BVV   ):)@b(G(G(I(QT%"[b//19T	#& #'  $!ff++')='8'>B&E&E&G&O4 ;B--/74"!$!% C  $!ff&9GGNN'CTghkTlmm 	:GG%#a&99	:s#   ,J IJ 
J>'J93J>9J>c                 ,    U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ 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;   a7  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)zWActualiza un course_adjustment por id. Opcional: other_aspect_text, value, student_ids.r1   rQ   rW   r   rX   Nr   rA   r)   zRegistro actualizado.rY   )r"   r4   r	   r5   r   rR   r\   r   r   r   r[   r   r]   r`   r^   r   r9   ra   r   )r%   r   r0   rS   r;   s        r   updateCourseAdjustmentClass.update   s:   	:''-- 56==>S>V>VZ\>\]cceC")6OPP"d*)-.A)B)Hb(O(O(Q(YUY%$!']0b779AT	'||~CGGNN$##B](;(ArB GGOOC '4KSU_rsv_wxx 	:GG%#a&99	:s%   AE C;E 
F!'FFF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)u5   Borrado lógico del course_adjustment (deleted_date).r1   rQ   rW   r)   zRegistro eliminado.)r/   r3   r   N)r"   r4   r	   r5   r   rR   r   r[   r   r   r]   r9   ra   r   )r%   r   rS   r;   s       r   deleteCourseAdjustmentClass.delete   s    
	:''-- 56==>S>V>VZ\>\]cceC")6OPP'||~C"//CGGNN'4IQSTT 	:GG%#a&99	:s%   AB& A
B& &
C"0'CC"C"rD   rA   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)z>Reemplaza los estudiantes asociados al ajuste por student_ids.F)synchronize_session)rD   rC   r   N)
r"   r4   r
   r5   rD   rj   r   r[   r_   rZ   )r%   rD   rA   r[   sids        r   r`   $CourseAdjustmentClass._sync_students   sy    23::(==AUU	

&U&
+llnCGGKK4%9s8  r   r$   )__name__
__module____qualname____firstlineno__r   r&   r   r<   rZ   rN   rT   dictrd   rg   rj   r   r`   __static_attributes__ r   r   r    r    "   s    7 FS F0+F# +F# +FZHC HC H*4:$ 4:3 4:l: :D :S :*: : :3 T#Y SW r   r    N)__doc__r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr   r	   r
   r   rt   r   r    rv   r   r   <module>r{      sC    g  & & " !
0 
T 
D Dr   