Exemplo n.º 1
0
def get_ministers(ministry):
    """Get comma-seperated list of emails of all persons who are 
    ministry members.
    """
    query = Session().query(_Minister).filter(
        _Minister.group_id == ministry.group_id)
    return [minister for minister in query.all()]
Exemplo n.º 2
0
def get_ministers(ministry):
    """Get comma-seperated list of emails of all persons who are 
    ministry members.
    """
    query = Session().query(_Minister).filter(
        _Minister.group_id == ministry.group_id)
    return [ minister for minister in query.all() ]
Exemplo n.º 3
0
class MemberTranscriptsViewlet(ViewletBase):
    """A transcripts for an MP 
    """

    view_name = "Transcripts"
    view_id = "transcripts"

    render = ViewPageTemplateFile("templates/mp_transcript_viewlet.pt")

    def __init__(self, context, request, view, manager):
        super(MemberTranscriptsViewlet, self).__init__(context, request, view,
                                                       manager)
        user_id = self.context.user_id
        print "MEMBER TRANCRIPTS", user_id
        self.query = Session().query(domain.Transcript).filter(
            sql.and_(domain.Transcript.user_id == user_id)).order_by(
                domain.Transcript.start_date.desc())

    def results(self):
        for result in self.query.all():
            yield {
                "start_date": result.start_date,
                "end_date": result.end_date,
                "text": result.text
            }
Exemplo n.º 4
0
class MemberItemsViewlet(browser.BungeniItemsViewlet):
    """A tab with bills, motions etc for an MP 
    (the "parliamentary activities" tab of of the "member" view)
    """
    #!+weight = 40

    states = _get_public_states_for(*[
        ti for (key, ti) in capi.iter_type_info()
        if ti.custom and issubclass(ti.domain_model, domain.Doc)
    ])

    render = ViewPageTemplateFile("templates/mp-item-viewlet.pt")

    def __init__(self, context, request, view, manager):
        super(MemberItemsViewlet, self).__init__(context, request, view,
                                                 manager)
        user_id = self.context.user_id
        chamber_id = self.context.group_id
        self.query = Session().query(domain.Doc).filter(
            sql.and_(
                domain.Doc.owner_id == user_id,
                domain.Doc.chamber_id == chamber_id,
                domain.Doc.status.in_(self.states),
            ))
        #self.for_display = (self.query.count() > 0)
        self.formatter = self.get_date_formatter("date", "medium")

    def update(self):
        user_id = self.context.user_id
        chamber_id = self.context.group_id
        wf = capi.get_type_info("signatory").workflow
        session = Session()
        # add cosigned items
        signed_pi_ids = [
            sgn.head_id for sgn in session.query(domain.Signatory).filter(
                sql.and_(
                    domain.Signatory.user_id == user_id,
                    domain.Signatory.status.in_(
                        wf.get_state_ids(tagged=["public"])),
                )).all()
        ]
        if len(signed_pi_ids) > 0:
            self.query = self.query.union(
                session.query(domain.Doc).filter(
                    sql.and_(domain.Doc.chamber_id == chamber_id,
                             domain.Doc.status.in_(self.states),
                             domain.Doc.doc_id.in_(signed_pi_ids))))
        self.query = self.query.order_by(domain.Doc.doc_id.desc())

    @property
    def items(self):
        for item in self.query.all():
            _url = "/business/%ss/obj-%i" % (item.type, item.doc_id)
            yield {
                "type": item.type,
                "title": item.title,
                "status": misc.get_wf_state(item),
                "submission_date": item.submission_date,
                "url": _url
            }
