mirror of https://github.com/akveo/blur-admin
finishing reports
parent
be628ea0ec
commit
59c2f1e907
|
@ -30,6 +30,21 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
})
|
||||||
|
.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 */
|
/** @ngInject */
|
||||||
|
@ -59,7 +74,7 @@
|
||||||
|
|
||||||
$scope.panelFoldToggle = function(index) {
|
$scope.panelFoldToggle = function(index) {
|
||||||
$scope.survey.elements[index].isUnfolded = !$scope.survey.elements[index].isUnfolded;
|
$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() {
|
$scope.getTheFoldingClass = function() {
|
||||||
|
@ -95,12 +110,29 @@
|
||||||
isUnfolded: false,
|
isUnfolded: false,
|
||||||
comment: false,
|
comment: false,
|
||||||
commentLabel: '',
|
commentLabel: '',
|
||||||
tags:[],
|
tag:'',
|
||||||
tagsJoined:'',
|
//tagsJoined:'',
|
||||||
items: (type == 'multiple') ? [item] : [],
|
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){
|
$scope.addNewItem=function(index){
|
||||||
|
|
||||||
var item = {
|
var item = {
|
||||||
|
@ -288,6 +320,21 @@
|
||||||
$scope.loadSurvey($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();
|
$scope.activate();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div ng-repeat="element in survey.elements" id="q-{{$index}}" class="panel panel-default bootstrap-panel new-question-options-container">
|
<div ng-repeat="element in survey.elements track by $index" id="q-{{$index}}" class="panel panel-default bootstrap-panel new-question-options-container">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title pull-left">Question {{$index+1}}</h4>
|
<h4 class="panel-title pull-left">Question {{$index+1}}</h4>
|
||||||
<div class="btn-group pull-right">
|
<div class="btn-group pull-right">
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
<button type="button" class="btn btn-default btn-icon" ng-click="panelFoldToggle($index)"><i class="" ng-class="getTheFoldingClass()"></i></button>
|
<button type="button" class="btn btn-default btn-icon" ng-click="panelFoldToggle($index)"><i class="" ng-class="getTheFoldingClass()"></i></button>
|
||||||
<button type="button" class="btn btn-default btn-icon"><i class="fa fa-chevron-down"></i></button>
|
<button type="button" class="btn btn-default btn-icon"><i class="fa fa-chevron-down"></i></button>
|
||||||
<button type="button" class="btn btn-default btn-icon"><i class="fa fa-chevron-up"></i></button>
|
<button type="button" class="btn btn-default btn-icon"><i class="fa fa-chevron-up"></i></button>
|
||||||
<button type="button" class="btn btn-default btn-icon"><i class="fa fa-pencil-square-o"></i></button>
|
<button type="button" class="btn btn-default btn-icon" ng-click="copyElement($index)"><i class="fa fa-pencil-square-o"></i></button>
|
||||||
<button type="button" class="btn btn-default btn-icon" ng-click="removeElement($index)"><i class="fa fa-trash-o"></i></button>
|
<button type="button" class="btn btn-default btn-icon" ng-click="removeElement($index)"><i class="fa fa-trash-o"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -51,7 +51,6 @@
|
||||||
<span>Required field</span>
|
<span>Required field</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--<div class="col-md-10 pull-right">
|
<!--<div class="col-md-10 pull-right">
|
||||||
<label class="checkbox-inline custom-checkbox nowrap">
|
<label class="checkbox-inline custom-checkbox nowrap">
|
||||||
<input ng-model="element.multiAnswers" type="checkbox">
|
<input ng-model="element.multiAnswers" type="checkbox">
|
||||||
|
@ -61,10 +60,10 @@
|
||||||
|
|
||||||
<div class="col-md-10 pull-right">
|
<div class="col-md-10 pull-right">
|
||||||
<label class="checkbox-inline custom-checkbox nowrap">
|
<label class="checkbox-inline custom-checkbox nowrap">
|
||||||
<input ng-model="element.comment" type="checkbox">
|
<input ng-model="element.hasComment" type="checkbox">
|
||||||
<span>Add an "Other" Answer Option or Comment Field</span>
|
<span>Add a Comment Field</span>
|
||||||
</label>
|
</label>
|
||||||
<div class="form-group" ng-show=element.comment>
|
<div class="form-group" ng-show=element.hasComment>
|
||||||
<label for="inputEmail3" class="col-sm-2 control-label">Label</label>
|
<label for="inputEmail3" class="col-sm-2 control-label">Label</label>
|
||||||
<div class="col-sm-5">
|
<div class="col-sm-5">
|
||||||
<input ng-model="element.commentLabel" type="text" class="form-control">
|
<input ng-model="element.commentLabel" type="text" class="form-control">
|
||||||
|
@ -76,9 +75,22 @@
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-10 pull-right">
|
||||||
|
<ui-select ng-model="element.tag"
|
||||||
|
class="btn-group bootstrap-select form-control"
|
||||||
|
ng-disabled="false"
|
||||||
|
append-to-body="true"
|
||||||
|
search-enabled="true">
|
||||||
|
<ui-select-match placeholder="Please choose the question category">
|
||||||
|
{{$select.selected}}
|
||||||
|
</ui-select-match>
|
||||||
|
<ui-select-choices
|
||||||
|
repeat="withSearchItem in tags | filter: $select.search">
|
||||||
|
<span ng-bind-html="withSearchItem"></span>
|
||||||
|
</ui-select-choices>
|
||||||
|
</ui-select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -87,16 +99,17 @@
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<!-- Begin Tags -->
|
<!-- Begin Tags -->
|
||||||
<div class="form-group">
|
<!--<div class="form-group">
|
||||||
<label class="col-md-12">Question Tags</label>
|
<label class="col-md-12">Question Tags</label>
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
|
||||||
<tags-input track-by-expr="$index" class="bootstrap" ng-model="element.tags" use-strings="true">
|
<tags-input track-by-expr="$index" class="bootstrap" ng-model="element.tags" use-strings="true" max-tags="1" enforce-max-tags>
|
||||||
|
<auto-complete source="loadTags($query)"></auto-complete>
|
||||||
</tags-input>
|
</tags-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>-->
|
||||||
<!-- End Tags -->
|
<!-- End Tags -->
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -5,7 +5,7 @@
|
||||||
.controller('list', list);
|
.controller('list', list);
|
||||||
|
|
||||||
/** @ngInject */
|
/** @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;
|
var vm = this;
|
||||||
$rootScope.$state = $state;
|
$rootScope.$state = $state;
|
||||||
|
|
||||||
|
@ -85,6 +85,35 @@
|
||||||
//console.log('getSurveyCompletion', vm.surveys);
|
//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) {
|
function analyzeSurvey(survey) {
|
||||||
var params = {"survey":survey.id}
|
var params = {"survey":survey.id}
|
||||||
AnswerService
|
AnswerService
|
||||||
|
@ -93,34 +122,234 @@
|
||||||
vm.analysis = data;
|
vm.analysis = data;
|
||||||
vm.activeSurvey = survey;
|
vm.activeSurvey = survey;
|
||||||
$log.info("Got answers analysis",data);
|
$log.info("Got answers analysis",data);
|
||||||
|
getRespondents(survey);
|
||||||
|
|
||||||
|
if(vm.activeSurvey.type != "s_360")
|
||||||
|
getListAnalysis();
|
||||||
|
else
|
||||||
|
getS360Analysis();
|
||||||
|
|
||||||
}, function (error){
|
}, function (error){
|
||||||
$log.error(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(){
|
function activate(){
|
||||||
vm.surveys = [];
|
vm.surveys = [];
|
||||||
vm.activeSurvey = {};
|
vm.activeSurvey = {};
|
||||||
|
vm.members = [];
|
||||||
|
vm.selectedMember = {};
|
||||||
vm.goToCreate = goToCreate;
|
vm.goToCreate = goToCreate;
|
||||||
vm.analyzeSurvey = analyzeSurvey;
|
vm.analyzeSurvey = analyzeSurvey;
|
||||||
vm.editSurvey = editSurvey;
|
vm.editSurvey = editSurvey;
|
||||||
vm.removeSurvey = removeSurvey;
|
vm.removeSurvey = removeSurvey;
|
||||||
|
vm.printPdf = printPdf;
|
||||||
|
|
||||||
var layoutColors = baConfig.colors;
|
vm.s360ChartOption = {
|
||||||
vm.doughnutOptions = {
|
scales: {
|
||||||
elements: {
|
|
||||||
arc: {
|
yAxes: [{
|
||||||
borderWidth: 0
|
ticks: {
|
||||||
}
|
|
||||||
|
min: 0,
|
||||||
|
max: 10,
|
||||||
|
callback: function(value){return value}
|
||||||
},
|
},
|
||||||
legend: {
|
scaleLabel: {
|
||||||
display: true,
|
display: false
|
||||||
position: 'bottom',
|
|
||||||
labels: {
|
|
||||||
fontColor: layoutColors.defaultText
|
|
||||||
}
|
}
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
vm.series = ['How the others see you', 'How you evaluated yourself'];
|
||||||
|
|
||||||
loadSurveys();
|
loadSurveys();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
|
<div id="analysis">
|
||||||
<uib-tabset active="$tabSetStatus.activeTab">
|
<uib-tabset active="$tabSetStatus.activeTab">
|
||||||
<uib-tab heading="Question summaries">
|
<uib-tab heading="Question summaries" ng-if="vm.activeSurvey.type != 's_360'">
|
||||||
|
<button type="button" ng-click="vm.printPdf()">Print PDF in new window</button>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
|
||||||
<div class="progress">
|
<div class="progress">
|
||||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{vm.analysis.completion}}" aria-valuemin="0" aria-valuemax="100" style="width: {{vm.analysis.completion}}%">
|
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{vm.analysis.completion}}" aria-valuemin="0" aria-valuemax="100" style="width: {{vm.analysis.completion}}%">
|
||||||
{{vm.activeSurvey.completion}}% of question answred (Respondents : {{vm.analysis.respondents.length}} of {{vm.analysis.recipents}})
|
{{vm.activeSurvey.completion}}% of question answred (Respondents : {{vm.analysis.data.overall.respondents.length}} of {{vm.analysis.recipents}})
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
|
@ -20,7 +21,7 @@
|
||||||
|
|
||||||
<div class="chartjs-canvas-holder-first-row" style="max-width: 300px;margin:0 auto;">
|
<div class="chartjs-canvas-holder-first-row" style="max-width: 300px;margin:0 auto;">
|
||||||
<canvas id="doughnut" chart-options="vm.doughnutOptions" class="chart chart-doughnut"
|
<canvas id="doughnut" chart-options="vm.doughnutOptions" class="chart chart-doughnut"
|
||||||
chart-data="vm.analysis.data[e._id]" chart-labels="vm.analysis.labels[e._id]">
|
chart-data="vm.analysis.data.overall.data[e._id]" chart-labels="vm.analysis.labels[e._id]">
|
||||||
</canvas>
|
</canvas>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -34,7 +35,159 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</uib-tab>
|
</uib-tab>
|
||||||
|
|
||||||
|
<uib-tab heading="Survey summary" ng-if="vm.activeSurvey.type == 's_360'">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
|
||||||
|
<div class="progress">
|
||||||
|
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{vm.analysis.completion}}" aria-valuemin="0" aria-valuemax="100" style="width: {{vm.analysis.completion}}%">
|
||||||
|
{{vm.activeSurvey.completion}}% of question answred (Respondents : {{vm.analysis.data.overall.respondents.length}} of {{vm.analysis.recipents}})
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div class="panel-group">
|
||||||
|
|
||||||
|
<div class="panel panel-default bootstrap-panel">
|
||||||
|
<div class="panel-heading">{{ vm.activeSurvey.name }}</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="chartjs-canvas-holder-first-row" style="width: 100%;margin:0 auto;">
|
||||||
|
|
||||||
|
|
||||||
|
<canvas id="bar" class="chart chart-bar"
|
||||||
|
chart-data="vm.s360Analysis.overall.data" chart-labels="vm.s360Analysis.overall.labels" chart-options="vm.s360ChartOption">
|
||||||
|
</canvas>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</uib-tab>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<uib-tab heading="Lists summaries">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
|
||||||
|
<div class="progress">
|
||||||
|
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{vm.analysis.completion}}" aria-valuemin="0" aria-valuemax="100" style="width: {{vm.analysis.completion}}%">
|
||||||
|
{{vm.activeSurvey.completion}}% of question answred (Respondents : {{vm.analysis.data.overall.respondents.length}} of {{vm.analysis.recipents}})
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div class="panel-group">
|
||||||
|
<div class="panel panel-default bootstrap-panel" ng-repeat="e in vm.activeSurvey.list">
|
||||||
|
<div class="panel-heading">{{ e.name }}</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="chartjs-canvas-holder-first-row" style="width: 100%;margin:0 auto;" ng-if="vm.activeSurvey.type != 's_360'">
|
||||||
|
<canvas id="bar" class="chart chart-bar"
|
||||||
|
chart-data="vm.listAnalysis[e._id].data" chart-labels="vm.listAnalysis[e._id].labels">
|
||||||
|
</canvas>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="chartjs-canvas-holder-first-row" style="width: 100%;margin:0 auto;" ng-if="vm.activeSurvey.type == 's_360'">
|
||||||
|
<canvas id="bar" class="chart chart-bar"
|
||||||
|
chart-data="vm.s360Analysis.lists[e._id].data" chart-labels="vm.s360Analysis.lists[e._id].labels" chart-options="vm.s360ChartOption">
|
||||||
|
</canvas>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</uib-tab>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<uib-tab heading="Individual report" ng-if="vm.activeSurvey.type == 's_360'">
|
||||||
|
|
||||||
|
<div class="form-group ">
|
||||||
|
<ui-select ng-model="vm.selectedMember"
|
||||||
|
class="btn-group bootstrap-select form-control"
|
||||||
|
ng-disabled="false"
|
||||||
|
append-to-body="true"
|
||||||
|
search-enabled="true"
|
||||||
|
ng-change="selectedMemberChange()">
|
||||||
|
<ui-select-match placeholder="Select With Search">
|
||||||
|
{{$select.selected.name}}
|
||||||
|
</ui-select-match>
|
||||||
|
<ui-select-choices
|
||||||
|
repeat="withSearchItem in vm.members | filter: $select.search">
|
||||||
|
<span ng-bind-html="withSearchItem.name"></span>
|
||||||
|
</ui-select-choices>
|
||||||
|
</ui-select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="chartjs-canvas-holder-first-row" style="width: 100%;margin:0 auto;">
|
||||||
|
<canvas id="bar" class="chart chart-bar"
|
||||||
|
chart-data="vm.s360Analysis.individual.data[vm.selectedMember.id]" chart-labels="vm.s360Analysis.individual.labels" chart-options="vm.s360ChartOption" chart-series="vm.series">
|
||||||
|
</canvas>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</uib-tab>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<uib-tab heading="Individual responses">
|
<uib-tab heading="Individual responses">
|
||||||
|
<div class="form-group ">
|
||||||
|
<ui-select ng-model="vm.selectedMember"
|
||||||
|
class="btn-group bootstrap-select form-control"
|
||||||
|
ng-disabled="false"
|
||||||
|
append-to-body="true"
|
||||||
|
search-enabled="true"
|
||||||
|
ng-change="selectedMemberChange()">
|
||||||
|
<ui-select-match placeholder="Select With Search">
|
||||||
|
{{$select.selected.name}}
|
||||||
|
</ui-select-match>
|
||||||
|
<ui-select-choices
|
||||||
|
repeat="withSearchItem in vm.members | filter: $select.search">
|
||||||
|
<span ng-bind-html="withSearchItem.name"></span>
|
||||||
|
</ui-select-choices>
|
||||||
|
</ui-select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
|
||||||
|
<div class="panel-group">
|
||||||
|
|
||||||
|
<div class="panel panel-default bootstrap-panel" ng-repeat="answer in vm.selectedMember.answers | orderBy:'id':true">
|
||||||
|
<div class="panel-heading">{{ answer.question.text }} <b ng-if="vm.activeSurvey.type == 's_360'">({{ answer.evaluated.name }})</b></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
{{ answer.value }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</uib-tab>
|
</uib-tab>
|
||||||
</uib-tabset>
|
</uib-tabset>
|
||||||
|
</div>
|
|
@ -71,7 +71,7 @@
|
||||||
});
|
});
|
||||||
// Configure all line charts
|
// Configure all line charts
|
||||||
ChartJsProvider.setOptions('Line', {
|
ChartJsProvider.setOptions('Line', {
|
||||||
datasetFill: false
|
datasetFill: false,
|
||||||
});
|
});
|
||||||
// Configure all radar charts
|
// Configure all radar charts
|
||||||
ChartJsProvider.setOptions('radar', {
|
ChartJsProvider.setOptions('radar', {
|
||||||
|
@ -88,7 +88,22 @@
|
||||||
// Configure all bar charts
|
// Configure all bar charts
|
||||||
ChartJsProvider.setOptions('bar', {
|
ChartJsProvider.setOptions('bar', {
|
||||||
tooltips: {
|
tooltips: {
|
||||||
enabled: false
|
enabled: true
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
|
||||||
|
min: 0,
|
||||||
|
max: 100,
|
||||||
|
callback: function(value){return value+ "%"}
|
||||||
|
},
|
||||||
|
scaleLabel: {
|
||||||
|
display: true,
|
||||||
|
labelString: "Percentage"
|
||||||
|
}
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,10 +47,9 @@
|
||||||
|
|
||||||
function analyze(params) {
|
function analyze(params) {
|
||||||
params = params || {};
|
params = params || {};
|
||||||
endpoint = endpoint + "/analyze"
|
|
||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
$http.get(endpoint, { params : params})
|
$http.get(endpoint + "/analyze", { params : params})
|
||||||
.success(function(data) {
|
.success(function(data) {
|
||||||
deferred.resolve(data);
|
deferred.resolve(data);
|
||||||
}).error(function(msg, code) {
|
}).error(function(msg, code) {
|
||||||
|
@ -60,7 +59,7 @@
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
|
||||||
|
|
||||||
return $http.get(endpoint, params);
|
return $http.get(endpoint + "/analyze", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -236,6 +236,7 @@
|
||||||
for (var i = 0; i < members.length; i++) {
|
for (var i = 0; i < members.length; i++) {
|
||||||
if(multi == false || (multi == true && members[i].Selected == true)) {
|
if(multi == false || (multi == true && members[i].Selected == true)) {
|
||||||
var index = list.members.indexOf(members[i].id);
|
var index = list.members.indexOf(members[i].id);
|
||||||
|
console.log('index', index)
|
||||||
//vm.listMembers = [];
|
//vm.listMembers = [];
|
||||||
if (action == "add") {
|
if (action == "add") {
|
||||||
if (index == -1)
|
if (index == -1)
|
||||||
|
@ -248,7 +249,7 @@
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
console.log('updateMembers:modified members', list.members)
|
||||||
vm.activeList.isChecked = true;
|
vm.activeList.isChecked = true;
|
||||||
ListService
|
ListService
|
||||||
.edit(list)
|
.edit(list)
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button class="btn btn-danger btn-xs pull-left" ng-click="vm.updateMembers([m], 'remove')"><span class="glyphicon glyphicon-trash"></span></button>
|
<button class="btn btn-danger btn-xs pull-left" ng-click="vm.updateMembers([m], 'remove', false)"><span class="glyphicon glyphicon-trash"></span></button>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button class="btn btn-success btn-xs pull-left" ng-click="vm.updateMembers([m], 'add')"><span class="glyphicon glyphicon-plus"></span></button>
|
<button class="btn btn-success btn-xs pull-left" ng-click="vm.updateMembers([m], 'add', false)"><span class="glyphicon glyphicon-plus"></span></button>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
.controller('ViewerPageCtrl', ViewerPageCtrl);
|
.controller('ViewerPageCtrl', ViewerPageCtrl);
|
||||||
|
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
function ViewerPageCtrl($scope, $stateParams, SurveyService, $log) {
|
function ViewerPageCtrl($scope, $stateParams, SurveyService, AnswerService, $log, $filter) {
|
||||||
//alert('test');
|
//alert('test');
|
||||||
|
|
||||||
var vm = this;
|
var vm = this;
|
||||||
|
@ -20,10 +20,12 @@
|
||||||
.then(function (data){
|
.then(function (data){
|
||||||
vm.survey = data;
|
vm.survey = data;
|
||||||
$log.info("Got the survey data",data);
|
$log.info("Got the survey data",data);
|
||||||
|
|
||||||
|
var alreadyAnswered = checkIfAlreadyAnswered();
|
||||||
|
var isMemberIlligible = checkIfIlligible();
|
||||||
//building forms elements
|
//building forms elements
|
||||||
|
|
||||||
//angular.forEach(vm.survey.elements, function(element, key) {
|
if (!alreadyAnswered && isMemberIlligible) {
|
||||||
// console.log("element",element);
|
|
||||||
angular.forEach(vm.survey.list, function(list, key) {
|
angular.forEach(vm.survey.list, function(list, key) {
|
||||||
console.log("list",list);
|
console.log("list",list);
|
||||||
angular.forEach(list.members, function(member, key) {
|
angular.forEach(list.members, function(member, key) {
|
||||||
|
@ -32,37 +34,74 @@
|
||||||
vm.forms[member.id].elements = vm.survey.elements;
|
vm.forms[member.id].elements = vm.survey.elements;
|
||||||
vm.forms[member.id].question = {};
|
vm.forms[member.id].question = {};
|
||||||
if(member.id != vm.activeMemberId) {
|
if(member.id != vm.activeMemberId) {
|
||||||
|
member.last = false;
|
||||||
vm.members.push(member);
|
vm.members.push(member);
|
||||||
|
|
||||||
|
|
||||||
} else
|
} else
|
||||||
vm.askedMember = member;
|
vm.askedMember = member;
|
||||||
|
|
||||||
//.push(k + ': ' + member);
|
//.push(k + ': ' + member);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
vm.askedMember.last = true;
|
||||||
vm.members.push(vm.askedMember);
|
vm.members.push(vm.askedMember);
|
||||||
//Thnak You message
|
//Thnak You message
|
||||||
vm.members.push({"id": "none", "name" : ": )"});
|
vm.members.push({"id": "none", "name" : ": )"});
|
||||||
});
|
} else {
|
||||||
// });
|
$log.info("Already answered");
|
||||||
/*console.log("loadSurvey:vm.survey",vm.survey);
|
if (alreadyAnswered)
|
||||||
console.log("loadSurvey:vm.survey.list.members",vm.survey.list.members);
|
vm.alreadyAnswered = true;
|
||||||
console.log("loadSurvey:vm.forms",vm.forms);*/
|
else
|
||||||
|
vm.isMemberIlligible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}, function (error){
|
}, function (error){
|
||||||
|
vm.error = true;
|
||||||
$log.error(error);
|
$log.error(error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkIfAlreadyAnswered() {
|
||||||
|
console.log("checkIfAlreadyAnswered", vm.survey.respondents.length, vm.survey.respondents.indexOf(vm.activeMemberId))
|
||||||
|
if (vm.survey.respondents.length > 0 && vm.survey.respondents.indexOf(vm.activeMemberId) !== -1)
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkIfIlligible() {
|
||||||
|
var element = []
|
||||||
|
angular.forEach(vm.survey.list, function(list, key) {
|
||||||
|
if (element.length == 0)
|
||||||
|
element = $filter('filter')(list.members, {'id':vm.activeMemberId})
|
||||||
|
})
|
||||||
|
//console.log("checkIfIlligible", element, element.length)
|
||||||
|
if (element.length > 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function activate(){
|
function activate(){
|
||||||
vm.forms = [];
|
vm.forms = [];
|
||||||
vm.survey = {};
|
vm.survey = {};
|
||||||
vm.members = [];
|
vm.members = [];
|
||||||
|
vm.alreadyAnswered = false;
|
||||||
|
vm.isMemberIlligible = true;
|
||||||
|
vm.error = false;
|
||||||
vm.askedMember = {};
|
vm.askedMember = {};
|
||||||
|
vm.formData = {}
|
||||||
|
if ($stateParams.member_id && $stateParams.survey_id) {
|
||||||
vm.activeMemberId = $stateParams.member_id;
|
vm.activeMemberId = $stateParams.member_id;
|
||||||
loadSurvey($stateParams.survey_id);
|
loadSurvey($stateParams.survey_id);
|
||||||
console.log(vm.activeMemberId)
|
} else
|
||||||
|
vm.error = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,10 +116,75 @@
|
||||||
return initials;
|
return initials;
|
||||||
};
|
};
|
||||||
|
|
||||||
vm.test = function(form){
|
vm.validateForm = function(form){
|
||||||
//$scope.submitted = true;
|
vm.forms[vm.activeMemberId].$submitted = true;
|
||||||
alert("Angular is Awesome!!!");
|
if (!form.$valid ) {
|
||||||
console.log('submit', form);
|
//alert("Please fill in all required fields!");
|
||||||
|
console.log('error submitting', form);
|
||||||
|
return false;
|
||||||
|
}else{
|
||||||
|
console.log('submitting', vm.formData);
|
||||||
|
vm.sendAnswers(vm.formData)
|
||||||
|
}
|
||||||
|
console.log('submit');
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.sendAnswers = function(formData) {
|
||||||
|
|
||||||
|
console.log("formData", formData);
|
||||||
|
var counter = 0;
|
||||||
|
|
||||||
|
angular.forEach(formData, function(val, key) {
|
||||||
|
|
||||||
|
if(key.indexOf("_") == -1) {
|
||||||
|
var elementId = key;
|
||||||
|
console.log("elementId", elementId);
|
||||||
|
//console.log("val", val);
|
||||||
|
var commentKey = key + "_comment";
|
||||||
|
var submittedKey = key + "_submitted";
|
||||||
|
//console.log("key", key);
|
||||||
|
console.log("commentKey", commentKey);
|
||||||
|
console.log("submittedKey", submittedKey);
|
||||||
|
var element = $filter('filter')(vm.survey.elements, {'_id':elementId})
|
||||||
|
var answer = {
|
||||||
|
"value" : val.value,
|
||||||
|
"comment" : (val.comment) ? val.comment : '',
|
||||||
|
"survey" : vm.survey.id,
|
||||||
|
"asked" : vm.askedMember,
|
||||||
|
"question": element[0]
|
||||||
|
}
|
||||||
|
AnswerService
|
||||||
|
.create(answer)
|
||||||
|
.then(
|
||||||
|
function (data){
|
||||||
|
counter++;
|
||||||
|
console.log("answer.create, counter, elements",data, counter, vm.survey.elements.length);
|
||||||
|
//trigger this when all the answers are sent
|
||||||
|
if(counter == vm.survey.elements.length) {
|
||||||
|
var respondents = vm.survey.respondents;
|
||||||
|
respondents.push(vm.askedMember.id);
|
||||||
|
vm.survey.respondents = respondents;
|
||||||
|
SurveyService
|
||||||
|
.update(vm.survey)
|
||||||
|
.then(
|
||||||
|
function (data){
|
||||||
|
console.log("updated survey",data);
|
||||||
|
vm.forms[vm.activeMemberId].$processed = true;
|
||||||
|
},
|
||||||
|
function (error){
|
||||||
|
console.log("Error updating the survey");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
function (error){
|
||||||
|
console.log("Error creating the answer");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
activate();
|
activate();
|
||||||
|
|
|
@ -3,26 +3,66 @@
|
||||||
.al-main {margin-left:0 !important;}
|
.al-main {margin-left:0 !important;}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row" ng-if="vm.alreadyAnswered">
|
||||||
|
<div class="col-md-12"
|
||||||
|
ba-panel
|
||||||
|
ba-panel-title="Avito Surveys"
|
||||||
|
ba-panel-class="with-scroll">
|
||||||
|
<div >
|
||||||
|
<div class="alert bg-success">
|
||||||
|
<h4>Well done!</h4>
|
||||||
|
You have <strong>already</strong> answered this survey.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" ng-if="!vm.isMemberIlligible">
|
||||||
|
<div class="col-md-12"
|
||||||
|
ba-panel
|
||||||
|
ba-panel-title="Avito Surveys"
|
||||||
|
ba-panel-class="with-scroll">
|
||||||
|
<div >
|
||||||
|
<div class="alert bg-danger">
|
||||||
|
<h4> :( </h4>
|
||||||
|
You seems to be <strong>not</strong> invited to answer this survey.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" ng-if="vm.error">
|
||||||
|
<div class="col-md-12"
|
||||||
|
ba-panel
|
||||||
|
ba-panel-title="Avito Surveys"
|
||||||
|
ba-panel-class="with-scroll">
|
||||||
|
<div >
|
||||||
|
<div class="alert bg-danger">
|
||||||
|
<h4> :( </h4>
|
||||||
|
Something <strong>VERY VERY</strong> bad happened !
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" ng-if="!vm.alreadyAnswered && vm.isMemberIlligible && !vm.error">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div ba-panel ba-panel-title="{{vm.survey.name}}" ba-panel-class="with-scroll">
|
<div ba-panel ba-panel-title="{{vm.survey.name}}" ba-panel-class="with-scroll">
|
||||||
|
|
||||||
<div class="section-block bold-text ng-scope"><p ng-bind-html="vm.survey.description"></p></div>
|
<div class="section-block bold-text ng-scope"><p ng-bind-html="vm.survey.description"></p></div>
|
||||||
|
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
<ba-wizard>
|
<ba-wizard ng-if="vm.survey.type == 's_360'">
|
||||||
|
<ba-wizard-step title="{{ m.id != vm.activeMemberId ? vm.getInitials(m.name) : 'ME' }}" ng-repeat="m in vm.members track by $index" ng-init="memberId = m.id" form="vm.forms[memberId]" mid="{{ m.id }}" elements="{{vm.survey.elements}}" evaluated="{{m}}" asked="{{vm.askedMember}}" survey="{{vm.survey.id}}" name="{{vm.survey.name}}" respondents="{{vm.survey.respondents}}" last="{{ m.last }}">
|
||||||
|
|
||||||
<ba-wizard-step title="{{ m.id != vm.activeMemberId ? vm.getInitials(m.name) : 'ME' }}" ng-repeat="m in vm.members track by $index" ng-init="memberId = m.id" form="vm.forms[memberId]" mid="{{ m.id }}" elements="{{vm.survey.elements}}" evaluated="{{m}}" asked="{{vm.askedMember}}">
|
|
||||||
<form name="vm.forms[memberId]" novalidate ng-if="m.id != 'none'">
|
<form name="vm.forms[memberId]" novalidate ng-if="memberId != 'none'">
|
||||||
<ng-form name="innerForm">
|
<ng-form name="innerForm">
|
||||||
<div class="member-survey">
|
<div class="member-survey">
|
||||||
<div class="separator"></div>
|
|
||||||
<h3 class="member-full-name">{{ m.name }}</h3>
|
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
<div id="{{e.id}}" class="form-group answer" ng-repeat="e in vm.survey.elements"
|
<div id="{{e.id}}" class="form-group answer" ng-repeat="e in vm.survey.elements"
|
||||||
ng-init="elementId = vm.survey.id+'_'+memberId+'_'+vm.activeMemberId+'_'+e._id" ng-class="{'has-error': innerForm[elementId].$invalid && (vm.forms[memberId].$submitted)}">
|
ng-init="elementId = vm.survey.id+'_'+memberId+'_'+vm.activeMemberId+'_'+e._id" ng-class="{'has-error': innerForm[elementId].$invalid && (vm.forms[memberId].$submitted)}">
|
||||||
<input type="hidden" name="{{ elementId }}_submitted" ng-model="vm.innerForm[elementId].submitted" ng-value="false"/>
|
<input type="hidden" name="{{ elementId }}_submitted" ng-model="vm.innerForm[elementId].submitted" ng-value="false"/>
|
||||||
<!--<input type="hidden" name="{{ elementId }}_question" ng-model="vm.innerForm[elementId].question.$viewValue" ng-value="e"/>-->
|
|
||||||
<p>{{ e.text }}</p>
|
<p>{{ e.text }}</p>
|
||||||
<label ng-class="el.multiple ? 'custom-checkbox radio-checkbox nowrap' : 'custom-radio radio-inline nowrap'" ng-repeat="el in e.items">
|
<label ng-class="el.multiple ? 'custom-checkbox radio-checkbox nowrap' : 'custom-radio radio-inline nowrap'" ng-repeat="el in e.items">
|
||||||
<input ng-attr-type="{{el.multiple? 'checkbox' : 'radio'}}" name="{{elementId}}" ng-model="vm.innerForm[elementId].$viewValue" ng-value="el.value" ng-attr-required="{{el.required}}">
|
<input ng-attr-type="{{el.multiple? 'checkbox' : 'radio'}}" name="{{elementId}}" ng-model="vm.innerForm[elementId].$viewValue" ng-value="el.value" ng-attr-required="{{el.required}}">
|
||||||
|
@ -38,6 +78,9 @@
|
||||||
</div>
|
</div>
|
||||||
</ng-form>
|
</ng-form>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<form class="form-horizontal" name="vm.finishForm" novalidate ng-if="m.id == 'none'">
|
<form class="form-horizontal" name="vm.finishForm" novalidate ng-if="m.id == 'none'">
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
<h3 class="member-full-name">Congratulations! You have successfully filled the form!</h3>
|
<h3 class="member-full-name">Congratulations! You have successfully filled the form!</h3>
|
||||||
|
@ -49,7 +92,43 @@
|
||||||
|
|
||||||
|
|
||||||
</ba-wizard>
|
</ba-wizard>
|
||||||
|
<div ng-if="vm.survey.type != 's_360'">
|
||||||
|
<form name="regularForm" novalidate ng-if="vm.survey.type != 's_360'" ng-submit="vm.validateForm(regularForm)" ng-show="!vm.forms[vm.activeMemberId].$processed">
|
||||||
|
<div class="member-survey">
|
||||||
|
<h3 class="member-full-name" ng-if="vm.survey.type == 's_regular'">{{ vm.askedMember.name }}</h3>
|
||||||
|
<div class="separator" ng-if="vm.survey.type == 's_regular'"></div>
|
||||||
|
<div id="{{e.id}}" class="form-group answer" ng-repeat="e in vm.survey.elements"
|
||||||
|
ng-init="elementId = e._id" ng-class="{'has-error': regularForm[elementId].$invalid && (vm.forms[vm.activeMemberId].$submitted)}">
|
||||||
|
|
||||||
|
<!--<input type="hidden" name="{{ elementId }}_question" ng-model="vm.innerForm[elementId].question.$viewValue" ng-value="e"/>-->
|
||||||
|
<p>{{ e.text }}</p>
|
||||||
|
<label ng-class="el.multiple ? 'custom-checkbox radio-checkbox nowrap' : 'custom-radio radio-inline nowrap'" ng-repeat="el in e.items">
|
||||||
|
<input ng-attr-type="{{el.multiple? 'checkbox' : 'radio'}}" name="{{elementId}}" ng-model="vm.formData[elementId].value" ng-value="el.value" ng-attr-required="{{el.required}}">
|
||||||
|
<span>{{ el.value }}</span>
|
||||||
|
</label>
|
||||||
|
<br><br>
|
||||||
|
<div class="form-group" ng-if="e.hasComment">
|
||||||
|
<label for="{{ e._id }}_comment">{{e.commentLabel}}</label>
|
||||||
|
<input type="text" class="form-control" name="{{ elementId }}_comment" ng-model="vm.formData[elementId].comment" placeholder="..." ng-attr-required="{{e.commentIsRequired}}">
|
||||||
|
</div>
|
||||||
|
<div class="separator"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<ul class="pager ba-wizard-pager">
|
||||||
|
<li class="next"> <button type="submit" class="btn btn-primary">Submit <span aria-hidden="true">→</span></button></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<form class="form-horizontal" name="vm.finishForm" novalidate ng-if="vm.forms[vm.activeMemberId].$processed">
|
||||||
|
|
||||||
|
<h3 class="member-full-name">Congratulations! You have successfully filled the form!</h3>
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -13,6 +13,10 @@
|
||||||
$stateProvider
|
$stateProvider
|
||||||
.state('viewer', {
|
.state('viewer', {
|
||||||
url: '/viewer/:survey_id/:member_id',
|
url: '/viewer/:survey_id/:member_id',
|
||||||
|
params: {
|
||||||
|
survey_id: { squash: true, value: null },
|
||||||
|
member_id: { squash: true, value: null },
|
||||||
|
},
|
||||||
title: 'Viewer',
|
title: 'Viewer',
|
||||||
templateUrl: 'app/pages/viewer/viewer.html',
|
templateUrl: 'app/pages/viewer/viewer.html',
|
||||||
controller: 'ViewerPageCtrl as vm',
|
controller: 'ViewerPageCtrl as vm',
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
.directive('baWizardStep', baWizardStep);
|
.directive('baWizardStep', baWizardStep);
|
||||||
|
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
function baWizardStep($http, AnswerService, $filter) {
|
function baWizardStep($http, AnswerService, SurveyService, $filter) {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
transclude: true,
|
transclude: true,
|
||||||
|
@ -43,6 +43,10 @@
|
||||||
var elements = angular.fromJson($attrs.elements);
|
var elements = angular.fromJson($attrs.elements);
|
||||||
var memberEvaluated = angular.fromJson($attrs.evaluated);
|
var memberEvaluated = angular.fromJson($attrs.evaluated);
|
||||||
var memberAsked = angular.fromJson($attrs.asked);
|
var memberAsked = angular.fromJson($attrs.asked);
|
||||||
|
var survey = $attrs.survey;
|
||||||
|
var surveyName = $attrs.name;
|
||||||
|
var isLast = $attrs.last == "true" ? true : false;
|
||||||
|
var respondents = angular.fromJson($attrs.respondents);
|
||||||
|
|
||||||
$scope.form && $scope.form.$setSubmitted(true);
|
$scope.form && $scope.form.$setSubmitted(true);
|
||||||
if($scope.form && $scope.form.$invalid == false) {
|
if($scope.form && $scope.form.$invalid == false) {
|
||||||
|
@ -50,22 +54,24 @@
|
||||||
console.log("$attrs.elements", elements);
|
console.log("$attrs.elements", elements);
|
||||||
console.log("inner", $scope.form.innerForm);
|
console.log("inner", $scope.form.innerForm);
|
||||||
|
|
||||||
angular.forEach($scope.form.innerForm, function(val, key) {
|
var counter = 0;
|
||||||
|
|
||||||
if((key.indexOf("_") !== -1) && (key.indexOf("_comment") == -1) && (key.indexOf("_submitted") == -1) && (key.indexOf("_question") == -1)) {
|
angular.forEach($scope.form.innerForm, function(val, key) {
|
||||||
|
if((key.indexOf("_") !== -1) && (key.indexOf("_comment") == -1) && (key.indexOf("_submitted") == -1) && (key.indexOf("_last") == -1)) {
|
||||||
var res = key.split("_");
|
var res = key.split("_");
|
||||||
console.log("res", res);
|
var elementId = res[3];
|
||||||
//console.log("val", val);
|
//console.log("val", val);
|
||||||
var commentKey = key + "_comment";
|
var commentKey = key + "_comment";
|
||||||
var submittedKey = key + "_submitted";
|
var submittedKey = key + "_submitted";
|
||||||
|
var lastKey = key + "_last";
|
||||||
//console.log("key", key);
|
//console.log("key", key);
|
||||||
//console.log("commentKey", commentKey);
|
//console.log("commentKey", commentKey);
|
||||||
//console.log("submittedKey", submittedKey);
|
//console.log("submittedKey", submittedKey);
|
||||||
var element = $filter('filter')(elements, {'_id':res[3]})
|
var element = $filter('filter')(elements, {'_id':elementId})
|
||||||
var answer = {
|
var answer = {
|
||||||
"value" : val.$viewValue,
|
"value" : val.$viewValue,
|
||||||
"comment" : ($scope.form.innerForm[commentKey]) ? $scope.form.innerForm[commentKey].$viewValue : '',
|
"comment" : ($scope.form.innerForm[commentKey]) ? $scope.form.innerForm[commentKey].$viewValue : '',
|
||||||
"survey" : res[0],
|
"survey" : survey,
|
||||||
"evaluated" : memberEvaluated,
|
"evaluated" : memberEvaluated,
|
||||||
"asked" : memberAsked,
|
"asked" : memberAsked,
|
||||||
"question": element[0]
|
"question": element[0]
|
||||||
|
@ -78,6 +84,9 @@
|
||||||
.update(answer)
|
.update(answer)
|
||||||
.then(
|
.then(
|
||||||
function (data){
|
function (data){
|
||||||
|
counter++;
|
||||||
|
if(counter == elements.length && isLast)
|
||||||
|
$scope.isLast(survey, surveyName, memberAsked.id, respondents);
|
||||||
console.log("answer.update",data);
|
console.log("answer.update",data);
|
||||||
$scope.form.innerForm[submittedKey].$viewValue = data.data.id;
|
$scope.form.innerForm[submittedKey].$viewValue = data.data.id;
|
||||||
},
|
},
|
||||||
|
@ -99,6 +108,9 @@
|
||||||
.update(answer)
|
.update(answer)
|
||||||
.then(
|
.then(
|
||||||
function (data){
|
function (data){
|
||||||
|
counter++;
|
||||||
|
if(counter == elements.length && isLast)
|
||||||
|
$scope.isLast(survey, surveyName, memberAsked.id, respondents);
|
||||||
console.log("answer.update",data);
|
console.log("answer.update",data);
|
||||||
$scope.form.innerForm[submittedKey].$viewValue = data.data.id;
|
$scope.form.innerForm[submittedKey].$viewValue = data.data.id;
|
||||||
},
|
},
|
||||||
|
@ -111,6 +123,9 @@
|
||||||
.create(answer)
|
.create(answer)
|
||||||
.then(
|
.then(
|
||||||
function (data){
|
function (data){
|
||||||
|
counter++;
|
||||||
|
if(counter == elements.length && isLast)
|
||||||
|
$scope.isLast(survey, surveyName, memberAsked.id, respondents);
|
||||||
console.log("answer.create",data);
|
console.log("answer.create",data);
|
||||||
$scope.form.innerForm[submittedKey].$viewValue = data.data.id;
|
$scope.form.innerForm[submittedKey].$viewValue = data.data.id;
|
||||||
},
|
},
|
||||||
|
@ -133,6 +148,23 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.isLast = function(survey, surveyName, member, respondents) {
|
||||||
|
|
||||||
|
respondents.push(member);
|
||||||
|
var surveyObj = {"id":survey, "name": surveyName, "respondents": respondents}
|
||||||
|
console.log("isLast", surveyObj);
|
||||||
|
SurveyService
|
||||||
|
.update(surveyObj)
|
||||||
|
.then(
|
||||||
|
function (data){
|
||||||
|
console.log("updated survey",data);
|
||||||
|
},
|
||||||
|
function (error){
|
||||||
|
console.log("Error updating the survey");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function isComplete() {
|
function isComplete() {
|
||||||
return $scope.form ? $scope.form.$valid : true;
|
return $scope.form ? $scope.form.$valid : true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -365,3 +365,10 @@ background-color: white;
|
||||||
#surveys .progress{
|
#surveys .progress{
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#analysis .panel-group .panel {
|
||||||
|
margin-bottom: 25px;
|
||||||
|
}
|
||||||
|
#analysis .bootstrap-panel .panel-body {
|
||||||
|
padding: 15px !important;
|
||||||
|
}
|
Loading…
Reference in New Issue