diff --git a/www/index.html b/www/index.html index 3e5ece0..31d0eb6 100644 --- a/www/index.html +++ b/www/index.html @@ -80,6 +80,7 @@ +
diff --git a/www/js/app.js b/www/js/app.js index aff1ea0..eb6b79a 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -18,6 +18,7 @@ angular.module('TagApp', [ 'eventTypes.controller', 'oldFiles.controller', 'teams.controller', + 'supportTickets.controller', 'recorder.service', 'cameraMovement.service', 'recorderControll.service', @@ -172,6 +173,24 @@ angular.module('TagApp', [ } } + }).state('app.support_tickets', { + url: '/support_tickets', + views: { + 'menuContent': { + templateUrl: 'templates/support_tickets.html', + controller: 'SupportTicketsCtrl' + } + } + + }).state('app.view_ticket', { + url: '/view_ticket/{id}', + views: { + 'menuContent': { + templateUrl: 'templates/view_ticket.html', + controller: 'ViewTicketCtrl' + } + } + }); // if none of the above states are matched, use this as the fallback $urlRouterProvider.otherwise('/login'); diff --git a/www/js/controllers/support_tickets.js b/www/js/controllers/support_tickets.js new file mode 100644 index 0000000..52bf10a --- /dev/null +++ b/www/js/controllers/support_tickets.js @@ -0,0 +1,199 @@ +angular.module('supportTickets.controller', []) + +.controller('SupportTicketsCtrl', function($scope, $rootScope, $ionicPopup, $state) { + $scope.$on("$ionicView.beforeEnter", function() { + if (!$rootScope.isUser()) { + $state.go('login'); + } + $scope.loadTickets(); + }); + + $scope.tickets = []; + $scope.statusFilter = 'all'; + + $scope.loadTickets = function() { + if (localStorage.support_tickets) { + $scope.tickets = JSON.parse(localStorage.support_tickets); + } else { + $scope.tickets = []; + } + }; + + $scope.saveTickets = function() { + localStorage.support_tickets = JSON.stringify($scope.tickets); + }; + + $scope.filteredTickets = function() { + if ($scope.statusFilter === 'all') return $scope.tickets; + return $scope.tickets.filter(function(t) { return t.status === $scope.statusFilter; }); + }; + + $scope.setFilter = function(status) { + $scope.statusFilter = status; + }; + + $scope.priorityClass = function(priority) { + return { low: 'energized', medium: 'assertive', high: 'assertive' }[priority] || ''; + }; + + $scope.statusLabel = function(status) { + var labels = { open: 'Open', in_progress: 'In Progress', resolved: 'Resolved', closed: 'Closed' }; + return labels[status] || status; + }; + + $scope.openNewTicketPopup = function() { + $scope.newTicket = { priority: 'medium', category: 'technical' }; + + var template = + 'No tickets found.
+Try changing the filter above.
++ + {{statusLabel(ticket.status)}} + + {{ticket.category | uppercase}} + • {{ticket.comments.length}} comment{{ticket.comments.length !== 1 ? 's' : ''}} +
++ {{ticket.created_at | date:'mediumDate'}} +
+ + + +{{ticket.description}}
+{{comment.text}}
+Ticket not found.
+ +