
    HŴiR                         d Z ddlmZmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZmZmZmZmZ dee   fdZdee   dee   fd	Z G d
 d      Zy)uA   Document 20: Community Education Support Program (CESP) – CRUD.    )datetimedate)OptionalAnyListDict)Session)PeriodTypeModelCespDocumentModelCespGuardianModel CespParticipantProfessionalModelCespSupportTeamMemberModelreturnc                     | y t        | d      r-t        | d      r| j                         d d S t        |       d d S | rt        |       d d S d S )N	isoformat
   )hasattrr   str)vs    G/var/www/pie360backend.cl/public_html/app/backend/classes/cesp_class.py_serialize_dater      sV    yq+%,Q%<q{{}Sb!M#a&"+M3q6#2;%%    sc                    | r t        | t              r| j                         sy t        | t              r| S 	 t	        j
                  t        |       j                         d d d      j                         S # t        t        f$ r Y y w xY w)Nr   z%Y-%m-%d)
isinstancer   stripr   r   strptime
ValueError	TypeError)r   s    r   _parse_dater       sq    As#AGGI!T  Q!4jAFFHH	" s   =A5 5BBc                       e Zd ZdefdZdee   fdZdede	fdZ
dede	fdZd	ede	fd
Zdede	fdZddee   dede	fdZdede	fdZd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dedede	fdZy)	CespClassdbc                     || _         y )N)r#   )selfr#   s     r   __init__zCespClass.__init__$   s	    r   r   c                 D   	 | j                   j                  t              j                  t        j                        j                         }|D cg c]-  }|j                  |j                  xs dj                         d/ c}S c c}w # t        $ r}g cY d}~S d}~ww xY w)z Lista period_types (e.g. Anual). )idnameN)	r#   queryr
   order_byr)   allr*   r   	Exception)r%   rowsres       r   get_period_typeszCespClass.get_period_types'   sv    	77==1::?;M;MNRRTDJNOQ144!&&,B)=)=)?@OOO 	I	s0   AB
 2BB
 B
 
	BBBBdocc                 x   i d|j                   d|j                  d|j                  dt        |j                        d|j
                  d|j                  d|j                  d|j                  d	|j                  d
|j                  d|j                  d|j                  d|j                  d|j                  d|j                  d|j                   d|j"                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |j0                  |j2                  |j4                  r|j4                  j7                         nd |j8                  r|j8                  j7                         nd |j:                  r|j:                  j7                         dS d dS )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)   r5   r6   r   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r   rN   rO   )r%   r3   s     r   _doc_to_dictz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                     |j                   |j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  dS )Nr)   cesp_document_idguardian_idr*   identification_numberfamily_member_idaddressphoneemailis_emergency_contactis_guardianrS   )r%   rQ   s     r   _guardian_to_dictzCespClass._guardian_to_dictO   sa    $$ ! 2 2==FF%&%<%< ! 2 2yyWWWW$%$:$:==
 	
r   pc                 `    |j                   |j                  |j                  |j                  dS )Nr)   rT   professional_idprofessional_roler`   )r%   r^   s     r   _participant_to_dictzCespClass._participant_to_dict^   s.    $$ ! 2 2 00!"!4!4	
 	
r   r   c           	          |j                   |j                  |j                  |j                  |j                  |j
                  |j                  |j                  dS )Nr)   rT   ra   rb   support_rolesrY   rZ   
sort_orderre   )r%   r   s     r   _support_member_to_dictz!CespClass._support_member_to_dictf   sJ    $$ ! 2 2 00!"!4!4__WWWW,,	
 		
r   Nr5   include_deletedc                 @   	 | j                   j                  t              }|"|j                  t        j                  |k(        }|s.|j                  t        j
                  j                  d            }|j                  t        j                  j                               }|j                         }g }|D ]  }| j                  |      }| j                   j                  t              j                  t        j                  |j                  k(        j                         }|D 	cg c]  }	| j                  |	       c}	|d<   | j                   j                  t              j                  t        j                  |j                  k(        j!                         }
