ó
    Xj’  ã                   ór  • S SK JrJr  S SKJr  S SKJrJr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	 r\" \\S
9S 5       r\" \\S
9S 5       r\" \\S
9S 5       r\" \\S
9S 5       r\" \\S
9S 5       r\" \\S
9S 5       r\" \\	S
9S 5       r\" \\	S
9S 5       r\" \\S
9S 5       r\" \\S
9S 5       rg)é    )Ú	post_saveÚpost_delete)Úreceiver)Ú
AttendanceÚScheduleItemÚAcademicDebtÚOlympiad)ÚAssignmentSubmission©ÚStudenté   )Úcalculate_student_risk)ÚRiskPredictionc                 óv   • U (       d  g[        U 5      u  pp4[        R                  R                  U UUUUS.S9  g)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   
   sD   € æØä!7¸Ó!@Ñ€E�'ä×Ñ×+Ñ+ØàØØ"Ø"%ñ	
ð ,ò ó    )Úsenderc                 ó.   • [        UR                  5        g)ua   При сохранении посещаемости - обновить риск студентаN©r   r   ©r    ÚinstanceÚkwargss      r   Úattendance_savedr&      ó   € ô ˜×(Ñ(Õ)r   c                 ó.   • [        UR                  5        g)u]   При удалении посещаемости - обновить риск студентаNr"   r#   s      r   Úattendance_deletedr)   "   r'   r   c                 ó.   • [        UR                  5        g)ub   При сохранении сдачи задания - обновить риск студентаNr"   r#   s      r   Úsubmission_savedr+   (   r'   r   c                 ó.   • [        UR                  5        g)u^   При удалении сдачи задания - обновить риск студентаNr"   r#   s      r   Úsubmission_deletedr-   .   r'   r   c                 ó.   • [        UR                  5        g)uS   При сохранении долга - обновить риск студентаNr"   r#   s      r   Ú
debt_savedr/   4   r'   r   c                 ó.   • [        UR                  5        g)uO   При удалении долга - обновить риск студентаNr"   r#   s      r   Údebt_deletedr1   :   r'   r   c                 ó.   • [        UR                  5        g)u€   При сохранении олимпиады - обновить риск студента (бонус снижает риск)Nr"   r#   s      r   Úolympiad_savedr3   @   r'   r   c                 ó.   • [        UR                  5        g)uW   При удалении олимпиады - обновить риск студентаNr"   r#   s      r   Úolympiad_deletedr5   F   r'   r   c                 ó   • [        U5        g)uv   При изменении данных студента (стипендия, работа) - обновить рискN)r   r#   s      r   Ústudent_savedr7   L   s   € ô ˜Õ!r   c                 ó~   • SSK Jn  UR                  R                  UR                  S9nU H  n[        U5        M     g)u~   При создании/изменении занятия - обновить риск всех студентов группыr   r   )ÚgroupN)Úusers.modelsr   r   Úfilterr9   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
   r:   r   Úrisk_calculatorr   Úmodelsr   r   r&   r)   r+   r-   r/   r1   r3   r5   r7   r=   © r   r   Ú<module>rE      s2  ðß ;Ý $ß HÓ HÝ 3Ý  Ý 3Ý "òñ$ 
ˆ)˜JÑ'ñ*ó (ð*ñ
 
ˆ+˜jÑ)ñ*ó *ð*ñ
 
ˆ)Ð0Ñ1ñ*ó 2ð*ñ
 
ˆ+Ð2Ñ3ñ*ó 4ð*ñ
 
ˆ)˜LÑ)ñ*ó *ð*ñ
 
ˆ+˜lÑ+ñ*ó ,ð*ñ
 
ˆ)˜HÑ%ñ*ó &ð*ñ
 
ˆ+˜hÑ'ñ*ó (ð*ñ
 
ˆ)˜GÑ$ñ"ó %ð"ñ
 
ˆ)˜LÑ)ñ%ó *ñ%r   