
    ki&T                         S r SSKJrJr  SSKJrJrJrJr  SSKJ	r	  SSK
JrJrJrJrJr  S\\   4S jrS\\   S\\   4S	 jr " S
 S5      rg)uA   Document 20: Community Education Support Program (CESP) – CRUD.    )datetimedate)OptionalAnyListDict)Session)PeriodTypeModelCespDocumentModelCespGuardianModel CespParticipantProfessionalModelCespSupportTeamMemberModelreturnc                     U c  g [        U S5      (       a2  [        U S5      (       a  U R                  5       S S $ [        U 5      S S $ U (       a  [        U 5      S S $ S $ )N	isoformat
   )hasattrr   str)vs    PC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\cesp_class.py_serialize_dater      s\    yq+%,Q%<%<q{{}Sb!M#a&"+M3q6#2;%%    sc                 @   U (       a*  [        U [        5      (       a  U R                  5       (       d  g [        U [        5      (       a  U $  [        R
                  " [        U 5      R                  5       S S S5      R                  5       $ ! [        [        4 a     g f = f)Nr   z%Y-%m-%d)
isinstancer   stripr   r   strptime
ValueError	TypeError)r   s    r   _parse_dater       sy    As##AGGII!T  Q!4jAFFHH	" s   >B
 
BBc                      \ rS rSrS\4S jrS\\   4S jrS\	S\
4S jrS\S\
4S	 jrS
\S\
4S jrS\S\
4S jrSS\\   S\S\
4S jjrS\S\
4S jrSS\S\S\
4S j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)	CespClass#   dbc                     Xl         g )Nr$   )selfr$   s     r   __init__CespClass.__init__$   s    r   r   c                 T    U R                   R                  [        5      R                  [        R                  5      R                  5       nU Vs/ s H2  o"R                  UR                  =(       d    SR                  5       S.PM4     sn$ s  snf ! [         a  n/ s SnA$ SnAff = f)z Lista period_types (e.g. Anual). )idnameN)	r$   queryr
   order_byr,   allr-   r   	Exception)r'   rowsres       r   get_period_typesCespClass.get_period_types'   sx    	77==1::?;M;MNRRTDJNO$Q44!&&,B)=)=)?@$OOO 	I	s0   AB 9B	B B 
B'B"B'"B'docc                    0 SUR                   _SUR                  _SUR                  _S[        UR                  5      _SUR
                  _SUR                  _SUR                  _SUR                  _S	UR                  _S
UR                  _SUR                  _SUR                  _SUR                  _SUR                  _SUR                  _SUR                   _SUR"                  _UR$                  UR&                  UR(                  UR*                  UR,                  UR.                  UR0                  UR2                  UR4                  (       a  UR4                  R7                  5       OS UR8                  (       a  UR8                  R7                  5       OS UR:                  (       a  UR:                  R7                  5       S.E$ S S.E$ )Nr,   
student_iddocument_type_idelaboration_dateperiod_type_idpharmacological_treatmentexternal_specialistsprofile_interactionprofile_involvementprofile_behavior_repertoireprofile_skillsprofile_challengesprofile_support_needsprofile_interestsstressors_triggersprevention_measuressuggestions_special) strategies_phase1_manifestationsstrategies_phase1_strategies strategies_phase2_manifestationsstrategies_phase2_strategies strategies_phase3_manifestationsstrategies_phase3_strategies strategies_phase4_manifestationsstrategies_phase4_strategies
added_dateupdated_datedeleted_date)r,   r9   r:   r   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r   rR   rS   )r'   r7   s     r   _doc_to_dictCespClass._doc_to_dict/   s   
#&&
#..
  4 4
 0D0D E	

 c00
 ()F)F
 #C$<$<
 "3#:#:
 "3#:#:
 *3+J+J
 c00
 !#"8"8
 $S%>%>
  !6!6
 !#"8"8
  "3#:#:!
" "3#:#:#
$ 140T0T,/,L,L030T0T,/,L,L030T0T,/,L,L030T0T,/,L,L8;#..224D<?<L<LC,,668RV<?<L<LC,,6689
 	