|
r| j#                  |
      nd|d<   | j                   j                  t$              j                  t$        j                  |j                  k(        j                  t$        j&                  t$        j                        j                         }|D cg c]  }| j)                  |       c}|d<   |j+                  |        d|dS c c}	w c c}w # t,        $ r}dt/        |      g dcY d}~S d}~ww xY w)	zPLista CESP documents; opcionalmente por student_id. Excluye deleted por defecto.N	guardiansparticipant_professionalsupport_team_memberssuccessstatusdataerrorrp   messagerq   )r#   r+   r   filterr5   rO   is_r,   r)   descr-   rP   r   rT   r]   r   firstrc   r   rg   rh   appendr.   r   )r%   r5   ri   qdocsresultr3   itemrk   rQ   participantsupportr   r1   s                 r   getz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$R1T%;%;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/aTU0L0LQ0O/a+,d#$ (88 %S 0b  	F%#a&"EE	Fs=   D$I; &I1>C<I; :I6I; 1
I; ;	JJJJr)   c                 R   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS | j                  |      }| j                   j                  t              j                  t        j                  |j                  k(        j                         }|D cg c]  }| j                  |       c}|d<   | j                   j                  t              j                  t        j                  |j                  k(        j                         }|r| j                  |      nd|d<   | j                   j                  t              j                  t        j                  |j                  k(        j                  t        j                  t        j                        j                         }|D cg c]  }| j!                  |       c}|d<   d|d	S c c}w c c}w # t"        $ r}	dt%        |	      ddcY d}	~	S d}	~	ww xY w)
zIObtiene un CESP document por id con guardian, participant y support_team.rr   CESP document no encontrado.Nrs   rk   rl   rm   rn   ro   )r#   r+   r   ru   r)   rx   rP   r   rT   r-   r]   r   rc   r   r,   rg   rh   r.   r   )
r%   r)   r3   rq   rk   rQ   r~   r   r   r1   s
             r   	get_by_idz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 Nq!7!7!: 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]+]PQD,H,H,K+]D'('66 !O ,^ 	H%#a&$GG	HsD   AH A,H G:C<H G?/
H :
H 	H&H!H&!H&latest_onlyc                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  j                  d            j                  t        j                  j                               }|r2|j                         }|sdddS | j                  |j                        S | j                  |d      S # t        $ r}dt        |      ddcY d}~S d}~ww xY w)uH   CESP por estudiante; si latest_only=True devuelve solo el más reciente.Nrn   ro   F)r5   ri   rr   rs   )r#   r+   r   ru   r5   rO   rv   r,   r)   rw   rx   r   r   r.   r   )r%   r5   r   rz   r3   r1   s         r   get_by_student_idz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 	C3C.(C3.C3rq   c                    	 t        |j                  d            }t        d:i d|d   dt        |j                  d      xs d      d|dt        |j                  d      xs d      d|j                  d      xs dj	                         xs d	d
|j                  d
      xs dj	                         xs d	d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      dt        j                         dt        j                         dd	}| j                  j                  |       | j                  j                          |j                  d       xs g }t        |t              r|D ]  }t        |t              st        |j                  |j                  d!      |j                  d"      xs dj	                         xs d	|j                  d#      xs dj	                         xs d	|j                  d$      |j                  d%      xs dj	                         xs d	|j                  d&      xs dj	                         xs d	|j                  d'      xs dj	                         xs d	t        |j                  d(      xs d)      t        |j                  d*      xs d      t        j                         t        j                         +      }| j                  j                  |        |j                  d,      }|rt        |t              r|j                  d-      t        |j                  t        |d-         |j                  d.      xs dj	                         xs d	t        j                         t        j                         /      }| j                  j                  |       |j                  d0      xs g }	t        |	t              r:t!        |	      D ]+  \  }
}t        |t              r|j                  d-      )t#        |j                  t        |d-         |j                  d.      xs dj	                         xs d	|j                  d1      |j                  d&      xs dj	                         xs d	|j                  d'      xs dj	                         xs d	t        |j                  d2      xs |
      t        j                         t        j                         3	      }| j                  j                  |       . | j                  j%                          | j                  j'                  |       d4d5|j                  d6|j                  id7S # t(        $ r3}| j                  j+                          d8t-        |      d	d9cY d	}~S d	}~ww xY w);z\Crea CESP document y opcionalmente guardian, participant_professional, support_team_members.r7   r5   r6      r8      r9   r(   Nr:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rk   rU   r*   rV   rW   rX   rY   rZ   r[   r   r\   rT   rU   r*   rV   rW   rX   rY   rZ   r[   r\   rM   rN   rl   ra   rb   rT   ra   rb   rM   rN   rm   rf   rg   	rT   ra   rb   rf   rY   rZ   rg   rM   rN   rn   zCESP creado.r)   )rp   rt   r)   rq   rr   rs    )r    r   r   intr   r   utcnowr#   addflushr   listdictr   r)   r   	enumerater   commitrefreshr.   rollbackr   )r%   rq   elaborationr3   guardians_listgdatarQ   participant_datar^   support_listisdatar   r1   s                 r   storez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 )),$)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/?$FK[K_K_`qKrK~4%(VV$'(89J(K$L'7';';<O'P'VTV&]&]&_&gcg'0!)!2 A88$:;ArL,- ), 7 #HAu%eT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#  GGNNGGOOC 'N#&&[_adagagZhii 	HGG%#a&$GG	Hs   Y>Z 	Z=
