
    '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
mZ d Zde
defd	Z G d
 d      Zy)ut   Logic for c) Estrategias y procedimientos de evaluación: eval_diversity_types, course_eval_diversity, observations.    )datetime)OptionalAnyList)Session)EvalDiversityTypeModelCourseEvalDiversityModel#CourseEvalDiversityObservationModelc                 ^    | 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_eval_diversity_class.py_serialize_dater      s1    yq+{{}3q6 D     rreturnc           	          | j                   | j                  | j                  | j                  t	        | j
                        t	        | j                        t	        | j                        dS )N)id	course_ideval_diversity_type_idstrategies_text
added_dateupdated_datedeleted_date)r   r   r   r   r   r   r   r   )r   s    r   _eval_to_dictr      sP    dd[["#":":,,%all3'7'7 r   c                       e Zd Zdef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fd	Z
ded
e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)CourseEvalDiversityClassdbc                     || _         y )N)r    )selfr    s     r   __init__z!CourseEvalDiversityClass.__init__"   s	    r   r   c           	         	 | j                   j                  t              j                  t        j                  j                  d            j                  t        j                        j                         }d|D cg c]1  }|j                  |j                  |j                  |j                  d3 c}dS c c}w # t        $ r}dt        |      g dcY d}~S d}~ww xY w)zHList eval diversity types (deleted_date is None), ordered by sort_order.Nsuccessr   keylabel
sort_orderstatusdataerrorr+   messager,   )r    queryr   filterr   is_order_byr)   allr   r'   r(   	Exceptionr   )r"   rowsr   es       r   	get_typesz"CourseEvalDiversityClass.get_types%   s    	F45.;;??EF0;;<	  $ " 44q||\ 
  	F%#a&"EE	Fs0   A;B= =6B83B= 8B= =	CCCCr   c                 T   	 | j                   j                  t              j                  t        j                  j                  d            j                  t        j                        j                         }| j                   j                  t              j                  t        j                  |k(  t        j                  j                  d            j                         }|D ci c]  }|j                  | }}| j                   j                  t              j                  t        j                  |k(  t        j                  j                  d            j                         }|r|j                  nd}g }|D ]z  }	|j                  |	j                         }|j#                  |	j                   |	j$                  |	j&                  |	j                  d|rt)        |      nd|r|j*                  ndd       | d||dS c c}w # t,        $ r}dt/        |      g ddcY d}~S d}~ww xY w)zYFull structure for the course: each type with its row (strategies_text) and observations.Nr&   )typeevalr   r%   )r+   r,   observationsr-   )r+   r/   r,   r<   )r    r0   r   r1   r   r2   r3   r)   r4   r	   r   r   r
   firstr<   getr   appendr'   r(   r   r   r5   r   )
