Skip to content

Commit

Permalink
Allow project selection in projman and integrate into dashboard (#240)
Browse files Browse the repository at this point in the history
* Allow project selection in projman and integrate into dashboard

* Address comments

* Adjust projman axis ticks to fit width (#342)
  • Loading branch information
jrbotros committed Aug 3, 2016
1 parent 91cc2db commit 9f43168
Show file tree
Hide file tree
Showing 20 changed files with 268 additions and 367 deletions.
2 changes: 2 additions & 0 deletions example_project/example_project/orchestra_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,8 @@ def install_context_processors(settings):
'orchestra.context_processors.third_party_scripts')
settings.TEMPLATES[0]['OPTIONS']['context_processors'].append(
'orchestra.context_processors.google_analytics')
settings.TEMPLATES[0]['OPTIONS']['context_processors'].append(
'orchestra.context_processors.base_context')
except:
raise ValueError(
"Expected settings.TEMPLATES to contain a single DjangoTemplates "
Expand Down
12 changes: 12 additions & 0 deletions orchestra/context_processors.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
from django.conf import settings

from orchestra.interface_api.project_management.decorators import \
is_project_admin


def google_analytics(request):
"""
Expand All @@ -19,3 +22,12 @@ def third_party_scripts(request):
'ORCHESTRA_THIRD_PARTY_SCRIPTS_TEMPLATE':
settings.ORCHESTRA_THIRD_PARTY_SCRIPTS_TEMPLATE
}


def base_context(request):
"""
Provide context variables for use across all views.
"""
return {
'is_project_admin': is_project_admin(request.user)
}
4 changes: 4 additions & 0 deletions orchestra/interface_api/project_management/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
from orchestra.interface_api.project_management import views

urlpatterns = [
url(r'^projects/$',
views.ProjectList.as_view(),
name='projects'),

url(r'^assign_task/$',
views.assign_task_api,
name='assign_task'),
Expand Down
16 changes: 16 additions & 0 deletions orchestra/interface_api/project_management/views.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
import slacker
from jsonview.exceptions import BadRequest
from rest_framework import generics
from rest_framework import permissions

from orchestra.core.errors import TaskAssignmentError
from orchestra.core.errors import WorkerCertificationError
from orchestra.interface_api.project_management.decorators import \
is_project_admin
from orchestra.interface_api.project_management.decorators import \
project_management_api_view
from orchestra.interface_api.project_management import project_management
from orchestra.models import Task
from orchestra.models import Project
from orchestra.models import Worker
from orchestra.utils.load_json import load_encoded_json
from orchestra.project_api.serializers import ProjectSerializer
from orchestra.utils.revert import revert_task_to_iteration
from orchestra.utils.task_lifecycle import complete_and_skip_task
from orchestra.utils.task_lifecycle import create_subsequent_tasks
Expand All @@ -18,6 +23,17 @@
from orchestra.utils.task_lifecycle import end_project


class IsProjectAdmin(permissions.BasePermission):
def has_permission(self, request, view):
return is_project_admin(request.user)


class ProjectList(generics.ListCreateAPIView):
permission_classes = (permissions.IsAuthenticated, IsProjectAdmin)
serializer_class = ProjectSerializer
queryset = Project.objects.exclude(status=Project.Status.ABORTED)


@project_management_api_view
def project_information_api(request):
project_id = load_encoded_json(request.body)['project_id']
Expand Down
77 changes: 73 additions & 4 deletions orchestra/static/dist/orchestra/common/css/orchestra.css
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@
padding-left: 0;
padding-right: 0; }

.project-management .vis-wrapper .overlay .spinner::after {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-bottom: 1px solid black;
border-right: 1px solid black;
border-radius: 50%;
content: "";
animation: spin .75s linear infinite; }

/**
* Base stylesheet for Orchestra.
*
Expand Down Expand Up @@ -136,6 +148,18 @@ a.logo {
padding-left: 0;
padding-right: 0; }

.project-management .vis-wrapper .overlay .spinner::after {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-bottom: 1px solid black;
border-right: 1px solid black;
border-radius: 50%;
content: "";
animation: spin .75s linear infinite; }

/**
* Base stylesheet for Orchestra.
*
Expand Down Expand Up @@ -336,6 +360,18 @@ a.logo {
padding-left: 0;
padding-right: 0; }

.project-management .vis-wrapper .overlay .spinner::after {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-bottom: 1px solid black;
border-right: 1px solid black;
border-radius: 50%;
content: "";
animation: spin .75s linear infinite; }

/* Confirmation modals */
.modal-confirm-submit {
padding-top: 200px; }
Expand Down Expand Up @@ -517,6 +553,18 @@ a.logo {
padding-left: 0;
padding-right: 0; }

.project-management .vis-wrapper .overlay .spinner::after {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-bottom: 1px solid black;
border-right: 1px solid black;
border-radius: 50%;
content: "";
animation: spin .75s linear infinite; }

.project-management-modal, .slack-modal, .data-modal, .revert-modal {
font-size: 1.5rem;
padding: 15px; }
Expand Down Expand Up @@ -549,9 +597,13 @@ a.logo {
margin-top: 75px;
font-size: 1.5rem;
position: relative; }
.project-management .project-description {
font-size: 3rem;
margin: 0 10px; }
.project-management .project-description.ui-select-bootstrap {
margin: 10px 0; }
.project-management .project-description.ui-select-bootstrap > .ui-select-match > .btn {
height: auto;
width: auto;
font-size: 30px;
padding-right: 40px; }
.project-management .axis-wrapper {
position: relative;
display: inline-block; }
Expand Down Expand Up @@ -585,7 +637,24 @@ a.logo {
border: none; }
.project-management .vis-wrapper {
position: relative;
margin-bottom: 75px; }
margin-bottom: 75px;
min-height: 200px; }
.project-management .vis-wrapper .overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: white;
opacity: 0.75;
z-index: 100; }
.project-management .vis-wrapper .overlay .spinner {
position: absolute;
width: 40px;
height: 40px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); }
.project-management .vis-wrapper .svg-wrapper {
overflow-x: auto;
overflow-y: hidden;
Expand Down
17 changes: 17 additions & 0 deletions orchestra/static/orchestra/common/css/_common.scss
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ $dark-gray: rgb(60, 60, 60);
$light-green: rgb(46, 204, 113);
$dark-green: rgb(39, 174, 96);
$bold-yellow: rgb(230, 198, 55);
$black: rgb(0, 0, 0);

$sqrt-2: 1.4142;

Expand Down Expand Up @@ -49,3 +50,19 @@ $main-font-stack: 'Ruda', sans-serif;
@extend %no-padding;
}
}

%loading-spinner {
&::after {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-bottom: 1px solid $black;
border-right: 1px solid $black;
border-radius: 50%;

content: "";
animation: spin .75s linear infinite;
}
}
15 changes: 0 additions & 15 deletions orchestra/static/orchestra/common/js/lib/angular-route.min.js

This file was deleted.

Loading

0 comments on commit 9f43168

Please sign in to comment.