U
    g¹ydñ.  ã                   @   sR   d dl Z d dlmZ d dlT d dlT d dlmZ d dlmZ G dd„ dejƒZdS )é    N)Ú	dataclass)Ú*)Ú
cmf_notify)Ú	BaseModelc                       sö   e Zd ZdZdZdZi Ze e	j
 ejd¡e	j
 ejd¡g¡Zeed< ejf eŽZeG dd„ dƒƒZed	d
„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZ‡ fdd„Zeddd„ƒZeejddddd„ ƒƒZeejddddd„ ƒƒZ‡  Z S )Ú	CmfNotifyZNotifyZdeskZNTFzcommon/templateszcmf/templatesÚloaderc                   @   s2  e Zd ZU dZdZeed< dZeed< dZeed< dZ	eed< dZ
eed< d	Zeed
< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< d	Zeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZ eed< dS )zCmfNotify.NotifyCtxu1  
        notify_type - Ñ‚Ð¸Ð¿ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ
        Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ðµ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ñ‹:
        - Ð¿Ñ€Ð¾ÑÑ‚Ð¾ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ðµ (default) -- message
        - Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° -- obj_edit
        - ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° -- obj_create
        - ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° -- obj_delete
        - Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ -- comment_create
        - Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ -- comment_edit
        - ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ -- comment_delete
        NÚ	person_idÚnameÚtextÚmsgr   ÚpriorityFÚstrikethroughÚ
alarm_dateÚis_notify_current_personÚmessageÚnotify_typeÚobj_hrefÚobj_codeÚobj_parent_nameÚobj_linkÚ Úhtml_changed_fieldsÚ
owner_nameÚowner_initialsÚ
notify_smsÚperson_phone_mobileÚperson_phoneÚperson_nameÚmsg_from_idÚmsg_from_nameÚmsg_from_codeÚmsg_from_login)!Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚ__annotations__r	   r
   r   r   Úintr   Úboolr   Údatetimer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   © r+   r+   ú./models/cmf_notify.pyÚ	NotifyCtx   s2   
r-   c           	      C   s–   t jj|jdddgd}|js"d S |jjp0|jj}d|j› d|j	j› d|j
j› }|  ¡ }|rf| ¡ }| j |¡}|j|d}t| j|||gd	 d S )
NÚnotify_emailÚemailÚlogin©ÚidÚfieldsú[z] (z) )Úctx©Úargs)ÚmodelsÚ	CmfPersonÚgetr   r.   r/   Úvaluer0   r   r   r
   Z+get_default_mail_notification_template_nameÚ
_jinja_envZget_templateZrenderÚcmf_deferred_taskÚprocess_email)	ÚclsÚ
notify_ctxÚobjÚpersonZrcpt_toÚsubjectZmail_templateÚtemplateÚ
email_bodyr+   r+   r,   Úsend_email_notify9   s     zCmfNotify.send_email_notifyc                 C   s’   |j s
d S dtj› }|j}t|ƒdkr:|d d… › d}|› d|j› d|› |j› }|jp`|j}|s|t	d|j
› dƒ d S t| j||gd d S )Núhttps://é   z...Ú
u4   SMS ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ u_    Ð½Ðµ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¾, Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ Ð½Ð¾Ð¼ÐµÑ€ Ð¼Ð¾Ð±Ð¸Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ‚ÐµÐ»ÐµÑ„Ð¾Ð½Ð°.r6   )r   ÚconfigÚAPP_FQDNr
   Úlenr   r   r   r   Z	cmf_alertr   r=   Úprocess_sms)r?   r@   ÚurlZsubjr   Úphoner+   r+   r,   Úsend_sms_notifyK   s    zCmfNotify.send_sms_notifyc           	      K   s6  d|ks|d dkr&t jtjd|d< d|kr:| d¡}ntj}|jj|d< |j	j|d< |j
j|d< |jj|d< d	|d
< |ršd|ks|d dkrš|j	|d< d|ks®|d dkrÀt jtjd|d< t|d tƒrÜ|d j|d< |d |d< |pðtj}|j	j|d< | ddg¡ |jr |jjd nd|jr6|jjd nd |d< |r¦dtj› }|j|d< |j
|d< |› |d › |d< t|dƒrž|jrž|jj	j|d< nd |d< | d¡}tjj|dddgd}|sàt d|› ¡ d S |j|d< |jj|d < |jj|d!< |j	|d"< t|tj jƒr&|j|d< | j!f |Ž}|S )#Nr   .©ZtzÚmsg_fromr   r   r    r!   õ   Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ðµr	   r
   r   r   r   Ú
first_nameÚ	last_namer   r   r   rG   r   r   r   Úparentr   r   r   zphone_mobile.numberzphone.numberr1   u†   Ð’ Ð¼ÐµÑ‚Ð¾Ð´ prepare_notify_ctx Ð¿Ñ€Ð¸ÑˆÐµÐ» Ð¾Ñ‚ÑÑƒÑ‚ÑÑ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ð¸Ð»Ð¸ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ñ‹Ð¹ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ person_id=r   r   r   )"r*   ÚnowÚtimezoneÚutcÚpopÚgÚcurrent_personr2   r;   r	   Úcoder0   Ú
isinstanceZCmfTypeZcurrent_userÚload_fieldsrT   rU   rJ   rK   ÚhrefÚhasattrrV   r:   r8   r9   Údebugr   rO   ZnumberZphone_mobileZcmfr3   r-   )	r?   rA   ÚkwargsrR   Znotify_ownerrN   r   rB   r5   r+   r+   r,   Úprepare_notify_ctx[   sT    

4





zCmfNotify.prepare_notify_ctxc                 C   s¼  d }d}|r:| j dd|jgdd|jgdddggddgd	}|rD|j}|jrP|j}|sZ| ƒ }||_d|_| jd
7  _|j|_|j|_|j|_|j	|_	|j
|_
|rÀ|j|_|j|_|j|_|j|_|jsÌg |_|jr
t|jjƒdkr
|jjdd … d d |jkr
|S |j|j|j|jdœtjtjd ¡ |jdtƒ › ddœ}|j  |¡ | !¡  |rŒ|j"|jdrŒt#d|j||jdœ|jgd |jdkr¸|j$s¸t#d|j› |jgd |S )NrS   Úobj_idú==r   ÚstatusÚopenÚ
unread_cntÚcomments©Úfilterr3   é   r   éÿÿÿÿr
   )r2   r	   r]   r0   rQ   zCmfComment:)Z	cmf_ownerZcmf_created_atr
   r2   Z	log_level)r   z	notify-os)r   Úcommentr   ©Zevent_personsÚ2znotify-important-)%r:   r2   r   r	   rg   ri   r   Zpriotityr   r   r
   re   r]   r   Úui_nameZobj_ui_namer`   r   rj   rL   r;   r   r   r   r    r!   r*   rW   rX   rY   Z	isoformatZuuid1ÚappendÚsaveZ	notify_osÚcmf_emit_eventZ	confirmed)r?   r@   rA   ÚnotifyÚnew_namero   r+   r+   r,   Úcreate_desk_notify˜   sx    