Exemplo n.º 5
0
class PersonInfo(BungeniAttributeDisplay):
    """Bio Info / personal data about the MP.
    """
    for_display = True
    mode = "view"

    form_name = _(u"Personal Info")
    view_id = "personal-info"

    def __init__(self, context, request, view, manager):
        self.context = context
        self.request = request
        self.__parent__ = context.__parent__
        self.manager = manager
        self.query = None
        md = queryModelDescriptor(domain.User)
        self.form_fields = md.fields #.select("user_id", "start_date", "end_date")

    def update(self):
        user_id = self.context.user_id
        parent = self.context.__parent__
        self.query = Session().query(domain.User
            ).filter(domain.User.user_id == user_id)
        self.context = self.query.all()[0]
        self.context.__parent__ = parent
        super(PersonInfo, self).update()
Exemplo n.º 6
0
class MemberTranscriptsViewlet(ViewletBase):
    """A transcripts for an MP 
    """
    
    view_name = "Transcripts"
    view_id = "transcripts"
    
    render = ViewPageTemplateFile("templates/mp_transcript_viewlet.pt")
    
    def __init__(self, context, request, view, manager):
        super(MemberTranscriptsViewlet, self).__init__(
            context, request, view, manager)
        user_id = self.context.user_id
        print "MEMBER TRANCRIPTS", user_id
        self.query = Session().query(domain.Transcript).filter(
            sql.and_(
                domain.Transcript.user_id == user_id
            )).order_by(domain.Transcript.start_date.desc())
    
    def results(self):
        for result in self.query.all():
            yield {"start_date": result.start_date,
                   "end_date": result.end_date,
                   "text": result.text
                  }
Exemplo n.º 7
0
class PersonInfo(BungeniAttributeDisplay):
    """Bio Info / personal data about the MP.
    """
    for_display = True
    mode = "view"

    form_name = _(u"Personal Info")
    view_id = "personal-info"

    def __init__(self, context, request, view, manager):
        self.context = context
        self.request = request
        self.__parent__ = context.__parent__
        self.manager = manager
        self.query = None
        md = utils.get_descriptor(domain.User)
        self.form_fields = md.fields #.select("user_id", "start_date", "end_date")

    def update(self):
        user_id = self.context.user_id
        parent = self.context.__parent__
        self.query = Session().query(domain.User
            ).filter(domain.User.user_id == user_id)
        self.context = self.query.all()[0]
        self.context.__parent__ = parent
        super(PersonInfo, self).update()
Exemplo n.º 8
0
def get_user_delegations(user):
    """Get all delegations for a given user.
    Both delegator and delegee must be active.
    """
    query = Session().query(domain.UserDelegation).filter(
        sa.and_(domain.UserDelegation.delegation_id == user.user_id))
    results = query.all()
    for result in results:
        if ((result.user.active_p == "A") and (len(result.user.login) > 1)
                and (result.delegation.active_p == "A")):
            yield result.user
Exemplo n.º 9
0
def validate_open_interval(obj, domain_model):
    query = Session().query(domain_model).filter(domain_model.end_date == None)
    results = query.all()
    if results:
        if obj:
            for result in results:
                if stringKey(result) == stringKey(obj):
                    continue
                else:
                    yield result
        else:
            for result in results:
                yield result
Exemplo n.º 10
0
def get_user_delegations(user):
    """Get all delegations for a given user.
    Both delegator and delegee must be active.
    """
    query = Session().query(domain.UserDelegation).filter(
        sa.and_(domain.UserDelegation.delegation_id == user.user_id))
    results = query.all()
    for result in results:
        if ((result.user.active_p == "A") and
                (len(result.user.login) > 1) and
                (result.delegation.active_p == "A")
            ):
            yield result.user
Exemplo n.º 11
0
def validate_open_interval(obj, domain_model):
    query = Session().query(domain_model).filter(domain_model.end_date == None)
    results = query.all()
    if results:
        if obj:
            for result in results:
                if stringKey(result) == stringKey(obj):
                    continue
                else:
                    yield result
        else:
           for result in results:
                yield result
