
    Y~hF:                         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e          ZdS )    N)copy)Decimal)
CmfM2MBase
CmfNumeric)datetime)*)	BaseModel)CmfActiveEntity)fieldsc                   *    e Zd Zej        dgz   Zd Zd Zd Zd Zd Z	d Z
d Z fd	Z fd
Zd Z fdZd Zd Zd Zd Zed! fd	            Zd Zd Zd Zd Zd Z fdZd Z fdZ fdZd Z fdZ ed" fd	            Z! fdZ"d  Z# xZ$S )#CmfDealget_commentsc                    | j         j        r| j         rd }| j         D ]X}|j                                        r=| j        s|j        | _        n'| j        |_        |j        r|                                  nY| j        s2t
                              d                                          | _        | j        rQ| j         rL|                     dg           | j         D ]0}|j                                        j        r| j        |_        -d S d S d S )Nperson)typezcontacts.company)	contacts
is_changedcompanyloadsavemodels
CmfCompanyload_fieldsis_null)selfcontacts     !./modules/sale/models/cmf_deal.py_calc_companyzCmfDeal._calc_company   s4   =# 	G 	GG= 	 	?'')) < +'.*.,"- +#LLNNNE < G%00h0??DDFF< 	3DM 	301222= 3 3?''))1 3&*lGO		3 	3 	3 	33 3    c                 .    | j         | j        z
  | _        d S N)total_without_discounttotaltotal_discountr   s    r   _calc_total_discountzCmfDeal._calc_total_discount)   s    "9DJFr   c                     t          d          }| j        D ]_}|j        s
