U
    [cM-                     @   sb   d dl mZ d dlT d dlmZ d dlmZ d dlmZ d dl	Z	d dl
mZ G dd	 d	ejZdS )
    abort)*)fields)cmf_documenthtmldiffN)BeautifulSoupc                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zd fdd	Ze	dddZ
eeeedddZ fddZddddZdd Zdd Z  ZS )CmfDocumentc                    s   | j rt  S d S )N)Zis_newsuper_increment_versionself	__class__ ./models/cmf_document.pyr      s    
zCmfDocument._increment_versionc              	   O   s   |  dddg | js$tdd dS |  }| j D ]}|j| jjkrJq6tjj	dd|jgd	d| jgd
ddgdddggd}|stj|d| d|dd}|j
  |  q6tj||d  q6dS )u   
        У всех участников родителя документа запрашиваем необходимость ознакомится
        parent	cmf_ownertextu-   У документа нет родителяTNresponsible_id==	parent_idlogic_prefixztask.doc_need_watchcache_status_type!=closedfilteruE   Необходимо ознакомиться с документомZresponsibler   r   namer   approvedr   r   )load_fieldsr   	cmf_alert_get_history_diffall_relation_personsidr   modelsCmfTaskget
alarm_dateset_nowsave
CmfComment)r   argskwargsr   Zpersontaskr   r   r   request_watch   s.    

  

zCmfDocument.request_watchc                 C   sh   | j j}tjjdd| jgdddggdgddgdd	gd
}|rP| |d j j|}d| d| j d}|S )Nr   r   r!   T-cmf_versioncmf_versionr         )r   order_byr   slicer      Изменения: , <a href="   ">посмотреть</a>)r   valuer(   CmfDocumentHistorylistr'   	html_diffhref)r   r   Zdoc_historyr   r   r   r%   /   s     zCmfDocument._get_history_diffc                 C   s   |  | jj| jj}d| d| j d}tjjdd| jj	gdd| j	gdddgd	d
dggd}|stj| jd| d|dd}|j
  |  |j
  |  ntj||djdd d S )Nr9   r:   r;   r   r   r   r   task.doc_need_approver   r   r   r   u8   Необходимо утвердить документTr   r"   F)notify)r?   r   r<   
text_draftr@   r(   r)   r*   r   r'   r+   r,   r-   r.   )r   Ztext_diff_contentZ	text_diffr1   r   r   r   _create_approve_task<   s$    
  


z CmfDocument._create_approve_taskc                 C   sV   t jjdd| jjgdd| jgdddgdddggd	gd
}|rR|jd|_|  d S )Nr   r   r   r   rA   r   r   r   workflow)r   r   )	r(   r)   r*   r   r'   rE   Zget_default_statusstatusr-   )r   r1   r   r   r   _delete_approve_taskR   s    
z CmfDocument._delete_approve_taskNc                    s4   |  dg t j|f|}| jr0|| j 7 }|S )Nr   )r#   r   r&   r   )r   r   r0   resr   r   r   r&   [   s
    z CmfDocument.all_relation_persons   c                 C   s   |pd}|pd}t |||S )uz   
        Используем единую тулзу для анализа изменений документа
         r   )clsablimitr   r   r   r?   b   s    zCmfDocument.html_diff)r   rC   returnc           #      C   s.  d}t | d}i }|dddiD ]}|||d< q"t |d}|dddiD ]4}||drx||dd qPd}|  qPi }|rt|}n|}| D ]\}	}| |	}
| |j	
 d	|
}| d
d	|
}| d|
td }| d| dtd }|| |d d }td| || ddd }|rP||  n|}| || |j	
  }td| || }|r||  n|}|| || 7 }||g d	g\}}|stt||}t|}||g||< |sq|t|k r|| }n|d }|d|  dtd }| || d d }d}| ||  }|rh|d nd}||| |d }|r|d nd}||kr||krd}|rq||j	
 }t|| t|j	
  } ||d g||< | | }!| |  }"|d|! t| ||"d  }q|S )ua  
        Получаем черновик с комментариями-пометками

        :param text: Оригинальный текст документа с комментариями-пометками
        :param text_draft: Черновик
        :return: Черновик с комментариями-пометками
        FZlxmlspanzdata-mark-annotation-typeZinlineCommentr'   NTr   z<spanz</span>z<p>z</p>z\s|>z\s|<rJ    r5   )r	   Zfind_allr*   popZunwrapstritemsfindcountr   striprfindlenresearchstartr>   finditerendsplitreplace)#r   rC   Zis_remove_commentZsoup_text_commentZid_commentsrP   Zsoup_text_draftZ	dict_textZresult_textZ
id_commentZposition_commentZidx_position_textZstart_commentZend_commentZ	start_rowZend_rowZmatch_start_wordZposition_start_wordZwordZmatch_end_wordZposition_end_wordZ	text_listZnumbermatchZstart_row_draftZend_row_draftZis_near_not_matchZ	near_wordZlast_near_wordZnear_word_draftZlast_near_word_draftZshift_startZ	shift_endZresult_startZ
result_endr   r   r   handle_inline_commentk   sp    	




"z!CmfDocument.handle_inline_commentc                    s   t   dddddddg S )NZperson_signsZperson_viewsZneed_approver!   r   r   rC   )r   save_preload_fieldsr   r   r   r   rd      s     zCmfDocument.save_preload_fields)doc_versionc                O   sZ   t jjdd| ggddgdgd}|s0tddd	 t jj| |jd
}|j| |	  |S )Nr   r   r4   signsr3   )r   r   r7   u4   Документ не найден в историиTr   )version)
r(   r=   r*   r$   ZCmfSignZsign_objectr4   rf   appendr-   )r   re   r/   r0   historysignr   r   r   rj      s     zCmfDocument.signc                 O   s@   |  ddg || _t| jj| jj| _| j|ddd|S )NrC   r   Tr   Z	only_datadepth)r#   r   r
   rc   r<   rC   r-   r   Zin_textr/   r0   r   r   r   update_text_inline_comments   s    z'CmfDocument.update_text_inline_commentsc                 O   s   || _ | j|ddd|S )NTr   rk   )rC   r-   rm   r   r   r   !update_text_draft_inline_comments   s    z-CmfDocument.update_text_draft_inline_comments)N)rI   )__name__
__module____qualname__r   r2   r%   rD   rG   r&   classmethodr?   staticmethodrT   rc   rd   rj   rn   ro   __classcell__r   r   r   r   r
   
   s   	Nr
   )osr   Zcmf.includeZcmfr   Z
cmf.fieldsr   Zcmf.utilr   r[   Zbs4r	   r
   r   r   r   r   <module>   s   