
    Si?                     T   d dl m Z  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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mZm Z m!Z!m"Z" d dl#m$Z$  eddg      Z%dedee&   dee&   fdZ'e%jQ                  d       edddd       ee$       ee      fdedee&   dedefd       Z)e%jU                  d       d edddd       edd!"       ee$       ee      fd#e&dee&   d$ee&   dedef
d%       Z+dedee&   fd&Z,e%jQ                  d'       edddd(       ee$       ee      fdee&   dedefd)       Z-e%jQ                  d*       edddd       ee$       ee      fdedee&   dedefd+       Z.e%jU                  d,       edddd       ee$       ee      fd-e&dee&   dedefd.       Z/e%ja                  d/       ee$       ee      fd-e&dededefd0       Z1e%je                  d1       ee$       ee      fd-e&dedefd2       Z2y)3    )datetime)Optional)	APIRouterDependsQuerystatus)JSONResponse)get_db)Session)	UserLogin
CourseListStoreCourseUpdateCourse)CourseClass)InspectionApiClient)SchoolClass)_normalize_school_id)or_)CourseModelProfessionalModelProfessionalTeachingCourseModelSchoolModel	UserModel)get_current_active_userz/coursesCourses)prefixtagscourseperiod_year_queryreturnc                 $    ||S t        | dd      S )z<Prioriza query (interceptor/cookie); si no, body CourseList.Nperiod_year)getattr)r   r   s     C/var/www/pie360backend.cl/public_html/app/backend/routes/courses.py_course_period_yearr%      s    $  6=$//    /Ni  i4  u   Año período escolar)geledescriptionr"   session_userdbc                 z	   |r|j                   nd }|r|j                  nd }|rP|sNt        |      j                  d|      }t	        |t
              r"t        |      dkD  r|d   j                  d      }g }|j                  r|r|j                  t              j                  t        j                  |j                  k(  t        t        j                  dk(  t        j                  j                  d                   j                         }|r|j                  t         j"                        j                  t         j$                  |j"                  k(        j'                  t         j"                  j)                               j                         }	|	rt+        |	d         nd }
|
n|j                  t,              j                  t,        j.                  |
k(  t,        j                  dk(        j1                         }|D cg c]  }|j2                   }}t5        | |      }|rG| j6                  dn| j6                  }t9        |      j                  || j:                  d |      }t	        |t
              rB|D cg c]  }|j                  d      |v s| }}t=        t>        j@                  dd|d      S t	        |tB              rd	|v r|d	   D cg c]  }|j                  d       }}|d	   D cg c]  }|j                  d      |v s| }}t=        t>        j@                  ddt        |      t        |      dkD  rd
nd|j                  dd
      | j:                  |dd      S |e| j6                  dnd}t=        t>        j@                  d|| j6                  g n)dd| j6                  r| j6                  nd
