Initial iteration on taskboard.

stable
Andrey Antukh 2014-06-24 16:10:21 +02:00
parent 82f0fc004b
commit 692f3564f7
8 changed files with 191 additions and 38 deletions

View File

@ -23,6 +23,8 @@
configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $compileProvider, $gmUrlsProvider) ->
$routeProvider.when("/project/:pslug/backlog", {templateUrl: "/partials/backlog.html"})
$routeProvider.when("/project/:pslug/taskboard/:id", {templateUrl: "/partials/taskboard.html"})
$routeProvider.when("/login", {templateUrl: "/partials/login.html"})
$routeProvider.otherwise({redirectTo: '/login'})
@ -71,6 +73,7 @@ modules = [
# Specific Modules
"taigaBacklog",
"taigaTaskboard",
# Vendor modules
"ngRoute",

View File

@ -107,5 +107,6 @@ module.run([
"$tgSprintsResourcesProvider",
"$tgUserstoriesResourcesProvider",
"$tgMdRenderResourcesProvider",
"$tgTasksResourcesProvider",
initResources
])

View File

@ -0,0 +1,38 @@
###
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino Garcia <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán Merino <bameda@dbarragan.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# File: modules/resources/tasks.coffee
###
taiga = @.taiga
resourceProvider = ($repo) ->
service = {}
service.list = (projectId, sprintId=null) ->
params = {project: projectId}
params.milestone = sprintId if sprintId
return $repo.queryMany("tasks", params)
return (instance) ->
instance.tasks = service
module = angular.module("taigaResources")
module.factory("$tgTasksResourcesProvider", ["$tgRepo", resourceProvider])

View File

@ -0,0 +1,113 @@
###
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino Garcia <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán Merino <bameda@dbarragan.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# File: modules/taskboard.coffee
###
taiga = @.taiga
mixOf = @.taiga.mixOf
class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin)
@.$inject = [
"$scope",
"$rootScope",
"$tgRepo",
"$tgConfirm",
"$tgResources",
"$routeParams",
"$q"
]
constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q) ->
@scope.sprintId = @params.id
promise = @.loadInitialData()
promise.then null, ->
console.log "FAIL"
loadSprintStats: ->
return @rs.sprints.stats(@scope.projectId, @scope.sprintId).then (stats) =>
console.log "loadSprintStats",
@scope.stats = stats
return stats
loadSprint: ->
return @rs.sprints.get(@scope.projectId, @scope.sprintId).then (sprint) =>
console.log "loadSprint", sprint
@scope.sprint = sprint
@scope.userstories = sprint.user_stories
return sprint
loadTasks: ->
return @rs.tasks.list(@scope.projectId, @scope.sprintId).then (tasks) =>
@scope.tasks = tasks
@scope.tasksByStatus = _.groupBy(tasks, "status")
console.log "loadTasks", @scope.tasksByStatus
return tasks
loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) =>
@scope.project = project
@scope.points = _.sortBy(project.points, "order")
@scope.statusList = _.sortBy(project.task_statuses, "id")
console.log "loadProject", @scope.statusList
return project
loadTaskboard: ->
return @q.all([
@.loadSprintStats(),
@.loadSprint()
# @.loadTasks(),
]).then(=> @.loadTasks())
loadInitialData: ->
console.log @params
promise = @repo.resolve({pslug: @params.pslug}).then (data) =>
@scope.projectId = data.project
return data
return promise.then(=> @.loadProject())
.then(=> @.loadUsersAndRoles())
.then(=> @.loadTaskboard())
#############################################################################
## TaskboardDirective
#############################################################################
TaskboardDirective = ->
#########################
## Drag & Drop Link
#########################
linkSortable = ($scope, $el, $attrs, $ctrl) ->
console.log "TaskboardDirective:linkSortable"
link = ($scope, $el, $attrs) ->
$ctrl = $el.controller()
linkSortable($scope, $el, $attrs, $ctrl)
# linkCommon($scope, $el, $attrs, $ctrl)
$scope.$on "$destroy", ->
$el.off()
return {link: link}
module = angular.module("taigaTaskboard", [])
module.controller("TaskboardController", TaskboardController)
module.directive("tgTaskboard", TaskboardDirective)

View File

@ -1,15 +1,15 @@
extends layout
extends dummy-layout
block head
title Taiga Project management web application with scrum in mind!
block content
div.wrapper
div.wrapper(tg-taskboard, ng-controller="TaskboardController as ctrl")
section.main.taskboard
h1
span ProjectName
span.green Sprint Name
span.date 02/10/2014-15/10/2014
include views/components/large-summary
span(tg-bo-html="project.name")
span.green(tg-bo-html="sprint-name")
span.date(tg-date-range="sprint.estimated_start,sprint.estimated_finish")
include views/components/sprint-summary
include views/modules/burndown
include views/modules/taskboard-table

View File

@ -1,9 +1,10 @@
div.summary.large-summary
div.summary-progress-bar
div.current-progress
div.data
span.number 30%
span.description completed
div(tg-sprint-progressbar="sprint")
div.summary-progress-bar
div.current-progress
div.data
span.number 30%
span.description completed
ul
li
span.number 12

View File

@ -1,4 +1,4 @@
div.taskboard-task
div.taskboard-task(ng-repeat="t in tasksByStatus[s.id] track by t.id")
div.taskboard-tagline
- for(var y = 0; y < 3; y++)
a.taskboard-tag(href="", title="tasboard-tag")

View File

@ -1,32 +1,29 @@
div.taskboard-table
div.taskboard-table-header
div.taskboard-table-inner
- for(var z = 0; z < 11; z++)
h2.task-colum_name user stories
h2.task-colum_name "User story"
h2.task-colum_name(ng-repeat="s in statusList track by s.id", tg-bo-html="s.name")
div.taskboard-table-body
div.taskboard-table-inner
div.taskboard_task-list.task-column
- for(var x = 0; x < 3; x++)
div.task-row
div.tag-list
- for(var y = 0; y < 5; y++)
include ../components/tag
h3.task-title
span.task-num 125
span Invitacion de los usuarios a la plataforma
ul.task-list
li.task-status Open
li UX
span 4.5
li Diseño
span 4.5
li Front
span 4.5
li Back
span 4.5
include ../components/addnewus
- for(var z = 0; z < 10; z++)
div.taskboard_task-playground.task-column
- for(var x = 0; x < 3; x++)
div.task-row
include ../components/taskboard-task
div.task-row(ng-repeat="us in userstories track by us.id")
div.tag-list
- for(var y = 0; y < 5; y++)
include ../components/tag
h3.task-title
span.task-num 125
span Invitacion de los usuarios a la plataforma
ul.task-list
li.task-status Open
li UX
span 4.5
li Diseño
span 4.5
li Front
span 4.5
li Back
span 4.5
include ../components/addnewus
div.taskboard_task-playground.task-column(ng-repeat="s in statusList track by s.id")
div.task-row(ng-repeat="us in userstories track by us.id")
include ../components/taskboard-task