
    U+i,                        d dl mZmZ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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ej=                  d       edddd       ee       ee      fdee   dedefd       Z ej=                  d       edd       edd       ee       ee      fdedee   dedefd       Z! G d  d!e      Z" G d" d#e      Z#ej=                  d$       ed       ed       eddd%       ee       ee      fd&e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&y)*    )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           
         t        ||      }|t        t        j                  dddd      S |dk  r$t        t        j                  ddddddd	d      S t        |      }|j                  || 
      }|j                  d      dk(  r/t        t        j                  d|j                  dd      dd      S t        t        j                  dd|j                  d      d      S )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         ]/var/www/pie360backend.cl/public_html/app/backend/routes/professional_document_assignments.pyprofessional_home_statsr8      s     *"l;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                 B   t        |      }|j                  |       }|j                  d      dk(  xr |j                  |       }|r=t	        |j                  dd            }t        t        j                  dd|ddd	
      S t        |      }|j                  | |      }	|	j                  d      dk(  r1t        t        j                  d|	j                  dd      ddid	
      S t        t        j                  ddt	        |	j                  dd            ddd	
      S )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                   b    e Zd ZU eed<   dZee   ed<    ee      Z	e
e   ed<   dZee   ed<   y)AssignmentSyncItemdocument_type_idNdocument_iddefault_factorystudent_idsdeadline_at)__name__
__module____qualname__rB   __annotations__rL   r   r   listrO   r   rP   str r9   r7   rJ   rJ   ~   s7    !%K#%"48Kc8!%K#%r9   rJ   c                   N    e Zd ZU eed<   eed<   eed<    ee      Zee	   ed<   y)AssignmentSyncBody	course_idr+   r   rM   itemsN)
rQ   rR   rS   rB   rT   r   rU   r[   r   rJ   rW   r9   r7   rY   rY      s(    N&+D&AE4"#Ar9   rY   /)r   r   rZ   c                 @   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 )N)r   rZ   r+   r
   r,   r-   r   r.   r    r   r!   r$   r%   )r   get_groupedr2   r   r
   r3   r0   )rZ   r+   r   r   r   r5   r6   s          r7   list_assignmentsr_      s     .b
1C__'  F
 zz(w&==!::i9

6*
 	
 &&JJv&
 r9   bodyc                    t        |      }| j                  D cg c]1  }|j                  |j                  |j                  |j
                  d3 }}|j                  | j                  | j                  | j                  |      }|j                  d      dk(  r/t        t        j                  d|j                  dd      d d	      S t        t        j                  d
|j                  dd      d d	      S c c}w )N)rK   rL   rO   rP   )r   rZ   r+   r[   r
   r,   r-   r   zError al guardarr   r!   r$   r%   )r   r[   rK   rL   rO   rP   sync_replacer   rZ   r+   r2   r   r
   r3   r0   )r`   r   r   r5   ititems_payloadr6   s          r7   sync_assignmentsre      s     .b
1C **+  !# 3 3>>>>>>		
+M + $$..,,	  F zz(w&==!::i1CD
 	
 &&6::i+FPTU 1+s   6C7)'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   rY   r_   postre   rW   r9   r7   <module>rs      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   