| j:                  g dd      S | j6                  dn| j6                  }t9        |      j                  || j:                  | jD                  | jF                  ||      }t	        |tB              rC|j                  d      dk(  r/t=        t>        jH                  d|j                  dd      d d      S | j6                  dnd}t=        t>        j@                  d||d      S c c}w c c}w c c}w c c}w )Nr   pagecustomer_idid)r/   items_per_page	school_idr"      zCourses retrieved successfullyr   messagedatastatus_codecontentr7      current_page)total_itemstotal_pagesr<   r2   r7   z,Complete courses list retrieved successfully)r/   r2   r   teaching_idr3   r"   r   error  r6   Error)%r0   r3   r   get_all
isinstancelistlengetrutqueryr   filterr   deleted_status_idis_firstr   r1   user_idorder_bydescintr   professional_idall	course_idr%   r/   r   per_pager	   r   HTTP_200_OKdictcourse_namer?   HTTP_404_NOT_FOUND)r   r"   r+   r,   r0   r3   schools_listprofessional_course_idsuser_rowprof_pkpidptc_recordsptcpy
page_valueall_coursesccourse_dataavailable_course_idsr6   results                        r$   indexrh   #   sS    /;,**K*6&&DI9"2..A;.OlD)c,.?!.C$Q++D1I !IHHYV!1!11I//14i6Q6Q6U6UVZ6[\ UW 	 *--.)11X[[@A+..3356	  &-#gaj/$C hh'FGNN3CCsJ3EEJ #%  EP*PS3==*P'*P	V[	1B  ++-Q6;;
!"o--!??	 . 
 k4(&1\QUU4[D[5[1\K\"..!?'  T*v/D9DV9L#MAAEE$K#M #M&1&&9dQUU4[Lc=c1dKd"..!?'*;'7,/,<q,@qa(3(J*0// +
   DJKKDW@]}**"$kk1#$#$39;;FKKA&,oo8

 	
 kk)v{{J_$$!!&& % F &$FJJx$8G$C11!::i9
 	
 AG@S<YyG&&
 i +Q" ] $Nds$   =R)7R.R.R31R8
R8z/listur   Colegio explícito (p. ej. estudiante). Debe pertenecer al customer de la sesión, o sesión sin customer (admin).)r*   r?   r3   c                 r   |r|j                   nd }|r|j                  nd }||j                  t              j	                  t        j
                  t        |      k(  t        j                  dk(        j                         }|r4t        |dd       }||#t        |      t        |      k(  r|j
                  }|P|rNt        |      j                  d|      }	t        |	t              r"t        |	      dkD  r|	d   j                  d      }|t!        t"        j$                  ddg d      S 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   r0   r.   r1   r4   z#Courses list retrieved successfullyr5   r8   )r3   r?   r"   r   r@   rA   r6   rB   )r0   r3   rI   r   rJ   r1   rQ   rK   rM   r#   r   rC   rD   rE   rF   rG   r	   r   rV   r   get_all_listrW   rY   )r?   r"   r3   r+   r,   r0   effective_school_idschcustrZ   rg   s              r$   rj   rj      s    /;,**K4@,00d HH[!VKNNc)n4k6S6SWX6XYUW 	
 3t4D"t'7CI[IY<Y&)ff#"{"2..A;.OlD)c,.?!.C".q/"5"5d";"**@
 	
 _))%;K * F &$FJJx$8G$C11!::i9
 	
 &&<
 r&   c                     | r| j                   nd }| r| j                  nd }|rP|sNt        |      j                  d|      }t	        |t
              r"t        |      dkD  r|d   j                  d      }t        |      S )Nr   r.   r1   )	r0   r3   r   rC   rD   rE   rF   rG   r   )r+   r,   r0   r3   rZ   s        r$   _resolve_session_school_idro      ss    .:,**K*6&&DI9"2..A;.OlD)c,.?!.C$Q++D1I	**r&   z/import_from_inspectionu*   Año escolar para Inspection y period_yearc                 F   t        ||      }|t        t        j                  ddd d      S t	               }|j                         st        t        j                  ddd d      S | t        |       nt        j                         j                  }|j                  ||      }|j                  d      s2t        t        j                  d	|j                  d
      xs d|d      S t        |      j                  |||      }t!        |t"              rC|j                  d      dk(  r/t        t        j$                  d|j                  d
