
    &6j%              
          S SK Jr  S SKJrJrJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJr  S SKJr  S SKJr  S S	KJrJr  \" S
S/S9rS\S\\   4S jrS\S\S\4S jrS\S\SS4S jr\R=                  S5      \" \5      \" \
5      4S\S\S\4S jj5       r\R=                  S5      \" \5      \" \
5      4S\S\S\4S jj5       r \RC                  S5      \" \5      \" \
5      4S\S\S\4S jj5       r"\RG                  S5      \" \5      \" \
5      4S\S\S\S\4S jj5       r$\RK                  S5      \" \5      \" \
5      4S\S\S\4S jj5       r%\RC                  S 5      \" \5      \" \
5      4S\S\4S! jj5       r&g)"    )Optional)	APIRouterDependsHTTPExceptionstatus)JSONResponse)get_db)Session)SpecialEducationalNeedListStoreSpecialEducationalNeedUpdateSpecialEducationalNeed)SpecialEducationalNeedClass)get_current_active_user)	UserModelRolModelz/special_educational_needszSpecial Educational Needs)prefixtagssession_userreturnc                 |    [        U SS5      nUc  g [        U5      nUS:  a  U$ S$ ! [        [        4 a     gf = f)z>Active school from user/token (same as select_school / login).	school_idNr   )getattrint	TypeError
ValueError)r   sidis      ^C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routes\special_educational_needs.py_school_id_from_userr      sN    
,T
2C
{HEq#t#z" s   ( ( ;;dbc                    U R                   c  g[        U R                   5      nUS:X  a  gUS:X  a  gUR                  [        5      R	                  [        R
                  U R                   :H  5      R                  5       nU(       a  UR                  (       d  g[        UR                  5      R                  5       nSU;   d  SU;   a  SU;   a  gSU;   d  S	U;   a  gSU;   a  SU;  a  gS
U;   d  SU;   a  gg)a  
Who may manage the NEE catalog (aligned with frontend `neeMenuAccess.ts`).
Deny: rol_id 1 (superadmin); professor/professional role names without coordinator/evaluator.
Allow: rol_id 2 (school admin); role name contains coordinator/evaluator; administrator without "super".
F      T
superadminsuperadministradorcoordinador	evaluadorprofesorprofesional)
rol_idr   queryr   filteridfirstrolstrlower)r   r    ridr0   ns        r   _can_manage_nee_catalogr5      s     "
l!!
"C
ax
ax
((8

#
#HKK<3F3F$F
G
M
M
OCcggCGGAqW\o.B[A-!q 0Q-1,    Nc                 8    [        X5      (       d
  [        SSS9eg )Ni  zNo autorizadostatus_codedetail)r5   r   )r   r    s     r   _require_nee_catalog_accessr;   :   s    "<44ODD 5r6   /needc                    [        X5        [        U5      nUc
  [        SSS9eU R                  c  SOU R                  n[	        U5      R                  UU R                  U R                  U R                  US9n[        U[        5      (       a  UR                  S5      S:X  a}  UR                  SS	5      n[        U[        5      (       a  UR                  5       OS
nSU;   d  SU;   a  [        [        R                   SU/ S.S9$ [        [        R"                  SUS S.S9$ U R                  c  SOSn[        [        R                   SUUS.S9$ )N  -   Se requiere colegio en la sesión (school_id)r8   r   )pageitems_per_pagespecial_educational_needs special_educational_need_type_idr   r   errormessageError zno datazno se encontraron datos   r   rF   datar9   content  z>Complete special educational needs list retrieved successfullyz0Special educational needs retrieved successfully)r;   r   r   rA   r   get_allper_pagerC   rD   
isinstancedictgetr1   r2   r   r   HTTP_200_OKHTTP_404_NOT_FOUND)	r=   r   r    r   
page_valueresulterror_messagelower_messagerF   s	            r   indexrZ   ?   sZ   1
|
,C
{4cddii'TYYJ(,44}}"&"@"@)-)N)N 5 F &$FJJx$8G$C

9g61;M31O1O++-UW%)Bm)S"..!,  11(
 	
 SWR[R[RcN  j\G&&
 r6   z/storec                    [        X5        [        U5      nUc
  [        SSS9eU R                  5       nX4S'   [	        U5      R                  XCS9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  S	S
5      S S.S9$ [        [        R                  SSUS.S9$ )Nr?   r@   r8   r   r   r   rE     rF   z'Error creating special educational needrJ   rL      z-Special educational need created successfully)r;   r   r   rR   r   storerQ   rS   r   r   HTTP_500_INTERNAL_SERVER_ERRORHTTP_201_CREATED)r=   r   r    r   need_inputsrW   s         r   r_   r_   p   s    1
|
,C
{4cdd))+K"(,22;2NF&$FJJx$8G$C==!::i1Z[
 	
 ++F
 r6   z
/edit/{id}r.   c                    [        X5        [        U5      nUc
  [        SSS9e[        U5      R	                  XS9n[        U[        5      (       ao  UR	                  S5      (       d  UR	                  S5      S:X  aD  [        [        R                  SUR	                  S5      =(       d    UR	                  SS	5      S S
.S9$ [        [        R                  SSUS
.S9$ )Nr?   r@   r8   r\   rE   r   rN   rF   "Special educational need not foundrJ   rL   rI   z/Special educational need retrieved successfully)r;   r   r   r   rS   rQ   rR   r   r   rU   rT   r.   r   r    r   rW   s        r   editrf      s    1
|
,C
{4cdd(,000CF&$VZZ%8%8FJJx<PT[<[11!::g.m&**YHl2m
 	
 &&H
 r6   z/update/{id}c                 |   [        X#5        [        U5      nUc
  [        SSS9eUR                  SS9n[	        U5      R                  XUS9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  S	UR                  S
S5      S S.S9$ [        [        R                  SSUS.S9$ )Nr?   r@   r8   T)exclude_unsetr\   r   rE   r]   rF   z'Error updating special educational needrJ   rL   rI   z-Special educational need updated successfully)r;   r   r   rR   r   updaterQ   rS   r   r   r`   rT   )r.   r=   r   r    r   rb   rW   s          r   ri   ri      s    1
|
,C
{4cdd))$)/K(,33Bs3SF&$FJJx$8G$C==!::i1Z[
 	
 &&F
 r6   z/delete/{id}c                 \   [        X5        [        U5      nUc
  [        SSS9e[        U5      R	                  XS9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  SS	5      S S
.S9$ [        [        R                  SSUS
.S9$ )Nr?   r@   r8   r\   r   rE   rN   rF   rd   rJ   rL   rI   z-Special educational need deleted successfully)r;   r   r   r   deleterQ   rR   rS   r   r   rU   rT   re   s        r   rk   rk      s    1
|
,C
{4cdd(,33B3FF&$FJJx$8G$C11!::i1UV
 	
 &&F
 r6   z/listc                 0   [        U 5      n[        U5      R                  SS US9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  SS5      S S.S	9$ [        [        R                  S
SUS.S	9$ )Nr   )rA   rB   r   r   rE   rN   rF   z*Error retrieving special educational needsrJ   rL   rI   z5Special educational needs list retrieved successfully)
r   r   rO   rQ   rR   rS   r   r   rU   rT   )r   r    r   rW   s       r   list_allrm      s     |
,C(,44!D\_4`F&$FJJx$8G$C11!::i1]^
 	
 &&N
 r6   )'typingr   fastapir   r   r   r   fastapi.responsesr   app.backend.db.databaser	   sqlalchemy.ormr
   app.backend.schemasr   r   r   2app.backend.classes.special_educational_need_classr   app.backend.auth.auth_userr   app.backend.db.modelsr   r   rC   r   r   boolr5   r;   postrZ   r_   rS   rf   putri   rk   rm    r6   r   <module>r{      sR    = = * * " u u Z > 5%'
%	& 	y 	Xc] 	)  T 8Ei EW E E
 $FMNeFfv}  E  wF .* .) .ls . %.` )GNOfGgw~  @F  xG + 9 mt  *8 |,,34K,L\cdj\k S 	 RY  -4 ~.RYZqRr  CJ  KQ  CR s 6 i x  /6 !!.1.56M.N^efl^m s ) T[  24 w''./F'GW^_eWf 9 W  (r6   