
    @id                     *    d dl Z d dl  G d d      Zy)    N)*c                       e Zd Zg dZd Zd Zd Zed        Zd Z	e
ddd	       Ze
d
        Zd Zd Zd Ze
	 d"d       Ze
d        Zd Ze
d#d       Ze
ddd       Ze
d        Ze
ddd       Ze
dd fd
       Ze
d        Ze eddd      d               Ze fd       Zd Zd"defdZd$d Z d! Z! xZ"S )%CmfTaskMixin)sdesk_create
sdesk_listsdesk_count	sdesk_getsdesk_ui_getsdesk_updatesdesk_field_options_listsdesk_approve_onesdesk_create_dummy_tasksdesk_delete_dummy_tasksdesk_save_dummy_tasksdesk_task_transition_runsdesk_feedbacksdesk_attach_listsdesk_hint_docs_searchsdesk_count_approversc                     | j                  dg       | j                  rQ| j                  j                  r:t        j	                  | | j                  j                        j                          y y y )Nzrequest_type.task_form.textfields)parent	task_form)load_fieldsrequest_typer   modelsCmfTaskFormDatasaveselfs    (./modules/servicedesk/models/cmf_task.py_init_task_formzCmfTaskMixin._init_task_form   s^    !> ?@!2!2!<!<""$$:K:K:U:U"V[[] "=    c                 D    | j                   dk7  ry | j                          y )Nproject.servicedesk)parent_logic_prefix_calc_sdesk_hint_docsr!   _kwargss     r"   _sdesk_before_super_savez%CmfTaskMixin._sdesk_before_super_save   s     ##'<<""$r$   c                 n   | j                   dk7  ry | j                  r,| j                  j                          | j	                  d       t
        j                  j                  |        | j                  s+| j                  rt
        j                  j                  |        | j                  j                  r| j                  dk(  rqt        j                  | j                  j                        }|j                   r;t#        t
        j$                  j&                  | j                  j(                  g       y y y y )Nr&   T	only_dataCLOSED)args)r'   is_newcmf_created_atset_nowr   r   CmfSDeskSlaTriggertask_changed_hook
is_changedCmfSDeskSlaCycleupdate_cycle_goalscache_status_typeAPPget_cache_projectprojectidr   schedule_deferred_jobCmfTasksdesk_send_feedback_requestvalue)r!   r*   r<   s      r"   _sdesk_after_super_savez$CmfTaskMixin._sdesk_after_super_save$   s    ##'<<;; '') III%
 	!!33D9{{t##66t< !!,,1G1G81S++DLLOO<G%%%fnn&P&PX\X_X_XeXeWfg & 2T,r$   c                  
    g dS )N)is_dummyr   
