
    ]i*[                     X    d dl mZmZ d dlmZ d dlmZmZ d dlZd dlm	Z	  G d d      Z
y)    )OptionalAny)Session)datetimedateN)$ProgressStatusIndividualSupportModelc                       e Zd Z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	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)$ProgressStatusIndividualSupportClassdbc                     || _         y )N)r   )selfr   s     e/var/www/pie360backend.cl/public_html/app/backend/classes/progress_status_individual_support_class.py__init__z-ProgressStatusIndividualSupportClass.__init__	   s	        idreturnc           	         	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|rd}|j                  r 	 t        j                  |j                        }i d|j                  d|j                  d|j                  d|j                  d|j                  d|j                  d|j                  r|j                  j!                  d	      ndd
|j"                  d|j$                  d|j&                  d|j(                  d|j*                  r|j*                  j!                  d	      ndd|j,                  d|j.                  d|j0                  d|j2                  d|j4                  ||j6                  |j8                  |j:                  |j<                  r|j<                  j!                  d      nd|j>                  r|j>                  j!                  d      nddS dddS #  |j                  }Y xY w# t@        $ r}tC        |      }d|dcY d}~S d}~ww xY w)z<
        Obtiene un estado de avance PAI por su ID.
        Nr   
student_id	school_iddocument_type_idstudent_full_namestudent_identification_numberstudent_born_date%Y-%m-%dstudent_agestudent_nee_idstudent_schoolstudent_course_idprogress_date	period_idguardian_relationship_idguardian_nameresponsible_professionalsselected_pai_id%Y-%m-%d %H:%M:%Spai_objectivespai_observationssuggestions_familysuggestions_establishment
added_dateupdated_dateerrorzBNo se encontraron datos para el estado de avance PAI especificado.statusmessage)"r   queryr   filterr   deleted_datefirstr'   jsonloadsr   r   r   r   r   r   strftimer   r   r   r   r   r    r!   r"   r#   r$   r(   r)   r*   r+   r,   	Exceptionstr)r   r   progress_statusr'   eerror_messages         r   getz(ProgressStatusIndividualSupportClass.get   s   -	A"ggmm,PQXX4772=4AATI eg 
 !%"11H)-O4R4R)S/,, /"<"<  !:!: '(H(H	
 ()J)J 4_5b5b (cr  dE  dE)J)J)S)ST^)_  KO "?#>#> %o&D&D %o&D&D ()J)J $[j[x[x_%B%B%K%KJ%W  C  !:!: /0X0X $_%B%B  01Z1Z!" &'F'F#$ '5(7(H(H*9*L*L1@1Z1Z^m^x^x/"<"<"E"EFY"Z  Cbqb~b~O$@$@$I$IJ]$^  EI/ 4 #*6z{{;H)8)G)G<  	AFM%-@@	As=   A0H9 3H% FH9  H9 %H63H9 9	IIIIr   c           	         	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                  t        j                  j                               j                         }|rd}|j                  r 	 t        j                  |j                        }i d|j                  d|j                  d|j                  d|j                  d|j                  d|j                   d|j"                  r|j"                  j%                  d	      ndd
|j&                  d|j(                  d|j*                  d|j,                  d|j.                  r|j.                  j%                  d	      ndd|j0                  d|j2                  d|j4                  d|j6                  d|j8                  ||j:                  |j<                  |j>                  |j@                  r|j@                  j%                  d      nd|jB                  r|jB                  j%                  d      nddS dddS #  |j                  }Y xY w# tD        $ r}tG        |      }d|dcY d}~S d}~ww xY w)uS   
        Obtiene el último estado de avance PAI por el ID del estudiante.
        Nr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r-   zQNo se encontraron datos para el estado de avance PAI del estudiante especificado.r.   )$r   r1   r   r2   r   r3   order_byr   descr4   r'   r5   r6   r   r   r   r   r   r7   r   r   r   r   r   r    r!   r"   r#   r$   r(   r)   r*   r+   r,   r8   r9   )r   r   r:   r'   r;   r<   s         r   get_by_student_idz6ProgressStatusIndividualSupportClass.get_by_student_id?   s   -	A"ggmm,PQXX4??:M4AATI h;>>CCEFuuw 
 !%"11H)-O4R4R)S/,, /"<"<  !:!: '(H(H	
 ()J)J 4_5b5b (cr  dE  dE)J)J)S)ST^)_  KO "?#>#> %o&D&D %o&D&D ()J)J $[j[x[x_%B%B%K%KJ%W  C  !:!: /0X0X $_%B%B  01Z1Z!" &'F'F#$ '5(7(H(H*9*L*L1@1Z1Z^m^x^x/"<"<"E"EFY"Z  Cbqb~b~O$@$@$I$IJ]$^  EI/ 4 #*  7J  K  K;H)8)G)G<  	AFM%-@@	As=   BI$ I =FI$ I$ I!I$ $	J-J<JJNr   c                    	 | j                   j                  t              j                  t        j                  dk(        }|"|j                  t        j
                  |k(        }|"|j                  t        j                  |k(        }|j                  t        j                  j                               j                         }g }|D ]  }d}|j                  r 	 t        j                  |j                        }|j                  i d|j                  d|j
                  d|j                  d|j                  d|j                   d|j"                  d|j$                  r|j$                  j'                  d	      ndd
