
    oiu                     "    d dl   G d d      Zy)    )*c                       e Zd Zg dZd#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       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_approversNc                    | j                  dg       | j                  rk| j                  j                  rTt        j	                  | | j                  j                        }|rt
        j                  ||       |j                          y y y )Nzrequest_type.task_form.textfields)parent	task_form)load_fieldsrequest_typer   modelsCmfTaskFormDatacmfutilacl_set_policysave)selfr    	form_datas      (./modules/servicedesk/models/cmf_task.py_init_task_formzCmfTaskMixin._init_task_form   st    !> ?@!2!2!<!<..ddFWFWFaFa.bI&&y.ANN	 "=    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cmf_owner_assistants rL   r&   r$   _sdesk_check_access_fieldsz'CmfTaskMixin._sdesk_check_access_fieldsB   s    7 	7r&   c                    | 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t        j                  | j"                  v ryy)NzPPP-PR-BROWSEF)objraise_errorT)r   rM   r<   r=   rG   rF   r   check_project_role_accessrI   gcurrent_userrH   cmf_owner_idr?   companyloadrJ   rK   )r"   r>   s     r$   _sdesk_check_accessz CmfTaskMixin._sdesk_check_accessH   s    
 	88:; ''8==T[[kkG00g[`0a==T__>>>Q^^+1>>#4#44 >>!!&&(Q^^-C-CtG[G[-[>>T666& r&   )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rO   write   Нет доступа!Tabort)r<   r=   r   rA   rQ   r   r    sdesk_sla_cyclesr!   rW   	cmf_alertr?   )clsr   r2   kwargsr>   ress         r$   r   zCmfTaskMixin.sdesk_create|   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                         st        dd       |j                  d	       d
|j                  iS )Ndummy)coder>   r   rY   rZ   r[   Tr\   r]   )r    r?   rL   )r<   r=   r   rA   r?   rf   rQ   r   r    r_   rF   _calc_default_fieldr!   rW   r`   r%   )ra   r   rb   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 Nr\   Tr]   )rW   r`   delete_dummy_taskr"   s    r$   r   z$CmfTaskMixin.sdesk_delete_dummy_task   s(    '').d;%%''r&   c                 `    | j                         st        dd        | j                  |i |S rj   )rW   r`   save_dummy_taskr"   r2   rb   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 rj   )rW   r`   task_transition_runro   s      r$   r   z&CmfTaskMixin.sdesk_task_transition_run   s1    '').d;'t''888r&   c                    |dk(  rs|xr |j                  dd       }ddg}|rt        j                  j                  |      }|r|r|j                  ||dd|	||
      }t        j                  |d       |S |d	k(  r4d
g}| j                  |||||	|
||      }t        j                  |d       |S |dk(  rLdddt        j                  gggi}dg}| j                  ||||||	|
||	      }t        j                  |d       |S |dk(  rt        j                  j                  ddt        j                  ggddg      }|D ch c]  }|j                   }}dd|g}|rd|dd|gdd|gg}d|i}| j                  |||dgdg|	|
|||
      }| j                  ||       t        j                  |d       |S |j                  d      rot        j                  j                  | j                   |dg       }d}|j"                  d!v rd"}| j                  |||||||