project_id	cmf_ownerzcmf_owner.company
cmf_authorshare_companies rI   r$   r"   _sdesk_check_access_fieldsz'CmfTaskMixin._sdesk_check_access_fields@   s     	r$   c                 t   | j                  | j                                t        j                  | j                        }| j
                  r|s| j                  r| j                  }|j                  d|d      sy| j
                  r| j                  t        j                  k(  ry| j                  t        j                  k(  ry|j                  t        j                  j                  k(  ryt        j                  j                  j                         r't        j                  j                  | j                   v ryy)NzPPP-PR-BROWSEF)objraise_errorT)r   rJ   r:   r;   rE   rD   r   check_project_role_accessrG   gcurrent_userrF   cmf_owner_idr=   companyloadrH   )r!   r<   s     r"   _sdesk_check_accessz CmfTaskMixin._sdesk_check_accessF   s    
 	88:; ''8==T[[kkG00g[`0a==T__>>>Q^^+1>>#4#44 >>!!&&(Q^^-C-CtG[G[-[( r$   N)r   c                ^   t         j                  |      }t        j                  |d|i|}|j	                  d|       t
        j                  |d       t
        j                  |j                  d       |j                          |j                         st        dd       |j                  S )Nr   PPP-TSK-CREATErL   write   Нет доступа!Tabort)r:   r;   r   r?   rN   cmfutilacl_set_policysdesk_sla_cyclesr   rT   	cmf_alertr=   )clsr   r0   kwargsr<   ress         r"   r   zCmfTaskMixin.sdesk_createx   s    ''/nnd<6<V<))*:)DsG,s33W=
&&(.d;vvr$   c                    t         j                  |      }t        j                  d
d||d|}|j                  |_        |j                  d|       t        j                  |d       t        j                  |j                  d       d|_
        |j                          |j                          |j                          |j                         st        dd       d	|j                  iS )Ndummy)coder<   r   rV   rW   rX   TrY   rZ   r=   rI   )r:   r;   r   r?   r=   re   rN   r\   r]   r^   rD   _calc_default_fieldr   r#   rT   r_   )r`   r   ra   r<   
dummy_tasks        r"   r   z$CmfTaskMixin.sdesk_create_dummy_task   s    ''/^^\''\U[\
$--
))*:
)Kz73z::GD"
&&(""$--/.d;jmm$$r$   c                 \    | j                         st        dd       | j                         S NrY   TrZ   )rT   r_   delete_dummy_taskr    s    r"   r   z$CmfTaskMixin.sdesk_delete_dummy_task   s(    '').d;%%''r$   c                 `    | j                         st        dd        | j                  |i |S ri   )rT   r_   save_dummy_taskr!   r0   ra   s      r"   r   z"CmfTaskMixin.sdesk_save_dummy_task   s1    '').d;#t##T4V44r$   c                 `    | j                         st        dd        | j                  |i |S ri   )rT   r_   task_transition_runrm   s      r"   r   z&CmfTaskMixin.sdesk_task_transition_run   s1    '').d;'t''888r$   c                 z   |dk(  rk|xr |j                  dd       }|rSt        j                  j                  |      }|r1|r/ |j                  d||ddd|}t        j                  |d       |S |dk(  r4g d|d	<    | j                  |fd
|i|}t        j                  |d       |S |dk(  rt        j                  j                  j                          ddddt        j                  ggg dgddt        j                  j                  ggi} | j                  d|||d|}t        j                  |d       |S |j                  d      rmt        j                  j                  | j                  |dg      }	d}
|	j                  dv rd}
 | j                  |f||
d|}t        j                  |d       |S g S )Nstatusworkflow_id)r=   T)obj_idrr   closed_lasttrans_sdesk_portal_allowreadassets)r=   re   namelogic_prefixr   object_fieldsrH   
CmfCompanyORpersonsIN)servicedesk_allow=Tr=   r   )relation_field_namerz   models_filterscf_field_custom_type)cmf_model_namerx   r   )choice_multichoice_cascade_multiF)rz   require_field_filterrI   )getr   CmfWorkflowget_status_listr\   r]   field_options_listrO   rP   rR   rS   
startswithCmfCustFieldsget
class_namer   )r`   r   rz   	object_idra   rr   workflowrb   r   
cust_fieldr   s              r"   r   z%CmfTaskMixin.sdesk_field_options_list   s    (*'RM,=,=mT,RK!--11[1A	2(22 ($/$(15	
 !C **37J(*  FF8 )#(()<dMd]cdC""3/J"33NN""'')'78:Z[3 6 67N )#(( $7}esC ""3/J ))%0,,11#&>>8K/0 2 2J "& ++/VV',$ )#((#w3@WkwouwC""3/J	r$   c                     t         j                  j                  |d         }|st        dd       |j	                         st        dd        |j
                  di |}|S )Nr   u!   Не найдена задача!TrZ   rY   rI   )r   r?   r   r_   rT   approve_one)r`   r0   ra   taskrb   s        r"   r   zCmfTaskMixin.sdesk_approve_one   sY    ~~!!$q'*9F'').d;d((
