Esempio n. 1
0
    def _validate(self, label, mailaddress):
        """Validates the given attributes.

        Returns None if the validation passed.
        Returns the errormessage if the validation failed.
        """
        plone_utils = api.portal.get_tool('plone_utils')

        if not label and not mailaddress:
            return _(
                u'error_no_label_and_email',
                u'Please specify a label and an email address.'
                )

        elif not label:
            return _(
                u'error_no_label', u'Please specify a label for your email address')

        elif not mailaddress:
            return _(
                u'error_no_email', u'Please specify an email address')

        elif not plone_utils.validateSingleEmailAddress(mailaddress):
            return _(
                u'error_invalid_email', u'Please specify a valid email address')
Esempio n. 2
0
class IPersonModel(model.Schema):
    """Person model schema interface."""

    salutation = schema.TextLine(
        title=_(u"label_salutation", default=u"Salutation"),
        max_length=CONTENT_TITLE_LENGTH,
        required=False)

    academic_title = schema.TextLine(
        title=_(u"label_academic_title", default=u"Academic title"),
        max_length=CONTENT_TITLE_LENGTH,
        required=False)

    firstname = schema.TextLine(
        title=_(u"label_firstname", default=u"Firstname"),
        max_length=FIRSTNAME_LENGTH,
        required=True)

    lastname = schema.TextLine(
        title=_(u"label_lastname", default=u"Lastname"),
        max_length=LASTNAME_LENGTH,
        required=True)

    description = schema.Text(
        title=_(u'label_description', default=u'Description'),
        required=False,
        missing_value=u'',
        default=u'',
        )
Esempio n. 3
0
class ParticipationRemoveForm(z3c.form.form.Form):
    def __init__(self, context, request):
        super(ParticipationRemoveForm, self).__init__(context, request)
        self.model = context.model

    @property
    def label(self):
        return _(u'label_remove_participation',
                 default=u'Remove ${title}',
                 mapping={'title': self.model.get_title()})

    @button.buttonAndHandler(_(u'Remove'), name='remove')
    def handleRemove(self, action):
        data, errors = self.extractData()
        if errors:
            return

        self.model.delete()

        api.portal.show_message(
            _(u'info_participation_removed', u'Participation removed'),
            api.portal.get().REQUEST)

        return self.request.RESPONSE.redirect(self.nextURL())

    @button.buttonAndHandler(_(u'label_cancel', default=u'Cancel'),
                             name='cancel')
    def cancel(self, action):
        return self.request.RESPONSE.redirect(self.nextURL())

    def nextURL(self):
        """Returns the url to the dossiers participation tab."""

        return '{}#participations'.format(
            aq_parent(self.context).absolute_url())
Esempio n. 4
0
    def get_tabs(self):
        if is_contact_feature_enabled():
            tabs = [
                {'id': 'persons',
                 'title': _(u'label_persons', default=u'Persons'),
                 'icon': None,
                 'url': '#',
                 'class': None},
                {'id': 'organizations',
                 'title': _(u'label_organizations', default=u'Organizations'),
                 'icon': None,
                 'url': '#',
                 'class': None}]

        else:
            tabs = [
                {'id': 'local',
                 'title': _(u'label_local', default=u'Local'),
                 'icon': None,
                 'url': '#',
                 'class': None},
            ]

        tabs += [
            {'id': 'users',
             'title': _(u'label_users', default=u'Users'),
             'icon': None,
             'url': '#',
             'class': None}]

        return tabs
Esempio n. 5
0
    def _validate(self, label, mailaddress):
        """Validates the given attributes.

        Returns None if the validation passed.
        Returns the errormessage if the validation failed.
        """
        plone_utils = api.portal.get_tool('plone_utils')

        if not label and not mailaddress:
            return _(
                u'error_no_label_and_email',
                u'Please specify a label and an email address.'
                )

        elif not label:
            return _(
                u'error_no_label', u'Please specify a label for your email address')

        elif not mailaddress:
            return _(
                u'error_no_email', u'Please specify an email address')

        elif not plone_utils.validateSingleEmailAddress(mailaddress):
            return _(
                u'error_invalid_email', u'Please specify a valid email address')