Exemplo n.º 12
0
def validate_date_in_interval(obj, domain_model, date):
    query = Session().query(domain_model).filter(sql.expression.between(
            date, domain_model.start_date, domain_model.end_date))
    results = query.all()
    if results:
        if obj:
            # the object itself can overlap
            for result in results:
                if stringKey(result) == stringKey(obj):
                    continue
                else:
                    yield result
        else:
            # all results indicate an error
           for result in results:
                yield result
Exemplo n.º 13
0
 def getDayClass(self, Date):
     """Return the class settings for that calendar day.
     """
     css_class = ""
     if self.Date.month != Date.month:
         css_class = css_class + "other-month "
     if Date < datetime.date.today():
         css_class = css_class + "past-date "
     if Date == datetime.date.today():
         css_class = css_class + "current-date "
     if Date.weekday() in prefs.getWeekendDays():
         css_class = css_class + "weekend-date "
     query = Session().query(domain.HoliDay).filter(domain.HoliDay.holiday_date == Date)
     results = query.all()
     if results:
         css_class = css_class + "holyday-date "
     return css_class.strip()
Exemplo n.º 14
0
class MemberItemsViewlet(browser.BungeniItemsViewlet):
    """A tab with bills, motions etc for an MP 
    (the "parliamentary activities" tab of of the "member" view)
    """
    states = \
        get_states("agendaitem", tagged=["public"]) + \
        get_states("bill", not_tagged=["private"]) + \
        get_states("motion", tagged=["public"]) + \
        get_states("question", tagged=["public"]) + \
        get_states("tableddocument", tagged=["public"])

    view_title = "Parliamentary activities"
    view_id = "mp-items"

    # evoque
    render = z3evoque.ViewTemplateFile("workspace_viewlets.html#mp_items")

    # zpt
    #render = ViewPageTemplateFile("templates/mp_item_viewlet.pt")

    def __init__(self, context, request, view, manager):
        super(MemberItemsViewlet, self).__init__(context, request, view,
                                                 manager)
        user_id = self.context.user_id
        parliament_id = self.context.group_id
        self.query = Session().query(domain.ParliamentaryItem).filter(
            sql.and_(
                domain.ParliamentaryItem.owner_id == user_id,
                domain.ParliamentaryItem.parliament_id == parliament_id,
                domain.ParliamentaryItem.status.in_(self.states),
            )).order_by(domain.ParliamentaryItem.parliamentary_item_id.desc())
        #self.for_display = (self.query.count() > 0)
        self.formatter = self.get_date_formatter("date", "medium")

    @property
    def items(self):
        for item in self.query.all():
            _url = "/business/%ss/obj-%i" % (item.type,
                                             item.parliamentary_item_id)
            yield {
                "type": item.type,
                "short_name": item.short_name,
                "status": misc.get_wf_state(item),
                "submission_date": item.submission_date,
                "url": _url
            }
Exemplo n.º 15
0
def validate_date_in_interval(obj, domain_model, date):
    query = Session().query(domain_model).filter(
        sql.expression.between(date, domain_model.start_date,
                               domain_model.end_date))
    results = query.all()
    if results:
        if obj:
            # the object itself can overlap
            for result in results:
                if stringKey(result) == stringKey(obj):
                    continue
                else:
                    yield result
        else:
            # all results indicate an error
            for result in results:
                yield result
Exemplo n.º 16
0
 def getDayClass(self, Date):
     """Return the class settings for that calendar day.
     """
     css_class = ""
     if self.Date.month != Date.month:
         css_class = css_class + "other-month "
     if Date < datetime.date.today():
         css_class = css_class + "past-date "
     if Date == datetime.date.today():
         css_class = css_class + "current-date "
     if Date.weekday() in prefs.getWeekendDays():
         css_class = css_class + "weekend-date "
     query = Session().query(domain.HoliDay
         ).filter(domain.HoliDay.holiday_date == Date)
     results = query.all()
     if results:
         css_class = css_class + "holyday-date "
     return css_class.strip()
