
    Ai,                        S SK JrJrJrJr  S SKJrJrJrJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  \" SS/S9r\R=                  S5      \" SSSSS9\" \5      \" \5      4S\\   S\S\4S jj5       r \R=                  S5      \" SSS9\" SSS9\" \5      \" \5      4S\S\\   S\S\4S jj5       r! " S  S!\5      r" " S" S#\5      r#\R=                  S$5      \" S5      \" S5      \" SSSS%9\" \5      \" \5      4S&\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&g)*    )AnyDictListOptional)	APIRouterDependsQuerystatus)JSONResponse)	BaseModelField)Session)get_current_active_user)AppAlertClass)session_professional_scope_id)#ProfessionalDocumentAssignmentClass)get_db)	UserLoginz"/professional_document_assignmentsz!Professional document assignments)prefixtagsz/home-statsNi  i4  uc   Año de período escolar (alineado a cookie); si se omite, cuenta todos los períodos en documentos)geledescriptionperiod_yearsession_userdbc           
         [        X!5      nUc  [        [        R                  SSSS.S9$ US:  a!  [        [        R                  SSSSSSS	.S.S9$ [        U5      nUR                  X0S
9nUR                  S5      S:X  a,  [        [        R                  SUR                  SS5      SS.S9$ [        [        R                  SSUR                  S5      S.S9$ )zUTotales para el home del profesional: documentos, cursos PTC y estudiantes por curso.Ni  zNo autorizador
   messagedatastatus_codecontentr      OK)assigned_documentsloaded_documentscourses_assignedstudents_in_coursesprofessional_idr   r
   error  r   Errorr    )	r   r   r
   HTTP_403_FORBIDDENHTTP_200_OKr   
home_statsgetHTTP_500_INTERNAL_SERVER_ERROR)r   r   r   scopesvcresults         fc:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routes\professional_document_assignments.pyprofessional_home_statsr8      s     *";E}11"M
 	
 qy***+()()+,		
 	
 .b
1C^^E^KFzz(w&==!::i9
 	
 &&4F9KL     z/pending-count.zID del profesional)r   uA   Año de período escolar; si se omite, cuenta todos los períodosr+   c                 @   [        U5      nUR                  U 5      nUR                  S5      S:H  =(       a    UR                  U 5      nU(       a:  [	        UR                  SS5      5      n[        [        R                  SSUSS.S	.S
9$ [        U5      nUR                  U US9n	U	R                  S5      S:X  a.  [        [        R                  SU	R                  SS5      SS0S	.S
9$ [        [        R                  SS[	        U	R                  SS5      5      SS.S	.S
9$ )u   
Prioridad: si el profesional ya tiene filas en `alerts`, el contador es solo alertas no revisadas.
Si aún no hay alertas (tabla vacía / sin migrar), se usa el conteo de asignaciones pendientes.
r
   successcountr   r$   r%   alerts)r<   sourcer   r!   r*   r,   r-   r   r.   assignments)r   count_unreadr2   has_any_alert_for_professionalintr   r
   r0   r   count_pendingr3   )
r+   r   r   r   	alert_svcar
use_alertscntr5   r6   s
             r7   pending_assignments_countrH   F   s4    b!I				0B!Y. 93[3[4J "&&!$%**"%:
 	
 .b
1C'  F zz(w&==!::i9 !
 	
 &&VZZ34'

 
r9   c                   d    \ rS rSr% \\S'   Sr\\   \S'   \" \	S9r
\\   \S'   Sr\\   \S'   Srg)	AssignmentSyncItem~   document_type_idNdocument_iddefault_factorystudent_idsdeadline_at )__name__
__module____qualname____firstlineno__rB   __annotations__rM   r   r   listrP   r   rQ   str__static_attributes__rR   r9   r7   rJ   rJ   ~   s7    !%K#%"48Kc8!%K#%r9   rJ   c                   P    \ rS rSr% \\S'   \\S'   \\S'   \" \S9r\	\
   \S'   Srg)	AssignmentSyncBody   	course_idr+   r   rN   itemsrR   N)rS   rT   rU   rV   rB   rW   r   rX   r_   r   rJ   rZ   rR   r9   r7   r\   r\      s(    N&+D&AE4"#Ar9   r\   /)r   r   r^   c                 0   [        U5      nUR                  UU US9nUR                  S5      S:X  a;  [        [        R
                  SUR                  SS5      UR                  S5      S.S	9$ [        [        R                  S
SUR                  S5      S.S	9$ )N)r   r^   r+   r
   r,   r-   r   r.   r    r   r!   r$   r%   )r   get_groupedr2   r   r
   r3   r0   )r^   r+   r   r   r   r5   r6   s          r7   list_assignmentsrc      s     .b
1C__'  F
 zz(w&==!::i9

6*
 	
 &&JJv&
 r9   bodyc                    [        U5      nU R                   Vs/ s H2  nUR                  UR                  UR                  UR
                  S.PM4     nnUR                  U R                  U R                  U R                  US9nUR                  S5      S:X  a,  [        [        R                  SUR                  SS5      S S.S	9$ [        [        R                  S
UR                  SS5      S S.S	9$ s  snf )N)rL   rM   rP   rQ   )r   r^   r+   r_   r
   r,   r-   r   zError al guardarr   r!   r$   r%   )r   r_   rL   rM   rP   rQ   sync_replacer   r^   r+   r2   r   r
   r3   r0   )rd   r   r   r5   ititems_payloadr6   s          r7   sync_assignmentsri      s    .b
1C **+ B !# 3 3>>>>>>		
   + $$..,,	  F zz(w&==!::i1CD
 	
 &&6::i+FPTU 1+s   9C2)'typingr   r   r   r   fastapir   r   r	   r
   fastapi.responsesr   pydanticr   r   sqlalchemy.ormr   app.backend.auth.auth_userr   #app.backend.classes.app_alert_classr   &app.backend.classes.professional_classr   :app.backend.classes.professional_document_assignment_classr   app.backend.db.databaser   app.backend.schemasr   !professional_document_assignmentsr2   rB   r8   rH   rJ   r\   rc   postri   rR   r9   r7   <module>rw      s   , , 5 5 * % " > = P j * )$-/
-	.% ! #&&}5!&y	" &&=>&/-#- - 	- 6-` #&&'78 2FG!&W" &&=>&/44#4 4 	4 94n& &B B #&&s+3Z :STd3%&=>&/  	
 	 ,@ #'', &&=>&/!
!! 	! -!r9   