Skip to content

Commit

Permalink
Now works add task on dashboard.
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrei Antoukh committed Jul 14, 2012
1 parent a82b03e commit d852896
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 66 deletions.
137 changes: 75 additions & 62 deletions src/greenmine/base/static/js/bb/dashboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Greenmine.UserStoryView = Backbone.View.extend({
}
});


Greenmine.TaskView = Backbone.View.extend({
tagName: "div",

Expand Down Expand Up @@ -80,6 +81,60 @@ Greenmine.taskCollection = new Greenmine.TaskCollection();
Greenmine.usTemplate = doT.template($("#userstory-template").html());
Greenmine.taskTemplate = doT.template($("#userstory-task-template").html());

/* Create dialog */

Greenmine.CreateTaskDialog = Kaleidos.Lightbox.extend({
el: "#new-task-lightbox",

events: {
'click a.close-lightbox': 'onCloseClicked',
'click a.accept-lightbox': 'onAcceptClicked',
"click .newtask-meta .button.plus": "newTaskDom"
},

_initilize: function() {

},

collectTasks: function() {
var tasks = new Array();
_.each(this.$("textarea"), function(item) {
tasks.push($(item).val());
});

return tasks;
},

_close: function(ok) {
console.log(this.$el, this.$el.data());
var self = this;
if (ok) {
var context = {
task: this.collectTasks(),
us: this.userStoryReference
};

$.post(this.$el.data('url'), context, function(data) {
self.trigger("newTasks", data.tasks);
}, 'json');
}
},

newTaskDom: function() {
var new_formset = this.$(".formset-item").eq(0).clone();
new_formset.find("textarea").val("");

this.$(".newtask-formset").append(new_formset);
},

setUserStoryReference: function(ref) {
this.userStoryReference = ref;
}
});

Greenmine.createDialog = new Greenmine.CreateTaskDialog();

/* Dashboard view */

Greenmine.DashboardView = Backbone.View.extend({
el: $("#milestone-dashboard"),
Expand All @@ -89,22 +144,38 @@ Greenmine.DashboardView = Backbone.View.extend({
"dragleave td.status": "onDragLeave",
"dragover td.status": "onDragOver",
"drop td.status": "onDrop",

//"change .task-col .task-container .icons .participants": "assignationChangeSelect",
//"change .task-col .task-container .icons .statuses": "statusChangeChange"
//"click .user-story-row .user-story-container .new-task": "onNewTaskClick"
"click .button-newtask": "newTaskDialog",
},

initialize: function() {
_.bindAll(this);

Greenmine.usCollection.on("reset", this.resetUserStories);
Greenmine.taskCollection.on("reset", this.resetTasks);
Greenmine.taskCollection.on("add", this.addTask);

Greenmine.createDialog.on("newTasks", this.onNewTasks);


this.tasks = [];
this.uss = [];
},

onNewTasks: function(tasks) {
console.log(tasks);
Greenmine.taskCollection.add(tasks);
},

newTaskDialog: function(event) {
event.preventDefault();

var target = $(event.currentTarget);
var userStory = target.closest(".userstory-item");

Greenmine.createDialog.setUserStoryReference(userStory.data('id'));
Greenmine.createDialog.open();
},

resetUserStories: function() {
var self = this;
self.uss = [];
Expand Down Expand Up @@ -197,64 +268,6 @@ Greenmine.DashboardView = Backbone.View.extend({

$.post(apiUrl, postData, function(response) {
}, 'json');
},

assignationChangeSelect: function(event) {
var target = $(event.currentTarget);
var selected_person_id = target.val();

var task_dom = target.closest(".task-container");
var us_dom = task_dom.closest("tr.user-story-row");

var task_view = _.find(this.tasks, function(taskview) {
return taskview.model.get('id') == task_dom.data('id');
});

task_view.setAssigation(selected_person_id);

var postData = {
"assignation": selected_person_id,
"task": task_dom.data('id'),
"status": task_dom.data('status'),
"us": us_dom.data('id')
};

var apiUrl = this.$el.data('api-url');

$.post(apiUrl, postData, function(response) {
console.log(response);
}, 'json');
},

statusChangeChange: function(event) {
var target = $(event.currentTarget);
var selected_status_key = target.val()

var task_dom = target.closest(".task-container");
var us_dom = task_dom.closest("tr.user-story-row");

var task_view = _.find(this.tasks, function(taskview) {
return taskview.model.get('id') == task_dom.data('id');
});

var postData = {
"assignation": task_view.model.get('assignedTo'),
"task": task_dom.data('id'),
"status": selected_status_key,
"us": us_dom.data('id')
};

task_view.setStatus(selected_status_key);

var apiUrl = this.$el.data('api-url');

$.post(apiUrl, postData, function(response) {
if (!response.success) return;
var column = _.find(us_dom.find(".task-col"), function(element) {
return $(element).data('status') == response.task.fakeStatus;
});
$(column).append(task_view.$el);
}, 'json');
}
});

Expand Down
2 changes: 1 addition & 1 deletion src/greenmine/scrum/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -762,7 +762,7 @@ def save(self, *args, **kwargs):
def to_dict(self):
self_dict = {
'id': self.pk,
'editUrl': self.get_edit_url(),
#'editUrl': self.get_edit_url(),
'viewUrl': self.get_view_url(),
'deleteUrl': self.get_delete_url(),
'subject': self.subject,
Expand Down
1 change: 1 addition & 0 deletions src/greenmine/scrum/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
url(r'^(?P<mid>(?:\d+))/burndown/$',
dashboard.MilestoneBurndownView.as_view(), name="milestone-burndown"),
url(r'^api/$', dashboard.DashboardApiView.as_view(), name="dashboard-api"),
url(r'^api/crate-task/$', dashboard.DashboardCreateTask.as_view(), name="dashboard-api-create-task"),
)

milestone_patterns = patterns('',
Expand Down
30 changes: 30 additions & 0 deletions src/greenmine/scrum/views/dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,3 +164,33 @@ def post(self, request, pslug):
task.save()

return self.render_json({"task": task.to_dict()})


class DashboardCreateTask(GenericView):
@transaction.commit_on_success
@login_required
def post(self, request, pslug):
project = get_object_or_404(Project, slug=pslug)

if "us" not in request.POST:
return self.render_json({}, ok=False)

if "task" not in request.POST:
return self.render_json({}, ok=False)

user_story = get_object_or_404(project.user_stories, pk=request.POST['us'])

self.check_role(request.user, project, [
('project', 'view'),
('milestone', ('view')),
('userstory', ('view', 'edit')),
('task', ('view', 'edit')),
])

tasks = []
for task_text in request.POST.getlist("task"):
task = Task(type="task", subject="task_text", project=project, user_story=user_story)
task.save()
tasks.append(task)

return self.render_json({"tasks": [x.to_dict() for x in tasks]})
1 change: 1 addition & 0 deletions src/greenmine/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
<script src="{% static 'js/libs/modernizr-2.5.3-respond-1.1.0.min.js' %}"></script>
</head>
<body>
<div id="overlay"></div>
<div class="main-container">
<div class="header-container">
<div class="header-inner">
Expand Down
6 changes: 3 additions & 3 deletions src/greenmine/templates/dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@
</div>


<div class="dashboard-new-task" id="new-task-lightbox">
<div class="dashboard-new-task" id="new-task-lightbox" data-url="{% url 'dashboard-api-create-task' pslug=project.slug %}" style="display: none">
<div class="new-task-box">
<h3>{% trans "New task" %}</h3>

Expand All @@ -116,8 +116,8 @@ <h4>{% trans "Task subject" %}</h4>
</section>

<section class="newtask-meta">
<div class="button">{% trans "Save" %}</div>
<span class="cancel"><a href="#">{% trans "Cancelar" %}</a></span>
<div class="button"><a href="#" class="accept-lightbox">{% trans "Save" %}</a></div>
<span class="cancel"><a href="#" class="close-lightbox">{% trans "Cancelar" %}</a></span>
<div class="button plus right">+</div>
</section>
</div>
Expand Down

0 comments on commit d852896

Please sign in to comment.