t          |j        j        j        j                  }|j        j        }|j        j        sd}||dz  ||j        j        z  z  z  }`|| _        d S )N        r   d   )r   
deal_itemsproductvaluetaxprice
item_count	total_tax)r   r0   itemr-   r.   s        r   _calc_total_taxzCmfDeal._calc_total_tax,   s    CLL	O 	E 	ED< $,,0677CJ$E:# sedo.C&CDDII"r   c                    | j         j        s&| j        j        s| j        j        s| j        j        sd S t          d          }| j        D ]}||j        z  }|dk    r| j        r| j        j        s| j        }| j        j        r,| j        j        dur|| j        j        z  }|| j        j        z  }| j         j        rF| j         j        dur8| j         j        s| j        j        s| j        j        rt          dd           nd S |d S | j        r
|| j        z  }| j         r|| j         t          d          z  |z  z  }|s|dk    r|| _        | j        dk     r	d| _        d S d S )Nr(   r   .uc   Не возможно вычислить новую скидку, заполните "Товары"Tabortr)   )
discount_pctr   r#   discountr"   r   r*   oldnew	cmf_alert)r   r#   r1   s      r   _calc_totalzCmfDeal._calc_total8   s   (	z$	 }'	 *5		 FO 	  	 DTZEEA::$*:T-H-S:JE}  +T]%6c%A%A**** $ ):)>c)I)I$/ 4:3H DMLd   D  LP  Q  Q  Q  Q  QF=F= 	#T]"E 	>T&5==E 	EQJJDJ:>>DJJJ >r   c                     t          d          }| j        D ]#}|j        r|j        s||j        |j        z  z  }$|| _        d S )Nr(   )r   r*   r.   r/   r"   )r   r"   r1   s      r   _calc_total_without_discountz$CmfDeal._calc_total_without_discount[   s\    !(O 	C 	CD: T_ "dj4?&BB""&<###r   c                     d S r!    r%   s    r   _calc_pipelinezCmfDeal._calc_pipelinec   s    r   c                     | j         | j        j        vrd | _         | j        r| j         s| j        d         | _         d S d S d S )Nr   )primary_contactr   r,   r%   s    r   _calc_primary_contactzCmfDeal._calc_primary_contacti   sZ    t}':::#'D = 	4!5 	4#'=#3D   	4 	4 	4 	4r   c                 D   |                      | j                   d| j         |d<   | j        r|dxx         d| j        j         z  cc<   d}| j        r.| j        j        pd d| j        j        pd d| j        j        pd }||d<    t                      j	        di |S )Nu   Сделка name  textr?   )
r   full_search_fieldscoder   rE   rB   emailphonesuperfull_search_index)r   kwargsrH   	__class__s      r   rN   zCmfDeal.full_search_indexo   s     	0111444v< 	66NNN5$,"3555NNN 	~*/52}}8L8R8XVX}}[_[o[u[{y{}}Dv(uww(226222r   c                 R    g d}t                                                      |z   S )N)zdeal_items.*zdeal_items.product.taxr   r#   r   currencyrB   zstatus.status_typezstatus.ordernozpipeline.default_deal_workflowr7   r6   )rM   save_preload_fields)r   r   rP   s     r   rS   zCmfDeal.save_preload_fields~   s1    
 
 
 ww**,,v55r   c                    d}t          | j                  r| j        j        d         j        }n| j        r| j        j        }| j        rt                              d| d| j	        j
         d| j         d| j         d| j         d	| t          j                                        | j        | j        	                                           d S d S )
Nu   клиентомr   u   Связаться с u%   Сделка: <a href="/crm/Pipeline/z?crm=true&model=z&id=z">z</a>)rE   rH   parent
alarm_dateresponsibler   )lenr   r9   	full_namer   rE   is_newr   CmfTaskpipelinerJ   
class_nameidr   nowrW   r   )r   client_names     r   create_new_deal_taskzCmfDeal.create_new_deal_task   s   (t} 	,-+A.8KK\ 	,,+K; 	NN;k;; QT]=O  Q  Qaeap  Q  Qvzv}  Q  Q  BF  BK  Q  Q  Q#,0022 ,    dfffff	 	r   c                    |                                   |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  | j	        r| 
                                  t                      j        |i |S r!   )_calc_responsibler   _calc_currencyr=   r;   r2   r&   rC   r@   rZ   ra   rM   r   )r   argsrO   rP   s      r   r   zCmfDeal.save   s       ))+++!!###""$$$; 	(%%'''uww|T,V,,,r   c                     | j         j        s| j         j        re| j         j        s-| j         j        r!| j         j        dk    rt	          dd           t
          j                            g ddgd          | _         d S d S )Nsalesu_   У сделки может быть вид деятельности только ПродажиTr4   )rJ   ==rg   r   )filterr   cache_inmemory)activityr   r   rJ   r:   r   CmfActivitygetr%   s    r   _calc_activityzCmfDeal._calc_activity   s    =# 	vt}'< 	v=( IT]-E I$-J\`gJgJg{  DH  I  I  I  I".22:Q:Q:Q[^Z_pt2uuDMMM	v 	vr   c                 &    | j         s	d| _         d S d S )Nu   Новая сделка)rE   r%   s    r   
_calc_namezCmfDeal._calc_name   s!    y 	21DIII	2 	2r   c                 f    | j         s)t          j                            g d          | _         d S d S )N)mainrh   Tri   )rR   r   CmfCurrencyrm   r%   s    r   rd   zCmfDeal._calc_currency   s?    } 	P".22:N:N:N2OODMMM	P 	Pr   c                 V    | j         j        r| j         j        s| j        | _         d S d S d S r!   )rW   r   r   	cmf_ownerr%   s    r   rc   zCmfDeal._calc_responsible   sA    # 	.D,<,G 	.#~D	. 	. 	. 	.r   Nc                 @   |g }|dv rZ|sg }|sg }|                     d           |r|                    d          x}r|dd|gg}|                     dg dg dg           n|dk    r|dg d	g d
gg}n|dk    r|g dg} t                      j        |f|||d|S )N)r   rB   	CmfPerson
company_idrh   OR)
user_localrh   F)r{   rh   Nr   )is_internalrh   F)r|   rh   Nr\   )cache_status_typez!=CLOSED)object_fieldsmodels_listri   )appendrm   rM   field_options_list)clsrelation_field_namer   r   ri   rO   ry   rP   s          r   r   zCmfDeal.field_options_list   s-   >F"AAA  ! {+++ D0A0A,0O0O"O* D <z"BCMM4!<!<!<>X>X>XYZZZZ !I--t%A%A%AC^C^C^_`FF J..CCCDF)uww)['[[ [SY[ [ 	[r   c                 6   | j         r| j                                         | j        j        rl| j        j        j        r	d | _        d S | j                                         | j        xj        t          j	        | j        j        j                  z  c_        d S d S )N)seconds)
rZ   rV   set_nowstatusr   
next_alarmr   r,   r   	timedeltar%   s    r   _calc_alarm_datezCmfDeal._calc_alarm_date   s     ; 	&O##%%%;! 	b{%- b"&'')))%%);DKDZD`)a)a)aa%%%%	b 	br   c                     || _         |                                  t                              | |          }|                                 |S )N)rU   rH   )rV   r   r   
CmfComment)r   rV   reasonre   rO   comments         r   shift_alarmzCmfDeal.shift_alarm   s@    $		##4f#==r   c                     dS )u=   
        Для сделок проверок нет
        Nr?   r%   s    r   _check_alarm_date_validzCmfDeal._check_alarm_date_valid   s      r   c                     dS )u   
        Общая функция вычисления диапазона плана и будильника
        :return:
        Nr?   r%   s    r   