ýüÿþýü
õþýzCmfNotify.create_desk_notifyc                 K   sÔ   t jrt  d¡ dS d|kr(|d dk	s0tdƒ‚d|krD|d dk	sLtdƒ‚|d t jjkrj| d¡sjdS d	|kr| d	¡}| d
dddg¡ nd}| j	|f|Ž}|dkr®dS |  
||¡}|  ||¡ |  |¡ |S )uã  
        obj: CmfEntity

        :param obj:
        :param msg_from:
        :param person_id: Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼Ñƒ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÑÐµÑ‚ÑÑ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ðµ
        :param name: ÐÐ°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ
        :param text: Ð¢ÐµÐ¼Ð° ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ
        :param msg: Ð¢ÐµÐºÑÑ‚ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ
        :param priority:
        :param strikethrough:
        :param alarm_date: Ð‘ÑƒÐ´Ð¸Ð»ÑŒÐ½Ð¸Ðº Ð´Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹
        :param is_notify_current_person: ÐœÐ¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÑŒ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ðµ ÑÐµÐ±Ðµ
        :param notify_type: Ð¢Ð¸Ð¿ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ. ÐžÐ¿Ð¸ÑÐ°Ð½Ð¸Ðµ ÑÐ¼ Ð² ÑÑ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ NotifyCtx
        uB   Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹ g.disable_notify = FalseNr   .u   Ð£ÐºÐ°Ð¶Ð¸Ñ‚Ðµ msgr   u   Ð£ÐºÐ°Ð¶Ð¸Ñ‚Ðµ person_idr   rA   rV   r]   rr   r`   )r[   Zdisable_notifyrb   ÚAssertionErrorr\   r2   r:   rZ   r_   rd   rx   rF   rP   )r?   rc   rA   r@   rv   r+   r+   r,   Úplace_notifyã   s$    


zCmfNotify.place_notifyc                    s<   t ƒ j||Ž td| j ¡ › d| jji| j ¡ gd d S )Nznotify-person-Z	notify_idrp   )ÚsuperÚemitru   r   Úloadr2   r;   )Úselfr7   rc   ©Ú	__class__r+   r,   r|     s     ÿ
ýzCmfNotify.emitNc                 C   sd   |st jjj}dd|gdddgg}|r8| dd|jg¡ | j|dgd}|D ]}d|_| ¡  qLd S )Nr   rf   rg   z!=Úclosedre   rk   )r[   r\   r2   r;   rs   Úlistrg   rt   )r?   r   rA   Z_filterZnotifiesrv   r+   r+   r,   Úclose_open_notifies  s    
þzCmfNotify.close_open_notifiesT)Z	only_onceZsystem_taskc                 O   s   t j ¡ }|j| ||d d S )N)rC   )r8   ZCmfPluginMailBoxZget_local_mailboxÚsend_message)Zrctp_torC   rE   r7   rc   Zmail_boxr+   r+   r,   r>   (  s    
zCmfNotify.process_emailc                 O   s   t j ¡ }| | |¡ d S )N)r8   ZCmfPluginSMSGateZget_local_smsgater„   )rO   r   r7   rc   Zsms_gater+   r+   r,   rM   .  s    
zCmfNotify.process_sms)NN)!r"   r#   r$   rr   Z	ui_moduleZcode_prefixZ_optionsZjinja2ZFileSystemLoaderÚosÚpathÚjoinrJ   ZPROJECT_DIRZ_loaderZEnvironmentr<   r   r-   ÚclassmethodrF   rP   rd   rx   rz   r|   rƒ   ÚstaticmethodZ
celery_appZtaskr>   rM   Ú__classcell__r+   r+   r   r,   r   	   s<   ÿ%


<
J
*r   )	r*   Zdataclassesr   Zcmf.includeZ
cmf.fieldsr   Z
cmf.modelsr   r   r+   r+   r+   r,   Ú<module>   s   