Example #1
0
    def test_only_objects_inside_the_maindossier_are_selectable(self):
        self.login(self.regular_user)

        self.document.title = 'Test open'
        self.subdocument.title = 'Test sub'
        self.inactive_document.title = 'Test inactive'
        [obj.reindexObject() for obj in
         (self.document, self.subdocument, self.inactive_document)]

        source_binder = DossierPathSourceBinder(
            portal_type=("opengever.document.document", "ftw.mail.mail"),
            navigation_tree_query={
                'object_provides':
                ['opengever.dossier.behaviors.dossier.IDossierMarker',
                 'opengever.document.document.IDocumentSchema',
                 'opengever.task.task.ITask',
                 'ftw.mail.mail.IMail']}
        )

        source = source_binder(self.dossier)
        self.assertEqual(['Test open', 'Test sub'],
                         [term.title for term in source.search('Test')])

        source = source_binder(self.subdossier)
        self.assertEqual(['Test open', 'Test sub'],
                         [term.title for term in source.search('Test')])

        source = source_binder(self.inactive_dossier)
        self.assertEqual(['Test inactive'],
                         [term.title for term in source.search('Test')])
Example #2
0
class IResponse(Interface):

    transition = schema.Choice(
        title=_("label_transition", default="Transition"),
        description=_(u"help_transition", default=""),
        source=util.getTransitionVocab,
        required=False,
    )

    text = schema.Text(
        title=_('label_response', default="Response"),
        description=_('help_response', default=""),
        required=False,
    )

    date_of_completion = schema.Date(
        title=_(u"label_date_of_completion", default=u"Date of completion"),
        description=_(u"help_date_of_completion", default=u""),
        required=False,
    )

    relatedItems = RelationList(
        title=_(u'label_related_items', default=u'Related Items'),
        default=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document",
                             "ftw.mail.mail"), ),
        ),
        required=False,
    )
class IResponse(Schema):

    text = schema.Text(
        title=_('label_response', default="Response"),
        required=False,
        )

    relatedItems = RelationList(
        title=_(u'label_related_items', default=u'Related Items'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'ftw.mail.mail.IMail',
                        'opengever.meeting.proposal.IProposal',
                    ],
                    },
                ),
            ),
        required=False,
    )
Example #4
0
class ISelectTaskTemplateFolder(model.Schema):

    tasktemplatefolder = schema.Choice(
        title=_('label_tasktemplatefolder', default=u'Tasktemplatefolder'),
        source='opengever.tasktemplates.active_tasktemplatefolders',
        required=True
    )

    related_documents = RelationList(
        title=_(u'label_related_documents', default=u'Related documents'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides':
                    ['opengever.dossier.behaviors.dossier.IDossierMarker',
                     'opengever.document.document.IDocumentSchema',
                     'opengever.task.task.ITask',
                     'ftw.mail.mail.IMail', ],
                }),
            ),
        required=False,
    )
Example #5
0
class ITaskTransitionResponseFormSchema(Interface):
    """Schema-interface class for the task transition response form
    """
    transition = schema.Choice(
        title=_("label_transition", default="Transition"),
        source=util.getTransitionVocab,
        required=False,
    )

    text = schema.Text(
        title=_('label_response', default="Response"),
        required=False,
    )

    date_of_completion = schema.Date(
        title=_(u"label_date_of_completion", default=u"Date of completion"),
        description=_(u"help_date_of_completion", default=u""),
        required=False,
    )

    relatedItems = RelationList(
        title=_(u'label_related_items', default=u'Related Items'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document",
                             "ftw.mail.mail"), ),
        ),
        required=False,
    )

    reminder_option = schema.Choice(
        title=_("label_reminder", default="Reminder"),
        description=_("help_reminder",
                      default="Set a reminder to get notified based on "
                      "the duedate"),
        source="opengever.task.reminder.TaskReminderOptionsVocabulary",
        required=False,
        defaultFactory=get_current_user_reminder)

    reminder_option_date = schema.Date(title=_(u"lable_reminder_choose_date",
                                               default=u"Choose remind date"),
                                       required=False,
                                       defaultFactory=get_remind_on_date)

    @invariant
    def reminder_option_date_validator(data):
        if data.reminder_option == ReminderOnDate.option_type and \
                not data.reminder_option_date:
            raise Invalid(
                _(u'no_remind_date_error',
                  default=u'Please choose a remind date'))
