def __call__(self, context): # Just an example list of content for our vocabulary, # this can be any static or dynamic data, a catalog result for example. items = [ VocabItem(u'14', _(u'14 days')), VocabItem(u'30', _(u'30 days')), VocabItem(u'60', _(u'60 days')), VocabItem(u'90', _(u'90 days')), VocabItem(u'120', _(u'120 days')), ] # Fix context if you are using the vocabulary in DataGridField. # See https://github.com/collective/collective.z3cform.datagridfield/issues/31: # NOQA: 501 if not IDexterityContent.providedBy(context): req = getRequest() context = req.PARENTS[0] # create a list of SimpleTerm items: terms = [] for item in items: terms.append( SimpleTerm( value=item.token, token=str(item.token), title=item.value, ) ) # Create a SimpleVocabulary from the terms list and return it: return SimpleVocabulary(terms)
def validate_start_end(data): if data.start and data.end and data.start > data.end and not data.open_end: raise StartBeforeEnd( _( "error_end_must_be_after_start_date", default=u"End date must be after start date.", ))
def test_vocab_renewal_periods(self): vocab_name = "collective.contract_management.RenewalPeriods" factory = getUtility(IVocabularyFactory, vocab_name) self.assertTrue(IVocabularyFactory.providedBy(factory)) vocabulary = factory(self.portal) self.assertTrue(IVocabularyTokenized.providedBy(vocabulary)) self.assertEqual(vocabulary.getTerm("3").title, _(u"3 months"))
def test_vocab_reminder_types(self): vocab_name = "collective.contract_management.ReminderTypes" factory = getUtility(IVocabularyFactory, vocab_name) self.assertTrue(IVocabularyFactory.providedBy(factory)) vocabulary = factory(self.portal) self.assertTrue(IVocabularyTokenized.providedBy(vocabulary)) self.assertEqual(vocabulary.getTerm("14").title, _(u"14 days"))
class IContract(model.Schema): """ Marker interface and Dexterity Python Schema for Contract """ # You have to import the widget! directives.widget("start", DatetimeWidget, pattern_options={"time": False}) start = schema.Datetime( title=_(u"Contract begin"), description=_(u""), # defaultFactory=get_default_begin, required=False, ) directives.widget("end", DatetimeWidget, pattern_options={"time": False}) end = schema.Datetime( title=_(u"Contract end"), description=_(u""), # defaultFactory=get_default_end, required=False, ) directives.widget("notice_period", DatetimeWidget, pattern_options={"time": False}) notice_period = schema.Datetime( title=_(u"Notice period"), description=_(u""), # defaultFactory=get_default_notice_period, required=False, ) # Make sure to import: plone.app.vocabularies as vocabs reminder = schema.Choice( title=_(u"Reminder"), description=_(u"Reminder, in days before Notice period."), vocabulary=u"collective.contract_management.ReminderTypes", default=u"30", required=False, ) renewal_period = schema.Choice( title=_(u"Renewal period"), description=_( u"Renewal time in month for the automatic renewal of the contract." ), vocabulary=u"collective.contract_management.RenewalPeriods", default=u"12", required=False, ) contract_amount = schema.TextLine( title=_(u"Contract amount"), description=_(u"The amount of the whole contract."), required=False, ) @invariant def validate_start_end(data): if data.start and data.end and data.start > data.end and not data.open_end: raise StartBeforeEnd( _( "error_end_must_be_after_start_date", default=u"End date must be after start date.", ))
class StartBeforeEnd(Invalid): __doc__ = _("error_invalid_date", default=u"Invalid start or end date")