diff --git a/src/app/pages/surveys/create/createTabCtrl.js b/src/app/pages/surveys/create/createTabCtrl.js index 19357c3..8b0c32f 100644 --- a/src/app/pages/surveys/create/createTabCtrl.js +++ b/src/app/pages/surveys/create/createTabCtrl.js @@ -30,7 +30,22 @@ }); } }; - }); + }) + .directive('enforceMaxTags', function() { + return { + require: 'ngModel', + link: function(scope, element, attrs, ngCtrl) { + var maxTags = attrs.maxTags ? parseInt(attrs.maxTags, '10') : null; + + ngCtrl.$parsers.push(function(value) { + if (value && maxTags && value.length > maxTags) { + value.splice(value.length - 1, 1); + } + return value; + }); + } + }; + }); /** @ngInject */ function CreateTabCtrl(SurveyService, ListService,MemberService, $scope, $http, $compile, $timeout, $stateParams, $log, toastr, $uibModal, $state) { @@ -59,7 +74,7 @@ $scope.panelFoldToggle = function(index) { $scope.survey.elements[index].isUnfolded = !$scope.survey.elements[index].isUnfolded; - console.log($scope.survey.elements[index].isUnfolded); + console.log("panelFoldToggle index isUnfolded $scope.survey.elements", index, $scope.survey.elements[index].isUnfolded, $scope.survey.elements); }; $scope.getTheFoldingClass = function() { @@ -80,7 +95,7 @@ }; $scope.createEmptyElement = function(type,orderNo){ - var item = { + var item = { id: null, orderNo: 1, value: null @@ -95,12 +110,29 @@ isUnfolded: false, comment: false, commentLabel: '', - tags:[], - tagsJoined:'', + tag:'', + //tagsJoined:'', items: (type == 'multiple') ? [item] : [], }; } + $scope.copyElement = function(index){ + //elem.id = null + var originalElem = $scope.survey.elements[index] + var newElem = $scope.createEmptyElement(originalElem.type, $scope.survey.elements.length + 1) + newElem.isUnfolded = false + newElem.text = originalElem.text + newElem.comment = originalElem.comment + newElem.commentLabel = originalElem.commentLabel + newElem.tag = originalElem.tag + newElem.items = originalElem.items + //console.log("$scope.survey.elements", $scope.survey.elements) + $scope.survey.elements.push(newElem); + $scope.updateBuilder(); + console.log("$scope.survey.elements", $scope.survey.elements) + + } + $scope.addNewItem=function(index){ var item = { @@ -287,7 +319,22 @@ if($stateParams.survey_id) { $scope.loadSurvey($stateParams.survey_id); } - $scope.loadLists(); + $scope.loadLists(); + + $scope.tags = [ + "Share of expertise with the company" , + "Acceptable work demands" , + "Good relations with management" , + "Team work" , + "Happiness", + "Innovation", + "Leadership", + "Supportiveness", + "Determination", + "Trust", + "Spirituality / my life", + "Environnement respect" + ]; } $scope.activate(); diff --git a/src/app/pages/surveys/create/widgets/multiple.html b/src/app/pages/surveys/create/widgets/multiple.html index 2145736..9b5d3a0 100644 --- a/src/app/pages/surveys/create/widgets/multiple.html +++ b/src/app/pages/surveys/create/widgets/multiple.html @@ -2,7 +2,7 @@ -
\ No newline at end of file diff --git a/src/app/pages/surveys/list/list.controller.js b/src/app/pages/surveys/list/list.controller.js index 7a71a9d..1c2c369 100644 --- a/src/app/pages/surveys/list/list.controller.js +++ b/src/app/pages/surveys/list/list.controller.js @@ -5,7 +5,7 @@ .controller('list', list); /** @ngInject */ - function list( SurveyService, AnswerService, $scope, $rootScope, $log, $state, toastr, baConfig) { + function list( SurveyService, AnswerService, MemberService, $scope, $rootScope, $log, $state, toastr, baConfig, $q, $http, $sce, $filter) { var vm = this; $rootScope.$state = $state; @@ -85,6 +85,35 @@ //console.log('getSurveyCompletion', vm.surveys); } + function printPdf(){ + console.log('printing pdf...'); + getPDF().then(function(response){ + console.log(response); + window.open(response); + },function(err){ + console.log('Error: ' + err); + }); + }; + + function getPDF(){ + vm.loading = true; + var q = $q.defer(); + $http.defaults.headers.common['content-type']= 'application/pdf'; + $http.get('http://localhost:9000/pdf/regular', {params : {"survey":vm.activeSurvey.id}, responseType:'arraybuffer'}) + .success(function (response) { + console.log(response); + var file = new Blob([response], {type: 'application/pdf'}); + var fileURL = URL.createObjectURL(file); + vm.loading = false; + q.resolve(fileURL); + }) + .error(function(err){ + vm.loading = false; + q.reject(err); + }); + return q.promise; + }; + function analyzeSurvey(survey) { var params = {"survey":survey.id} AnswerService @@ -93,34 +122,234 @@ vm.analysis = data; vm.activeSurvey = survey; $log.info("Got answers analysis",data); + getRespondents(survey); + + if(vm.activeSurvey.type != "s_360") + getListAnalysis(); + else + getS360Analysis(); + }, function (error){ $log.error(error); }); } + function getRespondents(survey) { + var members = vm.analysis.data.overall.respondents.join(', ') + var params = {"ids":members} + MemberService + .list(params) + .then(function (data){ + vm.members = data; + $log.info("Got members",data); + angular.forEach(vm.members, function(member, key) { + member.answers = $filter('filter')(vm.analysis.answers, {'asked' : {'id' : member.id}}) + }) + vm.selectedMember = (vm.members.length > 0) ? vm.members[0] : []; + console.log("getRespondents", vm.members); + }, function (error){ + $log.error(error); + }); + } + + function getS360Analysis(){ + vm.s360Analysis = {"lists" : {}, "overall": {}} + //overall + vm.s360Analysis.overall = gets360Data(vm.analysis.data.overall); + //lists + angular.forEach(vm.activeSurvey.list, function(list) { + vm.s360Analysis.lists[list._id] = {} + vm.s360Analysis.lists[list._id].labels = [] + vm.s360Analysis.lists[list._id] = gets360Data(vm.analysis.data.lists[list._id]); + }); + //individual + vm.s360Analysis.individual = gets360IndividualData(vm.analysis.data.overall); + console.log("listAnalysis", vm.s360Analysis) + + } + + function gets360Data(listData){ + var data = {} + data.labels = [] + data.data = [] + angular.forEach(vm.activeSurvey.elements, function(element) { + var index = 0; + var sumElementScore = 0; + data.labels.push(element.tag) + angular.forEach(listData.data, function(asked) { + angular.forEach(asked, function(evaluated) { + index++ + sumElementScore += evaluated[element._id] ? evaluated[element._id] : 0 + //console.log("evaluated, element._id, evaluated[element._id]", evaluated, element._id, evaluated[element._id]) + }) + }) + var average = sumElementScore / index + + data.data.push(average); + }) + return data; + } + + function gets360IndividualData(listData){ + //var data = {} + + + var data = {} + /*data.labels = [] + data.data = {} + angular.forEach(listData.members, function(member) { + data.data[member] = {} + //angular.forEach(listData.members, function(m) { + data.data[member] = {} + angular.forEach(vm.activeSurvey.elements, function(element) { + data.data[member][element._id] = [] + }) + //}) + }) + var askedData = {} + angular.forEach(vm.activeSurvey.elements, function(element) { + angular.forEach(listData.data, function(asked, a) { + var askedScore = 0 + askedData[a] = askedData[a] ? askedData[a] : [] + angular.forEach(asked, function(evaluated, e) { + if(e=='59b7f2d5c59b371d734ac120' && element._id =='59b7f8bbc59b371d734ac144') + console.log("evaluated[element._id]",evaluated[element._id]) + + askedScore += evaluated[element._id] ? evaluated[element._id] : 100 + + if (a == e) { + var val = evaluated[element._id] ? evaluated[element._id] : 0 + //askedData[a][element._id].push(val) + //console.log("a, val, askedData", a, val, askedData) + } + + if(e=='59b7f2d5c59b371d734ac120' && element._id =='59b7f8bbc59b371d734ac144') + console.log("askedScore",askedScore) + }) + + var avg = askedScore / listData.members.length + data.data[a][element._id].push(avg); + }) + })*/ + //console.log("data.data", data.data) + data.data = {} + data.labels = [] + var askedData = {} + angular.forEach(vm.activeSurvey.elements, function(element) { + var index = 0; + var sumElementScore = 0; + + data.labels.push(element.tag) + angular.forEach(listData.data, function(asked, a) { + var i = 0; + var askedScore = 0 + askedData[a] = askedData[a] ? askedData[a] : [] + data.data[a] = data.data[a] ? data.data[a] : [] + angular.forEach(asked, function(evaluated, e) { + i++ + + askedScore = askedScore + evaluated[element._id] + + + + if(e=='59b7f2d5c59b371d734ac120' && element._id =='59b7f8bbc59b371d734ac144') + { + console.log("evaluated[element._id], askedScore, i",evaluated[element._id], askedScore, evaluated) + //console.log("i, evaluated[element._id], a", i, evaluated[element._id], a) + } + if (a == e) { + var val = evaluated[element._id] ? evaluated[element._id] : 0 + askedData[a].push(val) + if(e=='59b7f2d5c59b371d734ac120' && element._id =='59b7f8bbc59b371d734ac144') + console.log("a, val, askedData askedScore", a, val, askedData) + } + //console.log("evaluated, element._id, evaluated[element._id]", evaluated, element._id, evaluated[element._id]) + }) + var avg = askedScore / listData.members.length + data.data[a].push(avg); + }) + //var average = sumElementScore / index + //data.data.push(average); + + //console.log("data.data, askedData", data.data, askedData); + //data.data.push(average); + }) + + var finalData = {} + finalData.data = {} + angular.forEach(data.data, function(el, key) { + finalData.data[key] = [] + angular.forEach(askedData, function(ask, k) { + + if(key == k) { + finalData.data[key] = [el, ask] + } + + + }) + + }) + finalData.labels = data.labels + return finalData; + } + + function getListAnalysis(){ + vm.listAnalysis = {} + angular.forEach(vm.activeSurvey.list, function(list) { + vm.listAnalysis[list._id] = {} + //analysis.id = list._id + //analysis.name = list.name + vm.listAnalysis[list._id].labels = [] + vm.listAnalysis[list._id].data = [] + var listData = vm.analysis.data.lists[list._id] + //console.log(vm.analysis.data.lists[list._id]) + angular.forEach(vm.activeSurvey.elements, function(element) { + + vm.listAnalysis[list._id].labels.push(element.tag) + var perfectScore = listData.respondents.length * element.items.length //totalParticip * nbrChoix + // nobreReponseN * coeficientN + ... + var totalScore = 0; + for ( var i = 0, _len = listData.data[element._id].length; i < _len; i++ ) { + totalScore += listData.data[element._id][i] * (i+1) + } + var percent = totalScore * 100 / perfectScore + vm.listAnalysis[list._id].data.push(percent); + //console.log("listData.data[element._id], perfectScore, totalScore, percent", listData.data[element._id], perfectScore, totalScore, percent) + }) + //vm.listAnalysis.push(analysis) + }); + console.log("listAnalysis", vm.listAnalysis) + + } + function activate(){ vm.surveys = []; vm.activeSurvey = {}; + vm.members = []; + vm.selectedMember = {}; vm.goToCreate = goToCreate; vm.analyzeSurvey = analyzeSurvey; vm.editSurvey = editSurvey; vm.removeSurvey = removeSurvey; + vm.printPdf = printPdf; - var layoutColors = baConfig.colors; - vm.doughnutOptions = { - elements: { - arc: { - borderWidth: 0 - } - }, - legend: { - display: true, - position: 'bottom', - labels: { - fontColor: layoutColors.defaultText - } + vm.s360ChartOption = { + scales: { + + yAxes: [{ + ticks: { + + min: 0, + max: 10, + callback: function(value){return value} + }, + scaleLabel: { + display: false + } + }] } }; + vm.series = ['How the others see you', 'How you evaluated yourself']; loadSurveys(); } diff --git a/src/app/pages/surveys/list/surveyDetails.html b/src/app/pages/surveys/list/surveyDetails.html index 674a6dc..297b638 100644 --- a/src/app/pages/surveys/list/surveyDetails.html +++ b/src/app/pages/surveys/list/surveyDetails.html @@ -1,12 +1,13 @@ +