Example #6
0
class ISubmitAdditionalDocument(model.Schema):

    proposal = RelationChoice(
        title=_(u'Proposal', default=u'Proposal'),
        source=DossierPathSourceBinder(
            filter_class=SubmittableProposalFilter,
            portal_type=("opengever.meeting.proposal"),
            navigation_tree_query={
                'object_provides': [
                    'opengever.dossier.behaviors.dossier.IDossierMarker',
                    'opengever.meeting.proposal.IProposal'
                ],
            }),
        required=True)
Example #7
0
class IProposal(model.Schema):
    """Proposal Proxy Object Schema Interface"""

    dexteritytextindexer.searchable('title')
    title = schema.TextLine(title=_(u"label_title", default=u"Title"),
                            required=True,
                            max_length=256,
                            defaultFactory=default_title)

    relatedItems = RelationList(
        title=_(u'label_attachments', default=u'Attachments'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'opengever.meeting.proposal.IProposal',
                        'ftw.mail.mail.IMail',
                    ],
                }),
        ),
        required=False,
    )

    mode(predecessor_proposal='hidden')
    predecessor_proposal = RelationChoice(
        title=u'Predecessor proposal',
        default=None,
        missing_value=None,
        required=False,
        source=SolrObjPathSourceBinder(
            portal_type='opengever.meeting.proposal'))

    omitted('date_of_submission')
    date_of_submission = schema.Date(
        description=_('label_date_of_submission',
                      default='Date of submission'),
        default=None,
        missing_value=None,
        required=False,
    )
Example #8
0
class ISubmittedProposal(IBaseProposal):

    excerpts = RelationList(
        title=_(u'label_excerpts', default=u'Excerpts'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u'Excerpt',
            source=DossierPathSourceBinder(
                portal_type=('opengever.document.document', ),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema'
                    ],
                }),
        ),
        required=False)
Example #9
0
class IProposal(IBaseProposal):
    """Proposal Proxy Object Schema Interface"""

    committee_oguid = schema.Choice(
        title=_('label_committee', default=u'Committee'),
        source='opengever.meeting.ActiveCommitteeVocabulary',
        required=True)

    relatedItems = RelationList(
        title=_(u'label_attachments', default=u'Attachments'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'review_state': {
                        'not': 'document-state-shadow'
                    },
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'opengever.meeting.proposal.IProposal',
                        'ftw.mail.mail.IMail',
                    ],
                }),
        ),
        required=False,
    )

    mode(predecessor_proposal='hidden')
    predecessor_proposal = RelationChoice(
        title=_(u'predecessor_proposal_label',
                default=u'Predecessor proposal'),
        default=None,
        missing_value=None,
        required=False,
        source=SolrObjPathSourceBinder(
            portal_type='opengever.meeting.proposal'))
Example #10
0
class IProposal(form.Schema):
    """Proposal Proxy Object Schema Interface"""

    relatedItems = RelationList(
        title=_(u'label_attachments', default=u'Attachments'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'ftw.mail.mail.IMail',
                    ],
                }),
        ),
        required=False,
    )
Example #11
0
class IManualJournalEntry(model.Schema):
    """Provide a z3c.form.Schema to enter a manual journal entry."""

    category = schema.Choice(
        title=_(u'label_category', default=u'Category'),
        vocabulary='opengever.journal.manual_entry_categories',
        required=True,
    )

    comment = schema.Text(
        title=_(u'label_comment', default=u'Comment'),
        required=False,
    )

    contacts = schema.List(
        title=_(u'label_contacts', default=u'Contacts'),
        value_type=schema.Choice(
            source=ContactsSourceBinder()),
        required=False,
    )

    related_documents = RelationList(
        title=_(u'label_related_documents', default=u'Related Documents'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides':
                    ['opengever.dossier.behaviors.dossier.IDossierMarker',
                     'opengever.document.document.IDocumentSchema',
                     'opengever.task.task.ITask',
                     'ftw.mail.mail.IMail']
                }),
            ),
        required=False,
    )