#      }t        j                  |d       |S t$        j'                  d$d%| d&       g S c c}w )'Nstatusworkflow_idcolorzworkflow.name)r?   T)obj_idrt   closed_lasttrans_sdesk_portal_allowfilterr   slicereadassetslogic_prefix)object_fieldsr   searchry   rz   cust_field_conf_idcust_field_confrJ   
CmfCompanypersonsINinn)	relation_field_namer~   models_filtersr   r   ry   rz   r   r   rK   --r?   ry   r   rU   ORlogin=email	CmfPerson
company_id)
r   r~   r   models_listr   ry   rz   r   r   r   cf_field_custom_type)cmf_model_namenamer   )choice_multichoice_cascade_multiF)r~   require_field_filterr   r   r   rz   z%sz!CmfTask.sdesk_field_options_list(z): prohibited field requested)getr   CmfWorkflowget_status_listr   r    field_options_listrR   rS   r   slistr?   _sedesk_hide_person_info
startswithCmfCustFieldsget
class_namer   loggingwarning)ra   r   r~   	object_idr   all_optionsr   r   r   ry   rz   r,   rt   workflowrc   r   	companiesrU   company_idscmf_person_filter
cust_fieldr   s                         r$   r   z%CmfTaskMixin.sdesk_field_options_list   s    (*'RM,=,=mT,RK/F!--11[1A	"22($/$(15%fE 3 C **37J H, %%F ((#=fV5#5 ) XC ""3/J $55 
 q~~&67N WF(($7}esfV5#5 ) XC ""3/J $:: ))//	4!..IY7Zdhjnco/pI5>?'7::?K?!*D+ > %c6*c6*	%! *+<=N(($7}es(M$~fE2DVe	 ) gC ((k:""3/J !++E2,,11#&>>8K/0 2 2J $( ++/WW',$ ((#=Wk2DVemr ) tC ""3/J ABUAVVstu	W @s   Ic                     t         j                  j                  |d         }|st        dd       |j	                         st        dd        |j
                  di |}|S )Nr   u!   Не найдена задача!Tr]   r\   rL   )r   rA   r   r`   rW   approve_one)ra   r2   rb   taskrc   s        r$   r   zCmfTaskMixin.sdesk_approve_one  sY    ~~!!$q'*9F'').d;d((
r&   c                 `    | j                         st        dd        | j                  |i |S rj   )rW   r`   updatero   s      r$   r   zCmfTaskMixin.sdesk_update)  s/    '').d;t{{D+F++r&   c           	         |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d	dt        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(   rU   r   rH   r   zproject.cmf_ownerrJ   r   rK   )r   ry   order_byrz   FT)
is_defined)r   rs   rJ   r   r{   )extendrM   appendrR   rS   r   rU   r   rA   listrW   keys
issubclassr   cmf
CmfRelBaser   r   r    getattr)ra   r   ry   r   rz   r,   task_filterrc   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~~'='=&>?#TANN+;<
 	 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)rv   simpler   r{   )r   r   rA   attach_list
isinstancer   rC   privaterW   r   r    
CmfComment)	ra   r   rv   r2   rb   fieldattachmentsfiltered_attachattachs	            r$   r   zCmfTaskMixin.sdesk_attach_listl  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 )Nr{   )r   rW   r   r    )ra   r2   rb   rc   s       r$   r	   zCmfTaskMixin.sdesk_get  s@    cggt&v&s..0""3/
r&   c                `    dg}t        j                  j                  |d|i|}t        |      S )Nr?   r   )r   rA   r   len)ra   r   r2   rb   	task_lists        r$   r   zCmfTaskMixin.sdesk_count  s3     NN--tMFMfM	9~r&   c                     |Ht         j                  j                  t        j                  j
                  ddg      }|j                  g}|D ]"  }|j                  |vs|j                  |_        $ y )Nr   r   r?   r   )	r   r   r   rR   rS   r?   r   r   r   )ra   r   r   rS   persons        r$   r   z%CmfTaskMixin._sedesk_hide_person_info  si    !++00ANN4E4EtUaNb0cL'223K 	+F  3$ll	+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%                  |j&                         j                  s2t)        |g       }|D ]W  }t+        ||d      }|st-        t+        | |      t.        j0                  j2                        sBt4        j7                  |d       Y t4        j7                  |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 )ux   
        fields - список мета-правил для указания какие поля грузить
        defaultNry   )zrequest_type.ui_form_viewzrequest_type.ui_form_createlogic_type_idr   activity_idr   Fr   inline_save)tmp_objtmp_is_public_formtmp_ui_view_formcreate_formui_formr   r>   )cmf_deleted
