
    Si0                         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mZ ddlmZmZ d Zdee   d	ee   fd
Zddedee   d	efdZ G d d      Zy)uV   Card 2: Registro de apoyos por curso y área (objetivos, estudiantes, intervenciones).    )datetimedate)OptionalAnyList)Session)CourseRecordSupportModelCourseRecordSupportStudentModel$CourseRecordSupportInterventionModelSupportAreaModel)#map_professional_id_to_display_nameprofessional_display_namec                 ^    | y t        | d      r| j                         S | rt        |       S d S )N	isoformat)hasattrr   str)vs    X/var/www/pie360backend.cl/public_html/app/backend/classes/course_record_support_class.py_serialize_dater      s1    yq+{{}3q6 D     sreturnc                    |  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_dater       sn    yZ3'	!T  3B<AACC	" s   4A, ,A>=A>Nrowprofessional_namec                 J   | j                   | j                  | j                  t        | j                        | j
                  t        | j
                        nd | j                  | j                  || j                  t        | j                        t        | j                        dS )N)id	course_idsupport_area_idr   pedagogicalHoursplaceprofessionalIdprofessionalNameactivitiesDescription
created_at
updated_at)r$   r%   r&   r   r   pedagogical_hoursfloatr(   professional_idactivities_descriptionr,   r-   )r!   r"   s     r   _intervention_to_dictr2   "   s    ff]]..)<?<Q<Q<]E#"7"78cg---!$!;!;%cnn5%cnn5 r   c                       e Zd Z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fdZd
ededefdZd
edefdZy)CourseRecordSupportClassdbc                     || _         y N)r5   )selfr5   s     r   __init__z!CourseRecordSupportClass.__init__3   s	    r   r%   r   c           
         	 | j                   j                  t              j                  t        j                  j                               j                         }| j                   j                  t              j                  t        j                  |k(        j                         }|D ci c]  }|j                  | }}g }|D ]  }|j                  |j                        }|r|j                  nd}	|r|j                  nd}
g }|
rg| j                   j                  t        j                        j                  t        j                   |
k(        j                         D cg c]  }|d   	 }}| j                   j                  t"              j                  t"        j                  |k(  t"        j                  |j                  k(        j                  t"        j$                  j'                         t"        j                  j'                               j                         }|D cg c]  }|j(                  |j(                   }}|rt+        | j                   |      ni }|D cg c](  }t-        ||j                  |j(                              * }}|j/                  |j                  |j                  xs d|	||d        d|dS c c}w c c}w c c}w c c}w # t0        $ r}dt3        |      g d	cY d}~S d}~ww xY w)
uZ   Lista por curso: todas las áreas con su registro (objetivos, student_ids, interventions).Nr   r"    )r&   support_arealearning_objectivesstudent_idsinterventionssuccessstatusdataerrorrC   messagerD   )r5   queryr   order_byr=   ascallr	   filterr%   r&   getr$   r>   r
   
