U
    #-dp                     @   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*   | j jD ]}t||d |d d  q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   | 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)Z	only_dataN)r   getr   r   lensave)r   r   r   Z
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[   Неверно указан срок выполнения в "автоматизация": )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   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	   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=   Необходимо создать шаблон задачиTr   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
   ==)filterr   json_entry_point)r+   r   r   Zcache_kanban_statusr:   r   )clsZobj_idZkanban_status_idr   r4   r5   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
   r8   )r9   )r:   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CmfJsonr:   r?   r1   r   rB   ZCmfDateTimeZcache_periodic_next_datecmfZCmfRelationZcache_status_optr,   ZCmfStr32r2   r   r   r   r&   r.   r0   r   classmethodr<   rD   __classcell__r   r   r6   r   r   	   sF   r   )copyr   Zcmf.includerH   r   Zcommon.models.cmf_orderr   r   r   r   r   r   <module>   s
   