Files
monpas/public/js/monpas/models/ijkpuntenmodel.js
T
2024-01-25 17:47:59 +01:00

902 lines
32 KiB
JavaScript

$(function(){
ls.initIJkpuntenModel = function(){
var GrafiekInfo =null;
function fAddSWV(p){
var dit = this;
this.id = p.id;
this.soort = p.soort;
this.brin = p.brin;
this.naam = p.naamkort;
this.plaats = p.plaats;
this.geopend = ko.observable(false);
dit.kamers = ko.observableArray([]);
if (p.kamers ){
$.each(p.kamers, function(j,k){
dit.kamers.push(new fAddKamer(k));
})
}
}
function fAddKamer(p){
var dit = this;
this.id = p.id;
this.soort = p.soort;
this.brin = p.brin;
this.naam = p.naamkort;
this.plaats = p.plaats;
this.geopend = ko.observable(false);
this.bgs = ko.observableArray([]);
if (p.bgs){
$.each(p.bgs, function(x,z){
dit.bgs.push(new fAddBG(z));
})
}
}
function fAddBG(p){
var dit = this;
this.id = p.id;
this.soort = p.soort;
this.brin = p.brin;
this.naam = p.naamkort;
this.plaats = p.plaats;
this.geopend = ko.observable(false);
this.scholen = ko.observableArray([]);
if (p.scholen){
$.each(p.scholen, function(a,b){
dit.scholen.push(new fAddSchool(b));
})
}
}
function fAddSchool(p){
var dit = this;
this.id = p.id;
this.soort = p.soort;
this.brin = p.brin;
this.naam = p.naamkort;
this.plaats = p.plaats;
}
function fAddSerie(s) {
var dit = this;
this.versieid = s.versieid;
this.scoretype = s.scoretype;
var scoreomschrijving = s.omschrijving;
if(s.omschrijving == 'included/involved/present/absent')
scoreomschrijving = 'inc/inv/pre/abs'
this.scoreomschrijving = scoreomschrijving;
this.naam = s.naam;
this.periodes = ko.observableArray([]);
this.vergelijk = ko.observable(false);
this.gekozen = ko.observable(false);
this.aangeklikt = ko.observable(0);
this.toonCheckbox = ko.pureComputed(function () {
var wattedoen = 'Verberg';
if(dit.vergelijk() === true && dit.gekozen() === true) {
wattedoen = 'Toon';
}
return wattedoen;
});
if (s.specificaties) {
$.each(s.specificaties, function (l, p) {
$.each(p, function (v, w) {
dit.periodes.push(new fAddPeriode(w));
})
});
dit.periodes().length >= 2 ? dit.vergelijk(true): dit.vergelijk(false);
}
}
function fAddPeriode(p){
var dit = this;
this.orgversieid = p.orgversieid;
this.periodenummer = p.periodenummer;
this.geldigvanaf = p.geldigvanaf;
this.geldigtm = p.geldigtotenmet;
this.invullentm = p.invullentm;
this.vorm = p.vorm;
this.wijik = "schoolversie";
if (p.vorm === '2') {
dit.wijik = "individuele versie"
}
this.geselecteerd = ko.observable(false);
}
function fAddLijst(i, l, nieuw){
var dit = this;
this.tooninfo = ko.observable(false);
if(nieuw === l.orgversie.id) {
dit.tooninfo(true);
}
this.orgversieid = l.orgversie.id;
this.scoretype = l.orgversie.scoretype;
this.orgnaam = l.naam;
this.wijik = "schoolversie";
if (l.vorm === '2') {
dit.wijik = "individuele versie"
}
this.naamV = l.naamV;
this.metingen = l.metingen;
this.metingenV = l.metingenV;
this.vantm = l.vantm;
this.vantmresult = l.vantmresult;
this.periodenummer = l.orgversie.periodenummer
this.jaartal = l.jaartal;
this.label = l.label;
this.label2 = l.label2;
this.gemscore = l.ambities.gemscore;
this.ijkpunten = l.ambities.xijkpunten;
this.zprocent = l.ambities.zprocent;
this.ambitiesoort = l.ambities.soort;
this.ambitiesoortV = l.ambities.soortV ? l.ambities.soortV : false;
this.ambitievan = l.ambities.ambitievan === 'standaard' ? '(standaard ingestelde ambitie)':
'(ambitie van: ' + l.ambities.ambitievan + ')';
this.gemscoreV = l.ambitiesV && l.ambitiesV.gemscore ? l.ambitiesV.gemscore: false ;
this.ijkpuntenV = l.ambitiesV && l.ambitiesV.xijkpunten ? l.ambitiesV.xijkpunten: false;
this.zprocentV = l.ambitiesV && l.ambitiesV.zprocent ? l.ambitiesV.zprocent: false;
this.ambitievanV = l.ambitiesV && l.ambitiesV.ambitievan ? l.ambitiesV.ambitievan === 'standaard' ?
'(standaard ingestelde ambitie)': '(ambitie van: ' + l.ambitiesV.ambitievan: false ;
this.scores = ko.observableArray([]);
this.erzijnscores = ko.observable(true);
if(l.scores){
$.each(l.scores, function (i, s){
dit.scores.push(new fAddScore(i,s))
})
}
//
//
// var meegeven = 'vergelijkingen';
// $.each(l.vergelijkingen, function (x, v){
// dit.scores.push(new fAddScore(x,v, meegeven))
// })
// }
else{
this.erzijnscores(false);
}
this.totgem = l.resultaten.totgem;
this.ijkpuntenok = l.resultaten.ijkpuntenok;
this.welkehoogste = l.resultaten.welkehoogste;
this.welkelaagste = l.resultaten.welkelaagste;
this.hoogstescore = l.resultaten.hoogstescore;
this.laagstescore = l.resultaten.laagstescore;
}
function fAddScore(i,s){
this.nummer = s.nummer;
this.omschrijving = s.omschrijving;
this.toelichting = s.toelichting;
this.disabled = ko.observable(s.disabled === 'T');
this.disabledV = ko.observable(s.disabledV === 'T');
this.disablenvt = ko.observable(s.disablenvt === 'T');
this.disablenvtV = ko.observable(s.disablenvtV === 'T');
this.gem = s.disablenvt ==='T'? 'nvt' : s.disabled ==='T' ?'uitgezet': s.gem;
this.gemV = s.disablenvtV ==='T'? 'nvt' : s.disabledV ==='T' ? 'uitgezet' : s.gemV;
this.kleur = s.disabled === 'F' && s.disablenvt === 'F'? s.kleur : 'lightgray';
this.kleurV = s.disabledV === 'F' && s.disablenvtV === 'F'? s.kleurV : 'lightgray';
}
function fAddUser(p){
this.userid = p.id;
this.naam = p.fullname;
}
function fAddKleur(k){
this.grens1 = k.grens1;
this.grens2 = k.grens2;
this.grens3 = k.grens3;
this.grens4 = k.grens4;
this.kleur1 = k.kleur1;
this.kleur2 = k.kleur2;
this.kleur3 = k.kleur3;
this.kleur4 = k.kleur4;
}
function fAddIJkpunt(i){
this.ijkpuntid = i.id;
this.nummer = i.nummer;
this.omschrijving = i.omschrijving;
this.toelichting = i.toelichting;
}
if (ls.IJkpuntenModel !== undefined){
ls.IJkpuntenModel.initModel();
}
else {
ls.IJkpuntenModel = {
toporg : ko.observableArray([]),
selectedOrg : ko.observable(''),
orgsoort : ko.observable(1),
orgversions : ko.observableArray([]),
selectedOrgversion : ko.observable(''),
toonVergelijking : ko.observable(false),
//er kan een vergelijking worden getoond (scores van leerkracht, school of bestuur)
ijkpunten : ko.observableArray([]),
series : ko.observableArray([]),
selectedSerie : ko.observable(0),
aantal : ko.observable(0),
lijnAt : ko.observable(50),
targetnaam : ko.observable(''),
kleurlegenda : ko.observable(),
usernivo : ko.observable(), // het nivo van de ingelogde user; nodig om te bepalen of individuele gegevens moeten worden opgehaald
bezig : ko.observable(false),
inzage : ko.observable(),
nieuwste : ko.observable(0),
nietIngevuld : ko.observable(false),
erzijnlijsten : ko.observable(false),
selectie : ko.observableArray([]),
lijsten : ko.observableArray([]),
scorekleuren : ko.observable(null),
hoogte : ko.observable(0),
breedte : ko.observable(0),
isSWV : ko.observable(false),
nieuwsteVersie : ko.observable(0),
users : ko.observableArray([]),
selectedUser : ko.observable(),
label : ko.observable(),
medewerkerKiezen : ko.observable(false),
ijkgrafiek : ko.observable(''),
scoretype : ko.observable(''),
eigenambitie : ko.observable(false),
initBindings :function(){
var self = ls.IJkpuntenModel;
if (!ko.dataFor(document.getElementById('pagijkpunten')) ) {
ko.applyBindings(ls.IJkpuntenModel, document.getElementById("pagijkpunten"));
}
self.initModel();
},
initModel: function(){
var self =ls.IJkpuntenModel;
self.toporg('');
$.post("index.php/monpas/rapijkpunten/getorgs", function(data){
self.bezig(true);
if (data.organisatie){
self.orgsoort(data.soort);
switch (self.orgsoort()){
case 1: self.toporg(new fAddSWV(data.organisatie));
self.isSWV(true);
break;
case 2: self.toporg(new fAddKamer(data.organisatie));
break;
case 3: self.toporg(new fAddBG(data.organisatie));
break;
case 4: self.toporg(new fAddSchool(data.organisatie));
break;
} // switch
$.post('index.php/monpas/rapijkpunten/getusernivo', function(result){
self.usernivo(result);
self.selectedOrg(self.toporg());
$.post('index.php/monpas/rapmatrix/checkinzage', function(result){
self.inzage(result);
},'json');
},'json');
}
self.bezig(false);
},'json');
},
fToggleGeopend: function(){
this.geopend(!this.geopend());
},
fGetVergelijkbareVersies: function(){
var self = ls.IJkpuntenModel;
if (self.selectedOrg() === undefined) return;
$.post('index.php/monpas/rapijkpunten/getvergelijkbareversies/'+ self.selectedOrg().id, function(result) {
if (result && result.series.length > 0 ) {
self.series.removeAll();
$.each(result.series, function (i, s) {
self.series.push(new fAddSerie(s));
});
self.selectedSerie(self.series()[0]);
if(self.series().length > 0) {
$("#modIJkpuntenLijst").modal('show');
}
else{
apprise("De organisatie heeft (nog) geen lijsten bij dit instrument ingevuld");
}
}
else {
apprise("Er is nog geen lijst ingevuld bij dit instrument");
}
},'json');
},
fSelecteerSerie: function(){
var self = ls.IJkpuntenModel;
var dit = this;
self.selectedSerie(this);
if(self.series && self.selectedSerie()){
$.each(self.series(), function (i, s) {
if (s.versieid === self.selectedSerie().versieid) {
s.gekozen(true);
}
else{
s.gekozen(false);
}
});
}
this.eenPeriode = ko.computed(function(){
var eentje = false;
if(self.selectedSerie().periodes().length === 1) {
eentje = true;
}
return eentje;
});
$.each(self.selectedSerie().periodes(), function(j,p){
p.geselecteerd(false);
if(dit.eenPeriode()){
p.geselecteerd(true);
}
});
return true;
},
fSelecteerPeriode: function(){
var self = ls.IJkpuntenModel;
var dit = this;
this.geselecteerd(!this.geselecteerd());
var aantal = self.selectedSerie().aangeklikt();
self.selectedSerie().meerdan4 = ko.computed(function(){
var teveel = false;
if(dit.geselecteerd()){
aantal = aantal +1;
}
if(dit.geselecteerd()===false){
aantal = aantal -1;
}
if(aantal > 4){
teveel = true;
}
return teveel;
});
if(self.selectedSerie().meerdan4()){
this.geselecteerd(false);
apprise("u kunt maximaal 4 lijsten vergelijken");
}
self.selectedSerie().aangeklikt(aantal);
return true;
},
fHaalLijstenOp: function(herkomst){
var self = ls.IJkpuntenModel;
var dit = this;
self.erzijnlijsten(false);
self.nietIngevuld(false);
self.selectie.removeAll();
var selectie = [];
if(self.selectedSerie()) {
$.each(self.selectedSerie().periodes(), function (i, p) {
if (p.geselecteerd()=== true) {
var orgversie =
{'orgversieid': p.orgversieid,
'vorm' : p.vorm };
self.selectie.push(orgversie);
}
})
}
if(herkomst === 'popup') {
$("#modIJkpuntenLijst").modal('hide');
}
selectie = self.selectie();
var submitData = {
'selectie': selectie,
'orgid': self.selectedOrg().id
};
showAjaxLoader();
$.post('index.php/monpas/rapijkpunten/getingevuldelijsten/', submitData, function(result){
self.erzijnlijsten(false);
self.nietIngevuld(false);
self.medewerkerKiezen(false);
self.nieuwsteVersie(0);
self.lijsten.removeAll();
self.ijkpunten.removeAll();
self.aantal('');
self.eigenambitie(false);
var teller = 0;
self.eigenambitie(result.eigenambitie === 'T');
$.each(result.lijsten, function (i, p) {
if (p.scores || p.vergelijkingen) {
self.erzijnlijsten(true);
self.nietIngevuld(false)
}
if(!self.erzijnlijsten()){
self.nietIngevuld(true)
}
if(i === 0 && p.orgversie){
if(p.orgversie.scoretype){
self.scoretype(p.orgversie.scoretype);
}
}
});
if(self.erzijnlijsten()){
var nieuw = '';
if (result.nieuwsteversie) {
nieuw = result.nieuwsteversie;
self.nieuwsteVersie(nieuw);
}
$.each(result.lijsten, function(j,l){
if(j == 0){
self.label(l.label)
}
self.lijsten.push(new fAddLijst(j,l, nieuw))
});
if (result.aantal) {
self.aantal(result.aantal);
}
if(result.kleuren){
self.scorekleuren(new fAddKleur(result.kleuren));
}
if(result.ijkpunten){
$.each(result.ijkpunten, function(y, k){
self.ijkpunten.push(new fAddIJkpunt( k))
}
)
}
self.fOpenGrafiek();
if(result.users.length > 0 && self.orgsoort()===4){
self.medewerkerKiezen(true);
self.users.removeAll();
$.each(result.users, function(x, u){
self.users.push(new fAddUser(u));
})
self.selectedUser(self.users()[0]);
}
}
// else{
//
// self.fGetVergelijkbareVersies();
// }
}, 'json').always(function(){
hideAjaxLoader() } );
return true;
},
fSwitchOrg: function(){
var self = ls.IJkpuntenModel;
self.isSWV(false);
if (self.selectedOrg() === undefined) return;
if (this.id === self.selectedOrg().id) return;
self.selectedOrg(this);
if(self.selectedOrg().soort === '1'){
self.isSWV(true);
}
if(self.selectedSerie() !== 0) {
var herkomst = 'switch';
self.fHaalLijstenOp(herkomst);
}
},
fGetUserScores: function(data, event){
var self = ls.IJkpuntenModel;
if ( self.selectedOrg() === undefined ||
self.users() === undefined ||
self.usernivo > 1 ) return;
if (self.selectedUser() === undefined) return;
if(! event.originalEvent || ! event.originalEvent.isTrusted) return;
if(self.selectedUser().userid === '0') self.fHaalLijstenOp();
var selectieInd = [];
var selectieOrgversies = [];
$.each(self.selectie(),function(i, s){
if(s.vorm === '2'){
selectieInd.push(s);
selectieOrgversies.push(s.orgversieid)
}
});
self.selectie(selectieInd);
var submitData = {
'orguserid': self.selectedUser().userid,
'selectie': selectieOrgversies,
'orgid': self.selectedOrg().id
};
// showAjaxLoader();
self.lijsten.removeAll();
self.erzijnlijsten(false);
self.nietIngevuld(false);
$.post('index.php/monpas/rapijkpunten/getuserlijsten/', submitData, function (result) {
self.lijsten.removeAll();
self.nieuwsteVersie(0);
self.aantal('');
var teller = 0;
if (result && result.lijsten) {
$.each(result.lijsten, function (i, p) {
if (p.scores) {
self.erzijnlijsten(true);
self.nietIngevuld(false);
}
else{self.nietIngevuld(true)}
})
}
else{
self.nietIngevuld(true)
}
if (self.erzijnlijsten()) {
var nieuw = '';
if (result.nieuwsteversie) {
nieuw = result.nieuwsteversie;
self.nieuwsteVersie(nieuw);
}
$.each(result.lijsten, function (j, l) {
self.lijsten.push(new fAddLijst(j, l, nieuw))
});
if (result.aantal) {
self.aantal(result.aantal);
}
if (result.kleuren) {
self.scorekleuren(new fAddKleur(result.kleuren));
}
self.fOpenGrafiek();
}
}, 'json').always(function () {
// hideAjaxLoader()
});
},
fOpenGrafiek: function(){
var self = ls.IJkpuntenModel;
var dit = this;
var lijsten = self.lijsten();
let soorten = [0];
var xas = [];
var balkGegevens = [];
var lijnGegevens = [];
var ambitiewaarde = 0;
var xastitel;
let titel = 'Versie: ' + self.selectedSerie().naam + ', scoretype: ' + self.selectedSerie().scoreomschrijving
$.each(lijsten, function(z, a){
if(!soorten.includes(Number(a.ambitiesoort))) {
soorten.push(Number(a.ambitiesoort))
}
})
$.each(lijsten, function(i, l) {
var labels = [];
var scores = [];
var ambities = [];
if(l.label){
xastitel = l.label;
}
if(i === 0 || self.eigenambitie()) {
if (l.gemscore && Number(l.gemscore) > 0) {
ambitiewaarde = Number(l.gemscore);
}
}
lijsten[i].scores = l.scores();
$.each(lijsten[i].scores, function (j, g) {
var omschrijving = '';
if(g.omschrijving){
omschrijving = g.omschrijving;
}
labels.push(g.nummer);
scores.push({ y : Number(g.gem) === 0 ? null: Number(g.gem) ,
color : g.kleur,
name : l.periodenummer });
if(i === 0 || self.eigenambitie()) {
ambities.push(ambitiewaarde)
}
});
labels.unshift(' ');
var legescore ={
y : null,
color : 'transparent',
name : '0',
};
scores.unshift(legescore);
labels.push(' ');
scores.push(legescore);
balkGegevens.push({
dataLabels: {
format: '{point.name}'
},
type : 'column',
color : '#ffffff',
name : l.vantm,
data : scores
});
if(i === 0 || self.eigenambitie()) {
ambities.unshift(ambitiewaarde);
ambities.push(ambitiewaarde);
lijnGegevens = ({
dataLabels: {
format: ''
},
type: 'spline',
name: self.eigenambitie() ? 'periode ' + l.periodenummer + ', ' + l.ambitievan : 'standaard ingestelde ambitie',
data: ambities
});
balkGegevens.push(lijnGegevens);
}
if(i === 0) {
xas = labels;
}
});
self.ijkgrafiek = Highcharts.chart('hc-chart1', {
chart: {
margin: [10,45,100,5],
options3d: {
enabled: true,
alpha: 7,
beta: 20,
viewDistance: 40,
depth: 75,
frame: {
left: {
color:'#f8f8f8'
},
bottom: {
color:'#d9d9d9',
visible: 'auto'
},
back: {
color:'#f8f8f8'
},
}
}
},
title: {
text: titel
},
credits: {
enabled: false,
},
tooltip:{
enabled: false,
// useHTML: true,
// outside: true,
// formatter: function() {
// return this.y;
//
// }
},
xAxis: {
// type: 'category',
categories: xas,
// skew3d: true,
title:{
text: xastitel
}
},
yAxis: {
min:0,
max: 100,
skew3d: true,
title: {
text: 'Scores'
}
},
legend:{
align: 'left',
marginLeft: '10px',
verticalAlign: 'bottom',
floating: false,
width: '50%',
itemStyle: {
fontSize: '14px',
fontWeight: 'normal'
}
},
plotOptions: {
column:{
pointPadding: 0.05,
borderWidth:0
},
series:{
groupPadding: 0.05,
dataLabels: {
enabled: true,
inside: true,
align: 'center',
verticalAlign: 'top',
color: '#404040',
style: {
textOutline: false
}
}
},
spline: {
pointStart: 0,
marker: {
enabled: false
}
}
},
series:
balkGegevens,
});
},
fToonToelichting: function(){
var self = ls.IJkpuntenModel;
var dit = this;
var puntje = '. ';
if(dit.nummer === 'gem'){
dit.nummer = '';
puntje = '';
dit.toelichting ='gemiddelde score';
}
apprise('Toelichting: ' + puntje + dit.toelichting);
},
fPrintIJkpuntenBar : function () {
var self = ls.IJkpuntenModel;
self.inlineCSStoSVG("hc-chart1")
var svgElem = document.querySelector("#hc-chart1 svg");
var svgData = new XMLSerializer().serializeToString(svgElem);
var canvas = document.getElementById('ijkpuntencanvas');
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.canvas.height = svgElem.clientHeight;
ctx.canvas.width = svgElem.clientWidth;
var img = document.createElement('img');
img.setAttribute("src", "data:image/svg+xml;base64," + btoa(svgData));
img.onload = function () {
ctx.drawImage(img, 0, 0);
GrafiekInfo = canvas.toDataURL("image/png")
canvas.style.display = "none";
self.fPrint();
};
},
inlineCSStoSVG: function ( id ) {
var self = ls.IJkpuntenModel;
var nodes = document.querySelectorAll( "#" + id + " *" );
for ( var i = 0; i < nodes.length; ++i ) {
var elemCSS = window.getComputedStyle( nodes[i], null );
nodes[i].removeAttribute( 'xmlns' );
nodes[i].style.fill = elemCSS.fill;
nodes[i].style.fillOpacity = elemCSS.fillOpacity;
nodes[i].style.stroke = elemCSS.stroke;
nodes[i].style.strokeLinecap = elemCSS.strokeLinecap;
nodes[i].style.strokeDasharray = elemCSS.strokeDasharray;
nodes[i].style.strokeWidth = elemCSS.strokeWidth;
nodes[i].style.fontSize = elemCSS.fontSize;
nodes[i].style.fontFamily = elemCSS.fontFamily;
//Finally, solution to embbed HTML in foreignObject https://stackoverflow.com/a/37124551
if ( nodes[i].nodeName === "SPAN" || nodes[i].nodeName === "span" ) {
nodes[i].setAttribute( "xmlns", "http://www.w3.org/1999/xhtml" );
}
}
},
fPrint: function () {
var self = ls.IJkpuntenModel;
var chart = document.getElementById("hc-chart1").outerHTML;
var tabellen = document.getElementById("alleIJktabellen").outerHTML;
var legenda = document.getElementById("ijktabellegenda").outerHTML;
var ambities = document.getElementById("ijkambities").outerHTML
var resultaten = document.getElementById("ijkresultaten").outerHTML;
var sd = {
chart: GrafiekInfo,
tabellen: tabellen,
legenda: legenda,
ambities: ambities,
resultaten: resultaten,
versie: self.selectedSerie().versieid
};
data = JSON.stringify(sd);
var $form = $("<form method='post' action='index.php/monpas/rapijkpunten/ijkpuntenpdf/' target='_blank'>").append($('<input type = "hidden" name="data" id ="ijkpdf">').val(data));
$form.appendTo("body").submit();
},
fPrintEvenNiet: function(){
var self = ls.IJkpuntenModel;
// var element = document.querySelector('#hc-chart1')
// var svgAsXML = (new XMLSerializer).serializeToString(element);
var orgid = self.selectedOrg().id;
var lijsten = self.lijsten();
var nieuwsteversie = self.nieuwsteVersie();
var scorekleuren = self.scorekleuren();
var versie = 'Versie: ' + self.selectedSerie().naam + ', scoretype: ' +
self.selectedSerie().scoreomschrijving;
var data = {
'image' : GrafiekInfo,
'orgid' : orgid,
'lijsten' : lijsten,
'versie' : versie,
'docentnaam' : self.selectedUser() ? self.selectedUser().naam : '',
'nieuwsteversie': nieuwsteversie,
'scorekleuren' : scorekleuren
};
data=JSON.stringify(data);
var $form = $("<form method='post' action='index.php/monpas/rapijkpunten/maakijkpuntenpdf' target='_blank'>").append($('<input type = "hidden" name="data" id ="data">').val(data) );
$form.appendTo("body").submit();
}
} ; // definition van model
ls.IJkpuntenModel.initBindings();
} // else
}// function initIJkpuntenModel
});