summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/1.schuelerjgst aendern
blob: 1a80c4fb8c659c0263c4d2b3f36d5ee6c5ad1bb5 (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
PACKET schuelerjgstaendernDEFINES schuelerjgstbearbeiten,
schuelerjgstaenderungschuelerzeigen,
schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten,
schuelerjgstaenderungspeichern,pruefungschuelerjgst:LET maskenname=
"ms schuelerjgst aendern",maskennameeingang="ms schuelerjgst aendern eingang"
,fnrname=2,fnrrufname=3,fnrgebdatum=4,fnrjgst=5,fnrhalbjahr=6,fnrzug=7,
fnrzugang=8,fnraktuellehjd=9,fnrneueshj1=10,fnrneuehjd1=11,fnrneueshj2=12,
fnrneuehjd2=13;LET schulhalbjahr="Schulhalbjahr";LET aktbestand="ls",
aktschuljahr="Schuljahr";LET meldunggibtsnicht=71,meldunglistenerstellung=7,
meldungkeineliste=68,meldungletzter=67,meldungspeicherung=50,
meldungkeinespeicherung=63,pruefemeldung=57;LET dateiname="Schülerliste";
FILE VAR f;TEXT VAR schuelertupel:="",zugangsicherung:="",schuelertid:="",
hjdtid:="";TEXT VAR akthalbjahr,jgstalt,zugalt,jgst,zug,jgsttext;LET 
gesamtanzahlhalbjahre=12,laengehalbjahreseintrag=4;LET jgst05="05",jgst13=
"13";LET jgstufe10=10;LET oblitrenner="$",leer="",punkt=".";LET 
anzschlfeldersu=3;BOOL VAR falschesdatum:=FALSE ;INT CONST gesamtzeilenlaenge
:=gesamtanzahlhalbjahre*laengehalbjahreseintrag;ROW anzschlfeldersuTEXT VAR 
schluessel;TAG VAR maske;TEXT VAR ausgabezeile:="",halbjahrkuerzel:="";LET 
logtextbeginn="Anw. 1.2.4 Änderung";PROC schuelerjgstbearbeiten:BOOL VAR 
suexistiert:=FALSE ;falschesdatum:=FALSE ;systemdboff;reinitparsing;
schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF NOT 
falschesdatumTHEN IF suexistiertTHEN schluessel(1):=wert(fnrsufamnames);
schluessel(2):=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(
fnrsugebdatums));loeschedieerstellteobjektliste;standardstartproc(maskenname)
;bereiteaenderungvor;infeld(fnrjgst);standardnprocELSE standardmeldung(
meldunggibtsnicht,"");return(1)FI ELSE return(1)FI .END PROC 
schuelerjgstbearbeiten;PROC schluesselbereitstellen:schluessel(1):=
standardmaskenfeld(fnrname);schluessel(2):=standardmaskenfeld(fnrrufname);
schluessel(3):=datumrekonversion(standardmaskenfeld(fnrgebdatum));END PROC 
schluesselbereitstellen;PROC pruefeobnameexistiert(BOOL VAR suexist):TEXT 
VAR datenbankwerte,schluesselwerte;inittupel(dnrschueler);
maskenwerteindatenbank;IF NOT falschesdatumTHEN search(ixsustatfamrufgeb,
FALSE );IF dbstatus=okTHEN saveupdateposition(dnrschueler);datenbankwerte:=
wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));schluesselwerte:=
schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=schluessel(1)CAND (
(schluessel(2)=leerAND schluessel(3)=leer)OR (pos(datenbankwerte,
schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC 
pruefeobnameexistiert;PROC bereiteaenderungvor:saveupdateposition(dnrschueler
);savetupel(dnrschueler,schuelertupel);schuelertid:=gettid;hjdtid:=wert(
fnrsutidakthjd);zugangsicherung:=wert(fnrsuartzugang);wertelesen;
fuelledbdateninfelder;fuellehjddateninfelder;infeld(1);standardfelderausgeben
;infeld(fnrjgst).wertelesen:akthalbjahr:=schulkenndatum(schulhalbjahr);.
fuelledbdateninfelder:jgstalt:=jgstaufber(wert(fnrsusgrpjgst));zugalt:=
compress(wert(fnrsusgrpzugtut));standardmaskenfeld(schluessel(1),fnrname);
standardmaskenfeld(schluessel(2),fnrrufname);standardmaskenfeld(schluessel(3)
,fnrgebdatum);standardmaskenfeld(akthalbjahr,fnrhalbjahr);standardmaskenfeld(
jgstalt,fnrjgst);standardmaskenfeld(zugalt,fnrzug);standardmaskenfeld(wert(
fnrsuartzugang),fnrzugang);.fuellehjddateninfelder:jgsttext:=jgstalt;
halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;lieferehalbjahreszeile(
ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnraktuellehjd)
;IF jgstalt=jgst05THEN erhoehejgsttext(TRUE );halbjahrkuerzel:=jgsttext+punkt
+akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);
lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld(
ausgabezeile,fnrneuehjd1);liefereleerzeileELIF jgstalt=jgst13THEN 
erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;
standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);lieferehalbjahreszeile(
ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd1);
liefereleerzeileELSE erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+
akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);
lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld(
ausgabezeile,fnrneuehjd1);jgsttext:=jgstalt;erhoehejgsttext(TRUE );
halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;standardmaskenfeld(
halbjahrkuerzel,fnrneueshj2);lieferehalbjahreszeile(ausgabezeile,
halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd2)FI .
liefereleerzeile:standardmaskenfeld(leereshj,fnrneueshj2);standardmaskenfeld(
leerezeile,fnrneuehjd2).leereshj:text(" ",laengehalbjahreseintrag).leerezeile
:text(" ",gesamtzeilenlaenge).END PROC bereiteaenderungvor;PROC 
erhoehejgsttext(BOOL CONST erhoehen):INT VAR jgstint:=int(jgsttext);IF 
erhoehenTHEN jgstintINCR 1ELSE jgstintDECR 1FI ;jgsttext:=jgstaufber(text(
jgstint))END PROC erhoehejgsttext;PROC loeschedieerstellteobjektliste:forget(
dateiname,quiet);END PROC loeschedieerstellteobjektliste;PROC 
schuelerjgstaenderungschuelerzeigen:BOOL VAR listeexistiertnicht;
falschesdatum:=FALSE ;systemdboff;schluesselbereitstellen;
maskenwerteindatenbank;IF NOT falschesdatumTHEN standardmeldung(
meldunglistenerstellung,"");parsenooffields(5);objektlistestarten(
ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF 
listeexistiertnichtTHEN reinitparsing;standardmeldung(meldungkeineliste,"");
return(1)ELSE datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler,
TRUE ,BOOL PROC pruefungschuelerjgst)FI ELSE return(1)FI .END PROC 
schuelerjgstaenderungschuelerzeigen;PROC maskenwerteindatenbank:putwert(
fnrsufamnames,schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop
;initmaske(maske,maskennameeingang);putwert(fnrsugebdatums,datumskonversion(
schluessel(3)));IF iserrorTHEN clearerror;meldeauffaellig(maske,157);infeld(
fnrgebdatum);falschesdatum:=TRUE ;enablestopELSE enablestop;putwert(
fnrsustatuss,aktbestand);FI END PROC maskenwerteindatenbank;BOOL PROC 
pruefungschuelerjgst:wert(fnrsustatuss)=aktbestandEND PROC 
pruefungschuelerjgst;PROC 
schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten:BOOL VAR ok,
kannbearbeitetwerden:=FALSE ;loeschedieerstellteobjektliste;
objektlistebeenden(dateiname,TRUE );reinitparsing;
holeerstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF ok
THEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE 
holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN 
standardstartproc(maskenname);bereiteaenderungvor;infeld(fnrjgst);
standardnprocELSE enter(2)FI .END PROC 
schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten;PROC 
holeerstenschluesselausdatei(BOOL VAR ok):IF NOT exists(dateiname)THEN ok:=
FALSE ;LEAVE holeerstenschluesselausdateiFI ;f:=sequentialfile(input,
dateiname);holenaechstenschluesselausdatei(ok);END PROC 
holeerstenschluesselausdatei;PROC holenaechstenschluesselausdatei(BOOL VAR ok
):TEXT VAR thesaurustext:="";INT VAR schluesselbeginn,schluesseltrennung,i;
IF eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f,
thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI .
bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext,
oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner,
schluesselbeginn+1);FOR iFROM 1UPTO anzschlfeldersuREP IF schluesseltrennung>
0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1,
schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung
:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):=
subtext(thesaurustext,schluesselbeginn+1);FI ;schluessel(3):=
datumrekonversion(schluessel(3));PER ;.END PROC 
holenaechstenschluesselausdatei;PROC schuelerjgstaenderungspeichern(BOOL 
CONST speichern):IF speichernTHEN INT VAR fehlerstatus:=0;
pruefeplausibilitaet(fehlerstatus);IF datenfehlerfreiTHEN standardmeldung(
meldungspeicherung,"");datenspeichern;
vorbereitendernaechstenschluesselbehandlungELSE fehlerbehandeln;return(1)FI 
ELSE standardmeldung(meldungkeinespeicherung,"");
vorbereitendernaechstenschluesselbehandlungFI .datenfehlerfrei:fehlerstatus=0
.fehlerbehandeln:infeld(fehlerstatus).datenspeichern:logeintragvornehmen;
aenderungschreiben;halbjahresdatenloeschen(schluessel,jgstalt,jgst,
akthalbjahr).logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;eintragCAT 
" """;eintragCAT schluessel(1);eintragCAT ", ";eintragCAT schluessel(2);
eintragCAT ", ";eintragCAT datumskonversion(schluessel(3));eintragCAT """";
logeintrag(eintrag).aenderungschreiben:IF jgstoderzuggeaendertTHEN 
dbfelderfuellen;aenderunginhjdeintragen;restoreupdateposition(dnrschueler);
selupdate(dnrschueler);IF dbstatus<>0THEN restoretupel(dnrschueler,
schuelertupel)ELSE IF jgst<>jgstaltTHEN IF int(jgst)>=jgstufe10THEN 
kurswahlserveraktualisieren(jgst,"","")FI ;IF int(jgstalt)>=jgstufe10THEN 
kurswahlserveraktualisieren(jgstalt,"","")FI ;FI ;FI ;ELSE dbfelderfuellen;
replace(dnrschueler,schuelertid);FI .dbfelderfuellen:putwert(fnrsusgrpjgst,
jgst);putwert(fnrsusgrpzugtut,zug);putwert(fnrsuartzugang,standardmaskenfeld(
fnrzugang));.jgstoderzuggeaendert:jgst<>jgstaltCOR zug<>zugalt.
aenderunginhjdeintragen:IF hjdtid<>leerTHEN putwert(fnrhjdjgst,jgst);putwert(
fnrhjdkennung,zug);selupdate(dnrhalbjahresdaten);IF dbstatus=okTHEN putwert(
fnrsutidakthjd,gettid)FI FI .END PROC schuelerjgstaenderungspeichern;PROC 
vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN 
holenaechstenschluesselauslisteELSE enter(2)FI .
holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ;
holenaechstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF 
okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE 
holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN 
bereiteaenderungvor;return(1)ELSE behandleendederlistenabarbeitungFI .
behandleendederlistenabarbeitung:standardmeldung(meldungletzter,"");enter(3).
END PROC vorbereitendernaechstenschluesselbehandlung;PROC 
pruefeplausibilitaet(INT VAR fstatus):INT VAR fmeld;LET fmeldbittefuellen=52,
fmeldnichtimbestand=55,bestandzugang="c02 zugang";fstatus:=0;standardmeldung(
pruefemeldung,"");IF NOT imschlbestand(standardmaskenfeld(fnrzugang),
bestandzugang)THEN fstatus:=fnrzugang;fmeld:=fmeldnichtimbestand;
behandledenplausifehlerFI ;jgst:=jgstaufber(standardmaskenfeld(fnrjgst));zug
:=compress(standardmaskenfeld(fnrzug));IF jgst=leerTHEN fstatus:=fnrjgst;
fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF zug=leerTHEN fstatus:=
fnrzug;fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF NOT 
imbestandschuelergruppenTHEN fstatus:=fnrjgst;fmeld:=fmeldnichtimbestand;
behandledenplausifehlerFI .imbestandschuelergruppen:TEXT VAR schuljahr:=
schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(schulhalbjahr);INT VAR 
dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert(
dateinummer+2,halbjahr);putwert(dateinummer+3,jgst);putwert(dateinummer+4,zug
);search(dateinummer,TRUE );dbstatus=0.behandledenplausifehler:
standardmeldung(fmeld,"");LEAVE pruefeplausibilitaet.END PROC 
pruefeplausibilitaet;END PACKET schuelerjgstaendern