def username_choices(self): assert self.request.is_admin # safety net users = UserCollection(self.request.session) users = users.by_roles('admin', 'editor') users = users.with_entities(User.username, User.title) def choice(row): return row[0], row[1] def by_title(choice): return normalize_for_url(choice[1]) return sorted([choice(r) for r in users.all()], key=by_title)
def send_daily_ticket_statistics(request): today = replace_timezone(datetime.utcnow(), 'UTC') today = to_timezone(today, 'Europe/Zurich') if today.weekday() in (SAT, SUN): return args = {} # get the current ticket count collection = TicketCollection(request.app.session()) count = collection.get_count() args['currently_open'] = count.open args['currently_pending'] = count.pending args['currently_closed'] = count.closed # get tickets created yesterday or on the weekend end = datetime(today.year, today.month, today.day, tzinfo=today.tzinfo) if today.weekday() == MON: start = end - timedelta(days=2) else: start = end - timedelta(days=1) query = collection.query() query = query.filter(Ticket.created >= start) query = query.filter(Ticket.created <= end) args['opened'] = query.count() query = collection.query() query = query.filter(Ticket.modified >= start) query = query.filter(Ticket.modified <= end) query = query.filter(Ticket.state == 'pending') args['pending'] = query.count() query = collection.query() query = query.filter(Ticket.modified >= start) query = query.filter(Ticket.modified <= end) query = query.filter(Ticket.state == 'closed') args['closed'] = query.count() # render the email args['title'] = request.translate( _("${town} OneGov Cloud Status", mapping={ 'town': request.app.town.name }) ) args['layout'] = DefaultMailLayout(object(), request) args['is_monday'] = today.weekday() == MON args['town'] = request.app.town.name content = render_template('mail_daily_ticket_statistics.pt', request, args) # send one e-mail per user users = UserCollection(request.app.session()).query() users = users.options(undefer('data')) users = users.all() for user in users: if user.data and not user.data.get('daily_ticket_statistics'): continue request.app.send_email( subject=args['title'], receivers=(user.username, ), content=content )