
    'Xi                     b    d dl m Z  d dlmZmZ d dlmZ d dlmZ d Zdede	fdZ
 G d	 d
      Zy)    )datetime)OptionalAny)Session)CollaborativeWorkModelc                 ^    | yt        | d      r| j                         S | rt        |       S dS )z>Acepta datetime o str (p. ej. si en BD added_date es varchar).N	isoformat)hasattrr	   str)vs    U/var/www/pie360backend.cl/public_html/app/backend/classes/collaborative_work_class.py_serialize_dater      s1    yq+{{}3q6 D     rreturnc                 F   | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  t        | j                        t        | j                        t        | j                        dS )N)id	school_id	course_idplanning_collab_co_teachingplanning_collab_assistantsplanning_collab_studentsplanning_collab_familyplanning_collab_communityplanning_observations
added_dateupdated_datedeleted_date)r   r   r   r   r   r   r   r   r   r   r   r   r   )r   s    r   _row_to_dictr      s{    dd[[[['('D'D&'&B&B$%$>$>"#":":%&%@%@!"!8!8%all3'7'7 r   c                       e Zd ZdefdZ	 	 ddee   dee   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defdZdedefdZy)CollaborativeWorkClassdbc                     || _         y )N)r"   )selfr"   s     r   __init__zCollaborativeWorkClass.__init__"   s	    r   Nr   r   r   c                    	 | j                   j                  t              j                  t        j                  j                  d            }|'|dk7  r"|j                  t        j                  |k(        }|'|dk7  r"|j                  t        j                  |k(        }|j                         }d|D cg c]  }t        |       c}dS c c}w # t        $ r}dt        |      g dcY d}~S d}~ww xY w)zvLista registros activos (deleted_date is None). Filtros opcionales por school_id y course_id (-1 o None = no filtrar).Nsuccessstatusdataerrorr*   messager+   )r"   queryr   filterr   is_r   r   allr   	Exceptionr   )r$   r   r   qrowsr   es          r   getzCollaborativeWorkClass.get%   s    	F45.;;??EF  $bHH3==JK$bHH3==JK557D'41Pa,q/1PQQ1P 	F%#a&"EE	Fs0   B2C 4CC C 	C2C-'C2-C2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 por id.r,   Registro no encontrado.Nr-   r(   r)   )	r"   r/   r   r0   r   firstr   r3   r   r$   r   rowr6   s       r   	get_by_idz CollaborativeWorkClass.get_by_id9   s    	H''-- 67>>?U?X?X\^?^_eegC")6OY]^^'c1BCC 	H%#a&$GG	Hs$   AA% A% %	B.B<BBc                 P   	 | j                   j                  t              j                  t        j                  |k(  t        j
                  j                  d            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)uW   Obtiene el registro por course_id. Si ya existe uno para ese curso → UPDATE en store.Nr,   r9   r-   r(   r)   )r"   r/   r   r0   r   r   r1   r:   r   r3   r   )r$   r   r<   r6   s       r   get_by_course_idz'CollaborativeWorkClass.get_by_course_idC   s    	H45*44	A*77;;DA   ")6OY]^^'c1BCC 	H%#a&$GG	Hs$   A2B 5B 	B%B B% B%r+   c                 V   	 t        j                         }|j                  d      }| j                  j	                  t
              j                  t
        j                  |k(  t
        j                  j                  d            j                         }|r|j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d	      |_        ||_        | j                  j'                          | j                  j)                  |       d
d|j*                  t-        |      dS t        |j                  d      ||j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      ||d      }| j                  j/                  |       | j                  j'                          | j                  j)                  |       d
d|j*                  t-        |      dS # t0        $ r2}| j                  j3                          dt5        |      dcY d}~S d}~ww xY w)u[   Si ya existe un registro activo con el mismo course_id → UPDATE; si no existe → INSERT.r   Nr   r   r   r   r   r   r   r(   Registro actualizado.)r*   r.   r   r+   )r   r   r   r   r   r   r   r   r   r   r   zRegistro creado.r,   r*   r.   )r   nowr7   r"   r/   r   r0   r   r   r1   r:   r   r   r   r   r   r   r   r   commitrefreshr   r   addr3   rollbackr   )r$   r+   rC   r   r<   r6   s         r   storezCollaborativeWorkClass.storeT   s   *	:,,.C-I45*44	A*77;;DA    $ 526((;X2Y/15:V1W./3xx8R/S,-1XX6N-O*049T0U-,0HH5L,M)#&  $"+8OWZW]W]gstwgxyy(((;/#,0HH5R,S+/884P+Q)-2L)M'+xx0H'I*.((3N*O&*hh/F&G !C GGKKGGNNGGOOC '4Fcff^jkn^opp 	:GG%#a&99	:s%   FI- C(I- -	J(6'J#J(#J(c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS dD ]  }||v st        ||||           t        j                         |_	        | j                   j                          | j                   j                  |       dd|j                  dS # t        $ r2}| j                   j                          dt        |      dcY d}~S d}~ww xY w)	z7Actualiza un registro por id; solo los campos enviados.r,   r9   rB   )r   r   r   r   r   r   r   r   r(   rA   )r*   r.   r   N)r"   r/   r   r0   r   r:   setattrr   rC   r   rD   rE   r3   rG   r   )r$   r   r+   r<   keyr6   s         r   updatezCollaborativeWorkClass.update   s    	:''-- 67>>?U?X?X\^?^_eegC")6OPPD 1$;Cd3i01  (||~CGGNNGGOOC '4KSVSYSYZZ 	:GG%#a&99	:s+   AC 	C  A/C 	D'D DDc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS t        j                         |_        t        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: setea deleted_date.r,   r9   rB   r(   zRegistro eliminado.N)r"   r/   r   r0   r   r:   r   rC   r   r   rD   r3   rG   r   r;   s       r   deletezCollaborativeWorkClass.delete   s    
	:''-- 67>>?U?X?X\^?^_eegC")6OPP'||~C'||~CGGNN'4IJJ 	:GG%#a&99	:s%   AB' AB' '	C"0'CC"C")NN)__name__
__module____qualname__r   r%   r   intr   r7   r=   r?   dictrH   rL   rN    r   r   r!   r!   !   s    7 
 $(#'FC=F C=F 
	F(HC HC HH# H# H",:$ ,:3 ,:\: :D :S :$: : :r   r!   N)r   typingr   r   sqlalchemy.ormr   app.backend.db.modelsr   r   rS   r   r!   rT   r   r   <module>rX      s6       " 8!* t ": :r   