U
    j*g,                     @   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                    s    | j rtddd t j||S )NuA   Запрещено удалять системный шаблонTr   )r   r   r   deleter   r   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//)parentZui_namecodestr)r   urlr   r   r   
portal_url!   s    z9CmfEmailTemplate.prepare_template_ctx.<locals>.portal_urlT)Zfull_url	cmf_ownerr    name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hrefr*   r+   r-   )clsr   r1   r/   msg_type_textr   r$   r#   ZctxfieldsZ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)r5   varspathrescurrentZchildrenZ	path_copyr   r   r   r?   A   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   )r7   )
_jinja_envparsecollect_varsr?   getZload_fieldsr2   r
   Zallow_lazyloadZfrom_stringr8   Zrender)r5   r   r1   r/   r6   templateZcssr   Zparsed_datanested_varsZ
obj_fieldsZtemplate_ctxr   r   r   render_templateM   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)r:   
isinstancedictrG   )targetdatakv)_updater   r   rR   `   s
    

z.CmfEmailTemplate.collect_vars.<locals>._updatec                    s4   |   D ]&\}}t|s |  S  | |   S d S rK   )r:   r=   )varcurchild)_get_last_attrr   r   rV   h   s    z5CmfEmailTemplate.collect_vars.<locals>._get_last_attr)rL   r   ZnodesZForrF   iterZbodyrN   r&   popZGetattrr<   attrZnodeZOutputZiter_child_nodesNameZTemplate)
r5   Zast_noderB   Ziter_varrT   rU   rI   Z	attr_nodeZattrsrZ   r   )rV   rR   r   rF   ^   sF    






zCmfEmailTemplate.collect_varsr'   r(   textr!   r,   r&   r$   r*   Ztask_urlr)   r.   r0   r/   )__name__
__module____qualname__r   r   r   rD   r   r   classmethodr8   r?   rJ   rF   r2   __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   