U
    [Sel8                     @   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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.d/ Z fd0d1Z fd2d3Zd4d5 Z fd6d7Zed= fd8d9	Z fd:d;Z   Z!S )>CmfDealc                 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   )
Zdiscount_pctr   r   Zdiscountr   r   r    oldnew	cmf_alert)r   r   r'   r   r   r   _calc_total5   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_discountX   s    
z$CmfDeal._calc_total_without_discountc                 C   s   d S r   r   r   r   r   r   _calc_pipeline`   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_contactf   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   r3   r1   ZemailZphonesuperfull_search_index)r   kwargsr6   	__class__r   r   r9   l   s    ,zCmfDeal.full_search_indexc              
      s&   ddddddddd	d
g
}t   | S )Nzdeal_items.*zdeal_items.product.taxr   r   r   currencyr1   zstatus.status_typezstatus.ordernozpipeline.default_deal_workflow)r8   save_preload_fields)r   r
   r;   r   r   r>   {   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>)r3   r6   parent
alarm_dateresponsibler   )lenr   r,   Z	full_namer   r3   is_newr   CmfTaskpipeliner7   
class_nameidr   ZnowrA   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_currencyr/   r.   r(   r   r2   r0   rC   rH   r8   r   )r   argsr:   r;   r   r   r      s    zCmfDeal.savec                 C   sV   | j js| j jrR| 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 S )	NZsalesu_   У сделки может быть вид деятельности только ПродажиTr)   r7   ==r   )filterr
   )Zactivityr   r   r7   r-   r   ZCmfActivitygetr   r   r   r   _calc_activity   s    zCmfDeal._calc_activityc                 C   s   | j sd| _ d S )Nu   Новая сделка)r3   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mainrL   TrM   )r=   r   ZCmfCurrencyrN   r   r   r   r   rJ      s    zCmfDeal._calc_currencyc                 C   s   | j jr| j js| j| _ d S r   )rA   r   r   	cmf_ownerr   r   r   r   rI      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   r1   Z	CmfPerson
company_idrL   ORZ
user_localFr   Zis_internalrE   cache_status_typez!=CLOSED)object_fieldsmodels_listrM   )appendrN   r8   field_options_list)clsZrelation_field_namerX   rY   rM   r:   rT   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)
rC   r@   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)r?   r6   )r@   r   r   
CmfComment)r   r@   reasonrK   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:
        NrW   )	rA   r   rS   r?   r]   waiting_forr   r@   rV   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_namer1   tags
is_checkedpipeline_idr   rG   r3   r7   rA   c                 S   s   g | ]}| d ddgqS )rG   r3   r7   )to_json).0ir   r   r   
<listcomp>  s     z1CmfDeal.get_cache_fields_json.<locals>.<listcomp>Zstatus_colorrT   Z
short_namer=   )r   r8   get_cache_fields_jsonr   rA   ri   rf   rg   rh   r"   r]   Zcolorr   rT   r=   r1   )r   resr;   r   r   rm     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_idrL   rR   c                 S   s   g | ]}|  qS r   delete)rj   Ztaskr   r   r   rl   *  s     z(CmfDeal._clean_tasks.<locals>.<listcomp>N)r   rD   listrG   )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 )NrE   r   r    c                 S   s   g | ]}|  qS r   ro   )rj   objr   r   r   rl   .  s     z"CmfDeal.delete.<locals>.<listcomp>)r   r    rr   r8   rp   rE   emit)r   rK   r:   retr;   r   r   rp   ,  s    
zCmfDeal.deletec                    s   d S t jf d|i| d S )	Nr   rd   rA   u   <b>Сделка ""z c z</b></span><br>r6   )r   r3   r   r"   r8   all_place_notify)r   r6   r:   r;   r   r   rw   5  s        zCmfDeal.all_place_notifyc                O   s:   t jj|||d}t jj| j||d}t|| dd dS )N)rM   r
   slice)Zdeal_idr
   rx   c                 S   s   | j S r   )Zcmf_modified_at)rs   r   r   r   <lambda>C      z&CmfDeal.get_comments.<locals>.<lambda>)key)r   r_   ZslistrG   sorted)r   r
   Z_filterrx   rK   r:   ZcommentsZchat_commentsr   r   r   get_comments>  s    zCmfDeal.get_commentsc                    sF   |  dg | jr| j  | jjr8| jjr8| jj  t   d S )NrE   )r   rE   rt   r   r+   r8   r   r;   r   r   rt   E  s    
zCmfDeal.emitc                    s.   t  |}|D ]}|d dkrd|d< q|S )NZ
field_name)r3   rE   Trequired)r8   import_shop_fields)r\   Zfields_namern   Zsettingsr;   r   r   r   P  s
    
zCmfDeal.import_shop_fieldsc                    s(   | j js| jjr| jj| _ t   d S r   )Zworkflowr   rE   r   Zdefault_deal_workflowr8   _calc_workflowr   r;   r   r   r   X  s    
zCmfDeal._calc_workflow)NNN)N)"__name__
__module____qualname__r   r   r(   r.   r/   r0   r2   r9   r>   rH   r   rO   rP   rJ   rI   classmethodr[   r^   ra   rb   rc   re   rm   rr   rp   rw   r}   rt   r   r   __classcell__r   r   r;   r   r      s>   #
$		r   )r   r   Z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   