Esempio n. 6
0
 def phonenumbers(self):
     result = []
     for index, data in enumerate([
             (_('label_office', default='Office'), self.ogds_user.phone_office),
             (_('label_fax', default="Fax"), self.ogds_user.phone_fax),
             (_('label_mobile', default="Mobile"), self.ogds_user.phone_mobile)],
             1):
         label, phone_number = data
         adapter = PhoneNumberAdapter(self.id, index, phone_number, label)
         if adapter.has_data:
             result.append(adapter)
     return result
Esempio n. 7
0
class Contacts(OpengeverCatalogListingTab):
    """ Listing of all Task of the authenticated Member """

    grok.name('tabbedview_view-local')
    grok.context(IDexterityContainer)

    types = [
        'opengever.contact.contact',
    ]

    columns = (
        {
            'column': 'lastname',
            'column_title': _(u'label_lastname', default=u'Lastname'),
            'transform': linked
        },
        {
            'column': 'firstname',
            'column_title': _(u'label_firstname', default=u'Firstname'),
            'transform': linked_no_icon
        },
        {
            'column': 'email',
            'column_title': _(u'label_email', default=u'email'),
            'transform': email_helper
        },
        {
            'column': 'phone_office',
            'column_title': _(u'label_phone_office', default=u'Phone office')
        },
    )

    sort_on = 'lastname'
    sort_order = ''

    show_selects = False
    enabled_actions = []
    major_actions = []
    selection = ViewPageTemplateFile("no_selection_amount.pt")

    def update_config(self):
        OpengeverCatalogListingTab.update_config(self)

        # configuration for the extjs grid
        extjs_conf = {'auto_expand_column': 'lastname'}
        if isinstance(self.table_options, dict):
            self.table_options.update(extjs_conf)
        elif self.table_options is None:
            self.table_options = extjs_conf.copy()
Esempio n. 8
0
 def phonenumbers(self):
     result = []
     for index, data in enumerate(
         [
             (_("label_office", default="Office"), self.ogds_user.phone_office),
             (_("label_fax", default="Fax"), self.ogds_user.phone_fax),
             (_("label_mobile", default="Mobile"), self.ogds_user.phone_mobile),
         ],
         1,
     ):
         label, phone_number = data
         adapter = PhoneNumberAdapter(self.id, index, phone_number, label)
         if adapter.has_data:
             result.append(adapter)
     return result
Esempio n. 9
0
    def columns(self):
        return (
            {'column': 'name',
             'column_title': _(u'column_name', default=u'Name'),
             'transform': linked_sql_object},

            {'column': 'is_active',
             'column_title': _(u'column_active', default=u'Active'),
             'transform': boolean_helper},

            {'column': 'former_contact_id',
             'column_title': _(u'column_former_contact_id',
                               default=u'Former contact id')},

        )
Esempio n. 10
0
class ParticipationAddForm(ModelAddForm):
    label = _(u'label_add_participation', default=u'Add Participation')
    fields = z3c.form.field.Fields(IParticipation)

    fields['contact'].widgetFactory = ParameterizedWidget(KeywordWidget,
                                                          async=True)
    fields['roles'].widgetFactory = CheckBoxFieldWidget

    @property
    def model_class(self):
        return self._participant.participation_class

    def validate(self, data):
        self._participant = data.get('contact')
        query = self.model_class.query.by_participant(
            self._participant).by_dossier(self.context)

        if query.count():
            raise ActionExecutionError(
                Invalid(
                    _(
                        u'msg_participation_already_exists',
                        u"There already exists a participation for this contact."
                    )))

    def create(self, data):
        self.validate(data)
        return self.model_class.create(participant=self._participant,
                                       dossier=self.context,
                                       roles=data.pop('roles'))

    def nextURL(self):
        return '{}#participations'.format(self.context.absolute_url())
Esempio n. 11
0
class AddPerson(ModelAddForm):
    schema = IPersonModel
    model_class = Person

    label = _('Add Person', default=u'Add Person')

    def nextURL(self):
        return self._created_object.get_url()
