
    Si"                         S r SSKJr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\
S	\\   S
\4S jjrS\S\\   S
\\   4S jrS\\   S
\\   4S jr " S S5      rg)uU   Lógica de Plan de Apoyo Individual por curso: course_individual_supports y students.    )datetimedate)OptionalAnyList)Session)CourseIndividualSupportModel#CourseIndividualSupportStudentModelSupportAreaModelc                 t    U c  g [        U S5      (       a  U R                  5       $ U (       a  [        U 5      $ S $ )N	isoformat)hasattrr   str)vs    eC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\course_individual_support_class.py_serialize_dater      s4    yq+{{}3q6 D     Nrsupport_area_namereturnc                 .   U R                   U R                  U R                  UU R                  [	        U R
                  5      [	        U R                  5      [	        U R                  5      [	        U R                  5      [	        U R                  5      S.
nU$ )N)
id	course_idsupport_area_idr   horariofecha_iniciofecha_termino
added_dateupdated_datedeleted_date)
r   r   r   r   r   r   r   r   r   r    )r   r   ds      r   _support_to_dictr"      sm    dd[[,,.99'7(9%all3'7'7	A Hr   dbr   c                     Uc  g U R                  [        5      R                  [        R                  U:H  5      R	                  5       nU(       a  UR
                  $ S $ N)queryr   filterr   firstsupport_area)r#   r   rows      r   _get_support_area_namer+   %   sM    
