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()]
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() ]
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 }
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 }
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()
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 }
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()
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
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
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
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
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()
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 }
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
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()
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 }
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
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()
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
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 }
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"> << </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"> >> </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")
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 }
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 }
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 }