
    Ih:                         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 d dl	m
Z
 d dlmZ d d	lmZ  G d
 de      Zy)    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 ]i  }|j                  j                         s| j                  s|j                  | _        n-| j                  |_        |j                  r|j	                           n | j                  s)t
        j                  d      j	                         | _        | j                  rg| j                   rZ| j                  dg       | j                   D ]8  }|j                  j                         j                  s(| j                  |_        : y y y )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   s    ==##G== 	??'')<<'.*.,,"--#LLN	 <<%00h0?DDF<<DMM012== 3??'')11&*llGO3 *<    c                 @    | j                   | j                  z
  | _        y N)total_without_discounttotaltotal_discountr   s    r   _calc_total_discountzCmfDeal._calc_total_discount)   s    "99DJJFr   c                 j   t        d      }| j                  D ]  }|j                  st        |j                  j                  j                  j                        }|j
                  j                  }|j
                  j                  sd}||dz  ||j                  j                  z  z  z  } || _        y )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    CL	OO 	ED<<$,,,,00667CJJ$$E::##sedoo.C.C&CDDI	E #r   c                    | j                   j                  sC| j                  j                  s-| j                  j                  s| j                  j                  sy t        d      }| j                  D ]  }||j                  z  } |dk(  r| j                  r| j                  j                  s| j                  }| j                  j                  rJ| j                  j                  dur2|| j                  j                  z  }|| j                  j                  z  }| j                   j                  ri| j                   j                  durQ| j                   j                  s,| j                  j                  s| j                  j                  rt        dd       ny |y | j                  r|| j                  z  }| j                   r|| j                   t        d      z  |z  z  }|s|dk(  r|| _        | j                  dk  rd| _        y y )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   ((zz$$}}''**55OO 	 DTZZE	  A:$**T-H-H-S-SJJE}}  T]]%6%6c%A******  $$):):)>)>c)I$$//4::3H3HDMMLdLd  D  LP  Q===T]]"ET&&5==EEQJDJ::>DJ r   c                     t        d      }| j                  D ]7  }|j                  r|j                  s||j                  |j                  z  z  }9 || _        y )Nr(   )r   r*   r.   r/   r"   )r   r"   r1   s      r   _calc_total_without_discountz$CmfDeal._calc_total_without_discount[   sS    !(OO 	CD::T__"djj4??&BB"	C '=#r   c                      y r!    r%   s    r   _calc_pipelinezCmfDeal._calc_pipelinec   s    r   c                     | j                   | j                  j                  vrd | _         | j                  r"| j                   s| j                  d   | _         y y y )Nr   )primary_contactr   r,   r%   s    r   _calc_primary_contactzCmfDeal._calc_primary_contacti   sI    t}}':'::#'D ==!5!5#'==#3D  "6=r   c                    | j                  | j                         d| j                   |d<   | j                  r$|dxx   d| j                  j                   z  cc<   d}| j
                  rR| j
                  j                  xs d d| j
                  j                  xs d d| j
                  j                  xs d }||d<   t        | $  di |S )Nu   Сделка name  textr?   )
r   full_search_preload_fieldscoder   rE   rB   emailphonesuperfull_search_index)r   kwargsrH   	__class__s      r   rN   zCmfDeal.full_search_indexo   s     	889(4v<<6N$,,"3"3!455N**//526a8L8L8R8R8XVX7YYZ[_[o[o[u[u[{y{Z|}Dvw(2622r   c                 .    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_workflow.save_eval_coder7   r6   )rM   save_preload_fields)r   r   rP   s     r   rS   zCmfDeal.save_preload_fields~   s    
 w*,v55r   c                    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                  | j                  	      j!                          y y )
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.88K\\,,++K;;NN-k];<T]]=O=O<PP`aeapap`qquvzv}v}u~  A  BF  BK  BK  AL  LP  Q#,,002 ,,   df r   c                 z   | j                          | j                          | j                          | j                          | j	                          | j                          | j                          | j                          | j                          | j                  r| j                          t        | 0  |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     ))+!!#""$;;%%'w|T,V,,r   c                 V   | j                   j                  s| j                   j                  r}| j                   j                  s<| j                   j                  r&| j                   j                  dk7  rt	        dd       t
        j                  j                  g ddgd      | _         y y )Nsalesu_   У сделки может быть вид деятельности только ПродажиTr4   )rJ   ==rg   r   )filterr   cache_inmemory)activityr   r   rJ   r:   r   CmfActivitygetr%   s    r   _calc_activityzCmfDeal._calc_activity   s    ==##t}}'<'<==((T]]-E-E$--J\J\`gJg{  DH  I"..22:Q[^Z_pt2uDM (=r   c                 ,    | j                   sd| _         y y )Nu   Новая сделка)rE   r%   s    r   
