def timeentries_days(self): from por.models.tp import TimeEntry, timedelta_as_work_days request = get_current_request() tickets = ticket_store.get_tickets_for_request(customer_request=self, request=request) ticket_ids = [a["id"] for a in tickets] timeentries = ( DBSession().query(TimeEntry).filter_by(project_id=self.project_id).filter(TimeEntry.ticket.in_(ticket_ids)) ) hours = sum([a.hours for a in timeentries], datetime.timedelta()) return timedelta_as_work_days(hours)
def te_filter_by_customer_requests(customer_requests, request): """ Returns a SQL Expression to filter time entries, that belong to the provided customer_requests. The returned expression can be applied to a query on the TimeEntry table. If customer_requests is empty, no filter is applied. """ if not customer_requests: return sa.text('1=1') cr_get = DBSession.query(CustomerRequest).get selected_tickets = [] for cr_id in customer_requests or []: cr = cr_get(cr_id) selected_tickets.extend((cr.project_id, tkt['id']) for tkt in ticket_store.get_tickets_for_request(customer_request=cr, request=request)) return sa.and_(sa.sql.tuple_(TimeEntry.project_id, TimeEntry.ticket).in_(selected_tickets))
def get_tickets(self, request=None): return ticket_store.get_tickets_for_request(customer_request=self, request=request or self.request)