Exemplo n.º 17
0
class MemberItemsViewlet(browser.BungeniItemsViewlet):
    """A tab with bills, motions etc for an MP 
    (the "parliamentary activities" tab of of the "member" view)
    """
    states = \
        get_states("agendaitem", tagged=["public"]) + \
        get_states("bill", not_tagged=["private"]) + \
        get_states("motion", tagged=["public"]) + \
        get_states("question", tagged=["public"]) + \
        get_states("tableddocument", tagged=["public"])

    view_title = "Parliamentary activities"
    view_id = "mp-items"

    # evoque
    render = z3evoque.ViewTemplateFile("workspace_viewlets.html#mp_items")

    # zpt
    #render = ViewPageTemplateFile("templates/mp_item_viewlet.pt")

    def __init__(self, context, request, view, manager):
        super(MemberItemsViewlet, self).__init__(
            context, request, view, manager)
        user_id = self.context.user_id
        parliament_id = self.context.group_id
        self.query = Session().query(domain.ParliamentaryItem).filter(
            sql.and_(
                domain.ParliamentaryItem.owner_id == user_id,
                domain.ParliamentaryItem.parliament_id == parliament_id,
                domain.ParliamentaryItem.status.in_(self.states),
            )).order_by(domain.ParliamentaryItem.parliamentary_item_id.desc())
        #self.for_display = (self.query.count() > 0)
        self.formatter = self.get_date_formatter("date", "medium")

    @property
    def items(self):
        for item in self.query.all():
            _url = "/business/%ss/obj-%i" % (item.type,
                item.parliamentary_item_id)
            yield {"type": item.type,
                "short_name": item.short_name,
                "status": misc.get_wf_state(item),
                "submission_date" : item.submission_date,
                "url": _url }
Exemplo n.º 18
0
 def _get_items(self):
     item_type = capi.get_type_info(self.context).workflow_key
     query = Session().query(domain.ItemSchedule).filter(
         sql.and_(domain.ItemSchedule.item_id == self.item_id,
                  domain.ItemSchedule.item_type == item_type))
     items = []
     for item in query.all():
         items.append(
             dict(sitting_name=IDCDescriptiveProperties(item.sitting).title,
                  sitting_venue=(IDCDescriptiveProperties(
                      item.sitting.venue).title if item.sitting.venue else
                                 _(u"Unknown venue")),
                  minutes=[
                      dict(text=minute.body)
                      for minute in item.itemdiscussions
                  ]))
     if not items:
         self.for_display = False
     return items
Exemplo n.º 19
0
class DocMinutesViewlet(BungeniAttributeDisplay):

    mode = "view"
    for_display = True

    form_name = _(u"Minutes")
    view_id = "minutes"

    weight = 10

    def __init__(self, context, request, view, manager):
        self.request = request
        self.context = context
        self.manager = manager
        trusted = removeSecurityProxy(context)
        try:
            item_id = trusted.doc_id
        except AttributeError:
            self.for_display = False
            return
        self.query = Session().query(domain.ItemScheduleDiscussion).filter(
            sql.and_(
                domain.ItemScheduleDiscussion.schedule_id == \
                    domain.ItemSchedule.schedule_id,
                domain.ItemSchedule.item_id == item_id
            )
        )
        #self.context = self.query.all()[0]
        self.for_display = self.query.count() > 0

    def update(self):
        parent = self.context.__parent__
        try:
            self.context = self.query.all()[0]
        except IndexError:
            self.context = None
            return

        self.context.__parent__ = parent
        super(DocMinutesViewlet, self).update()