class ISubmitAdditionalDocuments(model.Schema):
    """Meeting model schema interface."""

    additionalDocuments = RelationList(
        title=_(u'label_attachments', default=u'Attachments'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'ftw.mail.mail.IMail',
                    ],
                }),
        ),
        required=True,
    )
Example #13
0
class ISubmittedProposal(IProposal):

    dexteritytextindexer.searchable('considerations')
    considerations = schema.Text(
        title=_('label_considerations', default=u"Considerations"),
        required=False,
    )

    excerpts = RelationList(
        title=_(u'label_excerpts', default=u'Excerpts'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u'Excerpt',
            source=DossierPathSourceBinder(
                portal_type=('opengever.document.document', ),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema'
                    ],
                }),
        ),
        required=False)
Example #14
0
    def test_only_objects_inside_the_maindossier_are_selectable(self):
        dossier_1 = create(Builder('dossier'))
        sub = create(Builder('dossier').within(dossier_1))
        dossier_2 = create(Builder('dossier'))
        create(Builder('document').titled(u'Test 1').within(dossier_1))
        create(Builder('document').titled(u'Test 2').within(dossier_2))

        source_binder = DossierPathSourceBinder(
            portal_type=("opengever.document.document", "ftw.mail.mail"),
            navigation_tree_query={
                'object_provides': [
                    'opengever.dossier.behaviors.dossier.IDossierMarker',
                    'opengever.document.document.IDocumentSchema',
                    'opengever.task.task.ITask', 'ftw.mail.mail.IMail'
                ]
            })

        source = source_binder(dossier_1)
        self.assertEqual(['Test 1'],
                         [term.title for term in source.search('Test')])

        source = source_binder(sub)
        self.assertEqual(['Test 1'],
                         [term.title for term in source.search('Test')])
Example #15
0
class ISendDocumentSchema(Interface):
    """The Send Document Form Schema."""

    intern_receiver = schema.Tuple(
        title=_('intern_receiver', default="Intern receiver"),
        description=_('help_intern_receiver',
                      default="Live Search: search for users and contacts"),

        value_type=schema.Choice(
            title=_(u"mails"),
            source=AllEmailContactsAndUsersSourceBinder()),
        required=False,
        missing_value=(),  # important!
        default=(),
        )

    extern_receiver = schema.List(
        title=_('extern_receiver', default="Extern receiver"),
        description=_('help_extern_receiver',
                      default="email addresses of the receivers. "
                      "Enter manually the addresses, one per each line."),
        value_type=schema.TextLine(title=_('receiver'), ),
        required=False,
        )

    subject = schema.TextLine(
        title=_(u'label_subject', default=u'Subject'),
        required=True,
        )

    message = schema.Text(
        title=_(u'label_message', default=u'Message'),
        required=True,
        )

    documents = RelationList(
        title=_(u'label_documents', default=u'Attachments'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Documents",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides':
                        ['opengever.dossier.behaviors.dossier.IDossierMarker',
                         'opengever.task.task.ITask',
                         'opengever.document.document.IDocumentSchema',
                         'ftw.mail.mail.IMail',
                         ]}),
            ),
        required=False,
        )

    documents_as_links = schema.Bool(
        title=_(u'label_documents_as_link',
                default=u'Send documents only als links'),
        required=True,
        )

    file_copy_in_dossier = schema.Bool(
        title=_(u'label_file_copy_in_dossier',
                default=u'File a copy of the sent mail in dossier'),
        required=True,
        default=True,
        )

    @invariant
    def validateHasEmail(self):
        """Check if minium one e-mail-address is given."""
        if len(self.intern_receiver) == 0 and not self.extern_receiver:
            raise NoMail(_(u'You have to select a intern \
                            or enter a extern mail-addres'))
