
    fiT                     T    S r SSKJr  SSKJrJrJr  SSKJr  SSKJ	r	   " S S5      r
g)	uT   CRUD para tabla students_professionals (relación estudiante-profesional con horas).    )datetime)OptionalAnyList)Session)StudentProfessionalModelc            	           \ rS rSrS\4S jr   SS\\   S\\   S\S\	4S	 jjr
S\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\S\S\	4S jjrSrg)StudentProfessionalClass
   dbc                     Xl         g )Nr   )selfr   s     `C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\student_professional_class.py__init__!StudentProfessionalClass.__init__   s        N
student_idprofessional_idinclude_deletedreturnc                     U R                   R                  [        5      nUb"  UR                  [        R                  U:H  5      nUb"  UR                  [        R
                  U:H  5      nU(       d.  UR                  [        R                  R                  S5      5      nUR                  [        R                  R                  5       5      nUR                  5       nU Vs/ s H  nUR                  UR                  UR
                  [        USS5      UR                  UR                  (       a  UR                  R                  5       OSUR                   (       a  UR                   R                  5       OSUR                  (       a  UR                  R                  5       OSS.PM     nnSUS.$ s  snf ! ["         a  nS[%        U5      / S.s SnA$ SnAff = f)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   getStudentProfessionalClass.get   s|   	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  A $$"#,,'('8'8&-a1A4&HWW>?ll!,,"8"8":PTBC..ANN$<$<$>VZBC..ANN$<$<$>VZ	    (66  	F%#a&"EE	Fs1   CF6 !C	F1*F6 1F6 6
G GGGr   c                     U R                   R                  [        5      R                  [        R                  U:H  [        R
                  U:H  [        R                  R                  S5      5      R                  [        R                  R                  5       5      nUR                  5       nU Vs/ s H  nUR                  UR                  UR                  [        USS5      UR                  UR                  (       a  UR                  R!                  5       OSUR"                  (       a  UR"                  R!                  5       OSS.PM     nnSUS.$ s  snf ! [$         a  nS['        U5      / S.s SnA$ SnAff = f)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/   r0   )r   r   r   r1   r2   r3   r#   r4   s           r   get_by_student_and_career_type7StudentProfessionalClass.get_by_student_and_career_type0   s=   	F67,77:E,;;~M,99==dC
 255::<=  557D  A $$"#,,'('8'8&-a1A4&HWW>?ll!,,"8"8":PTBC..ANN$<$<$>VZ    (66  	F%#a&"EE	Fs1   B.E 0BEE E 
E<#E71E<7E<r   c           	          U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSSS.$ UR                  UR                  UR                  [        USS5      UR                  UR                  (       a  UR                  R                  5       OSUR                  (       a  UR                  R                  5       OSUR                  (       a  UR                  R                  5       OSS.nSU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.Nr%   r   r   r    r!   )r   r'   r   r(   r   firstr   r   r-   r   r   r.   r   r   r/   r0   )r   r   rowr#   r4   s        r   	get_by_id"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  CD   
E*D>8E>Er#   c           
          [        US   US   UR                  S5      UR                  S5      [        R                  " 5       [        R                  " 5       SS9nU R                  R                  U5        U R                  R                  5         U R                  R                  U5        SSUR                  S	UR                  0S
.$ ! [         a3  nU R                  R                  5         S[        U5      SS.s SnA$ SnAff = f)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   r5   r   utcnowr   addcommitrefreshr   r/   rollbackr0   )r   r#   r=   r4   s       r   store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                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ UR                  S5      b
  US   Ul        UR                  S5      b
  US   Ul        SU;   a
  US   Ul	        SU;   a
  US   Ul
        [        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)z4Actualiza un registro por id (solo campos enviados).r$   r;   r"   r&   r   Nr   r   r   r    zRegistro actualizado.)r"   r&   r   )r   r'   r   r(   r   r<   r5   r   r   r   r   r   rA   r   rC   rD   r/   rE   r0   )r   r   r#   r=   r4   s        r   update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 B6D 
E'E	E	Esoftc                 \    U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ U(       aS  [        R                  " 5       Ul        [        R                  " 5       Ul	        U R                   R                  5         SSS.$ U R                   R                  U5        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)zRElimina por id. Si soft=True (por defecto), hace soft delete (deleted_date = now).r$   r;   rI   r    zRegistro eliminado (soft).zRegistro eliminado.N)r   r'   r   r(   r   r<   r   rA   r   r   rC   deleter/   rE   r0   )r   r   rL   r=   r4   s        r   rN   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/ 59C/ /
D+9'D& D+&D+r   )NNF)T)__name__
__module____qualname____firstlineno__r   r   r   intbooldictr5   r8   r>   rF   rJ   rN   __static_attributes__ 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
   rX   r   r   <module>r]      s#    Z  & & " :Q: Q:r   