diff --git a/admin/api/claim.go b/admin/api/claim.go index 46cac18b..d3438254 100644 --- a/admin/api/claim.go +++ b/admin/api/claim.go @@ -2,6 +2,7 @@ package api import ( "encoding/json" + "errors" "time" "srs.epita.fr/fic-server/libfic" @@ -11,9 +12,12 @@ import ( func init() { // Tasks - router.GET("/api/claims/", apiHandler(getClaims)) - router.POST("/api/claims/", apiHandler(newClaim)) - router.DELETE("/api/claims/", apiHandler(clearClaims)) + router.GET("/api/claims", apiHandler(getClaims)) + router.POST("/api/claims", apiHandler(newClaim)) + router.DELETE("/api/claims", apiHandler(clearClaims)) + router.GET("/api/teams/:tid/claims", apiHandler(teamHandler(getTeamClaims))) + router.GET("/api/exercices/:eid/claims", apiHandler(exerciceHandler(getExerciceClaims))) + router.GET("/api/themes/:thid/exercices/:eid/claims", apiHandler(exerciceHandler(getExerciceClaims))) router.GET("/api/claims/:cid", apiHandler(claimHandler(showClaim))) router.PUT("/api/claims/:cid", apiHandler(claimHandler(updateClaim))) @@ -21,8 +25,8 @@ func init() { router.DELETE("/api/claims/:cid", apiHandler(claimHandler(deleteClaim))) // Assignees - router.GET("/api/claims-assignees/", apiHandler(getAssignees)) - router.POST("/api/claims-assignees/", apiHandler(newAssignee)) + router.GET("/api/claims-assignees", apiHandler(getAssignees)) + router.POST("/api/claims-assignees", apiHandler(newAssignee)) router.GET("/api/claims-assignees/:aid", apiHandler(claimAssigneeHandler(showClaimAssignee))) router.PUT("/api/claims-assignees/:aid", apiHandler(claimAssigneeHandler(updateClaimAssignee))) @@ -33,6 +37,14 @@ func getClaims(_ httprouter.Params, _ []byte) (interface{}, error) { return fic.GetClaims() } +func getTeamClaims(team fic.Team, _ []byte) (interface{}, error) { + return team.GetClaims() +} + +func getExerciceClaims(exercice fic.Exercice, _ []byte) (interface{}, error) { + return exercice.GetClaims() +} + type ClaimExported struct { Id int64 `json:"id"` Subject string `json:"subject"` @@ -97,6 +109,10 @@ func newClaim(_ httprouter.Params, body []byte) (interface{}, error) { return nil, err } + if uc.Subject == "" { + return nil, errors.New("Claim's subject cannot be empty.") + } + var t *fic.Team if uc.Team != nil { if team, err := fic.GetTeam(*uc.Team); err != nil { @@ -130,6 +146,10 @@ func newClaim(_ httprouter.Params, body []byte) (interface{}, error) { a = nil } + if uc.Priority == "" { + uc.Priority = "medium" + } + return fic.NewClaim(uc.Subject, t, e, a, uc.Priority) } diff --git a/admin/static/js/app.js b/admin/static/js/app.js index 2496526c..2a24b5a7 100644 --- a/admin/static/js/app.js +++ b/admin/static/js/app.js @@ -229,6 +229,9 @@ angular.module("FICApp") patch: {method: 'PATCH'} }) }) + .factory("ExerciceClaims", function($resource) { + return $resource("/api/exercices/:exerciceId/claims", { exerciceId: '@idExercice'}) + }) .factory("ExerciceTags", function($resource) { return $resource("/api/exercices/:exerciceId/tags", { exerciceId: '@idExercice'}, { update: {method: 'PUT'} @@ -267,7 +270,7 @@ angular.module("FICApp") } }) .filter("toColor", function() { - return function(input) { + return function(num) { num >>>= 0; var b = num & 0xFF, g = (num & 0xFF00) >>> 8, @@ -1056,14 +1059,14 @@ angular.module("FICApp") $location.url("/claims/" + id); }; }) - .controller("ClaimController", function($scope, Claim, ClaimAssignee, Teams, Exercice, $routeParams, $location, $http) { + .controller("ClaimController", function($scope, Claim, ClaimAssignee, Teams, Exercice, $routeParams, $location, $http, $rootScope) { $scope.claim = Claim.get({ claimId: $routeParams.claimId }, function(v) { v.id_team = "" + v.id_team; if (!v.priority) v.priority = "medium"; }); if ($routeParams.claimId == "new") - $scope.fields = ["id_team", "subject", "priority", "id_exercice", "id_assignee"]; + $scope.fields = ["id_team", "id_exercice", "subject", "priority", "id_assignee"]; else $scope.fields = ["state", "subject", "priority", "id_exercice", "id_assignee", "id_team", "creation"]; $scope.assignees = ClaimAssignee.query(); @@ -1132,6 +1135,8 @@ angular.module("FICApp") if (!this.ndescription) this.ndescription = "Création de la tâche"; $scope.saveDescription(); + }, function(response) { + $rootScope.newBox('danger', 'An error occurs when trying to save claim:', response.data.errmsg); }); } } @@ -1362,6 +1367,22 @@ angular.module("FICApp") } }) + .controller("ExerciceClaimsController", function($scope, ExerciceClaims, Team, ClaimAssignee, $routeParams, $location) { + $scope.claims = ExerciceClaims.query({ exerciceId: $routeParams.exerciceId }); + $scope.assignees = ClaimAssignee.query(); + + $scope.claims.$promise.then(function(claims) { + claims.forEach(function(claim, cid) { + $scope.claims[cid].team = Team.get({ teamId: claim.id_team }); + }) + }); + + $scope.showClosed = false; + $scope.show = function(id) { + $location.url("/claims/" + id); + }; + }) + .controller("ExerciceTagsController", function($scope, ExerciceTags, $routeParams, $rootScope) { $scope.tags = ExerciceTags.query({ exerciceId: $routeParams.exerciceId }); diff --git a/admin/static/views/claim.html b/admin/static/views/claim.html index d74f4aba..4eb2a579 100644 --- a/admin/static/views/claim.html +++ b/admin/static/views/claim.html @@ -9,8 +9,13 @@ - - + +