Example #16
0
class IProposal(model.Schema):
    """Proposal Proxy Object Schema Interface"""

    dexteritytextindexer.searchable('title')
    title = schema.TextLine(title=_(u"label_title", default=u"Title"),
                            required=True,
                            max_length=256,
                            defaultFactory=default_title)

    dexteritytextindexer.searchable('legal_basis')
    legal_basis = schema.Text(
        title=_('label_legal_basis', default=u"Legal basis"),
        required=False,
    )

    dexteritytextindexer.searchable('initial_position')
    initial_position = schema.Text(
        title=_('label_initial_position', default=u"Initial position"),
        required=False,
    )

    dexteritytextindexer.searchable('proposed_action')
    proposed_action = schema.Text(
        title=_('label_proposed_action', default=u"Proposed action"),
        required=False,
    )

    dexteritytextindexer.searchable('decision_draft')
    decision_draft = schema.Text(
        title=_('label_decision_draft', default=u"Decision draft"),
        required=False,
    )

    dexteritytextindexer.searchable('publish_in')
    publish_in = schema.Text(
        title=_('label_publish_in', default=u"Publish in"),
        required=False,
    )

    dexteritytextindexer.searchable('disclose_to')
    disclose_to = schema.Text(
        title=_('label_disclose_to', default=u"Disclose to"),
        required=False,
    )

    dexteritytextindexer.searchable('copy_for_attention')
    copy_for_attention = schema.Text(
        title=_('label_copy_for_attention', default=u"Copy for attention"),
        required=False,
    )

    relatedItems = RelationList(
        title=_(u'label_attachments', default=u'Attachments'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'ftw.mail.mail.IMail',
                    ],
                }),
        ),
        required=False,
    )

    mode(predecessor_proposal='hidden')
    predecessor_proposal = RelationChoice(
        title=u'Predecessor proposal',
        default=None,
        missing_value=None,
        required=False,
        source=ObjPathSourceBinder(portal_type='opengever.meeting.proposal'))

    omitted('date_of_submission')
    date_of_submission = schema.Date(
        description=_('label_date_of_submission',
                      default='Date of submission'),
        default=None,
        missing_value=None,
        required=False,
    )
Example #17
0
class ITask(model.Schema):
    """Define the task schema."""

    model.fieldset(
        u'common',
        label=_(u'fieldset_common', default=u'Common'),
        fields=[
            u'title',
            u'issuer',
            u'task_type',
            u'responsible_client',
            u'responsible',
            u'deadline',
            u'text',
            u'relatedItems',
        ],
    )

    model.fieldset(
        u'additional',
        label=_(u'fieldset_additional', u'Additional'),
        fields=[
            u'expectedStartOfWork',
            u'expectedDuration',
            u'expectedCost',
            u'effectiveDuration',
            u'effectiveCost',
            u'date_of_completion',
        ],
    )

    dexteritytextindexer.searchable('title')

    title = schema.TextLine(
        title=_(u"label_title", default=u"Title"),
        description=_('help_title', default=u""),
        required=True,
        max_length=256,
    )

    form.widget('issuer', KeywordFieldWidget, async=True)

    issuer = schema.Choice(
        title=_(u"label_issuer", default=u"Issuer"),
        source=UsersContactsInboxesSourceBinder(),
        required=True,
    )

    form.widget(task_type='z3c.form.browser.radio.RadioFieldWidget')

    task_type = schema.Choice(
        title=_(u'label_task_type', default=u'Task Type'),
        description=_('help_task_type', default=u''),
        required=True,
        readonly=False,
        default=None,
        missing_value=None,
        source=util.getTaskTypeVocabulary,
    )

    form.mode(responsible_client='hidden')

    responsible_client = schema.Choice(
        title=_(
            u'label_resonsible_client',
            default=u'Responsible Client',
        ),
        description=_(
            u'help_responsible_client',
            default=u'',
        ),
        vocabulary='opengever.ogds.base.OrgUnitsVocabularyFactory',
        required=True,
    )

    form.widget('responsible', KeywordFieldWidget, async=True)

    responsible = schema.Choice(
        title=_(u"label_responsible", default=u"Responsible"),
        description=_(u"help_responsible", default=""),
        source=AllUsersInboxesAndTeamsSourceBinder(include_teams=True),
        required=True,
    )

    form.widget(deadline=DatePickerFieldWidget)

    deadline = schema.Date(
        title=_(u"label_deadline", default=u"Deadline"),
        description=_(u"help_deadline", default=u""),
        required=True,
        defaultFactory=deadline_default,
    )

    form.widget(date_of_completion=DatePickerFieldWidget)
    form.mode(IAddForm, date_of_completion=HIDDEN_MODE)

    date_of_completion = schema.Date(
        title=_(u"label_date_of_completion", default=u"Date of completion"),
        description=_(u"help_date_of_completion", default=u""),
        required=False,
    )

    dexteritytextindexer.searchable('text')
    model.primary('text')

    text = schema.Text(
        title=_(u"label_text", default=u"Text"),
        description=_(u"help_text", default=u""),
        required=False,
    )

    relatedItems = RelationList(
        title=_(u'label_related_items', default=u'Related Items'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'ftw.mail.mail.IMail',
                        'opengever.meeting.proposal.IProposal',
                    ],
                },
            ),
        ),
        required=False,
    )

    form.widget(expectedStartOfWork=DatePickerFieldWidget)

    expectedStartOfWork = schema.Date(
        title=_(u"label_expectedStartOfWork", default="Start with work"),
        required=False,
    )

    expectedDuration = schema.Float(
        title=_(
            u"label_expectedDuration",
            default="Expected duration",
        ),
        description=_(u"help_expectedDuration", default="Duration in h"),
        required=False,
    )

    expectedCost = schema.Float(
        title=_(u"label_expectedCost", default="expected cost"),
        description=_(u"help_expectedCost", default="Cost in CHF"),
        required=False,
    )

    effectiveDuration = schema.Float(
        title=_(u"label_effectiveDuration", default="effective duration"),
        description=_(u"help_effectiveDuration", default="Duration in h"),
        required=False,
    )

    effectiveCost = schema.Float(
        title=_(u"label_effectiveCost", default="effective cost"),
        description=_(u"help_effectiveCost", default="Cost in CHF"),
        required=False,
    )

    form.omitted('predecessor')
    predecessor = schema.TextLine(title=_(u'label_predecessor',
                                          default=u'Predecessor'),
                                  required=False)