Exemplo n.º 20
0
class DocMinutesViewlet(BungeniAttributeDisplay):

    mode = "view"
    for_display = True

    form_name = _(u"Minutes")
    view_id = "minutes"
    
    weight = 10
    
    def __init__(self, context, request, view, manager):
        self.request = request
        self.context = context
        self.manager = manager
        trusted = removeSecurityProxy(context)
        try:
            item_id = trusted.doc_id
        except AttributeError:
            self.for_display = False
            return
        self.query = Session().query(domain.ItemScheduleDiscussion).filter(
            sql.and_(
                domain.ItemScheduleDiscussion.schedule_id == \
                    domain.ItemSchedule.schedule_id,
                domain.ItemSchedule.item_id == item_id
            )
        )
        #self.context = self.query.all()[0]
        self.for_display = self.query.count() > 0

    def update(self):
        parent = self.context.__parent__
        try:
            self.context = self.query.all()[0]
        except IndexError:
            self.context = None
            return

        self.context.__parent__ = parent
        super(DocMinutesViewlet, self).update()
Exemplo n.º 21
0
 def _get_items(self):
     item_type = capi.get_type_info(self.context).workflow_key
     query = Session().query(domain.ItemSchedule).filter(
         sql.and_(
             domain.ItemSchedule.item_id == self.item_id,
             domain.ItemSchedule.item_type == item_type
         )
     )
     items = []
     for item in query.all():
         items.append(dict(
             sitting_name=IDCDescriptiveProperties(item.sitting).title,
             sitting_venue=(
                 IDCDescriptiveProperties(item.sitting.venue).title
                 if item.sitting.venue else _(u"Unknown venue")),
             minutes=[ dict(text=minute.body) 
                 for minute in item.itemdiscussions
             ]
         ))
     if not items:
         self.for_display = False
     return items
Exemplo n.º 22
0
class MemberSpeechesViewlet(SubFormViewletManager):
    """A transcripts for an MP 
    """
    
    view_name = "Speeches"
    view_id = "speeches"
    
    render = ViewPageTemplateFile("templates/mp_transcript_viewlet.pt")
    
    def __init__(self, context, request, view, manager):
        super(MemberSpeechesViewlet, self).__init__(
            context, request, view, manager)
        user_id = self.context.user_id
        self.query = Session().query(domain.Speech).filter(
            sql.and_(
                domain.Speech.person_id == user_id
            )).order_by(domain.Transcript.start_date.desc())
    
    def results(self):
        for result in self.query.all():
            yield {"start_date": result.start_date,
                   "end_date": result.end_date,
                   "text": result.text
                  }