|j(                  d|j*                  d|j,                  d|j.                  d|j0                  r|j0                  j'                  d	      ndd|j2                  d|j4                  d|j6                  d|j8                  d|j:                  ||j<                  |j>                  |j@                  |jB                  r|jB                  j'                  d      nd|jD                  r|jD                  j'                  d      ndd        |S #  |j                  }Y xY w# tF        $ r}dtI        |      dcY d}~S d}~ww xY w)z|
        Obtiene la lista de estados de avance PAI almacenados.
        Puede filtrarse por student_id y school_id.
        Nr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r-   r.   )%r   r1   r   r2   r3   r   r   r?   r   r@   allr'   r5   r6   appendr   r   r   r   r7   r   r   r   r   r   r    r!   r"   r#   r$   r(   r)   r*   r+   r,   r8   r9   )	r   r   r   r1   progress_statusesresultpsr'   r;   s	            r   get_allz,ProgressStatusIndividualSupportClass.get_allr   s   
7	GGMM"FGNN4AATIE %%I%T%TXb%bc$%I%S%SW`%`a %/S/V/V/[/[/] ^ b b dF' !!%$$;)-B4E4E)F  "%% "--   '(;(;	
 ()=)= 4R5U5U (VXVjVj)=)=)F)Fz)Rpt "2>> %b&7&7 %b&7&7 ()=)= $bN^N^R%5%5%>%>z%Jdh   /0K0K $R%5%5  01M1M!" &r'9'9#$ '5(*(;(;*,*?*?131M1MQSQ^Q^"--"8"89L"MdhUWUdUdBOO$<$<=P$Qjn/ !F M;;)+):):<  	!q6 	s7   CJ0 J:F!J0 J-*J0 0	K9KKKdatac           	      D   	 d}|j                  d      ret        |j                  d      t              r5	 t        j                  |j                  d      d      j                         }n|j                  d      }d}|j                  d      ret        |j                  d      t              r5	 t        j                  |j                  d      d      j                         }n|j                  d      }d}|j                  d      rt        |j                  d      t              rg }|j                  d      D ]a  }t        |d      r |j                  |j                                /t        |t              r|j                  |       Q|j                  |       c t        j                  |      }n0t        |j                  d      t              r|j                  d      }|j                  d      }|j                  d      }|j                  d	d
      }	|j                  d      }
