
    ]i=-                     f    d dl mZmZmZ d dlmZ d dlmZmZ d dlm	Z	 dee   fdZ
 G d d      Zy	)
    )OptionalAnyList)Session)datetimedate)FamilyReportModelreturnc                     | yt        | t              r| S t        | t              r%	 t        j                  | d      j                         S y# t
        $ r Y yw xY w)z(Convierte string a date si es necesario.N%Y-%m-%d)
isinstancer   strr   strptime
ValueError)values    P/var/www/pie360backend.cl/public_html/app/backend/classes/family_report_class.py_parse_dater      s]    }%%	$$UJ7<<>>   		s   #A 	AAc                       e Zd Z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	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y
)FamilyReportClassdbc                     || _         y N)r   )selfr   s     r   __init__zFamilyReportClass.__init__   s	        reportr
   c                 L   i d|j                   d|j                  d|j                  d|j                  d|j                  r|j                  j                  d      ndd|j                  r|j                  j                  d      ndd	|j                  d
|j                  d|j                  d|j                  r|j                  j                  d      ndd|j                  d|j                  d|j                  d|j                  d|j                  d|j                   d|j"                  i d|j$                  d|j&                  d|j(                  r|j(                  j                  d      ndd|j*                  d|j,                  d|j.                  d|j0                  d|j2                  d|j4                  d|j6                  d|j8                  d |j:                  d!|j<                  d"|j>                  r|j>                  j                  d      ndd#|j@                  d$|jB                  d%|jD                  |jF                  |jH                  |jJ                  |jL                  |jN                  |jP                  |jR                  |jT                  |jV                  r|jV                  j                  d      nd|jX                  r|jX                  j                  d      nd|jZ                  r|jZ                  j                  d      d&S dd&S )'z*Convierte un modelo a dict para respuesta.id
student_iddocument_type_idversion
added_datez%Y-%m-%d %H:%M:%SNupdated_datestudent_full_namestudent_identification_numberstudent_social_namestudent_born_dater   student_agestudent_coursestudent_schoolprofessional_id"professional_identification_numberprofessional_social_nameprofessional_roleprofessional_phoneprofessional_emailreport_delivery_datereceiver_full_namereceiver_identification_numberreceiver_social_namereceiver_phonereceiver_emailreceiver_relationshipreceiver_presence_ofguardian_typehas_power_of_attorneyevaluation_typeevaluation_dateapplied_instruments	diagnosispedagogical_strengths)pedagogical_support_needssocial_affective_strengthssocial_affective_support_needshealth_strengthshealth_support_needscollaborative_workhome_supportagreements_commitmentsevaluation_date_1evaluation_date_2evaluation_date_3).r   r   r    r!   r"   strftimer#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   )r   r   s     r   _report_to_dictz!FamilyReportClass._report_to_dict   s   .
&)).
&++.
  7 7.
 v~~	.

 VM^M^&++445HIdh.
 QWQdQdF//889LMjn.
  !9!9.
 ,V-Q-Q.
 "6#=#=.
  RXRjRj!9!9!B!B:!Npt.
 6--.
 f33.
 f33.
 v55.
 1&2[2[.
  '(G(G!.
"  !9!9#.
$ !&";";%.
& !&";";'.
( #X^XsXsF$?$?$H$H$Ty}).
* !&";";+.
, -f.S.S-.
. #F$?$?/.
0 f331.
2 f333.
4 $V%A%A5.
6 #F$?$?7.
8 V119.
: $V%A%A;.
< v55=.
> fNdNdv55>>zJjn?.
@ "6#=#=A.
B ))C.
D $V%A%AE.
F *0)I)I*0*K*K.4.S.S & 7 7$*$?$?"(";";"//&,&C&CRXRjRj!9!9!B!B:!NptRXRjRj!9!9!B!B:!NptRXRjRj!9!9!B!B:!N[.
 .	