r$   c                 `    | j                         st        dd        | j                  |i |S ri   )rT   r_   updaterm   s      r"   r   zCmfTaskMixin.sdesk_update   s/    '').d;t{{D+F++r$   c                 b   |sg }|j                  | j                                g }|r|j                  |       |j                  g d       t        j                  j                  dg       |j                  dddt        j                  gddt        j                  gddt        j                  j                  ggg       t        j                  j                  ||||	      }d
}g }	|D ]  }
|
j                         s|srd}|
j                  d      D ][  }t        |
j                  |   t        j                  j                        s5|dv r|	j                  |       |j!                  d      s\] t"        j%                  |
d       |	D ]"  }t"        j%                  t'        |
|      d       $  |S )N)r'   r   r&   rR   r|   rF   r   zproject.cmf_ownerrH   r~   )r   filterorder_bysliceFT)
is_defined)r   rq   rH   r   rv   )extendrJ   appendrO   rP   r   rR   r   r?   listrT   keys
issubclassr   cmf
CmfRelBaser   r\   r]   getattr)r`   r   r   r   r   r*   task_filterrb   fields_filledrel_fields_allowr   
field_names               r"   r   zCmfTaskMixin.sdesk_list   s   " Fc4467v& 	NO	""I;/#q~~. #q~~6q~~'='=&>?	
 	 nn!!h^c!d 	ND'')$$(M&*ii4i&@ !
)$++j*A3::CXCXY$%)PP,33J?%007 !! &&tV4"2 NJ**74+DfMN!	N$ 
r$   r   c                   dD ]  }||vs|j                  |        t        j                  j                  ||d|d|}|s|S g }|D ]  }t	        |j
                  j                  t        j                        rO|j                  sC|j
                  j                         sYt        j                  |d       |j                  |       t	        |j
                  j                  t        j                        s|j                  r|j
                  j
                  j                         st        j                  |d       |j                  |        |S )N)r   zparent.parentF)rs   simpler   rv   )r   r   r?   attach_list
isinstancer   rA   privaterT   r\   r]   
CmfComment)	r`   r   rs   r0   ra   fieldattachmentsfiltered_attachattachs	            r"   r   zCmfTaskMixin.sdesk_attach_list7  s   0 	%EF"e$	% nn00$ve\bmflm! 		3F&----v~~>v~~==446**66:#**62FMM//1B1BCFNN=='';;=**66:#**62		3 r$   c                      | j                   |i |}|r|j                         sy |rt        j                  |d       |S )Nrv   )r   rT   r\   r]   )r`   r0   ra   rb   s       r"   r	   zCmfTaskMixin.sdesk_getM  s@    cggt&v&s..0""3/
r$   c                `    dg}t        j                  j                  |d|i|}t        |      S )Nr=   r   )r   r?   r   len)r`   r   r0   ra   	task_lists        r"   r   zCmfTaskMixin.sdesk_countV  s3     NN--tMFMfM	9~r$   c                $   | j                   }d}d}|j                  dd      }|r| j                  |g d      }|j                         sy|j                  r|j                  j
                  }n|j                  j                  }|j                  j                          |j                  rZ|j                  j
                  s|j                  j                  r.|r,t        | )  |ddd|	      }|j                  }|j                  }	t        |xs d
dg      }
|
j                  g d       g }|rZ|j                  dg       }|D ]C  }|j                  |j                  d             |
j                  |j                  dg              E | j!                  |
      } | j"                  ||dd|}|rj                  s|j$                  D cg c]  }|j&                  dk(  s| c}|_        t)        |g       }|D ]W  }t+        ||d      }|st-        t+        | |      t.        j0                  j2                        sBt4        j7                  |d       Y t4        j7                  |d       t4        j7                  |j$                  d       d|v r t4        j7                  |j8                  d       d|
