Käytä joukkoja tuntien luokkien ja opettajien mallintamiseen
This commit is contained in:
parent
f90d7bbab7
commit
11f74837ba
|
@ -268,8 +268,8 @@ function luoTuntiLista() {
|
||||||
for (let [_, tunti] of tunnit.järjestyksessä()) {
|
for (let [_, tunti] of tunnit.järjestyksessä()) {
|
||||||
let tuntiListassa = document.createElement('li');
|
let tuntiListassa = document.createElement('li');
|
||||||
let nimi = tunti.nimi;
|
let nimi = tunti.nimi;
|
||||||
let luokat = tunti.luokat.join(', ');
|
let luokat = tunti.luokat.alkiot().join(', ');
|
||||||
let opettajat = tunti.opettajaLyhenteet.join(', ');
|
let opettajat = tunti.opettajaLyhenteet.alkiot().join(', ');
|
||||||
let kertaaViikossa = tunti.kertaaViikossa;
|
let kertaaViikossa = tunti.kertaaViikossa;
|
||||||
let teksti;
|
let teksti;
|
||||||
if (kertaaViikossa === 1) {
|
if (kertaaViikossa === 1) {
|
||||||
|
|
|
@ -45,15 +45,13 @@ function suorita(tyyppi, ...argumentit) {
|
||||||
let [poistettuAste] = argumentit;
|
let [poistettuAste] = argumentit;
|
||||||
luokkaAsteet.poista(poistettuAste);
|
luokkaAsteet.poista(poistettuAste);
|
||||||
// Poista poistettujen luokka-asteiden luokat tunneista
|
// Poista poistettujen luokka-asteiden luokat tunneista
|
||||||
for (let [id, tunti] of tunnit.tunnit) {
|
for (let [_, tunti] of tunnit.tunnit) {
|
||||||
let luokat = [];
|
for (let luokka of tunti.luokat.alkiot()) {
|
||||||
for (let luokka of tunti.luokat) {
|
|
||||||
let luokanAste = parseInt(luokka[0]);
|
let luokanAste = parseInt(luokka[0]);
|
||||||
if (luokanAste !== poistettuAste) {
|
if (luokanAste === poistettuAste) {
|
||||||
luokat.push(luokka);
|
tunti.luokat.poista(luokka);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tunnit.tunnit.get(id).luokat = luokat;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case tapahtumaTyypit.muutaAste:
|
case tapahtumaTyypit.muutaAste:
|
||||||
|
@ -61,18 +59,15 @@ function suorita(tyyppi, ...argumentit) {
|
||||||
let [vanhaAste, uusiAste] = argumentit;
|
let [vanhaAste, uusiAste] = argumentit;
|
||||||
luokkaAsteet.muuta(vanhaAste, uusiAste);
|
luokkaAsteet.muuta(vanhaAste, uusiAste);
|
||||||
// Muuta muutetut luokka-asteet tunneissa
|
// Muuta muutetut luokka-asteet tunneissa
|
||||||
for (let [id, tunti] of tunnit.tunnit) {
|
for (let [_, tunti] of tunnit.tunnit) {
|
||||||
let luokat = [];
|
for (let luokka of tunti.luokat.alkiot()) {
|
||||||
for (let luokka of tunti.luokat) {
|
|
||||||
let luokanAste = parseInt(luokka[0]);
|
let luokanAste = parseInt(luokka[0]);
|
||||||
if (luokanAste === vanhaAste) {
|
if (luokanAste === vanhaAste) {
|
||||||
let luokanLuokka = luokka.slice(1);
|
let uusiLuokka = `${uusiAste}${luokka.slice(1)}`;
|
||||||
luokat.push(`${uusiAste}${luokanLuokka}`);
|
tunti.luokat.poista(luokka);
|
||||||
} else {
|
tunti.luokat.lisää(uusiLuokka);
|
||||||
luokat.push(luokka);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tunnit.tunnit.get(id).luokat = luokat;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -85,14 +80,12 @@ function suorita(tyyppi, ...argumentit) {
|
||||||
let [aste] = argumentit;
|
let [aste] = argumentit;
|
||||||
luokkaAsteet.asteet[aste].poista();
|
luokkaAsteet.asteet[aste].poista();
|
||||||
// Poista luokka jota ei enää ole asteella tunneista
|
// Poista luokka jota ei enää ole asteella tunneista
|
||||||
for (let [id, tunti] of tunnit.tunnit) {
|
for (let [_, tunti] of tunnit.tunnit) {
|
||||||
let luokat = [];
|
for (let luokka of tunti.luokat.alkiot()) {
|
||||||
for (let luokka of tunti.luokat) {
|
if (luokkaAsteet.luokat().indexOf(luokka) === -1) {
|
||||||
if (luokkaAsteet.luokat().indexOf(luokka) !== -1) {
|
tunti.luokat.poista(luokka);
|
||||||
luokat.push(luokka);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tunnit.tunnit.get(id).luokat = luokat;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -105,14 +98,12 @@ function suorita(tyyppi, ...argumentit) {
|
||||||
let [poistettuOpettaja] = argumentit;
|
let [poistettuOpettaja] = argumentit;
|
||||||
opettajat.poista(poistettuOpettaja);
|
opettajat.poista(poistettuOpettaja);
|
||||||
// Poista opettaja joita ei enää ole tunneista
|
// Poista opettaja joita ei enää ole tunneista
|
||||||
for (let [id, tunti] of tunnit.tunnit) {
|
for (let [_, tunti] of tunnit.tunnit) {
|
||||||
let opettajaLyhenteet = [];
|
for (let opettajaLyhenne of tunti.opettajaLyhenteet.alkiot()) {
|
||||||
for (let opettajaLyhenne of tunti.opettajaLyhenteet) {
|
if (opettajaLyhenne === poistettuOpettaja) {
|
||||||
if (opettajaLyhenne !== poistettuOpettaja) {
|
tunti.opettajaLyhenteet.poista(poistettuOpettaja);
|
||||||
opettajaLyhenteet.push(opettajaLyhenne);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tunnit.tunnit.get(id).opettajaLyhenteet = opettajaLyhenteet;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -300,24 +291,24 @@ testi('tuntien käsittely', () => {
|
||||||
assertEq('lisättyä pituus', tunnit.järjestyksessä().length, 3);
|
assertEq('lisättyä pituus', tunnit.järjestyksessä().length, 3);
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.poistaAste, 1);
|
suorita(tapahtumaTyypit.poistaAste, 1);
|
||||||
assertEq('aste poistettua 0', tunnit.järjestyksessä()[0][1].luokat, ['5B']);
|
assertEq('aste poistettua 0', tunnit.järjestyksessä()[0][1].luokat.alkiot(), ['5B']);
|
||||||
assertEq('aste poistettua 1', tunnit.järjestyksessä()[1][1].luokat, ['5A']);
|
assertEq('aste poistettua 1', tunnit.järjestyksessä()[1][1].luokat.alkiot(), ['5A']);
|
||||||
assertEq('aste poistettua 2', tunnit.järjestyksessä()[2][1].luokat, []);
|
assertEq('aste poistettua 2', tunnit.järjestyksessä()[2][1].luokat.alkiot(), []);
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.muutaAste, 5, 6);
|
suorita(tapahtumaTyypit.muutaAste, 5, 6);
|
||||||
assertEq('aste muutettua 0', tunnit.järjestyksessä()[0][1].luokat, ['6B']);
|
assertEq('aste muutettua 0', tunnit.järjestyksessä()[0][1].luokat.alkiot(), ['6B']);
|
||||||
assertEq('aste muutettua 1', tunnit.järjestyksessä()[1][1].luokat, ['6A']);
|
assertEq('aste muutettua 1', tunnit.järjestyksessä()[1][1].luokat.alkiot(), ['6A']);
|
||||||
assertEq('aste muutettua 2', tunnit.järjestyksessä()[2][1].luokat, []);
|
assertEq('aste muutettua 2', tunnit.järjestyksessä()[2][1].luokat.alkiot(), []);
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.poistaLuokka, 6);
|
suorita(tapahtumaTyypit.poistaLuokka, 6);
|
||||||
assertEq('luokka poistettua 0', tunnit.järjestyksessä()[0][1].luokat, []);
|
assertEq('luokka poistettua 0', tunnit.järjestyksessä()[0][1].luokat.alkiot(), []);
|
||||||
assertEq('luokka poistettua 1', tunnit.järjestyksessä()[1][1].luokat, ['6A']);
|
assertEq('luokka poistettua 1', tunnit.järjestyksessä()[1][1].luokat.alkiot(), ['6A']);
|
||||||
assertEq('luokka poistettua 1', tunnit.järjestyksessä()[2][1].luokat, []);
|
assertEq('luokka poistettua 1', tunnit.järjestyksessä()[2][1].luokat.alkiot(), []);
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.poistaOpettaja, 'KV');
|
suorita(tapahtumaTyypit.poistaOpettaja, 'KV');
|
||||||
assertEq('opettaja poistettua 0', tunnit.järjestyksessä()[0][1].opettajaLyhenteet, []);
|
assertEq('opettaja poistettua 0', tunnit.järjestyksessä()[0][1].opettajaLyhenteet.alkiot(), []);
|
||||||
assertEq('opettaja poistettua 1', tunnit.järjestyksessä()[1][1].opettajaLyhenteet, ['MM']);
|
assertEq('opettaja poistettua 1', tunnit.järjestyksessä()[1][1].opettajaLyhenteet.alkiot(), ['MM']);
|
||||||
assertEq('opettaja poistettua 2', tunnit.järjestyksessä()[2][1].opettajaLyhenteet, ['AS']);
|
assertEq('opettaja poistettua 2', tunnit.järjestyksessä()[2][1].opettajaLyhenteet.alkiot(), ['AS']);
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.poistaTunti, 0);
|
suorita(tapahtumaTyypit.poistaTunti, 0);
|
||||||
assertEq('poistettua pituus', tunnit.järjestyksessä().length, 2);
|
assertEq('poistettua pituus', tunnit.järjestyksessä().length, 2);
|
||||||
|
|
|
@ -112,8 +112,8 @@ class Opettajat {
|
||||||
class Tunti {
|
class Tunti {
|
||||||
constructor(nimi, luokat, opettajaLyhenteet, kertaaViikossa) {
|
constructor(nimi, luokat, opettajaLyhenteet, kertaaViikossa) {
|
||||||
this.nimi = nimi;
|
this.nimi = nimi;
|
||||||
this.luokat = luokat;
|
this.luokat = new Joukko(luokat);
|
||||||
this.opettajaLyhenteet = opettajaLyhenteet;
|
this.opettajaLyhenteet = new Joukko(opettajaLyhenteet);
|
||||||
this.kertaaViikossa = kertaaViikossa;
|
this.kertaaViikossa = kertaaViikossa;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,11 +146,11 @@ class Tunnit {
|
||||||
let tulos = vertaa(a[1].nimi, b[1].nimi);
|
let tulos = vertaa(a[1].nimi, b[1].nimi);
|
||||||
// TODO: Korjaa niin, että osaa verrata okein listoja
|
// TODO: Korjaa niin, että osaa verrata okein listoja
|
||||||
if (tulos === 0) {
|
if (tulos === 0) {
|
||||||
tulos = vertaa(a[1].luokat, b[1].luokat);
|
tulos = vertaa(a[1].luokat.alkiot(), b[1].luokat.alkiot());
|
||||||
}
|
}
|
||||||
// TODO: Korjaa niin, että osaa verrata okein listoja
|
// TODO: Korjaa niin, että osaa verrata okein listoja
|
||||||
if (tulos === 0) {
|
if (tulos === 0) {
|
||||||
tulos = vertaa(a[1].opettajaLyhenteet, b[1].opettajaLyhenteet);
|
tulos = vertaa(a[1].opettajaLyhenteet.alkiot(), b[1].opettajaLyhenteet.alkiot());
|
||||||
}
|
}
|
||||||
if (tulos === 0) {
|
if (tulos === 0) {
|
||||||
tulos = vertaa(a[1].kertaaViikossa, b[1].kertaaViikossa);
|
tulos = vertaa(a[1].kertaaViikossa, b[1].kertaaViikossa);
|
||||||
|
@ -164,6 +164,35 @@ class Tunnit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Joukko {
|
||||||
|
#alkiot = new Map();
|
||||||
|
|
||||||
|
constructor(alkiot) {
|
||||||
|
if (alkiot !== undefined) {
|
||||||
|
for (let alkio of alkiot) {
|
||||||
|
this.#alkiot.set(alkio, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
alkiot() {
|
||||||
|
let alkiot = [];
|
||||||
|
for (let [alkio, _] of this.#alkiot) {
|
||||||
|
alkiot.push(alkio);
|
||||||
|
}
|
||||||
|
alkiot.sort();
|
||||||
|
return alkiot;
|
||||||
|
}
|
||||||
|
|
||||||
|
lisää(alkio) {
|
||||||
|
this.#alkiot.set(alkio, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
poista(alkio) {
|
||||||
|
this.#alkiot.delete(alkio);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function vertaa(a, b) {
|
function vertaa(a, b) {
|
||||||
if (a < b) {
|
if (a < b) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -299,12 +328,12 @@ testi('tuntien lisääminen', () => {
|
||||||
assertEq('historia', tunnit.lisää('Historia', '5B', 'KV', 1), 0);
|
assertEq('historia', tunnit.lisää('Historia', '5B', 'KV', 1), 0);
|
||||||
assertEq('äidinkieli', tunnit.lisää('Äidinkieli', '1A', 'AS', 3), 1);
|
assertEq('äidinkieli', tunnit.lisää('Äidinkieli', '1A', 'AS', 3), 1);
|
||||||
assertEq('historia nimi', tunnit.tunnit.get(0).nimi, 'Historia');
|
assertEq('historia nimi', tunnit.tunnit.get(0).nimi, 'Historia');
|
||||||
assertEq('historia luokat', tunnit.tunnit.get(0).luokat, ['5B']);
|
assertEq('historia luokat', tunnit.tunnit.get(0).luokat.alkiot(), ['5B']);
|
||||||
assertEq('historia opettajat', tunnit.tunnit.get(0).opettajaLyhenteet, ['KV']);
|
assertEq('historia opettajat', tunnit.tunnit.get(0).opettajaLyhenteet.alkiot(), ['KV']);
|
||||||
assertEq('historia viikossa', tunnit.tunnit.get(0).kertaaViikossa, 1);
|
assertEq('historia viikossa', tunnit.tunnit.get(0).kertaaViikossa, 1);
|
||||||
assertEq('äidinkieli nimi', tunnit.tunnit.get(1).nimi, 'Äidinkieli');
|
assertEq('äidinkieli nimi', tunnit.tunnit.get(1).nimi, 'Äidinkieli');
|
||||||
assertEq('äidinkieli luokat', tunnit.tunnit.get(1).luokat, ['1A']);
|
assertEq('äidinkieli luokat', tunnit.tunnit.get(1).luokat.alkiot(), ['1A']);
|
||||||
assertEq('äidinkieli opettajat', tunnit.tunnit.get(1).opettajaLyhenteet, ['AS']);
|
assertEq('äidinkieli opettajat', tunnit.tunnit.get(1).opettajaLyhenteet.alkiot(), ['AS']);
|
||||||
assertEq('äidinkieli viikossa', tunnit.tunnit.get(1).kertaaViikossa, 3);
|
assertEq('äidinkieli viikossa', tunnit.tunnit.get(1).kertaaViikossa, 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -326,10 +355,10 @@ testi('tuntien järjestys', () => {
|
||||||
tunnit.lisää('Äidinkieli', '1B', 'AS', 3);
|
tunnit.lisää('Äidinkieli', '1B', 'AS', 3);
|
||||||
assertEq('aluksi', tunnit.järjestyksessä()[0][1].nimi, 'Historia');
|
assertEq('aluksi', tunnit.järjestyksessä()[0][1].nimi, 'Historia');
|
||||||
tunnit.tunnit.get(1).nimi = 'Historia';
|
tunnit.tunnit.get(1).nimi = 'Historia';
|
||||||
assertEq('sama nimi', tunnit.järjestyksessä()[0][1].luokat, ['1B']);
|
assertEq('sama nimi', tunnit.järjestyksessä()[0][1].luokat.alkiot(), ['1B']);
|
||||||
tunnit.tunnit.get(0).luokat = ['1B'];
|
tunnit.tunnit.get(0).luokat = new Joukko(['1B']);
|
||||||
assertEq('sama luokka', tunnit.järjestyksessä()[0][1].opettajaLyhenteet, ['AS']);
|
assertEq('sama luokka', tunnit.järjestyksessä()[0][1].opettajaLyhenteet.alkiot(), ['AS']);
|
||||||
tunnit.tunnit.get(0).opettajaLyhenteet = ['AS'];
|
tunnit.tunnit.get(0).opettajaLyhenteet = new Joukko(['AS']);
|
||||||
assertEq('sama opettaja', tunnit.järjestyksessä()[0][1].kertaaViikossa, 1);
|
assertEq('sama opettaja', tunnit.järjestyksessä()[0][1].kertaaViikossa, 1);
|
||||||
tunnit.tunnit.get(1).kertaaViikossa = 1;
|
tunnit.tunnit.get(1).kertaaViikossa = 1;
|
||||||
assertEq('yhtä monta kertaa viikossa', tunnit.järjestyksessä()[0][0], 0);
|
assertEq('yhtä monta kertaa viikossa', tunnit.järjestyksessä()[0][0], 0);
|
||||||
|
|
Loading…
Reference in New Issue