(function () { 'use strict'; var app = angular.module('badgesDashboard'); var templatePath = modulesSharedResourcesUrl + 'Modules/BadgesDashboard/Views/'; app.directive('badgesDashboard', ['config', 'common', '$rootScope', '$location', '$modal', '$q', '$upload', 'OrganisationAdminService', 'fileUpload', 'badgesDashboardDataContext', 'branding', '$timeout', 'licencingAdminDataContext', '$filter', function (config, common, $rootScope, $location, $modal, $q, $upload, OrganisationAdminService, fileUpload, badgesDashboardDataContext, branding, $timeout, licencingAdminDataContext, $filter) { return { restrict: 'E', templateUrl: templatePath + 'dashboard.html', link: link }; function link($scope, elem, attrs) { var getLogFn = common.logger.getLogFn; var log = getLogFn('badgesDashboard'); var logSuccess = getLogFn('badgesDashboard', "success"); $scope.branding = branding; $scope.uprgadedTo = $location.search().upgraded; $scope.updated = $location.search().updated; activate(); function activate() { NProgress.done(); log('Activated Dashboard View'); getLicences(); if (navigator.msSaveBlob) { $scope.hideDownload = true; } } $rootScope.$on('UpdateLicence', function (event, args) { licencingAdminDataContext.getCurrentLicense(true).then(function (data) { $scope.licences = data; }); }); $rootScope.$on('UpdateDashboard', function (event, args) { $timeout(function () { getData(); }, 1000); }); function getLicences() { licencingAdminDataContext.getCurrentLicense().then(function (data) { $scope.licences = data; getData(); }); } $scope.seriese1 = ["# of Badges"]; $scope.seriese2 = ["# of recipients"]; $scope.datasets = [ { backgroundColor: [], borderColor: [], borderWidth: 2 } ]; $scope.optionsBadgeData = { responsive: true, legend: { display: false }, scales: { yAxes: [{ ticks: { beginAtZero: true, max: 50, callback: function (label, index, labels) { if (label > 1000) { return label / 1000 + 'k'; } else { return label; } } }, scaleLabel: { display: false, labelString: '1k = 1000' } }] } }; $scope.optionsRecipientData = { responsive: true, legend: { display: false }, scales: { yAxes: [{ ticks: { beginAtZero: true, max: 50, callback: function (label, index, labels) { if (label > 1000) { return label / 1000 + 'k'; } else { return label; } } }, scaleLabel: { display: false, labelString: '1k = 1000' } }] } }; $scope.removeAlert = function () { $location.search({}); } function getData() { var badgeMax = 10; var recipientMax = 10; if (!$scope.licences) { $scope.startDate = $filter('date')(moment().subtract(1, 'year').toDate(), "yyyy-MM-dd"); $scope.endDate = $filter('date')(moment().toDate(), "yyyy-MM-dd"); } else { $scope.startDate = $filter('date')(moment($scope.licences['obUniqueRecipients'].startDate).toDate(), "yyyy-MM-dd"); $scope.endDate = $filter('date')(moment($scope.licences['obUniqueRecipients'].endDate).toDate(), "yyyy-MM-dd"); } badgesDashboardDataContext.getBadges($scope.startDate, $scope.endDate).then(function (data) { $scope.badgeData = data; $scope.badgeData.data = [[]]; $scope.badgeData.label = []; $scope.badgesIssued = 0; angular.forEach($scope.badgeData, function (value, index) { $scope.badgesIssued = $scope.badgesIssued + value.data; $scope.badgeData.data[0].push(value.data); $scope.badgeData.label.push(value.label); if (badgeMax < value.data) { badgeMax = value.data; } if ($scope.branding) { $scope.datasets[0].backgroundColor.push(hexToRGB($scope.branding.secondaryColour, 0.5)); $scope.datasets[0].borderColor.push($scope.branding.secondaryColour); } else if (config.appCode == 'MSA') { $scope.datasets[0].backgroundColor.push('rgba(76, 181, 72, 0.5)'); $scope.datasets[0].borderColor.push('rgba(76, 181, 72, 1)'); } else if (config.appCode == 'OB') { $scope.datasets[0].backgroundColor.push('rgba(229, 40, 134, 0.5)'); $scope.datasets[0].borderColor.push('rgba(229, 40, 134, 1)'); } $scope.optionsBadgeData.scales.yAxes[0].ticks.max = Math.ceil(badgeMax / 10) * 10; $timeout(function () { var canvas = document.getElementById('badgeData'); if (canvas) { $scope.badgeDataDownloadUrl = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream") } }, 2000); $scope.badgeDataLoaded = true; }) }); badgesDashboardDataContext.getRecipients($scope.startDate, $scope.endDate).then(function (data) { $scope.recipientData = data; $scope.recipientData.data = [[]]; $scope.recipientData.label = []; $scope.uniqueRecipients = 0; angular.forEach($scope.recipientData, function (value, index) { $scope.recipientData.data[0].push(value.data); $scope.uniqueRecipients = $scope.uniqueRecipients + value.data; $scope.recipientData.label.push(value.label); if (recipientMax < value.data) { recipientMax = value.data; } $scope.optionsRecipientData.scales.yAxes[0].ticks.max = Math.ceil(recipientMax / 10) * 10; $timeout(function () { var canvas = document.getElementById('recipientData'); if (canvas) { $scope.recipientDataDownloadUrl = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream") } }, 2000); $scope.recipientDataLoaded = true; }) }); } // Convert the hex to an translucent rgba function hexToRGB(hex, alpha) { var r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16); if (alpha) { return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")"; } else { return "rgb(" + r + ", " + g + ", " + b + ")"; } } } }]); })();