Esempio n. 1
0
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))
Esempio n. 2
0
File: db.py Progetto: rjose/dovetail
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
Esempio n. 3
0
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))