
    ]i                     |    d dl mZmZmZ d dlmZ d dlmZmZmZ d dl	m
Z
 dee   fdZdee   fdZ G d d	      Zy
)    )OptionalAnyList)Session)datetimedatetime)"GuardianAttendanceCertificateModelreturnc                     | yt        | t              r| S t        | t              r(	 t        j                  | dd d      j                         S y# t
        t        f$ r Y yw xY w)z(Convierte string a date si es necesario.N
   %Y-%m-%d)
isinstancer   strr   strptime
ValueError	TypeError)values    b/var/www/pie360backend.cl/public_html/app/backend/classes/guardian_attendance_certificate_class.py_parse_dater      sh    }%%	$$U3BZ<AACC  I& 		s   &A A! A!c                     | yt        | t              r| S t        | t              r@| j                         }|sydD ](  }	 t	        j
                  ||      j                         c S  y# t        $ r Y 7w xY w)z;Convierte string a time si es necesario (HH:MM o HH:MM:SS).N)z%H:%M:%S%H:%M)r   r	   r   stripr   r   r   )r   sfmts      r   _parse_timer      s}    }%%KKM( 	C((C05577	
   s   #A''	A32A3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
)"GuardianAttendanceCertificateClassdbc                     || _         y N)r   )selfr   s     r   __init__z+GuardianAttendanceCertificateClass.__init__(   s	        objr   c                    d }|j                   |j                  |j                  |j                  |j                  r|j                  j                  d      nd ||j                         ||j                        |j                  r|j                  j                  d      nd|j                  r|j                  j                  d      d	S dd	S )z*Convierte el modelo a dict para respuesta.c                 X    | y t        | d      r| j                  d      S t        |       S )Nstrftimer   )hasattrr(   r   )ts    r   	_time_strz>GuardianAttendanceCertificateClass._to_dict.<locals>._time_str-   s+    y*1!Z*@1::g&Lc!fLr$   r   Nz%Y-%m-%d %H:%M:%S)	id
student_iddocument_type_idprofessional_idcertificate_date
start_timeend_time
added_dateupdated_date)
r,   r-   r.   r/   r0   r(   r1   r2   r3   r4   )r"   r%   r+   s      r   _to_dictz+GuardianAttendanceCertificateClass._to_dict+   s    	M
 &&.. # 4 4"22MPMaMa 4 4 = =j Igk#CNN3!#,,/JM..#..112EF^bNQN^N^C,,556IJ

 
	
 ei

 
	
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 certificado por ID.errorCertificado no encontrado.statusmessageN)	r   queryr
   filterr,   firstr5   	Exceptionr   r"   r,   r%   es       r   getz&GuardianAttendanceCertificateClass.get=   sx    	:''-- BCJJKmKpKptvKvw}}C}}S))%2NOO 	:%#a&99	:s$   AA' "A' '	B0B=BBr-   c                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  d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)u4   Obtiene el certificado más reciente por student_id.   r7   uM   No se encontró certificado de asistencia del apoderado para este estudiante.r9   N)r   r<   r
   r=   r-   r.   order_byr,   descr>   r5   r?   r   )r"   r-   r%   rA   s       r   get_by_student_idz4GuardianAttendanceCertificateClass.get_by_student_idG   s    	:@A6AAZO6GG2M <??DDFG  }}S))%  3B  C  C 	:%#a&99	:s$   BB$ B$ $	C-C :C CNc                    	 | j                   j                  t              j                  t        j                  dk(        }|"|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)z;Lista certificados, opcionalmente filtrados por student_id.rD   Nr7   r9   )r   r<   r
   r=   r.   r-   rE   r,   rF   allr5   r?   r   )r"   r-   r<   itemsirA   s         r   get_allz*GuardianAttendanceCertificateClass.get_allY   s    		:GGMM"DELL2CCrIE %%G%R%RV`%`aNN#E#H#H#M#M#OPTTVE.34DMM!$444 	:%#a&99	:s0   B"C $B?<C ?C 	C%C C% C%datac                 `   	 |j                  d      }|dddS t        ||j                  dd      |j                  d      t        |j                  d	            t        |j                  d
            t        |j                  d                  }| j                  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)ur   Crea un nuevo certificado. Si ya existe uno para el estudiante, puede actualizarse o crearse otro según criterio.r-   Nr7   zstudent_id es requerido.r9   r.   rD   r/   r0   r1   r2   )r-   r.   r/   r0   r1   r2   successzCertificado creado exitosamenter:   r;   r,   )rB   r
   r   r   r   addcommitrefreshr,   r?   rollbackr   )r"   rM   r-   new_objrA   s        r   storez(GuardianAttendanceCertificateClass.storef   s    	:,/J!")6PQQ8%!%*<b!A $): ;!,TXX6H-I!J&txx'=>$TXXj%9:G GGKK GGNNGGOOG$'4U]d]g]ghh 	:GG%#a&99	:s#   C2 CC2 2	D-;'D("D-(D-c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS dh}ddh}|j                         D ]U  \  }}t        ||      s||v rt        ||t        |             .||v rt        ||t        |             It        |||       W 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 certificado existente.r7   r8   r9   r0   r1   r2   rO   z$Certificado actualizado exitosamenterP   N)r   r<   r
   r=   r,   r>   rJ   r)   setattrr   r   r   utcnowr4   rR   rS   r?   rT   r   )	r"   r,   rM   r%   date_fieldstime_fieldskeyr   rA   s	            r   updatez)GuardianAttendanceCertificateClass.update}   s0   	:''-- BCJJKmKpKptvKvw}}C")6RSS-.K'4K"jjl 1
U3$k)S+e*<=+S+e*<=S%01  (0CGGNNGGOOC '4Zbebhbhii 	:GG%#a&99	:s+   AD# )D#  B"D# #	E,'E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 certificado.r7   r8   r9   rO   z"Certificado eliminado exitosamenteN)r   r<   r
   r=   r,   r>   deleterR   r?   rT   r   r@   s       r   r_   z)GuardianAttendanceCertificateClass.delete   s    		:''-- BCJJKmKpKptvKvw}}C")6RSSGGNN3GGNN'4XYY 	:GG%#a&99	:s$   AB 9B 	C'C CCr!   )__name__
__module____qualname__r   r#   r
   dictr5   intr   rB   rG   r   rL   rV   r]   r_    r$   r   r   r   '   s    7 
> 
4 
$:c :c ::C :C :$:(3- :3 ::$ :3 :.: :D :S :6: : :r$   r   N)typingr   r   r   sqlalchemy.ormr   r   r   r	   app.backend.db.modelsr
   r   r   r   re   r$   r   <module>ri      sC    & & " ) ) D(4. (4. $|: |:r$   