Esempio n. 12
0
 def title(self):
     title = '%s %s' % (
         self.lastname,
         self.firstname,
     )
     if len(title.strip()) == 0:
         title = _(u'Contact')
     return title
Esempio n. 13
0
 def title(self):
     title = '%s %s' % (
         self.lastname,
         self.firstname,
         )
     if len(title.strip()) == 0:
         title = _(u'Contact')
     return title
Esempio n. 14
0
class Contacts(BaseCatalogListingTab):

    types = [
        'opengever.contact.contact',
    ]

    columns = (
        {
            'column': 'lastname',
            'column_title': _(u'label_lastname', default=u'Lastname'),
            'transform': linked
        },
        {
            'column': 'firstname',
            'column_title': _(u'label_firstname', default=u'Firstname'),
            'transform': linked_no_icon
        },
        {
            'column': 'email',
            'column_title': _(u'label_email', default=u'email'),
            'transform': email_helper
        },
        {
            'column': 'phone_office',
            'column_title': _(u'label_phone_office', default=u'Phone office')
        },
    )

    sort_on = 'lastname'
    sort_order = ''

    show_selects = False
    enabled_actions = []
    major_actions = []
    selection = ViewPageTemplateFile("templates/no_selection_amount.pt")

    def update_config(self):
        super(BaseCatalogListingTab, self).update_config()

        # configuration for the extjs grid
        extjs_conf = {'auto_expand_column': 'lastname'}
        if isinstance(self.table_options, dict):
            self.table_options.update(extjs_conf)
        elif self.table_options is None:
            self.table_options = extjs_conf.copy()
Esempio n. 15
0
    def columns(self):
        return (
            {'column': 'salutation',
             'column_title': _(u'column_salutation', default=u'Salutation')},

            {'column': 'academic_title',
             'column_title': _(u'column_academic_title',
                               default=u'Academic title')},

            {'column': 'firstname',
             'column_title': _(u'column_firstname', default=u'Firstname'),
             'transform': linked_sql_object},

            {'column': 'lastname',
             'column_title': _(u'column_lastname', default=u'Lastname'),
             'transform': linked_sql_object},

            {'column': 'is_active',
             'column_title': _(u'column_active', default=u'Active'),
             'transform': boolean_helper},

            {'column': 'organizations',
             'column_title': _(u'column_organizations',
                               default=u'Organizations'),
             'transform': self.organizations_links},

            {'column': 'former_contact_id',
             'column_title': _(u'column_former_contact_id',
                               default=u'Former contact id')},
        )
    def columns(self):
        return (
            {'column': 'salutation',
             'column_title': _(u'column_salutation', default=u'Salutation')},

            {'column': 'academic_title',
             'column_title': _(u'column_academic_title',
                               default=u'Academic title')},

            {'column': 'firstname',
             'column_title': _(u'column_firstname', default=u'Firstname'),
             'transform': linked_sql_object},

            {'column': 'lastname',
             'column_title': _(u'column_lastname', default=u'Lastname'),
             'transform': linked_sql_object},

            {'column': 'is_active',
             'column_title': _(u'column_active', default=u'Active'),
             'transform': boolean_helper},

            {'column': 'organizations',
             'column_title': _(u'column_organizations',
                               default=u'Organizations'),
             'transform': self.organizations_links},

            {'column': 'former_contact_id',
             'column_title': _(u'column_former_contact_id',
                               default=u'Former contact id')},
        )
Esempio n. 17
0
    def get_items(self):
        return [
            {'class': 'sequenceNumber',
             'label': _('label_sequence_number', default='Sequence Number'),
             'content': self.context.model.contact_id,
             'replace': False},

            {'class': 'active',
             'label': _('label_active', default='Active'),
             'content': self.active_label(),
             'replace': False},

            {'class': 'former_contact_id',
             'label': _('label_former_contact_id',
                        default='Former contact ID'),
             'content': self.context.model.former_contact_id,
             'replace': False}
        ]
