
    Wzi [                     X    d dl mZmZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
  G d d      Zy)    )OptionalAny)Session)datetimedate)ProgressStatusStudentModelStudentGuardianModelFamilyMemberModelc                   ~    e Zd Z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)ProgressStatusStudentClassdbc                     || _         y )N)r   )selfr   s     Z/var/www/pie360backend.cl/public_html/app/backend/classes/progress_status_student_class.py__init__z#ProgressStatusStudentClass.__init__   s	        idreturnc                 z   	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|rd}d}d}|j                  r| j                   j                  t              j                  t        j                  |j                  k(        j                         }|r|j                  }|j                  xs d d|j                  xs d j                         }|j                  re| j                   j                  t              j                  t        j                  |j                  k(        j                         }|r|j                  }i d|j                  d|j                   d|j"                  d|j$                  d|j&                  d	|j(                  d
|j*                  d|j                  d|j,                  d|d|d|d|j.                  d|j0                  r|j0                  j3                  d      ndd|j4                  d|j6                  d|j8                  |j:                  |j<                  |j>                  |j@                  |jB                  |jD                  |jF                  |jH                  |jJ                  |jL                  r|jL                  j3                  d      nd|jN                  r|jN                  j3                  d      nddS dddS # tP        $ r}tS        |      }	d|	dcY d}~S d}~ww xY w)z8
        Obtiene un estado de avance por su ID.
        N  r   
version_id
student_id	school_iddocument_idnee_id	course_idguardian_relationship_id	period_idguardian_nameguardian_lastnameguardian_relationshipresponsible_professionalsprogress_date%Y-%m-%dpedagogical_languagepedagogical_mathematicspsychopedagogical%Y-%m-%d %H:%M:%Sspeech_therapypsychologicalkinesiologyoccupational_therapydeaf_co_educatorsynthesis_commentssuggestions_familysuggestions_establishmentfile
added_dateupdated_dateerrorz>No se encontraron datos para el estado de avance especificado.statusmessage)*r   queryr   filterr   deleted_datefirstr   r	   namesfather_lastnamemother_lastnamestripfamily_member_idr
   family_memberr   r   r   r   r   r   r   r#   r$   strftimer&   r'   r(   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   	Exceptionstr)
r   r   progress_statusr    r!   r"   guardianrC   eerror_messages
             r   getzProgressStatusStudentClass.get   sX   =	A"ggmm,FGNN*--3*774? eg 
  $$(!(,%";;#ww}}-ABII,//?3[3[[ eg   (0/7/G/G/M2.NaPXPhPhPnlnOo,p,v,v,x)#44,0GGMM:K,L,S,S 1 4 48Q8Q Q-#eg *  -8E8S8S 5/,, /"<"< !/"<"<  !:!:	
 "?#>#> o44  !:!: /0X0X  !:!: $] (): ,-B 01Z1Z $[j[x[x_%B%B%K%KJ%W  C +O,P,P  ./V/V!" ()J)J#$ '6&D&D%4%B%B#2#>#>,;,P,P(7(H(H*9*L*L*9*L*L1@1Z1Z+00^m^x^x/"<"<"E"EFY"Z  Cbqb~b~O$@$@$I$IJ]$^  EI9 > #*6vww 	AFM%-@@	As$   LL L 	L: L5/L:5L:Nr   r   c                 d   	 | j                   j                  t              j                  t        j                  dk(        }|"|j                  t        j
                  |k(        }|"|j                  t        j                  |k(        }|j                  t        j                  j                               j                         }g }|D ]  }d}d}d}	|j                  r| j                   j                  t              j                  t        j                  |j                  k(        j                         }
|
r|
j                  }|
j                  xs d d|
j                   xs d j#                         }|
j$                  re| j                   j                  t&              j                  t&        j                  |
j$                  k(        j                         }|r|j(                  }	|j+                  i d|j                  d|j,                  d|j
                  d|j                  d|j.                  d	|j0                  d
