Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #8
0
 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
Beispiel #9
0
 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
Beispiel #10
0
    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
Beispiel #11
0
 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
Beispiel #13
0
 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
Beispiel #15
0
    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
Beispiel #16
0
 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
Beispiel #17
0
 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
Beispiel #19
0
 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
Beispiel #21
0
    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
Beispiel #22
0
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
Beispiel #23
0
    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
Beispiel #26
0
 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
Beispiel #27
0
 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
Beispiel #29
0
 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
Beispiel #30
0
 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
Beispiel #31
0
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
Beispiel #32
0
 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
Beispiel #33
0
    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]
        ]
Beispiel #34
0
 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
Beispiel #35
0
    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
Beispiel #38
0
    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
Beispiel #40
0
 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
Beispiel #41
0
 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")()
Beispiel #43
0
 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
Beispiel #44
0
 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")()
Beispiel #45
0
    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 ]
        ]
Beispiel #46
0
 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
Beispiel #47
0
    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]]
Beispiel #48
0
    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]]
Beispiel #49
0
 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
Beispiel #50
0
    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
Beispiel #51
0
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
Beispiel #52
0
 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))
Beispiel #53
0
 def _item_url(self, item):
     return url.set_url_context(url.absoluteURL(item, self.request))
Beispiel #54
0
 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))
Beispiel #55
0
 def _item_url(self, item):
     return url.set_url_context(url.absoluteURL(item, self.request))
Beispiel #56
0
class WorkspaceContainerIndexRedirect(_IndexRedirect):
    # !+TRAILING_SLASH(mr, sep-2010) this is still needed?
    index_name = url.set_url_context("pi")