def project(project_id): project = projects_db.select_project(g.connection, project_id) projects_util.format_work_dates(project.work) project_data = { 'project_id': project.project_id, 'name': project.name, 'target_date': dovetail.util.format_date(project.target_date), 'est_end_date': dovetail.util.format_date(project.est_end_date), 'status': projects_util.compute_status(project.target_date, project.est_end_date), 'effort_left_d': dovetail.util.format_effort_left(project.total_effort(), 1), 'work': project.work, 'work_ids': json.dumps([w.work_id for w in project.work]), 'participants': project.participants, 'details_url': '/projects/%d' % project_id, 'details_timeline_url': '/projects/%d?timeline=true' % project_id } if request.args.get('timeline'): assignee_ids = set([w.assignee.person_id for w in project.work]) timelines = work_db.select_timelines_for_people(g.connection, assignee_ids) timeline_aux_data = {} for bars in timelines.values(): for bar in bars: timeline_aux_data[bar['work_id']] = { 'title': '[%s] %s' % (bar['project_name'], bar['label']), 'content': ''' <p>%s</p> <p>%s</p> <p>Start: %s</p> <p>Finish: %s</p> ''' % ( bar['assignee_name'], dovetail.util.format_effort_left(bar['effort_left_d']), dovetail.util.format_date(bar['start_date']), dovetail.util.format_date(bar['end_date']) ) } chart = ProjectTimelineChart(project_id, datetime.now(), timelines) return render_template('projects/details_timeline.html', project_data = project_data, timeline_data = chart.as_json(), timeline_aux_data = json.dumps(timeline_aux_data), work_data = projects_util.project_work_to_string(project.work), participants = people_db.select_project_participants(g.connection, project_id), people = people_db.select_people(g.connection)) else: done_work = work_db.select_done_work_for_project(g.connection, project_id) projects_util.format_work_dates(done_work) return render_template('projects/details.html', project_data = project_data, work_data = projects_util.project_work_to_string(project.work), participants = people_db.select_project_participants(g.connection, project_id), done_work = done_work, people = people_db.select_people(g.connection))
def select_project(connection, project_id): result = Project(project_id) data = connection.execute( database.projects.select( database.projects.c.id == project_id)).first() result.name = data['name'] # NOTE: We don't need to condition them because we're not doing an explicit select # SqlAlchemy takes care of the date manipulation for us result.target_date = data['target_date'] result.est_end_date = data['est_end_date'] result.participants = people_db.select_project_participants( connection, project_id) result.work = work_db.select_work_for_project(connection, project_id) return result
def project(project_id): project = projects_db.select_project(g.connection, project_id) projects_util.format_work_dates(project.work) project_data = { 'project_id': project.project_id, 'name': project.name, 'target_date': dovetail.util.format_date(project.target_date), 'est_end_date': dovetail.util.format_date(project.est_end_date), 'status': projects_util.compute_status(project.target_date, project.est_end_date), 'effort_left_d': dovetail.util.format_effort_left(project.total_effort(), 1), 'work': project.work, 'work_ids': json.dumps([w.work_id for w in project.work]), 'participants': project.participants, 'details_url': '/projects/%d' % project_id, 'details_timeline_url': '/projects/%d?timeline=true' % project_id } if request.args.get('timeline'): assignee_ids = set([w.assignee.person_id for w in project.work]) timelines = work_db.select_timelines_for_people( g.connection, assignee_ids) timeline_aux_data = {} for bars in timelines.values(): for bar in bars: timeline_aux_data[bar['work_id']] = { 'title': '[%s] %s' % (bar['project_name'], bar['label']), 'content': ''' <p>%s</p> <p>%s</p> <p>Start: %s</p> <p>Finish: %s</p> ''' % (bar['assignee_name'], dovetail.util.format_effort_left(bar['effort_left_d']), dovetail.util.format_date(bar['start_date']), dovetail.util.format_date(bar['end_date'])) } chart = ProjectTimelineChart(project_id, datetime.now(), timelines) return render_template( 'projects/details_timeline.html', project_data=project_data, timeline_data=chart.as_json(), timeline_aux_data=json.dumps(timeline_aux_data), work_data=projects_util.project_work_to_string(project.work), participants=people_db.select_project_participants( g.connection, project_id), people=people_db.select_people(g.connection)) else: done_work = work_db.select_done_work_for_project( g.connection, project_id) projects_util.format_work_dates(done_work) return render_template( 'projects/details.html', project_data=project_data, work_data=projects_util.project_work_to_string(project.work), participants=people_db.select_project_participants( g.connection, project_id), done_work=done_work, people=people_db.select_people(g.connection))