
    SiB4                     X    d dl m Z  d dlmZ d dlmZmZmZmZmZ d dl	m
Z
  G d d      Zy)    )datetime)func)ProfessionalTeachingCourseModelProfessionalModelCareerTypeModelCourseModel	UserModel)split_full_namec            	           e Zd Zd Z	 	 	 	 	 ddZd Zd Z	 ddededed	efd
Zd	edefdZ	defdZ
dedefdZdefdZdefdZy)ProfessionalTeachingCourseClassc                     || _         y )N)db)selfr   s     _/var/www/pie360backend.cl/public_html/app/backend/classes/professional_teaching_course_class.py__init__z(ProfessionalTeachingCourseClass.__init__   s	        Nc                 B   	 | j                   j                  t              }|'|dk7  r"|j                  t        j                  |k(        }|'|dk7  r"|j                  t        j
                  |k(        }|'|dk7  r"|j                  t        j                  |k(        }|'|dk7  r"|j                  t        j                  |k(        }|(|dk7  r#|j                  t        j                  |k(        }n"|j                  t        j                  dk(        }|j                         }g }|D ]  }	t        |	dd      }
| j                  |	      }|j                  |	j                  |	j                  |	j
                  |	j                  |	j                  |
||	j                  |	j                  |	j                  r|	j                  j!                         nd|	j"                  r|	j"                  j!                         ndd        d|dS # t$        $ r}dt'        |      g d	cY d}~S d}~ww xY w)
zSLista asignaciones filtrando por los par?metros indicados (-1 o None = no filtrar).Nr   career_type_id)idprofessional_idteaching_id	course_idteacher_type_idr   career_type_namesubjectdeleted_status_id
added_dateupdated_datesuccessstatusdataerrorr"   messager#   )r   queryr   filterr   r   r   r   r   allgetattr_get_specialty_for_assignmentappendr   r   r   	isoformatr   	Exceptionstr)r   r   r   r   r   r   qrowsr#   rr   r   es                r   getz#ProfessionalTeachingCourseClass.get   s   #	F=>A*"/DHH<LLP__`&;"+<HH<HHKWX$bHH<FF)ST*"/DHH<LLP__` ,1Bb1HHH<NNRccd HH<NNRSST557DD !(,<d!C#'#E#Ea#H $$'('8'8#$==!"'('8'8&4(8 yy)*)<)<>?ll!,,"8"8":PTBC..ANN$<$<$>VZ   (66 	F%#a&"EE	Fs   G9G< <	HHHHc                    |sy | j                   j                  t              j                  t        j                  |k(        j                         }|rt        |dd       sy | j                   j                  t              j                  t        j                  |j                  k(        j                         }|r*|j                  r|j                  xs dj                         S d S )Nr    )r   r'   r   r(   r   firstr*   r   r   career_typestrip)r   r   profcts       r   _get_specialty_for_professionalz?ProfessionalTeachingCourseClass._get_specialty_for_professional?   s    ww}}./667H7K7K7^_eeg74)94@WW]]?+22?3E3EI\I\3\]cce13$"++-PDPr   c                 H   t        |dd      }|ry| j                  j                  t              j	                  t        j
                  |k(        j                         }|r*|j                  r|j                  xs dj                         S | j                  |j                        S )uN   Especialidad: primero career_type_id de la asignación, si no del profesional.r   Nr6   )r*   r   r'   r   r(   r   r7   r8   r9   r<   r   )r   rowassignment_ct_idr;   s       r   r+   z=ProfessionalTeachingCourseClass._get_specialty_for_assignmentH   s    "3(8$?/667I7IM]7]^ddfBbnn,"335533C4G4GHHr   r   	school_idr   r   c           	         	 | j                   j                  t        j                  j	                  d      t
        j                  t
        j                  t        j                        j                  t
        t        j                  t
        j                  k(        j                  t        t        j                  t        j                  k(        j                  t        t        j                  t        j                  k(        j!                  t        j                  |k(  t        j"                  |k(  t        j$                  dk(  t        j&                  |k(  t        j$                  dk(        }|'|dk7  r"|j!                  t        j                  |k(        }|j)                         }|j+                         }g }|D ]  }|j                  |j                  xs dj-                         nd}	|	rt/        |	      nd\  }
}|j1                  |j                  |
xs d|xs d|j                  |j                  xs dj-                         nd|j                  d        d|d	S # t2        $ r}d
t5        |      g dcY d}~S d}~ww xY w)zLista profesionales (nombres, apellidos, rut, teacher_type_id) filtrados por curso, colegio, career_type_id y opcionalmente teacher_type_id (-1 = no filtrar).r   r   Nr   r6   )r6   r6   )r   names	lastnamesrutr   r    r!   r$   r%   )r   r'   r   r   labelr	   	full_namerD   r   r   	outerjoinuser_idjoinr   r   r   r(   r@   r   r   distinctr)   r9   r
   r,   r.   r/   )r   r   r@   r   r   r0   r1   r#   r2   fnnlnr3   s                r   )get_professionals_by_course_school_careerzIProfessionalTeachingCourseClass.get_professionals_by_course_school_careerQ   s   ,	F%((../@A''MM3CC	 9&7&?&?9<<&OP33CCGXG[G[[ NN&E&O&OO 3==J))Y611Q63BBnT3EEJ! 0 *"/DHH<LLP__`