Esempio n. 18
0
    def validate(self, data):
        self._participant = data.get('contact')
        query = self.model_class.query.by_participant(
            self._participant).by_dossier(self.context)

        if query.count():
            raise ActionExecutionError(Invalid(
                _(u'msg_participation_already_exists',
                  u"There already exists a participation for this contact.")))
Esempio n. 19
0
    def validate(self, data):
        self._participant = data.get('contact')
        query = self.model_class.query.by_participant(
            self._participant).by_dossier(self.context)

        if query.count():
            raise ActionExecutionError(Invalid(
                _(u'msg_participation_already_exists',
                  u"There already exists a participation for this contact.")))
Esempio n. 20
0
 def columns(self):
     return (
         {
             'column': 'name',
             'column_title': _(u'column_name', default=u'Name'),
             'transform': linked_sql_object
         },
         {
             'column': 'is_active',
             'column_title': _(u'column_active', default=u'Active'),
             'transform': boolean_helper
         },
         {
             'column':
             'former_contact_id',
             'column_title':
             _(u'column_former_contact_id', default=u'Former contact id')
         },
     )
Esempio n. 21
0
class IParticipation(model.Schema):
    """ Participation Form schema
    """

    contact = schema.Choice(
        title=_(u'label_contact', default=u'Contact'),
        source=ContactsSourceBinder(),
        required=True,
    )

    roles = schema.List(
        title=_(u'label_roles', default=u'Roles'),
        value_type=schema.Choice(source=wrap_vocabulary(
            'opengever.dossier.participation_roles',
            visible_terms_from_registry='opengever.dossier'
            '.interfaces.IDossierParticipants.roles'), ),
        required=True,
        missing_value=[],
    )
Esempio n. 22
0
    def handleRemove(self, action):
        data, errors = self.extractData()
        if errors:
            return

        self.model.delete()

        api.portal.show_message(
            _(u'info_participation_removed', u'Participation removed'),
            api.portal.get().REQUEST)

        return self.request.RESPONSE.redirect(self.nextURL())
Esempio n. 23
0
    def handleRemove(self, action):
        data, errors = self.extractData()
        if errors:
            return

        self.model.delete()

        api.portal.show_message(
            _(u'info_participation_removed', u'Participation removed'),
            api.portal.get().REQUEST)

        return self.request.RESPONSE.redirect(self.nextURL())
Esempio n. 24
0
 def get_items(self):
     return [{
         'class': 'sequenceNumber',
         'label': _('label_sequence_number', default='Sequence Number'),
         'content': self.context.model.contact_id,
         'replace': False
     }, {
         'class': 'active',
         'label': _('label_active', default='Active'),
         'content': self.active_label(),
         'replace': False
     }, {
         'class':
         'former_contact_id',
         'label':
         _('label_former_contact_id', default='Former contact ID'),
         'content':
         self.context.model.former_contact_id,
         'replace':
         False
     }]
Esempio n. 25
0
    def update(self):
        label = to_safe_html(self.request.get('label', self.mailaddress.label))
        mailaddress = to_safe_html(self.request.get('mailaddress', self.mailaddress.address))

        error_msg = self._validate(label, mailaddress)

        if error_msg:
            return JSONResponse(self.request).error(error_msg).dump()

        self.mailaddress.update(label=label, address=mailaddress)

        return JSONResponse(self.request).info(
            _('email_address_updated',
              default=u"Email address updated.")).proceed().dump()
Esempio n. 26
0
    def update(self):
        label = to_safe_html(self.request.get('label', self.mailaddress.label))
        mailaddress = to_safe_html(self.request.get('mailaddress', self.mailaddress.address))

        error_msg = self._validate(label, mailaddress)

        if error_msg:
            return JSONResponse(self.request).error(error_msg).dump()

        self.mailaddress.update(label=label, address=mailaddress)

        return JSONResponse(self.request).info(
            _('email_address_updated',
              default=u"Email address updated.")).proceed().dump()