_calc_namezCmfDeal._calc_name   s    yy1DI r   c                 l    | j                   s(t        j                  j                  g d      | _         y y )N)mainrh   Tri   )rR   r   CmfCurrencyrm   r%   s    r   rd   zCmfDeal._calc_currency   s*    }}"..22:N2ODM r   c                     | j                   j                  r)| j                   j                  s| j                  | _         y y y r!   )rW   r   r   	cmf_ownerr%   s    r   rc   zCmfDeal._calc_responsible   s4    ##D,<,<,G,G#~~D -H#r   c                    |g }|dv rN|sg }|sg }|j                  d       |r|j                  d      x}r|dd|gg}|j                  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        |   |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 {+0A0A,0O"O*"O <z"BCMM4!<>XYZ !I-t%AC^_`F J.CDFw)['[[SY[ 	[r   c                    | j                   r| j                  j                          | j                  j                  r| j                  j
                  j                  rd | _        y | j                  j                          | j                  xj                  t        j                  | j                  j
                  j                        z  c_        y y )N)seconds)
rZ   rV   set_nowstatusr   
next_alarmr   r,   r   	timedeltar%   s    r   _calc_alarm_datezCmfDeal._calc_alarm_date   s     ;;OO##%;;!!{{%%--"&'')%%););DKKDZDZD`D`)aa% "r   c                     || _         | j                          t        j                  | |      }|j                          |S )N)rU   rH   )rV   r   r   
CmfComment)r   rV   reasonre   rO   comments         r   shift_alarmzCmfDeal.shift_alarm   s5    $		##4f#=r   c                      y)u=   
        Для сделок проверок нет
        Nr?   r%   s    r   _check_alarm_date_validzCmfDeal._check_alarm_date_valid   s    r   c                      y)u   
        Общая функция вычисления диапазона плана и будильника
        :return:
        Nr?   r%   s    r   
_calc_planzCmfDeal._calc_plan   s     	r   c                    | j                   j                  s| j                  s| j                  j                  so| j                  j                  sY| j                  j                  sC| j
                  j                  s-| j
                  j                  s| j                  j                  sy| j                  dk(  ry| j                   xs | j                  | _        | j                   r| j                  r| j                   | _        | j
                  j                  sB| j                   j                  s,| j                  j                  s| j                  j                  r | j                   xs | j                  | _        yy)u   
        Вычисляем человека от которого требуются действия по задаче
        :return:
        Nr~   )	rW   r   rv   rU   r   waiting_forr   rV   r}   r%   s    r   _calc_waiting_forzCmfDeal._calc_waiting_for   s    ''~~(({{%%{{%%''**)) !!X-++=t~~#//D $$**~~(({{%%#//A4>>D &r   c                    | j                  g d       t        | 	         }| j                  |d<   | j                  j                  g d      |d<   | j                  D cg c]  }|j                  g d       c}|d<   | j                  |d<   | j                  j                  |d<   | j                  j                  j                  |d<   | j                  r9| j                  j                  g d      |d	<   | j                  j                  |d
<   | j                  r | j                  j                  g d      |d<   | j                  r | j                  j                  g d      |d<   |S c c}w )N)r   zcurrency.short_namerB   tags
is_checkedpipeline_idr#   )r^   rE   rJ   rW   r   r   r   status_colorr   ry   )r^   rE   rJ   
short_namerR   rB   )r   rM   get_cache_fields_jsonr#   rW   to_jsonr   r   r   r,   r   colorr   ry   rR   rB   )r   resirP   s      r   r   zCmfDeal.get_cache_fields_json  s3    ) 	* g+-zzG!--556LMMBF))LQqyy!78LF OOL!--33M"kk//55N<<!\\112HIC	N $ 5 5C=="mm334XYC
O%)%9%9%A%ABX%YC!"
 Ms    E*c                     t         j                  j                  dd| j                  g      x}r|D cg c]  }|j	                          c} yyc c}w )u@   
        Удаляем связанные задачи
        	parent_idrh   rs   N)r   r[   listr^   delete)r   taskstasks      r   _clean_taskszCmfDeal._clean_tasks)  sI     NN''T477/K'LL5L',-tT[[]- M-s   Ac                     | j                  g d       | j                  D cg c]  }|j                          c} | j                          t	        |   |i |}| j
                  j                          |S c c}w )N)r\   r#   r*   )r   r*   r   r   rM   r\   emit)r   re   rO   objretrP   s        r   r   zCmfDeal.delete0  sc    <=!%1#1gnd-f-
 	2s   A8c                      y 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                  j                  |||      }t         j                  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@S r   )key)r   r   slistr^   sorted)r   r   _filterr   re   rO   commentschat_commentss           r   r   zCmfDeal.get_commentsB  sW    $$**'&PU*V))//V[/\ h.4STTr   c                 2   | j                  dg       | j                  r| j                  j                          | j                  j                  r:| j                  j                  r$| j                  j                  j                          t
        | 	          y )Nr\   )r   r\   r   r   r8   rM   r   rP   s    r   r   zCmfDeal.emitI  sc    *&==MM ==##}}  !!&&(r   c                 N    t         |   |      }|D ]  }|d   dv s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  s@    g(5 	,H%)=='+$	, 
r   c                     | j                   j                  s| j                  j                  r| j                  j                  | _         t
        |           y r!   )workflowr   r\   r   default_deal_workflowrM   _calc_workflowr   s    r   r   zCmfDeal._calc_workflow\  s8    ==  DMM$<$< MM??DM r   c                 @    t         j                  j                         gS r!   )r   CmfPersonGroup
user_group)r   re   rO   s      r   
get_ownerszCmfDeal.get_ownersb  s     %%00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.G
#!F=43	6 -v2P. [ [,b
"BH(.6U	  !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 #  + ; X4o X4r   