Example #18
0
class ITask(form.Schema):

    form.fieldset(
        u'common',
        label=_(u'fieldset_common', default=u'Common'),
        fields=[
            u'title',
            u'issuer',
            u'task_type',
            u'responsible_client',
            u'responsible',
            u'deadline',
            u'text',
            u'relatedItems',
        ],
    )

    form.fieldset(
        u'additional',
        label=_(u'fieldset_additional', u'Additional'),
        fields=[
            u'expectedStartOfWork',
            u'expectedDuration',
            u'expectedCost',
            u'effectiveDuration',
            u'effectiveCost',
            u'date_of_completion',
        ],
    )

    dexteritytextindexer.searchable('title')
    title = schema.TextLine(
        title=_(u"label_title", default=u"Title"),
        description=_('help_title', default=u""),
        required=True,
    )

    form.widget(issuer=AutocompleteFieldWidget)
    issuer = schema.Choice(
        title=_(u"label_issuer", default=u"Issuer"),
        description=_('help_issuer', default=u""),
        vocabulary=u'opengever.ogds.base.ContactsAndUsersVocabulary',
        required=True,
    )

    form.widget(task_type='z3c.form.browser.radio.RadioFieldWidget')
    task_type = schema.Choice(
        title=_(u'label_task_type', default=u'Task Type'),
        description=_('help_task_type', default=u''),
        required=True,
        readonly=False,
        default=None,
        missing_value=None,
        source=util.getTaskTypeVocabulary,
    )

    responsible_client = schema.Choice(
        title=_(u'label_resonsible_client', default=u'Responsible Client'),
        description=_(u'help_responsible_client', default=u''),
        vocabulary='opengever.ogds.base.ClientsVocabulary',
        required=True)

    form.widget(responsible=AutocompleteFieldWidget)
    responsible = schema.Choice(
        title=_(u"label_responsible", default=u"Responsible"),
        description=_(u"help_responsible", default=""),
        vocabulary=u'opengever.ogds.base.UsersAndInboxesVocabulary',
        required=True,
    )

    form.widget(deadline=DatePickerFieldWidget)
    deadline = schema.Date(
        title=_(u"label_deadline", default=u"Deadline"),
        description=_(u"help_deadline", default=u""),
        required=True,
    )

    form.widget(deadline=DatePickerFieldWidget)
    date_of_completion = schema.Date(
        title=_(u"label_date_of_completion", default=u"Date of completion"),
        description=_(u"help_date_of_completion", default=u""),
        required=False,
    )

    dexteritytextindexer.searchable('text')
    form.primary('text')
    text = schema.Text(
        title=_(u"label_text", default=u"Text"),
        description=_(u"help_text", default=u""),
        required=False,
    )

    relatedItems = RelationList(
        title=_(u'label_related_items', default=u'Related Items'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'ftw.mail.mail.IMail',
                    ],
                }),
        ),
        required=False,
    )

    form.widget(deadline=DatePickerFieldWidget)
    expectedStartOfWork = schema.Date(
        title=_(u"label_expectedStartOfWork", default="Start with work"),
        description=_(u"help_expectedStartOfWork", default=""),
        required=False,
    )

    expectedDuration = schema.Float(
        title=_(
            u"label_expectedDuration",
            default="Expected duration",
        ),
        description=_(u"help_expectedDuration", default="Duration in h"),
        required=False,
    )

    expectedCost = schema.Float(
        title=_(u"label_expectedCost", default="expected cost"),
        description=_(u"help_expectedCost", default="Cost in CHF"),
        required=False,
    )

    effectiveDuration = schema.Float(
        title=_(u"label_effectiveDuration", default="effective duration"),
        description=_(u"help_effectiveDuration", default="Duration in h"),
        required=False,
    )

    effectiveCost = schema.Float(
        title=_(u"label_effectiveCost", default="effective cost"),
        description=_(u"help_effectiveCost", default="Cost in CHF"),
        required=False,
    )

    form.omitted('predecessor')
    predecessor = schema.TextLine(title=_(u'label_predecessor',
                                          default=u'Predecessor'),
                                  description=_(u'help_predecessor',
                                                default=u''),
                                  required=False)