_calc_planzCmfDeal._calc_plan   s	     	r   c                    | j         j        sQ| j        sJ| j        j        s>| j        j        s2| j        j        s&| j        j        s| j        j        s| j        j        sdS | j        dk    rdS | j         p| j        | _        | j         r| j        r| j         | _        | j        j        s$| j         j        s| j        j        s| j        j        r| j         p| j        | _        dS dS )u   
        Вычисляем человека от которого требуются действия по задаче
        :return:
        Nr~   )	rW   r   rv   rU   r   waiting_forr   rV   r}   r%   s    r   _calc_waiting_forzCmfDeal._calc_waiting_for   s+    '
	
	 ~(
	 {%	
	
 {%
	 '
	 *
	 )
	 F !X--F+=t~ 	0 	0#/D $	B*	B ~(	B {%		B  $/A4>D	B 	Br   c                 L   |                      g d           t                                                      }| j        |d<   | j                            g d          |d<   d | j        D             |d<   | j        |d<   | j        j	        |d<   | j
        j        j	        |d	<   | j        r.| j                            g d          |d
<   | j        j	        |d<   | j        r| j                            g d          |d<   | j        r| j                            g d          |d<   |S )N)r   zcurrency.short_namerB   tags
is_checkedpipeline_idr#   r^   rE   rJ   rW   c                 <    g | ]}|                     g d           S )r   )to_json).0is     r   
<listcomp>z1CmfDeal.get_cache_fields_json.<locals>.<listcomp>  s+    LLLQqyy!7!7!788LLLr   r   r   r   status_colorr   ry   )r^   rE   rJ   
short_namerR   rB   )r   rM   get_cache_fields_jsonr#   rW   r   r   r   r   r,   r   colorr   ry   rR   rB   )r   resrP   s     r   r   zCmfDeal.get_cache_fields_json  sM    ) ) ) 	* 	* 	* gg++--zG!-556L6L6LMMMLL$)LLLF OL!-3M"k/5N< 	6!\112H2H2HIIC	N $ 5C= 	Z"m334X4X4XYYC
O 	Z%)%9%A%ABXBXBX%Y%YC!"
r   c                 v    t           j                            dd| j        g          x}rd |D              dS dS )u@   
        Удаляем связанные задачи
        	parent_idrh   rs   c                 6    g | ]}|                                 S r?   delete)r   tasks     r   r   z(CmfDeal._clean_tasks.<locals>.<listcomp>.  s     ---tT[[]]---r   N)r   r[   listr^   )r   taskss     r   _clean_taskszCmfDeal._clean_tasks)  sQ     N''T47/K'LLL5 	.--u------	. 	.r   c                     |                      g d           d | j        D              |                                   t                      j        |i |}| j                                         |S )N)r\   r#   r*   c                 6    g | ]}|                                 S r?   r   )r   objs     r   r   z"CmfDeal.delete.<locals>.<listcomp>2  s     111#111r   )r   r*   r   rM   r   r\   emit)r   re   rO   retrP   s       r   r   zCmfDeal.delete0  sy    <<<===111111eggnd-f--
r   c                     d S r!   )r   rE   r   r,   rM   all_place_notify)r   rH   rO   rP   s      r   r   zCmfDeal.all_place_notify9  s    r   c                    t           j                            |||          }t           j                            | j        ||          }t	          ||z   d           S )N)ri   r   slice)deal_idr   r   c                     | j         S r!   )cmf_modified_at)r   s    r   <lambda>z&CmfDeal.get_comments.<locals>.<lambda>G  s	    @S r   )key)r   r   slistr^   sorted)r   r   _filterr   re   rO   commentschat_commentss           r   r   zCmfDeal.get_commentsB  s^    $**'&PU*VV)//V[/\\ h.4S4STTTTr   c                     |                      dg           | j        r| j                                         | j        j        r*| j        j        r| j        j                                         t                                                       d S )Nr\   )r   r\   r   r   r8   rM   r   rP   s    r   r   zCmfDeal.emitI  s}    *&&&= 	!M   =# 	)}  )!&&(((r   c                 r    t                                          |          }|D ]}|d         dv rd|d<   |S )N
field_name)rE   r\   Trequired)rM   import_shop_fields)r   fields_namer   settingsrP   s       r   r   zCmfDeal.import_shop_fieldsT  sJ    gg((55 	, 	,H%)==='+$
r   c                     | j         j        s| j        j        r| j        j        | _         t                                                       d S r!   )workflowr   r\   r   default_deal_workflowrM   _calc_workflowr   s    r   r   zCmfDeal._calc_workflow\  sF    =  	@DM$< 	@ M?DM     r   c                 @    t           j                                        gS r!   )r   CmfPersonGroup
user_group)r   re   rO   s      r   
get_ownerszCmfDeal.get_ownersa  s     %002233r   )NNNr!   )%__name__
__module____qualname__r
   api_methodsr   r&   r2   r;   r=   r@   rC   rN   rS   ra   r   rn   rp   rd   rc   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rP   s   @r   r   r      s       !-1
 
K3 3 3.G G G
# 
# 
#! ! !F= = =  4 4 43 3 3 3 3	6 	6 	6 	6 	6   - - - - -v v v2 2 2P P P. . . [ [ [ [ [ [[,b b b    
  "B "B "BH    (. . .    6 6 6 6 6U U U	 	 	 	 	      [! ! ! ! !
4 4 4 4 4 4 4r   r   )r   r   decimalr   cmf.fields.base_fieldsr   r   dtcmf.includecmf.models.base_modelr	   common.models.cmf_active_entityr
   cmfr   r   r?   r   r   <module>r      s                 9 9 9 9 9 9 9 9 # # # # # #     + + + + + + ; ; ; ; ; ;      W4 W4 W4 W4 W4o W4 W4 W4 W4 W4r   