Compare commits

...

2 Commits

Author SHA1 Message Date
Juhani Krekelä de8a70f1be Toteuta tuntien muokkaamiseen tarvittavat tapahtumat 2023-08-11 20:07:19 +03:00
Juhani Krekelä a6de5097b0 Lisää käyttöliittymä tunnin kahdentamiselle 2023-08-11 19:48:18 +03:00
3 changed files with 102 additions and 28 deletions

View File

@ -83,9 +83,9 @@ document.getElementById('lisää-tunti').addEventListener('submit', (tapahtuma)
suorita( suorita(
tapahtumaTyypit.lisääTunti, tapahtumaTyypit.lisääTunti,
nimi, nimi,
luokka, [luokka],
opettajaLyhenne, [opettajaLyhenne],
tila, [tila],
); );
nimiElementti.value = ''; nimiElementti.value = '';
@ -329,8 +329,18 @@ function luoTuntiLista() {
for (let [id, tunti] of tunnit.järjestyksessä()) { for (let [id, tunti] of tunnit.järjestyksessä()) {
let tuntiListassa = document.createElement('li'); let tuntiListassa = document.createElement('li');
tuntiListassa.appendChild(luoPainike('+', () => {
suorita(
tapahtumaTyypit.lisääTunti,
tunti.nimi,
tunti.luokat.alkiot(),
tunti.opettajaLyhenteet.alkiot(),
tunti.tilat.alkiot()
);
piirräKaikki();
}));
tuntiListassa.appendChild(luoPainike('-', () => { tuntiListassa.appendChild(luoPainike('-', () => {
console.log(id);
suorita(tapahtumaTyypit.poistaTunti, id); suorita(tapahtumaTyypit.poistaTunti, id);
piirräKaikki(); piirräKaikki();
})); }));

View File

@ -15,6 +15,13 @@ const tapahtumaTyypit = {
lisääTunti: 'lisääTunti', lisääTunti: 'lisääTunti',
poistaTunti: 'poistaTunti', poistaTunti: 'poistaTunti',
lisääTuntiLuokka: 'lisääTuntiLuokka',
poistaTuntiLuokka: 'poistaTuntiLuokka',
lisääTuntiOpettaja: 'lisääTuntiOpettaja',
poistaTuntiOpettaja: 'poistaTuntiOpettaja',
lisääTuntiTila: 'lisääTuntiTila',
poistaTuntiTila: 'poistaTuntiTila',
}; };
class Tapahtuma { class Tapahtuma {
@ -41,11 +48,11 @@ function suorita(tyyppi, ...argumentit) {
let paluuarvo = undefined; let paluuarvo = undefined;
switch (tyyppi) { switch (tyyppi) {
case tapahtumaTyypit.lisääAste: case tapahtumaTyypit.lisääAste:
assertRange('lisääAste argumentit määrä', argumentit.length, 0, 1); assertRange('lisääAste argumentit', argumentit.length, 0, 1);
paluuarvo = luokkaAsteet.lisää(...argumentit) paluuarvo = luokkaAsteet.lisää(...argumentit)
break; break;
case tapahtumaTyypit.poistaAste: case tapahtumaTyypit.poistaAste:
assertEq('poistaAste argumentit määrä', argumentit.length, 1); assertEq('poistaAste argumentit', argumentit.length, 1);
let [poistettuAste] = argumentit; let [poistettuAste] = argumentit;
luokkaAsteet.poista(poistettuAste); luokkaAsteet.poista(poistettuAste);
// Poista poistettujen luokka-asteiden luokat tunneista // Poista poistettujen luokka-asteiden luokat tunneista
@ -59,7 +66,7 @@ function suorita(tyyppi, ...argumentit) {
} }
break; break;
case tapahtumaTyypit.muutaAste: case tapahtumaTyypit.muutaAste:
assertEq('muutaAste argumentit määrä', argumentit.length, 2); assertEq('muutaAste argumentit', argumentit.length, 2);
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
@ -76,11 +83,11 @@ function suorita(tyyppi, ...argumentit) {
break; break;
case tapahtumaTyypit.lisääLuokka: case tapahtumaTyypit.lisääLuokka:
assertEq('lisääLuokka argumentit määrä', argumentit.length, 1); assertEq('lisääLuokka argumentit', argumentit.length, 1);
luokkaAsteet.asteet[argumentit[0]].lisää(); luokkaAsteet.asteet[argumentit[0]].lisää();
break; break;
case tapahtumaTyypit.poistaLuokka: case tapahtumaTyypit.poistaLuokka:
assertEq('poistaLuokka argumentit määrä', argumentit.length, 1); assertEq('poistaLuokka argumentit', argumentit.length, 1);
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
@ -94,11 +101,11 @@ function suorita(tyyppi, ...argumentit) {
break; break;
case tapahtumaTyypit.lisääOpettaja: case tapahtumaTyypit.lisääOpettaja:
assertEq('lisääOpettaja argumentit määrä', argumentit.length, 2); assertEq('lisääOpettaja argumentit', argumentit.length, 2);
opettajat.lisää(...argumentit); opettajat.lisää(...argumentit);
break; break;
case tapahtumaTyypit.poistaOpettaja: case tapahtumaTyypit.poistaOpettaja:
assertEq('poistaOpettaja argumentit määrä', argumentit.length, 1); assertEq('poistaOpettaja argumentit', argumentit.length, 1);
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
@ -108,11 +115,11 @@ function suorita(tyyppi, ...argumentit) {
break; break;
case tapahtumaTyypit.lisääTila: case tapahtumaTyypit.lisääTila:
assertEq('lisääTila argumentit määrä', argumentit.length, 1); assertEq('lisääTila argumentit', argumentit.length, 1);
paluuarvo = tilat.lisää(...argumentit); paluuarvo = tilat.lisää(...argumentit);
break; break;
case tapahtumaTyypit.poistaTila: case tapahtumaTyypit.poistaTila:
assertEq('poistaTila argumentit määrä', argumentit.length, 1); assertEq('poistaTila argumentit', argumentit.length, 1);
let [poistettuTila] = argumentit; let [poistettuTila] = argumentit;
tilat.poista(poistettuTila); tilat.poista(poistettuTila);
for (let [_, tunti] of tunnit.tunnit) { for (let [_, tunti] of tunnit.tunnit) {
@ -121,14 +128,39 @@ function suorita(tyyppi, ...argumentit) {
break; break;
case tapahtumaTyypit.lisääTunti: case tapahtumaTyypit.lisääTunti:
assertEq('lisääTunti argumentit määrä', argumentit.length, 4); assertEq('lisääTunti argumentit', argumentit.length, 4);
paluuarvo = tunnit.lisää(...argumentit); paluuarvo = tunnit.lisää(...argumentit);
break; break;
case tapahtumaTyypit.poistaTunti: case tapahtumaTyypit.poistaTunti:
assertEq('poistaTunti argumentit määrä', argumentit.length, 1); assertEq('poistaTunti argumentit', argumentit.length, 1);
tunnit.poista(...argumentit); tunnit.poista(...argumentit);
break; break;
case tapahtumaTyypit.lisääTuntiLuokka:
assertEq('lisääTuntiLuokka argumentit', argumentit.length, 2);
tunnit.tunnit.get(argumentit[0]).luokat.lisää(argumentit[1]);
break;
case tapahtumaTyypit.poistaTuntiLuokka:
assertEq('poistaTuntiLuokka argumentit', argumentit.length, 2);
tunnit.tunnit.get(argumentit[0]).luokat.poista(argumentit[1]);
break;
case tapahtumaTyypit.lisääTuntiOpettaja:
assertEq('lisääTuntiOpettaja argumentit', argumentit.length, 2);
tunnit.tunnit.get(argumentit[0]).opettajaLyhenteet.lisää(argumentit[1]);
break;
case tapahtumaTyypit.poistaTuntiOpettaja:
assertEq('poistaTuntiOpettajat argumentit', argumentit.length, 2);
tunnit.tunnit.get(argumentit[0]).opettajaLyhenteet.poista(argumentit[1]);
break;
case tapahtumaTyypit.lisääTuntiTila:
assertEq('lisääTuntiTila argumentit', argumentit.length, 2);
tunnit.tunnit.get(argumentit[0]).tilat.lisää(argumentit[1]);
break;
case tapahtumaTyypit.poistaTuntiTila:
assertEq('poistaTuntiTila argumentit', argumentit.length, 2);
tunnit.tunnit.get(argumentit[0]).tilat.poista(argumentit[1]);
break;
default: default:
throw new Error(`tuntematon tapahtumatyyppi ${tyyppi}`); throw new Error(`tuntematon tapahtumatyyppi ${tyyppi}`);
} }
@ -294,26 +326,29 @@ testi('tilojen käsittely', () => {
testi('tuntien käsittely', () => { testi('tuntien käsittely', () => {
alustaMalli(); alustaMalli();
suorita(tapahtumaTyypit.lisääAste); suorita(tapahtumaTyypit.lisääAste);
suorita(tapahtumaTyypit.lisääAste);
suorita(tapahtumaTyypit.lisääAste, 5); suorita(tapahtumaTyypit.lisääAste, 5);
suorita(tapahtumaTyypit.lisääLuokka, 5); suorita(tapahtumaTyypit.lisääLuokka, 5);
suorita(tapahtumaTyypit.lisääOpettaja, 'KV', 'Kari Virtanen'); suorita(tapahtumaTyypit.lisääOpettaja, 'KV', 'Kari Virtanen');
suorita(tapahtumaTyypit.lisääOpettaja, 'AS', 'Aili Savolainen'); suorita(tapahtumaTyypit.lisääOpettaja, 'AS', 'Aili Savolainen');
suorita(tapahtumaTyypit.lisääOpettaja, 'MM', 'Maija Meikäläinen'); suorita(tapahtumaTyypit.lisääOpettaja, 'MM', 'Maija Meikäläinen');
suorita(tapahtumaTyypit.lisääOpettaja, 'MaM', 'Matti Meikäläinen');
suorita(tapahtumaTyypit.lisääTila, '1A'); suorita(tapahtumaTyypit.lisääTila, '1A');
suorita(tapahtumaTyypit.lisääTila, '5B'); suorita(tapahtumaTyypit.lisääTila, '5B');
suorita(tapahtumaTyypit.lisääTila, 'Käsityöluokka'); suorita(tapahtumaTyypit.lisääTila, 'Käsityöluokka');
suorita(tapahtumaTyypit.lisääTila, '5A');
assertEq('aluksi', tunnit.järjestyksessä(), []); assertEq('aluksi', tunnit.järjestyksessä(), []);
assertEq('historia', assertEq('historia',
suorita(tapahtumaTyypit.lisääTunti, 'Historia', '5B', 'KV', 1), suorita(tapahtumaTyypit.lisääTunti, ['Historia'], ['5B'], ['KV'], [1]),
0 0
); );
assertEq('äidinkieli', assertEq('äidinkieli',
suorita(tapahtumaTyypit.lisääTunti, 'Äidinkieli', '1A', 'AS', 0), suorita(tapahtumaTyypit.lisääTunti, ['Äidinkieli'], ['1A'], ['AS'], [0]),
1 1
); );
assertEq('kuvataide', assertEq('kuvataide',
suorita(tapahtumaTyypit.lisääTunti, 'Kuvataide', '5A', 'MM', 2), suorita(tapahtumaTyypit.lisääTunti, ['Kuvataide'], ['5A'], ['MM'], [2]),
2 2
); );
assertEq('lisättyä pituus', tunnit.järjestyksessä().length, 3); assertEq('lisättyä pituus', tunnit.järjestyksessä().length, 3);
@ -343,9 +378,38 @@ testi('tuntien käsittely', () => {
assertEq('tila poistettua 1', tunnit.järjestyksessä()[1][1].tilat.alkiot(), [2]); assertEq('tila poistettua 1', tunnit.järjestyksessä()[1][1].tilat.alkiot(), [2]);
assertEq('tila poistettua 2', tunnit.järjestyksessä()[2][1].tilat.alkiot(), [0]); assertEq('tila poistettua 2', tunnit.järjestyksessä()[2][1].tilat.alkiot(), [0]);
suorita(tapahtumaTyypit.lisääTuntiLuokka, 0, '2A');
assertEq('luokka lisättyä tunnille 0', tunnit.järjestyksessä()[0][1].luokat.alkiot(), ['2A']);
assertEq('luokka lisättyä tunnille 1', tunnit.järjestyksessä()[1][1].luokat.alkiot(), ['6A']);
assertEq('luokka lisättyä tunnille 2', tunnit.järjestyksessä()[2][1].luokat.alkiot(), []);
suorita(tapahtumaTyypit.poistaTuntiLuokka, 2, '6A');
assertEq('luokka poistettua tunnilta 0', tunnit.järjestyksessä()[0][1].luokat.alkiot(), ['2A']);
assertEq('luokka poistettua tunnilta 1', tunnit.järjestyksessä()[1][1].luokat.alkiot(), []);
assertEq('luokka poistettua tunnilta 2', tunnit.järjestyksessä()[2][1].luokat.alkiot(), []);
suorita(tapahtumaTyypit.lisääTuntiOpettaja, 0, 'MaM');
assertEq('opettaja lisättyä tunnille 0', tunnit.järjestyksessä()[0][1].opettajaLyhenteet.alkiot(), ['MaM']);
assertEq('opettaja lisättyä tunnille 1', tunnit.järjestyksessä()[1][1].opettajaLyhenteet.alkiot(), ['MM']);
assertEq('opettaja lisättyä tunnille 2', tunnit.järjestyksessä()[2][1].opettajaLyhenteet.alkiot(), ['AS']);
suorita(tapahtumaTyypit.poistaTuntiOpettaja, 2, 'MM');
assertEq('opettaja poistettua tunnilta 0', tunnit.järjestyksessä()[0][1].opettajaLyhenteet.alkiot(), ['MaM']);
assertEq('opettaja poistettua tunnilta 1', tunnit.järjestyksessä()[1][1].opettajaLyhenteet.alkiot(), []);
assertEq('opettaja poistettua tunnilta 2', tunnit.järjestyksessä()[2][1].opettajaLyhenteet.alkiot(), ['AS']);
suorita(tapahtumaTyypit.lisääTuntiTila, 0, 3);
assertEq('tila lisäätyä tunnille 0', tunnit.järjestyksessä()[0][1].tilat.alkiot(), [3]);
assertEq('tila lisäätyä tunnille 1', tunnit.järjestyksessä()[1][1].tilat.alkiot(), [2]);
assertEq('tila lisäätyä tunnille 2', tunnit.järjestyksessä()[2][1].tilat.alkiot(), [0]);
suorita(tapahtumaTyypit.poistaTuntiTila, 1, 0);
assertEq('tila poistettua tunnilta 0', tunnit.järjestyksessä()[0][1].tilat.alkiot(), [3]);
assertEq('tila poistettua tunnilta 1', tunnit.järjestyksessä()[1][1].tilat.alkiot(), [2]);
assertEq('tila poistettua tunnilta 2', tunnit.järjestyksessä()[2][1].tilat.alkiot(), []);
suorita(tapahtumaTyypit.poistaTunti, 0); suorita(tapahtumaTyypit.poistaTunti, 0);
assertEq('poistettua pituus', tunnit.järjestyksessä().length, 2); assertEq('poistettua pituus', tunnit.järjestyksessä().length, 2);
alustaMalli(); alustaMalli();
// TODO: Luokkien ja opettajien listojen päivitys
}); });

View File

@ -165,11 +165,11 @@ class Tunnit {
tunnit = new Map(); tunnit = new Map();
#seuraavaId = 0; #seuraavaId = 0;
lisää(nimi, luokka, opettajaLyhenne, tila) { lisää(nimi, luokat, opettajaLyhenteet, tilat) {
let id = this.#seuraavaId++; let id = this.#seuraavaId++;
this.tunnit.set( this.tunnit.set(
id, id,
new Tunti(nimi, [luokka], [opettajaLyhenne], [tila]) new Tunti(nimi, luokat, opettajaLyhenteet, tilat)
); );
return id; return id;
} }
@ -394,8 +394,8 @@ testi('tilojen nimet', () => {
testi('tuntien lisääminen', () => { testi('tuntien lisääminen', () => {
let tunnit = new Tunnit(); let tunnit = new Tunnit();
assertEq('historia', tunnit.lisää('Historia', '5B', 'KV', 0), 0); assertEq('historia', tunnit.lisää('Historia', ['5B'], ['KV'], [0]), 0);
assertEq('äidinkieli', tunnit.lisää('Äidinkieli', '1A', 'AS', 1), 1); assertEq('äidinkieli', tunnit.lisää('Äidinkieli', ['1A'], ['AS'], [1]), 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.alkiot(), ['5B']); assertEq('historia luokat', tunnit.tunnit.get(0).luokat.alkiot(), ['5B']);
assertEq('historia opettajat', tunnit.tunnit.get(0).opettajaLyhenteet.alkiot(), ['KV']); assertEq('historia opettajat', tunnit.tunnit.get(0).opettajaLyhenteet.alkiot(), ['KV']);
@ -408,20 +408,20 @@ testi('tuntien lisääminen', () => {
testi('tuntien poistaminen', () => { testi('tuntien poistaminen', () => {
let tunnit = new Tunnit(); let tunnit = new Tunnit();
tunnit.lisää('Historia', '5B', 'KV', 0); tunnit.lisää('Historia', ['5B'], ['KV'], [0]);
tunnit.lisää('Äidinkieli', '1B', 'AS', 1); tunnit.lisää('Äidinkieli', ['1B'], ['AS'], [1]);
tunnit.poista(0); tunnit.poista(0);
tunnit.poista(1); tunnit.poista(1);
assertThrow('jo poistettu', 'ei tuntia ID:llä 1', () => { assertThrow('jo poistettu', 'ei tuntia ID:llä 1', () => {
tunnit.poista(1); tunnit.poista(1);
}); });
assertEq('kuvataide', tunnit.lisää('Kuvataide', '6A', 'MM', 2), 2); assertEq('kuvataide', tunnit.lisää('Kuvataide', ['6A'], ['MM'], [2]), 2);
}); });
testi('tuntien järjestys', () => { testi('tuntien järjestys', () => {
let tunnit = new Tunnit(); let tunnit = new Tunnit();
tunnit.lisää('Historia', '5B', 'KV', 0); tunnit.lisää('Historia', ['5B'], ['KV'], [0]);
tunnit.lisää('Äidinkieli', '1B', 'AS', 1); tunnit.lisää('Äidinkieli', ['1B'], ['AS'], [1]);
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.alkiot(), ['1B']); assertEq('sama nimi', tunnit.järjestyksessä()[0][1].luokat.alkiot(), ['1B']);