
    F4j                        d Z ddlmZ ddlmZ ddlmZmZmZmZm	Z	 ddl
mZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ d Z G d d      Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)uP   Factory genérico para evaluaciones pedagógicas docente de aula (docs 31–42).    )annotations)datetime)AnyCallableIterableSequenceType)	APIRouterDependsstatus)JSONResponse)	BaseModel)Session)get_current_active_user)get_db)	UserLoginc                    | | dk(  ry t        | d      r| S 	 t        j                  t        |       d d d      j	                         S # t
        $ r Y y w xY w)N 	isoformat
   z%Y-%m-%d)hasattrr   strptimestrdate	Exception)vals    \/var/www/pie360backend.cl/public_html/app/backend/services/pedagogical_evaluation_factory.py_parse_dater      s\    
{cRisK 
  S#2
;@@BB s   /A 	AAc                  X    e Zd ZdZ	 	 	 	 	 	 	 	 d
dZddZddZddZddZddZ	ddZ
y	)%PedagogicalEvaluationClassroomServicez=Servicio CRUD parametrizado por modelo SQLAlchemy y columnas.c               `    || _         || _        t        |      | _        || _        ddh| _        y )Nstudent_born_datereport_date)dbmodellistfield_namesdefault_document_type_id_date_fields)selfr$   r%   r'   r(   s        r   __init__z.PedagogicalEvaluationClassroomService.__init__    s4     
,(@%0-@    c                    |j                   |j                  |j                  d}| j                  D ]E  }|dv rt	        ||d       }|*|| j
                  v rt        |d      r|j                         }|||<   G |S )N)id
student_iddocument_type_idr/   r0   r   )r.   r/   r0   r'   getattrr)   r   r   )r*   rowoutnamer   s        r   _row_to_dictz2PedagogicalEvaluationClassroomService._row_to_dict.   s    VV3>>sOcOcd$$ 	D99#tT*C44+<+<#<kAZmmoCI	 
r,   c                    i }| j                   D ]6  }||vr|j                  |      }|| j                  v rt        |      }|||<   8 |S )N)r'   getr)   r   )r*   payloaddatar5   r   s        r   _payload_to_row_valuesz<PedagogicalEvaluationClassroomService._payload_to_row_values9   s]    $$ 	D7"++d#Ct(((!#&DJ	 r,   c                .   	 | j                   j                  | j                        j                  | j                  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)NerrorInforme no encontrado.r   message)	r$   queryr%   filterr.   firstr6   r   r   )r*   r.   r3   es       r   r8   z)PedagogicalEvaluationClassroomService.getD   s}    	:''--

+224::==B3FGMMOC((--%2JKK 	:%#a&99	:s$   A+A3 .A3 3	B<B	BBc                   	 | j                   j                  | j                        j                  | j                  j                  |k(        j                  | j                  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)Nr=   z$No hay informe para este estudiante.r?   )r$   rA   r%   rB   r/   order_byr.   descrC   r6   r   r   )r*   r/   r3   rD   s       r   get_by_student_idz7PedagogicalEvaluationClassroomService.get_by_student_idM   s    	:djj)

--;<$**--,,./	  ((--%2XYY 	:%#a&99	:s$   BB$ B$ $	C-C :C Cc           
        	 | j                  |      }|j                  d      xs |j                  d      }|j                  d      |j                  d      n|j                  d| j                        }|sdddS ||d<   ||d<    | j                  d	i |j	                         D ci c]  \  }}|| j
                  v s|| c}}}| j                  j                  |       | j                  j                          | j                  j                  |       dd|j                  dS c c}}w # t        $ r2}| j                  j                          dt        |      dcY d }~S d }~ww xY w)
Nr/   r0   r=   zFalta student_id.r?   successInforme guardado.r   r@   r.    )r;   r8   r(   r%   itemsr'   r$   addcommitrefreshr.   r   rollbackr   )	r*   r9   r:   r/   r0   kvr3   rD   s	            r   storez+PedagogicalEvaluationClassroomService.store[   sD   	:..w7D,/L7;;|3LJ 88./; +,[[!3T5R5RS 
 ")6IJJ!+D'7D#$$**XWAdFVFVAV1WXCGGKKGGNNGGOOC '4GsvvVV	  X
  	:GG%#a&99	:s=   A9D/ <+D/ 'D)>D)A%D/ )D/ /	E*8'E%E*%E*c                ^   	 | j                   j                  | j                        j                  | j                  j                  |k(        j                         }|sdddS | j                  |      }|j                         D ]&  \  }}|dv r|t        ||      st        |||       ( | 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)Nr=   r>   r?   r1   rJ   zInforme actualizado.rL   )r$   rA   r%   rB   r.   rC   r;   rN   r   setattrrP   rQ   r   rR   r   )r*   r.   r9   r3   r:   r5   valuerD   s           r   updatez,PedagogicalEvaluationClassroomService.updateq   s    	:''--

+224::==B3FGMMOC")6NOO..w7D#zz| .e==%-3%Cu-	.
 GGNNGGOOC '4JRURXRXYY 	:GG%#a&99	:s+   AC1 ":C1 AC1 1	D,:'D'!D,'D,N)r$   r   r%   r	   r'   zSequence[str]r(   int)returndict)r9   r\   r[   r\   )r.   rZ   r[   r   )r/   rZ   r[   r   )r9   r\   r[   r   )r.   rZ   r9   r\   r[   r   )__name__
__module____qualname____doc__r+   r6   r;   r8   rH   rU   rY   rM   r,   r   r    r       sS    GAA 	A
 #A #&A		:::,:r,   r    c                   t        | |g      }t        |      d	fd|j                  d      t        t              t        t
              f	 	 	 	 	 d
fd       }|j                  d      t        t              t        t
              f	 	 	 	 	 dfd       }	|j                  d      t        t              t        t
              f	 	 	 	 	 	 	 dfd       }
|S )N)prefixtagsc                "    t        |       S )N)r%   r'   r(   )r    )r$   r(   fieldsr%   s    r   _servicez5build_pedagogical_evaluation_router.<locals>._service   s    4%=	
 	
r,   z/student/{student_id}c                  K   	  |      j                  |       }t        |t              rC|j                  d      dk(  r/t	        t
        j                  d|j                  dd      d d      S t	        t
        j                  dd	|d      S # t        $ r2}t	        t
        j                  d
t        |      d d      cY d }~S d }~ww xY ww)Nr   r=     r@   r>   r   r@   r:   status_codecontent   OK  )rH   
isinstancer\   r8   r   r   HTTP_404_NOT_FOUNDHTTP_200_OKr   HTTP_500_INTERNAL_SERVER_ERRORr   )r/   session_userr$   resultrD   rf   s        r   get_by_studentz;build_pedagogical_evaluation_router.<locals>.get_by_student   s     		Mb\33J?F&$'FJJx,@G,K# & 9 9'*vzz)Me7fptu   F,>,>SVcgqwHxyy 	MF,Q,Qfivyz{v|  GK  \L  M  M	MsA   CA)B .C/B C	C	'C>C	?CC		Cz/storec           	       K   	  |      j                  | j                               }t        |t              rC|j                  d      dk(  r/t	        t
        j                  d|j                  dd      d d      S t	        t
        j                  d|j                  dd	      d
|j                  d
      id      S # t        $ r2}t	        t
        j                  dt        |      d d      cY d }~S d }~ww xY ww)Nr   r=   ro   r@   zError guardando informe.ri   rj      rK   r.   )
rU   r\   rp   r8   r   r   rs   HTTP_201_CREATEDr   r   )r:   rt   r$   ru   rD   rf   s        r   rU   z2build_pedagogical_evaluation_router.<locals>.store   s     	Mb\''		4F&$'FJJx,@G,K# & E E'*vzz)Mg7hrvw   "33#&6::iI\3]hlntnxnxy}n~g  A   	MF,Q,Qfivyz{v|  GK  \L  M  M	MsA   C;A7B= <C;=?B= <C;=	C8'C3-C8.C;3C88C;z/{id}c                  K   	  |      j                  | |j                  d            }t        |t              rB|j                  d      dk(  r.t	        t
        j                  d|j                  dd      d	      S t	        t
        j                  d
|j                  dd      d	      S # t        $ r1}t	        t
        j                  dt        |      d	      cY d }~S d }~ww xY ww)NT)exclude_unsetr   r=   rh   r@   r>   r?   rj   rm   rn   ro   )rY   r\   rp   r8   r   r   rq   rr   r   rs   r   )r.   r:   rt   r$   ru   rD   rf   s         r   rY   z3build_pedagogical_evaluation_router.<locals>.update   s     	b\((TYYTY-JKF&$'FJJx,@G,K#0I0I^antnxnx  zC  E]  o^  T_  `  `F,>,>SVcicmcmnwy}c~H  A  A 	F,Q,Qfivyz{v|[}~~	sA   C*A9B- >C*?-B- ,C*-	C'6&C"C'C*"C''C*)r$   r   r[   r    )r/   rZ   rt   r   r$   r   )r:   store_schemart   r   r$   r   )r.   rZ   r:   update_schemart   r   r$   r   )r
   r&   r8   r   r   r   postput)rb   tagr%   r'   r(   r|   r}   routerrv   rU   rY   rf   re   s     ` `      @@r   #build_pedagogical_evaluation_routerr      s    fC51F+F
 ZZ'( #**A"BfoMMM M )M  [[ #**A"BfoMMM M M& ZZ #**A"Bfo	   	  Mr,   N)rb   r   r   r   r%   r	   r'   zIterable[str]r(   rZ   r|   Type[BaseModel]r}   r   r[   r
   )r`   
__future__r   r   typingr   r   r   r   r	   fastapir
   r   r   fastapi.responsesr   pydanticr   sqlalchemy.ormr   app.backend.auth.auth_userr   app.backend.db.databaser   app.backend.schemasr   r   r    r   rM   r,   r   <module>r      s    V "  : : . . *  " > * )d: d:NII 
I 	I
 I "I "I #I Ir,   