
    2i$              
          d dl 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mZmZ d dlmZ d dlmZ d d	lmZmZ  ed
dg      Zdedee   fdZdededefdZdededdfdZej=                  d       ee       ee
      fdededefd       Zej=                  d       ee       ee
      fdededefd       Z ejC                  d       ee       ee
      fdededefd       Z"ejG                  d       ee       ee
      fdedededefd       Z$ejK                  d       ee       ee
      fdededefd       Z%ejC                  d        ee       ee
      fdedefd!       Z&y)"    )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                 v    t        | dd      }|y	 t        |      }|dkD  r|S dS # t        t        f$ r Y yw xY w)z>Active school from user/token (same as select_school / login).	school_idNr   )getattrint	TypeError
ValueError)r   sidis      U/var/www/pie360backend.cl/public_html/app/backend/routes/special_educational_needs.py_school_id_from_userr      sN    
,T
2C
{HEq#t#z" s   & & 88dbc                    | j                   yt        | j                         }|dk(  ry|dk(  ry|j                  t              j	                  t        j
                  | j                   k(        j                         }|r|j                  syt        |j                        j                         }d|v sd|v rd|v ryd|v sd	|v ryd|v rd|vryd
|v sd|v ryy)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                 6    t        | |      st        dd      y )Ni  zNo autorizadostatus_codedetail)r5   r   )r   r    s     r   _require_nee_catalog_accessr;   :   s    "<4ODD 5r6   /needc                    t        ||       t        |      }|t        dd      | j                  dn| j                  }t	        |      j                  || j                  | j                  | j                  |      }t        |t              r|j                  d      dk(  rz|j                  dd	      }t        |t              r|j                         nd
}d|v sd|v rt        t        j                   d|g d      S t        t        j"                  d|d d      S | j                  dnd}t        t        j                   d||d      S )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   ?   sV   b1
|
,C
{4cddii'TYYJ(,44}}"&"@"@)-)N)N 5 F &$FJJx$8G$C

9g61;M31O++-UW%)Bm)S"..!,  11(
 	
 SWR[R[RcN  j\G&&
 r6   z/storec                    t        ||       t        |      }|t        dd      | j                         }||d<   t	        |      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 )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    b1
|
,C
{4cdd))+K"K(,22;#2NF&$FJJx$8G$C==!::i1Z[
 	
 ++F
 r6   z
/edit/{id}r.   c                    t        ||       t        |      }|t        dd      t        |      j	                  | |      }t        |t              rg|j	                  d      s|j	                  d      dk(  rBt        t        j                  d|j	                  d      xs |j	                  dd	      d d
      S t        t        j                  dd|d
      S )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    b1
|
,C
{4cdd(,00s0CF&$VZZ%8FJJx<PT[<[11!::g.m&**YHl2m
 	
 &&H
 r6   z/update/{id}c                    t        ||       t        |      }|t        dd      |j                  d      }t	        |      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 )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    b1
|
,C
{4cdd))$)/K(,33Bs3SF&$FJJx$8G$C==!::i1Z[
 	
 &&F
 r6   z/delete/{id}c                 j   t        ||       t        |      }|t        dd      t        |      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 )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    b1
|
,C
{4cdd(,33B#3FF&$FJJx$8G$C11!::i1UV
 	
 &&F
 r6   z/listc                 6   t        |       }t        |      j                  dd |      }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 )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   