v r t4        j7                  |j:                  d       d|v r t4        j7                  |j<                  d       d|v r t4        j7                  |j>                  d       d|v r t4        j7                  |j@                  d       ||_        ||_!        |jD                  s3|r1tG        tH        d      r!tH        jJ                  jM                  |	      }|S c c}w )ux   
        fields - список мета-правил для указания какие поля грузить
        defaultNr   )zrequest_type.ui_form_viewzrequest_type.ui_form_createlogic_type_idr   activity_id)r   r   Fr   inline_save)tmp_objtmp_is_public_formtmp_ui_view_formcreate_formui_formr   r<   )cmf_deleted
logic_type	scheme_wfactivityrH   ui_group_fieldsr   r   )full_fields_loadmapperr   rv   rw   r   rq   r   rH   CmfAutomationUiForm)cmf_ui_form)'r   r   rT   rD   r   ui_form_createui_form_viewui_form_jsonrS   super_build_ui_formrx   r=   setr   r   _build_load_plan_getcomments	log_levelsumr   r   r   r   r   r\   r]   rw   r   rq   r   rH   ui_form_namer   hasattrr   r   ui_get_hook)r`   r   r0   ra   r   r   r   r   r   
ui_form_id
fields_setui_form_fieldsgroups
group_datar   retcommentr   r   	__class__s                      r"   r
   zCmfTaskMixin.sdesk_ui_get]  s   
 {{ Hd+77& 27 D ++-}}++::++88  %%'  d&7&7&F&F$J[J[JhJh#(7#9 $+0)/$1 ' $: $L $+<<L!(J8Hi#89
cd!%%&7<F$ @
%%jnnX&>?!!*..2">?@ //
;chh/?[TZ[==7:||^GwGXGX\]G]^!$^R!8"0 >J#CT:EGC,DcjjF[F[!\..uf=>
 &&sF3&&s||V<//**3::v> J.**3??FC//**3::v>!11**3<<@$(88**3+>+>G+C+C??w76CX3Y00<<Sj<Y
5  _s   N Nc                    dd l }|rt        |      dk(  r|rt        j                  j	                  |ddg      }|r|j                   j                         |j                  z
  j                  dk  rh|r%t        |j                  dd            dkD  r||_	        |j                  |k7  r!||_
        |j                  j                          |j                          y	y
)Nr   @   status_modified_atmark)
mark_tokenr   Z     TF)datetimer   r   r?   r   nowr   daysreplacemark_commentr   	mark_dater3   r   )r`   r   r   r   r   r   s         r"   r   zCmfTaskMixin.sdesk_feedback  s    #j/R/D>>%%EY[aDb%cD**..043J3JJPPTVVC(<(<S"(E$F$J(4D%99$ $DINN**,		r$   Tu`   Отправка письма оценки качества обслуживания ServiceDesk)	only_oncedescription
system_jobc                 F   t         j                  j                  | g d      }|j                  s,dd l}|j                  d      |_        |j                  d       |j                  j                  ri }t        j                  t        j                  j                  t        j                  d      t        j                  j                  t        j                  d      g      }||d	<   t        j                   di |}|j"                  j$                  j&                  }d
|j                  j(                   d|j*                   d|j(                   d|j                  j,                   }|j/                  d      }|j1                  d
|j                  j(                   d|j*                   d|j(                   |j                  |j                  j,                  dt        j2                   d      }	t         j4                  j7                         }
|
j9                  ||	|       y y )N)r   zparent.sdesk_feedbackzparent.sdesk_feedback_textzparent.namezcmf_owner.email)r=   r   r       Tr-   zcommon/templateszcmf/templatesloader[z] (z) r   zsdesk_mail_notification.htmlzhttps://z/servicedesk/feedback)	mail_textr   sdesk_feedback_textsdesk_feedback_url)subjectrI   )r   r?   r   r   secrets	token_hexr   r   r   jinja2FileSystemLoaderospathjoinconfigPROJECT_DIREnvironmentrF   emailrA   rx   re   r   get_templaterenderAPP_FQDNCmfPluginMailBoxget_local_mailboxsend_message)task_idr   r   _options_loader
_jinja_envrcpt_tor   template
email_bodymail_boxs              r"   r@   z(CmfTaskMixin.sdesk_send_feedback_request  s    ~~!!W 6
!  %//3DOIII% ;;%%H--f002DErww||TZTfTfhwGxy{G!(HX++7h7Jnn**00G$++**+3tyykDII;aHgHgGhiG!../MNH!dkk../s499+R		{K??$(KK$C$C%-foo->>S#T	 ) J ..@@BH!!':w!G' &r$   c                     | j                   j                  d      rd| j                   d| j                   S t        |   S )Nztask.sdzservicedesk//)ry   r   ui_namere   r   href)r!   r   s    r"   r  zCmfTaskMixin.href  s<    ''	2!$,,q<<w|r$   c                 6   | j                   r| j                  r| j                  sy | j                  j                  s-| j                   j                  s| j                  j                  sy | j                   j	                  dg       | j                         | _        y )Nhint_docs_mandatory_tags)r   rx   r<   r6   r   _sdesk_hint_docs_searchsdesk_hint_docsr    s    r"   r(   z"CmfTaskMixin._calc_sdesk_hint_docs  sq    !!diiDLL LL##  ++yy##%%'A&BC#;;=r$   searchc                    || j                   j                  }|r4t        |j                               dk  s| j                  r| j
                  sg S d }|j                  dd      }| j
                  j                  D cg c]  }|j                   j                   }}t        j                  j                  dd|| j                  j                  j                  ||ddgd	|
	      S c c}w )N   c                    d}| j                   ru| j                   j                  dk(  r\t        | t        j                        r| j                   j                         }|r&t        j                  | d       | j                          |S )NFr&   rv   )	r<   ry   r   r   CmfDocumentrT   r\   r]   _acl_check_read)rL   checks     r"   check_accessz:CmfTaskMixin._sdesk_hint_docs_search.<locals>.check_access  sh     E{{s{{77;PPc6#5#56KK;;=E**37'')Lr$   #r   r  ANYr<   zproject.logic_prefixT)	
