
    Zi0<                         S SK JrJrJr  S SKJr  S SKJrJr  S SKrS SK	J
r
JrJrJrJr  Sr1 Sk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5      rg)    )OptionalAnyList)Session)datetimedateN)AnamnesisModelAnamnesisInformantModelAnamnesisInterviewerModelAnamnesisHouseholdMemberModelFolderModel   >   rewards
supportersspecialistsresponse_successlanguage_used_domainfirst_year_conditionsresponse_difficultiesnative_language_domainvaluereturnc                     U c  g [        U [        5      (       a  U $ [        U [        5      (       a&   [        R                  " U S5      R                  5       $ g ! [
         a     g f = f)N%Y-%m-%d)
isinstancer   strr   strptime	Exceptionr   s    UC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\anamnesis_class.py_parse_dater!      sc    }%%	$$UJ7<<>>   		s   $A 
A%$A%c                     U c  g [        U [        5      (       a  U $  [        R                  " U SS9$ ! [         a     g f = f)NF)ensure_ascii)r   r   jsondumpsr   r   s    r    _to_json_valuer&   ,   sD    }%zz%e44 s   2 
??c                 h    U b  U S:X  a  g  [         R                  " U 5      $ ! [         a    U s $ f = f)N )r$   loadsr   r   s    r    _from_json_valuer*   7   s8    }zz%   s   " 11recc                    0 n[         R                  R                   H  nUR                  n[	        XS5      nU[
        ;   a  [        U5      X'   M4  [        U[        5      (       a  U(       a  UR                  S5      OSX'   Mg  [        U[        5      (       a  U(       a  UR                  S5      OSX'   M  XAU'   M     UR                  S5      n[        U[        5      (       a#  SU;   a  UR                  S5      =(       d    SUS'   U$ )z=Convierte un AnamnesisModel a diccionario para respuesta API.Nr   z%Y-%m-%d %H:%M:%Sr   otrasr(   #first_year_conditions_other_specify)r	   	__table__columnsnamegetattrANAMNESIS_JSON_FIELDSr*   r   r   strftimer   getdict)r+   outcolr1   valfycs         r    _anamnesis_model_to_dictr;   @   s    
C''//xxc&(((-CIT""47Z0TCIX&&=@%89dCII 0 '')
*C#tC58WWW5E5K12J    c            	           \ rS rSrS\4S jrS\S\4S jrS\S\4S jr	   SS\
\   S
\
\   S\S\4S jjrS\S\SS	4S jrS\S\4S jrS\S\S\4S jrSrg	)AnamnesisClassT   dbc                     Xl         g )Nr@   )selfr@   s     r    __init__AnamnesisClass.__init__U   s    r<   idr   c                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ [        U5      nU R                   R                  [        5      R                  [        R                  U:H  5      R                  [        R                  [        R                  5      R                  5       nU Vs/ s Hj  nUR                  UR                  UR                  UR                  UR                  UR                  (       a  UR                  R!                  S5      OSS.PMl     snUS'   U R                   R                  ["        5      R                  ["        R                  U:H  5      R                  ["        R                  ["        R                  5      R                  5       nU Vs/ s H_  nUR                  UR                  UR$                  UR&                  UR                  (       a  UR                  R!                  S5      OSS.PMa     snUS	'   U R                   R                  [(        5      R                  [(        R                  U:H  5      R                  [(        R                  [(        R                  5      R                  5       nU Vs/ s HS  nUR                  UR                  UR                  UR                  UR*                  UR,                  UR.                  S
.PMU     snUS'   U$ s  snf s  snf s  snf ! [0         a  n	S[3        U	5      S.s Sn	A	$ Sn	A	ff = f)z\Obtiene una anamnesis por su ID (incluye informantes, entrevistadores y miembros del hogar).errorAnamnesis no encontrada.statusmessager   N)rF   
sort_orderr1   relationshippresenceinterview_date
informants)rF   rM   professional_idrolerP   interviewers)rF   rM   r1   rN   age	schooling
occupationhousehold_members)r@   queryr	   filterrF   firstr;   r
   anamnesis_idorder_byrM   allr1   rN   rO   rP   r4   r   rR   rS   r   rU   rV   rW   r   r   )
rC   rF   r+   resultrQ   irT   	householdhes
             r    r5   AnamnesisClass.getX   s   =	:''--/66~7H7HB7NOUUWC")6PQQ-c2F 56/<<BC1<<>U>X>XY	  $
$ $A $$"#,,FF$%NN !

OPO_O_a&6&6&?&?
&Kei $
$F<  781>>"DE3>>@Y@\@\]	  &	& &A $$"#,,'('8'8FFOPO_O_a&6&6&?&?
&Kei &	&F>" ;<5BBbHI7BBDaDdDde	   #+ #A $$"#,,FF$%NN55!""#,, #+F&' M_
$$	&"+  	:%#a&99	:sT   AL1 BL1 #A1L"BL1 A&L'=BL1  AL,L1 "L1 1
M;MMM
student_idc                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  [        R                  R                  5       5      R                  5       nU(       d  SSS.$ U R                  UR                  5      $ ! [         a  nS[        U5      S.s SnA$ SnAff = f)uC   Obtiene la anamnesis más reciente de un estudiante por student_id.rH   u/   No se encontró anamnesis para este estudiante.rJ   N)r@   rY   r	   rZ   re   r]   rF   descr[   r5   r   r   )rC   re   r+   rc   s       r    get_by_student_id AnamnesisClass.get_by_student_id   s    	:n-11Z?@.++0023	  ")6ghh88CFF## 	:%#a&99	:s$   BB! B! !
C+B>8C>CNpageper_pagec                     U R                   R                  [        5      nUb"  UR                  [        R                  U:H  5      nUR                  [        R                  R                  5       5      nUb,  US:  a&  UR                  US-
  U-  5      R                  U5      nUR                  5       nU Vs/ s H  n[        U5      PM     sn$ s  snf ! [         a  nS[        U5      S.s SnA$ SnAff = f)zBLista anamnesis; opcionalmente filtrada por student_id y paginada.Nr      rH   rJ   )r@   rY   r	   rZ   re   r]   rF   rg   offsetlimitr^   r;   r   r   )rC   re   rj   rk   rY   rowsrrc   s           r    get_allAnamnesisClass.get_all   s    
	:GGMM.1E%^%>%>*%LMNN>#4#4#9#9#;<EHqLdQh(%:;AA(K99;D9=>A,Q/>>> 	:%#a&99	:s0   B4C 6CC C 
C5C0*C50C5r+   datac                    1 SknUR                  S5      nUb  [        U5      Ul        UR                  S5      nUc  SU;   a  UR                  S5      nUb  US:w  a  [        U5      OSUl        UR                  S:X  a  SUl        UR                  5        HK  u  pgXc;   a  M  [        X5      (       d  M  U[        ;   a  [        X[        U5      5        M?  [        XU5        MM     g)zTAplica los campos de data al modelo (sin informants/interviewers/household_members).>   rF   	born_date
birth_typerQ   rT   birth_type_idrX   r.   rv   Nrx   rw   r(   rm   )r5   r!   rv   intrx   birth_reasonitemshasattrr3   setattrr&   )rC   r+   rt   skiprv   bt_idkeyr   s           r    _apply_data_to_model#AnamnesisClass._apply_data_to_model   s     \HH[)	 '	2CM)=\T1HH\*E.3rkE
tC!#C**,JC{3$$++."78%( 'r<   c                 6    UR                  S5      nUc  SSS.$ U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  [        R                  R                  5       5      R                  5       nU(       a  U R                  UR                  U5      $ U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  [        R                  R                  5       5      R                  5       nU(       a  UR                  S-   OSnUR                  5        VVs0 s H  u  pgUS;  d  M  Xg_M     nnnSU;   a[  UR                  S	5      =(       d    0 n	[        U	[        5      (       a,  [        U	5      n	UR                  S5      =(       d    S
U	S'   XS	'   UR                  S5      =(       d    UUS'   [        R                   " 5       US'   [        R                   " 5       US'   [        X(S   US   US   S9n
U R#                  X5        U R                  R%                  U
5        U R                  R'                  5         [)        UR                  S5      =(       d    / 5       H  u  p[+        U
R                  UR                  SU5      UR                  S5      UR                  S5      UR                  S5      [-        UR                  S5      5      S9nU R                  R%                  U5        M     [)        UR                  S5      =(       d    / 5       H}  u  p[/        U
R                  UR                  SU5      UR                  S5      UR                  S5      [-        UR                  S5      5      S9nU R                  R%                  U5        M     [)        UR                  S5      =(       d    / 5       H  u  p[1        U
R                  UR                  SU5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      S9nU R                  R%                  U5        M     U R                  R                  [2        5      R	                  [2        R
                  U:H  [2        R4                  [6        :H  5      R                  [2        R8                  R                  5       5      R                  5       nU(       a  UR8                  S-   OSn[3        U[6        UU
R                  S[        R                   " 5       [        R                   " 5       S 9nU R                  R%                  U5        U R                  R;                  5         U R                  R=                  U
5        S!S"U
R                  S#.$ s  snnf ! [>         a2  nU R                  RA                  5         S[C        U5      S.s SnA$ SnAff = f)$zCrea o actualiza anamnesis: si ya existe para el estudiante, actualiza (borra y recarga informantes, entrevistadores, miembros del hogar); si no, crea nueva.re   NrH   zstudent_id es requerido.rJ   rm   rQ   rT   rX   r.   r   r(   r-   version
added_dateupdated_date)re   r   r   r   rQ   rM   r1   rN   rO   rP   r\   rM   r1   rN   rO   rP   rT   rR   rS   r\   rM   rR   rS   rP   rX   rU   rV   rW   r\   rM   r1   rN   rU   rV   rW   )re   document_id
version_id	detail_idfiler   r   successzAnamnesis creada correctamente.rK   rL   rF   )"r5   r@   rY   r	   rZ   re   r]   rF   rg   r[   updater   r{   r   r6   r   nowr   addflush	enumerater
   r!   r   r   r   r   ANAMNESIS_DOCUMENT_IDr   commitrefreshr   rollbackr   )rC   rt   re   existinglastr   kvpayloadr:   r+   r`   iteminvrb   last_foldernew_version_idfolderrc   s                      r    storeAnamnesisClass.store   s   c	:,/J!")6PQQ n-11Z?@.++0023	  {{8;;55 n-11Z?@.005578	  -1t||a'aG(,

uAt8ttqtGu4<kk"9:@bc4((s)C#'88,Q#R#XVXCL7:34!%)!4!?GI$,LLNGL!&.llnGN# J	@R_fgs_t  DK  LZ  D[  \C%%c3GGKKGGMMO %TXXl%;%ArB-!$#xxa8&)!%.!9!XXj1#.txx8H/I#J C  C %TXXn%=%CD/!$#xxa8$(HH->$?&)#.txx8H/I#J C  E %TXX.A%B%HbI1!$#xxa8&)!%.!9"hh{3#xx5 A J k***j8++/DD +005578  >Ik44q8aN %1)&&#<<>%\\^F GGKKGGNNGGOOC '4U]`]c]cddS vT  	:GG%#a&99	:sC   W BW 6B#W W)W/Q&W W 
X&'XXXc                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ [        R                  " 5       Ul        UR                  5        VVs0 s H  u  pEUS;  d  M  XE_M     nnnSU;   a[  UR                  S5      =(       d    0 n[        U[        5      (       a,  [        U5      nUR                  S5      =(       d    SUS'   XvS'   U R                  X65        U R                   R                  [        5      R                  [        R                  U:H  5      R!                  5         U R                   R                  ["        5      R                  ["        R                  U:H  5      R!                  5         U R                   R                  [$        5      R                  [$        R                  U:H  5      R!                  5         ['        UR                  S	5      =(       d    / 5       H  u  p[        UU	R                  S
U5      U	R                  S5      U	R                  S5      U	R                  S5      [)        U	R                  S5      5      S9n
U R                   R+                  U
5        M     ['        UR                  S5      =(       d    / 5       Hs  u  p[#        UU	R                  S
U5      U	R                  S5      U	R                  S5      [)        U	R                  S5      5      S9n
U R                   R+                  U
5        Mu     ['        UR                  S5      =(       d    / 5       H  u  p[%        UU	R                  S
U5      U	R                  S5      U	R                  S5      U	R                  S5      U	R                  S5      U	R                  S5      S9nU R                   R+                  U5        M     U R                   R-                  5         U R                   R/                  U5        SSUR                  S.$ s  snnf ! [0         a2  nU R                   R3                  5         S[5        U5      S.s SnA$ SnAff = f)z`Actualiza una anamnesis existente y reemplaza informantes, entrevistadores y miembros del hogar.rH   rI   rJ   r   r.   r   r(   r-   rQ   rM   r1   rN   rO   rP   r   rT   rR   rS   r   rX   rU   rV   rW   r   r   z$Anamnesis actualizada correctamente.r   N)r@   rY   r	   rZ   rF   r[   r   r   r   r{   r5   r   r6   r   r
   r\   deleter   r   r   r!   r   r   r   r   r   r   )rC   rF   rt   r+   r   r   r   r:   r`   r   r   rb   rc   s                r    r   AnamnesisClass.update;  sl   7	:''--/66~7H7HB7NOUUWC")6PQQ'||~C(,

uAt8ttqtGu4<kk"9:@bc4((s)C#'88,Q#R#XVXCL7:34%%c3 GGMM1299:Q:^:^bd:dellnGGMM34;;<U<b<bfh<hipprGGMM78??@]@j@jnp@pqxxz$TXXl%;%ArB-!##xxa8&)!%.!9!XXj1#.txx8H/I#J C  C %TXXn%=%CD/!##xxa8$(HH->$?&)#.txx8H/I#J C  E %TXX.A%B%HbI1!##xxa8&)!%.!9"hh{3#xx5 A J GGNNGGOOC '4Zbebhbhii_ v`  	:GG%#a&99	:s=   AP: -P: P4P4NP: 4P: :
Q6'Q1+Q61Q6rB   )NN
   )__name__
__module____qualname____firstlineno__r   rD   ry   r   r5   rh   r   rr   r	   r6   r   r   r   __static_attributes__ r<   r    r>   r>   T   s    7 ?:c ?:c ?:B:C :C :" %)"	:SM: sm: 	:
 
:&) )d )t )2e:$ e:3 e:N9: 9:D 9:S 9:r<   r>   )typingr   r   r   sqlalchemy.ormr   r   r   r$   app.backend.db.modelsr	   r
   r   r   r   r   r3   r!   r   r&   r*   r6   r;   r>   r   r<   r    <module>r      s    & & " #    	 
s 
x~ 
# (3- HSM c . T (`: `:r<   