
    '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)SupportOrganizationModelc                 ^    | y t        | d      r| j                         S | rt        |       S d S )N	isoformat)hasattrr	   str)vs    W/var/www/pie360backend.cl/public_html/app/backend/classes/support_organization_class.py_serialize_dater      s1    yq+{{}3q6 D     rreturnc                    | j                   | j                  | j                  | j                  | j                  | j
                  | j                  t        | j                        t        | j                        t        | j                        d
S )N)
id	school_id	course_id
subject_idhours_support_regular_classroomhours_support_outside_classroomspecialized_support_types
added_dateupdated_datedeleted_date)r   r   r   r   r   r   r   r   r   r   r   )r   s    r   _row_to_dictr      sg    dd[[[[ll+,+L+L+,+L+L%&%@%@%all3'7'7 r   c            	           e Zd ZdefdZ	 	 	 ddee   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)SupportOrganizationClassdbc                     || _         y )N)r    )selfr    s     r   __init__z!SupportOrganizationClass.__init__   s	    r   Nr   r   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(        }|'|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)zhLista registros activos (deleted_date is None). Filtros opcionales por school_id, course_id, subject_id.Nsuccessstatusdataerrorr(   messager)   )r    queryr   filterr   is_r   r   r   allr   	Exceptionr   )r"   r   r   r   qrowsr   es           r   getzSupportOrganizationClass.get"   s    	F670==AA$GH  $bHH5??9LM$bHH5??9LM%**:HH5@@JNO557D'41Pa,q/1PQQ1P 	F%#a&"EE	Fs0   CC9 C4/C9 4C9 9	DDDD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   r.   r   firstr   r1   r   r"   r   rowr4   s       r   	get_by_idz"SupportOrganizationClass.get_by_id9   s    	H''-- 89@@AYA\A\`bAbciikC")6OY]^^'c1BCC 	H%#a&$GG	Hs$   AA% A% %	B.B<BBc                 f   	 | j                   j                  t              j                  t        j                  |k(  t        j
                  j                  d            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)z8Obtiene la lista de registros activos para un course_id.Nr&   r'   r*   r+   )r    r-   r   r.   r   r   r/   r0   r   r1   r   )r"   r   r3   r   r4   s        r   get_by_course_idz)SupportOrganizationClass.get_by_course_idC   s    	F67,66)C,99==dC   (41Pa,q/1PQQ1P 	F%#a&"EE	Fs0   A0B 2B	B 	B 	B0B+%B0+B0r)   c                 X   	 t        j                         }t        |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 # t        $ r2}| j                  j                          dt        |      dcY d}~S d}~ww xY w)uN   Crea un registro en support_organizations. school_id del body o de la sesión.r   r   r   r   r   r   N)	r   r   r   r   r   r   r   r   r   r&   zRegistro creado.)r(   r,   r   r)   r*   r(   r,   )r   nowr   r5   r    addcommitrefreshr   r   r1   rollbackr   )r"   r)   r@   r:   r4   s        r   storezSupportOrganizationClass.storeR   s    	:,,.C*((;/((;/88L1049Z0[049Z0[*.((3N*O !
C GGKKGGNNGGOOC '4Fcff^jkn^opp 	:GG%#a&99	:s   C+C. .	D)7'D$D)$D)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*   r7   r?   )r   r   r   r   r   r   r&   zRegistro actualizado.)r(   r,   r   N)r    r-   r   r.   r   r8   setattrr   r@   r   rB   rC   r1   rD   r   )r"   r   r)   r:   keyr4   s         r   updatezSupportOrganizationClass.updatei   s    	:''-- 89@@AYA\A\`bAbciikC")6OPP 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*   r7   r?   r&   zRegistro eliminado.N)r    r-   r   r.   r   r8   r   r@   r   r   rB   r1   rD   r   r9   s       r   deletezSupportOrganizationClass.delete}   s    
	:''-- 89@@AYA\A\`bAbciikC")6OPP'||~C'||~CGGNN'4IJJ 	:GG%#a&99	:s%   AB' AB' '	C"0'CC"C")NNN)__name__
__module____qualname__r   r#   r   intr   r5   r;   r=   dictrE   rI   rK    r   r   r   r      s    7 
 $(#'$(	FC=F C=F SM	F
 
F.HC HC HF# F# F:$ :3 :.: :D :S :(: : :r   r   N)r   typingr   r   sqlalchemy.ormr   app.backend.db.modelsr   r   rP   r   r   rQ   r   r   <module>rU      s6       " :!,  k: k:r   