d      d d      S |j                  dd      }|j                  dd      }	d| d|	 d}
t        t        j&                  d|
|d      S )Ni  u:   No se pudo determinar el colegio (school_id) de la sesiónr5   r8   i  zQInspection API not configured (INSPECTION_API_USERNAME / INSPECTION_API_PASSWORD))
colegio_idaniooki  r6   z(Error al obtener cursos desde Inspectionr   r@     zError al importar cursosimportedr   skippedu#   Importación de cursos finalizada: z	 nuevos, z# omitidos (duplicados o sin datos).r4   )ro   r	   r   HTTP_400_BAD_REQUESTr   is_configuredHTTP_503_SERVICE_UNAVAILABLErQ   r   nowyearfetch_courses_listrG   HTTP_502_BAD_GATEWAYr   import_from_inspectionrD   rW   HTTP_500_INTERNAL_SERVER_ERRORrV   )r"   r+   r,   r3   clientrr   remoterg   ru   rv   msgs              r$   r~   r~      s    +<<I33W
 	
 !"F!;;n
 	
  +63{HLLN<O<OD&&)$&GF::d33!::i0^4^
 	
 _33IvtLF&$FJJx$8G$C==!::i1KL
 	
 zz*a(HjjA&G/z7)Kn
oC&&
 r&   z/storec                 t   t        | d      r| j                         n| j                         }|||d<   n|j                  d      	 |r|j                  nd }d }|rNt        |      j                  d|      }t        |t              r"t        |      dkD  r|d   j                  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 )N
model_dumpr"   r   r.   r1   r3   r   r@   rt   r6   zError creating courser5   r8      zCourse created successfully)hasattrr   rW   rG   r0   r   rC   rD   rE   rF   r   storer	   r   r   HTTP_201_CREATED)	r   r"   r+   r,   course_inputsr0   r3   rZ   rg   s	            r$   r   r   4  s3    ,36<+HF%%'fkkmM'2m$			=	)	1 /;,**KI"2..A;.OlD)c,.?!.C$Q++D1I "+M+_""=1F&$FJJx$8G$C==!::i1HI
 	
 ++4
 r&   z
/edit/{id}r1   c                 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   rA   r6   Course not foundr5   r8   r4   zCourse retrieved successfully)r   rG   rD   rW   r	   r   rY   rV   )r1   r"   r+   r,   rg   s        r$   editr   a  s     _  [1F&$VZZ%8FJJx<PT[<[11!::g.[&**YHZ2[
 	
 &&6
 r&   z/update/{id}c                    |j                  d      }|r|j                  nd }d }|rNt        |      j                  d|      }t	        |t
              r"t        |      dkD  r|d   j                  d      }d|vr||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 )NT)exclude_unsetr   r.   r1   r3   r   r@   rt   r6   zError updating courser5   r8   r4   zCourse updated successfully)rW   r0   r   rC   rD   rE   rF   rG   r   updater	   r   r   rV   )	r1   r   r+   r,   r   r0   r3   rZ   rg   s	            r$   r   r   }  s   KKdK3M /;,**KI"2..A;.OlD)c,.?!.C$Q++D1I -'%.k"_##B6F&$FJJx$8G$C==!::i1HI
 	
 &&4
 r&   z/delete/{id}c                    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@   rA   r6   r   r5   r8   r4   zCourse deleted successfully)	r   deleterD   rW   rG   r	   r   rY   rV   )r1   r+   r,   rg   s       r$   r   r     s    _##B'F&$FJJx$8G$C11!::i1CD
 	
 &&4
 r&   )3r   typingr   fastapir   r   r   r   fastapi.responsesr	   app.backend.db.databaser
   sqlalchemy.ormr   app.backend.schemasr   r   r   r    app.backend.classes.course_classr   )app.backend.classes.inspection_api_clientr    app.backend.classes.school_classr   "app.backend.classes.teaching_classr   
sqlalchemyr   app.backend.db.modelsr   r   r   r   r   app.backend.auth.auth_userr   coursesrQ   r%   postrh   rG   rj   ro   r~   r   r   putr   r    r&   r$   <module>r      sE     5 5 * * " P P 8 I 8 C   ?


0
 0x} 0QYZ]Q^ 0 	c "'tKb!c%&=>&/	CC#C C 		C CJ 	W!&tKb!c$ I  &&=>&/==#= }= = 	= =@+ +Xc] + 	'(!&tKw!x%&=>&/<#<< 	< )<~ 	h "'tKb!c%&=>&/	**#* * 		* *X 	\ "'tKb!c%&=>&/	#  		 6 	^DKLcDdt{  }C  uD "s "L "	 "jq " "H 	.56M.N^efl^m s ) T[   r&   