
    'Xi'#                     \    d dl m Z  d dlmZmZ d dlmZ d dlmZ dedefdZ	 G d d	      Z
y
)    )datetime)OptionalAny)Session)+MeetingSchedualingRegisterProfessionalModelrreturnc                 8   | j                   | j                  | j                  | j                  r| j                  j	                         nd | j
                  r| j
                  j	                         nd | j                  r| j                  j	                         dS d dS )N)idmeeting_schedualing_register_idprofessional_id
added_dateupdated_datedeleted_date)r   r   r   r   	isoformatr   r   )r   s    l/var/www/pie360backend.cl/public_html/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                       e Zd ZdefdZ	 	 d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
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defdZy)+MeetingSchedualingRegisterProfessionalClassdbc                     || _         y )N)r   )selfr   s     r   __init__z4MeetingSchedualingRegisterProfessionalClass.__init__   s	    r   Nr   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(        }|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)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   getz/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'41Pa,q/1PQQ1P 	F%#a&"EE	Fs0   B2C 4CC C 	C2C-'C2-C2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   r(   r)   r   r   rowr,   s       r   	get_by_idz5MeetingSchedualingRegisterProfessionalClass.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.B<BBr    c                 \   	 t        j                         }|j                  d      }|j                  d      }| j                  j	                  t
              j                  t
        j                  |k(  t
        j                  |k(        j                         }|r]||_
        d|_        | j                  j                          | j                  j                  |       dd|j                  t        |      dS t        ||||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)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   nowr-   r   r$   r   r%   r   r   r0   r   r   commitrefreshr   r   addr(   rollbackr)   )r   r    r8   reg_idprof_idr2   r,   s          r   storez1MeetingSchedualingRegisterProfessionalClass.store4   s[   	:,,.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%   C3E0 6A9E0 0	F+9'F& F+&F+c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS 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)
uZ   Actualiza un registro; solo los campos enviados. Acepta 0 como valor válido para los ids.r!   r/   r7   r   r   r   r5   )r   r#   r   N)r   r$   r   r%   r   r0   r   r   r   r8   r   r9   r:   r(   r<   r)   )r   r   r    r2   r,   s        r   updatez2MeetingSchedualingRegisterProfessionalClass.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 A9C 	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!   r/   r7   r   Registro eliminado.N)r   r$   r   r%   r   r0   r   r8   r   r   r9   r(   r<   r)   r1   s       r   deletez2MeetingSchedualingRegisterProfessionalClass.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"0'CC"C"c                    	 | j                   j                  t              j                  t        j                  |k(  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)uz   Borrado lógico del registro que tiene este meeting_schedualing_register_id y professional_id (el que quitas de la lista).r!   r/   r7   r   rC   N)r   r$   r   r%   r   r   r0   r   r8   r   r   r9   r(   r<   r)   )r   r   r   r2   r,   s        r   #delete_by_register_and_professionalzOMeetingSchedualingRegisterProfessionalClass.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%B9 (AB9 9	C4'C/)C4/C4professional_idsc                 h   	 t        j                         }| j                  j                  t              j                  t        j                  |k(  t        j                  j                  d            j                         }t        |xs g       }|D ]  }|j                  |vs||_        ||_        ! |D ]  }| j                  j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|rd|_        ||_        st	        ||||d      }	| j                  j                  |	        | j                  j                          ddddS # t         $ r2}
| j                  j#                          dt%        |
      dcY d}
~
S d}
~
ww xY w)uy   Sincroniza la lista de profesionales: borra (lógico) los que no están en professional_ids, añade/restaura los que sí.Nr6   r   zLista actualizada.r"   r!   r7   )r   r8   r   r$   r   r%   r   r   r&   r'   setr   r   r0   r;   r9   r(   r<   r)   )r   r   rG   r8   currentids_setr2   pidexistingnew_rowr,   s              r   sync_professionalsz>MeetingSchedualingRegisterProfessionalClass.sync_professionals   s   (	:,,.CIJ?__  dC  C?LLPPQUV   *0b1G +&&g5'*C$'*C$+  )GGMM"MNVCcc  hG  GCSSWZZ UW  ,0H),/H)I8W(+#&%(%)G GGKK())* GGNN'4HRVWW 	:GG%#a&99	:s%   B!E6 $CE6 6	F1?'F,&F1,F1)NN)__name__
__module____qualname__r   r   r   intr   r-   r3   dictr?   rA   rD   rF   listrO    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   rT   r   r   rV   r   r   <module>rZ      s1       " M? D h: h:r   