Exemplo n.º 1
0
def add_risk(request, project_number):

    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    if request.method == 'POST':
        form = RiskForm(request.POST)
        if form.is_valid():
            t = form.save(commit=False)
            t.risk_number = '''RISK-%s-%s''' % (
                request.user.username[:2].upper(), time.strftime("%Y%m%d%H%M"))
            t.rating = _calculate_risk(t.probability, t.impact)
            t.save()
            project.risks.add(t)
            project.save()
            request.user.message_set.create(message='''Risk %s Registered''' %
                                            t.risk_number)
            updateLog(request, project.project_number,
                      '''Risk %s Registered''' % t.risk_number)
            return HttpResponse(return_json_success())
        else:
            return HttpResponse(handle_form_errors(form.errors))
Exemplo n.º 2
0
def view_project(request, project_number):

        # Some security - only allow users to view objects they are allowed to via read_acl
        project = get_object_or_404(Project, project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project

        return render_to_response('projects/view-project.html', { 'project': project }, context_instance=RequestContext(request))
Exemplo n.º 3
0
def view_issues(request, project_number):
        project = Project.objects.get(project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project

        return HttpResponse( serializers.serialize('json', project.issues.all(),
            relations={'owner': {'fields': ('username',), 'extras':
                ('get_full_name',)}, 'author': {'fields': ('username',),
                    'extras': ('get_full_name',)},}, extras=('get_history_html',) , display=['type', 'status', 'priority']))
Exemplo n.º 4
0
def get_skillset(request, project_number):
    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    return HttpResponse(serializers.serialize('json', SkillSet.objects.all()))
Exemplo n.º 5
0
def view_lesson(request, project_number, lesson_id):
        project = Project.objects.get(project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project
        lesson = LessonLearnt.objects.get(id=lesson_id)

        JSONSerializer = serializers.get_serializer('json')
        j = JSONSerializer()
        j.serialize([lesson], fields=('description', 'publish_to_client'))
        
        return HttpResponse( '''{ success: true, data: %s }''' % json.dumps(j.objects[0]['fields']))
Exemplo n.º 6
0
def view_project(request, project_number):

    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    return render_to_response('projects/view-project.html',
                              {'project': project},
                              context_instance=RequestContext(request))
Exemplo n.º 7
0
def delete_issue(request, project_number, issue_id):

        project = Project.objects.get(project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project
        
        try:
                issue = Issue.objects.get(id=issue_id)
        except:
                return HttpResponse( handle_generic_error("Issue does not exist"))
        project.issues.remove(issue)
        project.save()
        return HttpResponse( return_json_success() )
Exemplo n.º 8
0
def delete_deliverable(request, project_number, deliverable_id):

    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(project, request.user)  # Will return Http404 if user isn't allowed to view project

    if user_has_write_access(project, request.user):
        deliverable = Deliverable.objects.get(id=deliverable_id)
        project.deliverables.remove(deliverable)
        project.save()
        return HttpResponse(return_json_success())
    else:
        return HttpResponse(handle_generic_error("Sorry - you don't have sufficient access to update the project"))
Exemplo n.º 9
0
def view_lesson(request, project_number, lesson_id):
    project = Project.objects.get(project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project
    lesson = LessonLearnt.objects.get(id=lesson_id)

    JSONSerializer = serializers.get_serializer('json')
    j = JSONSerializer()
    j.serialize([lesson], fields=('description', 'publish_to_client'))

    return HttpResponse('''{ success: true, data: %s }''' %
                        json.dumps(j.objects[0]['fields']))
Exemplo n.º 10
0
def delete_issue(request, project_number, issue_id):

    project = Project.objects.get(project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    try:
        issue = Issue.objects.get(id=issue_id)
    except:
        return HttpResponse(handle_generic_error("Issue does not exist"))
    project.issues.remove(issue)
    project.save()
    return HttpResponse(return_json_success())
Exemplo n.º 11
0
def get_timeline(request, project_number):
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project

    t_format = "%a %b %d %H:%M:%S %Y +0000"

    ret = {}
    ret['events'] = []
    for w in project.work_items.all():
        dict = {}
        do_not_append = False
        if w.start_date and w.duration:
            dict['start'] = w.start_date.strftime(t_format)
            dict['durationEvent'] = True
            if project.duration_type == 0: # Hours
                end = w.start_date + datetime.timedelta(hours=w.duration)
                dict['end']  = end.strftime(t_format)
            elif project.duration_type == 1: # Days
                end = w.start_date + datetime.timedelta(days=w.duration)
                dict['end']  = end.strftime(t_format)

        elif w.finish_date and w.duration:
            dict['end'] = w.finish_date.strftime(t_format)
            dict['durationEvent'] = True
            if project.duration_type == 0: # Hours
                end = w.finish_date + datetime.timedelta(hours=-w.duration)
                dict['start']  = end.strftime(t_format)
            elif project.duration_type == 1: # Days
                end = w.finish_date + datetime.timedelta(days=-w.duration)
                dict['start']  = end.strftime(t_format)
        elif w.start_date and w.finish_date:
            dict['start'] = w.start_date.strftime(t_format)
            dict['end'] = w.finish_date.strftime(t_format)
            dict['durationEvent'] = True

        else:
            do_not_append = True # Can't add to Timeline
        dict['title'] = w.title
        dict['description'] = w.description
        rag_status = get_task_rag_status(w)
        if rag_status == 'rag_status_red':
            dict['color'] = '#ff0000'
        elif rag_status == 'rag_status_amber':
            dict['color'] = '#ff9900'
        if w.percent_complete == 100:
            dict['color'] = '#00ff00'

        if not do_not_append:
            ret['events'].append(dict)
    return HttpResponse( json.dumps(ret) )
Exemplo n.º 12
0
def edit_wbs(request, project_number):

        project = get_object_or_404(Project, project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project

        forms = {}
        forms['WBSReorderForm'] = WBSReorderForm()
        forms['WBSForm'] = WBSForm(project)

        if request.method == 'POST':
                pass

        else:
                return render_to_response('wbs/edit_wbs.html', {'project': project, 'forms': forms}, context_instance=RequestContext(request))
Exemplo n.º 13
0
def view_lessons(request, project_number):
    project = Project.objects.get(project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    return HttpResponse(
        serializers.serialize('json',
                              project.lessons_learnt.all(),
                              relations={
                                  'author': {
                                      'fields': ('username', ),
                                      'extras': ('get_full_name', )
                                  }
                              }))
Exemplo n.º 14
0
def get_team_managers(request, project_number):
    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    return HttpResponse(
        serializers.serialize(
            'json',
            User.objects.filter(id__in=project.team_managers.all()).distinct(
            ).order_by('first_name'),
            extras=('get_full_name', ),
            excludes=('is_active', 'is_superuser', 'is_staff', 'last_login',
                      'groups', 'user_permissions', 'password', 'email',
                      'date_joined')))
Exemplo n.º 15
0
def add_deliverable(request, project_number):

    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(project, request.user)  # Will return Http404 if user isn't allowed to view project
    if request.method == "POST":
        form = DeliverableForm(request.POST)
        if form.is_valid():
            t = form.save()
            t.save()
            project.deliverables.add(t)
            project.save()
            request.user.message_set.create(message="""Deliverable %s Registered""" % t.id)
            updateLog(request, project_number, """Deliverable %s Registered""" % t.id)
            return HttpResponse(return_json_success())
        else:
            return HttpResponse(handle_form_errors(form.errors))
Exemplo n.º 16
0
def view_wbs(request, project_number):
        project = get_object_or_404(Project, project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project
        wbs = project.work_items.all()
        # Data cleaning, ExtJS grids can't load if some ForiegnKey fields are Null
        for w in wbs:
                if not w.depends:
                        w.depends = WorkItem(title='')
                try:
                        i = w.owner
                except User.DoesNotExist: 
                        w.owner = User()
        
        
        return HttpResponse( serializers.serialize('json', wbs,
            relations={'depends': {'fields': ('title',)}, 'skill_set': {'fields': ('skill',)}, 'project_stage': {'fields':
                    ('stage',)},'author': {'fields': ('id', 'username'), 'extras': ('get_full_name',)},'owner': { 'fields':
                            ('id', 'username'), 'extras': ('get_full_name',)}}, extras=('get_work_item_status', 'get_history_html',)))
Exemplo n.º 17
0
    def read(self, request, project_number):

        log.debug("GET request from user %s for project %s resources" % ( request.user, project_number ))
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return User.objects.filter(is_active=True, groups__in=proj.read_acl.all()).distinct().order_by('first_name')
Exemplo n.º 18
0
    def read(self, request, project_number):

        log.debug("GET request from user %s for project %s team managers" % ( request.user, project_number ))
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return User.objects.filter(id__in=proj.team_managers.all()).distinct().order_by('first_name')
Exemplo n.º 19
0
def delete_deliverable(request, project_number, deliverable_id):

    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    if user_has_write_access(project, request.user):
        deliverable = Deliverable.objects.get(id=deliverable_id)
        project.deliverables.remove(deliverable)
        project.save()
        return HttpResponse(return_json_success())
    else:
        return HttpResponse(
            handle_generic_error(
                "Sorry - you don't have sufficient access to update the project"
            ))
Exemplo n.º 20
0
def edit_pid(request, project_number):
    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    JSONSerializer = serializers.get_serializer('json')
    j = JSONSerializer()
    j.serialize([project],
                fields=('project_name', 'project_number', 'project_status',
                        'company', 'project_manager', 'team_managers',
                        'project_sponsor', 'project_description',
                        'business_case', 'business_benefits', 'project_scope',
                        'exclusions', 'assumptions', 'communications_plan',
                        'quality_plan', 'duration_type'))
    return HttpResponse('''{ success: true, data: %s }''' %
                        json.dumps(j.objects[0]['fields']))
Exemplo n.º 21
0
    def read(self, request, project_number):
        """ View a project """

        log.debug("GET request from user %s for project number %s" % ( request.user, project_number ))
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return proj
Exemplo n.º 22
0
def add_risk(request, project_number):

        # Some security - only allow users to view objects they are allowed to via read_acl
        project = get_object_or_404(Project, project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project

        if request.method == 'POST':
                form = RiskForm(request.POST)
                if form.is_valid():
                        t = form.save(commit=False)
                        t.risk_number = '''RISK-%s-%s''' % (request.user.username[:2].upper(), time.strftime("%Y%m%d%H%M"))
                        t.rating = _calculate_risk(t.probability, t.impact)
                        t.save()
                        project.risks.add(t)
                        project.save()
                        request.user.message_set.create(message='''Risk %s Registered''' % t.risk_number)
                        updateLog(request, project.project_number, '''Risk %s Registered''' % t.risk_number)
                        return HttpResponse( return_json_success() )
                else:
                        return HttpResponse( handle_form_errors(form.errors))
Exemplo n.º 23
0
    def read(self, request, project_number, stageplan_id):
        """ View a Project Stage """

        log.debug("GET request from user %s for project stage %s" % ( request.user, stageplan_id ))
        proj = Project.objects.get(project_number=project_number)
        stage = ProjectStage.objects.get(id=stageplan_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return stage
Exemplo n.º 24
0
    def read(self, request, project_number):
        """ Return a list of engineering days associated with projects filtered by ACL """

        log.debug("GET request from user %s for eday list" % request.user)
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN

        return EngineeringDays.objects.filter(work_items__project_stage__project=proj)
Exemplo n.º 25
0
    def read(self, request, project_number, issue_id):
        """ View an issue """

        log.debug("GET request from user %s for issue id %s" % ( request.user, issue_id ))
        proj = Project.objects.get(project_number=project_number)
        issue = Issue.objects.get(id=issue_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return issue
Exemplo n.º 26
0
    def read(self, request, project_number):
        """ Return a list of issues associated with projects filtered by ACL """

        log.debug("GET request from user %s for risk list" % request.user)
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN

        return proj.issues.all()
Exemplo n.º 27
0
    def read(self, request, project_number, deliverable_id):
        """ View a deliverable """

        log.debug("GET request from user %s for deliverable %s" % ( request.user, deliverable_id ))
        proj = Project.objects.get(project_number=project_number)
        deliverable = Deliverable.objects.get(id=deliverable_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return deliverable
Exemplo n.º 28
0
    def read(self, request, project_number, eday_id):
        """ View an Engineering Day """

        log.debug("GET request from user %s for engineering day %s" % ( request.user, eday_id ))
        proj = Project.objects.get(project_number=project_number)
        eday = EngineeringDay.objects.get(id=eday_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return eday
Exemplo n.º 29
0
    def read(self, request, project_number, wbs_id):
        """ View a work item """

        log.debug("GET request from user %s for work item %s" % ( request.user, wbs_id ))
        proj = Project.objects.get(project_number=project_number)
        wbs = WorkItem.objects.get(id=wbs_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return wbs
Exemplo n.º 30
0
    def read(self, request, project_number):
        """ Get a list of all Work Items for the project """

        log.debug("GET request from user %s for wbs list" % request.user)
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN

        return WorkItem.objects.filter(project_stage__project=proj)
Exemplo n.º 31
0
    def read(self, request, project_number, lesson_id):
        """ View a lesson """

        log.debug("GET request from user %s for lesson %s" % ( request.user, lesson_id ))
        proj = Project.objects.get(project_number=project_number)
        lesson = LessonLearnt.objects.get(id=lesson_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return lesson
Exemplo n.º 32
0
    def read(self, request, project_number, risk_number):
        """ View a risk """

        log.debug("GET request from user %s for risk number %s" % ( request.user, risk_number ))
        proj = Project.objects.get(project_number=project_number)
        risk = Risk.objects.get(risk_number=risk_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN
        return risk
Exemplo n.º 33
0
    def read(self, request, project_number):
        """ Return a list of risks associated with projects filtered by ACL """

        log.debug("GET request from user %s for risk list" % request.user)
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN

        return proj.risks.all()
Exemplo n.º 34
0
def view_issues(request, project_number):
    project = Project.objects.get(project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project

    return HttpResponse(
        serializers.serialize('json',
                              project.issues.all(),
                              relations={
                                  'owner': {
                                      'fields': ('username', ),
                                      'extras': ('get_full_name', )
                                  },
                                  'author': {
                                      'fields': ('username', ),
                                      'extras': ('get_full_name', )
                                  },
                              },
                              extras=('get_history_html', ),
                              display=['type', 'status', 'priority']))
Exemplo n.º 35
0
    def read(self, request, project_number):
        """ Return a list of engineering days associated with a work item """

        log.debug("GET request from user %s for stage plan list" % request.user)
        proj = Project.objects.get(project_number=project_number)
        wbs = WorkItem.objects.get(id=wbs_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN

        return wbs.engineering_days.all()
Exemplo n.º 36
0
    def read(self, request, project_number):
        """ Get a list of all Work Items for the project """

        log.debug("GET request from user %s for wbs list" % request.user)
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN

        return WorkItem.objects.filter(project_stage__project=proj)
Exemplo n.º 37
0
    def read(self, request, project_number):

        log.debug("GET request from user %s for project %s team managers" %
                  (request.user, project_number))
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN
        return User.objects.filter(
            id__in=proj.team_managers.all()).distinct().order_by('first_name')
Exemplo n.º 38
0
def add_deliverable(request, project_number):

    # Some security - only allow users to view objects they are allowed to via read_acl
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(
        project, request.user
    )  # Will return Http404 if user isn't allowed to view project
    if request.method == 'POST':
        form = DeliverableForm(request.POST)
        if form.is_valid():
            t = form.save()
            t.save()
            project.deliverables.add(t)
            project.save()
            request.user.message_set.create(
                message='''Deliverable %s Registered''' % t.id)
            updateLog(request, project_number,
                      '''Deliverable %s Registered''' % t.id)
            return HttpResponse(return_json_success())
        else:
            return HttpResponse(handle_form_errors(form.errors))
Exemplo n.º 39
0
    def read(self, request, project_number, stageplan_id):
        """ View a Project Stage """

        log.debug("GET request from user %s for project stage %s" %
                  (request.user, stageplan_id))
        proj = Project.objects.get(project_number=project_number)
        stage = ProjectStage.objects.get(id=stageplan_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN
        return stage
Exemplo n.º 40
0
    def read(self, request, project_number):

        log.debug("GET request from user %s for project %s resources" %
                  (request.user, project_number))
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN
        return User.objects.filter(
            is_active=True,
            groups__in=proj.read_acl.all()).distinct().order_by('first_name')
Exemplo n.º 41
0
    def read(self, request, project_number, eday_id):
        """ View an Engineering Day """

        log.debug("GET request from user %s for engineering day %s" %
                  (request.user, eday_id))
        proj = Project.objects.get(project_number=project_number)
        eday = EngineeringDay.objects.get(id=eday_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN
        return eday
Exemplo n.º 42
0
    def read(self, request, project_number, wbs_id):
        """ View a work item """

        log.debug("GET request from user %s for work item %s" %
                  (request.user, wbs_id))
        proj = Project.objects.get(project_number=project_number)
        wbs = WorkItem.objects.get(id=wbs_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN
        return wbs
Exemplo n.º 43
0
    def read(self, request, project_number):
        """ Return a list of engineering days associated with projects filtered by ACL """

        log.debug("GET request from user %s for eday list" % request.user)
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN

        return EngineeringDays.objects.filter(
            work_items__project_stage__project=proj)
Exemplo n.º 44
0
    def read(self, request, project_number, deliverable_id):
        """ View a deliverable """

        log.debug("GET request from user %s for deliverable %s" %
                  (request.user, deliverable_id))
        proj = Project.objects.get(project_number=project_number)
        deliverable = Deliverable.objects.get(id=deliverable_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN
        return deliverable
Exemplo n.º 45
0
    def read(self, request, project_number):
        """ Return a list of engineering days associated with a work item """

        log.debug("GET request from user %s for stage plan list" %
                  request.user)
        proj = Project.objects.get(project_number=project_number)
        wbs = WorkItem.objects.get(id=wbs_id)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN

        return wbs.engineering_days.all()
Exemplo n.º 46
0
def view_work_item(request, project_number, wbs_id):
        project = get_object_or_404(Project, project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project
        work_item = WorkItem.objects.get(id=wbs_id)

        # Some error checking
        if not work_item.depends:
                work_item.depends = WorkItem(title='')
        try:
                i = work_item.owner
        except User.DoesNotExist: 
                work_item.owner = User()
        
        


        JSONSerializer = serializers.get_serializer('json')
        j = JSONSerializer()
        if work_item.start_date != None: work_item.start_date = work_item.start_date.strftime("%d/%m/%Y")
        if work_item.finish_date != None: work_item.finish_date = work_item.finish_date.strftime("%d/%m/%Y")
        j.serialize([work_item], fields=('skill_set', 'project_stage', 'title', 'description', 'depends', 'duration', 'owner', 'percent_complete', 'start_date', 'finish_date', 'wbs_number', 'cost', 'history', 'engineering_days'))
        return HttpResponse( '''{ success: true, data: %s }''' % json.dumps(j.objects[0]['fields']))

        return HttpResponse( serializers.serialize('json', WorkItem.objects.filter(id=wbs_id), relations=('author', 'owner')))  
Exemplo n.º 47
0
    def read(self, request, project_number):
        """ Return a list of project stages associated with projects filtered by ACL """

        log.debug("GET request from user %s for stage plan list" % request.user)
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN

        ret = []
        for stage in project.project_stages.all():
            for wbs in stage.work_items.all():
                ret += wbs.engineering_days.all()
        return ret
Exemplo n.º 48
0
    def read(self, request, project_number):
        """ Return a list of project stages associated with projects filtered by ACL """

        log.debug("GET request from user %s for stage plan list" %
                  request.user)
        proj = Project.objects.get(project_number=project_number)

        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project list %s from user %s" %
                      (project_number, request.user))
            return rc.FORBIDDEN

        ret = []
        for stage in project.project_stages.all():
            for wbs in stage.work_items.all():
                ret += wbs.engineering_days.all()
        return ret
Exemplo n.º 49
0
def view_gantt_chart(request, project_number):
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project
    return render_to_response('wbs/gantt.html', { 'project': project }, context_instance=RequestContext(request))
Exemplo n.º 50
0
def get_resources_for_engineering_day(request, project_number, wbs_id, year, month, day, day_type, as_json=True):


        project = get_object_or_404(Project, project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project

        work_item = WorkItem.objects.get(id=wbs_id)
        requested_date = datetime.date(int(year), int(month), int(day))
        
        ret = [ ]
        
        resources = UserProfile.objects.filter(skillset=work_item.skill_set, user__is_active=True).order_by('user__first_name')
        logging.debug('''Potential resources: %s.''' % resources)
        for res in resources:
                # Get the resources name
                if res.user.get_full_name() != '':
                        res_full_name = res.user.get_full_name()
                else:
                        res_full_name = res.user.username

                logging.debug('''Searching for Engineering days: work_date=%s, resource=%s, resource_id=%s''' % ( requested_date, res_full_name, res.user.id ))
                

                res_activity = EngineeringDay.objects.filter(work_date=requested_date, resource=res.user)

                r = {"pk": res.user.id }

                if len(res_activity) == 0: # Resource isn't booked at all
                        r['resource'] = '''%s - Available all day''' % res_full_name
                        r['available'] = True
                        logging.debug('''%s has no Engineering Days booked.''' % res)
                
                elif len(res_activity) >= 2: # User already has 2 bookings for this day
                        r['resource'] = '''%s - Booked out all day''' % res_full_name
                        r['available'] = False
                        logging.debug('''%s has 2 Engineering Days booked: %s.''' % ( res, res_activity ))
                else:
                        for day in res_activity:
                                if day.day_type == 0:
                                        r['resource'] = '''%s - Available PM only''' % res_full_name
                                        r['available'] = True
                                        logging.debug('''%s is available in PM. Booked on %s in AM.''' % ( res, day ))
                                elif day.day_type == 1:
                                        r['resource'] = '''%s - Available AM only''' % res_full_name
                                        r['available'] = True
                                        logging.debug('''%s is available in AM. Booked on %s in PM.''' % ( res, day ))
                                elif day.day_type == 2:
                                        r['resource'] = '''%s - Booked out all day''' % res_full_name
                                        r['available'] = False
                                        logging.debug('''%s has no availability. Booked on %s.''' % ( res, day ))


                try:
                        rota = RotaItem.objects.get(person=res.user, date=requested_date)
                        if rota.activity.unavailable_for_projects:
                                r['resource'] = '''%s - Not Available''' % res_full_name
                                r['available'] = False
                                logging.debug('''%s has no availability. Rota'd on %s.''' % ( res, rota ))
                except RotaItem.DoesNotExist:
                        pass
                                
                
                ret.append(r)
        if as_json:
                return HttpResponse(json.dumps(ret))
        else:
                return ret
Exemplo n.º 51
0
def view_lessons(request, project_number):
        project = Project.objects.get(project_number=project_number)
        check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project

        return HttpResponse( serializers.serialize('json', project.lessons_learnt.all(), relations={'author': {'fields': ('username',), 'extras': ('get_full_name',)}}))
Exemplo n.º 52
0
    def read(self, request, project_number, wbs_id):
        """ Return a list of resources able to work on a Work item """
        proj = Project.objects.get(project_number=project_number)
        if not check_project_read_acl(proj, request.user):
            log.debug("Refusing GET request for project %s from user %s" % ( project_number, request.user ))
            return rc.FORBIDDEN

        work_item = WorkItem.objects.get(id=wbs_id)
        requested_date = datetime.date(int(year), int(month), int(day))
        
        ret = [ ]
        
        resources = UserProfile.objects.filter(skillset=work_item.skill_set, user__is_active=True).order_by('user__first_name')
        log.debug('''Potential resources: %s.''' % resources)
        for res in resources:
                # Get the resources name
                if res.user.get_full_name() != '':
                        res_full_name = res.user.get_full_name()
                else:
                        res_full_name = res.user.username

                logging.debug('''Searching for Engineering days: work_date=%s, resource=%s, resource_id=%s''' % ( requested_date, res_full_name, res.user.id ))
                

                res_activity = EngineeringDay.objects.filter(work_date=requested_date, resource=res.user)

                r = {"pk": res.user.id }

                if len(res_activity) == 0: # Resource isn't booked at all
                        r['resource'] = '''%s - Available all day''' % res_full_name
                        r['available'] = True
                        logging.debug('''%s has no Engineering Days booked.''' % res)
                
                elif len(res_activity) >= 2: # User already has 2 bookings for this day
                        r['resource'] = '''%s - Booked out all day''' % res_full_name
                        r['available'] = False
                        logging.debug('''%s has 2 Engineering Days booked: %s.''' % ( res, res_activity ))
                else:
                        for day in res_activity:
                                if day.day_type == 0:
                                        r['resource'] = '''%s - Available PM only''' % res_full_name
                                        r['available'] = True
                                        logging.debug('''%s is available in PM. Booked on %s in AM.''' % ( res, day ))
                                elif day.day_type == 1:
                                        r['resource'] = '''%s - Available AM only''' % res_full_name
                                        r['available'] = True
                                        logging.debug('''%s is available in AM. Booked on %s in PM.''' % ( res, day ))
                                elif day.day_type == 2:
                                        r['resource'] = '''%s - Booked out all day''' % res_full_name
                                        r['available'] = False
                                        logging.debug('''%s has no availability. Booked on %s.''' % ( res, day ))


                try:
                        rota = RotaItem.objects.get(person=res.user, date=requested_date)
                        if rota.activity.unavailable_for_projects:
                                r['resource'] = '''%s - Not Available''' % res_full_name
                                r['available'] = False
                                logging.debug('''%s has no availability. Rota'd on %s.''' % ( res, rota ))
                except RotaItem.DoesNotExist:
                        pass
                                
                
                ret.append(r)
        return ret
Exemplo n.º 53
0
def get_jsgantt_xml(request, project_number):
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project
    #t_format = "%a %d %b %Y %H:%M:%S +0000"
    t_format = "%d/%m/%Y"

    from xml.dom.minidom import Document
    doc = Document()
    xml_project = doc.createElement("project")
    doc.appendChild(xml_project)
    for w in project.work_items.all():
        task = doc.createElement("task")
        xml_project.appendChild(task)

        pID = doc.createElement("pID")
        pID.appendChild( doc.createTextNode(str(w.wbs_number)) )
        task.appendChild(pID)

        pName = doc.createElement("pName")
        pName.appendChild( doc.createTextNode(w.title))
        task.appendChild(pName)

        pStart = doc.createElement("pStart")
        pEnd = doc.createElement("pEnd")
        pMile = doc.createElement("pMile")

        if w.start_date and w.finish_date:
            start_date = w.start_date.strftime(t_format)
            finish_date = w.finish_date.strftime(t_format)
            mile = "0"
        elif w.start_date and w.duration:
            start_date =  w.start_date.strftime(t_format)
            mile = "0"
            if project.duration_type == 0: # Hours
                finish_date = (w.start_date + datetime.timedelta(hours=w.duration)).strftime(t_format)
            elif project.duration_type == 1: # Days
                finish_date = (w.start_date + datetime.timedelta(days=w.duration)).strftime(t_format)
        elif w.finish_date and w.duration:
            finish_date = w.finish_date.strftime(t_format)
            mile = "0"
            if project.duration_type == 0: # Hours
                start_date = (w.finish_date + datetime.timedelta(hours=-w.duration)).strftime(t_format)
            elif project.duration_type == 1: # Days
                start_date = (w.finish_date + datetime.timedelta(days=-w.duration)).strftime(t_format)
        else:
            if w.start_date:
                start_date = w.start_date.strftime(t_format)
                finish_date = w.start_date.strftime(t_format)
            elif w.finish_date:
                start_date = w.finish_date.strftime(t_format)
                finish_date = w.finish_date.strftime(t_format)
            mile = "1"
        pStart.appendChild( doc.createTextNode(start_date))
        task.appendChild(pStart)
        pEnd.appendChild( doc.createTextNode(finish_date))
        task.appendChild(pEnd)
        pMile.appendChild( doc.createTextNode(mile))
        task.appendChild(pMile)

        pRes = doc.createElement("pRes")
        pRes.appendChild( doc.createTextNode(w.owner.get_full_name()))
        task.appendChild(pRes)

        if w.percent_complete:
            pComp = doc.createElement("pComp")
            pComp.appendChild( doc.createTextNode(str(w.percent_complete)))
            task.appendChild(pComp)
        if w.depends:
            pDepend = doc.createElement("pDepend")
            pDepend.appendChild( doc.createTextNode(str(w.depends.wbs_number)))
            task.appendChild(pDepend)

    return HttpResponse(doc.toprettyxml(), mimetype="text/xml")
Exemplo n.º 54
0
def get_msproject_xml(request, project_number):
    project = get_object_or_404(Project, project_number=project_number)
    check_project_read_acl(project, request.user)   # Will return Http404 if user isn't allowed to view project


    from xml.dom.minidom import Document
    doc = Document()
    p = doc.createElement("Project")
    p.setAttribute("xmlns", "http://schemas.microsoft.com/project")

    name = doc.createElement("Name")
    name.appendChild(doc.createTextNode(project.project_name))
    p.appendChild(name)

    company = doc.createElement("Company")
    company.appendChild(doc.createTextNode(project.company.company_name))
    p.appendChild(company)


    author = doc.createElement("Author")
    author.appendChild(doc.createTextNode(request.user.get_full_name()))
    p.appendChild(author)

    tasks = doc.createElement("Tasks")
    resources = doc.createElement("Resources")
    existing_resources = []
    ass_index = 1
    assignments = doc.createElement("Assignments")

    first_task = project.work_items.all()[0]    # We need to find the first task in
                                                # chronological order for the
                                                # start of the project

    last_task = project.work_items.all()[0]     # and the last task

    errors = check_project_tasks(project)
    if errors:
        return HttpResponse(errors)

    # Add an all week calendar
    calendars = doc.createElement("Calendars")
    calendar = doc.createElement("Calendar")
    c_uid = doc.createElement("UID")
    c_uid.appendChild(doc.createTextNode("1"))
    calendar.appendChild(c_uid)

    c_name = doc.createElement("Name")
    c_name.appendChild(doc.createTextNode("Work Weekends"))
    calendar.appendChild(c_name)

    weekdays = doc.createElement("WeekDays")

    for day in range(0,6):
        weekday = doc.createElement("WeekDay")
        day_type = doc.createElement("DayType")
        day_type.appendChild(doc.createTextNode(str(day)))
        weekday.appendChild(day_type)

        day_working = doc.createElement("DayWorking")
        day_working.appendChild(doc.createTextNode("1"))
        weekday.appendChild(day_working)

        working_times = doc.createElement("WorkingTimes")
        working_time = doc.createElement("WorkingTime")
        from_time = doc.createElement("FromTime")
        from_time.appendChild(doc.createTextNode("08:00:00"))
        working_time.appendChild(from_time)

        to_time = doc.createElement("ToTime")
        to_time.appendChild(doc.createTextNode("18:00:00"))
        working_time.appendChild(to_time)

        working_times.appendChild(working_time)
        weekday.appendChild(working_times)

        weekdays.appendChild(weekday)
    calendar.appendChild(weekdays)
    calendars.appendChild(calendar)
    p.appendChild(calendars)

    for w in project.work_items.all():
        task = doc.createElement("Task")

        uid = doc.createElement("UID")
        uid.appendChild(doc.createTextNode(str(w.wbs_number)))
        task.appendChild(uid)

        id = doc.createElement("ID")
        id.appendChild(doc.createTextNode(str(w.wbs_number)))
        task.appendChild(id)

        name = doc.createElement("Name")
        name.appendChild(doc.createTextNode(w.title))
        task.appendChild(name)

        type = doc.createElement("Type")
        type.appendChild(doc.createTextNode("0"))
        task.appendChild(type)

        isnull = doc.createElement("IsNull")
        isnull.appendChild(doc.createTextNode("0"))
        task.appendChild(isnull)
        
        wbs = doc.createElement("WBS")
        wbs.appendChild(doc.createTextNode(str(w.wbs_number)))
        task.appendChild(wbs)

        priority = doc.createElement("Priority")
        priority.appendChild(doc.createTextNode("500"))
        task.appendChild(priority)

        start = doc.createElement("Start")
        early_start = doc.createElement("EarlyStart")
        late_start = doc.createElement("LateStart")
        finish = doc.createElement("Finish")
        early_finish = doc.createElement("EarlyFinish")
        late_finish = doc.createElement("LateFinish")
        duration = doc.createElement("Duration")
        r_duration = doc.createElement("RemainingDuration")
        start_t_format = "%Y-%m-%dT08:00:00"
        finish_t_format = "%Y-%m-%dT17:00:00"
        
        if w.start_date and w.finish_date:
            start_date = w.start_date.strftime(start_t_format)
            finish_date = w.finish_date.strftime(finish_t_format)
            raw_start_date = w.start_date
            raw_finish_date = w.finish_date
            
        elif w.start_date and w.duration:
            start_date =  w.start_date.strftime(start_t_format)
            raw_start_date = w.start_date
            if project.duration_type == 0: # Hours
                finish_date = (w.start_date + datetime.timedelta(hours=w.duration)).strftime(finish_t_format)
                raw_finish_date = w.finish_date
            elif project.duration_type == 1: # Days
                finish_date = (w.start_date + datetime.timedelta(days=w.duration)).strftime(finish_t_format)
                raw_finish_date = w.finish_date
        elif w.finish_date and w.duration:
            print w, "foo"
            finish_date = w.finish_date.strftime(finish_t_format)
            raw_finish_date = w.finish_date
            if project.duration_type == 0: # Hours
                raw_start_date = (w.finish_date + datetime.timedelta(hours=-w.duration))
                start_date = raw_start_date.strftime(start_t_format)
            elif project.duration_type == 1: # Days
                raw_start_date = (w.finish_date + datetime.timedelta(days=-w.duration))
                start_date = raw_start_date.strftime(start_t_format)
        else:
            if w.start_date:
                start_date = w.start_date.strftime(start_t_format)
                raw_start_date = w.start_date
                finish_date = w.start_date.strftime(finish_t_format)
                raw_finish_date = w.start_date
            elif w.finish_date:
                start_date = w.finish_date.strftime(start_t_format)
                raw_start_date = w.finish_date
                finish_date = w.finish_date.strftime(finish_t_format)
                raw_finish_date = w.finish_date
        
        raw_duration = raw_finish_date - raw_start_date
        d_minutes, d_seconds = divmod(raw_duration.seconds, 60)
        d_hours, d_minutes = divmod(d_minutes, 60)
        if d_hours == 0: d_hours = 8
        duration.appendChild(doc.createTextNode('''PT%sH0M0S''' % ( d_hours )))
        r_duration.appendChild(doc.createTextNode('''PT%sH0M0S''' % ( d_hours )))
        task.appendChild(duration)
        task.appendChild(r_duration)

        duration_format = doc.createElement("DurationFormat")
        duration_format.appendChild(doc.createTextNode("39"))
        task.appendChild(duration_format)
        

        start.appendChild( doc.createTextNode(start_date))
        task.appendChild(start)
        
        early_start.appendChild( doc.createTextNode(start_date))
        #task.appendChild(early_start)
        
        late_start.appendChild( doc.createTextNode(start_date))
        #task.appendChild(late_start)
        
        finish.appendChild( doc.createTextNode(finish_date))
        task.appendChild(finish)

        early_finish.appendChild( doc.createTextNode(finish_date))
        #task.appendChild(early_finish)
        
        late_finish.appendChild( doc.createTextNode(finish_date))
        #task.appendChild(late_finish)
        
        sv = doc.createElement("StartVariance")
        sv.appendChild(doc.createTextNode("0"))
        task.appendChild(sv)
        
        fv = doc.createElement("FinishVariance")
        fv.appendChild(doc.createTextNode("0"))
        task.appendChild(fv)

        f_cost_a = doc.createElement("FixedCostAccrual")
        f_cost_a.appendChild(doc.createTextNode("3"))
        task.appendChild(f_cost_a)

        complete = doc.createElement("PercentComplete")
        wbs.appendChild(doc.createTextNode(str(w.percent_complete)))
        task.appendChild(complete)

        work_complete = doc.createElement("PercentWorkComplete")
        wbs.appendChild(doc.createTextNode(str(w.percent_complete)))
        task.appendChild(work_complete)

        con_type = doc.createElement("ConstraintType")
        con_type.appendChild(doc.createTextNode("6"))
        task.appendChild(con_type)

        con_date = doc.createElement("ConstraintDate")
        con_date.appendChild(doc.createTextNode(finish_date))
        task.appendChild(con_date)

        milestone = doc.createElement("Milestone")
        milestone.appendChild(doc.createTextNode("0"))
        task.appendChild(milestone)
        
        f_cost = doc.createElement("FixedCost")
        f_cost.appendChild(doc.createTextNode("0"))
        task.appendChild(f_cost)

    
        # Is this task earlier than the first task or later than the last task?
        if w.start_date:
            if w.start_date < first_task.start_date:
                first_task = w
        if w.finish_date:
            if w.finish_date > last_task.finish_date:
                last_task = w

        # Any dependancies?
        if w.depends:
            predecessor = doc.createElement("PredecessorLink")
            pre_link = doc.createElement("PredecessorUID")
            pre_link.appendChild(doc.createTextNode(str(w.depends.wbs_number)))
            predecessor.appendChild(pre_link)

            pre_type = doc.createElement("Type")
            pre_type.appendChild(doc.createTextNode("1"))
            predecessor.appendChild(pre_type)

            pre_cross = doc.createElement("CrossProject")
            pre_cross.appendChild(doc.createTextNode("0"))
            predecessor.appendChild(pre_cross)

            pre_linklag = doc.createElement("LinkLag")
            pre_linklag.appendChild(doc.createTextNode("0"))
            predecessor.appendChild(pre_linklag)

            pre_lagformat = doc.createElement("LagFormat")
            pre_lagformat.appendChild(doc.createTextNode("7"))
            predecessor.appendChild(pre_lagformat)

            task.appendChild(predecessor)


        tasks.appendChild(task)

        if w.owner.id not in existing_resources:
            resource = doc.createElement("Resource")
            r_uid = doc.createElement("UID")
            r_uid.appendChild(doc.createTextNode(str(w.owner.id)))
            resource.appendChild(r_uid)

            r_id = doc.createElement("ID")
            r_id.appendChild(doc.createTextNode(str(w.owner.id)))
            resource.appendChild(r_id)

            r_name = doc.createElement("Name")
            r_name.appendChild(doc.createTextNode(w.owner.get_full_name()))
            resource.appendChild(r_name)

            r_type = doc.createElement("Type")
            r_type.appendChild(doc.createTextNode("1"))
            resource.appendChild(r_type)

            r_initials = doc.createElement("Initials")
            r_initials.appendChild(doc.createTextNode('''%s%s''' % ( w.owner.first_name[0].upper(), w.owner.last_name[0].upper())))
            resource.appendChild(r_initials)

            r_workgroup = doc.createElement("WorkGroup")
            r_workgroup.appendChild(doc.createTextNode("0"))
            resource.appendChild(r_workgroup)

            resources.appendChild(resource)
            existing_resources.append(w.owner.id)

        ass = doc.createElement("Assignment")
        a_uid = doc.createElement("UID")
        a_uid.appendChild(doc.createTextNode(str(ass_index)))
        ass.appendChild(a_uid)

        a_taskuid = doc.createElement("TaskUID")
        a_taskuid.appendChild(doc.createTextNode(str(w.wbs_number)))
        ass.appendChild(a_taskuid)

        a_resourceuid = doc.createElement("ResourceUID")
        a_resourceuid.appendChild(doc.createTextNode(str(w.owner.id)))
        ass.appendChild(a_resourceuid)

        a_start = doc.createElement("Start")
        a_start.appendChild(doc.createTextNode(start_date))
        ass.appendChild(a_start)

        a_finish = doc.createElement("Finish")
        a_finish.appendChild(doc.createTextNode(finish_date))
        ass.appendChild(a_finish)

        assignments.appendChild(ass)
        ass_index += 1



    p.appendChild(tasks)
    p.appendChild(resources)
    p.appendChild(assignments)
    s_date = doc.createElement("StartDate")
    s_date.appendChild(doc.createTextNode(first_task.start_date.strftime(start_t_format)))
    p.appendChild(s_date)

    f_date = doc.createElement("FinishDate")
    f_date.appendChild(doc.createTextNode(last_task.finish_date.strftime(finish_t_format)))
    p.appendChild(f_date)

    doc.appendChild(p)

    response =  http.HttpResponse(doc.toxml(), mimetype='text/xml')
    response['Content-Disposition'] = 'attachment;filename=%s' % '''%s_MSPROJECT_XML.xml''' % project.project_number
    return response