
    Di#                     ^    S SK J r   S SKJrJr  S SKJr  S SKJr  S\S\4S jr	 " S S	5      r
g
)    )datetime)OptionalAny)Session)+MeetingSchedualingRegisterProfessionalModelrreturnc                 V   U R                   U R                  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       S.$ S S.$ )N)idmeeting_schedualing_register_idprofessional_id
added_dateupdated_datedeleted_date)r   r   r   r   	isoformatr   r   )r   s    uC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\meeting_schedualing_register_professional_class.py_row_to_dictr      s|    dd+,+L+L,,23,,all,,.D67nn002$67nn002  KO     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\S\4S jrS	\S\4S jrS\S\S\4S jrS\S\S\4S jrSrg)+MeetingSchedualingRegisterProfessionalClass   dbc                     Xl         g )Nr   )selfr   s     r   __init__4MeetingSchedualingRegisterProfessionalClass.__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)z\Lista registros activos (deleted_date is None). Filtros opcionales (-1 o None = no filtrar).Nsuccessstatusdataerrorr"   messager#   )r   queryr   filterr   is_r   r   allr   	Exceptionstr)r   r   r   qrowsr   es          r   get/MeetingSchedualingRegisterProfessionalClass.get   s    	FIJCPPTTUYZ[  /:?^bd?dHHHhh  mL  L  M*"/DHHHXX\kkl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.Nr%   r    r!   )	r   r'   r   r(   r   firstr   r+   r,   r   r   rowr/   s       r   	get_by_id5MeetingSchedualingRegisterProfessionalClass.get_by_id*   s    	H''-- KLSST  UC  UC  GI  UI  J  P  P  RC")6OY]^^'c1BCC 	H%#a&$GG	Hs$   AA* A* *
B4BBBr#   c                 b    [         R                  " 5       nUR                  S5      nUR                  S5      nU R                  R	                  [
        5      R                  [
        R                  U:H  [
        R                  U:H  5      R                  5       nU(       a\  X%l
        SUl        U R                  R                  5         U R                  R                  U5        SSUR                  [        U5      S.$ [        UU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.$ ! ["         a2  nU R                  R%                  5         S	['        U5      S
.s SnA$ SnAff = f)zCrea o actualiza: si ya existe un registro con el mismo (meeting_schedualing_register_id, professional_id), actualiza (o restaura si estaba borrado); si no, crea uno nuevo.r   r   Nr    Registro actualizado.)r"   r&   r   r#   r   r   r   r   r   zRegistro creado.r$   r"   r&   )r   nowr0   r   r'   r   r(   r   r   r4   r   r   commitrefreshr   r   addr+   rollbackr,   )r   r#   r=   reg_idprof_idr6   r/   s          r   store1MeetingSchedualingRegisterProfessionalClass.store4   sY   	:,,.CXX?@Fhh01GIJ?__cii?OOSZZ   #& #'  $"+8OWZW]W]gstwgxyy=06 ' !C GGKKGGNNGGOOC '4Fcff^jkn^opp 	:GG%#a&99	:s%   C8E2 ;A6E2 2
F.<'F)#F.)F.c                 2    U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ 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)
uZ   Actualiza un registro; solo los campos enviados. Acepta 0 como valor válido para los ids.r$   r3   r<   r   r   r    r:   )r"   r&   r   N)r   r'   r   r(   r   r4   r   r   r   r=   r   r>   r?   r+   rA   r,   )r   r   r#   r6   r/   s        r   update2MeetingSchedualingRegisterProfessionalClass.updateW   s   	:''-- KLSST  UC  UC  GI  UI  J  P  P  RC")6OPP0D86:;\6]3 D(&*+<&=#'||~CGGNNGGOOC '4KSVSYSYZZ 	:GG%#a&99	:s%   AC A>C 
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$   r3   r<   r    Registro eliminado.N)r   r'   r   r(   r   r4   r   r=   r   r   r>   r+   rA   r,   r5   s       r   delete2MeetingSchedualingRegisterProfessionalClass.deletei   s    
	:''-- KLSST  UC  UC  GI  UI  J  P  P  RC")6OPP'||~C'||~CGGNN'4IJJ 	:GG%#a&99	:s%   AB. AB. .
C*8'C%C*%C*c                     U R                   R                  [        5      R                  [        R                  U:H  [        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)uz   Borrado lógico del registro que tiene este meeting_schedualing_register_id y professional_id (el que quitas de la lista).r$   r3   r<   r    rJ   N)r   r'   r   r(   r   r   r4   r   r=   r   r   r>   r+   rA   r,   )r   r   r   r6   r/   s        r   #delete_by_register_and_professionalOMeetingSchedualingRegisterProfessionalClass.delete_by_register_and_professionalw   s    	:IJ?__  dC  C?OOSbb   ")6OPP'||~C'||~CGGNN'4IJJ 	:GG%#a&99	:s%   A*C  -AC   
C<
'C71C<7C<professional_idsc           	          [         R                  " 5       nU R                  R                  [        5      R                  [        R                  U:H  [        R                  R                  S5      5      R                  5       n[        U=(       d    / 5      nU H!  nUR                  U;  d  M  X6l        X6l        M#     U H  nU R                  R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       nU(       a  SUl        X8l        Mx  [	        UUUUSS9n	U R                  R                  U	5        M     U R                  R                  5         SSSS.$ ! [          a2  n
U R                  R#                  5         S[%        U
5      S.s Sn
A
$ Sn
A
ff = f)uy   Sincroniza la lista de profesionales: borra (lógico) los que no están en professional_ids, añade/restaura los que sí.Nr;   r    zLista actualizada.r%   r$   r<   )r   r=   r   r'   r   r(   r   r   r)   r*   setr   r   r4   r@   r>   r+   rA   r,   )r   r   rP   r=   currentids_setr6   pidexistingnew_rowr/   s              r   sync_professionals>MeetingSchedualingRegisterProfessionalClass.sync_professionals   s   (	:,,.CIJ?__  dC  C?LLPPQUV   *0b1G&&g5'*$'*$  GGMM"MNVCcc  hG  GCSSWZZ UW  ,0H),/)I8W(+#&%(%)G GGKK() * GGNN'4HRVWW 	:GG%#a&99	:s%   B'F -CF 
F?'F:4F?:F?r   )NN)__name__
__module____qualname____firstlineno__r   r   r   intr   r0   r7   dictrD   rG   rK   rN   listrX   __static_attributes__ r   r   r   r      s    7 
 :>)-F)1#F "#F 
	F(HC HC H!:$ !:3 !:F: :D :S :$: : ::/2:EH:	:.,:/2,:FJ,:	,:r   r   N)r   typingr   r   sqlalchemy.ormr   app.backend.db.modelsr   r_   r   r   rb   r   r   <module>rf      s1       " M? D h: h:r   