Exemplo n.º 23
0
class SessionCalendarViewlet(browser.BungeniItemsViewlet):
    """Display a monthly calendar with all sittings for a session.
    """
    def __init__(self, context, request, view, manager):
        super(SessionCalendarViewlet, self).__init__(
            context, request, view, manager)
        self.query = None
        self.Date = datetime.date.today() # !+ self.today
        self.type_query = Session().query(domain.GroupSittingType)

    def _getDisplayDate(self, request):
        display_date = date.getDisplayDate(self.request)
        session = self.context
        if display_date:
            if session.end_date:
                if display_date > session.end_date:
                    display_date = session.end_date
            if session.start_date > display_date:
                display_date = session.start_date
        else:
            display_date = session.end_date
        return display_date

    def current_sittings_query(self, date):
        session = removeSecurityProxy(self.context)
        group_id = session.parliament_id
        start_date = session.start_date
        if start_date.month < date.month:
            start_date = datetime.date(date.year, date.month, 1)
        end_date = session.end_date
        if end_date:
            if end_date.month > date.month:
                end_date = date + relativedelta.relativedelta(day=31)
        else:
            end_date = date + relativedelta.relativedelta(day=31)

        s_filter = sql.and_(
            domain.GroupSitting.group_id == group_id,
            sql.between(
                domain.GroupSitting.start_date,
                start_date, end_date
            )
        )
        return Session().query(domain.GroupSitting).filter(s_filter).order_by(
                domain.GroupSitting.start_date)

    def previous(self):
        """Return link to the previous month, 
        if the session start date is prior to the current month
        """
        session = self.context
        if self.Date.month == 1:
            month = 12
            year = self.Date.year - 1
        else:
            month = self.Date.month - 1
            year = self.Date.year
        try:
            prevdate = datetime.date(year, month, self.Date.day)
        except:
            # in case we try to move to Feb 31st (or so)
            prevdate = datetime.date(year, month, 15)
        if session.start_date < datetime.date(
                self.Date.year, self.Date.month, 1):
            return """<a href="?date=%s"> &lt;&lt; </a>""" % (
                datetime.date.strftime(prevdate, "%Y-%m-%d"))
        else:
            return ""

    def next(self):
        """Return link to the next month if the end date,
        if the session is after the 1st of the next month
        """
        session = self.context
        if self.Date.month == 12:
            month = 1
            year = self.Date.year + 1
        else:
            month = self.Date.month + 1
            year = self.Date.year
        try:
            nextdate = datetime.date(year, month, self.Date.day)
        except:
            # if we try to move from 31 of jan to 31 of feb or so
            nextdate = datetime.date(year, month, 15)
        if session:
            if session.end_date:
                if session.end_date < datetime.date(year, month, 1):
                    return ""
        return """<a href="?date=%s"> &gt;&gt; </a>""" % (
            datetime.date.strftime(nextdate, "%Y-%m-%d"))

    def _get_items(self):
        """
        return the data of the query
        """
        sit_types = {}
        type_results = self.type_query.all()
        #Sitting type is commented out below because it is not set during
        #creation of a sitting but is left here because it may be used in the
        #future related to r7243
        #for sit_type in type_results:
        #    sit_types[sit_type.group_sitting_type_id] = sit_type.group_sitting_type
        data_list = []
        path = "/calendar/group/sittings/"
        formatter = self.get_date_formatter("time", "short")
        for result in self.query.all():
            data = {}
            data["sittingid"] = ("sid_" + str(result.group_sitting_id))
            data["sid"] = result.group_sitting_id
            data["short_name"] = "%s - %s" % (
                formatter.format(result.start_date),
                formatter.format(result.end_date)
            )
            data["start_date"] = result.start_date
            data["end_date"] = result.end_date
            data["start_time"] = result.start_date.time()
            data["end_time"] = result.end_date.time()
            data["day"] = result.start_date.date()
            data["url"] = (path + "obj-" + str(result.group_sitting_id))
            data["did"] = ("dlid_" +
                datetime.datetime.strftime(result.start_date, "%Y-%m-%d")
                # +"_stid_" + str(result.group_sitting_type)
            )
            data_list.append(data)
        return data_list

    def getTdId(self, date):
        """
        return an Id for that td element:
        consiting of tdid- + date
        like tdid-2008-01-17
        """
        return "tdid-" + datetime.date.strftime(date, "%Y-%m-%d")

    def getDayClass(self, Date):
        """Return the class settings for that calendar day.
        """
        css_class = ""
        if self.Date.month != Date.month:
            css_class = css_class + "other-month "
        if Date < datetime.date.today():
            css_class = css_class + "past-date "
        if Date == datetime.date.today():
            css_class = css_class + "current-date "
        if Date.weekday() in prefs.getWeekendDays():
            css_class = css_class + "weekend-date "
        query = Session().query(domain.HoliDay
            ).filter(domain.HoliDay.holiday_date == Date)
        results = query.all()
        if results:
            css_class = css_class + "holyday-date "
        return css_class.strip()

    def getWeekNo(self, Date):
        """
        return the weeknumber for a given date
        """
        return Date.isocalendar()[1]

    def getSittings4Day(self, Date):
        """
        return the sittings for that day
        """
        day_data = []
        for data in self.items:
            if data["day"] == Date:
                day_data.append(data)
        return day_data

    def update(self):
        """
        refresh the query
        """
        self.Date = self._getDisplayDate(self.request)
        if not self.Date:
            self.Date = datetime.date.today()
        self.query = self.current_sittings_query(self.Date)
        self.monthcalendar = calendar.Calendar(prefs.getFirstDayOfWeek()
            ).monthdatescalendar(self.Date.year, self.Date.month)
        self.monthname = datetime.date.strftime(self.Date, "%B %Y")
        self.items = self._get_items()

    render = ViewPageTemplateFile("templates/session_calendar_viewlet.pt")