student_idcourse_record_support_idr   r   descr0   r   r2   append	Exceptionr   )r8   r%   areasrecordsrrecord_by_arearesultarearecr>   	record_idr?   r   interventions_rowsprofessional_ids
prof_namesr@   es                     r   get_by_course_idz)CourseRecordSupportClass.get_by_course_id6   s   -	FGGMM"23<<=M=Z=Z=^=^=`aeegE670::iGH 
 =DDqa//2DNDF !$((1ADc&=&=$#&)CFFt	  "&/N/Y/Y!Z ? X X\e ef	# !#K # GGMM"FGV<FF)S<LLPTPWPWW XBGGLLNPtPwPwP|P|P~SU # @R#s!UVUfUfUrA$5$5#s #s_o@JZ[uw
 0! *!z~~aN_N_?`a! ! '+ww$($5$5$;+>#.%2 7!D (88I E# $t!  	F%#a&"EE	Fs\   B)K +K
?B"K !K-B7K $K6K K $-K8K 
K 	L 'K;5L ;L rD   c           	         	 t        |j                  d            }t        |j                  d            }|j                  d      xs dj                         xs d}|j                  d      xs g }| j                  j	                  t
              j                  t
        j                  |k(  t
        j                  |k(        j                         }|rG||_
        t        j                         |_        | j                  j                          |j                  }nut        |||t        j                         t        j                               }| j                  j!                  |       | j                  j                          |j                  }| j                  j	                  t"              j                  t"        j$                  |k(        j'                  d	       |D ]G  }|| j                  j!                  t#        |t        |      t        j                         
             I | j                  j)                          dd|d|idS # t*        $ r3}	| j                  j-                          dt/        |	      ddcY d}	~	S d}	~	ww xY w)zLCrea o actualiza course_record_support (objetivos) y sincroniza student_ids.r%   r&   r>   r<   Nr?   )r%   r&   r>   r,   r-   F)synchronize_session)rO   rN   r,   rA   zDatos guardados.r$   rC   rG   r$   rD   rE   rF   )intrM   r   r5   rH   r	   rL   r%   r&   firstr>   r   utcnowr-   flushr$   addr
   rO   deletecommitrR   rollbackr   )
r8   rD   r%   r&   r>   r?   rY   rZ   sidr^   s
             r   save_recordz$CourseRecordSupportClass.save_recordg   s    .	HDHH[12I!$((+<"=>O#'88,A#B#Hb"O"O"Q"YUY((=17RK 67,66)C,<<O   *='!)!2FF	.'$3(;'0'0 C FF	GGMM9:AA/HHIUff/" ;;-6"3x'0  GGNN'4Fibfhqarss 	HGG%#a&$GG	Hs   I
I 	J	(J>J	J	r&   c           	         	 | j                   j                  t              j                  t        j                  |k(  t        j
                  |k(        j                  t        j                  j                         t        j                  j                               j                         }|D cg c]  }|j                  |j                   }}|rt        | j                   |      ni }|D cg c](  }t        ||j                  |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)u'   Lista intervenciones por curso y área.Nr;   rA   rB   rE   rF   )r5   rH   r   rL   r%   r&   rI   r   rP   r$   rK   r0   r   r2   rM   rR   r   )	r8   r%   r&   rowsrU   r\   r]   rD   r^   s	            r   get_interventionsz*CourseRecordSupportClass.get_interventions   s   	FBC8BBiO8HHO[ >CCHHJLpLsLsLxLxLz{  <@aa1CTCTC` 1 1aa[k<TWWFVWqsJkopfg)!z~~aN_N_?`apDp'66  bp 	F%#a&"EE	FsB   B+D+ -D!?D! D+ --D&D+ !
D+ +	E4EEEr$   c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS d}|j                  r)t        | j                   t        |j                              }t        ||      }d|dS # t        $ r}dt        |      ddcY d}~S d}~ww xY w)u!   Obtiene una intervención por id.rE      Intervención no encontrada.NrF   r;   rA   rB   )r5   rH   r   rL   r$   rd   r0   r   rc   r2   rR   r   )r8   r$   r!   	prof_namerD   r^   s         r   get_intervention_by_idz/CourseRecordSupportClass.get_intervention_by_id   s    
	H''-- DELLMqMtMtxzMz{  B  B  DC")6T^bccI""5dggs3CVCV?WX	(	JD'66 	H%#a&$GG	Hs%   AB  AB   	C)B=7C=Cc                     	 t        |j                  d            }t        |j                  d            }t        |j                  d            }|sddddS |j                  d      }|t        |      }|j                  d	      xs d
j	                         xs d}|j                  d      }|t        |      nd}|j                  d      xs d
j	                         xs d}t        |||||||t        j                         t        j                         	      }	| j                  j                  |	       | j                  j                          | j                  j                  |	       d}
|	j                  r)t        | j                  t        |	j                              }
t        |	|
      }dd|	j                  |dS # t         $ r3}| j                  j#                          dt%        |      ddcY d}~S d}~ww xY w)u(   Crea una intervención (Ingresar apoyo).r%   r&   r   rE   zIndique la fecha.NrF   r.   r(   r<   r0   r1   )	r%   r&   r   r.   r(   r0   r1   r,   r-   r;   rA   zApoyo registrado.rb   )rc   rM   r    r/   r   r   r   re   r5   rg   ri   refreshr0   r   r2   r$   rR   rj   r   )r8   rD   r%   r&   dtr.   r(   r0   r1   r!   rr   outr^   s                r   store_interventionz+CourseRecordSupportClass.store_intervention   s   #	HDHH[12I!$((+<"=>OTXXf-.B")6ISWXX $)< = ,$)*;$<!XXg&,"335=E"hh'89O6E6Qc/2W[O&*hh/G&H&NB%U%U%W%_[_"6# /"3 /'=#??,#??,
C GGKKGGNNGGOOC I""5dggs3CVCV?WX	'yIC'4Gsvv_bcc 	HGG%#a&$GG	Hs%   AG E(G 	G=
(G82G=8G=c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS d|v r|d   rt        |d         }|r||_        d|v r|d   t        |d         nd|_	        d|v r |d   xs dj                         xs d|_        d	|v r|d	   t        |d	         nd|_        d
|v r |d
   xs dj                         xs d|_        t        j                          |_        | j                   j%                          | j                   j'                  |       d}|j                  r)t)        | j                   t        |j                              }t+        ||      }dd||dS # t,        $ r3}| j                   j/                          dt1        |      ddcY d}~S d}~ww xY w)u#   Actualiza una intervención por id.rE   rq   NrF   r   r.   r(   r<   r0   r1   r;   rA   u   Intervención actualizada.rb   )r5   rH   r   rL   r$   rd   r    r   r/   r.   r   r(   rc   r0   r1   r   re   r-   ri   ru   r   r2   rR   rj   r   )r8   r$   rD   r!   rv   rr   rw   r^   s           r   update_interventionz,CourseRecordSupportClass.update_intervention   s   	H''-- DELLMqMtMtxzMz{  B  B  DC")6T^bcc~$v, f.!CH"d*LPQdLeLqd3F.G(Hw{%$!']0b779AT	 D(FJK\F]Fic$/@*A&Bos#'4/.23K.L.RPR-Y-Y-[-c_c*%__.CNGGNNGGOOC I""5dggs3CVCV?WX	'yIC'4PXZdghh 	HGG%#a&$GG	Hs%   AF D<F 	G(GGGc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS | 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!   Elimina una intervención por id.rE   rq   )rC   rG   rA   u   Intervención eliminada.N)r5   rH   r   rL   r$   rd   rh   ri   rR   rj   r   )r8   r$   r!   r^   s       r   delete_interventionz,CourseRecordSupportClass.delete_intervention   s    		:''-- DELLMqMtMtxzMz{  B  B  DC")6TUUGGNN3GGNN'4NOO 	:GG%#a&99	:s$   AB 9B 	C'C CCN)__name__
__module____qualname__r   r9   rc   r   r_   dictrl   ro   rs   rx   rz   r|    r   r   r4   r4   2   s    7 /F# /F# /Fb0H 0H 0HdF3 F F F&H H H%Ht %H %HNHc H H# H<:c :c :r   r4   r7   )__doc__r   r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr	   r
   r   r   &app.backend.utils.professional_displayr   r   r   r   r    r   r2   r4   r   r   r   <module>r      ss    \ # & & "  r!8C= Xd^ C X`adXe qu  X: X:r   