Esempio n. 27
0
    def add(self):
        label = to_safe_html(self.request.get('label'))
        mailaddress = to_safe_html(self.request.get('mailaddress'))

        error_msg = self._validate(label, mailaddress)

        if error_msg:
            return JSONResponse(self.request).error(error_msg).dump()

        mail_object = MailAddress(label=label,
                                  address=mailaddress,
                                  contact_id=self.context.model.person_id)

        self.session.add(mail_object)

        msg = _(u'info_mailaddress_created',
                u'The email address was created successfully')

        return JSONResponse(self.request).info(msg).proceed().dump()
Esempio n. 28
0
    def add(self):
        label = to_safe_html(self.request.get('label'))
        mailaddress = to_safe_html(self.request.get('mailaddress'))

        error_msg = self._validate(label, mailaddress)

        if error_msg:
            return JSONResponse(self.request).error(error_msg).dump()

        mail_object = MailAddress(
            label=label,
            address=mailaddress,
            contact_id=self.context.model.person_id)

        self.session.add(mail_object)

        msg = _(
            u'info_mailaddress_created',
            u'The email address was created successfully')

        return JSONResponse(self.request).info(msg).proceed().dump()
Esempio n. 29
0
class TeamsListing(BaseListingTab):
    """Tab registered on contacts folder listing all teams.
    """

    implements(ITeamListingTableSourceConfig)

    sort_on = 'title'
    sort_order = ''

    # the model attributes is used for a dynamic textfiltering functionality
    model = Team
    show_selects = False

    filterlist_name = 'team_state_filter'
    filterlist_available = True
    filterlist = FilterList(
        Filter('filter_all', _('label_tabbedview_filter_all')),
        ActiveOnlyFilter('filter_active', _('Active'), default=True))

    columns = ({
        'column': 'title',
        'column_title': _(u'label_title', default=u'Title'),
        'transform': linked_title_helper
    }, {
        'column': 'groupid',
        'column_title': _(u'label_group', default=u'Group'),
        'transform': lambda item, value: item.group.label()
    }, {
        'column': 'org_unit_id',
        'column_title': _(u'label_org_unit', default=u'Org Unit'),
        'transform': lambda item, value: item.org_unit.title
    }, {
        'column': 'active',
        'column_title': _(u'label_active', default=u'Active'),
        'transform': boolean_helper
    })

    def get_base_query(self):
        """Returns the base search query (sqlalchemy)
        """
        session = create_session()
        return session.query(Team)
Esempio n. 30
0
    def delete(self):
        self.mailaddress.delete()

        return JSONResponse(self.request).info(
            _(u'mail_address_deleted',
              default=u'Mailaddress successfully deleted')).dump()
Esempio n. 31
0
 def get_title(self):
     return _(u'label_participation_of',
              default=u'Participation of ${contact_title}',
              mapping={'contact_title': self.participant.get_title()})
Esempio n. 32
0
 def get_title(self):
     return _(u'label_participation_of',
              default=u'Participation of ${contact_title}',
              mapping={'contact_title': self.participant.get_title()})
Esempio n. 33
0
 def label(self):
     return _(u'label_edit_participation',
              default=u'Edit ${title}',
              mapping={'title': self.model.get_title()})
Esempio n. 34
0
 def label(self):
     return _(u'label_remove_participation',
              default=u'Remove ${title}',
              mapping={'title': self.model.get_title()})
Esempio n. 35
0
 def label(self):
     return _(u'label_remove_participation',
              default=u'Remove ${title}',
              mapping={'title': self.model.get_title()})