8 SW9
 	
r   gc                     UR                   UR                  UR                  UR                  UR                  UR
                  UR                  UR                  UR                  UR                  UR                  S.$ )Nr,   cesp_document_idguardian_idr-   identification_numberfamily_member_idaddressphoneemailis_emergency_contactis_guardianrX   )r'   rV   s     r   _guardian_to_dictCespClass._guardian_to_dictO   sa    $$ ! 2 2==FF%&%<%< ! 2 2yyWWWW$%$:$:==
 	
r   pc                 `    UR                   UR                  UR                  UR                  S.$ )Nr,   rY   professional_idprofessional_rolerf   )r'   rd   s     r   _participant_to_dictCespClass._participant_to_dict^   s.    $$ ! 2 2 00!"!4!4	
 	
r   r   c           	          UR                   UR                  UR                  UR                  UR                  UR
                  UR                  UR                  S.$ )Nr,   rY   rg   rh   support_rolesr^   r_   
sort_orderrl   )r'   r   s     r   _support_member_to_dict!CespClass._support_member_to_dictf   sJ    $$ ! 2 2 00!"!4!4__WWWW,,	
 		
r   Nr9   include_deletedc                 d    U R                   R                  [        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/ nU GH  nU R                  U5      nU R                   R                  [        5      R                  [        R                  UR                  :H  5      R                  5       nU V	s/ s H  oR                  U	5      PM     sn	US'   U R                   R                  [        5      R                  [        R                  UR                  :H  5      R!                  5       n
U
(       a  U R#                  U
5      OSUS'   U R                   R                  [$        5      R                  [$        R                  UR                  :H  5      R                  [$        R&                  [$        R                  5      R                  5       nU Vs/ s H  oR)                  U5      PM     snUS'   UR+                  U5        GM     SUS.$ s  sn	f s  snf ! [,         a  nS[/        U5      / S.s SnA$ SnAff = f)	zPLista CESP documents; opcionalmente por student_id. Excluye deleted por defecto.N	guardiansparticipant_professionalsupport_team_memberssuccessstatusdataerrorrx   messagery   )r$   r.   r   filterr9   rS   is_r/   r,   descr0   rT   r   rY   rb   r   firstri   r   rn   ro   appendr1   r   )r'   r9   rq   qdocsresultr7   itemrs   rV   participantsupportr   r4   s                 r   getCespClass.getr   s)   	F/0A%HH.99ZGH"HH.;;??EF

,//4467A557DF((- GGMM*;<CC%66#&&@#%  IR$R	1%;%;A%>	$R[!"ggmm,LMTT4EEO%'  ^i43L3L[3Ynr/0''--(BCJJ.??366I(5@@B\B_B_`adadaf  Za/aY`TU0L0LQ0OY`/a+,d#  (88 %S 0b  	F%#a&"EE	Fs=   D*J ,JDJ J! J 
J 
J/J*$J/*J/r,   c                 p    U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSSS.$ U R                  U5      nU R                   R                  [        5      R                  [        R                  UR                  :H  5      R                  5       nU Vs/ s H  oPR                  U5      PM     snUS'   U R                   R                  [        5      R                  [        R                  UR                  :H  5      R                  5       nU(       a  U R                  U5      OSUS'   U R                   R                  [        5      R                  [        R                  UR                  :H  5      R                  [        R                  [        R                  5      R                  5       nU Vs/ s H  oR!                  U5      PM     snUS'   SUS	.$ s  snf s  snf ! ["         a  n	S[%        U	5      SS.s Sn	A	$ Sn	A	ff = f)
zIObtiene un CESP document por id con guardian, participant y support_team.rz   CESP document no encontrado.Nr{   rs   rt   ru   rv   rw   )r$   r.   r   r}   r,   r   rT   r   rY   r0   rb   r   ri   r   r/   rn   ro   r1   r   )
r'   r,   r7   ry   rs   rV   r   r   r   r4   s
             r   	get_by_idCespClass.get_by_id   s   	H''-- 1299:K:N:NRT:TU[[]C")6T^bcc$$S)D&78??@Q@b@bfiflfl@lmqqsIDM NIq!7!7!:I ND''--(HIPP0AASVVKeg  Zet/H/H/UjnD+,ggmm$>?FF*;;svvEh1<<>X>[>[\]`]`]b  V]+]U\PQ,H,H,KU\+]D'('66 !O ,^ 	H%#a&$GG	HsD   AH A,H H"DH #H=
H 
H 
H5H0*H50H5latest_onlyc                     U R                   R                  [        5      R                  [        R                  U:H  [        R
                  R                  S5      5      R                  [        R                  R                  5       5      nU(       a7  UR                  5       nU(       d  SSS.$ U R                  UR                  5      $ U R                  USS9$ ! [         a  nS[        U5      SS.s SnA$ SnAff = f)uH   CESP por estudiante; si latest_only=True devuelve solo el más reciente.Nrv   rw   F)r9   rq   rz   r{   )r$   r.   r   r}   r9   rS   r~   r/   r,   r   r   r   r   r1   r   )r'   r9   r   r   r7   r4   s         r   get_by_student_idCespClass.get_by_student_id   s    	H/077!,,
:!..2248 h(++0023  ggi&/>>~~cff--88z58II 	H%#a&$GG	Hs*   B*C -C C 
C;"C60C;6C;ry   c                     [        UR                  S5      5      n[        S:0 SUS   _S[        UR                  S5      =(       d    S5      _SU_S[        UR                  S5      =(       d    S5      _SUR                  S5      =(       d    SR	                  5       =(       d    S	_S
UR                  S
5      =(       d    SR	                  5       =(       d    S	_SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _S[
        R                  " 5       _S[
        R                  " 5       _SS	_6nU R                  R                  U5        U R                  R                  5         UR                  S 5      =(       d    / n[        U[        5      (       Ga  U GH  n[        U[        5      (       d  M  [        UR                  UR                  S!5      UR                  S"5      =(       d    SR	                  5       =(       d    S	UR                  S#5      =(       d    SR	                  5       =(       d    S	UR                  S$5      UR                  S%5      =(       d    SR	                  5       =(       d    S	UR                  S&5      =(       d    SR	                  5       =(       d    S	UR                  S'5      =(       d    SR	                  5       =(       d    S	[        UR                  S(5      =(       d    S)5      [        UR                  S*5      =(       d    S5      [
        R                  " 5       [
        R                  " 5       S+9nU R                  R                  U5        GM     UR                  S,5      nU(       a  [        U[        5      (       a  UR                  S-5      b  [        UR                  [        US-   5      UR                  S.5      =(       d    SR	                  5       =(       d    S	[
        R                  " 5       [
        R                  " 5       S/9nU R                  R                  U5        UR                  S05      =(       d    / n	[        U	[        5      (       Gad  [!        U	5       GHT  u  p[        U[        5      (       a  UR                  S-5      c  M/  [#        UR                  [        US-   5      UR                  S.5      =(       d    SR	                  5       =(       d    S	UR                  S15      UR                  S&5      =(       d    SR	                  5       =(       d    S	UR                  S'5      =(       d    SR	                  5       =(       d    S	[        UR                  S25      =(       d    U
5      [
        R                  " 5       [
        R                  " 5       S39	nU R                  R                  U5        GMW     U R                  R%                  5         U R                  R'                  U5        S4S5UR                  S6UR                  0S7.$ ! [(         a3  nU R                  R+                  5         S8[-        U5      S	S9.s S	nA$ S	nAff = f);z\Crea CESP document y opcionalmente guardian, participant_professional, support_team_members.r;   r9   r:      r<      r=   r+   Nr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rs   rZ   r-   r[   r\   r]   r^   r_   r`   r   ra   rY   rZ   r-   r[   r\   r]   r^   r_   r`   ra   rQ   rR   rt   rg   rh   rY   rg   rh   rQ   rR   ru   rm   rn   	rY   rg   rh   rm   r^   r_   rn   rQ   rR   rv   zCESP creado.r,   )rx   r|   r,   ry   rz   r{    )r    r   r   intr   r   utcnowr$   addflushr   listdictr   r,   r   	enumerater   commitrefreshr1   rollbackr   )r'   ry   elaborationr7   guardians_listgdatarV   participant_datard   support_listisdatar   r4   s                 r   storeCespClass.store   s   Y	H%dhh/A&BCK# -!$TXX.@%A%GR!H "-  #488,<#=#BC	
 ,0884O+P+VTV*]*]*_*gcg '+hh/E&F&L"%S%S%U%]Y] %)HH-B$C %)HH-B$C -1HH5R,S  $xx(89 $(88,@#A '+hh/F&G #'((+>"? $(88,@#A %)HH-B$C  %)HH-B$C!" 26:\1]#$ .2XX6T-U%& 26:\1]'( .2XX6T-U)* 26:\1]+, .2XX6T-U-. 26:\1]/0 .2XX6T-U12 $??,34 &__.56 "7C: GGKKGGMMO!XXk28bN.$//+E%eT22 )),$)IIm$<#ii/52<<>F$/4yy9P/Q/WUW.^.^.`.hdh).3E)F!&9!5!; B B D L$yy17R>>@HD$yy17R>>@HD-0;Q1R1WVW-X$'		-(@(EA$F#+??#4%-__%6A GGKKN# ,&  $xx(BCJ/?$F$FK[K_K_`qKrK~4%(VV$'(89J(K$L'7';';<O'P'VTV&]&]&_&gcg'0!)!2 A88$:;ArL,-- ), 7HA%eT22eii@Q6R6Z 2),(+E2C,D(E+0995H+I+OR*V*V*X*`\`&+ii&@$yy17R>>@HD$yy17R>>@HD#&uyy'>'C!#D#+??#4%-__%6
A GGKKN !8  GGNNGGOOC 'N#&&[_adagagZhii 	HGG%#a&$GG	Hs   \3\6 6
]3 (].(]3.]3c                 N    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   5      Ul
        UR                  S5      b
  US   Ul        S	U;   a6  UR                  S	5      =(       d    S
R                  5       =(       d    SUl        SU;   a6  UR                  S5      =(       d    S
R                  5       =(       d    SUl        S H*  nXB;   d  M
  UR                  XBR                  U5      5        M,     [         R"                  " 5       Ul        SU;   Ga2  U R                   R                  [&        5      R                  [&        R(                  U:H  5      R+                  SS9  US   =(       d    / n[-        U[.        5      (       Ga  U GH  n[-        U[0        5      (       d  M  ['        UUR                  S5      UR                  S5      =(       d    S
R                  5       =(       d    SUR                  S5      =(       d    S
R                  5       =(       d    SUR                  S5      UR                  S5      =(       d    S
R                  5       =(       d    SUR                  S5      =(       d    S
R                  5       =(       d    SUR                  S5      =(       d    S
R                  5       =(       d    S[3        UR                  S5      =(       d    S5      [3        UR                  S5      =(       d    S5      [         R"                  " 5       [         R"                  " 5       S9nU R                   R5                  U5        GM     SU;   Ga  U R                   R                  [6        5      R                  [6        R(                  U:H  5      R+                  SS9  US   nU(       a  [-        U[0        5      (       a  UR                  S5      b  [7        U[3        US   5      UR                  S5      =(       d    S
R                  5       =(       d    S[         R"                  " 5       [         R"                  " 5       S9n	U R                   R5                  U	5        S U;   Ga  U R                   R                  [8        5      R                  [8        R(                  U:H  5      R+                  SS9  US    =(       d    / n
[-        U
[.        5      (       GaZ  [;        U
5       GHJ  u  p[-        U[0        5      (       a  UR                  S5      c  M/  [9        U[3        US   5      UR                  S5      =(       d    S
R                  5       =(       d    SUR                  S!5      UR                  S5      =(       d    S
R                  5       =(       d    SUR                  S5      =(       d    S
R                  5       =(       d    S[3        UR                  S"5      =(       d    U5      [         R"                  " 5       [         R"                  " 5       S#9	nU R                   R5                  U5        GMM     U R                   R=                  5         U R                   R?                  U5        S$S%UR                  S&.$ ! [@         a2  nU R                   RC                  5         S[E        U5      S.s SnA$ SnAff = f)'uV   Actualiza CESP document y reemplaza guardian, participant, support_team si se envían.rz   r   rx   r|   r9   Nr:   r;   r<   r=   r+   r>   )r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rs   Fsynchronize_sessionrZ   r-   r[   r\   r]   r^   r_   r`   r   ra   r   r   rt   rg   rh   r   ru   rm   rn   r   rv   zCESP actualizado.)rx   r|   r,   )#r$   r.   r   r}   r,   r   r   r9   r:   r    r;   r<   r   r=   r>   __setattr__r   r   rR   r   rY   deleter   r   r   r   r   r   r   r   r   r   r1   r   r   )r'   r,   ry   r7   fieldr   r   rV   r   rd   r   r   r   r   r4   s                  r   updateCespClass.update  sl   _	:''-- 1299:K:N:NRT:TU[[]C")6TUUxx%1!%l!3xx*+7'+,>'?$!T)'248J3K'L$xx()5%)*:%;"*d215:U1V1\Z\0c0c0e0mim-%-,0HH5K,L,RPR+Y+Y+[+c_c( =OOE88E?;  (0Cd"/0778I8Z8Z^`8`ahh  ~Ch  D!%k!2!8bnd33!/)%66$--/(-		-(@"'))F"3"9r!@!@!B!Jd3899=T3U3[Y[2b2b2d2lhl-2YY7I-J%*YYy%9%?R$F$F$H$PD#(99W#5#;"B"B"D"L#(99W#5#;"B"B"D"L14UYY?U5V5[Z[1\(+EIIm,D,I(J'/'8)1): A# "0& *T1>?FF4EEK&U&3#'(B#C #
3CT(J(JO_OcOcduOv  PC8)+(+,<=N,O(P+;+?+?@S+T+ZXZ*a*a*c*kgk#+??#4%-__%6A GGKKN%-89@@.??2E&U&3#$:;ArlD11$-l$;)%66%))DU:V:^$6-/,/6G0H,I/4yy9L/M/SQS.Z.Z.\.d`d*/))O*D#(99W#5#;"B"B"D"L#(99W#5#;"B"B"D"L'*599\+B+Ga'H'/'8)1):
 A %<  GGNNGGOOC '4GsvvVV 	:GG%#a&99	:s,   A[( C-[( V[( (
