B
    Efp                 @   sD   d dl Z d dlZd dlT d dlmZ d dlmZ G dd deZdS )    N)*)fields)CmfOrderc                   s&  e Zd ZdZdZdZejejdddZ	ejej
ddZejej
d	dZejej
d
dZejej
ddZejejddZejejddZejjejjdddddZejjejjdddddZejejdddZdd Zdd Zdd Zdd Zdd Zdd  Z fd!d"Zed(d$d%Z d&d' Z!  Z"S ))
CmfTriggerZTriggerZsettingsZTRGu<   К какой модели относится триггерT)captionindexu(   Настройка точки входа)r   u.   Фильтр для методов get и listuJ   Где должен вызываться, отображение в вебu,   Все остальные параметрыu8   Имя вызываемой функции у CmfTriggeruM   Кеш даты и времени следующего вызова из cronu!   Настройка статусаZCmfStatusOptZtriggersF)r   ZmodelZbackrefZvisibleZ	CmfStatusu(   Где должен вызыватьсяc             C   s.   x(| j jD ]}t||d |d d  q
W d S )N	fieldNamevalueid)	json_datar	   setattr)selfobjfield r   ./common/models/cmf_trigger.py	set_field'   s    zCmfTrigger.set_fieldc             C   s   x| j D ]}|d sq|dsNt||d |d d d  |d d |d< q|d |d kr|d |d d }t|d |krd}nd}t||d |d |  |d | |d< qW | jdd d	S )
uY   
        Распределение из списка пользователей
        r	   Zrecent_personr   r   r
      T)Z	only_dataN)r   getr   r   lensave)r   r   r   Z
next_indexr   r   r   distribution_person+   s    
zCmfTrigger.distribution_personc             C   sj   xd| j jD ]X}t|d }|s"d S | s<td|  d S |j  |jjtjt	|d |_
P q
W d S )Nr	   u[   Неверно указан срок выполнения в "автоматизация": )Zdays)r   r	   strisdigit	cmf_alertZplan_start_dateZset_nowdatetime	timedeltaintZplan_end_date)r   r   r   r	   r   r   r   set_plan@   s    
zCmfTrigger.set_planc             C   s|   g }x0| j jD ]$}x|d D ]}||d  qW qW |rx|| x2|D ]*}t||jrJtdt||j dd qJW dS )u   
        Проверка что поля заполнены
        json_data = {..., value: [field_name1, field_name2, ...]}
        r	   Z	classNameu2   Необходимо заполнить поле: T)abortN)r   r	   appendZload_fieldsgetattrZis_nullr   r   )r   r   field_namesr   option
field_namer   r   r   required_fieldsL   s    

zCmfTrigger.required_fieldsc             C   s   t jj| jjd d d dgd}|s2tddd |js>d	|_|jrJ|jn|j}tj	 j
ddddd
}|j|tj	 |tj| jjd d d |d dS )u7   
        Создание автозадачи
        r   r	   Ztask_idz***)r
   r   u=   Необходимо создать шаблон задачиT)r   z.CmfStatus:00000000-0000-0000-0001-000000000002)ZhourZminutesecondZmicroseconddeadline)Zseconds)parentZ
alarm_dater'   responsibleN)modelsZCmfTaskr   r   r	   r   statusr)   r   ZnowreplaceZcreate_from_templater   Zjson)r   r   Zobj_taskr)   Z	start_dayr   r   r   	auto_task[   s    "zCmfTrigger.auto_taskc             C   s    t dtjjj tjgd d S )Nzsuccess_trigger-)Zevent_persons)Zcmf_emit_eventgZcurrent_personr
   r	   )r   r   r   r   r   success_emitp   s    zCmfTrigger.success_emitc                s   | j d | _t j||S )Nr	   )json_actioncache_actionsuperr   )r   argskwargs)	__class__r   r   r   s   s    zCmfTrigger.saveNc             O   s2   t jjdd|g|d}||_|d |_|  |S )Nr
   z==)filterr   json_entry_point)r*   r   r   Zcache_kanban_statusr7   r   )clsZobj_idZkanban_status_idr   r3   r4   r   r   r   r   kanban_movew   s
    
zCmfTrigger.kanban_movec       	      C   s
  d}| j jd}|rd}x|D ]}t||jrt||}|| d k	rt|tjrxJ|jD ] }|| |jjkrtd}qZd}P qZW q|| |jjjkrd}qd}P qd}q d}P q W |rdd|jg}| j	r|| j	g}t
t|j j|d}|sd}|rt| | jj| |S )NTchanged_fieldsFr
   z==)r6   )r7   r	   r   r!   Z
is_changed
isinstancer   Z
CmfM2MBaser
   json_filtervarsr*   
class_name	func_name)	r   r   Zallowr:   r$   r   itemZ_filterZnew_objr   r   r   check   s>    


zCmfTrigger.check)N)#__name__
__module____qualname__Zui_nameZ	ui_moduleZcode_prefixr   ZFieldZ	CmfStr256Z	cmf_modelZCmfJsonr7   r<   r0   r   r?   ZCmfDateTimeZcache_periodic_next_datecmfZCmfRelationZcache_status_optr+   ZCmfStr32r1   r   r   r   r%   r-   r/   r   classmethodr9   rA   __classcell__r   r   )r5   r   r   	   sB   r   )copyr   Zcmf.includerE   r   Zcommon.models.cmf_orderr   r   r   r   r   r   <module>   s
   