r"   r   
types_rowsevalsr7   eval_by_typeobs_rowr<   resultts
             r   get_by_course_idz)CourseEvalDiversityClass.get_by_course_id8   s   #	\45.;;??EF0;;<	  67,66)C,99==dC   BGGAA44a7GLGAB7AAYN7DDHHN   4;7//LF  $$QTT*#$44WXWcWcd01M!,t<=q'8'84  (VV% H&  	\%#a&"VZ[[	\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$Get one course_eval_diversity by id.r-   Registro no encontrado.Nr.   r%   r*   )	r    r0   r	   r1   r   r=   r   r5   r   r"   r   rowr7   s       r   	get_by_idz"CourseEvalDiversityClass.get_by_id_   s    
	H67033r9: 
 ")6OY]^^'s1CDD 	H%#a&$GG	Hs$   AA% A% %	B.B<BBc                 N   	 | j                   j                  t              j                  t        j                  |k(  t        j
                  j                  d            j                         }dd|r|j                  ndidS # t        $ r}dt        |      ddcY d}~S d}~ww xY w)z,Get observations for the course (section c).Nr%   r<   r*   r-   r.   )r    r0   r
   r1   r   r   r2   r=   r<   r5   r   )r"   r   rJ   r7   s       r   get_observationsz)CourseEvalDiversityClass.get_observationsm   s    	HAB7AAYN7DDHHN   (.VY#BRBR_c1dee 	H%#a&$GG	Hs   A?B 	B$BB$B$r<   c           	      B   	 | j                   j                  t              j                  t        j                  |k(        j                         }t        j                         }||xs dj                         nd}|r|xs d|_	        ||_
        d|_        n-| j                   j                  t        ||xs d||d             | j                   j                          dddS # t        $ r2}| j                   j                          dt!        |      dcY d}~S d}~ww xY w)zECreate or update observations for the course (one row per course_id).N )r   r<   r   r   r   r%   zObservaciones guardadas.r+   r/   r-   )r    r0   r
   r1   r   r=   r   nowstripr<   r   r   addcommitr5   rollbackr   )r"   r   r<   rJ   rQ   textr7   s          r   set_observationsz)CourseEvalDiversityClass.set_observations|   s    	:AB;EERS 
 ,,.C3?3KL&B--/QSD#'<4 #& #' ?'!%"!$!%  GGNN'4NOO 	:GG%#a&99	:s   C C# #	D,'DDDr,   c                 4   	 |j                  d      }|j                  d      }||dddS t        |      }t        |      }|j                  d      xs dj                         xs d}t        j                         }| j
                  j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|rY||_        ||_        d|_        | j
                  j                          | j
                  j!                  |       |j"                  }d	}not        |||||d
      }| j
                  j%                  |       | j
                  j                          | j
                  j!                  |       |j"                  }d}d|v r!| j'                  ||j                  d             d||t)        |      dS # t*        $ r2}	| j
                  j-                          dt/        |	      dcY d}	~	S d}	~	ww xY w)zmCreate or update one eval diversity row by (course_id, eval_diversity_type_id). Optionally save observations.r   r   Nr-   z2course_id y eval_diversity_type_id son requeridos.rP   r   rO   Registro actualizado.)r   r   r   r   r   r   zRegistro creado.r<   r%   r+   r/   r   r,   )r>   intrR   r   rQ   r    r0   r	   r1   r   r   r=   r   r   r   rT   refreshr   rS   rW   r   r5   rU   r   )
r"   r,   r   r   r   rQ   rJ   response_idmsgr7   s
             r   storezCourseEvalDiversityClass.store   s   .	:-I%)XX.F%G" $:$B")6jkkII%()?%@"#xx(9:@bGGIQTO,,.C 67,66)C,CCG]]   &5##& #'  $!ff-.'+A$3"!$!% C  $!ff(%%%i.1IJ'C{TabeTfgg 	:GG%#a&99	:s#   *G F.G 	H%'HHHc                 ,   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS d|v r |d   xs dj                         xs d|_        t        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)
zCUpdate one course_eval_diversity by id (optional: strategies_text).r-   rH   rP   r   rO   Nr%   rY   rZ   )r    r0   r	   r1   r   r=   rR   r   r   rQ   r   rT   r\   r   r5   rU   r   )r"   r   r,   rJ   r7   s        r   updatezCourseEvalDiversityClass.update   s    	:''-- 89@@AYA\A\`bAbciikC")6OPP D('+,='>'D"&K&K&M&UQU#'||~CGGNNGGOOC '4KSU_lmp_qrr 	:GG%#a&99	:s%   AC BC 	D!'DDD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)zSoft delete (deleted_date).r-   rH   rP   r%   zRegistro eliminado.)r+   r/   r   N)r    r0   r	   r1   r   r=   r   rQ   r   r   rT   r5   rU   r   rI   s       r   deletezCourseEvalDiversityClass.delete   s    
	:''-- 89@@AYA\A\`bAbciikC")6OPP'||~C"//CGGNN'4IQSTT 	:GG%#a&99	:s%   AB  A	B   	C)'CCCN)__name__
__module____qualname__r   r#   r   r8   r[   rF   rK   rM   r   r   rW   dictr_   ra   rc    r   r   r   r   !   s    7 F3 F&%\# %\# %\NHC HC HH# H# H:# :Xc] :s :80:$ 0:3 0:d: :D :S : : : :r   r   N)__doc__r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr   r	   r
   r   rg   r   r   rh   r   r   <module>rm      sC    z  & & " !	- 	$ 	E: E:r   