U
    RhF:                     @   s|   d dl Z d dlmZ d dlmZ d dlmZmZ d dl m Z d dlT d dl	m
Z
 d dlmZ d d	lmZ G d
d deZdS )    N)copy)Decimal)
CmfM2MBase
CmfNumeric)datetime)*)	BaseModel)CmfActiveEntity)fieldsc                       s@  e Zd Zejdg Z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 fddZdd Z fddZdd Zdd Zdd Zdd Zed? fd!d"	Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Z fd-d.Zd/d0 Z fd1d2Z fd3d4Zd5d6 Z fd7d8Z ed@ fd9d:	Z! fd;d<Z"d=d> Z#  Z$S )ACmfDealget_commentsc                 C   s   | j jrj| j rjd }| j D ]8}|j r| js6|j| _n| j|_|jrL|   qRq| jsjtjdd | _| jr| j r| dg | j D ]}|j jr| j|_qd S )NZperson)typezcontacts.company)	contacts
is_changedcompanyloadsavemodelsZ
CmfCompanyload_fieldsis_null)selfZcontact r   !./modules/sale/models/cmf_deal.py_calc_company   s"    



zCmfDeal._calc_companyc                 C   s   | j | j | _d S N)total_without_discounttotalZtotal_discountr   r   r   r   _calc_total_discount)   s    zCmfDeal._calc_total_discountc                 C   sb   t d}| jD ]H}|jsqt |jjjj}|jj}|jjs>d}||d ||jj  7 }q|| _d S )N        r   d   )r   
deal_itemsproductvaluetaxprice
item_count	total_tax)r   r'   itemr$   r%   r   r   r   _calc_total_tax,   s    
zCmfDeal._calc_total_taxc                 C   s.  | j js$| jjs$| jjs$| jjs$d S td}| jD ]}||j7 }q2|dkr| jr| jjs| j}| jjr| jjdk	r|| jj7 }|| jj8 }| j jr| j jdk	r| j js| jjs| jjrt	ddd nd S |d krd S | jr|| j8 }| j r|| j td | 8 }|s|dkr|| _| jdk r*d| _d S )Nr   r   .uc   Не возможно вычислить новую скидку, заполните "Товары"Tabortr    )
discount_pctr   r   discountr   r   r!   oldnew	cmf_alert)r   r   r(   r   r   r   _calc_total8   s>    

zCmfDeal._calc_totalc                 C   s<   t d}| jD ]"}|jr|js q||j|j 7 }q|| _d S )Nr   )r   r!   r%   r&   r   )r   r   r(   r   r   r   _calc_total_without_discount[   s    
z$CmfDeal._calc_total_without_discountc                 C   s   d S r   r   r   r   r   r   _calc_pipelinec   s    zCmfDeal._calc_pipelinec                 C   s0   | j | jjkrd | _ | jr,| j s,| jd | _ d S )Nr   )primary_contactr   r#   r   r   r   r   _calc_primary_contacti   s    zCmfDeal._calc_primary_contactc                    s   |  | j d| j |d< | jr<|d  d| jj 7  < d}| jrr| jjpPd d| jjp^d d| jjpld }||d< t j	f |S )Nu   Сделка name  text)
r   Zfull_search_fieldscoder   r6   r4   ZemailZphonesuperfull_search_index)r   kwargsr9   	__class__r   r   r<   o   s    ,zCmfDeal.full_search_indexc                    s*   ddddddddd	d
ddg}t   | S )Nzdeal_items.*zdeal_items.product.taxr   r   r   currencyr4   zstatus.status_typezstatus.ordernozpipeline.default_deal_workflowr-   r,   )r;   save_preload_fields)r   r
   r>   r   r   rA   ~   s          zCmfDeal.save_preload_fieldsc                 C   s   d}t | jr| jjd j}n| jr,| jj}| jrtjd| d| j	j
 d| j d| j d| j d	| tj | j| jd	  d S )
Nu   клиентомr   u   Связаться с u%   Сделка: <a href="/crm/Pipeline/z?crm=true&model=z&id=z">z</a>)r6   r9   parent
alarm_dateresponsibler   )lenr   r/   Z	full_namer   r6   is_newr   CmfTaskpipeliner:   
class_nameidr   ZnowrD   r   )r   Zclient_namer   r   r   create_new_deal_task   s    
&zCmfDeal.create_new_deal_taskc                    sd   |    |   |   |   |   |   |   |   |   | j	rV| 
  t j||S r   )_calc_responsibler   _calc_currencyr2   r1   r)   r   r5   r3   rF   rK   r;   r   r   argsr=   r>   r   r   r      s    zCmfDeal.savec                 C   sX   | j js| j jrT| j js8| j jr8| j jdkr8tddd tjjdddgdgdd| _ d S )	NZsalesu_   У сделки может быть вид деятельности только ПродажиTr*   r:   ==r   )filterr
   Zcache_inmemory)Zactivityr   r   r:   r0   r   ZCmfActivitygetr   r   r   r   _calc_activity   s    zCmfDeal._calc_activityc                 C   s   | j sd| _ d S )Nu   Новая сделка)r6   r   r   r   r   
_calc_name   s    zCmfDeal._calc_namec                 C   s    | j stjjdddgd| _ d S )NmainrP   TrQ   )r@   r   ZCmfCurrencyrR   r   r   r   r   rM      s    zCmfDeal._calc_currencyc                 C   s   | j jr| j js| j| _ d S r   )rD   r   r   	cmf_ownerr   r   r   r   rL      s    zCmfDeal._calc_responsibleNc                    s   |d krg }|dkrl|sg }|s$g }| d |rN|d }rN|dd|gg}| ddddgddd gg n:|dkr|dd	ddgd	dd ggg}n|d
kr|dddgg}t j|f|||d|S )N)r   r4   Z	CmfPerson
company_idrP   ORZ
user_localFr   Zis_internalrH   cache_status_typez!=CLOSED)object_fieldsmodels_listrQ   )appendrR   r;   field_options_list)clsZrelation_field_namer\   r]   rQ   r=   rX   r>   r   r   r_      s0    
  zCmfDeal.field_options_listc                 C   sV   | j r| j  | jjrR| jjjr*d | _n(| j  | j jtj	| jjjd7  _d S )N)Zseconds)
