Files
monpas/public/js/monpas/models/omvangmodel.js
T
2022-04-01 10:15:57 +02:00

764 lines
19 KiB
JavaScript

$(function(){
mh.initOmvangModel = function(){
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.suborgs ){
$.each(p.suborgs, 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.suborgs){
$.each(p.suborgs, 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.suborgs){
$.each(p.suborgs, 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 fAddSchooljaar(i, s){
var dit = this;
var aantal = 0;
var aantalSO = 0;
var aantalSBO = 0;
var aantalB = 0;
var aantalSOB = 0;
var aantalSBOB = 0;
this.nummer = s.schooljaarnr;
this.schooljaar = s.naam;
this.pienaam = ko.observable(null);
this.tlvpie = ko.observable(null);
this.arrtable = ko.observable(null)
this.geselecteerd = ko.observable(false);
this.aantalleerlingen = s && s.aantal ? s.aantal : 0;
this.aantalllnarr = s && s.aantalllnarr ? s.aantalllnarr : 0;
this.naamboven = s && s.naamboven ? s.naamboven : 0;
this.brinboven = s && s.brinboven ? s.brinboven : 0;
this.aantalboven = s && s.aantalboven ? s.aantalboven : 0;
this.totTLVs = ko.observable(0);
this.tlvsSBO = ko.observable(0);
this.tlvsSO = ko.observable(0);
this.totTLVsB = ko.observable(0);
this.tlvsSBOB = ko.observable(0);
this.tlvsSOB = ko.observable(0);
this.laag = ko.observable(0);
this.midden = ko.observable(0);
this.hoog = ko.observable(0);
this.licht = ko.observable(0);
this.zwaar = ko.observable(0);
this.laagB = ko.observable(0);
this.middenB = ko.observable(0);
this.hoogB = ko.observable(0);
this.lichtB = ko.observable(0);
this.zwaarB = ko.observable(0);
this.aantalllnarrB = s && s.aantalllnarrB ? s.aantalllnarrB: 0;
this.arrangementen = ko.observableArray([]);
this.tlvs = ko.observableArray([]);
this.tlvsB = ko.observableArray([]);
this.totaal
if(s.arrangementen){
$.each(s.arrangementen, function(x, a){
dit.arrangementen.push(new fAddArrangement(x, a));
});
}
if(s.tlvs){
$.each(s.tlvs, function(i, t){
if(t.aantal && Number(t.aantal) > 0){
aantal = aantal + Number(t.aantal);
}
if(t.aantal && Number(t.aantal) > 0 && t.soort && t.soort == "SO"){
aantalSO = aantalSO + Number(t.aantal);
}
if(t.aantal && Number(t.aantal) > 0 && t.soort && t.soort == "SBO"){
aantalSBO = aantalSBO + Number(t.aantal);
}
if(t.aantal && Number(t.aantal) > 0 && t.zwaarte && t.zwaarte == "LICHT"){
dit.licht(Number(t.aantal));
}
if(t.aantal && Number(t.aantal) > 0 && t.zwaarte && t.zwaarte == "ZWAAR"){
dit.zwaar(Number(t.aantal));
}
if(t.aantal && Number(t.aantal) > 0 && t.zwaarte && t.zwaarte == "LAAG"){
dit.laag(Number(t.aantal));
}
if(t.aantal && Number(t.aantal) > 0 && t.zwaarte && t.zwaarte == "MIDDEN"){
dit.midden(Number(t.aantal));
}
if(t.aantal && Number(t.aantal) > 0 && t.zwaarte && t.zwaarte == "HOOG"){
dit.hoog(Number(t.aantal));
}
});
}
dit.totTLVs(aantal);
dit.tlvsSO(aantalSO);
dit.tlvsSBO(aantalSBO);
if(Number(dit.totTLVs()) > 0) {
dit.tlvpie = ko.observable('omvang' + s.naam + 'tlv');
}
// if(Number(dit.aantalllnarr) >0){
dit.pienaam('omvang' + s.naam);
// }
if(Number(dit.aantalllnarr) >0){
dit.arrtable('arrtable' + s.naam);
}
if(s.tlvsB){
$.each(s.tlvsB, function(x, b){
if(b.aantal && Number(b.aantal) > 0){
aantalB = aantalB + Number(b.aantal);
}
if(b.aantal && Number(b.aantal) > 0 && b.soort && b.soort == "SO"){
aantalSOB = aantalSOB + Number(b.aantal);
}
if(b.aantal && Number(b.aantal) > 0 && b.soort && b.soort == "SBO"){
aantalSBOB = aantalSBOB + Number(b.aantal);
}
if(b.aantal && Number(b.aantal) > 0 && b.zwaarte && b.zwaarte == "LICHT"){
dit.lichtB(Number(b.aantal));
}
if(b.aantal && Number(b.aantal) > 0 && b.zwaarte && b.zwaarte == "ZWAAR"){
dit.zwaarB(Number(b.aantal));
}
if(b.aantal && Number(b.aantal) > 0 && b.zwaarte && b.zwaarte == "LAAG"){
dit.laagB(Number(b.aantal));
}
if(b.aantal && Number(b.aantal) > 0 && b.zwaarte && b.zwaarte == "MIDDEN"){
dit.middenB(Number(b.aantal));
}
if(b.aantal && Number(b.aantal) > 0 && b.zwaarte && b.zwaarte == "HOOG"){
dit.hoogB(Number(b.aantal));
}
});
}
dit.totTLVsB(aantalB);
dit.tlvsSOB(aantalSOB);
dit.tlvsSBOB(aantalSBOB);
}
function fAddArrangement(x, a){
this.arrangementid = a.id;
this.arrnaam = a.naam;
this.looptijd = a && a.lengte ==='L' ?'≥ 6 wkn': '< 6 wkn';
this.leeftijd = a.leeftijd;
this.aantal = a && a.aantal ? a.aantal : 0;
}
if (mh.OmvangModel !== undefined){
mh.OmvangModel.initModel();
}
else {
mh.OmvangModel = {
toporg : ko.observableArray([]),
gevuldeschooljaren : ko.observableArray([]),
selectedSchooljaren : ko.observableArray([]),
omvangschooljaren : ko.observableArray([]),
selectedOrg : ko.observable(''),
orgsoort : ko.observable(1),
aantal : ko.observable(),
bezig : ko.observable(false),
isSWV : ko.observable(false),
toonkeuze : ko.observable(false),
toonresult : ko.observable(false),
geenschooljaren : ko.observable(false),
inzage : ko.observable(),
lengte : ko.observable(0),
lengteTLV : ko.pureComputed( function(){
var lengte = 0;
if(mh.OmvangModel){
if(mh.OmvangModel.omvangschooljaren())
for(var i = 0; i < mh.OmvangModel.omvangschooljaren().length; i ++){
if( Number(mh.OmvangModel.omvangschooljaren()[i].totTLVs()) > 0){
lengte++;
}
}
}
return lengte;
}),
initBindings :function(){
var self = mh.OmvangModel;
// if (!ko.dataFor(document.getElementById('pagomvangextra')) ) {
ko.applyBindings(mh.OmvangModel, document.getElementById("pagomvangextra"));
// }
self.initModel();
},
initModel: function(){
var self =mh.OmvangModel;
self.toporg('');
self.gevuldeschooljaren.removeAll();
self.omvangschooljaren.removeAll();
self.toonresult(false);
self.toonkeuze(false);
self.geenschooljaren(false);
$.post("index.php/monpas/omvang/getOrgsEnSchooljaren", function(data){
self.bezig(true);
if (data.organisatie){
self.orgsoort(Number(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
self.fSetGevuldeSchooljaren(data);
$.post('index.php/monpas/rapijkpunten/getusernivo', function(result){
self.selectedOrg(self.toporg());
$.post('index.php/monpas/rapmatrix/checkinzage', function(result){
self.inzage(result);
},'json');
},'json');
}
self.bezig(false);
},'json');
},
fSetGevuldeSchooljaren: function(data){
var self = mh.OmvangModel;
self.gevuldeschooljaren.removeAll();
if(data.schooljaren){
self.gevuldeschooljaren.removeAll();
$.each(data.schooljaren, function(i, s){
self.gevuldeschooljaren.push(new fAddSchooljaar (i, s))
});
self.toonkeuze(true)
}
else{
self.geenschooljaren(true);
}
},
fSelecteerSchooljaar: function() {
var self = mh.OmvangModel;
if(Number(self.selectedSchooljaren().length) > 3){
apprise('u kunt maximaal 3 schooljaren vergelijken.')
self.selectedSchooljaren().pop;
return;
}
self.fGetOmvang();
},
fGetOmvang: function() {
var self = mh.OmvangModel;
var schooljaren = this.selectedSchooljaren.sort()
var submitData = {'schooljaren' : schooljaren,
'orgid' : self.selectedOrg().id };
self.omvangschooljaren.removeAll();
$.post("index.php/monpas/omvang/getOmvang/", submitData, function (result) {
self.omvangschooljaren.removeAll();
if(result.schooljaren){
self.omvangschooljaren.removeAll();
$.each(result.schooljaren, function (i, s){
self.omvangschooljaren.push(new fAddSchooljaar(i,s))
});
}
if(self.omvangschooljaren().length > 0){
self.toonresult(true);
self.toonkeuze(false);
var index = 0;
var indexT = 0
$.each(self.omvangschooljaren(), function (i, s) {
if(Number(s.aantalllnarr) > 0) index++;
})
self.lengte(index);
self.fMaakChart();
self.fSetTLVsPie();
if(self.selectedOrg().soort == 4 ) {
self.fSetArrangementenPie();
}
}
else{
self.toonresult(false);
apprise('geen resultaten');
}
}, 'json')
},
fToggleGeopend: function(){
this.geopend(!this.geopend());
},
fKeuze: function(){
var self = mh.OmvangModel;
self.toonkeuze(true);
},
fSwitchOrg: function(){
var self = mh.OmvangModel;
if (self.selectedOrg() === undefined) return;
if (this.id === self.selectedOrg().id) return;
self.selectedOrg(this);
self.fGetOmvang();
},
fMaakChart: function(){
var self = mh.OmvangModel;
var schooljaren = [];
var aantal = [];
var datasbo = [];
var dataso = [];
var dataarr = [];
var series = [];
$.each(self.omvangschooljaren(), function(i, o) {
schooljaren.push(o.schooljaar);
aantal.push(Number(o.aantalleerlingen));
var aantalsbo = 0;
var aantalso = 0;
if(o.licht()) aantalsbo = Number(o.licht());
if(o.zwaar()) aantalsbo = aantalsbo + Number(o.zwaar());
datasbo.push(Number(aantalsbo) > 0 ? Number(aantalsbo) : null);
if(o.laag()) aantalso = (Number(o.laag()));
if(o.midden()) aantalso = aantalso + Number(o.midden());
if(o.hoog()) aantalso = aantalso + Number(o.hoog());
dataso.push(Number(aantalso) > 0 ? Number(aantalso): null);
if(Number(o.aantalllnarr) ) dataarr.push(Number(o.aantalllnarr) > 0?Number(o.aantalllnarr): null );
});
if(Number(self.omvangschooljaren().length) == 1){
var aantallln = Number(self.omvangschooljaren()[0].aantalleerlingen);
aantal.unshift(aantallln);
aantal.push(aantallln);
schooljaren.unshift(' ');
schooljaren.push(' ' );
datasbo.unshift(null);
datasbo.push(null);
dataso.unshift(null);
dataso.push(null);
dataarr.unshift(null);
dataarr.push(null);
}
series.push({
type: 'column',
name: 'tlvs sbo ',
color: '#005c99',
data: datasbo,
stack: 'tlvs'
})
series.push({
type: 'column',
name: 'tlvs so ',
color: '#4d9900',
data: dataso,
stack: 'tlvs'
})
series.push({
type: 'column',
name: 'arrangementen',
color: '#ffcc80',
data: dataarr,
stack: 'arrs'
})
series.push({
type: 'spline',
name: 'totaal leerlingen',
color : '#A28A29',
data: aantal,
marker: {
lineWidth: 2
}
});
Highcharts.chart('omvangchart', {
chart: {
type: 'column',
options3d: {
enabled: true,
alpha: 20,
beta: 20,
viewDistance: 40,
depth: 75,
frame: {
left: {
color:'#f8f8f8'
},
bottom: {
color:'#d9d9d9',
visible: 'auto'
},
back: {
color:'#f8f8f8'
},
}
}
},
credits: {
enabled: false
},
title: {
text: 'Omvang extra ondersteuning',
style: {
fontSize: '24px'
}
},
xAxis: {
skew3d: true,
categories: schooljaren
},
yAxis: {
allowDecimals: false,
skew3d: true,
min: 0,
title: {
text: 'Aantal leerlingen'
},
stackLabels: {
enabled: true,
skew3d: true,
style:{
fontSize: '12px',
fontWeight: '200'
},
allowOverlap: true,
formatter: function () {
if(this.axis.chart.xAxis[0].categories[this.x]=== ' ') return
else
return this.stack;
},
}
},
tooltip: {
formatter: function () {
return '<b>' + this.x + '</b><br/>' +
this.series.name + ': ' + this.y + '<br/>'
}
},
plotOptions: {
column: {
stacking: 'normal'
}
},
series: series
});
},
fSetArrangementenPie: function(){
var self = mh.OmvangModel;
var titel = "";
var pienaam = "";
var type = 'variablepie'
var breedte = 170;
var arrangementen = [];
var naam = 'aantal leerlingen'
// var kleuren = ['#ffcc80','#ffb84d','#ffa31a','#e68a00', '#b36b00', '#804d00', '#4d2e00', '#ffe0b3', '#fff5e6'];
$.each(self.omvangschooljaren(), function (i, o){
$.each(o.arrangementen(), function (x, a) {
if (arrangementen.indexOf(a.arrangementid) == -1) {
arrangementen.push(a.arrangementid);
}
});
});
$.each(self.omvangschooljaren(), function (i, o) {
titel = o.schooljaar;
pienaam = o.pienaam();
var pie = [];
if(o.arrangementen){
$.each(o.arrangementen(), function (x, a) {
pie.push({
name : a.arrnaam + '(' + a.leeftijd + ')',
y : Number(a.aantal),
})
})
}
self.fMaakPie(titel, pienaam, pie, naam, breedte);
})
},
fSetTLVsPie: function(){
var self = mh.OmvangModel;
$.each(self.omvangschooljaren(), function (i, o) {
if(Number(o.totTLVs()) > 0 ){
var titel = o.schooljaar
var pienaam = o.tlvpie();
var naam = 'aantal'
var breedte =300
var pie = [];
if (Number(o.licht()) > 0) {
pie.push(
{
name: ' sbo licht',
y: Number(o.licht()),
color: '#99d6ff'
}
)
}
if (Number(o.zwaar()) > 0) {
pie.push(
{
name: ' sbo zwaar',
y: Number(o.zwaar()),
color: '#005c99'
}
)
}
if (Number(o.laag()) > 0) {
pie.push(
{
name: ' so laag',
y: Number(o.laag()),
color: '#d9ffb3'
}
)
}
if (Number(o.midden()) > 0) {
pie.push(
{
name: ' so midden',
y: Number(o.midden()),
color: '#66cc00'
}
)
}
if (Number(o.hoog()) > 0) {
pie.push(
{
name: ' so hoog',
y: Number(o.hoog()),
color: '#4d9900',
}
)
}
self.fMaakPie(titel, pienaam, pie, naam, breedte, );
}
})
},
fMaakPie: function(titel, pienaam, pie, naam, breedte){
var self = mh.OmvangModel;
Highcharts.chart(pienaam, {
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
height: 850,
plotShadow: false,
type: 'pie',
margin: [0, 0, 0, 0],
options3d: {
enabled: true,
alpha: 45,
},
},
title: {
text: titel
},
credits:{
enabled: false
},
accessibility: {
// point: {
// valueSuffix: '%'
// }
},
plotOptions: {
pie: {
allowPointSelect: true,
depth: 45,
size: 250,
cursor: 'pointer',
dataLabels: {
enabled: fadleidinglse
},
showInLegend: true
}
},
legend: {
align: 'left',
symbolPadding: 1,
padding: 0,
verticalAlign: 'top',
floating: false,
x: 0,
y: 260,
// width: 350,
// height: 500,
itemDistance: 0,
},
series: [{
center: ['50%', '20%'],
name: naam,
colorByPoint: true,
data: pie
}]
});
},
fPrint: function(){
var self = mh.OmvangModel;
var hoofdtabel = document.getElementById("omvangTable").outerHTML;
var hoofdchart = document.querySelector("#omvangchart svg");
if(hoofdchart) var hoofdstring = new XMLSerializer().serializeToString(hoofdchart);
var tlvs = [];
var arrtables = [];
var arrpies = [];
var schooljaren = [];
$.each(self.omvangschooljaren(), function(i, o){
schooljaren.push(o.schooljaar);
var tlv;
var arr;
var arrtable;
if(o.tlvpie()){
tlv = document.querySelector('#' + o.tlvpie() + ' ' + 'svg')
}
else{
tlv = document.querySelector("#leegcol4 svg")
}
if(tlv) var stringtlv = new XMLSerializer().serializeToString(tlv);
tlvs.push(stringtlv);
if(o.pienaam()){
arr = document.querySelector('#' + o.pienaam() + ' ' + 'svg')
arrtable = document.getElementById(o.arrtable()). outerHTML;
}
else{
arr = document.querySelector("#leegcol4 svg")
arrtable = document.getElementById("#leegcol4"). outerHTML;
}
if(arr) var stringarr = new XMLSerializer().serializeToString(arr);
arrpies.push(stringarr);
arrtables.push(arrtable);
});
var sd = {
hoofdtabel : hoofdtabel,
graph : hoofdstring,
tlvgraphs : tlvs,
arrgraphs : arrpies,
arrtables : arrtables,
schooljaren : schooljaren,
filenaam : 'ExtraOmvang'
};
var data = JSON.stringify(sd);
var $form = $("<form method='post' action='index.php/monpas/omvang/maakOmvangPDF/' target='_blank'>").append($('<input type = "hidden" name="data" id ="omvangdata">').val(data));
$form.appendTo("body").submit();
}
} ; // definition van model
mh.OmvangModel.initBindings();
} // else
}// function initOmvangModel
});