\$2'\\$\$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                  [        5      R                  [        R                  U:H  5      R                  SS9  U R                   R                  [        5      R                  [        R                  U:H  5      R                  SS9  U R                   R                  [        5      R                  [        R                  U:H  5      R                  SS9  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)
z:Elimina por id. soft=True hace soft delete (deleted_date).rz   r   r   rv   zCESP eliminado (soft).Fr   zCESP eliminado.N)r$   r.   r   r}   r,   r   r   r   rS   rR   r   r   rY   r   r   r   r1   r   r   )r'   r,   r   r7   r4   s        r   r   CespClass.deleteu  s   	:''-- 1299:K:N:NRT:TU[[]C")6TUU#+??#4 #+??#4  "+8PQQGGMM+,334E4V4VZ\4\]ddy~dGGMM:;BB0AARGff/GGMM45<<*;;rAff/GGNN3GGNN'4EFF 	:GG%#a&99	:s,   AG AG 5DG 
H'H
H
Hr&   )NF)T)__name__
__module____qualname____firstlineno__r	   r(   r   r   r5   r   r   rT   r   rb   r   ri   r   ro   r   r   boolr   r   r   r   r   r   __static_attributes__r   r   r   r"   r"   #   s   7 $t* 
 1 
d 
@
#4 
 

&F 
4 


)C 

 

Fhsm FT FVZ F<HC HD H*HC Hd Hd H [H$ [H4 [Hza: a:D a:T a:F: :D :D : :r   r"   N)__doc__r   r   typingr   r   r   r   sqlalchemy.ormr	   app.backend.db.modelsr
   r   r   r   r   r   r   r    r"   r   r   r   <module>r      sU    G # , , " &(3- &8C= Xd^ i: i:r   