A557DD 45KK4Kakk'R..0QS/1+x2+,+<+<!"d%'Z4898I224t+,+<+< (66 	F%#a&"EE	Fs   II 	I<#I71I<7I<c                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  |k(  t        j                  dk(        j                         }g }|D ]  }| j                  |      }|j                  |j                  |j                  |j                  |j
                  |j                  t        |dd      |j                  ||j                  |j                  r|j                  j!                         nd|j"                  r|j"                  j!                         ndd        d|dS # t$        $ r}dt'        |      g dcY d}~S d}~ww xY w)	ziLista asignaciones por tipo de profesional (regular/especialista) y course_id con deleted_status_id == 0.r   r   Nr   r   r   r   r   r   r   	specialtyr   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   r1   r#   r2   rQ   r3   s           r   get_by_teacher_typez3ProfessionalTeachingCourseClass.get_by_teacher_type   s;   	F=>3CCV3==J3EEJ
   D  >>qA	$$'('8'8#$==!"'('8'8&-a1A4&H yy!*)*)<)<>?ll!,,"8"8":PTBC..ANN$<$<$>VZ  (66 	F%#a&"EE	Fs   E	E 	E.E)#E.)E.r   c                 z   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS | j                  |      }|j                  |j                  |j                  |j                  |j                  t        |dd      |j                  ||j                  |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 una asignaci?n por id (valor en URL).r$   Asignaci?n no encontrada.Nr%   r   rP   r    r!   )r   r'   r   r(   r   r7   r+   r   r   r   r   r*   r   r   r   r-   r   r.   r/   )r   r   r>   rQ   r#   r3   s         r   	get_by_idz)ProfessionalTeachingCourseClass.get_by_id   s   	H''-- ?@GG/22b8eg  ")6Q[_``::3?Iff#&#6#6" ]]#&#6#6")#/?"F;;&%(%:%:<?NNcnn668PT@C@P@P 0 0 : : <VZD (66 	H%#a&$GG	Hs%   AD C D 	D:!D5/D:5D:r#   c                 f   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS |j                  d      
|d   |_        |j                  d      
|d   |_        |j                  d      
|d   |_	        d|v r
|d   |_
        d	|v r
|d	   |_        |j                  d
      
|d
   |_        |j                  d      |d   |_        nd|v r|j                  d      }t        |t              r||ndj!                         nt        |xs d      j!                         }|r@| j                   j                  t"              j                  t%        j&                  t"        j(                        |k(        j                         }|sl| j                   j                  t"              j                  t%        j&                  t"        j(                        j+                  |            j                         }|s]| j                   j                  t"              j                  t"        j(                  j+                  d| d            j                         }|r|j                  |_        t-        j.                         |_        | j                   j3                          | j                   j5                  |       ddd|j                  idS # t6        $ r2}| j                   j9                          dt        |      dcY d}~S d}~ww xY w)z@Edita una asignaci?n por id; solo actualiza los campos enviados.r$   rT   r"   r&   r   Nr   r   r   r   r   r   rQ   r6   %r    z%Asignaci?n actualizada correctamente.r   r%   )r   r'   r   r(   r   r7   r4   r   r   r   r   r   r   r   
isinstancer/   r9   r   r   trimr8   iliker   nowr   commitrefreshr.   rollback)r   r   r#   r>   specialty_valspecialty_namer;   r3   s           r   updatez&ProfessionalTeachingCourseClass.update   s   ,	:''-- ?@GG/22b8eg  ")6QRRxx)*6&*+<&=#xx&2"&}"5xx$0 $[ 1 D(&*+<&=#D "9oxx+,8(,-@(A%xx()5%)*:%;"$ $ 5akly{~a=3L-RT![![!]  FI  JW  J]  []  F^  Fd  Fd  Ff!7>>		/"="=>.Peg  !WW]]?;BB IIo&A&ABHHX%'  !WW]]?;BB+77==.AQQR>ST%'  -/UU*'||~CGGNNGGOOC '4[fjlolrlrestt 	:GG%#a&99	:s%   AK5 JK5 5	L0>'L+%L0+L0c                    	 t        |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  dd      t        j                         t        j                         		      }| j                  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)z?Crea una asignaci?n profesional - ense?anza - curso (una fila).r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   r    zAsignaci?n creada correctamente)r"   r&   r   r$   rW   N)r   r4   r   r\   r   addr]   r^   r   r.   r_   r/   )r   r#   new_ptcr3   s       r   storez%ProfessionalTeachingCourseClass.store   s    	:5 $): ; HH]3((;/ $): ;#xx(89+"&((+>"B#<<>%\\^
G GGKK GGNNGGOOG$#<jj 
  	:GG%#a&99	:s   DD 	D?'D:4D?:D?c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS d|_        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)zPElimina una asignaci?n por ID (borrado l?gico: actualiza deleted_status_id = 1).r$   rT   rW      r    z#Asignaci?n eliminada correctamente.N)r   r'   r   r(   r   r7   r   r   r\   r   r]   r.   r_   r/   )r   r   r>   r3   s       r   deletez&ProfessionalTeachingCourseClass.delete  s    	:''-- ?@GG/22b8eg  ")6QRR$%C!'||~CGGNN'4YZZ 	:GG%#a&99	:s$   AB >B 	C'CCC)NNNNN)r   )__name__
__module____qualname__r   r4   r<   r+   intrN   rR   rU   dictrb   rf   ri    r   r   r   r      s    
 ,F\QI  "4F4F 4F 	4F
 4FlF3 F3 F@HC H4.: .:D .:`:$ :4: :r   r   N)r   
sqlalchemyr   app.backend.db.modelsr   r   r   r   r	   app.backend.utils.name_splitr
   r   ro   r   r   <module>rs      s&       9L: L:r   