d}|||	|
| j                  j                  t              j                  t        j                   |k(  t        j"                  |k(  t        j$                  |	k(  t        j&                  |
k(  t        j(                  dk(        j+                         }|r9d|v r|j                  d      |_        d|v r|j                  d      |_        d	|v r|j                  d	      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r||_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r||_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_         d|v r|j                  d      |_!        d|v r||_"        d|v r|j                  d      |_#        d|v r|j                  d      |_$        d|v r|j                  d      |_%        t        jL                         |_'        | j                  jQ                          | j                  jS                  |       dd|jT                  dS t        d!i d|j                  d      d|j                  d      d	|j                  d	d
      d|j                  d      d|j                  d      d|d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|d|j                  d      d|j                  d      d|j                  d      dt        jL                         dt        jL                         }| j                  jW                  |       | j                  jQ                          | j                  jS                  |       dd|jT                  dS #  d}Y ]xY w#  d}Y xY w# tX        $ r2}| j                  j[                          dt        |      d cY d}~S d}~ww xY w)"z
        Almacena un nuevo estado de avance PAI.
        Si ya existe un registro con los mismos student_id, school_id, document_type_id y period_id, lo actualiza.
        Nr   r   r   r'   dictr   r   r      r    r   r   r   r   r   r   r!   r"   r#   r$   r(   r)   r*   success-Estado de avance PAI actualizado exitosamenter/   r0   r   r+   r,   z(Estado de avance PAI creado exitosamenter-   r.    ).r=   
isinstancer9   r   strptimer   listhasattrrD   rK   r5   dumpsr   r1   r   r2   r   r   r   r    r3   r4   r   r   r   r   r   r   r   r   r!   r"   r#   r$   r'   r(   r)   r*   nowr,   commitrefreshr   addr8   rollback)r   rI   student_born_date_objprogress_date_objpai_objectives_jsonobjectives_listobjr   r   r   r    existingnew_progress_statusr;   s                 r   storez*ProgressStatusIndividualSupportClass.store   s   
V	$(!xx+,dhh':;SA5080A0A$((K^B_ak0l0q0q0s- -1HH5H,I) $xx(dhh7=1,4,=,=dhh>WYc,d,i,i,k) )-(A% #'xx()dhh'78$?&(O#xx(89 8"3/+22388:>'T2+2237+22378 +/**_*E')9 :C@*.((3C*D',/J-I#xx(:B?-I H%)*?DTD`enez77==)MNUU8CCzQ8BBiO8IIM]]8BBiO8EEM %'  4'*.((<*@H'$&)-+)>H&%-049K0LH-&$.15:M1NH.2d:=AXXFe=fH:&$.1FH. D(+/88M+BH(#t+.2hh7G.HH+#t+.2hh7G.HH+&$.15:M1NH."d*->H*$&)-+)>H&-58<A[8\H5"d*-1XXo-FH*.$69=B]9^H6$,/3xx8I/JH,#t+.AH+%-049K0LH-'4/26((;O2PH/.$69=B]9^H6(0% ) (N"++  #G #88L1#((;/# "&*<b!A# #'((+>"?	#
 /3hh7V.W# #8# !HH]3#  $xx(89#  $xx(89# #'((+>"?# 0# ((;/# *.2L)M# #hh7# +/((3N*O#  !%): ;!#"  3##$ "&*<!=%#& $(88,@#A'#( +/((3N*O)#* $<<>+#, &\\^-#2 GGKK+,GGNNGGOO/0 $E),, I504-1,0)~  	GG!q6 	sU   2[$ 3[ (A[$ -3[  P [$ G[$ [[$ [![$ $	\-'\\\c                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|sdddS d|v r|j                  d      |_        d|v r|j                  d      |_	        d|v r|j                  d      |_
        d|v r|j                  d      |_        d	|v r|j                  d	      |_        d
|v rot        |j                  d
      t              r:	 t        j                   |j                  d
      d      j#                         |_        n|j                  d
      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v rot        |j                  d      t              r:	 t        j                   |j                  d      d      j#                         |_        n|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      |_        d|v r|j                  d      }t        |t:              rg }|D ]a  }t=        |d      r |j?                  |jA                                /t        |t@              r|j?                  |       Q|j?                  |       c tC        jD                  |      |_#        nt        |t              r||_#        d|v r|j                  d      |_$        d|v r|j                  d      |_%        d|v r|j                  d      |_&        t        jN                         |_(        | j                   jS                          | j                   jU                  |       dd|j                  dS #  Y xY w#  Y xY w# tV        $ r2}| j                   jY                          dt        |      dcY d}~S d}~ww xY w)z>
        Actualiza un estado de avance PAI existente.
        Nr-   "Estado de avance PAI no encontrador.   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r'   rK   r(   r)   r*   rM   rN   rO   )-r   r1   r   r2   r   r3   r4   r=   r   r   r   r   r   rQ   r9   r   rR   r   r   r   r   r   r   r   r    r!   r"   r#   r$   rS   rT   rD   rK   r5   rU   r'   r(   r)   r*   rV   r,   rW   rX   r8   rZ   )r   r   rI   r:   r'   r^   r_   r;   s           r   updatez+ProgressStatusIndividualSupportClass.updateM  s   ^	"ggmm,PQXX4772=4AATI eg 
 #%C  t#-1XXl-C*d",0HH[,A)!T)3788<N3O0"d*48HH=P4Q1.$6@DIh@i="d*dhh':;SA<D<M<MdhhWjNkmw<x<}<}<9 9=AT8UO5$.2hh}.E+4'15:J1K.4'15:J1K."d*48HH=P4Q1$&dhh7=8@8I8I$((SbJceo8p8u8u8w5 59HH_4MO1d",0HH[,A))T1;?88D^;_8$&040I-*d2<@HHE`<a9 D(26((;L2M/4'!%*:!;nd3&(O- 8"3/+22388:>'T2+2237+22378 6:ZZ5PO245CO2!T)3788<N3O0#t+59XX>R5S2*d2<@HHE`<a9+3<<>O(GGNNGGOOO, $J%(( qZ  	GG!q6 	sW   A%P5 (B%P5 8P% B"P5 )8P- !HP5 %P*'P5 -P2/P5 5	Q0>'Q+%Q0+Q0c                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|sdddS t        j                         |_        t        j                         |_	        | j                   j                          dddS # t        $ r2}| j                   j                          dt        |      dcY d}~S d}~ww xY w)uM   
        Elimina lógicamente un estado de avance PAI (soft delete).
        Nr-   rd   r.   rM   z+Estado de avance PAI eliminado exitosamente)r   r1   r   r2   r   r3   r4   r   rV   r,   rW   r8   rZ   r9   )r   r   r:   r;   s       r   deletez+ProgressStatusIndividualSupportClass.delete  s    	"ggmm,PQXX4772=4AATI eg 
 #%C  ,4<<>O(+3<<>O(GGNN $H 
  	GG!q6 	s%   A%B9 (AB9 9	C4'C/)C4/C4)NN)__name__
__module____qualname__r   r   intr   r=   rA   r   rH   rK   rb   re   rg   rP   r   r   r
   r
      s    7 1Ac 1Ac 1Af1AC 1AC 1Af<(3- <8C= <\_ <|[$ [3 [zb bD bS bH     r   r
   )typingr   r   sqlalchemy.ormr   r   r   r5   app.backend.db.modelsr   r
   rP   r   r   <module>ro      s       " #  FI Ir   