
    Wi=-                     h    S SK JrJrJr  S SKJr  S SKJrJr  S SKJ	r	  S\\   4S jr
 " S S5      rg	)
    )OptionalAnyList)Session)datetimedate)FamilyReportModelreturnc                     U c  g[        U [        5      (       a  U $ [        U [        5      (       a&   [        R                  " U S5      R                  5       $ g! [
         a     gf = f)z(Convierte string a date si es necesario.N%Y-%m-%d)
isinstancer   strr   strptime
ValueError)values    YC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\family_report_class.py_parse_dater      sc    }%%	$$UJ7<<>>   		s   $A 
A%$A%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\
4S
 jrSS	\\	   S\
4S jjrS\S\
4S jrS\	S\S\
4S jrS\	S\
4S jrSrg)FamilyReportClass   dbc                     Xl         g Nr   )selfr   s     r   __init__FamilyReportClass.__init__   s        reportr
   c                    0 SUR                   _SUR                  _SUR                  _SUR                  _SUR                  (       a  UR                  R                  S5      OS_SUR                  (       a  UR                  R                  S5      OS_S	UR                  _S
UR                  _SUR                  _SUR                  (       a  UR                  R                  S5      OS_SUR                  _SUR                  _SUR                  _SUR                  _SUR                  _SUR                   _SUR"                  _0 SUR$                  _SUR&                  _SUR(                  (       a  UR(                  R                  S5      OS_SUR*                  _SUR,                  _SUR.                  _SUR0                  _SUR2                  _SUR4                  _SUR6                  _SUR8                  _S UR:                  _S!UR<                  _S"UR>                  (       a  UR>                  R                  S5      OS_S#UR@                  _S$URB                  _S%URD                  _EURF                  URH                  URJ                  URL                  URN                  URP                  URR                  URT                  URV                  (       a  URV                  R                  S5      OSURX                  (       a  URX                  R                  S5      OSURZ                  (       a  URZ                  R                  S5      S&.E$ SS&.E$ )'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/   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   rK   rL   rM   )r   r   s     r   _report_to_dict!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                 "    U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       a  U R                  U5      $ SSS.$ ! [         a  nS[        U5      S.s SnA$ SnAff = f)z#Obtiene un informe familiar por ID.errorInforme familiar no encontrado.statusmessageN)	r   queryr	   filterr!   firstrO   	Exceptionr   r   r!   r   es       r   get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6B	B	Br"   c                 x    U R                   R                  [        5      R                  [        R                  U:H  5      R                  [        R                  R                  5       5      R                  5       nU(       a  U R                  U5      $ SSS.$ ! [         a  nS[        U5      S.s SnA$ SnAff = f)u9   Obtiene el informe familiar más reciente por student_id.rR   u6   No se encontró informe familiar para este estudiante.rT   N)r   rW   r	   rX   r"   order_byr!   descrY   rO   rZ   r   )r   r"   r   r\   s       r   get_by_student_id#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 
B9!B4.B94B9Nc                     U R                   R                  [        5      nUb"  UR                  [        R                  U:H  5      nUR                  [        R                  R                  5       5      R                  5       nU Vs/ s H  o@R                  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 informes familiares, opcionalmente filtrados por student_id.NrR   rT   )r   rW   r	   rX   r"   r`   r!   ra   allrO   rZ   r   )r   r"   rW   reportsrr\   s         r   get_allFamilyReportClass.get_alld   s    	:GGMM"34E%%6%A%AZ%OPnn%6%9%9%>%>%@AEEGG5<=W((+W=== 	:%#a&99	:s0   BB' B"B' "B' '
C	1C>C	C	datac           
      @	    UR                  S5      nUR                  S5      =(       d    SnU R                  R                  [        5      R	                  [        R
                  U:H  [        R                  U:H  5      R                  [        R                  R                  5       5      R                  5       nU(       a  UR                  S-   OSn[        S50 SU_SU_SU_SUR                  S5      _SUR                  S5      _SUR                  S5      _S	[        UR                  S	5      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      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      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      5      _S+[        UR                  S+5      5      _S,[        UR                  S,5      5      _S-[        R                  " 5       _S.[        R                  " 5       _6nU R                  R                  U5        U R                  R                  5         U R                  R!                  U5        S/S0UR"                  S1.$ ! [$         a2  nU R                  R'                  5         S2[)        U5      S3.s S4nA$ S4nAff = f)6uh   
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/   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   rK   rL   rM   r%   r&   successz$Informe familiar creado exitosamenterU   rV   r!   rR   rT   N )r]   r   rW   r	   rX   r"   r#   r`   r$   ra   rY   r   r   nowaddcommitrefreshr!   rZ   rollbackr   )r   rj   r"   r#   last_reportr$   
new_reportr\   s           r   store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                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ 1 SknUR                  5        H?  u  pV[        X55      (       d  M  XT;   a  [        X5[        U5      5        M3  [        X5U5        MA     [        R                  " 5       Ul        U R                   R                  5         U R                   R                  U5        SSUR                  S.$ ! [         a2  nU R                   R!                  5         S[#        U5      S.s SnA$ SnAff = f)	z(Actualiza un informe familiar existente.rR   rS   rT   >   r?   rK   rL   rM   r*   r4   rn   z)Informe familiar actualizado exitosamentero   N)r   rW   r	   rX   r!   rY   itemshasattrsetattrr   r   rq   r&   rs   rt   rZ   ru   r   )r   r!   rj   r   date_fieldskeyr   r\   s           r   updateFamilyReportClass.update   s   	:WW]]#45<<=N=Q=QUW=WX^^`F")6WXXK #jjl
6'')[-?@U3 + #+,,.FGGNNGGOOF#'4_gmgpgpqq 	:GG%#a&99	:s+   AD 'D B
D 
E'EEEc                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ 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 un informe familiar.rR   rS   rT   rn   z'Informe familiar eliminado exitosamenteN)r   rW   r	   rX   r!   rY   deleters   rZ   ru   r   r[   s       r   r   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   r   )__name__
__module____qualname____firstlineno__r   r   r	   dictrO   intr   r]   rb   r   rh   rx   r   r   __static_attributes__rp   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   rp   r   r   <module>r      s0    & & " # 3(4. R: R:r   