|j2                  d|j                  d|j4                  d|d|d|	d|j6                  d|j8                  r|j8                  j;                  d      ndd|j<                  d|j>                  d|j@                  |jB                  |jD                  |jF                  |jH                  |jJ                  |jL                  |jN                  |jP                  |jR                  |jT                  r|jT                  j;                  d      nd|jV                  r|jV                  j;                  d      ndd        |S # tX        $ r}dt[        |      dcY d}~S d}~ww xY w)zx
        Obtiene la lista de estados de avance 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*   r6   r7   ).r   r:   r   r;   r<   r   r   order_byr   descallr   r	   r=   r>   r?   r@   rA   rB   r
   rC   appendr   r   r   r   r   r#   r$   rD   r&   r'   r(   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   rE   rF   )r   r   r   r:   progress_statusesresultpsr    r!   r"   rH   rC   rI   s                r   get_allz"ProgressStatusStudentClass.get_allN   s   
G	GGMM"<=DD*774?E %%?%J%Jj%XY$%?%I%IY%VW %/I/L/L/Q/Q/S T X X ZF' 1 $$(!(,%..#ww}}-ABII,//23N3NN eg   (0/7/G/G/M2.NaPXPhPhPnlnOo,p,v,v,x)#44,0GGMM:K,L,S,S 1 4 48Q8Q Q-#eg *  -8E8S8S 5 "%% "-- !"--  	
 "2>> bii   /0K0K   $] (): ,-B 01M1M $bN^N^R%5%5%>%>z%Jdh +B,C,C  .r/I/I!" ()=)=#$ ')&7&7%'%5%5#%>>,.,C,C(*(;(;*,*?*?*,*?*?131M1MGGQSQ^Q^"--"8"89L"MdhUWUdUdBOO$<$<=P$Qjn9 )1f M 	!q6 	s   NN 	N/N*$N/*N/progress_status_datac                 B   	 d}|j                  d      ret        |j                  d      t              r5	 t        j                  |j                  d      d      j                         }n|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  dd	      }d}||| j                  j                  t              j                  t        j                  |k(  t        j                  |k(  t        j                  |k(  t        j                  dk(        }	|3|	j                  t        j                  |k(        }	|	j                         }nI|	j!                  t        j                  j#                               j                         }|r|j                  }|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|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      |_        d|v r|j                  d      |_         d|v r|j                  d      |_!        d|v r|j                  d      |_"        d|v r|j                  d      |_#        t        jH                         |_%        | j                  jM                          | j                  jO                  |       dd|jP                  dS ||| j                  j                  t              j                  t        j                  |k(  t        j                  |k(  t        j                  dk(        j!                  t        j                  j#                               j                         }
|
r|
j                  dz   }nd}n|d}t        d$i d|d|d|d|d
|j                  d
      d|j                  d      d|j                  d      d|j                  d      d|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        jH                         dt        jH                         d d}| j                  jS                  |       | j                  jM                          | j                  jO                  |       dd!|jP                  dS #  d}Y xY w# tT        $ r2}| j                  jW                          d"t        |      d#cY d}~S d}~ww xY w)%z5
        Almacena un nuevo estado de avance.
        Nr$   r%   r#   r   r   r   r      r   r   r   r   r&   r'   r(   r+   r,   r-   r.   r/   r0   r1   r2   r3   success)Estado de avance actualizado exitosamenter8   r9   r      r4   r5   r<   z$Estado de avance creado exitosamenter6   r7    ),rK   