Z qu[.
 .	
r   r   c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|r| j                  |      S dddS # t        $ r}dt        |      dcY d}~S d}~ww xY w)z#Obtiene un informe familiar por ID.errorInforme familiar no encontrado.statusmessageN)	r   queryr	   filterr   firstrL   	Exceptionr   r   r   r   es       r   getzFamilyReportClass.getK   sz    	:WW]]#45<<=N=Q=QUW=WX^^`F++F33%2STT 	:%#a&99	:s$   AA' "A' '	B0B=BBr   c                 l   	 | j                   j                  t              j                  t        j                  |k(        j                  t        j                  j                               j                         }|r| j                  |      S dddS # t        $ r}dt        |      dcY d}~S d}~ww xY w)u9   Obtiene el informe familiar más reciente por student_id.rN   u6   No se encontró informe familiar para este estudiante.rP   N)r   rS   r	   rT   r   order_byr   descrU   rL   rV   r   )r   r   r   rX   s       r   get_by_student_idz#FamilyReportClass.get_by_student_idU   s    	:/0)44
BC+..3356	  ++F33%2jkk 	:%#a&99	:s$   B
B B 	B3B.(B3.B3Nc                    	 | j                   j                  t              }|"|j                  t        j                  |k(        }|j                  t        j                  j                               j                         }|D cg c]  }| j                  |       c}S c c}w # t        $ r}dt        |      dcY d}~S d}~ww xY w)zBLista informes familiares, opcionalmente filtrados por student_id.NrN   rP   )r   rS   r	   rT   r   r[   r   r\   allrL   rV   r   )r   r   rS   reportsrrX   s         r   get_allzFamilyReportClass.get_alld   s    	:GGMM"34E%%6%A%AZ%OPnn%6%9%9%>%>%@AEEGG5<=D((+=== 	:%#a&99	:s0   BB$ BB$ B$ $	C-C :C Cdatac           
      &	   	 |j                  d      }|j                  d      xs d}| j                  j                  t              j	                  t        j
                  |k(  t        j                  |k(        j                  t        j                  j                               j                         }|r|j                  dz   nd}t        d5i d|d|d|d|j                  d      d|j                  d      d|j                  d      d	t        |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            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            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*            d+t        |j                  d+            d,t        |j                  d,            d-t        j                         d.t        j                         }| j                  j                  |       | j                  j                          | j                  j!                  |       d/d0|j"                  d1S # t$        $ r2}| j                  j'                          d2t)        |      d3cY d4}~S d4}~ww xY w)6u   
        Almacena un nuevo informe familiar.
        Si ya existe uno para el mismo student_id, incrementa la versión.
        r   r          r!   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   r"   r#   successz$Informe familiar creado exitosamenterQ   rR   r   rN   rP   N )rY   r   rS   r	   rT   r   r    r[   r!   r\   rU   r   r   nowaddcommitrefreshr   rV   rollbackr   )r   rc   r   r    last_reportr!   
new_reportrX   s           r   storezFamilyReportClass.storeo   s   
F	:,/J#xx(:;@q /0%00J>%66:JJ +3388:;  4?{**Q.AG* -%-!1-  - #'((+>"?	-
 /3hh7V.W- %)HH-B$C- #.dhh7J.K"L- !HH]3-  $xx(89-  $xx(89- !%): ;- 4888<`3a- *.2L)M- #'((+>"?- $(88,@#A-  $(88,@#A!-" &1:P1Q%R#-$ $(88,@#A%-& 04xx8X/Y'-( &*XX.D%E)-*  $xx(89+-,  $xx(89--. '+hh/F&G/-0 &*XX.D%E1-2 #hh73-4 '+hh/F&G5-6 !%): ;7-8 !,DHH5F,G H9-: %)HH-B$C;-< ((;/=-> '+hh/F&G?-@ +/((3N*OA-B ,0884P+QC-D 04xx8X/YE-F "&*<!=G-H &*XX.D%EI-J $(88,@#AK-L "XXn5M-N (,xx0H'IO-P #.dhh7J.K"LQ-R #.dhh7J.K"LS-T #.dhh7J.K"LU-V $<<>W-X &\\^Y-J^ GGKK
#GGNNGGOOJ''4Zblbobopp 	:GG%#a&99	:s   QQ 	R'RRRc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS h d}|j                         D ]:  \  }}t        ||      s||v rt        ||t        |             .t        |||       < 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)	z(Actualiza un informe familiar existente.rN   rO   rP   >   r<   rH   rI   rJ   r'   r1   rg   z)Informe familiar actualizado exitosamenterh   N)r   rS   r	   rT   r   rU   itemshasattrsetattrr   r   rj   r#   rl   rm   rV   rn   r   )r   r   rc   r   date_fieldskeyr   rX   s           r   updatezFamilyReportClass.update   s   	:WW]]#45<<=N=Q=QUW=WX^^`F")6WXXK #jjl 4
U63'k)[-?@U34 #+,,.FGGNNGGOOF#'4_gmgpgpqq 	:GG%#a&99	:s+   AD &D =BD 	E 'D;5E ;E c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS | 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 un informe familiar.rN   rO   rP   rg   z'Informe familiar eliminado exitosamenteN)r   rS   r	   rT   r   rU   deleterl   rV   rn   r   rW   s       r   rz   zFamilyReportClass.delete   s    		:WW]]#45<<=N=Q=QUW=WX^^`F")6WXXGGNN6"GGNN'4]^^ 	:GG%#a&99	:s$   AB 9B 	C'C CCr   )__name__
__module____qualname__r   r   r	   dictrL   intr   rY   r]   r   rb   rq   rx   rz   ri   r   r   r   r      s    7 0
&7 0
D 0
d:c :c ::C :C :	:(3- 	:3 	:K:$ K:3 K:Z: :D :S :@: : :r   r   N)typingr   r   r   sqlalchemy.ormr   r   r   app.backend.db.modelsr	   r   r   ri   r   r   <module>r      s0    & & " # 3(4. R: R:r   