
    Y~h                     L    d dl m Z  d dlT d dlmZ  G d dej                  ZdS )    )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                 2   |                      ddg           | j        j        rG| j        dk    r| j                                         n"| j        dv r| j                                         |                                   t                      j        |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:;;;;! 	0{m++-557777 ===%--///))+++uww|T,V,,,    c                 ^   d}d}| j         j        r3| j         dv r*d}d| j        j         d| j         j        | j                   }n-| j         j        r!| j         j        dk    rd}d| j        j         }|r8|r8t          j                            | | j	        j
        j        ||d	d
           d S d S d S )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    
;! 	Gdk5G&G&G=K~DK4D~~\`\g\optp{\|~~JJ[# 	G(9Z(G(G4KFDK4DFFJ 	: 	))'*0 ,0 *     	 	 	 	r   c                    |                      ddg           |                                 }d}d}d}|D ][}|j                                         |j        j        | j        j        k    r|dz  }|j        dk    r|dz  }K|j        dk    r|dz  }\||z  dz  | _        ||z  | j        j        k    rd| _        n|dk    rd| _        | 	                                 d S )	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LL--// 	! 	!DKw}--!{f$$A--q %4; |#(FFF DKKA"DK		r   c                 f    | j                                         }|dv rt          dd           d S d S )N)r   r   r   r    u&   Данный курс завершёнT)abort)r   r7   	cmf_alert)course_progressr   s     r   check_completed_course_progressz1CmfCourseProgress.check_completed_course_progressM   sF     !',,..>>>>dKKKKKK ?>r   Tz@hourly)	only_once
system_jobschedulec                  ^   t                               d           t          j                    } 	 t          j                            g ddd| ggddgdd	g
          }|sd S |D ]=}|j        |j        j	        d	z  k    rd|_
        nd|_
        |                                 >t                       )Nu   Запуск крона на отмечание незаконченных прогрессов по курсу с просроченными дедлайнами как просроченныеT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  	V  	Vlnn	 & 8 = =222$c3/ '(CD#h !> ! ! % #4 ' '"/?3I3\_b3bbb-3O**-6O*$$&&&&LLL)	r   z@dailyc            	         t                               d           d} d}	 t          j                            g dg ddg| | |z   g          }|sd S | |z  } |D ]{}|j        rrd	|j        j         }d	|j        j         d
|j        j        	                    d           }t          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   sI    	
<===	 & 8 = =555FFFeem,	 !> ! ! % UNE#4  "0 "^AWA\"^"^K "^@V@[  "^  "^cr  dA  dG  dP  dP  Q[  d\  d\  "^  "^J$11+.:=C(&!"48 2   %	r   )__name__
__module____qualname__r   r   r>   staticmethodrC   cmf_deferred_jobrU   r[   __classcell__)r   s   @r   r   r      s        - - - - -  (  H L L \L 	JJJ  KJ \6 III  JI \    r   r   N)r   cmf.includemodules.learn.fieldsr   r    r   r   <module>re      sw              4 4 4 4 4 4K K K K K+= K K K K Kr   