Esempio n. 36
0
class IContact(model.Schema):
    """ A contact
    """
    model.fieldset(u'personal',
                   label=_(u'personal', default=u'Personal Stuff'),
                   fields=[
                       u'salutation',
                       u'academic_title',
                       u'firstname',
                       u'lastname',
                       u'description',
                       u'picture',
                       u'company',
                       u'department',
                       u'function',
                   ])

    model.fieldset(u'internet',
                   label=_(u'internet', default=u'Internet'),
                   fields=[
                       u'email',
                       u'email2',
                       u'url',
                   ])

    model.fieldset(u'telefon',
                   label=_(u'telefon', default=u"Telefon"),
                   fields=[
                       u'phone_office',
                       u'phone_fax',
                       u'phone_mobile',
                       u'phone_home',
                   ])

    model.fieldset(u'address',
                   label=_(u'address', default=u'Address'),
                   fields=[
                       u'address1',
                       u'address2',
                       u'zip_code',
                       u'city',
                       u'country',
                   ])

    salutation = schema.TextLine(
        title=_(u'label_salutation', default=u'Salutation'),
        required=False,
    )

    academic_title = schema.TextLine(
        title=_(u'label_academic_title', default=u'Academic title'),
        required=False,
    )

    dexteritytextindexer.searchable('lastname')
    lastname = schema.TextLine(
        title=_(u'label_lastname', default=u'Lastname'),
        required=True,
        max_length=LASTNAME_LENGTH,
    )

    dexteritytextindexer.searchable('firstname')
    firstname = schema.TextLine(
        title=_(u'label_firstname', default=u'Firstname'),
        required=True,
        max_length=FIRSTNAME_LENGTH,
    )

    company = schema.TextLine(
        title=_(u'label_company', default=u"Company"),
        required=False,
    )

    department = schema.TextLine(
        title=_(u'label_department', default=u'Department'),
        required=False,
    )

    function = schema.TextLine(
        title=_(u'lable_function', default=u'Function'),
        required=False,
    )

    email = schema.TextLine(
        title=_(u'label_email', default=u'email'),
        required=False,
        max_length=EMAIL_LENGTH,
    )

    email2 = schema.TextLine(
        title=_(u'label_email2', default=u'Email 2'),
        required=False,
        max_length=EMAIL_LENGTH,
    )

    url = schema.URI(
        title=_(u'label_url', default=u'Url'),
        required=False,
    )

    phone_office = schema.TextLine(
        title=_(u'label_phone_office', default=u'Phone office'),
        required=False,
    )

    phone_fax = schema.TextLine(
        title=_(u'label_phone_fax', default=u'Fax'),
        required=False,
    )

    phone_mobile = schema.TextLine(
        title=_(u'label_phone_mobile', default=u'Mobile'),
        required=False,
    )

    phone_home = schema.TextLine(
        title=_(u'label_phone_home', default=u'Phone home'),
        required=False,
    )

    picture = NamedImage(
        title=_(u'label_picture', default='Picture'),
        required=False,
    )

    description = schema.Text(
        title=_(u'label_description', default=u'Description'),
        required=False,
        missing_value=u'',
    )

    address1 = schema.TextLine(
        title=_(u'label_address1', default=u'Address 1'),
        required=False,
    )

    address2 = schema.TextLine(
        title=_(u'label_address2', default=u'Address 2'),
        required=False,
    )

    zip_code = schema.TextLine(
        title=_(u'label_zip', default=u'ZIP'),
        required=False,
    )

    city = schema.TextLine(
        title=_(u'label_city', default=u'City'),
        required=False,
    )

    country = schema.TextLine(
        title=_(u'label_country', default=u'Country'),
        required=False,
    )
Esempio n. 37
0
 def get_show_all_label(self, total):
     msg = _(u'label_show_all',
             default=u'Show all ${total} participations',
             mapping={'total': total})
     return translate(msg, context=self.request)
Esempio n. 38
0
 def title(self):
     title = "%s %s" % (self.lastname, self.firstname)
     if len(title.strip()) == 0:
         title = _(u"Contact")
     return title
Esempio n. 39
0
 def label(self):
     return _(u'label_edit_participation',
              default=u'Edit ${title}',
              mapping={'title': self.model.get_title()})
Esempio n. 40
0
    def delete(self):
        self.mailaddress.delete()

        return JSONResponse(self.request).info(
            _(u'mail_address_deleted',
              default=u'Mailaddress successfully deleted')).dump()
Esempio n. 41
0
 def get_show_all_label(self, total):
     msg = _(u'label_show_all',
             default=u'Show all ${total} participations',
             mapping={'total': total})
     return translate(msg, context=self.request)