diff --git a/src/collective/task/browser/add_information.py b/src/collective/task/browser/add_information.py index aea75a5..bbce6e0 100644 --- a/src/collective/task/browser/add_information.py +++ b/src/collective/task/browser/add_information.py @@ -22,26 +22,35 @@ class AddInformation(DefaultAddForm): self.status = self.formErrorsMessage return - responsible = data['responsible'][0] - group = api.group.get(responsible) - if group is not None: - # responsible is a group, create an Information by user in this group - groupname = group.getId() - users = _recursiveGetMembersFromIds(portal, [groupname]) - objs = [] - for user in users: - username = user.getId() + objs = [] + seen = {} + for responsible in data['responsible']: + group = api.group.get(responsible) + if group is not None: + # responsible is a group, create an Information by user in this group + groupname = group.getId() + users = _recursiveGetMembersFromIds(portal, [groupname]) + for user in users: + username = user.getId() + if username in seen: + continue + _data = deepcopy(data) + _data['responsible'] = [username] + obj = self.createAndAdd(_data) + if obj is not None: + objs.append(obj) + seen[username] = True + else: + # responsible is a user + if responsible in seen: + continue _data = deepcopy(data) - _data['responsible'] = [username] + _data['responsible'] = [responsible] obj = self.createAndAdd(_data) if obj is not None: objs.append(obj) - if objs: - # mark only as finished if we get the new object - self._finishedAdd = True - else: - # responsible is a user - obj = self.createAndAdd(data) - if obj is not None: - # mark only as finished if we get the new object - self._finishedAdd = True + seen[responsible] = True + + if objs: + # mark only as finished if we get the new object + self._finishedAdd = True diff --git a/src/collective/task/content/information.py b/src/collective/task/content/information.py index 0373479..37bc587 100644 --- a/src/collective/task/content/information.py +++ b/src/collective/task/content/information.py @@ -1,4 +1,5 @@ from zope.interface import implements +from zope import schema from plone.autoform import directives as form from plone.dexterity.content import Item @@ -6,11 +7,26 @@ from plone.directives.form import default_value from collective.task.interfaces import IBaseTask +from collective.z3cform.rolefield.field import LocalRolesToPrincipals +from collective.dms.basecontent.widget import AjaxChosenMultiFieldWidget + +from collective.task import _ class IInformation(IBaseTask): """Schema for information""" form.mode(title='hidden') + responsible = LocalRolesToPrincipals( + title=_(u"Addressees"), + roles_to_assign=('Editor',), + value_type=schema.Choice( + vocabulary="dms.principals" + ), + min_length=1, + required=True, + ) + form.widget(responsible=AjaxChosenMultiFieldWidget) + class Information(Item): """Information content type"""