
    'Xi                     r    d Z ddlmZ ddlmZmZmZ ddlmZ ddlm	Z	m
Z
 dZd Zde	d	efd
Z G d d      Zy)uU   Card 3: Registro de logros de aprendizaje por curso, estudiante y período (1, 2, 3).    )datetime)OptionalAnyList)Session)CourseLearningAchievementModelStudentModel)         c                 ^    | 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_learning_achievement_class.py_serialize_dater      s1    yq+{{}3q6 D     rowreturnc           
          | j                   | j                  | j                  | j                  | j                  | j
                  t        | j                        t        | j                        dS )N)id	course_id
student_id	period_idachievementscomments
created_at
updated_at)	r   r   r   r   r   r   r   r   r   )r   s    r   _row_to_dictr       sP    ff]]nn]]((LL%cnn5%cnn5	 	r   c                       e Zd ZdefdZddedee   defdZdedefd	Z	ded
e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)CourseLearningAchievementClassdbc                     || _         y N)r#   )selfr#   s     r   __init__z'CourseLearningAchievementClass.__init__"   s	    r   Nr   r   r   c                 L   	 | j                   j                  t              j                  t        j                  |k(        }|*|t
        v r"|j                  t        j                  |k(        }|j                  t        j                  j                         t        j                  j                               j                         }t        |D ch c]  }|j                   c}      }i }|r| j                   j                  t              j                  t        j                  j                  |            j                         D ]k  }t        |dd      xs ddz   t        |dd      xs dz   }	|	j!                         xs$ t        |dd      xs t#        |j                        ||j                  <   m g }
|D ]=  }t%        |      }|j'                  |j                  d      |d<   |
j)                  |       ? d|
d	S c c}w # t*        $ r}d
t#        |      g dcY d}~S d}~ww xY w)zILista logros del curso; opcionalmente filtrados por period_id (1, 2 o 3).Nnames  	lastnamesnamestudent_namesuccessstatusdataerrorr1   messager2   )r#   queryr   filterr   VALID_PERIODSr   order_byr   ascalllistr	   r   in_getattrstripr   r    getappend	Exception)r&   r   r   qrowsrstudent_idsr)   snresultdes                r   get_by_course_idz/CourseLearningAchievementClass.get_by_course_id%   s   	F<=DD.88IEA $m)CHH;EERS::.99==?.88<<> ce  d;;<KE|4;;LOO<O<OP[<\]aac UA GR06B#=KY[A\Ab`bcA"#'')"Twq&$/G"T3qtt9E!$$KU F ! O$)IIallB$?.!a ! (88  <  	F%#a&"EE	Fs1   CH G<!DH <H 	H#
HH#H#r   c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS dt        |      dS # t        $ r}dt        |      ddcY d}~S d}~ww xY w)z%Obtiene un registro de logros por id.r3   Registro no encontrado.Nr4   r/   r0   )	r#   r6   r   r7   r   firstr    rB   r   r&   r   r   rK   s       r   	get_by_idz(CourseLearningAchievementClass.get_by_id@   s    	H''-- >?FFGeGhGhlnGnouuwC")6OY]^^'c1BCC 	H%#a&$GG	Hs$   AA% A% %	B.B<BBr   c                 v   	 |t         vrddddS | j                  j                  t              j	                  t        j
                  |k(  t        j                  |k(  t        j                  |k(        j                         }|sdddS dt        |      dS # t        $ r}dt        |      ddcY d}~S d}~ww xY w)uB   Obtiene el registro único por (course_id, student_id, period_id).r3   period_id debe ser 1, 2 o 3.Nr4   r/   r0   )r8   r#   r6   r   r7   r   r   r   rO   r    rB   r   )r&   r   r   r   r   rK   s         r   get_by_course_student_periodz;CourseLearningAchievementClass.get_by_course_student_periodJ   s    	H-")6T^bcc<=2<<	I2==K2<<	I
   "+T::'c1BCC 	H%#a&$GG	Hs)   B A7B B 	B8B3-B83B8r2   c           	         	 t        |j                  d            }t        |j                  d            }t        |j                  d            }|t        vrddddS |j                  d      xs d	j                         xs d}|j                  d
      xs d	j                         xs d}| j                  j                  t              j                  t        j                  |k(  t        j                  |k(  t        j                  |k(        j                         }t        j                         }|rd||_        ||_        ||_        | j                  j#                          | j                  j%                  |       dd|j&                  t)        |      dS t        |||||||      }| j                  j+                  |       | j                  j#                          | j                  j%                  |       dd|j&                  t)        |      dS # t,        $ r3}	| j                  j/                          dt1        |	      ddcY d}	~	S d}	~	ww xY w)z8Crea o actualiza por (course_id, student_id, period_id).r   r   r   r3   rS   Nr4   r   r*   r   r/   Registro actualizado.r1   r5   r   r2   )r   r   r   r   r   r   r   zRegistro creado.)intr@   r8   r?   r#   r6   r   r7   r   r   r   rO   r   utcnowr   r   r   commitrefreshr   r    addrB   rollbackr   )
r&   r2   r   r   r   r   r   r   nowrK   s
             r   storez$CourseLearningAchievementClass.store^   s   )	HDHH[12ITXXl34JDHH[12I-")6T^bcc HH^4:AACKtL,299;CtH <=2<<	I2==K2<<	I
   //#C#/ '!$ $"+8OWZW]W]gstwgxyy0#%#)!C GGKKGGNNGGOOC '4Fcff^jkn^opp 	HGG%#a&$GG	Hs,   AH D8H A;H 	I(I
I
Ic                 x   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS d|v r |d   xs dj                         xs d|_        d|v r |d   xs dj                         xs d|_        t        j                         |_        | j                   j                          | j                   j                  |       dd	|t        |      d
S # t        $ r3}| j                   j!                          dt#        |      ddcY d}~S d}~ww xY w)z6Actualiza un registro por id (achievements, comments).r3   rN   Nr4   r   r*   r   r/   rV   rW   )r#   r6   r   r7   r   rO   r?   r   r   r   rY   r   rZ   r[   r    rB   r]   r   )r&   r   r2   r   rK   s        r   updatez%CourseLearningAchievementClass.update   s   	H''-- >?FFGeGhGhlnGnouuwC")6OY]^^%$($8$>B#E#E#G#O4 T! $Z 0 6B==?G4%__.CNGGNNGGOOC '4KSU_klo_pqq 	HGG%#a&$GG	Hs%   AC= B%C= =	D9(D4.D94D9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)zElimina un registro por id.r3   rN   )r1   r5   r/   zRegistro eliminado.N)r#   r6   r   r7   r   rO   deleterZ   rB   r]   r   rP   s       r   rc   z%CourseLearningAchievementClass.delete   s    		:''-- >?FFGeGhGhlnGnouuwC")6OPPGGNN3GGNN'4IJJ 	:GG%#a&99	:s$   AB 9B 	C'C CCr%   )__name__
__module____qualname__r   r'   rX   r   r   rL   rQ   rT   dictr_   ra   rc    r   r   r"   r"   !   s    7 F# F(3- FSV F6HC HC HHc Hs HWZ H_b H(+H$ +H3 +HZH HD HS H$: : :r   r"   N)__doc__r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr   r	   r8   r   rg   r    r"   rh   r   r   <module>rm      sC    [  & & " N !
4 
 
G: G:r   