
    1lj!                     \    d dl  d dlmZ d dlZd dlmZmZ  G d dej                        Zy)    )*)cmf_task_resource_assignmentN)DecimalROUND_HALF_UPc                        e Zd Zed        Ze eddddgd      dd              Z fd	Z fd
Zd Z	dd fd
Z
 fdZ xZS )CmfTaskResAssignc                     t         j                  j                  dd| gdd|gg      }|D ]  }|j                           y )Nparent==personINfilter)modelsr   listdelete)taskpersonsassignments
assignments       6./modules/gantt/models/cmf_task_resource_assignment.pyremove_task_resourcesz&CmfTaskResAssign.remove_task_resources
   sP    --22HdD;Q<DdG;T;V2 W% 	 J	     u   Расчет CmfTaskResAssignFTtask_id   )descriptionshow_bg_progressbar	only_onceonly_once_argspriorityc           	         t         j                  j                  | g dd      }t               }|j                  rit        |j                  j                  t         j                        r;|j                  j                  s%|j                  |j                  j                         |j                  rQ|j                  |j                  D ch c],  }t        |t         j                        s|j                  r+|. c}       t         j                  j                  dd|gg d      }|D ch c]  }|j                   }}||z
  }||z
  }|rFt        j!                         5  t         j                  j#                  |t        |             d d d        |D cg c]  }|j                  |vs| }	}|D ]E  }
t        |
t         j                        st         j                  j                  |
j$                  dg	      }|
j&                  xs" t         j(                  j                  dd
g      }t         j                  ||
|j*                  |j,                  j.                  xs t0        j2                  j5                         |j,                  j.                  xs t0        j2                  j5                         |      }t        j!                         5  |j7                          d d d        |	j9                  |       H |s|r!|j,                  j;                  |	xs d        y y c c}w c c}w # 1 sw Y   xY wc c}w # 1 sw Y   _xY w)N)zexecutors.cmf_deletedzresponsible.cmf_deletedzexecutors.calendar.timezonezresponsible.calendar.timezoneop_gantt_taskzop_gantt_task.sched_start_dateT)idfieldsinclude_deletedr
   r   )zperson.calendar.timezoner
   units_decimalzcalendar.timezone)r   r$   gantt_default_units)r#   r$   timezone)
is_defaultr$   )r
   r   r&   
date_startdate_endcalendar)r   )r   CmfTaskgetsetresponsible
isinstancevalue	CmfPersoncmf_deletedadd	executorsupdater   r   r   cmfutildisable_aclr   r#   r,   CmfCalendarr'   r"   sched_start_datedtdatetodaysaveappendtask_resources_changed_hook)r   r   r   executorcur_assignmentsr   cur_personsto_be_assigned_personsto_be_removed_personsr   pr   r,   s                r   sync_task_resourcesz$CmfTaskResAssign.sync_task_resources   s    ~~!!W 6M^b " d %
4+;+;+A+A6CSCS T]a]m]m]y]yKK((../>>NNT^^  LzRZ\b\l\lGmv~  wK  wKH  L  M 1166xt>T ?K 7 L;JKZz((KK!(;!6 +g 5 $$& a''==dDI^D_`a 5DvjzGXGX`uGuzvv' 	+Aa!1!12%%))QTT;P:Q)RFzzaV%7%7%;%;tU_T`%;%aH00$88-->>Q"''--/++<<O! 1 J $$& "!"z*	+" !$:::{GZVZ:[ %;= L L
a a w" "s<   	L!)L!6L!+L& *L+L8*L8L=+L5=M	c                     t        t        | 	               }| j                  dg       | j                  r0| j                  j                         D ]  }|j                  |        t        |      S )Nr
   )r/   super
get_ownersload_fieldsr
   r5   r   )selfargskwargsownersparent_owner	__class__s        r   rK   zCmfTaskResAssign.get_ownersD   s`     UW')*($;; $ 6 6 8 )

<()F|r   c                    | j                  ddg       t        j                  | j                        }|r=|j	                  d| j
                  d      s|j	                  d| j
                         y y t        |           y Nr
   
project_idzPPP-TSK-ASSIGNF)objraise_errorzPPP-TSK-ASSIGN-EXECUTORS)rV   )rL   APPget_cache_projectrU   check_project_role_accessr
   rJ   check_edit_permrM   projectrR   s     r   r[   z CmfTaskResAssign.check_edit_permN   sz     	(L12''8 445E4;;di4j112LRVR]R]1^ k G#%r   c                    | j                   j                  sy t        | j                   j                        j	                  t        d      t
              }|| j                   j                  k7  r|| _         | j                   t        d      k  rt        dd       | j                   t        d      kD  rt        dd       | j                  s}| j                  d	g       | j                  j                  }|rR|j                  d
k(  rBt        j                  j                  dd| j                  gg      }|dk(  rt        dd       y y y y y )Nz0.01)rounding0u   Единицы назначения должны быть больше 0. Чтобы убрать ресурс из задачи, удалите назначениеT)abortz10000.00uO   Единицы назначения не могут превышать 10000.00z$parent.op_gantt_task.task_sched_typez3-const_duration_and_workr
   r   r      u   В задачах с типом «Фикс. длительность и трудозатраты» с одним ресурсом единицы назначения рассчитываются автоматически)r&   
is_changedr   r2   quantizer   	cmf_alertis_newrL   r
   r"   task_sched_typer   r   count)rM   	quantized
gantt_taskns       r   check_user_inputz!CmfTaskResAssign.check_user_input]   s-   !!,,D..445>>wvYf>g	**000!*D- t{A
 33gost{{DEF22Jj88<WW++118T4;;:W9X1Y6 | DHI  Xz r   )
user_inputc                   |r| j                          t        |   |i |}|r]| j                  j                  rG| j
                  s;| j                  dg       | j                  j                  }|r|j                  |        |S )Nzparent.op_gantt_task)
rl   rJ   r?   r&   rc   rf   rL   r
   r"   assignment_units_changed_hook)rM   rm   rN   rO   resultrj   rR   s         r   r?   zCmfTaskResAssign.saver   ss    !!#t.v.$,,7745622J88>r   c                    | j                  ddg       t        j                  | j                        }|r=|j	                  d| j
                  d      s|j	                  d| j
                         y y t        |           y rT   )rL   rX   rY   rU   rZ   r
   rJ   check_delete_permr\   s     r   rr   z"CmfTaskResAssign.check_delete_perm}   sx    (L12''8 445E4;;di4j112LRVR]R]1^ k G%'r   )N)__name__
__module____qualname__staticmethodr   cmf_deferred_jobrH   rK   r[   rl   r?   rr   __classcell__)rR   s   @r   r   r      sw        "AW\hl  H  ~I ".\" .\`&I* &* 		( 	(r   r   )	cmf.includemodules.gantt.fieldsr   datetimer<   decimalr   r   r    r   r   <module>r~      s&     =  *~(3DD ~(r   