From 965bb0765165adfd3e8feb27a62c39d5f7ca79aa Mon Sep 17 00:00:00 2001 From: OldHawk Date: Tue, 17 Apr 2018 13:30:51 +0800 Subject: [PATCH] feat(tickets): count opened tickets --- .../message-tickets.client.controller.js | 18 +++++++++-- .../client/services/tickets.client.service.js | 8 +++++ .../client/views/support.client.view.html | 6 ++-- .../mailTickets.server.controller.js | 17 ++++++++++ .../messageTickets.server.controller.js | 31 +++++++++++++++++-- .../server/policies/tickets.server.policy.js | 5 ++- .../server/routes/tickets.server.routes.js | 6 ++++ 7 files changed, 83 insertions(+), 8 deletions(-) diff --git a/modules/tickets/client/controllers/message-tickets.client.controller.js b/modules/tickets/client/controllers/message-tickets.client.controller.js index 7ed41921..ec4f2012 100644 --- a/modules/tickets/client/controllers/message-tickets.client.controller.js +++ b/modules/tickets/client/controllers/message-tickets.client.controller.js @@ -6,16 +6,29 @@ .controller('MessageTicketController', MessageTicketController); MessageTicketController.$inject = ['$scope', '$state', '$timeout', '$translate', 'Authentication', 'MessageTicketsService', 'ModalConfirmService', 'NotifycationService', 'marked', - 'DebugConsoleService', 'MeanTorrentConfig', '$filter', '$rootScope']; + 'DebugConsoleService', 'MeanTorrentConfig', '$filter', '$rootScope', 'MailTicketsService']; function MessageTicketController($scope, $state, $timeout, $translate, Authentication, MessageTicketsService, ModalConfirmService, NotifycationService, marked, - mtDebug, MeanTorrentConfig, $filter, $rootScope) { + mtDebug, MeanTorrentConfig, $filter, $rootScope, MailTicketsService) { var vm = this; $rootScope.$state = $state; vm.user = Authentication.user; vm.itemsPerPageConfig = MeanTorrentConfig.meanTorrentConfig.itemsPerPage; vm.supportConfig = MeanTorrentConfig.meanTorrentConfig.support; + /** + * getOpenedTicketsNumber + */ + vm.getOpenedTicketsNumber = function () { + MessageTicketsService.getOpenedCount(function (res) { + console.log(res); + $scope.messageOpened = res.opened; + }); + MailTicketsService.getOpenedCount(function (res) { + console.log(res); + $scope.mailOpened = res.opened; + }); + }; /** * buildPager @@ -35,6 +48,7 @@ vm.getMessageTickets(vm.currentPage, function (items) { vm.filterLength = items.total; vm.pagedItems = items.rows; + $rootScope.messageOpened = items.opened; if (callback) callback(); }); diff --git a/modules/tickets/client/services/tickets.client.service.js b/modules/tickets/client/services/tickets.client.service.js index a3db1096..43414aa0 100644 --- a/modules/tickets/client/services/tickets.client.service.js +++ b/modules/tickets/client/services/tickets.client.service.js @@ -28,6 +28,10 @@ params: { messageTicketId: '@messageTicketId' } + }, + getOpenedCount: { + method: 'GET', + url: '/api/messageTickets/openedCount' } }); } @@ -44,6 +48,10 @@ }, { update: { method: 'PUT' + }, + getOpenedCount: { + method: 'GET', + url: '/api/mailTickets/openedCount' } }); } diff --git a/modules/tickets/client/views/support.client.view.html b/modules/tickets/client/views/support.client.view.html index 57b0db1f..89140783 100644 --- a/modules/tickets/client/views/support.client.view.html +++ b/modules/tickets/client/views/support.client.view.html @@ -1,4 +1,4 @@ -
+
diff --git a/modules/tickets/server/controllers/mailTickets.server.controller.js b/modules/tickets/server/controllers/mailTickets.server.controller.js index ca1d99be..23f2e14d 100644 --- a/modules/tickets/server/controllers/mailTickets.server.controller.js +++ b/modules/tickets/server/controllers/mailTickets.server.controller.js @@ -171,6 +171,23 @@ exports.createReply = function (req, res) { }); }; +/** + * openedCount + * @param req + * @param res + */ +exports.openedCount = function (req, res) { + MailTicket.count({status: 'open'}, function (err, count) { + if (err) { + return res.status(422).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + res.json({opened: count}); + } + }); +}; + /** * Invitation middleware */ diff --git a/modules/tickets/server/controllers/messageTickets.server.controller.js b/modules/tickets/server/controllers/messageTickets.server.controller.js index 028404e5..0a0a9195 100644 --- a/modules/tickets/server/controllers/messageTickets.server.controller.js +++ b/modules/tickets/server/controllers/messageTickets.server.controller.js @@ -86,6 +86,16 @@ exports.list = function (req, res) { }); }; + var countUnSolvedMessage = function (callback) { + MessageTicket.count({status: 'open'}, function (err, count) { + if (err) { + callback(err, null); + } else { + callback(null, count); + } + }); + }; + var findMessage = function (callback) { MessageTicket.find(condition) .sort('-updatedAt -createdAt') @@ -107,11 +117,11 @@ exports.list = function (req, res) { }); }; - async.parallel([countMessage, findMessage], function (err, results) { + async.parallel([countMessage, findMessage, countUnSolvedMessage], function (err, results) { if (err) { return res.status(422).send(err); } else { - res.json({rows: results[1], total: results[0]}); + res.json({rows: results[1], total: results[0], opened: results[2]}); } }); }; @@ -260,6 +270,23 @@ function move(oldPath, newPath, callback) { } } +/** + * openedCount + * @param req + * @param res + */ +exports.openedCount = function (req, res) { + MessageTicket.count({status: 'open'}, function (err, count) { + if (err) { + return res.status(422).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + res.json({opened: count}); + } + }); +}; + /** * uploadTicketImage * @param req diff --git a/modules/tickets/server/policies/tickets.server.policy.js b/modules/tickets/server/policies/tickets.server.policy.js index 9b0eed38..d97f254a 100644 --- a/modules/tickets/server/policies/tickets.server.policy.js +++ b/modules/tickets/server/policies/tickets.server.policy.js @@ -22,10 +22,13 @@ exports.invokeRolesPolicies = function () { {resources: '/api/messageTickets/solved/:messageTicketId', permissions: '*'}, {resources: '/api/messageTickets/:messageTicketId', permissions: '*'}, {resources: '/api/messageTickets/:messageTicketId/:replyId', permissions: '*'}, + {resources: '/api/messageTickets/uploadTicketImage', permissions: '*'}, + {resources: '/api/messageTickets/openedCount', permissions: '*'}, + {resources: '/api/mailTickets', permissions: '*'}, {resources: '/api/mailTickets/:mailTicketId', permissions: '*'}, {resources: '/api/mailTickets/:mailTicketId/:replyId', permissions: '*'}, - {resources: '/api/messageTickets/uploadTicketImage', permissions: '*'} + {resources: '/api/mailTickets/openedCount', permissions: '*'} ] } ] diff --git a/modules/tickets/server/routes/tickets.server.routes.js b/modules/tickets/server/routes/tickets.server.routes.js index 74f2d85f..faa8fa10 100644 --- a/modules/tickets/server/routes/tickets.server.routes.js +++ b/modules/tickets/server/routes/tickets.server.routes.js @@ -15,6 +15,9 @@ module.exports = function (app) { app.route('/api/messageTickets/uploadTicketImage').all(ticketsPolicy.isAllowed) .post(messageTickets.uploadTicketImage); + app.route('/api/messageTickets/openedCount').all(ticketsPolicy.isAllowed) + .get(messageTickets.openedCount); + app.route('/api/messageTickets/handle/:messageTicketId').all(ticketsPolicy.isAllowed) .put(messageTickets.handle); @@ -36,6 +39,9 @@ module.exports = function (app) { .get(mailTickets.list) .delete(mailTickets.delete); + app.route('/api/mailTickets/openedCount').all(ticketsPolicy.isAllowed) + .get(mailTickets.openedCount); + app.route('/api/mailTickets/:mailTicketId').all(ticketsPolicy.isAllowed) .get(mailTickets.read) .delete(mailTickets.delete)