def ttr(self): """Compute average time until resolution.""" resolutions = Resolution.query.join(Inquiry).filter( Resolution.created_at >= arrow.utcnow().replace(hours=-3), Inquiry.queue_id == self.id).all() ns = [res.created_at - res.inquiry.created_at for res in resolutions] if ns: total = ns[0] for n in ns[1:]: total = n + total return strfdelta(total/len(ns)) return '00:00:00'
def help_inquiry(id, location=None): """automatically selects next inquiry or reloads inquiry """ inquiry = Inquiry.query.get(id) if not inquiry.resolution: inquiry.lock() inquiry.link(current_user()) if request.method == 'POST': delayed_id=None inquiry.resolution.close() # emit new queue positions emitQueuePositions(inquiry) emitQueueInfo(inquiry.queue) if request.form['status'] == 'unresolved': delayed_id = inquiry.id else: inquiry.close() if request.form['load_next'] != 'y': if delayed_id: delayed = Inquiry.query.get(delayed_id) delayed.unlock() return redirect(url_for('admin.home')) if not location: return redirect(url_for('admin.help_latest', delayed_id=delayed_id)) return redirect(url_for('admin.help_latest', location=location, delayed_id=delayed_id)) return render_admin('help_inquiry.html', inquiry=inquiry, inquiries=Inquiry.query.filter_by(name=inquiry.name).limit(10).all(), hide_event_nav=True, group=Inquiry.query.filter( Inquiry.status == 'unresolved', Inquiry.queue_id == g.queue.id, Inquiry.assignment == inquiry.assignment, Inquiry.problem == inquiry.problem, Inquiry.owner_id != inquiry.owner_id ).all(), wait_time=strfdelta( inquiry.resolution.created_at-inquiry.created_at, '%h:%m:%s'))
def get_wait_time(self, fmt: str='%h:%m:%s') -> str: """Return the wait time delta object as a string.""" return strfdelta(self.resolution.created_at-self.created_at, fmt)