
    U+i                        d Z ddl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 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j3                  d       edd       ee       ee      fdededefd       Zej9                  d       edd       ee       ee      fdededefd       Zej3                  d       ed       edd       eddd       ee       ee      fded ee   d!ededef
d"       Zej?                  d#       edd$       ee       ee      fd%edededefd&       Z ej9                  d'       edd(       ee       ee      fdee   dedefd)       Z!y)*u\   API tabla `alerts`: listar, contar no leídas, marcar revisada, backfill desde asignaciones.    )OptionalSetTuple)	APIRouterDependsQuerystatus)JSONResponse)Session)get_current_active_user)AppAlertClass)get_db)#ProfessionalDocumentAssignmentModel)	UserLoginz/alertsAlerts)prefixtagsz/unread-count.zID del profesional)descriptionprofessional_idsession_userdbc                 8   t        |      }|j                  |       }|j                  d      dk(  r1t        t        j
                  d|j                  dd      ddid	      S t        t        j                  d
ddt        |j                  dd            id	      S )Nr	   error  messageErrorcountr   r	   r   datastatus_codecontent   OK)r   count_unreadgetr
   r	   HTTP_500_INTERNAL_SERVER_ERRORHTTP_200_OKint)r   r   r   svcresults        F/var/www/pie360backend.cl/public_html/app/backend/routes/app_alerts.pyalerts_unread_countr-      s     
Co.Fzz(w&=="vzz)W/MX_abWcd
 	
 &&c&**Wa"89:
     z/mark-all-reviewedu!   Profesional dueño de las alertasc                    t        |      }|j                  |       }|j                  d      dk(  r.t        t        j
                  d|j                  dd      d      S 	 |j                          t        t        j                  d	d
dt        |j                  dd            id      S # t        $ rA}|j                          t        t        j
                  dt        |      d      cY d}~S d}~ww xY w)zTMarca todas las alertas pendientes como revisadas (al abrir el panel de la campana).r	   r   r   r   r   r	   r   r    Nr#   r$   updatedr   r   )r   "mark_all_reviewed_for_professionalr&   r
   r	   r'   commit	Exceptionrollbackstrr(   r)   )r   r   r   r*   r+   es         r,   mark_all_alerts_reviewedr8   )   s     
C33ODFzz(w&=="vzz)W/MN
 	


		 &&FJJy!$< =>
   

=="s1v6
 	

s    B* *	C436C/)C4/C4 Nz Filtrar: 0 pendiente, 1 revisadad      r   )gele	status_idlimitc           	      $   t        |      }|j                  | ||      }|j                  d      dk(  r/t        t        j
                  d|j                  dd      g d      S t        t        j                  d	d
|j                  dg       d      S )N)r   r>   r?   r	   r   r   r   r   r   r    r#   r$   r   )r   list_alertsr&   r
   r	   r'   r(   )r   r>   r?   r   r   r*   r+   s          r,   rA   rA   I   s     
C___	Y^__Fzz(w&=="vzz)W/MWYZ
 	
 &&4FB9OP r.   z/{alert_id}/reviewedu)   Debe coincidir con el dueño de la alertaalert_idc                    t        |      }|j                  | |      }|j                  d      dk(  r.t        t        j
                  d|j                  dd      d      S 	 |j                          t        t        j                  d	|j                  dd
      d      S # t        $ rA}|j                          t        t        j                  dt        |      d      cY d }~S d }~ww xY w)Nr	   r   i  r   zNo encontrador0   r    r   r#   r$   )r   mark_reviewedr&   r
   r	   HTTP_404_NOT_FOUNDr3   r4   r5   r'   r6   r(   )rB   r   r   r   r*   r+   r7   s          r,   mark_alert_reviewedrF   ^   s     
Cx9Fzz(w&11"vzz)_/UV
 	


		 &&6::i+FG   

=="s1v6
 	

s   !B 	C)(6C$C)$C)z/backfill-from-assignmentszISi se omite, procesa todas las asignaciones pendientes (puede ser pesado)c           	      $   	 |j                  t              j                  t        j                  dk(        }| +|j                  t        j                  t        |       k(        }|j                         }t        |      }t               }|D ]s  }t        |j                        t        |j                        t        |j                        f}||v rF|j                  |       |j                  |d   |d   |d          u |j                          t        t        j                   ddt#        |      t#        |      dd	
      S # t$        $ rA}	|j'                          t        t        j(                  dt+        |	      d
      cY d}	~	S d}	~	ww xY w)u`   Sincroniza una alerta resumen por (período, curso, profesional) según asignaciones pendientes.r   Nr;      )period_year	course_idr   r#   r$   )scopes_syncedpending_assignment_rowsr   r    r   r0   )queryr   filterr>   r   r)   allr   setrI   rJ   add#sync_scope_summary_from_assignmentsr3   r
   r	   r(   lenr4   r5   r'   r6   )
r   r   r   qrowsr*   seenrowkeyr7   s
             r,    backfill_alerts_from_assignmentsrY   z   se   $
HH89@@/99Q>
 &<LLPSTcPddeAuuwB*-% 		Cs'S]]);SATAT=UVCd{HHSM33Fa& #A 4 		 			**%(Y/24y

 
	
  

=="s1v6
 	

s   EE 	F6F
F
F)"__doc__typingr   r   r   fastapir   r   r   r	   fastapi.responsesr
   sqlalchemy.ormr   app.backend.auth.auth_userr   #app.backend.classes.app_alert_classr   app.backend.db.databaser   app.backend.db.modelsr   app.backend.schemasr   alertsr&   r)   r-   postr8   rA   patchrF   rY    r.   r,   <module>rh      s   b ' ' 5 5 * " > = * E )	)8*	5 O 2FG%&=>&/ 	 , !" 2UV%&=>&/ 	 #> B :$T7YZsqS)%&=>&/}  	
 	 ( $% !2]^%&=>&/	  		 &6 )*%*_& &&=>&/-
c]-

 -
 	-
 +-
r.   