def __call__(self, context): return utils.dict_list_2_vocabulary([ { 'absolute': _(u'Absolute') }, { 'working_days': _(u'Working days') }, ])
def __call__(self, context): return dict_list_2_vocabulary([ { 'AND': _(u'and') }, { 'OR': _(u'or') }, ])
class ISettings(model.Schema): working_days = schema.List( title=_(u'List of working days'), value_type=schema.Choice( title=_(u'Day'), vocabulary='imio.schedule.working_days', ), required=True, )
def __call__(self, context): """ Call the adapter vocabulary for the 'default_assigned_group' field Return available groups for a task config. """ gsm = getGlobalSiteManager() scheduled_interfaces = context.get_scheduled_interfaces() voc_terms = [] for scheduled_interface in scheduled_interfaces: for adapter in gsm.registeredAdapters(): implements_IGroup = adapter.provided is IDefaultTaskGroup specific_enough = adapter.required[0].implementedBy(scheduled_interface) or \ issubclass(scheduled_interface, adapter.required[0]) if implements_IGroup and specific_enough: voc_terms.append( SimpleTerm(adapter.name, adapter.name, _(adapter.name))) # enrich the vocabulary with available groups for group in api.group.get_groups(): voc_terms.append( SimpleTerm(group.id, group.id, group.getGroupTitleOrName())) vocabulary = SimpleVocabulary(voc_terms) return vocabulary
class ITaskChangeOwner(Interface): new_owner = schema.Choice( title=_(u'New owner'), vocabulary='schedule.task_owner', required=True, )
def __call__(self, context): """ Call the adapter vocabulary for the 'default_assigned_group' field Return available groups for a task config. """ gsm = getGlobalSiteManager() scheduled_interface = context.get_scheduled_interface() voc_terms = [] for adapter in gsm.registeredAdapters(): implements_IGroup = adapter.provided is IDefaultTaskGroup specific_enough = adapter.required[0].implementedBy(scheduled_interface) or \ issubclass(scheduled_interface, adapter.required[0]) if implements_IGroup and specific_enough: voc_terms.append( SimpleTerm(adapter.name, adapter.name, _(adapter.name)) ) # enrich the vocabulary with available groups for group in api.group.get_groups(): voc_terms.append( SimpleTerm(group.id, group.id, group.getGroupTitleOrName()) ) vocabulary = SimpleVocabulary(voc_terms) return vocabulary
def __call__(self, context): """ Call the adapter vocabulary for the 'default_assigned_user' field Return available users for a task config. """ gsm = getGlobalSiteManager() scheduled_interface = context.get_scheduled_interface() voc_terms = [] for adapter in gsm.registeredAdapters(): implements_IUser = adapter.provided is IDefaultTaskUser specific_enough = adapter.required[0].implementedBy(scheduled_interface) or \ issubclass(scheduled_interface, adapter.required[0]) if implements_IUser and specific_enough: voc_terms.append( SimpleTerm(adapter.name, adapter.name, _(adapter.name)) ) # enrich the vocabulary with available users for user in api.user.get_users(): voc_terms.append( SimpleTerm(user.id, user.id, user.getProperty('fullname') or user.getUserName()) ) vocabulary = SimpleVocabulary(voc_terms) return vocabulary
def __call__(self, context): """ Call the adapter vocabulary for the 'default_assigned_user' field Return available users for a task config. """ gsm = getGlobalSiteManager() scheduled_interfaces = context.get_scheduled_interfaces() voc_terms = [] for scheduled_interface in scheduled_interfaces: for adapter in gsm.registeredAdapters(): implements_IUser = adapter.provided is IDefaultTaskUser specific_enough = adapter.required[0].implementedBy(scheduled_interface) or \ issubclass(scheduled_interface, adapter.required[0]) if implements_IUser and specific_enough: voc_terms.append( SimpleTerm(adapter.name, adapter.name, _(adapter.name))) # enrich the vocabulary with available users for user in api.user.get_users(): voc_terms.append( SimpleTerm(user.id, user.id, user.getProperty('fullname') or user.getUserName())) vocabulary = SimpleVocabulary( sorted(voc_terms, key=lambda term: term.title.decode('utf-8'))) return vocabulary
class IScheduleConfig(model.Schema): """ ScheduleConfig dexterity schema. """ enabled = schema.Bool( title=_(u'Enabled'), default=True, required=False, ) scheduled_contenttype = schema.Choice( title=_(u'Scheduled content type'), description=_(u'Select the content type to apply schedule.'), vocabulary='schedule.scheduled_contenttype', required=True, )
def update_title(schedule_container, event): """ Dashboard Collection title should always be the title of the parent task. """ collection = getattr(schedule_container, 'dashboard_collection', None) if collection: title = IScheduleConfig.providedBy(schedule_container) and _('All') or schedule_container.Title() collection.title = title collection.reindexObject(idxs=('Title', 'sortable_title'))
class IEndConditionSchema(Interface): condition = SubFormContextChoice( title=_(u'Condition'), vocabulary='schedule.end_conditions', required=True, ) operator = schema.Choice( title=_(u'Operator'), vocabulary='schedule.logical_operator', default='AND', ) display_status = schema.Bool( title=_(u'display_status'), default=True, )
def handleApply(self, action): messages = IStatusMessage(self.request) data, errors = self.extractData() if errors: self.status = self.formErrorsMessage messages.addStatusMessage(self.status, type="error") return self.context._end() self.context.reindex_parent_tasks(idxs=['is_solvable_task']) self.status = _(u'Task Closed')
def handleApply(self, action): messages = IStatusMessage(self.request) data, errors = self.extractData() if errors: self.status = self.formErrorsMessage messages.addStatusMessage(self.status, type="error") return self.context.assigned_user = data.get("new_owner") self.context.reindexObject() self.status = _(u"Owner changed")
def handleApply(self, action): messages = IStatusMessage(self.request) data, errors = self.extractData() if errors: self.status = self.formErrorsMessage messages.addStatusMessage(self.status, type="error") return self.context.assigned_user = data.get('new_owner') self.context.reindexObject() self.context.reindex_parent_tasks(idxs=['is_solvable_task']) self.status = _(u'Owner changed')
def create(schedule_container, event): """ """ collection_id = 'dashboard_collection' title = IScheduleConfig.providedBy(schedule_container) and _('All') or schedule_container.Title() if collection_id not in schedule_container.objectIds(): factory_args = { 'id': 'dashboard_collection', 'title': title, 'query': [ { 'i': 'CompoundCriterion', 'o': 'plone.app.querystring.operation.compound.is', 'v': schedule_container.UID() }, { 'i': 'review_state', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['to_do'] } ], 'customViewFields': ( u'assigned_user_column', u'status', u'due_date' ), 'sort_on': u'due_date', 'sort_reversed': True, 'b_size': 30 } if IScheduleConfig.providedBy(schedule_container): factory_args['customViewFields'] = ( u'pretty_link', u'sortable_title', u'assigned_user_column', u'status', u'due_date' ) kwargs = {} additional_queries = kwargs.pop('query', []) for query in additional_queries: factory_args['query'].append(query) factory_args.update(kwargs) portal_types = api.portal.get_tool('portal_types') type_info = portal_types.getTypeInfo('DashboardCollection') collection = type_info._constructInstance(schedule_container, **factory_args) # mark the collection with an interface to to customize the render # term view of collection widget alsoProvides(collection, IScheduleCollection)
def render(self): """ """ all_subtasks = self.task.get_last_subtasks() subtasks_to_do = [ task for task in all_subtasks if task.get_status() != DONE ] if not subtasks_to_do: return self.display_task_status(self.task) rows = [ u'<tr><th class="subtask_status_icon">{icon}</th>\ <th i18n:translate="">{subtask}</th>\ <th i18n:translate="">{due_date}</th></tr>'.format( icon=self.display_task_status( self.task, with_subtasks=bool(subtasks_to_do)), subtask=_('Subtask'), due_date=_('Due date'), ), ] for task in subtasks_to_do: title = task.Title() display_subtasks = IAutomatedMacroTask.providedBy(task) status_icon = u'<td class="subtask_status_icon">{status}</td>'.format( status=self.display_task_status( task, with_subtasks=display_subtasks), ) status_title = u'<td class="subtask_status_title">{title}</td>'.format( title=title.decode('utf-8'), ) date = task.due_date due_date = date.year == 9999 and u'\u221E' or date.strftime( '%d/%m/%Y') due_date = u'<td class="subtask_status_date">{}</td>'.format( due_date) row = u'<tr>{icon}{title}{due_date}</tr>'.format( icon=status_icon, title=status_title, due_date=due_date) rows.append(row) status_display = u'<table class=subtask_status_table>{}</table>'.format( ''.join(rows)) return status_display
def render(self): """ """ all_subtasks = self.task.get_last_subtasks() subtasks_to_do = [task for task in all_subtasks if task.get_status() != DONE] if not subtasks_to_do: return self.display_task_status(self.task) rows = [ u'<tr><th class="subtask_status_icon">{icon}</th>\ <th i18n:translate="">{subtask}</th>\ <th i18n:translate="">{due_date}</th></tr>'.format( icon=self.display_task_status(self.task, with_subtasks=bool(subtasks_to_do)), subtask=_('Subtask'), due_date=_('Due date'), ), ] for task in subtasks_to_do: title = task.Title() display_subtasks = IAutomatedMacroTask.providedBy(task) status_icon = u'<td class="subtask_status_icon">{status}</td>'.format( status=self.display_task_status(task, with_subtasks=display_subtasks), ) status_title = u'<td class="subtask_status_title">{title}</td>'.format( title=title.decode('utf-8'), ) date = task.due_date due_date = date.year == 9999 and u'\u221E' or date.strftime('%d/%m/%Y') due_date = u'<td class="subtask_status_date">{}</td>'.format(due_date) row = u'<tr>{icon}{title}{due_date}</tr>'.format( icon=status_icon, title=status_title, due_date=due_date ) rows.append(row) status_display = u'<table class=subtask_status_table>{}</table>'.format(''.join(rows)) return status_display
class CloseTaskForm(Form): fields = field.Fields(ICloseTask) ignoreContext = True @button.buttonAndHandler(_(u'Confirm')) def handleApply(self, action): messages = IStatusMessage(self.request) data, errors = self.extractData() if errors: self.status = self.formErrorsMessage messages.addStatusMessage(self.status, type="error") return self.context._end() self.context.reindex_parent_tasks(idxs=['is_solvable_task']) self.status = _(u'Task Closed')
class TaskChangeOwnerForm(Form): fields = field.Fields(ITaskChangeOwner) ignoreContext = True @button.buttonAndHandler(_(u'Confirm')) def handleApply(self, action): messages = IStatusMessage(self.request) data, errors = self.extractData() if errors: self.status = self.formErrorsMessage messages.addStatusMessage(self.status, type="error") return self.context.assigned_user = data.get('new_owner') self.context.reindexObject() self.context.reindex_parent_tasks(idxs=['is_solvable_task']) self.status = _(u'Owner changed')
def create(schedule_container, event): """ """ collection_id = 'dashboard_collection' title = IScheduleConfig.providedBy(schedule_container) and _('All') or schedule_container.Title() if collection_id not in schedule_container.objectIds(): factory_args = { 'id': 'dashboard_collection', 'title': title, 'query': [ { 'i': 'CompoundCriterion', 'o': 'plone.app.querystring.operation.compound.is', 'v': schedule_container.UID() }, { 'i': 'review_state', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['to_do'] } ], 'customViewFields': ( u'assigned_user_column', u'status', u'due_date' ), 'sort_on': u'due_date', 'sort_reversed': True, 'b_size': 30 } kwargs = {} additional_queries = kwargs.pop('query', []) for query in additional_queries: factory_args['query'].append(query) factory_args.update(kwargs) portal_types = api.portal.get_tool('portal_types') type_info = portal_types.getTypeInfo('DashboardCollection') collection = type_info._constructInstance(schedule_container, **factory_args) # mark the collection with an interface to to customize the render # term view of collection widget alsoProvides(collection, IScheduleCollection)
def __call__(self, context): """ Look for all the conditions registered for scheduled_contenttype, implementing some ITaskLogic (sub)interface and return them as a vocabulary. """ gsm = getGlobalSiteManager() scheduled_interface = context.get_scheduled_interface() terms = [] for adapter in gsm.registeredAdapters(): implements_interface = issubclass(adapter.provided, ITaskLogic) and \ issubclass(self.provides_interface, adapter.provided) specific_enough = adapter.required[0].implementedBy(scheduled_interface) or \ issubclass(scheduled_interface, adapter.required[0]) if implements_interface and specific_enough: terms.append( SimpleTerm(adapter.name, adapter.name, _(adapter.name)) ) vocabulary = SimpleVocabulary(terms) return vocabulary
def __call__(self, context): """ Look for all the conditions registered for scheduled_contenttype, implementing some ITaskLogic (sub)interface and return them as a vocabulary. """ gsm = getGlobalSiteManager() scheduled_interfaces = context.get_scheduled_interfaces() terms = [] for scheduled_interface in scheduled_interfaces: for adapter in gsm.registeredAdapters(): implements_interface = issubclass(adapter.provided, ITaskLogic) and \ issubclass(self.provides_interface, adapter.provided) specific_enough = adapter.required[0].implementedBy(scheduled_interface) or \ issubclass(scheduled_interface, adapter.required[0]) if implements_interface and specific_enough: terms.append( SimpleTerm(adapter.name, adapter.name, _(adapter.name))) vocabulary = SimpleVocabulary(terms) return vocabulary
def __call__(self, context): return utils.dict_list_2_vocabulary([ { 'monday': _(u'Monday') }, { 'tuesday': _(u'Tuesday') }, { 'wednesday': _(u'Wednesday') }, { 'thursday': _(u'Thursday') }, { 'friday': _(u'Friday') }, { 'saturday': _(u'Saturday') }, { 'sunday': _(u'Sunday') }, ])
def __call__(self, context): raw_terms = [ ('0', '0', _('None')), ('1', '1', _('Next Monday')), ('2', '2', _('Next Tuesday')), ('3', '3', _('Next Wednesday')), ('4', '4', _('Next Thursday')), ('5', '5', _('Next Friday')), ('6', '6', _('Next Saturday')), ('7', '7', _('Next Sunday')), ('-1', '-1', _('Previous Monday')), ('-2', '-2', _('Previous Tuesday')), ('-3', '-3', _('Previous Wednesday')), ('-4', '-4', _('Previous Thursday')), ('-5', '-5', _('Previous Friday')), ('-6', '-6', _('Previous Saturday')), ('-7', '-7', _('Previous Sunday')), ] voc_terms = [SimpleTerm(*term) for term in raw_terms] vocabulary = SimpleVocabulary(voc_terms) return vocabulary
def __call__(self, context): return dict_list_2_vocabulary([ {'AND': _(u'and')}, {'OR': _(u'or')}, ])
class IMacroTaskConfig(ITaskConfig): """ TaskConfig dexterity schema. """ start_date = schema.Choice( title=_(u'Start date'), description=_(u'Select the start date used to compute the due date.'), vocabulary='schedule.macrotask_start_date', required=True, ) creation_conditions = schema.List( title=_(u'Creation conditions'), description=_(u'Select creation conditions of the task'), value_type=schema.Object( title=_(u'Conditions'), schema=IMacroCreationConditionSchema, ), required=False, ) start_conditions = schema.List( title=_(u'Start conditions'), description=_(u'Select start conditions of the task'), value_type=schema.Object( title=_(u'Conditions'), schema=IMacroStartConditionSchema, ), required=False, ) end_conditions = schema.List( title=_(u'End conditions'), description=_(u'Select end conditions of the task.'), value_type=schema.Object( title=_(u'Conditions'), schema=IMacroEndConditionSchema, ), required=False, ) freeze_conditions = schema.List( title=_(u'Freeze conditions'), description=_(u'Select freeze conditions of the task.'), value_type=schema.Object( title=_(u'Conditions'), schema=IMacroFreezeConditionSchema, ), required=False, ) thaw_conditions = schema.List( title=_(u'Thaw conditions'), description=_(u'Select thaw conditions of the task.'), value_type=schema.Object( title=_(u'Conditions'), schema=IMacroThawConditionSchema, ), required=False, ) recurrence_conditions = schema.List( title=_(u'Recurrence condition'), description=_(u'Select recurrence conditions of the task.'), value_type=schema.Object( title=_('Conditions'), schema=IMacroRecurrenceConditionSchema, ), required=False, )
class ITaskConfig(model.Schema): """ TaskConfig dexterity schema. """ model.fieldset('general', label=_(u"General informations"), fields=[ 'enabled', 'default_assigned_group', 'default_assigned_user', 'marker_interfaces' ]) enabled = schema.Bool( title=_(u'Enabled'), default=True, required=False, ) default_assigned_group = schema.Choice( title=_(u'Assigned group'), description=_(u'Select default group assigned to this task.'), vocabulary='schedule.assigned_group', required=False, ) default_assigned_user = schema.Choice( title=_(u'Assigned user'), description=_(u'Select default user assigned to this task.'), vocabulary='schedule.assigned_user', required=True, ) marker_interfaces = schema.Set( title=_(u'Marker interfaces'), description=_(u'Custom marker interfaces for this task.'), value_type=schema.Choice(source='schedule.task_marker_interfaces'), required=False, ) model.fieldset('creation', label=_(u"Creation"), fields=['creation_state', 'creation_conditions']) creation_state = schema.Set( title=_(u'Task container creation state'), description= _(u'Select the state of the container where the task is automatically created.' ), value_type=schema.Choice(source='schedule.container_state'), required=False, ) creation_conditions = schema.List( title=_(u'Creation conditions'), description=_(u'Select creation conditions of the task'), value_type=schema.Object( title=_(u'Conditions'), schema=ICreationConditionSchema, ), required=False, ) model.fieldset('start', label=_(u"Start"), fields=['starting_states', 'start_conditions']) starting_states = schema.Set( title=_(u'Task container start states'), description= _(u'Select the state of the container where the task is automatically started.' ), value_type=schema.Choice(source='schedule.container_state'), required=False, ) start_conditions = schema.List( title=_(u'Start conditions'), description=_(u'Select start conditions of the task'), value_type=schema.Object( title=_(u'Conditions'), schema=IStartConditionSchema, ), required=False, ) model.fieldset('ending', label=_(u"Ending"), fields=['ending_states', 'end_conditions']) ending_states = schema.Set( title=_(u'Task container end states'), description= _(u'Select the states of the container where the task is automatically closed.' ), value_type=schema.Choice(source='schedule.container_state'), required=False, ) end_conditions = schema.List( title=_(u'End conditions'), description=_(u'Select end conditions of the task.'), value_type=schema.Object( title=_(u'Conditions'), schema=IEndConditionSchema, ), required=False, ) model.fieldset( 'delay', label=_(u'Calculation delay'), fields=[ 'start_date', 'warning_delay', 'calculation_delay', 'additional_delay', 'additional_delay_type', 'round_to_day' ], ) start_date = schema.Choice( title=_(u'Start date'), description=_(u'Select the start date used to compute the due date.'), vocabulary='schedule.start_date', required=True, ) warning_delay = schema.Int( title=_(u'Warning delay'), required=False, ) calculation_delay = schema.List( title=_(u'Calculation delay method'), value_type=schema.Choice( title=_(u'Calculation delay'), vocabulary='schedule.calculation_delay', default='schedule.calculation_default_delay', ), required=True, ) additional_delay = schema.Int( title=_(u'Additional delay'), description=_(u'This delay is added to the due date of the task.'), required=False, default=0, ) additional_delay_type = schema.Choice( title=_(u'Additional delay type'), description=_( u'Define the calculation method for the additional delay'), vocabulary='imio.schedule.additional_delay_type', required=True, ) round_to_day = schema.Choice( title=_(u'Round to week day'), vocabulary='schedule.vocabulary.week_days_rounding', default='0', required=True, ) model.fieldset( 'freeze', label=_(u'Freeze'), fields=[ 'freeze_states', 'freeze_conditions', ], ) freeze_states = schema.Set( title=_(u'Task container freeze states'), description= _(u'Select the states of the container where the task is automatically closed.' ), value_type=schema.Choice(source='schedule.container_state'), required=False, ) freeze_conditions = schema.List( title=_(u'Freeze conditions'), description=_(u'Select freeze conditions of the task.'), value_type=schema.Object( title=_(u'Conditions'), schema=IFreezeConditionSchema, ), required=False, ) model.fieldset( 'thaw', label=_(u'Thaw'), fields=[ 'thaw_states', 'thaw_conditions', ], ) thaw_states = schema.Set( title=_(u'Task container thaw states'), description= _(u'Select the states of the container where the task is automatically closed.' ), value_type=schema.Choice(source='schedule.container_state'), required=False, ) thaw_conditions = schema.List( title=_(u'Thaw conditions'), description=_(u'Select thaw conditions of the task.'), value_type=schema.Object( title=_(u'Conditions'), schema=IThawConditionSchema, ), required=False, ) model.fieldset( 'recurrence', label=_(u'Recurrence'), fields=[ 'activate_recurrency', 'recurrence_states', 'recurrence_conditions', ], ) activate_recurrency = schema.Bool( title=_(u'Activate recurrency'), required=False, default=False, ) recurrence_states = schema.Set( title=_(u'Task container recurrence states'), description= _(u'Select the state of the container where the task should be recurred' ), value_type=schema.Choice(source='schedule.container_state'), required=False, ) recurrence_conditions = schema.List( title=_(u'Recurrence condition'), description=_(u'Select recurrence conditions of the task.'), value_type=schema.Object( title=_('Conditions'), schema=IRecurrenceConditionSchema, ), required=False, )