
    Ni%                         d Z ddlmZmZ ddlmZmZmZ ddlmZ ddl	m
Z
mZmZ d Zdde
d	ee   d
efdZdedee   d
ee   fdZdedee   d
ee   fdZdee   d
ee   fdZ G d d      Zy)uU   Lógica de Plan de Apoyo Individual por curso: course_individual_supports y students.    )datetimedate)OptionalAnyList)Session)CourseIndividualSupportModel#CourseIndividualSupportStudentModelSupportAreaModelc                 ^    | y t        | d      r| j                         S | rt        |       S d S )N	isoformat)hasattrr   str)vs    \/var/www/pie360backend.cl/public_html/app/backend/classes/course_individual_support_class.py_serialize_dater      s1    yq+{{}3q6 D     Nrsupport_area_namereturnc                 D   | j                   | j                  | j                  || j                  t	        | j
                        t	        | j                        | j                  t	        | j                        t	        | j                        t	        | j                        d}|S )N)id	course_idsupport_area_idr   horariofecha_iniciofecha_terminoobservations
added_dateupdated_datedeleted_date)r   r   r   r   r   r   r   r   r   r    r!   )r   r   ds      r   _support_to_dictr#      st    dd[[,,.99'7(9%all3'7'7	A Hr   dbr   c                     |y | j                  t              j                  t        j                  |k(        j	                         }|r|j
                  S d S N)queryr   filterr   firstsupport_area)r$   r   rows      r   _get_support_area_namer,   &   sM    
((#
$
+
+,<,?,??,R
S
Y
Y
[C"3,,r   c                     |y| j                  t        j                        j                  t        j                  |k(        j	                         yy)u:   None es válido; si hay id, debe existir en support_areas.Nu>   El área de apoyo (support_area_id) no existe en el catálogo.)r'   r   r   r(   r)   )r$   r   s     r   _validate_support_area_idr.   -   sG    	xx ##$++,<,?,??,RSYY[cOr   sc                    |  t        | t              r| j                         sy t        | t              r| S 	 t	        j
                  | j                         d d d      j                         S # t        t        f$ r Y y w xY w)N
   z%Y-%m-%d)
isinstancer   stripr   r   strptime
ValueError	TypeError)r/   s    r   _parse_dater7   6   sn    yZ3'	!T  3B<AACC	" s   4A, ,A>=A>c                       e Zd ZdefdZddededefdZdedefdZ	d	e
defd
Zded	e
defdZdedefdZdedee   ddfdZy)CourseIndividualSupportClassr$   c                     || _         y r&   )r$   )selfr$   s     r   __init__z%CourseIndividualSupportClass.__init__B   s	    r   r   include_deletedr   c                 l   	 | j                   j                  t              j                  t        j                  |k(        }|s.|j                  t        j
                  j                  d            }|j                  t        j                  j                               j                         }|D cg c]  }|j                  |j                   }}i }|rw| j                   j                  t              j                  t        j                  j                  |            j                         D ]  }|j                  ||j                  <    g }	|D ]  }t!        ||j#                  |j                              }
| j                   j                  t$        j&                        j                  t$        j(                  |j                  k(        j                         D cg c]  }|d   	 c}|
d<   |	j+                  |
        d|	dS c c}w c c}w # t,        $ r}dt/        |      g dcY d}~S d}~ww xY w)	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_idz-CourseIndividualSupportClass.get_by_course_idE   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;?aa1CTCTC` 1 1aaJ GGMM*:;BBCSCVCVCZCZ[kClmqqs <D*.*;*;Jtww'<F $'Z^^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   B.H 0HHDH H)H 
H 	H3H.(H3.H3r   c                 8   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS t        |t        | j                   |j                              }| j                   j                  t        j                        j                  t        j                  |k(        j                         D cg c]  }|d   	 c}|d<   d|d	S c c}w # t        $ r}dt        |      ddcY d}~S d}~ww xY w)
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_idz&CourseIndividualSupportClass.get_by_ida   s    	H:;4772=> 
 ")6OY]^^#C;QRVRYRY[^[n[n;opD 'J'U'UV;XX\^^_	# !#D (66#  	H%#a&$GG	Hs7   AC7 BC7 C2'
