+
    Xj’  ã                   ó°  € ^ RI HtHt ^ RIHt ^ RIHtHtHtH	t	 ^ RI
Ht ^ RIHt ^RIHt ^RIHt R t]! ]]R	7      R
 4       t]! ]]R	7      R 4       t]! ]]R	7      R 4       t]! ]]R	7      R 4       t]! ]]R	7      R 4       t]! ]]R	7      R 4       t]! ]]	R	7      R 4       t]! ]]	R	7      R 4       t]! ]]R	7      R 4       t]! ]]R	7      R 4       tR# )é    )Ú	post_saveÚpost_delete)Úreceiver)Ú
AttendanceÚScheduleItemÚAcademicDebtÚOlympiad)ÚAssignmentSubmission©ÚStudent)Úcalculate_student_risk)ÚRiskPredictionc                óˆ   € V '       g   R# \        V 4      w  rr4\        P                  P                  V RVRVRVRV/R7       R# )uH   Обновить риск для конкретного студентаNÚ
risk_scoreÚ
risk_levelÚtop_factorsÚrecommended_action)ÚstudentÚdefaults)r   r   ÚobjectsÚupdate_or_create)r   ÚscoreÚlevelÚfactorsÚrecs   &    Ú!D:\diplom_project\risk\signals.pyÚupdate_student_riskr   
   sL   € çÙä!7¸Ó!@Ñ€E�'ä×Ñ×+Ñ+Øà˜%Ø˜%Ø˜7Ø  #ð	
ð ,ö ó    )Úsenderc                ó0   € \        VP                  4       R# )ua   При сохранении посещаемости - обновить риск студентаN©r   r   ©r   ÚinstanceÚkwargss   &&,r   Úattendance_savedr%      ó   € ô ˜×(Ñ(Ö)r   c                ó0   € \        VP                  4       R# )u]   При удалении посещаемости - обновить риск студентаNr!   r"   s   &&,r   Úattendance_deletedr(   "   r&   r   c                ó0   € \        VP                  4       R# )ub   При сохранении сдачи задания - обновить риск студентаNr!   r"   s   &&,r   Úsubmission_savedr*   (   r&   r   c                ó0   € \        VP                  4       R# )u^   При удалении сдачи задания - обновить риск студентаNr!   r"   s   &&,r   Úsubmission_deletedr,   .   r&   r   c                ó0   € \        VP                  4       R# )uS   При сохранении долга - обновить риск студентаNr!   r"   s   &&,r   Ú
debt_savedr.   4   r&   r   c                ó0   € \        VP                  4       R# )uO   При удалении долга - обновить риск студентаNr!   r"   s   &&,r   Údebt_deletedr0   :   r&   r   c                ó0   € \        VP                  4       R# )u€   При сохранении олимпиады - обновить риск студента (бонус снижает риск)Nr!   r"   s   &&,r   Úolympiad_savedr2   @   r&   r   c                ó0   € \        VP                  4       R# )uW   При удалении олимпиады - обновить риск студентаNr!   r"   s   &&,r   Úolympiad_deletedr4   F   r&   r   c                ó   € \        V4       R# )uv   При изменении данных студента (стипендия, работа) - обновить рискN)r   r"   s   &&,r   Ústudent_savedr6   L   s   € ô ˜Ö!r   c                ó†   € ^ RI Hp VP                  P                  VP                  R7      pV F  p\        V4       K  	  R# )u~   При создании/изменении занятия - обновить риск всех студентов группыr   )ÚgroupN)Úusers.modelsr   r   Úfilterr8   r   )r   r#   r$   r   Ústudentsr   s   &&,   r   Úschedule_savedr<   R   s4   € õ %Ø�‰×%Ñ%¨H¯N©NÐ%Ó;€HÛˆÜ˜GÖ$ó r   N)Údjango.db.models.signalsr   r   Údjango.dispatchr   Úcore.modelsr   r   r   r	   Úassignments.modelsr
   r9   r   Úrisk_calculatorr   Úmodelsr   r   r%   r(   r*   r,   r.   r0   r2   r4   r6   r<   © r   r   Ú<module>rD      s2  ðß ;Ý $ß HÓ HÝ 3Ý  Ý 3Ý "òñ$ 
ˆ)˜JÔ'ñ*ó (ð*ñ
 
ˆ+˜jÔ)ñ*ó *ð*ñ
 
ˆ)Ð0Ô1ñ*ó 2ð*ñ
 
ˆ+Ð2Ô3ñ*ó 4ð*ñ
 
ˆ)˜LÔ)ñ*ó *ð*ñ
 
ˆ+˜lÔ+ñ*ó ,ð*ñ
 
ˆ)˜HÔ%ñ*ó &ð*ñ
 
ˆ+˜hÔ'ñ*ó (ð*ñ
 
ˆ)˜GÔ$ñ"ó %ð"ñ
 
ˆ)˜LÔ)ñ%ó *ò%r   