model_namer   search_query	parent_idtag_namer   r   	query_rawr"  )rx   rA   r   stripr<   r   r   r  r   CmfFullSearchfulltext_searchr=   )r!   r  r   r"  tag	tags_lists         r"   r  z$CmfTaskMixin._sdesk_hint_docs_search  s    >YY__FV\\^,q0DL]L]I	 S)/3/@/@/Y/YZSXX^^Z	Z##33$Vlloo++i,B Ctbn 4 p 	p [s   >C%c                     | j                  ddg| j                         z          | j                         st        dd       | j	                  |ddg      S )	Nr<   z%request_type.hint_docs_mandatory_tagsrY   TrZ   r   r  )r   )r   rJ   rT   r_   r  )r!   r  r*   s      r"   r   z#CmfTaskMixin.sdesk_hint_docs_search  sU    )%LMdNmNmNoop'').d;++F1a&+AAr$   c                 B    | j                          | j                         S N)rT   count_approversr)   s     r"   r   z"CmfTaskMixin.sdesk_count_approvers  s      "##%%r$   )NN)NNNNr1  )#__name__
__module____qualname__api_methodsr#   r+   rB   staticmethodrJ   rT   classmethodr   r   r   r   r   r   r   r   r   r   r	   r   r
   r   cmf_deferred_jobr@   propertyr  r(   strr  r   r   __classcell__)r   s   @r"   r   r      s   
K&^
%h8  
0d (, 	 	 % %&(
5
9
 DH? ?B 	 	,
 : :x -1  *   '+   (, K KZ     3U  bf  g%H g %HN  >pc p>B&r$   r   )builtinscmf.includer   rI   r$   r"   <module>r?     s     [& [&r$   