(Z82Z=8Z=c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS |j                  d      
|d   |_        |j                  d      
|d   |_        d|v rt        |d         |_
        |j                  d      
|d   |_        d	|v r,|j                  d	      xs d
j                         xs d|_        d|v r,|j                  d      xs d
j                         xs d|_        dD ](  }||v s|j                  ||j                  |             * t!        j"                         |_        d|v r| j                   j                  t&              j                  t&        j(                  |k(        j+                  d       |d   xs g }t-        |t.              r|D ]y  }t-        |t0              st'        ||j                  d      |j                  d      xs d
j                         xs d|j                  d      xs d
j                         xs d|j                  d      |j                  d      xs d
j                         xs d|j                  d      xs d
j                         xs d|j                  d      xs d
j                         xs dt3        |j                  d      xs d      t3        |j                  d      xs d      t!        j"                         t!        j"                               }| j                   j5                  |       | d|v r| j                   j                  t6              j                  t6        j(                  |k(        j+                  d       |d   }|rt-        |t0              r|j                  d      t7        |t3        |d         |j                  d      xs d
j                         xs dt!        j"                         t!        j"                               }	| j                   j5                  |	       d |v r| j                   j                  t8              j                  t8        j(                  |k(        j+                  d       |d    xs g }
t-        |
t.              r0t;        |
      D ]!  \  }}t-        |t0              r|j                  d      )t9        |t3        |d         |j                  d      xs d
j                         xs d|j                  d!      |j                  d      xs d
j                         xs d|j                  d      xs d
j                         xs dt3        |j                  d"      xs |      t!        j"                         t!        j"                         #	      }| j                   j5                  |       $ | j                   j=                          | j                   j?                  |       d$d%|j                  d&S # t@        $ r2}| j                   jC                          dtE        |      dcY d}~S d}~ww xY w)'uV   Actualiza CESP document y reemplaza guardian, participant, support_team si se envían.rr   r   rp   rt   r5   Nr6   r7   r8   r9   r(   r:   )r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rk   Fsynchronize_sessionrU   r*   rV   rW   rX   rY   rZ   r[   r   r\   r   r   rl   ra   rb   r   rm   rf   rg   r   rn   zCESP actualizado.)rp   rt   r)   )#r#   r+   r   ru   r)   rx   r   r5   r6   r    r7   r8   r   r9   r:   __setattr__r   r   rN   r   rT   deleter   r   r   r   r   r   r   r   r   r   r.   r   r   )r%   r)   rq   r3   fieldr   r   rQ   r   r^   r   r   r   r   r1   s                  r   updatezCespClass.update  sr   _	:''-- 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( 
< D=OOE488E?;
<  (0Cd"/0778I8Z8Z^`8`ahh  ~Ch  D!%k!2!8bnd3!/ ')%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#'& *T1>?FF4EEK&U&3#'(B#C #
3CT(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$-l$; '5)%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X/ CX/ (TX/ /	Y*8'Y%Y*%Y*softc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS |rQt        j                         |_        t        j                         |_	        | j                   j                          dddS | j                   j                  t              j                  t        j                  |k(        j                  d       | j                   j                  t              j                  t        j                  |k(        j                  d       | j                   j                  t              j                  t        j                  |k(        j                  d       | j                   j                  |       | j                   j                          dddS # t         $ r2}| j                   j#                          dt%        |      dcY d	}~S d	}~ww xY w)
z:Elimina por id. soft=True hace soft delete (deleted_date).rr   r   r   rn   zCESP eliminado (soft).Fr   zCESP eliminado.N)r#   r+   r   ru   r)   rx   r   r   rO   rN   r   r   rT   r   r   r   r.   r   r   )r%   r)   r   r3   r1   s        r   r   z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 )D&G 	H'H HH)NF)T)__name__
__module____qualname__r	   r&   r   r   r2   r   r   rP   r   r]   r   rc   r   rh   r   r   boolr   r   r   r   r   r   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   