summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/0.listenweise klassen erf
blob: 9b3c02eaeabf161adb8fef9ee2da223664ad293d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
PACKET listenweiseklassenerfDEFINES neueinfuegenklassen,entfernenklassen,
bearbeitungklassen,klassennichtspeichern,klassenspeichern:LET tofather=1,
tograndfather=2,niltext="",blank=" ",null=0,trenner="/",meldtrenner="#";LET 
standardanfang=1,standardeinstieg=4;LET jgst5=5,jgst13=13,erstejgst="05";LET 
erstesfeld=3,felderprozeile=4,klassenproseite=18;LET meldbestleer=59,
meldnichtspeichern=63,meldplausi=57,meldwertzulang=60,meldwarten=69,
meldspeicherung=132,meldspeicherfehler=131,meldfalscheauswahl=56,
meldfortschreibung=140,meldkeinelehrer=141,meldfalscherlehrer=142,meldschonda
=143,meldnichtleer=144,meldnichtda=134,meldloeschung=145;LET maxlaengekennung
=4,maxlaengeintegabez=4;LET pruefartalternative=5,pruefartgrenzen=3;LET 
fnrjgst=4,fnrakt=3,fnrgepl=2,fnrfort2=5,fnrfortneu=6;LET keysj="Schuljahr",
keyshj="Schulhalbjahr";LET wertaktuell="aktuell",wertgeplant="geplant";LET 
paraphentrenner="
";LET vaaendern=1,vaneu=2,valoeschen=3;LET hj1="1",hj2="2";
BOOL VAR nochwelcheda,akthalbjahr,fortschreibungzweiteshalbjahr,
fortschreibungneuesschuljahr,fortschreibung;INT VAR klassenzahl,aktuellesfeld
,pruefstatus,verarbeitungsart;ROW klassenproseiteTEXT VAR kennung;ROW 
klassenproseiteTEXT VAR altedaten;TEXT VAR neuesschuljahr,neueshalbjahr,
vergleichsjgst,lehrerparaphen:=niltext,schuljahr:=niltext,halbjahr:=niltext;
PROC eingangsbildschirmpruefen(BOOL CONST neu):reinitparsing;
ankreuzfelderpruefen;IF eingangsbildschirmokTHEN jgstpruefen;IF 
eingangsbildschirmokTHEN fortschreibungpruefenFI FI .ankreuzfelderpruefen:
standardpruefe(pruefartalternative,fnrgepl,fnrakt,null,niltext,pruefstatus).
jgstpruefen:akthalbjahr:=standardmaskenfeld(fnrakt)<>niltext;standardpruefe(
pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus);.
fortschreibungpruefen:vergleichsjgst:=jgstaufber(standardmaskenfeld(fnrjgst))
;fortschreibungzweiteshalbjahr:=standardmaskenfeld(fnrfort2)<>niltext;
fortschreibungneuesschuljahr:=standardmaskenfeld(fnrfortneu)<>niltext;
fortschreibung:=(fortschreibungzweiteshalbjahrCOR 
fortschreibungneuesschuljahr);IF (fortschreibungzweiteshalbjahrCAND 
fortschreibungneuesschuljahr)THEN pruefstatus:=fnrfort2ELIF (fortschreibung
CAND akthalbjahr)THEN pruefstatus:=fnraktELIF (fortschreibungCAND (NOT neu))
THEN pruefstatus:=meldfortschreibungELIF ((NOT akthalbjahr)CAND (
vergleichsjgst=erstejgst))CAND fortschreibungneuesschuljahrTHEN pruefstatus:=
fnrjgstFI ;IF pruefstatus=meldfortschreibungTHEN standardmeldung(pruefstatus,
niltext);pruefstatus:=fnrjgstELIF pruefstatus<>nullTHEN standardmeldung(
meldfalscheauswahl,niltext)FI .eingangsbildschirmok:pruefstatus=0.END PROC 
eingangsbildschirmpruefen;PROC neueinfuegenklassen:verarbeitungsart:=vaneu;
eingangsbehandlungEND PROC neueinfuegenklassen;PROC entfernenklassen:
verarbeitungsart:=valoeschen;eingangsbehandlungEND PROC entfernenklassen;
PROC bearbeitungklassen:verarbeitungsart:=vaaendern;eingangsbehandlungEND 
PROC bearbeitungklassen;PROC eingangsbehandlung:BOOL CONST neueklassen:=(
verarbeitungsart=vaneu);eingangsbildschirmpruefen(neueklassen);IF 
eingangsbildschirmokTHEN neuesschuljahrhalbjahrerrechnen;
initialisierungenvornehmen;blocklesenundausgeben;IF keinemehrdaTHEN 
bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE 
eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmok:pruefstatus=0.
initialisierungenvornehmen:bestandsetzen;plausipruefungvorbereiten;
standardstartproc(maske(vergleichsknoten)).bestandsetzen:infeld(fnrjgst);IF 
verarbeitungsart=vaaendernTHEN pruefebestandELSE nochwelcheda:=trueFI .
pruefebestand:inittupel(dnraktschuelergruppen);klassengrunddateninpuffer;
search(dnraktschuelergruppen,FALSE );IF keineklassezudieserjgstTHEN 
bestandleermelden;return(tofather);LEAVE eingangsbehandlungELSE nochwelcheda
:=trueFI .keineklassezudieserjgst:(dbstatus<>null)COR ((jgstaufber(wert(
fnrsgrpjgst))<>vergleichsjgst)COR (wert(fnrsgrpsj)<>neuesschuljahr)COR (wert(
fnrsgrphj)<>neueshalbjahr)).plausipruefungvorbereiten:standardmeldung(
meldwarten,niltext);.keinemehrda:NOT nochwelcheda.bestandleermelden:
standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:infeld(pruefstatus
).END PROC eingangsbehandlung;PROC klassennichtspeichern:nichtspeichernmelden
;neuerblock.nichtspeichernmelden:standardmeldung(meldnichtspeichern,niltext);
pause(10).END PROC klassennichtspeichern;PROC klassenspeichern:SELECT 
verarbeitungsartOF CASE vaaendern:aenderungenspeichernCASE vaneu:
neueklassenspeichernCASE valoeschen:klassenloeschenEND SELECT .
aenderungenspeichern:speicherungdurchfuehren(PROC (BOOL VAR )
pruefeaenderungsplausi,false,true,false).neueklassenspeichern:
speicherungdurchfuehren(PROC (BOOL VAR )pruefeneuplausi,true,false,false).
klassenloeschen:speicherungdurchfuehren(PROC (BOOL VAR )pruefeloeschplausi,
false,false,true).END PROC klassenspeichern;PROC pruefeloeschplausi(BOOL VAR 
dateninordnung):INT VAR satzindex:=erstesfeld,plausind;FOR plausindFROM 1
UPTO klassenzahlREP pruefezeile;IF NOT dateninordnungTHEN fehlermeldung;
LEAVE pruefeloeschplausiFI ;satzindexINCR felderprozeilePER .pruefezeile:IF 
standardmaskenfeld(satzindex)<>niltextTHEN dateninordnung:=
schuelergruppevorhandenFI .schuelergruppevorhanden:klassengrunddateninpuffer;
putwert(fnrsgrpkennung,standardmaskenfeld(satzindex));search(
dnraktschuelergruppen,TRUE );aktuellesfeld:=satzindex;(dbstatus=null).
fehlermeldung:IF (akthalbjahr)CAND (dbstatus=null)THEN TEXT VAR pruefsg:=
vergleichsjgst+standardmaskenfeld(satzindex);standardmeldung(meldnichtleer,
pruefsg+meldtrenner)ELSE standardmeldung(meldnichtda,standardmaskenfeld(
satzindex)+meldtrenner)FI .END PROC pruefeloeschplausi;PROC pruefeneuplausi(
BOOL VAR dateninordnung):BOOL VAR parapheninordnung;INT VAR satzindex:=
erstesfeld,plausind;IF lehrerparaphen=niltextTHEN holeallelehrerparaphenFI ;
FOR plausindFROM 1UPTO klassenzahlREP IF standardmaskenfeld(satzindex)<>
niltextTHEN IF length(standardmaskenfeld(satzindex))>maxlaengekennungTHEN 
dateninordnung:=FALSE ;standardmeldung(meldwertzulang,meldtrenner);
aktuellesfeld:=satzindex;LEAVE pruefeneuplausiELIF length(standardmaskenfeld(
satzindex+3))>maxlaengeintegabezTHEN dateninordnung:=FALSE ;standardmeldung(
meldwertzulang,meldtrenner);aktuellesfeld:=satzindex+3;LEAVE pruefeneuplausi
ELSE parapheninordnung:=korrekteparaphe(satzindex+1)CAND korrekteparaphe(
satzindex+2);dateninordnung:=parapheninordnungCAND schuelergruppenochnichtda;
IF NOT dateninordnungTHEN fehlermeldung;LEAVE pruefeneuplausiFI FI FI ;
satzindexINCR felderprozeilePER .schuelergruppenochnichtda:TEXT VAR pruefsg:=
vergleichsjgst+standardmaskenfeld(satzindex);klassengrunddateninpuffer;
putwert(fnrsgrpkennung,standardmaskenfeld(satzindex));search(
dnraktschuelergruppen,TRUE );aktuellesfeld:=satzindex;(dbstatus<>null).
fehlermeldung:IF NOT parapheninordnungTHEN IF lehrerparaphen=paraphentrenner
THEN standardmeldung(meldkeinelehrer,niltext)ELSE standardmeldung(
meldfalscherlehrer,standardmaskenfeld(aktuellesfeld)+meldtrenner)FI ELSE 
standardmeldung(meldschonda,pruefsg+meldtrenner)FI .END PROC pruefeneuplausi;
PROC pruefeaenderungsplausi(BOOL VAR dateninordnung):INT VAR satzindex:=
erstesfeld,plausind;IF lehrerparaphen=niltextTHEN holeallelehrerparaphenFI ;
FOR plausindFROM 1UPTO klassenzahlREP IF length(standardmaskenfeld(satzindex)
)>maxlaengekennungTHEN dateninordnung:=FALSE ;standardmeldung(meldwertzulang,
meldtrenner);aktuellesfeld:=satzindex;LEAVE pruefeaenderungsplausiELIF length
(standardmaskenfeld(satzindex+3))>maxlaengeintegabezTHEN dateninordnung:=
FALSE ;standardmeldung(meldwertzulang,meldtrenner);aktuellesfeld:=satzindex+3
;LEAVE pruefeaenderungsplausiELSE dateninordnung:=korrekteparaphe(satzindex+1
)CAND korrekteparaphe(satzindex+2);IF NOT dateninordnungTHEN fehlermeldung;
LEAVE pruefeaenderungsplausiFI ;FI ;satzindexINCR felderprozeilePER .
fehlermeldung:IF lehrerparaphen=paraphentrennerTHEN standardmeldung(
meldkeinelehrer,niltext)ELSE standardmeldung(meldfalscherlehrer,
standardmaskenfeld(aktuellesfeld)+meldtrenner)FI .END PROC 
pruefeaenderungsplausi;PROC speicherungdurchfuehren(PROC (BOOL VAR )plausi,
BOOL CONST neu,aendern,loeschen):pruefeplausibilitaet;IF dateninordnungTHEN 
speicherntransaktion;neuerblockELSE eingabefehler;return(tofather)FI ;.
pruefeplausibilitaet:BOOL VAR dateninordnung:=true;standardmeldung(meldplausi
,niltext);plausi(dateninordnung).speicherntransaktion:BOOL VAR 
transaktionsfehler:=false;BOOL VAR aenderungsvermerkzusetzen:=FALSE ;
aendernschleife;IF aenderungsvermerkzusetzenTHEN IF akthalbjahrTHEN 
aenderungsvermerksetzen(wertaktuell)ELSE aenderungsvermerksetzen(wertgeplant)
FI ELSE pause(10)FI .aendernschleife:INT VAR suind;INT VAR zahlderaenderungen
:=null;INT VAR satzindex:=erstesfeld;FOR suindFROM 1UPTO klassenzahlREP 
behandleklassensatz;satzindexINCR felderprozeilePER .behandleklassensatz:IF 
datenveraendertTHEN fuehreaenderungaus;aenderungsvermerkzusetzen:=TRUE ;
meldevollzugFI .datenveraendert:((NOT aendern)CAND (standardmaskenfeld(
satzindex)<>niltext))COR (aendernCAND (altedaten(suind)<>(standardmaskenfeld(
satzindex+1)+trenner+standardmaskenfeld(satzindex+2)+trenner+
standardmaskenfeld(satzindex+3)))).fuehreaenderungaus:lesenvorbereiten;lesen;
zurueckschreiben.lesenvorbereiten:zahlderaenderungenINCR 1;
klassengrunddateninpuffer;putwert(fnrsgrpkennung,standardmaskenfeld(satzindex
)).lesen:IF NOT neuTHEN search(dnraktschuelergruppen,TRUE );
transaktionsfehler:=(dbstatus<>null)FI .zurueckschreiben:IF NOT 
transaktionsfehlerTHEN saveupdateposition(dnraktschuelergruppen);IF NOT 
loeschenTHEN putwert(fnrsgrplehrer,standardmaskenfeld(satzindex+1));putwert(
fnrsgrpstellvlehrer,standardmaskenfeld(satzindex+2));bereiteintegabezauf;
putwert(fnrsgrpintegabez,standardmaskenfeld(satzindex+3));IF aendernTHEN 
selupdate(dnraktschuelergruppen)ELSE insert(dnraktschuelergruppen);#
wuerfelwarten(vergleichsjgst,dr10.05.88standardmaskenfeld(satzindex))#FI 
ELSE delete(dnraktschuelergruppen);#wuerfelwarten(vergleichsjgst,dr10.05.88
standardmaskenfeld(satzindex))#FI FI .bereiteintegabezauf:IF 
standardmaskenfeld(satzindex+3)=niltextCAND length(standardmaskenfeld(
satzindex))<=2THEN standardmaskenfeld(standardmaskenfeld(erstesfeld-1)+
standardmaskenfeld(satzindex),satzindex+3)FI .meldevollzug:TEXT VAR 
meldungstext;IF dbstatus=nullTHEN meldungstext:=vergleichsjgst+
standardmaskenfeld(satzindex)+meldtrenner;IF NOT loeschenTHEN standardmeldung
(meldspeicherung,meldungstext)ELSE standardmeldung(meldloeschung,meldungstext
)FI ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT (
vergleichsjgst+standardmaskenfeld(satzindex));meldungstextCAT meldtrenner;
standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE 
speicherungdurchfuehrenFI ;infeld(satzindex).eingabefehler:infeld(
aktuellesfeld).END PROC speicherungdurchfuehren;PROC neuerblock:enter(
tograndfather)END PROC neuerblock;PROC blocklesenundausgeben:SELECT 
verarbeitungsartOF CASE vaaendern:aenderungsblocklesenCASE vaneu:
blocklesenneuCASE valoeschen:blocklesenloeschenEND SELECT .blocklesenneu:
neuerbildschirm.blocklesenloeschen:neuerbildschirm;
paraphenfelderundintegabezsperren.paraphenfelderundintegabezsperren:INT VAR 
sperrfeld:=erstesfeld+1;INT VAR i;FOR iFROM 1UPTO klassenproseiteREP 
feldschutz(sperrfeld);feldschutz(sperrfeld+1);feldschutz(sperrfeld+2);
sperrfeldINCR felderprozeilePER .END PROC blocklesenundausgeben;PROC 
neuerbildschirm:vorbereiten;gewuenschteszeigen;nachbereiten.vorbereiten:
standardmaskenfeld(vergleichsjgst,erstesfeld-1);aktuellesfeld:=erstesfeld.
gewuenschteszeigen:IF fortschreibungTHEN TEXT VAR altejgst:=vergleichsjgst;
TEXT VAR altesschuljahr:=neuesschuljahr,alteshalbjahr:=neueshalbjahr;
klassenzahl:=null;IF fortschreibungneuesschuljahrTHEN vergleichsjgst:=
jgstaufber(text(int(altejgst)-1));FI ;neuesschuljahr:=schulkenndatum(keysj);
neueshalbjahr:=schulkenndatum(keyshj);klassengrunddateninpuffer;
statleseschleife(dnraktschuelergruppen,vergleichsjgst,niltext,fnrsgrpjgst,
fnrsgrpkennung,PROC zeigeklassendaten);vergleichsjgst:=altejgst;
neuesschuljahr:=altesschuljahr;neueshalbjahr:=alteshalbjahrFI .nachbereiten:
klassenzahl:=klassenproseite;infeld(standardanfang);standardfelderausgeben;
infeld(erstesfeld).END PROC neuerbildschirm;PROC aenderungsblocklesen:
vorbereiten;gewuenschteszeigen;nachbereiten.vorbereiten:standardmeldung(
meldwarten,niltext);klassenzahl:=null;standardmaskenfeld(vergleichsjgst,
erstesfeld-1);aktuellesfeld:=erstesfeld.gewuenschteszeigen:
klassengrunddateninpuffer;statleseschleife(dnraktschuelergruppen,
vergleichsjgst,niltext,fnrsgrpjgst,fnrsgrpkennung,PROC zeigeklassendaten).
nachbereiten:restlichezeilenloeschen;infeld(standardanfang);
standardfelderausgeben;infeld(standardeinstieg).restlichezeilenloeschen:INT 
VAR zeilenzaehler;INT VAR zeilenfeld:=(klassenzahl*felderprozeile)+erstesfeld
;FOR zeilenzaehlerFROM klassenzahl+1UPTO klassenproseiteREP loeschezeilePER .
loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP 
standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank,zeilenfeld);
feldschutz(zeilenfeld);zeilenfeldINCR 1PER ;.END PROC aenderungsblocklesen;
PROC zeigeklassendaten(BOOL VAR schluss):IF gehoertdazuTHEN klassenzahlINCR 1
;kennungzeigen;paraphenzeigen;integabezzeigenFI .gehoertdazu:schluss:=(
jgstaufber(wert(fnrsgrpjgst))<>vergleichsjgst)COR klassenzahl=klassenproseite
;NOT schluss.kennungzeigen:TEXT CONST zug:=wert(fnrsgrpkennung);kennung(
klassenzahl):=zug;standardmaskenfeld(zug,aktuellesfeld);IF NOT fortschreibung
THEN feldschutz(aktuellesfeld);FI ;aktuellesfeldINCR 1.paraphenzeigen:TEXT 
VAR paraphen:=wert(fnrsgrplehrer);TEXT CONST par:=wert(fnrsgrpstellvlehrer);
standardmaskenfeld(paraphen,aktuellesfeld);feldfrei(aktuellesfeld);
aktuellesfeldINCR 1;standardmaskenfeld(par,aktuellesfeld);feldfrei(
aktuellesfeld);aktuellesfeldINCR 1;paraphenCAT (trenner+par);altedaten(
klassenzahl):=paraphen+trenner+wert(fnrsgrpintegabez).integabezzeigen:
standardmaskenfeld(wert(fnrsgrpintegabez),aktuellesfeld);feldfrei(
aktuellesfeld);aktuellesfeldINCR 1.END PROC zeigeklassendaten;PROC 
feldloeschen(INT CONST laenge):standardmaskenfeld(laenge*blank,aktuellesfeld)
END PROC feldloeschen;PROC holeallelehrerparaphen:lehrerparaphen:=
paraphentrenner;statleseschleife(dnrlehrer,niltext,niltext,fnrlparaphe,
fnrlfamname,PROC setzelehrparaphe)END PROC holeallelehrerparaphen;PROC 
neuesschuljahrhalbjahrerrechnen:IF schuljahr=niltextTHEN schuljahr:=
schulkenndatum(keysj);halbjahr:=schulkenndatum(keyshj)FI ;IF akthalbjahrTHEN 
neuesschuljahr:=schuljahr;neueshalbjahr:=halbjahrELIF halbjahr=hj1THEN 
neuesschuljahr:=schuljahr;neueshalbjahr:=hj2ELSE ersteshalbjahrneuesschuljahr
FI .ersteshalbjahrneuesschuljahr:neuesschuljahr:=subtext(schuljahr,3,4);
neuesschuljahrCAT text(int(neuesschuljahr)+1,2);neueshalbjahr:=hj1.END PROC 
neuesschuljahrhalbjahrerrechnen;PROC setzelehrparaphe(BOOL VAR b):
lehrerparaphenCAT paraphe(wert(fnrlparaphe))END PROC setzelehrparaphe;TEXT 
PROC paraphe(TEXT CONST p):p+paraphentrennerEND PROC paraphe;BOOL PROC 
korrekteparaphe(INT CONST ind):TEXT CONST par:=standardmaskenfeld(ind);INT 
VAR paraphenpos:=pos(lehrerparaphen,paraphentrenner+paraphe(par));
aktuellesfeld:=ind;(par=niltext)COR (paraphenpos>null)END PROC 
korrekteparaphe;PROC klassengrunddateninpuffer:putwert(fnrsgrpsj,
neuesschuljahr);putwert(fnrsgrphj,neueshalbjahr);putwert(fnrsgrpjgst,
vergleichsjgst);END PROC klassengrunddateninpuffer;END PACKET 
listenweiseklassenerf;