
    FXiH                     d    S SK J r   S SKJrJr  S SKJr  S SKJr  S rS\S\	4S jr
 " S	 S
5      rg)    )datetime)OptionalAny)Session)CollaborativeWorkModelc                 t    U c  g[        U S5      (       a  U R                  5       $ U (       a  [        U 5      $ S$ )z>Acepta datetime o str (p. ej. si en BD added_date es varchar).N	isoformat)hasattrr	   str)vs    ^C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\collaborative_work_class.py_serialize_dater      s4    yq+{{}3q6 D     rreturnc                 F   U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  [        U R                  5      [        U R                  5      [        U R                  5      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                       \ rS rSrS\4S jr  SS\\   S\\   S\4S jjr	S	\S\4S
 jr
S\S\4S jrS\S\4S jrS	\S\S\4S jrS	\S\4S jrSrg)CollaborativeWorkClass!   dbc                     Xl         g )Nr#   )selfr#   s     r   __init__CollaborativeWorkClass.__init__"   s    r   Nr   r   r   c                     U R                   R                  [        5      R                  [        R                  R                  S5      5      nUb(  US:w  a"  UR                  [        R                  U:H  5      nUb(  US:w  a"  UR                  [        R                  U:H  5      nUR                  5       nSU Vs/ s H  n[        U5      PM     snS.$ s  snf ! [         a  nS[        U5      / S.s SnA$ SnAff = f)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   getCollaborativeWorkClass.get%   s    	F45.;;??EF  $bHH3==JK$bHH3==JK557D'41P4a,q/41PQQ1P 	F%#a&"EE	Fs0   B6C 8CC C 
C:!C5/C:5C:r   c                      U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSSS.$ S[        U5      S.$ ! [         a  nS[        U5      SS.s SnA$ SnAff = f)zObtiene un registro por id.r/   Registro no encontrado.Nr0   r+   r,   )	r#   r2   r   r3   r   firstr   r6   r   r&   r   rowr9   s       r   	get_by_id 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4BBBc                 \    U R                   R                  [        5      R                  [        R                  U:H  [        R
                  R                  S5      5      R                  5       nU(       d  SSSS.$ S[        U5      S.$ ! [         a  nS[        U5      SS.s SnA$ SnAff = f)uW   Obtiene el registro por course_id. Si ya existe uno para ese curso → UPDATE en store.Nr/   r=   r0   r+   r,   )r#   r2   r   r3   r   r   r4   r>   r   r6   r   )r&   r   r@   r9   s       r   get_by_course_id'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$   A7B :B 
B+B& B+&B+r.   c                 \    [         R                  " 5       nUR                  S5      nU R                  R	                  [
        5      R                  [
        R                  U:H  [
        R                  R                  S5      5      R                  5       nU(       a  UR                  S5      Ul        UR                  S5      Ul        UR                  S5      Ul        UR                  S5      Ul        UR                  S5      Ul        UR                  S5      Ul        UR                  S	5      Ul        X$l        U R                  R'                  5         U R                  R)                  U5        S
SUR*                  [-        U5      S.$ [        UR                  S5      UUR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S	5      UUSS9nU R                  R/                  U5        U R                  R'                  5         U R                  R)                  U5        S
SUR*                  [-        U5      S.$ ! [0         a2  nU R                  R3                  5         S[5        U5      S.s SnA$ SnAff = f)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-   r1   r   r.   )r   r   r   r   r   r   r   r   r   r   r   zRegistro creado.r/   r-   r1   )r   nowr:   r#   r2   r   r3   r   r   r4   r>   r   r   r   r   r   r   r   r   commitrefreshr   r   addr6   rollbackr   )r&   r.   rI   r   r@   r9   s         r   store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+9'J& J+&J+c                 .    U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ S H  nXB;   d  M
  [        X4X$   5        M     [        R                  " 5       Ul	        U R                   R                  5         U R                   R                  U5        SSUR                  S.$ ! [         a2  nU R                   R                  5         S[        U5      S.s SnA$ SnAff = f)	z7Actualiza un registro por id; solo los campos enviados.r/   r=   rH   )r   r   r   r   r   r   r   r   r+   rG   )r-   r1   r   N)r#   r2   r   r3   r   r>   setattrr   rI   r   rJ   rK   r6   rM   r   )r&   r   r.   r@   keyr9   s         r   updateCollaborativeWorkClass.update   s    	:''-- 67>>?U?X?X\^?^_eegC")6OPPD;Cdi0D  (||~CGGNNGGOOC '4KSVSYSYZZ 	:GG%#a&99	:s+   AC C 'A0C 
D"'D	DDc                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ [        R                  " 5       Ul        [        R                  " 5       Ul	        U R                   R                  5         SSS.$ ! [         a2  nU R                   R                  5         S[        U5      S.s SnA$ SnAff = f)u$   Borrado lógico: setea deleted_date.r/   r=   rH   r+   zRegistro eliminado.N)r#   r2   r   r3   r   r>   r   rI   r   r   rJ   r6   rM   r   r?   s       r   delete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*8'C%C*%C*r%   )NN)__name__
__module____qualname____firstlineno__r   r'   r   intr   r:   rA   rD   dictrN   rS   rV   __static_attributes__ 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   r]   r   r!   r_   r   r   <module>rc      s6       " 8!* t ": :r   