
    HŴi                     T    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	  G d d      Z
y)	uT   CRUD para tabla students_professionals (relación estudiante-profesional con horas).    )datetime)OptionalAnyList)Session)StudentProfessionalModelc            	           e Zd ZdefdZ	 	 	 ddee   dee   dedefdZ	de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dededefdZy)StudentProfessionalClassdbc                     || _         y )N)r   )selfr   s     W/var/www/pie360backend.cl/public_html/app/backend/classes/student_professional_class.py__init__z!StudentProfessionalClass.__init__   s	        N
student_idprofessional_idinclude_deletedreturnc                    	 | j                   j                  t              }|"|j                  t        j                  |k(        }|"|j                  t        j
                  |k(        }|s.|j                  t        j                  j                  d            }|j                  t        j                  j                               }|j                         }|D cg c]  }|j                  |j                  |j
                  t        |dd      |j                  |j                  r|j                  j                         nd|j                   r|j                   j                         nd|j                  r|j                  j                         ndd }}d|dS c c}w # t"        $ r}dt%        |      g dcY d}~S d}~ww xY w)zxLista registros filtrados por student_id y/o professional_id. Por defecto excluye eliminados (deleted_date IS NOT NULL).Ncareer_type_ididr   r   r   hours
added_dateupdated_datedeleted_datesuccessstatusdataerrorr   messager    )r   queryr   filterr   r   r   is_order_byr   descallgetattrr   r   	isoformatr   	Exceptionstr)	r   r   r   r   qrowsrr    es	            r   getzStudentProfessionalClass.get   sw   	F67A%HH5@@JNO*HH5EEXY"HH5BBFFtLM

366;;=>A557D   $$"#,,'('8'8&-a1A4&HWW>?ll!,,"8"8":PTBC..ANN$<$<$>VZBC..ANN$<$<$>VZ	D  (66  	F%#a&"EE	Fs1   CF B7FF F 	F?&F:4F?:F?r   c                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  |k(  t        j                  j                  d            j                  t        j                  j                               }|j                         }|D cg c]  }|j                  |j                  |j                  t        |dd      |j                  |j                  r|j                  j!                         nd|j"                  r|j"                  j!                         ndd }}d|dS c c}w # t$        $ r}dt'        |      g dcY d}~S d}~ww xY w)zQLista registros por student_id y career_type_id, solo sin deleted_date (activos).Nr   )r   r   r   r   r   r   r   r   r   r!   r"   )r   r$   r   r%   r   r   r   r&   r'   r   r(   r)   r   r*   r   r   r+   r   r,   r-   )r   r   r   r.   r/   r0   r    r1   s           r   get_by_student_and_career_typez7StudentProfessionalClass.get_by_student_and_career_type0   s8   	F67,77:E,;;~M,99==dC
 255::<=  557D   $$"#,,'('8'8&-a1A4&HWW>?ll!,,"8"8":PTBC..ANN$<$<$>VZD  (66  	F%#a&"EE	Fs1   B.E 0BE E E 	E.E)#E.)E.r   c           	      b   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS |j                  |j                  |j                  t        |dd      |j                  |j                  r|j                  j                         nd|j                  r|j                  j                         nd|j                  r|j                  j                         ndd}d|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   r%   r   firstr   r   r*   r   r   r+   r   r   r,   r-   )r   r   rowr    r1   s        r   	get_by_idz"StudentProfessionalClass.get_by_idM   s   	H''-- 89@@AYA\A\`bAbciikC")6OY]^^ff!nn#&#6#6")#/?"F<?NNcnn668PT@C@P@P 0 0 : : <VZ@C@P@P 0 0 : : <VZ	D (66 	H%#a&$GG	Hs%   AD B4D 	D.D)#D.)D.r    c           	         	 t        |d   |d   |j                  d      |j                  d      t        j                         t        j                         d      }| j                  j                  |       | j                  j                          | j                  j                  |       dd|j                  d	|j                  id
S # t        $ r3}| j                  j                          dt        |      ddcY d}~S d}~ww xY w)z+Crea un registro en students_professionals.r   r   r   r   N)r   r   r   r   r   r   r   r   zRegistro creado.r   )r   r#   r   r    r!   r"   )r   r2   r   utcnowr   addcommitrefreshr   r,   rollbackr-   )r   r    r8   r1   s       r   storezStudentProfessionalClass.storea   s    	H*- $%6 7#xx(89hhw'#??,%__.!C GGKKGGNNGGOOC '4Fcff_cehekek^lmm 	HGG%#a&$GG	Hs   CC	 		D(D :D Dc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS |j                  d      
|d   |_        |j                  d      
|d   |_        d|v r
|d   |_	        d|v r
|d   |_
        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)z4Actualiza un registro por id (solo campos enviados).r!   r6   r   r#   r   Nr   r   r   r   zRegistro actualizado.)r   r#   r   )r   r$   r   r%   r   r7   r2   r   r   r   r   r   r;   r   r=   r>   r,   r?   r-   )r   r   r    r8   r1   s        r   updatezStudentProfessionalClass.updateu   s   	:''-- 89@@AYA\A\`bAbciikC")6OPPxx%1!%l!3xx)*6&*+<&=#4'%)*:%;"$ M	'0CGGNNGGOOC '4KSVSYSYZZ 	:GG%#a&99	:s%   AD B/D 	E'D<6E<Esoftc                 B   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS |rQt        j                         |_        t        j                         |_	        | j                   j                          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)zRElimina por id. Si soft=True (por defecto), hace soft delete (deleted_date = now).r!   r6   rB   r   zRegistro eliminado (soft).zRegistro eliminado.N)r   r$   r   r%   r   r7   r   r;   r   r   r=   deleter,   r?   r-   )r   r   rD   r8   r1   s        r   rF   zStudentProfessionalClass.delete   s    	:''-- 89@@AYA\A\`bAbciikC")6OPP#+??#4 #+??#4  "+8TUUGGNN3GGNN'4IJJ 	:GG%#a&99	:s+   AC# AC# )9C# #	D,'DDD)NNF)T)__name__
__module____qualname__r   r   r   intbooldictr2   r4   r9   r@   rC   rF    r   r   r
   r
   
   s    7 
 %))- %	 FSM F "# F 	 F
 
 FDF Fc FVZ F:HC HD H(H$ H4 H(: :D :T :,: :D :D :r   r
   N)__doc__r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr   r
   rM   r   r   <module>rR      s#    Z  & & " :Q: Q:r   