rF   rC   Zset_nowstatusr   Z
next_alarmr   r#   r   Z	timedeltar   r   r   r   _calc_alarm_date   s    


zCmfDeal._calc_alarm_datec                 O   s(   || _ |   tj| |d}|  |S )N)rB   r9   )rC   r   r   
CmfComment)r   rC   reasonrO   r=   Zcommentr   r   r   shift_alarm   s
    zCmfDeal.shift_alarmc                 C   s   dS )u=   
        Для сделок проверок нет
        Nr   r   r   r   r   _check_alarm_date_valid   s    zCmfDeal._check_alarm_date_validc                 C   s   dS )u   
        Общая функция вычисления диапазона плана и будильника
        :return:
        Nr   r   r   r   r   
_calc_plan   s    zCmfDeal._calc_planc                 C   s   | j jsB| jsB| jjsB| jjsB| jjsB| jjsB| jjsB| jjsBdS | jdkrPdS | j pZ| j| _| j rr| jrr| j | _| jjs| j js| jjs| jjr| j p| j| _dS )u   
        Вычисляем человека от которого требуются действия по задаче
        :return:
        Nr[   )	rD   r   rW   rB   ra   waiting_forr   rC   rZ   r   r   r   r   _calc_waiting_for   s>    

zCmfDeal._calc_waiting_forc                    s   |  ddddddg t  }| j|d< | jdd	d
g|d< dd | jD |d< | j|d< | jj	|d< | j
jj	|d< | jr| jdd	d
g|d< | jj	|d< | jr| jdd	d
dg|d< | jr| jdd	d
g|d< |S )Nr   zcurrency.short_namer4   tags
is_checkedpipeline_idr   rJ   r6   r:   rD   c                 S   s   g | ]}| d ddgqS )rJ   r6   r:   )to_json).0ir   r   r   
<listcomp>  s     z1CmfDeal.get_cache_fields_json.<locals>.<listcomp>Zstatus_colorrX   Z
short_namer@   )r   r;   get_cache_fields_jsonr   rD   rm   rj   rk   rl   r#   ra   Zcolorr   rX   r@   r4   )r   resr>   r   r   rq     s.        


zCmfDeal.get_cache_fields_jsonc                 C   s,   t jjdd| jgd }r(dd |D  dS )u@   
        Удаляем связанные задачи
        Z	parent_idrP   rV   c                 S   s   g | ]}|  qS r   delete)rn   Ztaskr   r   r   rp   .  s     z(CmfDeal._clean_tasks.<locals>.<listcomp>N)r   rG   listrJ   )r   Ztasksr   r   r   _clean_tasks)  s    zCmfDeal._clean_tasksc                    sD   |  dddg dd | jD  |   t j||}| j  |S )NrH   r   r!   c                 S   s   g | ]}|  qS r   rs   )rn   objr   r   r   rp   2  s     z"CmfDeal.delete.<locals>.<listcomp>)r   r!   rv   r;   rt   rH   emit)r   rO   r=   retr>   r   r   rt   0  s    
zCmfDeal.deletec                    s   d S t jf d|i| d S )	Nr   rh   rD   u   <b>Сделка ""z c z</b></span><br>r9   )r   r6   r   r#   r;   all_place_notify)r   r9   r=   r>   r   r   r{   9  s        zCmfDeal.all_place_notifyc                O   s:   t jj|||d}t jj| j||d}t|| dd dS )N)rQ   r
   slice)Zdeal_idr
   r|   c                 S   s   | j S r   )Zcmf_modified_at)rw   r   r   r   <lambda>G      z&CmfDeal.get_comments.<locals>.<lambda>)key)r   rc   ZslistrJ   sorted)r   r
   Z_filterr|   rO   r=   ZcommentsZchat_commentsr   r   r   r   B  s    zCmfDeal.get_commentsc                    sF   |  dg | jr| j  | jjr8| jjr8| jj  t   d S )NrH   )r   rH   rx   r   r.   r;   r   r>   r   r   rx   I  s    
zCmfDeal.emitc                    s.   t  |}|D ]}|d dkrd|d< q|S )NZ
field_name)r6   rH   Trequired)r;   import_shop_fields)r`   Zfields_namerr   Zsettingsr>   r   r   r   T  s
    
zCmfDeal.import_shop_fieldsc                    s(   | j js| jjr| jj| _ t   d S r   )Zworkflowr   rH   r   Zdefault_deal_workflowr;   _calc_workflowr   r>   r   r   r   \  s    
zCmfDeal._calc_workflowc                 O   s   t j gS r   )r   ZCmfPersonGroupZ
user_grouprN   r   r   r   
get_ownersa  s    zCmfDeal.get_owners)NNN)N)%__name__
__module____qualname__r	   Zapi_methodsr   r   r)   r1   r2   r3   r5   r<   rA   rK   r   rS   rT   rM   rL   classmethodr_   rb   re   rf   rg   ri   rq   rv   rt   r{   r   rx   r   r   r   __classcell__r   r   r>   r   r      sF   #$		r   )r   r   decimalr   Zcmf.fields.base_fieldsr   r   ZdtZcmf.includeZcmf.models.base_modelr   Zcommon.models.cmf_active_entityr	   Zcmfr
   r   r   r   r   r   <module>   s   