
    yi                      |   d Z ddlmZmZ ddlmZ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d
lmZ ddlmZ  eddg      Zdee   defdZdededee   fdZdedededefdZej?                  d       edddd       ee       ee      fdededefd       Z ej?                  d       edddd       ed d!d"#       ee       ee      fdedee   dedefd$       Z!ej?                  d%       eddd&       ed d!d'#       ee       ee      fd(ededee   dedef
d)       Z"y )*u\   KPI: avance de documentación transversal (document_type_id = 1) por curso y por estudiante.    )ListOptional)	APIRouterDependsQuerystatus)JSONResponse)Session)get_current_active_user)KpiDocumentationProgressClass)session_professional_scope_id)get_db)SchoolModel)	UserLoginz/kpi/documentation-progresszKPI documentation progress)prefixtagsscopereturnc                 
    | du S )u;   Solo coordinador/admin (sin restricción a un profesional).N )r   s    V/var/www/pie360backend.cl/public_html/app/backend/routes/kpi_documentation_progress.py_scope_allows_kpir      s    D=    dbsession_userc                    t        |dd      }t        |dd      }t        |dd      }|t        |      dv r|| j                  t        j                        j                  t        j                  t        |      k(        j                  t        j                  j                               j                         }|D cg c]  }t        |d          c}S |t        |      dk(  rv|t| j                  t        j                        j                  t        j                  j                               j                         }|D cg c]  }t        |d          c}S |t        |      gS g S c c}w c c}w )uj   Administrador cliente: todos los colegios del customer. Super (rol 1 sin customer): todos. Resto: sesión.rol_idNcustomer_id	school_id      r   r!   )getattrintqueryr   idfilterr   order_byschool_nameascall)r   r   r   r   r   rowsrs          r   _resolve_doc_kpi_school_idsr.      s2   \8T2F,t<Kk48Ic&kV38OHH[^^$VK++s;/??@Xk--1134SU	 	 $((aAaD	((c&kQ.;3Fxx'001H1H1L1L1NOSSU#'(aAaD	((II ) )s   >E,E1r   c                 ,   t        |      }t        |dd       }t        |dd       }t        |dd       }|yt        |      dv rl|j| j                  t              j	                  t        j
                  |k(        j                         }|d uxr! t        |j                        t        |      k(  S |Ut        |      dk(  rG|E| j                  t              j	                  t        j
                  |k(        j                         d uS |t        |      |k(  S y)Nr   r   r   r    r!   F)r$   r#   r%   r   r'   r&   firstr   )r   r   r   sidr   r   session_schoolschs           r   _school_allowed_for_doc_kpir4   3   s     i.C\8T2F,t<K\;=Nc&kV38Ohh{#**;>>S+@AGGI$K3s#73{;K#KKc&kQ.;3Fxx$++KNNc,ABHHJRVVV!>"c))r   z
/by-school.i  i4  u   Año escolar (period_year))geledescriptionperiod_yearc                    t        ||      }t        |      st        t        j                  ddg d      S t        ||      }|st        t        j                  ddg d      S t        |      }|j                  ||       }|j                  d      d	k(  r>t        t        j                  d
|j                  dd      |j                  d      d      S t        t        j                  dd|j                  d      d      S )uL   Resumen por establecimiento (administración: varios colegios del customer).   OKr   messagedatastatus_codecontent  z,No hay establecimientos asociados al usuario)
school_idsr8   r   error  r=   Errorr>   )r   r   r	   r   HTTP_200_OKr.   HTTP_400_BAD_REQUESTr   	by_schoolgetHTTP_500_INTERNAL_SERVER_ERROR)r8   r   r   r   rC   svcresults          r   kpi_doc_progress_by_schoolrN   G   s     *"l;EU#**"tR@
 	
 -R>J33I
 	
 (
+C]]jk]JFzz(w&==!::i9

6*
 	
 &&4F9KL r   z
/by-courseNr!   uI   Establecimiento (admin puede filtrar; si no, se usa school_id de sesión))r5   r7   c                    t        ||      }t        |      st        t        j                  ddg d      S ||nt        |dd       }|t        t        j                  ddg d      S t        ||t        |            st        t        j                  dd	g d      S t        |      }|j                  t        |      | 
      }|j                  d      dk(  r>t        t        j                  d|j                  dd      |j                  d      d      S t        t        j                  dd|j                  d      d      S )Nr:   r;   r<   r?   r   rB   school_id requerido  !Sin acceso a este establecimiento)r   r8   r   rD   rE   r=   rF   r>   )r   r   r	   r   rG   r#   rH   r4   r$   HTTP_403_FORBIDDENr   	by_courserJ   rK   )r8   r   r   r   r   	effectiverL   rM   s           r   kpi_doc_progress_by_courserV   o   sF    *"l;EU#**"tR@
 	
 '2	k[_8`I330
 	
 'r<YH11>
 	
 (
+C]]S^]MFzz(w&==!::i9

6*
 	
 &&4F9KL r   z/by-course/{course_id}/students)r5   r6   uO   Establecimiento (admin con varios colegios; si no, se usa school_id de sesión)	course_idc                    t        ||      }t        |      st        t        j                  ddd d      S ||nt        |dd       }|t        t        j                  ddd d      S t        ||t        |            st        t        j                  dd	d d      S t        |      }|j                  t        |      | |
      }|j                  d      dk(  rdt        |j                  dd            j                         v rt        j                  nt        j                   }	t        |	|	dk(  rdnd|j                  dd      |j                  d      d      S t        t        j                  dd|j                  d      d      S )Nr:   r;   r<   r?   r   rB   rP   rQ   rR   )r   rW   r8   r   rD   zno encontrador=    i  rE   rF   r>   )r   r   r	   r   rG   r#   rH   r4   r$   rS   r   students_detailrJ   strlowerHTTP_404_NOT_FOUNDrK   )
rW   r8   r   r   r   r   rU   rL   rM   codes
             r   kpi_doc_progress_studentsr_      s    *"l;EU#**"tTB
 	
 '2	k[_8`I330
 	
 'r<YH11>
 	
 (
+C  i. ! F
 zz(w& #fjjB&?"@"F"F"HH %%66 	
 !%##!::i9

6*
 	
 &&4F9KL r   )#__doc__typingr   r   fastapir   r   r   r   fastapi.responsesr	   sqlalchemy.ormr
   app.backend.auth.auth_userr   4app.backend.classes.kpi_documentation_progress_classr   &app.backend.classes.professional_classr   app.backend.db.databaser   app.backend.db.modelsr   app.backend.schemasr   kpi_documentation_progressr$   boolr   r.   r4   rJ   rN   rV   r_   r   r   r   <module>rm      s   b ! 5 5 * " > ^ P * - )&(
&	' Xc] t 
G 9 c 0(58	( -STd@\]%&=>&/$$$ 	$ .$N -STd@\]$_ 
 &&=>&/22}2 2 	2 .2j  AB STd3$e 
 &&=>&/<<< }< < 	< C<r   