
    Ph                     P    d dl m Z  d dl d dlmZ  G d dej                        Zy)    )datetime)*)cmf_course_progressc                        e Zd Z fdZd Zd Zed        Ze eddd      d               Z	e eddd	      d
               Z
 xZS )CmfCourseProgressc                 8   | j                  ddg       | j                  j                  rR| j                  dk(  r| j                  j	                          n(| j                  dv r| j
                  j	                          | j                          t        |    |i |S )Ncourse.nameresponsible_idin_progress)doneexpiredfailed)	load_fieldsstatus
is_changedstatus_in_progress_startset_nowstatus_closed_at_calc_course_progress_notifysupersave)selfargskwargs	__class__s      -./modules/learn/models/cmf_course_progress.pyr   zCmfCourseProgress.save   s    -)9:;;;!!{{m+--557 ==%%--/))+w|T,V,,    c                    d}d}| j                   j                  rN| j                   dv r@d}d| j                  j                   d| j                   j                  | j                       }nJ| j                   j                  r4| j                   j
                  dk(  rd}d| j                  j                   }|rG|rDt        j                  j                  | | j                  j                  j
                  ||d	d
       y y y )N )r   r   u    Вы завершили курсu   Вы завершили u   . Результат: canceledu   Курс отмененu   Курс отменен    Tobjpersonnamemsgpriorityforce_notify_current_person)r   r   courser%   choicesvaluemodels	CmfNotifyplace_notifyresponsibleid)r   notify_name
notify_msgs      r   r   z.CmfCourseProgress._calc_course_progress_notify   s    
;;!!dkk5G&G<K3DKK4D4D3EE[\`\g\g\o\optp{p{\|[}~J[[##(9(9Z(G3K3DKK4D4D3EFJ:))''**00 ,0 *  &;r   c                    | j                  ddg       | j                         }d}d}d}|D ]x  }|j                  j                          |j                  j
                  | j                  j
                  k7  r|dz  }|j                  dk(  r|dz  }d|j                  dk(  st|dz  }z ||z  dz  | _        ||z  | j                  j                  k\  rd| _        n|dk(  rd| _        | j                          y )	Nztree_nodes.statuscourse.success_course_pctr   r!   r   r   d   r   )
r   get_tree_nodes_recursiver   loadr0   r+   progress_pctr)   success_course_pctr   )r   nodestotal_amountprogressr   nodes         r   _lms_update_progressz&CmfCourseProgress._lms_update_progress)   s    -/JKL--/ 	!DKKww}}-!{{f$A-q 	! &4; |#(F(FF DKA"DK		r   c                 \    | j                   j                         }|dv rt        dd       y y )N)r   r   r   r    u&   Данный курс завершёнT)abort)r   r7   	cmf_alert)course_progressr   s     r   check_completed_course_progressz1CmfCourseProgress.check_completed_course_progressM   s1     !'',,.>>>dK ?r   Tz@hourly)	only_once
system_jobschedulec                  d   t         j                  d       t        j                         } 	 t        j
                  j                  g ddd| ggddgddg	      }|sy |D ]G  }|j                  |j                  j                  dz  k\  rd
|_
        nd|_
        |j                          I t                )Nu   Запуск крона на отмечание незаконченных прогрессов по курсу с просроченными дедлайнами как просроченныеr   =r   plan_end_date<r8   r4   r   r5   )filterfieldsslicer   r   )gdebugr   nowr,   r   listr8   r)   r9   r   r   
cmf_commit)rQ   course_progressesrB   s      r   cron_mark_expiredz#CmfCourseProgress.cron_mark_expiredT   s     	
  U  	Vlln & 8 8 = =2$c3/ '(CD#h !> ! %#4 '"//?3I3I3\3\_b3bb-3O*-6O*$$&' L) r   z@dailyc            	          t         j                  d       d} d}	 t        j                  j	                  g dg ddg| | |z   g      }|sy | |z  } |D ]  }|j
                  sd	|j                  j                   }d	|j                  j                   d
|j
                  j                  j                  d       }t        j                  j                  ||j                  j                  j                  ||dd        )Nz*Run CmfCourseProgress.cron_notify_deadliner   r5   TrH   )r/   r	   rJ   r0   )rL   rM   order_byrN   u   Завершите курс u    до z%d.%m.%Yr!   r"   )rO   rP   r,   r   rR   rJ   r)   r%   r+   strftimer-   r.   r/   r0   )startlimitrT   rB   r1   r2   s         r   cron_notify_deadlinez&CmfCourseProgress.cron_notify_deadlineq   s6    	
<= & 8 8 = =5Feem,	 !> ! %UNE#4 "00$@AWAWA\A\@]"^K#?@V@V@[@[?\\bcr  dA  dA  dG  dG  dP  dP  Q[  d\  c]  "^J$$11+.::==CC(&!"48 2  r   )__name__
__module____qualname__r   r   r>   staticmethodrC   cmf_deferred_jobrU   r[   __classcell__)r   s   @r   r   r      su    -(H L L 	J K 6 I J r   r   N)r   cmf.includemodules.learn.fieldsr   r    r   r   <module>re      s#      4K+== Kr   