((#
$
+
+,<,?,??,R
S
Y
Y
[C"3,,r   sc                 &   U b*  [        U [        5      (       a  U R                  5       (       d  g [        U [        5      (       a  U $  [        R
                  " U R                  5       S S S5      R                  5       $ ! [        [        4 a     g f = f)N
   z%Y-%m-%d)
isinstancer   stripr   r   strptime
ValueError	TypeError)r,   s    r   _parse_dater4   ,   sv    yZ3''		!T  3B<AACC	" s   5A= =BBc                       \ rS rSrS\4S jrSS\S\S\4S j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)CourseIndividualSupportClass7   r#   c                     Xl         g r%   r#   )selfr#   s     r   __init__%CourseIndividualSupportClass.__init__8   s    r   r   include_deletedr   c                     U R                   R                  [        5      R                  [        R                  U:H  5      nU(       d.  UR                  [        R
                  R                  S5      5      nUR                  [        R                  R                  5       5      R                  5       nU Vs/ s H  oUR                  c  M  UR                  PM     nn0 nU(       ax  U R                   R                  [        5      R                  [        R                  R                  U5      5      R                  5        H  nUR                  XxR                  '   M     / n	U H  n[!        XWR#                  UR                  5      S9n
U R                   R                  [$        R&                  5      R                  [$        R(                  UR                  :H  5      R                  5        Vs/ s H  nUS   PM
     snU
S'   U	R+                  U
5        M     SU	S.$ s  snf s  snf ! [,         a  nS[/        U5      / S.s SnA$ SnAff = f)	z?Lista apoyos individuales del curso (cada uno con student_ids).Nr   r   student_idssuccessstatusdataerrorrC   messagerD   )r#   r&   r	   r'   r   r    is_order_byr   descallr   r   r   in_r)   r"   getr
   
student_idcourse_individual_support_idappend	Exceptionr   )r:   r   r=   qrowsr   support_area_ids
name_by_idarearesultitemr,   es                r   get_by_course_id-CourseIndividualSupportClass.get_by_course_id;   s   	F:;BB,66)CA #HH9FFJJ4PQ:::EEJJLMQQSD;?a4aCTCT 1 1 14aJ GGMM*:;BBCSCVCVCZCZ[kClmqqsD*.*;*;Jww' tF'^^AL]L]=^_ "WW]]+N+Y+YZV?\\`a`d`ddeSU' aD']# d#  (88  b'  	F%#a&"EE	FsC   B3H! 5H	HDH! (H7H! 
H! !
I+H?9I?Ir   c                 D    U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSSS.$ [        U[        U R                   UR                  5      S9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)
z3Obtiene un apoyo individual por id con student_ids.rE   Registro no encontrado.NrF   r?   r   r@   rA   rB   )r#   r&   r	   r'   r   r(   r"   r+   r   r
   rN   rO   rK   rQ   r   )r:   r   r*   rD   r,   rY   s         r   	get_by_id&CourseIndividualSupportClass.get_by_idW   s   	H:;4772=> 
 ")6OY]^^#C;QRVRYRY[^[n[n;opD 'J'U'UV;XX\^^_#A !#D (66#  	H%#a&$GG	Hs7   AC< BC< C7,
C< 7C< <
DDDDrD   c                     UR                  S5      nUc  SSS.$ [        U5      nUR                  S5      nUb  [        U5      OSnUR                  S5      =(       d    SR                  5       =(       d    Sn[        UR                  S	5      5      n[        UR                  S
5      5      nUR                  S5      =(       d    / n[        R
                  " 5       n[        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
U R                  X5        U R                  R                  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)ziCrea un apoyo individual (course_id, support_area_id, horario, fecha_inicio, fecha_termino, student_ids).r   NrE   zcourse_id es requerido.rC   rG   r   r    r   r   r@   )r   r   r   r   r   r   r   r    rA   zApoyo individual creado.rC   rG   r   rD   )rM   intr0   r4   r   nowr	   r#   addcommitrefreshr   _sync_studentsr"   rQ   rollbackr   )r:   rD   r   r   r   r   r   r@   re   r*   response_idrY   s               r   store"CourseIndividualSupportClass.storel   s~    	:-I ")6OPPII"hh'89O6E6Qc/2W[Oxx	*0b779ATG&txx'?@L'(ABM((=17RK,,.C.# /)+ !	C GGKKGGNNGGOOC &&K9GGNN'4NVak{|  lA  B  B 	:GG%#a&99	:s#   F E&F 
F>'F93F>9F>c           
          U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ SU;   a  US   b  [        US   5      OSUl        SU;   a*  US   =(       d    SR                  5       =(       d    SUl	        SU;   a  [        US   5      Ul        S	U;   a  [        US	   5      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[)        U R                   UR                  5      S9S.$ ! [*         a2  nU R                   R-                  5         S[/        U5      S.s SnA$ SnAff = f)zsActualiza un apoyo individual por id. Opcional: support_area_id, horario, fecha_inicio, fecha_termino, student_ids.rE   r]   ra   r   Nr   rb   r   r   r@   rA   zRegistro actualizado.r?   rc   )r#   r&   r	   r'   r   r(   rd   r   r0   r   r4   r   r   r   re   r   rg   ri   rh   r"   r+   rQ   rj   r   )r:   r   rD   r*   rY   s        r   update#CourseIndividualSupportClass.update   s   	:''-- <=DDEaEdEdhjEjkqqsC")6OPP D(FJK\F]Fic$/@*A&Bos#D #I4";;=E%#.tN/C#D $&$/_0E$F!'||~CGGNN$##B](;(ArB GGOOC '4KSU_ops  H^  _c  _f  _f  hk  h{  h{  H|  `}  ~  ~ 	:GG%#a&99	:s%   AF D;F 
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).rE   r]   ra   rA   zRegistro eliminado.)rC   rG   r   N)r#   r&   r	   r'   r   r(   r   re   r    r   rg   rQ   rj   r   )r:   r   r*   rY   s       r   delete#CourseIndividualSupportClass.delete   s    
	:''-- <=DDEaEdEdhjEjkqqsC")6OPP'||~C"//CGGNN'4IQSTT 	:GG%#a&99	:s%   AB& A
B& &
C"0'CC"C"rO   r@   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)rO   rN   r   )
r#   r&   r
   r'   rO   rr   r   re   rf   rd   )r:   rO   r@   re   sids        r   ri   +CourseIndividualSupportClass._sync_students   sy    9:AA/LLPll	

&U&
+llnCGGKK;-Is8  r   r9   )F)__name__
__module____qualname____firstlineno__r   r;   rd   boolr   rZ   r^   dictrl   ro   rr   r   ri   __static_attributes__ r   r   r6   r6   7   s    7 F# F FQT F8HC HC H*":$ ":3 ":H: :D :S :2: : :3 TRUY [_ r   r6   r%   )__doc__r   r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr	   r
   r   r   r   r}   r"   rd   r+   r4   r6   r   r   r   <module>r      s    [ # & & " !4 RU bf  -w -# -8TW= -8C= Xd^ L Lr   