logic_type	scheme_wfactivityrJ   zcmf_owner_assistants.company.idui_group_fieldsr   r   )full_fields_loadmapperr{   r|   r   rs   r   rJ   CmfAutomationUiForm)cmf_ui_form)'r   r   rW   rF   r   ui_form_createui_form_viewui_form_jsonrV   super_build_ui_formr   r?   setr   r   _build_load_plan_getr   rK   sumr   r   r   r   r   r   r    r|   r   rs   r   rJ   ui_form_namer   hasattrr   r   ui_get_hook)ra   r   r2   rb   r   r   r   ry   r   
ui_form_id
fields_setui_form_fieldsgroups
group_datar   retr   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
 x 	y !%%&7<F$ @
%%jnnX&>?!!*..2">?@ //
;chh/?[TZ[(()A)AB==!$^R!8"0 >J#CT:EGC,DcjjF[F[!\..uf=>
 &&sF3//**3::v> J.**3??FC//**3::v>!11**3<<@$(88**3+>+>G+C+C??w76CX3Y00<<Sj<Y
r&   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   rA   r   nowr   daysreplacemark_commentr   	mark_dater5   r!   )ra   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                  rdt        j                  i}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                  j0                   }|j3                  d      }|j5                  d|j                  j,                   d|j.                   d|j,                   |j                  |j                  j0                  dt         j6                   d      }	t         j8                  j;                         }
|
j=                  ||	|       y y )N)r   zparent.sdesk_feedbackzparent.sdesk_feedback_textzparent.namezcmf_owner.emailr   r       Tr/   
autoescapez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)subjectrL   )r   rA   r   r   secrets	token_hexr!   r   r   r<   select_jinja_autoescapejinja2FileSystemLoaderospathjoinconfigPROJECT_DIREnvironmentrH   r   rC   r   rf   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$   rB   z(CmfTaskMixin.sdesk_send_feedback_request  s    ~~!!W 6
!  %//3DOIII% ;;%%$c&A&ABH--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//)r}   r   ui_namerf   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   r   r>   r8   r   _sdesk_hint_docs_searchsdesk_hint_docsrl   s    r$   r*   z"CmfTaskMixin._calc_sdesk_hint_docs2  sq    !!diiDLL LL##  ++yy##%%'A&BC#;;=r&   r   c                    || 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(   r{   )	r>   r}   r   r   CmfDocumentrW   r   r    _acl_check_read)rO   checks     r$   check_accessz:CmfTaskMixin._sdesk_hint_docs_search.<locals>.check_accessH  sh     E{{s{{77;PPc6#5#56KK;;=E**37'')Lr&   #r   r4  ANYr>   zproject.logic_prefixT)	
model_namer   search_query	parent_idtag_namerz   r   	query_rawr7  )r   rC   r   stripr>   r   r  r.  r   CmfFullSearchfulltext_searchr?   )r"   r   rz   r7  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_tagsr\   Tr]   r   r2  )rz   )r   rM   rW   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)rW   count_approversr+   s     r$   r   z"CmfTaskMixin.sdesk_count_approverse  s      "##%%r&   rF  )	NNNNNNNNN)NNNN)NN)$__name__
__module____qualname__api_methodsr%   r-   rD   staticmethodrM   rW   classmethodr   r   r   r   r   r   r   r   r   r   r	   r   r   r
   r   cmf_deferred_jobrB   propertyr,  r*   strr/  r   r   __classcell__)r   s   @r$   r   r      s   
K&%h8 7 7
2h (, 	 	 % %((
5
9
 ptNRn n` 	 	,
 ; ;z -1  *   '+   + + (, O Ob     3U  bf  g&H g &HP  >pc p>B&r&   r   N)cmf.includer   rL   r&   r$   <module>rS     s    c	& c	&r&   