U
    ".h                     @   sr   d dl mZmZmZ d dlmZ d dlmZmZm	Z	 d dl
T d dlmZ d dlmZ dd ZG d	d
 d
ejZdS )    )Listget_args
get_origin)make_dataclass)EnvironmentChainableUndefinedmeta)*)cmfutil)cmf_email_templatec                 C   s   | d k	r| S dS )Nu   Не установлено )objr   r   2./modules/servicedesk/models/cmf_email_template.pynone_finalizer   s    r   c                       s   e Zd ZeeedZ fddZ fddZe	dd Z
e	dd	 Ze	d
d Ze	dd ZdddddddddddddgZ  ZS )CmfEmailTemplate)Z	undefinedfinalizec                    s,   | j s| jr| jrtddd t j||S )NuC   Запрещено изменять системный шаблонTabort)Zis_newZ
is_changedsystem	cmf_alertsupersave)selfargskwargs	__class__r   r   r      s    zCmfEmailTemplate.savec                    sz   | j   tjj| dgd}|rZtdd |D }d}|D ]}|d| 7 }q:t|dd | j rltd	dd t j||S )
Nparent)Zemail_templatefieldsc                 S   s   g | ]}|j jqS r   )r   name).0ar   r   r   
<listcomp>   s     z+CmfEmailTemplate.delete.<locals>.<listcomp>ut   Удаление невозможно. Шаблон используется в схемах уведомлений:
Tr   uA   Запрещено удалять системный шаблон)	r   loadZmodelsZCmfProjectNotifySchemeRulelistsetr   r   delete)r   r   r   ZrulesZschemesZ	alert_strschemer   r   r   r'      s    
zCmfEmailTemplate.deletec                 K   s`  dd }t dd }i }| jddg }	|	D ]@}
t||
r*t||
 drZt||
 j||
< q*t||
 ||
< q*ttjj|d< t|dr|jrt|jjnt |d	< | |j |d
< ||||d< t|dr|j	rt|j	jnt |d< t|dr|j
rt|j
jnt |d< t|dr2|jr2t|jjnt |d< ||d< ||d< ||d< ||d< |S )z	
        c                 S   s,   | j r"| d| j j d| j j S t S d S )Nz/servicedesk//)r   Zui_namecodestr)r   urlr   r   r   
portal_url-   s    z9CmfEmailTemplate.prepare_template_ctx.<locals>.portal_urlT)Zfull_url	cmf_ownerr   r   current_userresponsibleobj_urlr-   statusZclient_status
cmf_authorauthorprojectproject_namemsg	msg_titler   notify)Zapp_base_href_template_fieldshasattrr+   r   gr/   r.   Zhrefr2   r3   r5   )clsr   r9   r7   msg_type_textr   r-   r,   Zctxr   Zfieldr   r   r   prepare_template_ctx)   s*    
&&**z%CmfEmailTemplate.prepare_template_ctxc                 C   sT   |  D ]F\}}| }|| t|s@|d|  d S | ||| qd S )N.)itemscopyappendlenjoinbuild_fields)r=   varspathrescurrentZchildrenZ	path_copyr   r   r   rF   M   s    
zCmfEmailTemplate.build_fieldsc              
   K   s   |d krd S | j |}| |}	g }
| |	di g |
 |j|
| j d t : | j 	|}| j
||||f|}|jf |W  5 Q R  S Q R X d S )Nr   )r   )
_jinja_envparsecollect_varsrF   getZload_fieldsr:   r
   Zallow_lazyloadZfrom_stringr?   Zrender)r=   r   r9   r7   r>   templateZcssr   Zparsed_datanested_varsZ
obj_fieldsZtemplate_ctxr   r   r   render_templateY   s    

z CmfEmailTemplate.render_templatec           
         s  fdd fdd i }t |tjjr| |j} |}|jD ]8}| |}|jj|krr||	|jj || qD|| nt |tjj
r|}g }t |tjj
r||j |j}q|}i ||j< ||j }|d d d D ]}	i ||	< ||	 }qnt |tjjr8| D ]}| |}|| qnNt |tjjrTi ||j< n2t |tjjr|jD ]}| |}|| qj|S )Nc                    s@   |  D ]2\}}t|tr2 | |i || |< q|| |< q| S N)rA   
isinstancedictrN   )targetdatakv)_updater   r   rY   l   s
    

z.CmfEmailTemplate.collect_vars.<locals>._updatec                    s4   |   D ]&\}}t|s |  S  | |   S d S rR   )rA   rD   )varcurchild)_get_last_attrr   r   r]   t   s    z5CmfEmailTemplate.collect_vars.<locals>._get_last_attr)rS   r   ZnodesZForrM   iterZbodyrU   r   popZGetattrrC   attrZnodeZOutputZiter_child_nodesNameZTemplate)
r=   Zast_noderI   Ziter_varr[   r\   rP   Z	attr_nodeZattrsra   r   )r]   rY   r   rM   j   sF    






zCmfEmailTemplate.collect_varsr/   r0   textr*   r4   r   r-   r2   Ztask_urlr1   r6   r8   r7   )__name__
__module____qualname__r   r   r   rK   r   r'   classmethodr?   rF   rQ   rM   r:   __classcell__r   r   r   r   r      s   
#


Or   N)typingr   r   r   Zdataclassesr   Zjinja2r   r   r   Zcmf.includeZcmf.utilr
   Zmodules.servicedesk.fieldsr   r   r   r   r   r   r   <module>   s   