isinstancerF   r   strptimer   r   r:   r   r;   r   r   r   r<   r   r=   rM   rN   r   r   r   r   r#   r$   r&   r'   r(   r+   r,   r-   r.   r/   r0   r1   r2   r3   nowr5   commitrefreshr   addrE   rollback)r   rU   progress_date_objresponsible_professionals_textr   r   r   r   existing_progress_statusr:   last_versionnew_progress_statusrI   s                r   storez ProgressStatusStudentClass.store   s   Z	 $#''8266GM1,4,=,=>R>V>VWf>gis,t,y,y,{) )=(@(@(Q% .B-E-EFa-b* .11,?J-11,?J,00=I.22="EK (,$%)*?&@AHH.99ZG.88IE.::kI.;;tC	 )!LL)C)N)NR\)\]E/4{{}, 05~~>X>c>c>h>h>j/k/q/q/s,/%=%H%H
 (336J6N6Nx6X,3"669M9Q9QR]9^,6-1EEH\H`H`a{H|,E"669M9Q9QR]9^,6Ec(B9J(6)-AADXD\D\]sDt,A,0DDG[G_G_`yGz,D&*>>AUAYAYZmAn,>#';;>R>V>VWg>h,;"&::=Q=U=UVe=f,: $88;O;S;STa;b,8)-AADXD\D\]sDt,A%)==@T@X@XYk@l,='+??BVBZBZ[oBp,?'+??BVBZBZ[oBp,?.2FFI]IaIab}I~,F114H4L4LV4T,18@(5  89 (J255  !j&<#ww}}-GHOO.99ZG.::kI.;;tC  (5@@EEGH	   !-!8!81!<J!"J#
 #= #%#%# $# (	#
 ,//9# /22;?# *>)A)AB\)]# /22;?# +I# 0# &:%=%=>T%U# )=(@(@AZ([# #7":":;N"O#  4778HI# 366G#  144]C!#" &:%=%=>T%U##$ "6!9!9:L!M%#& $8#;#;<P#Q'#( $8#;#;<P#Q)#* +?*B*BC^*_+#, *--f5-#. $<<>/#0 &\\^1#2 "3#8 GGKK+,GGNNGGOO/0 $A),, Q1,0)Z  	GG!q6 	s<   2Y# 3Y (M/Y# J Y# Y Y# #	Z,'ZZZc                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|sdddS d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_	        d|v r
|d   |_
        d	|v r
|d	   |_        d
|v r
|d
   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v rX|d   rLt!        |d   t"              r.	 t%        j&                  |d   d      j)                         |_        n|d   |_        nd|_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_         d|v r
|d   |_!        t%        jD                         |_#        | j                   jI                          | j                   jK                  |       dd|j                  dS #  Y xY w# tL        $ r2}| j                   jO                          dt#        |      dcY d}~S d}~ww xY w)z:
        Actualiza un estado de avance existente.
        Nr6   Estado de avance no encontrador7   r   r   r   r   r   r   r   r   r#   r$   r%   r&   r'   r(   r+   r,   r-   r.   r/   r0   r1   r2   r3   rX   rY   rZ   )(r   r:   r   r;   r   r<   r=   r   r   r   r   r   r   r   r   r#   r]   rF   r   r^   r   r$   r&   r'   r(   r+   r,   r-   r.   r/   r0   r1   r2   r3   r_   r5   r`   ra   rE   rc   )r   r   rU   rG   rI   s        r   updatez!ProgressStatusStudentClass.update<  s<   Z	"ggmm,FGNN*--3*774? eg 
 #")6VWW 33-A,-O*33-A,-O*22,@,M) 44.B=.Q+//)=h)G&22,@,M))-AA;OPj;k822,@,M) +.BB<PQl<m9 "66'8!"6"GM!<D<M<MNbcrNsu  =A  =F  =F  =HO9 9M_8]548O1 &)==7KLb7c4(,@@:NOh:i7"&::4HI\4]1#771EFV1W."660D_0U- 44.B=.Q+%)==7KLb7c4!%993GHZ3[0 $';;5IJ^5_2#';;5IJ^5_2*.BB<PQl<m9 --';F'C$+3<<>O(GGNNGGOOO, $F%(( U! ^  	GG!q6 	s>   A%I (BI ,I /DI I
I 	J'J JJ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)uI   
        Elimina lógicamente un estado de avance (soft delete).
        Nr6   rk   r7   rX   z'Estado de avance eliminado exitosamente)r   r:   r   r;   r   r<   r=   r   r_   r5   r`   rE   rc   rF   )r   r   rG   rI   s       r   deletez!ProgressStatusStudentClass.delete  s    	"ggmm,FGNN*--3*774? eg 
 #")6VWW ,4<<>O(+3<<>O(GGNN $D 
  	GG!q6 	s%   A%B9 (AB9 9	C4'C/)C4/C4)NN)__name__
__module____qualname__r   r   intr   rK   r   rT   dictri   rl   rn   r\   r   r   r   r      s    7 AAc AAc AAFL(3- L8C= L\_ L\^$ ^3 ^@^ ^D ^S ^@  r   r   N)typingr   r   sqlalchemy.ormr   r   r   app.backend.db.modelsr   r	   r
   r   r\   r   r   <module>rw      s       " # e er rr   