def get_sittings(self): formatter = self.request.locale.dates.getFormatter("date", "full") session = Session() query = ( session.query(domain.GroupSitting) .filter( sql.and_( schema.sittings.c.status.in_(get_states("groupsitting", tagged=["public"])), sql.between(schema.sittings.c.start_date, self.start_date, self.end_date), ) ) .order_by(schema.sittings.c.start_date) .options( eagerload("group"), # eagerload('sitting_type'), eagerload("item_schedule"), eagerload("item_schedule.item"), ) ) sittings = query.all() day = u"" day_list = [] s_dict = {} for sitting in sittings: sday = formatter.format(sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} if sitting.group.type == "parliament": _url = url.set_url_context("/business/sittings/obj-%i" % (sitting.sitting_id)) elif sitting.group.type == "committee": _url = url.set_url_context( "/business/committees/obj-%i/sittings/obj-%i" % (sitting.group.group_id, sitting.sitting_id) ) else: _url = "#" s_list.append( { "start": sitting.start_date.strftime("%H:%M"), "end": sitting.end_date.strftime("%H:%M"), "type": sitting.group.type, "name": sitting.group.short_name, "url": _url, "items": self.get_sitting_items(sitting), } ) s_dict["day"] = day s_dict["sittings"] = s_list else: if s_dict: day_list.append(s_dict) return day_list
def get_sittings(self): formatter = self.request.locale.dates.getFormatter('date', 'full') session = Session() query = session.query(domain.GroupSitting).filter( sql.and_( schema.group_sittings.c.status.in_(get_states('groupsitting', tagged=['public']) ), sql.between( schema.group_sittings.c.start_date, self.start_date, self.end_date))).order_by( schema.group_sittings.c.start_date).options( eagerload('group'), #eagerload('sitting_type'), eagerload('item_schedule'), eagerload('item_schedule.item') ) sittings = query.all() day = u'' day_list = [] s_dict = {} for sitting in sittings: sday = formatter.format(sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} if sitting.group.type == 'parliament': _url = url.set_url_context('/business/sittings/obj-%i' % ( sitting.group_sitting_id)) elif sitting.group.type == 'committee': _url = url.set_url_context( '/business/committees/obj-%i/sittings/obj-%i' % (sitting.group.group_id, sitting.group_sitting_id)) else: _url ='#' s_list.append({ 'start': sitting.start_date.strftime("%H:%M"), 'end' : sitting.end_date.strftime("%H:%M"), 'type' : sitting.group.type, 'name' : sitting.group.short_name, 'url' : _url, 'items' : self.get_sitting_items(sitting), }) s_dict['day'] = day s_dict['sittings'] = s_list else: if s_dict: day_list.append(s_dict) return day_list
def get_sittings(self): #!+QUERIES(mb, nov-2011) to review the extra queries in `get_items` formatter = self.request.locale.dates.getFormatter("date", "full") session = Session() query = session.query(domain.GroupSitting).filter( self.group_sittings_filter ).order_by(schema.group_sittings.c.start_date).options( eagerload("group"), #eagerload("sitting_type"), eagerload("item_schedule") ) if not self.end_date: query = query.limit( BungeniSettings( common.get_application() ).max_sittings_in_business ) sittings = query.all() day = u"" day_list = [] s_dict = {} for sitting in sittings: sday = formatter.format(sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} if sitting.group.type == "parliament": _url = url.set_url_context("/business/sittings/obj-%i" % ( sitting.group_sitting_id)) elif sitting.group.type == "committee": _url = url.set_url_context( "/business/committees/obj-%i/sittings/obj-%i" % (sitting.group.group_id, sitting.group_sitting_id)) else: _url = "#" s_list.append({ "start": sitting.start_date.strftime("%H:%M"), "end": sitting.end_date.strftime("%H:%M"), "type": sitting.group.type, "name": sitting.group.short_name, "url": _url, "items": self.get_sitting_items(sitting), }) s_dict["day"] = day s_dict["sittings"] = s_list else: if s_dict: day_list.append(s_dict) return day_list
def get_sittings(self): formatter = self.request.locale.dates.getFormatter('date', 'full') session = Session() query = session.query(domain.GroupSitting).filter( sql.and_( schema.sittings.c.status.in_(get_states('groupsitting',tagged=['public'])), sql.between( schema.sittings.c.start_date, self.start_date, self.end_date))).order_by( schema.sittings.c.start_date).options( eagerload('group'), eagerload('sitting_type'), eagerload('item_schedule'), eagerload('item_schedule.item') ) sittings = query.all() day = u'' day_list = [] s_dict = {} for sitting in sittings: sday = formatter.format(sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} if sitting.group.type == 'parliament': _url = url.set_url_context('/business/sittings/obj-%i' % ( sitting.sitting_id)) elif sitting.group.type == 'committee': _url = url.set_url_context( '/business/committees/obj-%i/sittings/obj-%i' % (sitting.group.group_id, sitting.sitting_id)) else: _url ='#' s_list.append({ 'start': sitting.start_date.strftime("%H:%M"), 'end' : sitting.end_date.strftime("%H:%M"), 'type' : sitting.group.type, 'name' : sitting.group.short_name, 'url' : _url, 'items' : self.get_sitting_items(sitting), }) s_dict['day'] = day s_dict['sittings'] = s_list else: if s_dict: day_list.append(s_dict) return day_list
def get_sittings(self): #!+QUERIES(mb, nov-2011) to review the extra queries in `get_items` formatter = self.request.locale.dates.getFormatter("date", "full") session = Session() query = session.query(domain.GroupSitting).filter( self.group_sittings_filter).order_by( schema.group_sittings.c.start_date).options( eagerload("group"), #eagerload("sitting_type"), eagerload("item_schedule")) if not self.end_date: query = query.limit( BungeniSettings( common.get_application()).max_sittings_in_business) sittings = query.all() day = u"" day_list = [] s_dict = {} for sitting in sittings: sday = formatter.format(sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} if sitting.group.type == "parliament": _url = url.set_url_context("/business/sittings/obj-%i" % (sitting.group_sitting_id)) elif sitting.group.type == "committee": _url = url.set_url_context( "/business/committees/obj-%i/sittings/obj-%i" % (sitting.group.group_id, sitting.group_sitting_id)) else: _url = "#" s_list.append({ "start": sitting.start_date.strftime("%H:%M"), "end": sitting.end_date.strftime("%H:%M"), "type": sitting.group.type, "name": sitting.group.short_name, "url": _url, "items": self.get_sitting_items(sitting), }) s_dict["day"] = day s_dict["sittings"] = s_list else: if s_dict: day_list.append(s_dict) return day_list
def _setData(self): """Return the data of the query. """ data_list = [] results = self.query.all() formatter = date.getLocaleFormatter(self.request, "date", "long") for result in results: data = {} data["qid"] = ("i-" + str(result.parliamentary_item_id)) if type(result)==domain.AgendaItem: g = u" " + result.group.type + u" " + result.group.short_name else: g = u"" # !+ g? data["subject"] = result.short_name data["title"] = result.short_name data["result_item_class"] = "workflow-state-" + result.status data["url"] = url.set_url_context("%ss/obj-%i" % ( result.type, result.parliamentary_item_id)) data["status"] = misc.get_wf_state(result) data["status_date"] = formatter.format(result.status_date) data["owner"] = "%s %s" %(result.owner.first_name, result.owner.last_name) data["type"] = _(result.type) if type(result)==domain.Question: data["to"] = result.ministry.short_name else: data["to"]= u"" # remember original domain object data["id"] = result.parliamentary_item_id data["_obj"] = result # append processed result item data_list.append(data) self._data = data_list
def _setData(self): """ return the data of the query """ data_list = [] results = self.query.all() formatter = date.getLocaleFormatter(self.request, "date", "long") for result in results: data ={} data["qid"]= ("m_" + str(result.motion_id)) data["subject"] = u"M " + str(result.motion_number) + u" " + result.short_name data["title"] = result.short_name if result.approval_date: data["result_item_class"] = ("workflow-state-" + result.status + "sc-after-" + datetime.date.strftime(result.approval_date, "%Y-%m-%d")) else: data["result_item_class"] = "workflow-state-" + result.status data["url"] = url.set_url_context("motions/obj-" + str(result.motion_id)) data["status"] = misc.get_wf_state(result) data["status_date"] = formatter.format(result.status_date) data["owner"] = "%s %s" %(result.owner.first_name, result.owner.last_name) data["type"] = _(result.type) data["to"] = "" data_list.append(data) self._data = data_list
def get_items_by_type(self, item_type): day = u"" day_list = [] s_dict = {} formatter = self.request.locale.dates.getFormatter("date", "full") for schedule in self.itemschedules: if type(schedule.item) == item_type: sday = formatter.format(schedule.sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} s_list.append({ "name": IDCDescriptiveProperties(schedule.item).title, "status": str(misc.get_wf_state(schedule.item)), "url": url.set_url_context( "/business/%ss/obj-%s" % (schedule.item.type, schedule.item.doc_id)), "group_type": schedule.sitting.group.type, "group_name": schedule.sitting.group.short_name }) s_dict["day"] = day s_dict["items"] = s_list if s_dict: day_list.append(s_dict) return day_list
def get_items_by_type(self, item_type): day = u"" day_list = [] s_dict = {} formatter = self.request.locale.dates.getFormatter("date", "full") for schedule in self.itemschedules: if type(schedule.item) == item_type: sday = formatter.format(schedule.sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} s_list.append( { "name": schedule.item.short_name, "status": misc.get_wf_state(schedule.item), "url": url.set_url_context( "/business/%ss/obj-%s" % (schedule.item.type, schedule.item.parliamentary_item_id) ), "group_type": schedule.sitting.group.type, "group_name": schedule.sitting.group.short_name, } ) s_dict["day"] = day s_dict["items"] = s_list if s_dict: day_list.append(s_dict) return day_list
def _jsonValues(self, nodes, fields): """ filter values from the nodes to respresent in json, currently that means some footwork around, probably better as another set of adapters. """ def get_listing_column_getters(): # dict of (descriptor) field getters by name, for fast lookup getters = dict([(f.name, getattr(f.listing_column, "getter", lambda n, field: field.query(n))) for f in self.domain_annotation.fields]) return getters listing_column_getters = get_listing_column_getters() values = [] for node in nodes: d = {} for field in fields: fn = field.__name__ d[fn] = listing_column_getters[fn](node, field) # !+i18n_DATE(mr, sep-2010) two problems with the isinstance # tests below: # a) they seem to always fail (no field values of this type?) # b) this is incorrect way to localize dates v = d[fn] if isinstance(v, datetime.datetime): d[fn] = v.strftime("%F %I:%M %p") elif isinstance(v, datetime.date): d[fn] = v.strftime("%F") d["object_id"] = url.set_url_context(container.stringKey(node)) values.append(d) return values
def get_items_by_type(self, item_type): day = u'' day_list = [] s_dict = {} formatter = self.request.locale.dates.getFormatter('date', 'full') for schedule in self.itemschedules: if type(schedule.item) == item_type: sday = formatter.format(schedule.sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} s_list.append({ 'name': schedule.item.short_name, 'status' : misc.get_wf_state(schedule.item), 'url' : url.set_url_context("/business/%ss/obj-%s" % ( schedule.item.type, schedule.item.parliamentary_item_id)), 'group_type': schedule.sitting.group.type, 'group_name' : schedule.sitting.group.short_name }) s_dict['day'] = day s_dict['items'] = s_list if s_dict: day_list.append(s_dict) return day_list
def _jsonValues(self, nodes, fields): """ filter values from the nodes to respresent in json, currently that means some footwork around, probably better as another set of adapters. """ def get_anno_getters_by_field_name(): # dict of domain_annotation field getters by name, for fast lookup da_getters = dict([ (da_field.name, getattr(da_field.listing_column, "getter", None)) for da_field in self.domain_annotation.fields ]) return da_getters getters_by_field_name = get_anno_getters_by_field_name() values = [] for n in nodes: d = {} for field in fields: f = field.__name__ getter = getters_by_field_name.get(f, None) if getter is not None: d[f] = v = getter(n, field) else: d[f] = v = field.query(n) # !+i18n_DATE(mr, sep-2010) two problems with the isinstance # tests below: # a) they seem to always fail (no field values of this type?) # b) this is incorrect way to localize dates if isinstance(v, datetime.datetime): d[f] = v.strftime("%F %I:%M %p") elif isinstance(v, datetime.date): d[f] = v.strftime("%F") d["object_id"] = url.set_url_context(stringKey(n)) values.append(d) return values
def _get_items(self): data_list = [] results = self.query.all() formatter = self.get_date_formatter("date", "long") for result in results: data = {} data["qid"] = ("i-" + str(result.parliamentary_item_id)) if type(result) == domain.AgendaItem: g = u" " + result.group.type + u" " + result.group.short_name else: g = u"" # !+ g? data["subject"] = result.short_name data["title"] = result.short_name data["result_item_class"] = "workflow-state-" + result.status data["url"] = url.set_url_context("%ss/obj-%i" % ( result.type, result.parliamentary_item_id)) data["status"] = misc.get_wf_state(result) data["status_date"] = formatter.format(result.status_date) data["owner"] = "%s %s" % (result.owner.first_name, result.owner.last_name) data["type"] = _(result.type) if type(result) == domain.Question: data["to"] = result.ministry.short_name else: data["to"] = u"" # remember original domain object data["id"] = result.parliamentary_item_id data["_obj"] = result # append processed result item data_list.append(data) return data_list
def _json_values(self, nodes): """ filter values from the nodes to respresent in json, currently that means some footwork around, probably better as another set of adapters. """ def get_listing_column_getters(): # dict of (descriptor) field getters by name, for fast lookup getters = dict( [ (f.name, getattr(f.listing_column, "getter", lambda n, field: field.query(n))) for f in self.domain_annotation.fields ] ) return getters listing_column_getters = get_listing_column_getters() values = [] for node in nodes: d = {} for field in self.fields: fn = field.__name__ d[fn] = listing_column_getters[fn](node, field) v = d[fn] # localize date values if isinstance(v, (datetime.datetime, datetime.date, datetime.time)): d[fn] = date.get_localized_date(self.request, v) d["object_id"] = url.set_url_context(container.stringKey(node)) values.append(d) return values
def _get_path(self, context): """Return the current path as a list """ descriptor = None name = None path = [] context = proxy.removeSecurityProxy(context) if context is None: return path # Proof-of-concept: support for selective inclusion in breadcrumb trail: # a view marked with an attribute __crumb__=False is NOT included in # the breadcrumb trail (see core/app.py: "workspace" Section) if not getattr(context, "__crumb__", True): return path if context.__parent__ is not None: path.extend(self._get_path(context.__parent__)) _url = url.absoluteURL(context, self.request) # Append a trailing slash to each breadcrumb entry so that # the right context is always maintained when the breadcrumbs # are used for navigation. _url = url.set_url_context(_url) title = _get_title_from_context(context) if title is not None: path.append({'name': title, 'url': _url}) return path
def _jsonValues(self, nodes, fields, context, getters_by_field_name={}): """ filter values from the nodes to respresent in json, currently that means some footwork around, probably better as another set of adapters. """ values = [] for n in nodes: d = {} for field in fields: f = field.__name__ getter = getters_by_field_name.get(f, None) if getter is not None: d[f] = v = getter(n, field) else: d[f] = v = field.query(n) # !+i18n_DATE(mr, sep-2010) two problems with the isinstance # tests below: # a) they seem to always fail # b) this is incorrect way to localize dates if isinstance(v, datetime.datetime): d[f] = v.strftime("%F %I:%M %p") elif isinstance(v, datetime.date): d[f] = v.strftime("%F") d["object_id"] = url.set_url_context(stringKey(n)) values.append(d) return values
def get_items_by_type(self, item_type): day = u'' day_list = [] s_dict = {} formatter = self.request.locale.dates.getFormatter('date', 'full') for schedule in self.itemschedules: if type(schedule.item) == item_type: sday = formatter.format(schedule.sitting.start_date) if sday != day: s_list = [] day = sday if s_dict: day_list.append(s_dict) s_dict = {} s_list.append({ 'name': schedule.item.short_name, 'status': misc.get_wf_state(schedule.item), 'url': url.set_url_context("/business/%ss/obj-%s" % (schedule.item.type, schedule.item.parliamentary_item_id)), 'group_type': schedule.sitting.group.type, 'group_name': schedule.sitting.group.short_name }) s_dict['day'] = day s_dict['items'] = s_list if s_dict: day_list.append(s_dict) return day_list
def _json_values(self, nodes): """ filter values from the nodes to respresent in json, currently that means some footwork around, probably better as another set of adapters. """ def get_listing_column_getters(): # dict of (descriptor) field getters by name, for fast lookup getters = dict([ (f.name, getattr(f.listing_column, "getter", lambda n, field: field.query(n))) for f in self.domain_annotation.fields ]) return getters listing_column_getters = get_listing_column_getters() values = [] for node in nodes: d = {} for field in self.fields: fn = field.__name__ d[fn] = listing_column_getters[fn](node, field) # !+i18n_DATE(mr, sep-2010) two problems with the isinstance # tests below: # a) they seem to always fail (no field values of this type?) # b) this is incorrect way to localize dates v = d[fn] if isinstance(v, datetime.datetime): d[fn] = v.strftime("%F %I:%M %p") elif isinstance(v, datetime.date): d[fn] = v.strftime("%F") d["object_id"] = url.set_url_context(container.stringKey(node)) values.append(d) return values
def _setData(self): """ return the data of the query """ data_list = [] results = self.query.all() formatter = date.getLocaleFormatter(self.request, "date", "long") for result in results: data = {} data["qid"] = ("m_" + str(result.motion_id)) data["subject"] = u"M " + str( result.motion_number) + u" " + result.short_name data["title"] = result.short_name if result.approval_date: data["result_item_class"] = ( "workflow-state-" + result.status + "sc-after-" + datetime.date.strftime(result.approval_date, "%Y-%m-%d")) else: data["result_item_class"] = "workflow-state-" + result.status data["url"] = url.set_url_context("motions/obj-" + str(result.motion_id)) data["status"] = misc.get_wf_state(result) data["status_date"] = formatter.format(result.status_date) data["owner"] = "%s %s" % (result.owner.first_name, result.owner.last_name) data["type"] = _(result.type) data["to"] = "" data_list.append(data) self._data = data_list
def _get_path(self, context): """Return the current path as a list """ descriptor = None name = None path = [] context = proxy.removeSecurityProxy(context) if context is None: return path # Proof-of-concept: support for selective inclusion in breadcrumb trail: # a view marked with an attribute __crumb__=False is NOT included in # the breadcrumb trail (see core/app.py: "workspace" Section) if not getattr(context, "__crumb__", True): return path if context.__parent__ is not None: path.extend(self._get_path(context.__parent__)) _url = url.absoluteURL(context, self.request) # Append a trailing slash to each breadcrumb entry so that # the right context is always maintained when the breadcrumbs # are used for navigation. _url = url.set_url_context(_url) title = _get_title_from_context(context) if title is not None: path.append({ 'name':title, 'url':_url}) return path
def _json_values(self, nodes): """ filter values from the nodes to respresent in json, currently that means some footwork around, probably better as another set of adapters. """ def get_listing_column_getters(): # dict of (descriptor) field getters by name, for fast lookup getters = dict([(f.name, getattr(f.listing_column, "getter", lambda n, field: field.query(n))) for f in self.domain_annotation.fields]) return getters listing_column_getters = get_listing_column_getters() values = [] for node in nodes: d = {} for field in self.fields: fn = field.__name__ d[fn] = listing_column_getters[fn](node, field) v = d[fn] #localize date values if isinstance( v, (datetime.datetime, datetime.date, datetime.time)): d[fn] = date.get_localized_date(self.request, v) d["object_id"] = url.set_url_context(container.stringKey(node)) values.append(d) return values
def get_sitting_items(sitting, request, include_actions=False): items = [] if sitting.status in get_states("groupsitting", keys=["draft_agenda", "published_agenda"]): order = "planned_order" else: order = "real_order" schedulings = map(removeSecurityProxy, sitting.items.batch(order_by=order, limit=None)) site_url = url.absoluteURL(getSite(), request) for scheduling in schedulings: item = ProxyFactory(location_wrapped(scheduling.item, sitting)) props = IDCDescriptiveProperties.providedBy(item) and item or IDCDescriptiveProperties(item) discussions = tuple(scheduling.discussions.values()) discussion = discussions and discussions[0] or None truncated_discussion = None if (discussion is not None) and (discussion.body_text is not None): # truncate discussion to first hundred characters t_discussion = discussion.body_text[0:100] try: # truncate discussion to first two lines index = t_discussion.index("<br>") index2 = t_discussion.index("<br>", index + 4) truncated_discussion = t_discussion[0:index2] + "..." except ValueError: truncated_discussion = t_discussion + "..." info = IWorkflowInfo(item, None) state_title = info.workflow().workflow.states[item.status].title record = { "title": props.title, "description": props.description, "name": stringKey(scheduling), "status": item.status, "type": item.type.capitalize, "t": item.type, "state_title": state_title, #'category_id': scheduling.category_id, #'category': scheduling.category, "discussion": discussion, "truncated_discussion": truncated_discussion, "delete_url": "%s/delete" % url.absoluteURL(scheduling, request), "url": url.set_url_context(site_url + ("/business/%ss/obj-%s" % (item.type, item.parliamentary_item_id))), } if include_actions: record["actions"] = get_scheduling_actions(scheduling, request) record["workflow"] = get_workflow_actions(item, request) discussion_actions = get_discussion_actions(discussion, request) if discussion_actions: assert len(discussion_actions) == 1 record["discussion_action"] = discussion_actions[0] else: record["discussion_action"] = None items.append(record) return items
def _setData(self): """Return the data of the query """ formatter = date.getLocaleFormatter(self.request, "date", "long") data_list = [] results = self.query.all() # if no current parliament, no data try: parliament_id = model_utils.get_current_parliament().parliament_id except: return data_list # government_id = self.__parent__.government_id for result in results: data = {} data["qid"] = "g_%s" % (result.group_id) data["subject"] = result.short_name data["title"] = "%s (%s)" % (result.short_name, result.type) data["result_item_class"] = "workflow-state-%s" % (result.status) _url = "/archive/browse/parliaments/obj-%s" % (parliament_id) if type(result) == domain.Parliament: data["url"] = url.set_url_context(_url) continue elif type(result) == domain.Committee: #data["url"] = url + "/committees/obj-" + str(result.group_id) data["url"] = url.set_url_context( "/groups/%s/%s" % (result.parent_group.group_principal_id, result.group_principal_id)) elif type(result) == domain.PoliticalGroup: data["url"] = url.set_url_context("%s/politicalgroups/obj-%s" % (_url, result.group_id)) elif type(result) == domain.Ministry: data["url"] = url.set_url_context( "%s/governments/obj-%s/ministries/obj-%s" % (_url, government_id, result.group_id)) else: data["url"] = "#" data["status"] = misc.get_wf_state(result) data["status_date"] = formatter.format(result.status_date) data["owner"] = "" data["type"] = _(result.type) data["to"] = "" data_list.append(data) self._data = data_list
def _setData(self): """Return the data of the query """ formatter = date.getLocaleFormatter(self.request, "date", "long") data_list = [] results = self.query.all() # if no current parliament, no data try: parliament_id = model_utils.get_current_parliament().parliament_id except: return data_list # government_id = self.__parent__.government_id for result in results: data = {} data["qid"] = "g_%s" % (result.group_id) data["subject"] = result.short_name data["title"] = "%s (%s)" % (result.short_name, result.type) data["result_item_class"] = "workflow-state-%s" % (result.status) _url = "/archive/browse/parliaments/obj-%s" % (parliament_id) if type(result) == domain.Parliament: data["url"] = url.set_url_context(_url) continue elif type(result) == domain.Committee: #data["url"] = url + "/committees/obj-" + str(result.group_id) data["url"] = url.set_url_context("/groups/%s/%s" % ( result.parent_group.group_principal_id, result.group_principal_id)) elif type(result) == domain.PoliticalGroup: data["url"] = url.set_url_context( "%s/politicalgroups/obj-%s" % (_url, result.group_id)) elif type(result) == domain.Ministry: data["url"] = url.set_url_context( "%s/governments/obj-%s/ministries/obj-%s" % ( _url, government_id, result.group_id)) else: data["url"] = "#" data["status"] = misc.get_wf_state(result) data["status_date"] = formatter.format(result.status_date) data["owner"] = "" data["type"] = _(result.type) data["to"] = "" data_list.append(data) self._data = data_list
def _jsonValues(self, nodes): values = [] for node in nodes: d = {} for field in workspace_fields: d[field.name] = getattr(IWorkspaceAdapter(node), field.name, None) d["object_id"] = url.set_url_context(node.__name__) values.append(d) return values
def _json_values(self, nodes): values = [] for node in nodes: d = {} for field in workspace_fields: d[field.name] = getattr(IWorkspaceContentAdapter(node), field.name, None) d["object_id"] = url.set_url_context(node.__name__) values.append(d) return values
def get_sitting_items(self, sitting): s_list = [] for schedule in sitting.item_schedule: s_list.append({ 'name': schedule.item.short_name, 'status' : misc.get_wf_state(schedule.item), 'url' : url.set_url_context(('/business/' + schedule.item.type + 's/obj-' + str(schedule.item.parliamentary_item_id))), 'item_type' : schedule.item.type, }) return s_list
def update(self): # should only ever be called for contexts with these interfaces assert IWorkspaceContainer.providedBy(self.context) or IWorkspaceSectionContext.providedBy(self.context) self.sections = getMenu("workspace_context_navigation", self.context, self.request) # Append a trailing slash to each workspace viewlet navigation entry so # that the right context is always maintained when using this navigation. for section in self.sections: section["url"] = url.set_url_context(section["url"]) # get a translated copy of original workspace object workspace = translate_obj(misc.get_parent_with_interface(self, IWorkspaceContainer)) self.workspace_title = workspace.full_name
def _json_values(self, nodes): """Return nodes as JSON""" values = [] for node in nodes: d = {} for field in self.fields: fn = field.__name__ d[fn] = dthandler(getattr(node, fn, None)) d["object_id"] = url.set_url_context(container.stringKey(node)) d["media_url"] = node.media_url values.append(d) return values
def get_sitting_items(sitting, request, include_actions=False): items = [] if sitting.status in get_states("groupsitting", keys=["draft_agenda", "published_agenda"]): order = "planned_order" else: order = "real_order" schedulings = map( removeSecurityProxy, sitting.items.batch(order_by=order, limit=None)) site_url = url.absoluteURL(getSite(), request) for scheduling in schedulings: item = ProxyFactory(location_wrapped(scheduling.item, sitting)) props = IDCDescriptiveProperties.providedBy(item) and item or \ IDCDescriptiveProperties(item) discussions = tuple(scheduling.discussions.values()) discussion = discussions and discussions[0] or None info = IWorkflowInfo(item, None) state_title = info.workflow().workflow.states[item.status].title record = { 'title': props.title, 'description': props.description, 'name': stringKey(scheduling), 'status': item.status, 'type': item.type.capitalize, 't':item.type, 'state_title': state_title, #'category_id': scheduling.category_id, #'category': scheduling.category, 'discussion': discussion, 'delete_url': "%s/delete" % url.absoluteURL(scheduling, request), 'url': url.set_url_context(site_url+('/business/%ss/obj-%s' % (item.type, item.parliamentary_item_id)))} if include_actions: record['actions'] = get_scheduling_actions(scheduling, request) record['workflow'] = get_workflow_actions(item, request) discussion_actions = get_discussion_actions(discussion, request) if discussion_actions: assert len(discussion_actions) == 1 record['discussion_action'] = discussion_actions[0] else: record['discussion_action'] = None items.append(record) return items
def get_sitting_items(self, sitting): s_list = [] for schedule in sitting.item_schedule: s_list.append( { "name": schedule.item.short_name, "status": misc.get_wf_state(schedule.item), "url": url.set_url_context( ("/business/" + schedule.item.type + "s/obj-" + str(schedule.item.parliamentary_item_id)) ), "item_type": schedule.item.type, } ) return s_list
def update(self): need('yui-dragdrop') need('yui-container') session = Session() group_id = self.get_group_id() items = tuple( session.query(self.model).filter( sql.and_(self.model.status.in_(self.states), self.model.group_id == group_id))) sitting = self._parent._parent.context scheduled_item_ids = [item.item_id for item in sitting.item_schedule] # add location to items gsm = component.getSiteManager() adapter = gsm.adapters.lookup( (interface.implementedBy(self.model), interface.providedBy(self)), ILocation) items = [adapter(item, None) for item in items] # for each item, format dictionary for use in template self.items = [ { 'title': properties.title, 'name': item.__class__.__name__, 'description': properties.description, #'date': _(u"$F", mapping={'F': # datetimedict.fromdatetime(item.changes[-1].date)}), 'date': item.changes[-1].date_active, 'state': _(IWorkflow(item).workflow.states[item.status].title), 'id': item.parliamentary_item_id, 'class': (item.parliamentary_item_id in scheduled_item_ids) and "dd-disable" or "", 'url': url.set_url_context(url.absoluteURL(item, self.request)) } for (item, properties) in [(item, (IDCDescriptiveProperties.providedBy(item) and item or IDCDescriptiveProperties(item))) for item in items] ]
def get_sitting_items(self, sitting): s_list = [] if sitting.status in get_states('groupsitting',tagged=['agendaprivate']): return s_list else: for schedule in sitting.item_schedule: s_list.append({ 'name': schedule.item.short_name, 'status' : misc.get_wf_state(schedule.item), 'url' : url.set_url_context(('/business/' + schedule.item.type + 's/obj-' + str(schedule.item.parliamentary_item_id))), 'item_type' : schedule.item.type, }) return s_list
def update(self): # should only ever be called for contexts with these interfaces assert (IWorkspaceContainer.providedBy(self.context) or IWorkspaceSectionContext.providedBy(self.context)) self.sections = getMenu("workspace_context_navigation", self.context, self.request) # Append a trailing slash to each workspace viewlet navigation entry so # that the right context is always maintained when using this navigation. for section in self.sections: section["url"] = url.set_url_context(section["url"]) # get a translated copy of original workspace object workspace = translate_obj( misc.get_parent_with_interface(self, IWorkspaceContainer)) self.workspace_title = workspace.full_name
def _q_data_item(q): item = {} item["qid"]= "q_%s" % q.question_id if q.question_number: item["subject"] = u"Q %s %s" % (q.question_number, q.short_name) else: item["subject"] = q.short_name item["title"] = q.short_name item["result_item_class"] = "workflow-state-%s" % q.status item["url"] = url.set_url_context("questions/obj-%s" % q.question_id) item["status"] = misc.get_wf_state(q) item["status_date"] = date_formatter.format(q.status_date) item["owner"] = "%s %s" %(q.owner.first_name, q.owner.last_name) item["type"] = _(q.type) item["to"] = q.ministry.short_name return item
def _json_values(self, nodes): """Return nodes as JSON""" values = [] for node in nodes: d = {} for field in self.fields: fn = field.__name__ d[fn] = getattr(node, fn, None) v = d[fn] if isinstance(v, datetime.datetime): d[fn] = v.strftime("%F %I:%M %p") elif isinstance(v, datetime.date): d[fn] = v.strftime("%F") d["object_id"] = url.set_url_context(container.stringKey(node)) values.append(d) return values
def _setData(self): """Get the data of the query """ data_list = [] results = self.query.all() formatter = date.getLocaleFormatter(self.request, "date", "long") time_formatter = date.getLocaleFormatter(self.request, "time", "short") for result in results: data = {} data["subject"] = result.short_name # this tab appears in the workspace pi/ view... data["url"] = url.set_url_context("../calendar/sittings/obj-%i/schedule" % result.sitting_id) # Note: same UI is also displayed at: # /business/sittings/obj-%i/schedule % result.sitting_id data["items"] = "" data["status"] = misc.get_wf_state(result) data["status_date"] = formatter.format(result.status_date) data["owner"] = "" data["type"] = result.group.type data["group"] = u"%s %s" % ( result.group.type.capitalize(), result.group.short_name) data["time_from_to"] = ( time_formatter.format(result.start_date), time_formatter.format(result.end_date)) data["date"] = formatter.format(result.start_date) if result.venue: data["venue"] = _(result.venue.short_name) #else: # date["venue"] = "" if type(result)==domain.Question: data["to"] = result.ministry.short_name else: data["to"]= "" # past, present, future today = datetime.datetime.today().date() startday = result.start_date.date() if today==startday: data["css_class"] = "present" elif today>startday: data["css_class"] = "past" else: data["css_class"] = "future" data_list.append(data) self._data = data_list
def _q_data_item(q): item = {} item["qid"] = "q_%s" % q.question_id if q.question_number: item["subject"] = u"Q %s %s" % (q.question_number, q.short_name) else: item["subject"] = q.short_name item["title"] = q.short_name item["result_item_class"] = "workflow-state-%s" % q.status item["url"] = url.set_url_context("questions/obj-%s" % q.question_id) item["status"] = misc.get_wf_state(q) item["status_date"] = date_formatter.format(q.status_date) item["owner"] = "%s %s" % (q.owner.first_name, q.owner.last_name) item["type"] = _(q.type) item["to"] = q.ministry.short_name return item
def _setData(self): """Get the data of the query """ data_list = [] results = self.query.all() formatter = date.getLocaleFormatter(self.request, "date", "long") time_formatter = date.getLocaleFormatter(self.request, "time", "short") for result in results: data = {} data["subject"] = result.short_name # this tab appears in the workspace pi/ view... data["url"] = url.set_url_context( "../calendar/sittings/obj-%i/schedule" % result.sitting_id) # Note: same UI is also displayed at: # /business/sittings/obj-%i/schedule % result.sitting_id data["items"] = "" data["status"] = misc.get_wf_state(result) data["status_date"] = formatter.format(result.status_date) data["owner"] = "" data["type"] = result.group.type data["group"] = u"%s %s" % (result.group.type.capitalize(), result.group.short_name) data["time_from_to"] = (time_formatter.format(result.start_date), time_formatter.format(result.end_date)) data["date"] = formatter.format(result.start_date) if result.venue: data["venue"] = _(result.venue.short_name) #else: # date["venue"] = "" if type(result) == domain.Question: data["to"] = result.ministry.short_name else: data["to"] = "" # past, present, future today = datetime.datetime.today().date() startday = result.start_date.date() if today == startday: data["css_class"] = "present" elif today > startday: data["css_class"] = "past" else: data["css_class"] = "future" data_list.append(data) self._data = data_list
def __call__(self): request = self.request try: first_workspace = IAnnotations(request)["layer_data"].workspaces[0] to_url = "/workspace/obj-%s/pi" % first_workspace.group_id except: to_url = "/workspace" # !+TRAILING_SLASH(mr, sep-2010) this is still needed? to_url = url.set_url_context(to_url) if url.get_destination_url_path(request) != to_url: # never redirect to same destination! log.warn("WorkspaceRootRedirect %s -> %s" % (request.getURL(), to_url)) request.response.redirect(to_url) else: # !+ # user has no workspaces and is requesting /workspace view # return the "no workspace" *rendered* view for /workspace return component.getMultiAdapter( (self.context, request), name="no-workspace-index")()
def get_sitting_items(self, sitting): s_list = [] if sitting.status in get_states('groupsitting', tagged=['agendaprivate']): return s_list else: for schedule in sitting.item_schedule: s_list.append({ 'name': schedule.item.short_name, 'status': misc.get_wf_state(schedule.item), 'url': url.set_url_context( ('/business/' + schedule.item.type + 's/obj-' + str(schedule.item.parliamentary_item_id))), 'item_type': schedule.item.type, }) return s_list
def __call__(self): request = self.request try: first_workspace = IAnnotations(request)["layer_data"].workspaces[0] to_url = "/workspace/obj-%s/pi" % first_workspace.group_id except: to_url = "/workspace" # !+TRAILING_SLASH(mr, sep-2010) this is still needed? to_url = url.set_url_context(to_url) if url.get_destination_url_path(request) != to_url: # never redirect to same destination! log.warn("WorkspaceRootRedirect %s -> %s" % (request.getURL(), to_url)) request.response.redirect(to_url) else: # !+ # user has no workspaces and is requesting /workspace view # return the "no workspace" *rendered* view for /workspace return component.getMultiAdapter((self.context, request), name="no-workspace-index")()
def update(self): need('yui-dragdrop') need('yui-container') session = Session() group_id = self.get_group_id() items = tuple(session.query(self.model).filter( sql.and_( self.model.status.in_(self.states), self.model.group_id == group_id) )) sitting = self._parent._parent.context scheduled_item_ids = [item.item_id for item in sitting.item_schedule] # add location to items gsm = component.getSiteManager() adapter = gsm.adapters.lookup( (interface.implementedBy(self.model), interface.providedBy(self)), ILocation) items = [adapter(item, None) for item in items] # for each item, format dictionary for use in template self.items = [{ 'title': properties.title, 'name': item.__class__.__name__, 'description': properties.description, #'date': _(u"$F", mapping={'F': # datetimedict.fromdatetime(item.changes[-1].date)}), 'date': item.changes[-1].date_active, 'state': _(IWorkflow(item).workflow.states[item.status].title), 'id': item.parliamentary_item_id, 'class': (item.parliamentary_item_id in scheduled_item_ids) and "dd-disable" or "", 'url': url.set_url_context(url.absoluteURL(item, self.request)) } for (item, properties) in [ (item, (IDCDescriptiveProperties.providedBy(item) and item or IDCDescriptiveProperties(item))) for item in items ] ]
def get_sitting_items(self, sitting): s_list = [] if sitting.status in get_states('groupsitting',tagged=['agendaprivate']): return s_list else: # !+DCPROPERTIES(murithi, april-2011) Factor out properties+i18n to DC for schedule in sitting.item_schedule: descriptor = queryModelDescriptor(schedule.item.__class__) s_list.append({ 'name': IDCDescriptiveProperties(schedule.item).title, 'status' : str(misc.get_wf_state(schedule.item)) , 'url' : url.set_url_context(('/business/' + schedule.item.type + 's/obj-' + str(schedule.item.parliamentary_item_id))), 'item_type': schedule.item.type, 'item_type_title' : ( descriptor.display_name if descriptor else schedule.item.type ), }) return s_list
def update(self): need('yui-dragdrop') need('yui-container') session = Session() items = tuple( session.query(self.model).filter(self.model.status.in_( self.states))) sitting = self._parent._parent.context scheduled_item_ids = [item.item_id for item in sitting.item_schedule] # add location to items gsm = component.getSiteManager() adapter = gsm.adapters.lookup( (interface.implementedBy(self.model), interface.providedBy(self)), ILocation) items = [adapter(item, None) for item in items] site_url = url.absoluteURL(getSite(), self.request) # for each item, format dictionary for use in template self.items = [{ 'title': properties.title, 'name': item.__class__.__name__, 'description': properties.description, # 'date': _(u"$F", mapping={"F": # datetimedict.fromdatetime(item.changes[-1].date)}), #'date':item.changes[-1].date, # not every item has a auditlog (headings) use last status change instead. 'date':item.status_date, # 'state': IWorkflow(item).workflow.states[item.status].title, 'id': item.parliamentary_item_id, 'class': (item.parliamentary_item_id in scheduled_item_ids) and "dd-disable" or "", 'url': url.set_url_context(site_url+('/business/%ss/obj-%s' % (item.type, item.parliamentary_item_id))) } for item, properties in \ [(item, (IDCDescriptiveProperties.providedBy(item) and item or \ IDCDescriptiveProperties(item))) for item in items]]
def update(self): need('yui-dragdrop') need('yui-container') session = Session() items = tuple(session.query(self.model).filter( self.model.status.in_(self.states))) sitting = self._parent._parent.context scheduled_item_ids = [item.item_id for item in sitting.item_schedule] # add location to items gsm = component.getSiteManager() adapter = gsm.adapters.lookup( (interface.implementedBy(self.model), interface.providedBy(self)), ILocation) items = [adapter(item, None) for item in items] site_url = url.absoluteURL(getSite(), self.request) # for each item, format dictionary for use in template self.items = [{ 'title': properties.title, 'name': item.__class__.__name__, 'description': properties.description, # 'date': _(u"$F", mapping={"F": # datetimedict.fromdatetime(item.changes[-1].date)}), #'date':item.changes[-1].date, # not every item has a auditlog (headings) use last status change instead. 'date':item.status_date, # 'state': IWorkflow(item).workflow.states[item.status].title, 'id': item.parliamentary_item_id, 'class': (item.parliamentary_item_id in scheduled_item_ids) and "dd-disable" or "", 'url': url.set_url_context(site_url+('/business/%ss/obj-%s' % (item.type, item.parliamentary_item_id))) } for item, properties in \ [(item, (IDCDescriptiveProperties.providedBy(item) and item or \ IDCDescriptiveProperties(item))) for item in items]]
def get_sitting_items(self, sitting): s_list = [] if sitting.status in get_states('groupsitting', tagged=['agendaprivate']): return s_list else: # !+DCPROPERTIES(murithi, april-2011) Factor out properties+i18n to DC for schedule in sitting.item_schedule: descriptor = queryModelDescriptor(schedule.item.__class__) s_list.append({ 'name': IDCDescriptiveProperties(schedule.item).title, 'status': str(misc.get_wf_state(schedule.item)), 'url': url.set_url_context( ('/business/' + schedule.item.type + 's/obj-' + str(schedule.item.parliamentary_item_id))), 'item_type': schedule.item.type, 'item_type_title': (descriptor.display_name if descriptor else schedule.item.type), }) return s_list
def _jsonValues(self, nodes, fields): """ filter values from the nodes to respresent in json, currently that means some footwork around, probably better as another set of adapters. """ def get_anno_getters_by_field_name(): # dict of domain_annotation field getters by name, for fast lookup da_getters = dict([(da_field.name, getattr(da_field.listing_column, "getter", None)) for da_field in self.domain_annotation.fields]) return da_getters getters_by_field_name = get_anno_getters_by_field_name() values = [] for n in nodes: d = {} for field in fields: f = field.__name__ getter = getters_by_field_name.get(f, None) if getter is not None: d[f] = v = getter(n, field) else: d[f] = v = field.query(n) # !+i18n_DATE(mr, sep-2010) two problems with the isinstance # tests below: # a) they seem to always fail (no field values of this type?) # b) this is incorrect way to localize dates if isinstance(v, datetime.datetime): d[f] = v.strftime("%F %I:%M %p") elif isinstance(v, datetime.date): d[f] = v.strftime("%F") d["object_id"] = url.set_url_context(stringKey(n)) values.append(d) return values
def get_sitting_items(sitting, request, include_actions=False): items = [] if sitting.status in get_states("groupsitting", keys=["draft_agenda", "published_agenda"]): order = "planned_order" else: order = "real_order" schedulings = map(removeSecurityProxy, sitting.items.batch(order_by=order, limit=None)) site_url = url.absoluteURL(getSite(), request) for scheduling in schedulings: item = ProxyFactory(location_wrapped(scheduling.item, sitting)) props = IDCDescriptiveProperties.providedBy(item) and item or \ IDCDescriptiveProperties(item) discussions = tuple(scheduling.discussions.values()) discussion = discussions and discussions[0] or None truncated_discussion = None if ((discussion is not None) and (discussion.body_text is not None)): #truncate discussion to first hundred characters t_discussion = discussion.body_text[0:100] try: #truncate discussion to first two lines index = t_discussion.index("<br>") index2 = t_discussion.index("<br>", index + 4) truncated_discussion = t_discussion[0:index2] + "..." except ValueError: truncated_discussion = t_discussion + "..." wfc = IWorkflowController(item, None) state_title = wfc.workflow.get_state(item.status).title record = { 'title': props.title, 'description': props.description, 'name': stringKey(scheduling), 'status': item.status, 'type': item.type.capitalize, 't': item.type, 'state_title': state_title, #'category_id': scheduling.category_id, #'category': scheduling.category, 'discussion': discussion, 'truncated_discussion': truncated_discussion, 'delete_url': "%s/delete" % url.absoluteURL(scheduling, request), 'url': url.set_url_context(site_url + ('/business/%ss/obj-%s' % (item.type, item.parliamentary_item_id))) } if include_actions: record['actions'] = get_scheduling_actions(scheduling, request) record['workflow'] = get_workflow_actions(item, request) discussion_actions = get_discussion_actions(discussion, request) if discussion_actions: assert len(discussion_actions) == 1 record['discussion_action'] = discussion_actions[0] else: record['discussion_action'] = None items.append(record) return items
def _item_url(self, item): return url.set_url_context("%s/business/%ss/obj-%s" % ( url.absoluteURL(getSite(), self.request), item.type, item.parliamentary_item_id))
def _item_url(self, item): return url.set_url_context(url.absoluteURL(item, self.request))
def _item_url(self, item): return url.set_url_context( "%s/business/%ss/obj-%s" % (url.absoluteURL(getSite(), self.request), item.type, item.doc_id))
class WorkspaceContainerIndexRedirect(_IndexRedirect): # !+TRAILING_SLASH(mr, sep-2010) this is still needed? index_name = url.set_url_context("pi")