def test_list_wf_states(self): imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail', datetime.now(), 'my-id') self.assertEqual(list_wf_states(imail, 'unknown'), []) self.assertEqual( [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [ 'created', 'to_assign', 'to_do', 'in_progress', 'realized', 'closed' ]) # We rename a state id states = imail.portal_workflow.task_workflow.states states.manage_renameObject('to_do', 'NEW') # use cache self.assertEqual( [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [ 'created', 'to_assign', 'to_do', 'in_progress', 'realized', 'closed' ]) invalidate_cachekey_volatile_for( 'imio.dms.mail.utils.list_wf_states.task') # 'imio.dms.mail.utils.list_wf_states self.assertEqual( [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [ 'created', 'to_assign', 'in_progress', 'realized', 'closed', 'NEW' ])
def __call__(self, context): terms = [] for st_id, st_tit in list_wf_states(context, 'task'): terms.append( SimpleVocabulary.createTerm( st_id, st_id, translate(safe_unicode(st_tit), domain='plone', context=context.REQUEST))) return SimpleVocabulary(terms)
def __call__(self, context): terms = [] tl = api.portal.get().portal_properties.site_properties.getProperty( 'default_language', 'fr') for st_id, st_tit in list_wf_states(context, 'dmsoutgoingmail'): terms.append( SimpleVocabulary.createTerm( st_id, st_id, translate(safe_unicode(st_tit), domain='plone', target_language=tl))) return SimpleVocabulary(terms)
def configure_group_encoder(portal_types, contacts_part=False): """ Used to configure a creating function and group for some internal organizations. Update portal_type to add behavior, configure localroles field """ # function functions = get_registry_functions() if CREATING_GROUP_SUFFIX not in [fct['fct_id'] for fct in functions]: functions.append({ 'fct_title': u'Indicateur du service', 'fct_id': CREATING_GROUP_SUFFIX, 'fct_orgs': [], 'fct_management': False, 'enabled': True }) set_registry_functions(functions) if contacts_part and CONTACTS_PART_SUFFIX not in [ fct['fct_id'] for fct in functions ]: functions.append({ 'fct_title': u'Contacts par défaut', 'fct_id': CONTACTS_PART_SUFFIX, 'fct_orgs': [], 'fct_management': False, 'enabled': True }) set_registry_functions(functions) # role and permission portal = api.portal.get() # existing_roles = list(portal.valid_roles()) # if CREATING_FIELD_ROLE not in existing_roles: # existing_roles.append(CREATING_FIELD_ROLE) # portal.__ac_roles__ = tuple(existing_roles) # portal.manage_permission('imio.dms.mail: Write creating group field', # ('Manager', 'Site Administrator', CREATING_FIELD_ROLE), acquire=0) # local roles config config = { 'dmsincomingmail': { # i_e ok 'created': { CREATING_GROUP_SUFFIX: { 'roles': [ 'Contributor', 'Editor', 'DmsFile Contributor', 'Base Field Writer', 'Treating Group Writer' ] } }, # CREATING_FIELD_ROLE]}}, 'proposed_to_manager': { CREATING_GROUP_SUFFIX: { 'roles': ['Base Field Writer', 'Reader'] } }, 'proposed_to_agent': { CREATING_GROUP_SUFFIX: { 'roles': ['Reader'] } }, 'in_treatment': { CREATING_GROUP_SUFFIX: { 'roles': ['Reader'] } }, 'closed': { CREATING_GROUP_SUFFIX: { 'roles': ['Reader'] } } }, 'dmsincoming_email': { 'created': { CREATING_GROUP_SUFFIX: { 'roles': [ 'Contributor', 'Editor', 'DmsFile Contributor', 'Base Field Writer', 'Treating Group Writer' ] } }, # CREATING_FIELD_ROLE]}}, 'proposed_to_manager': { CREATING_GROUP_SUFFIX: { 'roles': ['Base Field Writer', 'Reader'] } }, 'proposed_to_agent': { CREATING_GROUP_SUFFIX: { 'roles': ['Reader'] } }, 'in_treatment': { CREATING_GROUP_SUFFIX: { 'roles': ['Reader'] } }, 'closed': { CREATING_GROUP_SUFFIX: { 'roles': ['Reader'] } } }, 'dmsoutgoingmail': { 'to_be_signed': { CREATING_GROUP_SUFFIX: { 'roles': ['Editor', 'Reviewer'] } }, 'sent': { CREATING_GROUP_SUFFIX: { 'roles': ['Reader', 'Reviewer'] } }, 'scanned': { CREATING_GROUP_SUFFIX: { 'roles': [ 'Contributor', 'Editor', 'Reviewer', 'DmsFile Contributor', 'Base Field Writer', 'Treating Group Writer' ] } }, }, # 'dmsoutgoing_email': { # 'to_be_signed': {CREATING_GROUP_SUFFIX: {'roles': ['Editor', 'Reviewer']}}, # 'sent': {CREATING_GROUP_SUFFIX: {'roles': ['Reader', 'Reviewer']}}, # 'scanned': {CREATING_GROUP_SUFFIX: {'roles': ['Contributor', 'Editor', 'Reviewer', 'DmsFile Contributor', # 'Base Field Writer', 'Treating Group Writer']}}, # }, } # add localroles for possible proposed_to_n_plus_ states # only incoming mails if 'dmsincomingmail' in portal_types: # i_e ok for typ in ('dmsincomingmail', 'dmsincoming_email'): states = list_wf_states(portal, typ) for st_id, st_tit in states: if st_id.startswith('proposed_to_n_plus_'): config[typ][st_id] = { CREATING_GROUP_SUFFIX: { 'roles': ['Reader'] } } # criterias config criterias = { 'dmsincomingmail': ('incoming-mail', 'mail-searches', 'all_mails'), # i_e ok 'dmsoutgoingmail': ('outgoing-mail', 'mail-searches', 'all_mails'), 'organization': ('contacts', 'orgs-searches', 'all_orgs'), 'person': ('contacts', 'persons-searches', 'all_persons'), 'held_position': ('contacts', 'hps-searches', 'all_hps'), 'contact_list': ('contacts', 'cls-searches', 'all_cls'), } for portal_type in portal_types: # behaviors fti = getUtility(IDexterityFTI, name=portal_type) # try: # fti = getUtility(IDexterityFTI, name=portal_type) # except ComponentLookupError: # continue if 'imio.dms.mail.content.behaviors.IDmsMailCreatingGroup' not in fti.behaviors: old_bav = tuple(fti.behaviors) fti.behaviors = tuple( list(fti.behaviors) + ['imio.dms.mail.content.behaviors.IDmsMailCreatingGroup']) ftiModified( fti, ObjectModifiedEvent( fti, DexterityFTIModificationDescription('behaviors', old_bav))) # local roles if config.get(portal_type): msg = add_fti_configuration(portal_type, config[portal_type], keyname='creating_group') if msg: logger.warn(msg) # criterias folder_id, category_id, default_id = criterias.get( portal_type, ('', '', '')) if folder_id: reimport_faceted_config( portal[folder_id][category_id], xml='mail-searches-group-encoder.xml', default_UID=portal[folder_id][category_id][default_id].UID()) # display added field for im and om if not contacts_part: config = {'dmsincomingmail': 'imail', 'dmsoutgoingmail': 'omail'} key = 'imio.dms.mail.browser.settings.IImioDmsMailConfig.{}_fields'.format( config[portal_types[0]]) fields = api.portal.get_registry_record(key) if 'IDmsMailCreatingGroup.creating_group' not in [ f['field_name'] for f in fields ]: fields.append({ 'field_name': 'IDmsMailCreatingGroup.creating_group', 'read_tal_condition': u'', 'write_tal_condition': u'' }) api.portal.set_registry_record(key, fields)
def __call__(self, context): terms = [] for state in list_wf_states(context, 'task'): terms.append(SimpleVocabulary.createTerm( state, state, translate(state, domain='plone', context=context.REQUEST))) return SimpleVocabulary(terms)