Exemplo n.º 24
0
class MemberItemsViewlet(browser.BungeniItemsViewlet):
    """A tab with bills, motions etc for an MP 
    (the "parliamentary activities" tab of of the "member" view)
    """
    # !+ un-hardwire, user defined document types
    states = \
        get_workflow("agendaitem").get_state_ids(tagged=["public"]) + \
        get_workflow("bill").get_state_ids(tagged=["public"]) + \
        get_workflow("motion").get_state_ids(tagged=["public"]) + \
        get_workflow("question").get_state_ids(tagged=["public"]) + \
        get_workflow("tableddocument").get_state_ids(tagged=["public"])

    render = ViewPageTemplateFile("templates/mp-item-viewlet.pt")

    def __init__(self, context, request, view, manager):
        super(MemberItemsViewlet, self).__init__(context, request, view,
                                                 manager)
        user_id = self.context.user_id
        parliament_id = self.context.group_id
        self.query = Session().query(domain.ParliamentaryItem).filter(
            sql.and_(
                domain.ParliamentaryItem.owner_id == user_id,
                domain.ParliamentaryItem.parliament_id == parliament_id,
                domain.ParliamentaryItem.status.in_(self.states),
            ))
        #self.for_display = (self.query.count() > 0)
        self.formatter = self.get_date_formatter("date", "medium")

    def update(self):
        user_id = self.context.user_id
        parliament_id = self.context.group_id
        session = Session()
        # add cosigned items
        signed_pi_ids = [
            sgn.item_id for sgn in session.query(domain.Signatory).filter(
                sql.and_(
                    domain.Signatory.user_id == user_id,
                    domain.Signatory.status.in_(
                        get_workflow("signatory").get_state_ids(
                            tagged=["public"])),
                )).all()
        ]
        if len(signed_pi_ids) > 0:
            self.query = self.query.union(
                session.query(domain.ParliamentaryItem).filter(
                    sql.and_(
                        domain.ParliamentaryItem.parliament_id ==
                        parliament_id,
                        domain.ParliamentaryItem.status.in_(self.states),
                        domain.ParliamentaryItem.parliamentary_item_id.in_(
                            signed_pi_ids))))
        self.query = self.query.order_by(
            domain.ParliamentaryItem.parliamentary_item_id.desc())

    @property
    def items(self):
        for item in self.query.all():
            _url = "/business/%ss/obj-%i" % (item.type,
                                             item.parliamentary_item_id)
            yield {
                "type": item.type,
                "short_name": item.short_name,
                "status": misc.get_wf_state(item),
                "submission_date": item.submission_date,
                "url": _url
            }
