U
    Vcp                     @   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TriggersettingsZTRGu<   К какой модели относится триггерT)captionindexu(   Настройка точки входа)r   u.   Фильтр для методов get и listuJ   Где должен вызываться, отображение в вебu,   Все остальные параметрыu8   Имя вызываемой функции у CmfTriggeruM   Кеш даты и времени следующего вызова из cronu!   Настройка статусаCmfStatusOpttriggersF)r   modelbackrefvisible	CmfStatusu(   Где должен вызыватьсяc                 C   s*   | j jD ]}t||d |d d  qd S )N	fieldNamevalueid)	json_datar   setattr)selfobjfield r   %/opt/crm/common/models/cmf_trigger.py	set_field'   s    zCmfTrigger.set_fieldc                 C   s   | j D ]}|d sq|dsLt||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| jdd d	S )
uY   
        Распределение из списка пользователей
        r   Zrecent_personr   r   r      T)	only_dataN)r   getr   r   lensave)r   r   r   
next_indexr   r   r   distribution_person+   s    

zCmfTrigger.distribution_personc                 C   sl   | j jD ]^}t|d }|s" d S | s>td|   d S |j  |jjtjt	|d |_
 qhqd S )Nr   u[   Неверно указан срок выполнения в "автоматизация": )days)r   r   strisdigit	cmf_alertplan_start_dateset_nowdatetime	timedeltaintplan_end_date)r   r   r   r   r   r   r   set_plan@   s    
zCmfTrigger.set_planc                 C   sp   g }| j jD ] }|d D ]}||d  qq|rl|| |D ]*}t||jr@tdt||j dd q@dS )u   
        Проверка что поля заполнены
        json_data = {..., value: [field_name1, field_name2, ...]}
        r   Z	classNameu2   Необходимо заполнить поле: TabortN)r   r   appendload_fieldsgetattr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   task_idz***)r   r   u=   Необходимо создать шаблон задачиTr,   z.CmfStatus:00000000-0000-0000-0001-000000000002)hourminutesecondmicroseconddeadline)seconds)parent
alarm_dater;   responsibleN)modelsCmfTaskr   r   r   r$   statusr?   r'   nowreplacecreate_from_templater(   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-)event_persons)cmf_emit_eventg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   ==)filterr   json_entry_point)r@   r   r   Zcache_kanban_statusrV   r   )clsobj_idZkanban_status_idr   rP   rQ   r   r   r   r   kanban_movew   s
    
zCmfTrigger.kanban_movec           	      C   s  d}| j jd}|rd}|D ]}t||jrt||}|| d k	rt|tjr||jD ]"}|| |jjkrpd}qVd} qqVq|| |jjjkrd}qd} qqd}qd} qq|rdd|jg}| j	r|| j	g}t
t|j j|d}|sd}|rt| | jj| |S )NTchanged_fieldsFr   rT   )rU   )rV   r   r   r0   
is_changed
isinstancer   
CmfM2MBaser   json_filtervarsr@   
class_name	func_name)	r   r   allowrZ   r4   r   item_filternew_objr   r   r   check   s>    


zCmfTrigger.check)N)#__name__
__module____qualname__ui_name	ui_modulecode_prefixr   Field	CmfStr256	cmf_modelCmfJsonrV   r^   rM   r   ra   CmfDateTimeZcache_periodic_next_datecmfCmfRelationcache_status_optrB   CmfStr32rN   r   r    r+   r5   rG   rL   r   classmethodrY   rf   __classcell__r   r   rR   r   r   	   sF   r   )copyr'   cmf.includerr   r   common.models.cmf_orderr   r   r   r   r   r   <module>   s
   