C7 2C7 7	D DDDrD   c                    	 |j                  d      }|dddS t        |      }|j                  d      }|t        |      nd}t        | j                  |      }|rd|dS |j                  d      xs dj	                         xs d}t        |j                  d	            }t        |j                  d
            }|j                  d      xs dj	                         xs d}|j                  d      xs g }	t        j                         }
t        |||||||
|
d	      }| j                  j                  |       | j                  j                          | j                  j                  |       |j                  }| j                  ||	       | j                  j                          dd|t        |      dS # t        $ r2}| j                  j!                          dt#        |      dcY d}~S d}~ww xY w)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   r    r!   rA   zApoyo individual creado.rC   rG   r   rD   )rM   intr.   r$   r3   r7   r   nowr	   addcommitrefreshr   _sync_studentsr#   rQ   rollbackr   )r;   rD   r   r   _errr   r   r   r   r@   rc   r+   response_idrY   s                 r   storez"CourseIndividualSupportClass.storev   s   %	:-I ")6OPPII"hh'89O6E6Qc/2W[O,TWWoFD")d;;xx	*0b779ATG&txx'?@L'(ABM HH^4:AACKtL((=17RK,,.C.# /)+) !
C GGKKGGNNGGOOC &&K[9GGNN'4NVak{|  lA  B  B 	:GG%#a&99	:s*   F9 AF9 "EF9 9	G4'G/)G4/G4c           
         	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS d|v r9|d   t        |d         nd}t        | j                   |      }|rd|dS ||_        d|v r |d   xs dj                         xs d|_
        d|v rt        |d         |_        d	|v rt        |d	         |_        d
|v r,|j                  d
      xs dj                         xs d|_        t!        j"                         |_        | j                   j'                          d|v r3| j)                  ||d   xs g        | j                   j'                          | j                   j+                  |       dd|t-        |t/        | j                   |j                              dS # t0        $ r2}| j                   j3                          dt5        |      dcY d}~S d}~ww xY w)zsActualiza un apoyo individual por id. Opcional: support_area_id, horario, fecha_inicio, fecha_termino, student_ids.rE   r\   r_   r   Nr   r`   r   r   r   r@   rA   zRegistro actualizado.r?   ra   )r$   r'   r	   r(   r   r)   rb   r.   r   r3   r   r7   r   r   rM   r   r   rc   r    re   rg   rf   r#   r,   rQ   rh   r   )r;   r   rD   r+   _saidri   rY   s          r   updatez#CourseIndividualSupportClass.update   s   	:''-- <=DDEaEdEdhjEjkqqsC")6OPP D(8<=N8O8[D!234ae0%@&-$??&+#D #I4";;=E%#.tN/C#D $&$/_0E$F!%$(HH^$<$B#I#I#K#St '||~CGGNN$##B](;(ArB GGOOC '4KSU_ops  H^  _c  _f  _f  hk  h{  h{  H|  `}  ~  ~ 	:GG%#a&99	:s+   AG
 5G
 D=G
 
	H'H :H Hc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS t        j                         |_        |j                  |_	        | j                   j                          dd|dS # t        $ r2}| j                   j                          dt        |      dcY d}~S d}~ww xY w)u   Borrado lógico (deleted_date).rE   r\   r_   rA   zRegistro eliminado.)rC   rG   r   N)r$   r'   r	   r(   r   r)   r   rc   r!   r    re   rQ   rh   r   )r;   r   r+   rY   s       r   deletez#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)'CCCrO   r@   Nc           	      >   | j                   j                  t              j                  t        j                  |k(        j                  d       t        j                         }|D ]5  }|s| j                   j                  t        |t        |      |             7 y )NF)synchronize_session)rO   rN   r   )
r$   r'   r
   r(   rO   rp   r   rc   rd   rb   )r;   rO   r@   rc   sids        r   rg   z+CourseIndividualSupportClass._sync_students   s~    9:AA/LLPll	

&U&
+lln 	CGGKK;-Is8 	r   )F)__name__
__module____qualname__r   r<   rb   boolr   rZ   r]   dictrk   rn   rp   r   rg    r   r   r9   r9   A   s    7 F# F FQT F8HC HC H*':$ ':3 ':R: :D :S :>: : :3 TRUY [_ r   r9   r&   )__doc__r   r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr	   r
   r   r   r   rx   r#   rb   r,   r.   r7   r9   ry   r   r   <module>r~      s    [ # & & " !4 RU bf "-w -# -8TW= -' HSM hWZm 8C= Xd^ W Wr   