Exemplo n.º 25
0
class MemberItemsViewlet(browser.BungeniItemsViewlet):
    """A tab with bills, motions etc for an MP 
    (the "parliamentary activities" tab of of the "member" view)
    """
    states = _get_public_states_for( *[ ti 
        for (key, ti) in capi.iter_type_info() 
        if ti.custom and issubclass(ti.domain_model, domain.Doc) ] )
    
    render = ViewPageTemplateFile("templates/mp-item-viewlet.pt")

    def __init__(self, context, request, view, manager):
        super(MemberItemsViewlet, self).__init__(
            context, request, view, manager)
        user_id = self.context.user_id
        parliament_id = self.context.group_id
        self.query = Session().query(domain.Doc).filter(
            sql.and_(
                domain.Doc.owner_id == user_id,
                domain.Doc.parliament_id == parliament_id,
                domain.Doc.status.in_(self.states),
            ))
        #self.for_display = (self.query.count() > 0)
        self.formatter = self.get_date_formatter("date", "medium")
    
    def update(self):
        user_id = self.context.user_id
        parliament_id = self.context.group_id
        wf = capi.get_type_info("signatory").workflow
        session = Session()
        # add cosigned items
        signed_pi_ids = [sgn.head_id for sgn in
            session.query(domain.Signatory).filter(
                sql.and_(domain.Signatory.user_id == user_id,
                    domain.Signatory.status.in_(
                        wf.get_state_ids(tagged=["public"])
                    ),
                )
            ).all()
        ]
        if len(signed_pi_ids) > 0:
            self.query = self.query.union(
                session.query(domain.Doc).filter(
                    sql.and_(
                        domain.Doc.parliament_id == parliament_id,
                        domain.Doc.status.in_(self.states),
                        domain.Doc.doc_id.in_(
                            signed_pi_ids
                        )
                    )
                )
            )
        self.query = self.query.order_by(
            domain.Doc.doc_id.desc()
        )
    
    @property
    def items(self):
        for item in self.query.all():
            _url = "/business/%ss/obj-%i" % (item.type,
                item.doc_id)
            yield {"type": item.type,
                "title": item.title,
                "status": misc.get_wf_state(item),
                "submission_date" : item.submission_date,
                "url": _url }
Exemplo n.º 26
0
class MemberItemsViewlet(browser.BungeniItemsViewlet):
    """A tab with bills, motions etc for an MP 
    (the "parliamentary activities" tab of of the "member" view)
    """
    # !+ un-hardwire, user defined document types
    states = \
        get_workflow("agendaitem").get_state_ids(tagged=["public"]) + \
        get_workflow("bill").get_state_ids(tagged=["public"]) + \
        get_workflow("motion").get_state_ids(tagged=["public"]) + \
        get_workflow("question").get_state_ids(tagged=["public"]) + \
        get_workflow("tableddocument").get_state_ids(tagged=["public"])

    render = ViewPageTemplateFile("templates/mp-item-viewlet.pt")

    def __init__(self, context, request, view, manager):
        super(MemberItemsViewlet, self).__init__(
            context, request, view, manager)
        user_id = self.context.user_id
        parliament_id = self.context.group_id
        self.query = Session().query(domain.ParliamentaryItem).filter(
            sql.and_(
                domain.ParliamentaryItem.owner_id == user_id,
                domain.ParliamentaryItem.parliament_id == parliament_id,
                domain.ParliamentaryItem.status.in_(self.states),
            ))
        #self.for_display = (self.query.count() > 0)
        self.formatter = self.get_date_formatter("date", "medium")

    def update(self):
        user_id = self.context.user_id
        parliament_id = self.context.group_id
        session = Session()
        # add cosigned items
        signed_pi_ids = [sgn.item_id for sgn in
            session.query(domain.Signatory).filter(
                sql.and_(domain.Signatory.user_id == user_id,
                    domain.Signatory.status.in_(get_workflow(
                            "signatory").get_state_ids(tagged=["public"])
                    ),
                )
            ).all()
        ]
        if len(signed_pi_ids) > 0:
            self.query = self.query.union(
                session.query(domain.ParliamentaryItem).filter(
                    sql.and_(
                        domain.ParliamentaryItem.parliament_id == parliament_id,
                        domain.ParliamentaryItem.status.in_(self.states),
                        domain.ParliamentaryItem.parliamentary_item_id.in_(
                            signed_pi_ids
                        )
                    )
                )
            )
        self.query = self.query.order_by(
            domain.ParliamentaryItem.parliamentary_item_id.desc()
        )

    @property
    def items(self):
        for item in self.query.all():
            _url = "/business/%ss/obj-%i" % (item.type,
                item.parliamentary_item_id)
            yield {"type": item.type,
                "short_name": item.short_name,
                "status": misc.get_wf_state(item),
                "submission_date" : item.submission_date,
                "url": _url }