Example #19
0
class ITask(model.Schema):
    """Define the task schema."""

    model.fieldset(
        u'common',
        label=_(u'fieldset_common', default=u'Common'),
        fields=[
            u'title',
            u'issuer',
            u'task_type',
            u'responsible_client',
            u'responsible',
            u'is_private',
            u'revoke_permissions',
            u'deadline',
            u'text',
            u'relatedItems',
            ],
        )

    model.fieldset(
        u'additional',
        label=_(u'fieldset_additional', u'Additional'),
        fields=[
            u'expectedStartOfWork',
            u'expectedDuration',
            u'expectedCost',
            u'effectiveDuration',
            u'effectiveCost',
            u'date_of_completion',
            ],
        )

    dexteritytextindexer.searchable('title')

    title = schema.TextLine(
        title=_(u"label_title", default=u"Title"),
        description=_('help_title', default=u""),
        required=True,
        max_length=256,
        )

    form.widget('issuer', KeywordFieldWidget, async=True)

    issuer = schema.Choice(
        title=_(u"label_issuer", default=u"Issuer"),
        source=UsersContactsInboxesSourceBinder(),
        required=True,
        )

    form.widget(task_type='z3c.form.browser.radio.RadioFieldWidget')

    task_type = schema.Choice(
        title=_(u'label_task_type', default=u'Task Type'),
        description=_('help_task_type', default=u''),
        required=True,
        readonly=False,
        default=None,
        missing_value=None,
        source=util.getTaskTypeVocabulary,
        )

    form.mode(responsible_client='hidden')

    responsible_client = schema.Choice(
        title=_(
            u'label_resonsible_client',
            default=u'Responsible Client',
            ),
        description=_(
            u'help_responsible_client',
            default=u'',
            ),
        vocabulary='opengever.ogds.base.OrgUnitsVocabularyFactory',
        required=True,
        )

    form.widget('responsible', KeywordFieldWidget, async=True)

    responsible = schema.Choice(
        title=_(u"label_responsible", default=u"Responsible"),
        description=_(u"help_responsible", default=""),
        source=AllUsersInboxesAndTeamsSourceBinder(include_teams=True),
        required=True,
        )

    form.widget(deadline=DatePickerFieldWidget)

    is_private = schema.Bool(
        title=_(u"label_is_private", default=u"Private task"),
        description=_(u"help_is_private",
                      default="Deactivates the inbox-group permission."),
        default=False,
        )

    form.mode(IEditForm, is_private=HIDDEN_MODE)

    revoke_permissions = schema.Bool(
        title=_(u"label_revoke_permissions",
                default=u"Revoke permissions."),
        description=_(u"help_revoke_permissions",
                      default="Revoke permissions when closing or reassigning task."),
        default=True,
        required=False,
        )

    deadline = schema.Date(
        title=_(u"label_deadline", default=u"Deadline"),
        description=_(u"help_deadline", default=u""),
        required=True,
        defaultFactory=deadline_default,
        )

    form.widget(date_of_completion=DatePickerFieldWidget)
    form.mode(IAddForm, date_of_completion=HIDDEN_MODE)

    date_of_completion = schema.Date(
        title=_(u"label_date_of_completion", default=u"Date of completion"),
        description=_(u"help_date_of_completion", default=u""),
        required=False,
        )

    dexteritytextindexer.searchable('text')
    text = schema.Text(
        title=_(u"label_text", default=u"Text"),
        description=_(u"help_text", default=u""),
        required=False,
        )

    relatedItems = RelationList(
        title=_(u'label_related_items', default=u'Related Items'),
        default=[],
        missing_value=[],
        value_type=RelationChoice(
            title=u"Related",
            source=DossierPathSourceBinder(
                portal_type=("opengever.document.document", "ftw.mail.mail"),
                navigation_tree_query={
                    'review_state': {'not': 'document-state-shadow'},
                    'object_provides': [
                        'opengever.dossier.behaviors.dossier.IDossierMarker',
                        'opengever.document.document.IDocumentSchema',
                        'opengever.task.task.ITask',
                        'ftw.mail.mail.IMail',
                        'opengever.meeting.proposal.IProposal',
                        ],
                    },
                ),
            ),
        required=False,
        )

    form.widget(expectedStartOfWork=DatePickerFieldWidget)

    expectedStartOfWork = schema.Date(
        title=_(u"label_expectedStartOfWork", default="Start with work"),
        required=False,
        )

    expectedDuration = schema.Float(
        title=_(u"label_expectedDuration", default="Expected duration", ),
        description=_(u"help_expectedDuration", default="Duration in h"),
        required=False,
        )

    expectedCost = schema.Float(
        title=_(u"label_expectedCost", default="expected cost"),
        description=_(u"help_expectedCost", default="Cost in CHF"),
        required=False,
        )

    effectiveDuration = schema.Float(
        title=_(u"label_effectiveDuration", default="effective duration"),
        description=_(u"help_effectiveDuration", default="Duration in h"),
        required=False,
        )

    effectiveCost = schema.Float(
        title=_(u"label_effectiveCost", default="effective cost"),
        description=_(u"help_effectiveCost", default="Cost in CHF"),
        required=False,
        )

    form.omitted('predecessor')
    predecessor = schema.TextLine(
        title=_(u'label_predecessor', default=u'Predecessor'),
        required=False)

    @invariant
    def private_task_is_not_changed_when_disabled(data):
        if not is_private_task_feature_enabled() and data.is_private:

            # Because the z3c.form.validator.Data object has implemented a
            # getattr fallback, which fetches the value from the context, we
            # need to check if the is_private value was part of the input-data.
            if 'is_private' in data._Data_data___:
                raise Invalid(_(u'error_private_task_feature_is_disabled',
                                default=u'The private task feature is disabled'))

    @invariant
    def revoke_permissions_is_not_changed_when_disabled(data):
        if not is_optional_task_permissions_revoking_enabled():
            # Because the z3c.form.validator.Data object has implemented a
            # getattr fallback, which fetches the value from the context, we
            # need to check if the revoke_permissions value was part of the input-data.
            if 'revoke_permissions' in data._Data_data___ and not data.revoke_permissions:
                raise Invalid(_(u'error_revoke_permissions_feature_is_disabled',
                                default=u'The revoke permissions feature is disabled'))