summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/4.vertretungen organisieren
blob: e0cd6ba29952b5514bbc7ec18451b72df93fc483 (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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
PACKET vertretungenorganisierenDEFINES vertretungenorgbearbeiten,
vertretungenorgvertretungsdatenlisten,vertretungenorginlisteblaettern,
vertretungenorgspeichern,vertretungenorglvauflisten,
vertretungenorglvauflisteneinlesen,vertretungenorginlvlisteblaettern,
vertretungenorgangekreuztebearbeiten:LET maskebearb=
"ms vertretungen organisieren",maskeliste="mu objektliste";LET fnrsuchparaphe
=2,fnrstartdatum=3,fnrstartstunde=4,fnrendedatum=5,fnrendestunde=6,fnrparaphe
=2,fnranrechnungart=3,fnrvertretdatum=4,fnrvertrettag=5,fnrvertretstd=6,
fnrvertretlv=7,fnrvertretparaphe=8,fnrtabellenanfang=9;LET 
meldnrlistewirdaufbereitet=7,meldnrbittefuellen=52,
meldnrungueltigerschluessel=55,meldnrletzterbehandelt=67,meldnrbittewarten=69
,meldnrblaetternnichtmoeglich=72,meldnrspeicherungunmoeglich=73,
meldnrzulangevertretungsdauer=157,meldnrdatenwerdengespeichert=301,
meldnrdatenwerdennichtgespeichert=303,meldnrungueltigeparaphe=344,
meldnrstundenplanfehlt=366,meldnrparapheschonzugeteilt=361,
meldnrzweitesdatumkleiner=386,meldnrkeinunterrichtzurzeit=395;LET schuljahr=
"Schuljahr",schulhalbjahr="Schulhalbjahr";LET sachgebietanrechnungskennz=
"c02 anrechnung vertret";LET kennzhell="#";LET kennzfreistunde="f",ankreuzung
="x",fehlanzeige="-",lehrerbelegt="1",trenner="�";LET erstestunde=1,
letztestunde=66,samstagstd=6,stundenprotag=12;LET kennungparaphe="P",
kennunglv="L";LET laengesugruppe=6,laengeparaphe=4,laengelv=8;LET 
logbucheintrag="Anw. 4.6.1 Vertretungen eingegeben oder geändert";INT VAR 
pruefstatus:=0;INT VAR ifnr;TEXT VAR gueltigeanrechnungskennz:="",
gueltigeparaphen:="";TEXT VAR paraphe,gespeicherteparaphe,startdatum,
startstunde,endedatum,endestunde,aktschuljahr:="",akthalbjahr:="";TEXT VAR 
auszeile;TEXT VAR liste:="";TEXT VAR lv,letztebehandeltelv:="",
vertretungsdatum,hinweisfreistunde,hinweisvorherfrei,hinweisnachherfrei,
hinweislehrerinsugruppe,hinweislehrbefaehigung,hinweislehrbefart;INT VAR std,
dauer,erstevertretstd,letztevertretstd,idatum;INT VAR ivertret,maxvertret,
erstevertretaufbildschirm;LET maxvertretaufbildschirm=14;FILE VAR fvertret;
LET namevertretdatei="Liste der Vertretungsmöglichkeiten";INT VAR ilv,maxlv;
ROW letztestundeSTRUCT (INT datum,INT std,TEXT lv)VAR vertret;ROW 
letztestundeBOOL VAR listenankreuzung;INT VAR erstelvinliste;INT VAR izeile;
LET maxlistenzeile=18,erstesfeldinliste=2,felderprozeileinliste=2;TEXT VAR 
zeitendeslehrers,paraphenzursugruppe,allelvdersugruppe,lehrerderzeitvorher,
lehrerderzeit,lehrerderzeitnachher,freielehrerderzeit,lehrerdesfachs,
lehrbefartdesfachs,sugruppe,sugruppen,zuletztbehandeltesugruppen:="";TEXT 
VAR fundlv,fundraum,fundparaphe,suchfach,zuletztbehandeltesfach:="";INT VAR 
poslv,posparaphe,posfachlehrer,possugruppe;BOOL VAR vertretungliegtvor,
bearbeitungueberobjektliste;INT VAR fstatusstuplan;PROC 
vertretungenorgbearbeiten:eingangspruefung;IF pruefstatus<>0THEN infeld(
pruefstatus);return(1)ELSE standardmeldung(meldnrbittewarten,"");
vertretungsorganisationvorbereiten;IF zuvertretendelvvorhandenTHEN 
standardstartproc(maskebearb);bearbeitungueberobjektliste:=FALSE ;
zeigebsmitvertretungsmoeglichkeiten;standardnprocELSE standardmeldung(
meldnrkeinunterrichtzurzeit,"");infeld(fnrstartdatum);return(1)FI FI .
zuvertretendelvvorhanden:ilv<=maxlv.END PROC vertretungenorgbearbeiten;PROC 
vertretungsorganisationvorbereiten:zeitendeslehrers:=allezeitenvon(
kennungparaphe,paraphe);idatum:=datum(startdatum);erstevertretstd:=stundezu(
startdatum,startstunde);letztevertretstd:=stundezu(endedatum,endestunde);ilv
:=0;IF erstevertretstd>letztevertretstdTHEN FOR stdFROM erstevertretstdUPTO 
letztestundeREP IF (zeitendeslehrersSUB std)=lehrerbelegtTHEN 
planeintraglesen(std,kennungparaphe,paraphe,fundlv,fundraum,fundparaphe);ilv
INCR 1;vertret(ilv).datum:=idatum;vertret(ilv).std:=std;vertret(ilv).lv:=
fundlv;FI ;IF (stdMOD stundenprotag)=0THEN idatumINCR 1FI PER ;idatumINCR 2;
erstevertretstd:=erstestunde;FI ;std:=erstevertretstd;WHILE std<=
letztevertretstdREP IF (zeitendeslehrersSUB std)=lehrerbelegtTHEN 
planeintraglesen(std,kennungparaphe,paraphe,fundlv,fundraum,fundparaphe);ilv
INCR 1;vertret(ilv).datum:=idatum;vertret(ilv).std:=std;vertret(ilv).lv:=
fundlv;FI ;IF (stdMOD stundenprotag)=0THEN idatumINCR 1FI ;stdINCR 1PER ;
maxlv:=ilv;ilv:=1END PROC vertretungsorganisationvorbereiten;PROC 
zeigebsmitvertretungsmoeglichkeiten:lv:=vertret(ilv).lv;std:=vertret(ilv).std
;idatum:=vertret(ilv).datum;vertretungsdatum:=datum(idatum);
standardmaskenfeld(vertretungsdatum,fnrvertretdatum);standardmaskenfeld(
namedestags(tagnummer(vertretungsdatum)),fnrvertrettag);standardmaskenfeld(
stundennummer(std),fnrvertretstd);standardmaskenfeld(lv,fnrvertretlv);
standardmaskenfeld(text(paraphe,laengeparaphe),fnrvertretparaphe);
holemoeglichevertretungenzulv;vertretungliegtvor:=FALSE ;inittupel(
dnrvertretungen);putwert(fnrvdatum,vertretungsdatum);putintwert(fnrvtagstd,
std);search(dnrvertretungen,FALSE );WHILE dbstatus=0AND wert(fnrvdatum)=
vertretungsdatumAND intwert(fnrvtagstd)=stdREP IF compress(wert(
fnrvveranstaltung))=compress(lv)THEN vertretungliegtvor:=TRUE ;
standardmaskenfeld(wert(fnrvparaphe),fnrparaphe);standardmaskenfeld(wert(
fnrvanrechnung),fnranrechnungart);FI ;succ(dnrvertretungen);UNTIL 
vertretungliegtvorPER ;IF NOT vertretungliegtvorTHEN standardmaskenfeld("",
fnrparaphe);standardmaskenfeld("",fnranrechnungart);FI ;gespeicherteparaphe:=
standardmaskenfeld(fnrparaphe);infeld(1);standardfelderausgeben;infeld(
fnrparaphe).END PROC zeigebsmitvertretungsmoeglichkeiten;PROC 
holemoeglichevertretungenzulv:moeglichevertretungsdatenzusammenstellen;
vertretungsdatenzeigen(1).moeglichevertretungsdatenzusammenstellen:ivertret:=
0;forget(namevertretdatei,quiet);fvertret:=sequentialfile(output,
namevertretdatei);IF (stdMOD stundenprotag)=0THEN lehrerderzeitnachher:="";
lehrerderzeitvorher:=datenderzeit(std-1,kennungparaphe)ELIF (stdMOD 
stundenprotag)=1THEN lehrerderzeitvorher:="";lehrerderzeitnachher:=
datenderzeit(std+1,kennungparaphe)ELSE lehrerderzeitvorher:=datenderzeit(std-
1,kennungparaphe);lehrerderzeitnachher:=datenderzeit(std+1,kennungparaphe)FI 
;IF lv<>letztebehandeltelvTHEN letztebehandeltelv:=lv;sugruppen:=
beteiligteschuelergruppen(kennunglv,lv);IF sugruppen<>
zuletztbehandeltesugruppenTHEN zuletztbehandeltesugruppen:=sugruppen;
bestimmedieparaphenzursugruppeFI FI ;freielehrerderzeit:="";
holeallelehrerdesfachs;inittupel(dnrvertretungen);putwert(fnrvdatum,
vertretungsdatum);putintwert(fnrvtagstd,std);search(dnrvertretungen,FALSE );
WHILE dbstatus=0AND wert(fnrvdatum)=vertretungsdatumAND intwert(fnrvtagstd)=
stdREP IF wert(fnrvanrechnung)=kennzfreistundeTHEN fundparaphe:=wert(
fnrvparaphe);hinweisfreistunde:=ankreuzung;
weiterehinweisezugefundenerparaphesetzen;
ausgabezeilezugefundenerparapheindateischreibenFI ;succ(dnrvertretungen);PER 
;lehrerderzeit:=datenderzeit(std,kennungparaphe);posparaphe:=1;WHILE 
posparaphe<length(gueltigeparaphen)REP fundparaphe:=subtext(gueltigeparaphen,
posparaphe,posparaphe+laengeparaphe-1);IF suchpos(lehrerderzeit,fundparaphe,
laengeparaphe)=0THEN hinweisfreistunde:=fehlanzeige;
weiterehinweisezugefundenerparaphesetzen;
ausgabezeilezugefundenerparapheindateischreibenFI ;posparapheINCR 
laengeparaphePER ;maxvertret:=ivertret.bestimmedieparaphenzursugruppe:
allelvdersugruppe:="";possugruppe:=1;WHILE possugruppe<length(sugruppen)REP 
sugruppe:=subtext(sugruppen,possugruppe,possugruppe+laengesugruppe-1);
allelvdersugruppeCAT lvderschuelergruppe(sugruppe);possugruppeINCR 
laengesugruppePER ;paraphenzursugruppe:="";poslv:=1;WHILE poslv<length(
allelvdersugruppe)REP fundlv:=subtext(allelvdersugruppe,poslv,poslv+laengelv-
1);paraphenzursugruppeCAT datenzurlv(kennungparaphe,fundlv);poslvINCR 
laengelvPER END PROC holemoeglichevertretungenzulv;PROC 
holeallelehrerdesfachs:suchfach:=compress(subtext(lv,3,4));IF suchfach<>
zuletztbehandeltesfachTHEN zuletztbehandeltesfach:=suchfach;
holeallelehrerdesfachsganzneuFI .holeallelehrerdesfachsganzneu:lehrerdesfachs
:="";lehrbefartdesfachs:="";dbstatus(0);inittupel(dnrlehrbefaehigungen);
statleseschleife(dnrlehrbefaehigungen,suchfach,suchfach,fnrlbfach,fnrlbfach,
PROC lehrbefaehigunglesen);inittupel(dnrfaecher);putwert(fnrffach,suchfach);
search(dnrfaecher,TRUE );IF dbstatus=0AND wert(fnrffachgrp)<>""THEN suchfach
:=wert(fnrffachgrp);inittupel(dnrlehrbefaehigungen);statleseschleife(
dnrlehrbefaehigungen,suchfach,suchfach,fnrlbfach,fnrlbfach,PROC 
lehrbefaehigunglesen);FI ;END PROC holeallelehrerdesfachs;PROC 
lehrbefaehigunglesen(BOOL VAR b):IF dbstatus<>0OR suchfach<>wert(fnrlbfach)
THEN b:=TRUE ELSE lehrerdesfachsCAT text(wert(fnrlbparaphe),laengeparaphe);
lehrbefartdesfachsCAT text(wert(fnrlbart),1)FI END PROC lehrbefaehigunglesen;
PROC weiterehinweisezugefundenerparaphesetzen:IF suchpos(lehrerderzeitvorher,
fundparaphe,laengeparaphe)>0THEN hinweisvorherfrei:=ankreuzungELSE 
hinweisvorherfrei:=fehlanzeigeFI ;IF suchpos(lehrerderzeitnachher,fundparaphe
,laengeparaphe)>0THEN hinweisnachherfrei:=ankreuzungELSE hinweisnachherfrei:=
fehlanzeigeFI ;IF suchpos(paraphenzursugruppe,fundparaphe,laengeparaphe)>0
THEN hinweislehrerinsugruppe:=ankreuzungELSE hinweislehrerinsugruppe:=
fehlanzeigeFI ;posfachlehrer:=suchpos(lehrerdesfachs,fundparaphe,
laengeparaphe);IF posfachlehrer>0THEN hinweislehrbefaehigung:=ankreuzung;
hinweislehrbefart:=lehrbefartdeslehrersELSE hinweislehrbefaehigung:=
fehlanzeige;hinweislehrbefart:=" "FI .lehrbefartdeslehrers:lehrbefartdesfachs
SUB ((posfachlehrerDIV laengeparaphe)+1).END PROC 
weiterehinweisezugefundenerparaphesetzen;PROC 
ausgabezeilezugefundenerparapheindateischreiben:auszeile:=text(fundparaphe,
laengeparaphe);freielehrerderzeitCAT auszeile;auszeileCAT hinweisfreistunde;
auszeileCAT hinweisvorherfrei;auszeileCAT hinweisnachherfrei;auszeileCAT 
hinweislehrerinsugruppe;auszeileCAT hinweislehrbefaehigung;auszeileCAT 
hinweislehrbefart;putline(fvertret,auszeile);ivertretINCR 1END PROC 
ausgabezeilezugefundenerparapheindateischreiben;PROC vertretungsdatenzeigen(
INT CONST abzeile):fvertret:=sequentialfile(modify,namevertretdatei);
erstevertretaufbildschirm:=abzeile;toline(fvertret,abzeile);col(fvertret,1);
ivertret:=1;ifnr:=fnrtabellenanfang;WHILE ivertret<=maxvertretaufbildschirm
REP IF NOT eof(fvertret)THEN readrecord(fvertret,auszeile);standardmaskenfeld
(auszeile,ifnr);down(fvertret)ELSE standardmaskenfeld("          ",ifnr)FI ;
ifnrINCR 1;ivertretINCR 1PER ;END PROC vertretungsdatenzeigen;PROC 
vertretungenorgvertretungsdatenlisten:WINDOW VAR w:=startwindow(37,24,77,7);
fundparaphe:=standardmaskenfeld(fnrparaphe);IF parapheungueltigTHEN 
standardmeldung(meldnrungueltigeparaphe,"");return(1)ELSE standardmeldung(
meldnrlistewirdaufbereitet,"");bereitelistenausgabeauf;IF menuedraussenTHEN 
reorganizescreenFI ;open(w);auskunfterteilung(liste,w,FALSE );
reorganizescreen;setlasteditvalues;infeld(1);standardfelderausgeben;infeld(
fnrparaphe);return(1)FI .bereitelistenausgabeauf:liste:=
"Vertretungsdaten zu Paraphe ";listeCAT fundparaphe;listeCAT 
auskunftstextende;listeCAT "Datum     Zeit    Art Lehrveranst.";listeCAT 
auskunftstextende;inittupel(dnrvertretungen);dbstatus(0);statleseschleife(
ixvpar,fundparaphe,fundparaphe,fnrvparaphe,fnrvparaphe,PROC 
vertretdatenzuparapheaufbereiten);listeCAT "*";listeCAT auskunftstextende.
END PROC vertretungenorgvertretungsdatenlisten;PROC 
vertretdatenzuparapheaufbereiten(BOOL VAR b):IF dbstatus=0AND wert(
fnrvparaphe)=fundparapheTHEN listeCAT wert(fnrvdatum);listeCAT "  ";listeCAT 
namedestags(tagnummer(wert(fnrvdatum)));listeCAT " ";listeCAT stundennummer(
intwert(fnrvtagstd));listeCAT ".  ";listeCAT text(wert(fnrvanrechnung),2);
listeCAT "  ";listeCAT lvaufbereitet;listeCAT auskunftstextendeELSE b:=TRUE 
FI .lvaufbereitet:fundlv:=wert(fnrvveranstaltung);subtext(fundlv,1,2)+" "+
subtext(fundlv,3,4)+" "+subtext(fundlv,5,8).END PROC 
vertretdatenzuparapheaufbereiten;PROC vertretungenorginlisteblaettern(BOOL 
CONST vor):IF vorTHEN IF erstevertretaufbildschirm+maxvertretaufbildschirm>
maxvertretTHEN standardmeldung(meldnrblaetternnichtmoeglich,"")ELSE 
vertretungsdatenzeigen(erstevertretaufbildschirm+maxvertretaufbildschirm)FI 
ELSE IF erstevertretaufbildschirm=1THEN standardmeldung(
meldnrblaetternnichtmoeglich,"")ELSE vertretungsdatenzeigen(
erstevertretaufbildschirm-maxvertretaufbildschirm)FI FI ;return(1)END PROC 
vertretungenorginlisteblaettern;PROC vertretungenorgspeichern(BOOL CONST 
speichern):IF speichernTHEN fundparaphe:=standardmaskenfeld(fnrparaphe);IF 
plausifehlerTHEN return(1)ELSE vertretungwieangegebenspeichern;logeintrag(
logbucheintrag);IF dbstatus<>0THEN standardmeldung(
meldnrspeicherungunmoeglich,"");return(1)ELSE naechstelvzeigenoderzurueckFI 
FI ELSE standardmeldung(meldnrdatenwerdennichtgespeichert,"");
naechstelvzeigenoderzurueckFI .plausifehler:IF fundparaphe=""THEN 
standardmeldung(meldnrbittefuellen,"");infeld(fnrparaphe);TRUE ELIF 
parapheungueltigTHEN standardmeldung(meldnrungueltigeparaphe,"");infeld(
fnrparaphe);TRUE ELIF suchpos(freielehrerderzeit,fundparaphe,laengeparaphe)=0
THEN standardmeldung(meldnrparapheschonzugeteilt,fundparaphe+kennzhell);
infeld(fnrparaphe);TRUE ELIF standardmaskenfeld(fnranrechnungart)=
kennzfreistundeTHEN standardmeldung(meldnrungueltigerschluessel,"");infeld(
fnranrechnungart);TRUE ELIF ungueltigesanrechnungskennz(standardmaskenfeld(
fnranrechnungart))THEN standardmeldung(meldnrungueltigerschluessel,"");infeld
(fnranrechnungart);TRUE ELIF vertretungkannsonichtgespeichertwerdenTHEN 
standardmeldung(meldnrparapheschonzugeteilt,fundparaphe+kennzhell);infeld(
fnrparaphe);TRUE ELSE FALSE FI .vertretungkannsonichtgespeichertwerden:
inittupel(dnrvertretungen);putwert(fnrvdatum,vertretungsdatum);putintwert(
fnrvtagstd,std);putwert(fnrvparaphe,fundparaphe);search(dnrvertretungen,TRUE 
);IF dbstatus<>0THEN FALSE ELIF wert(fnrvanrechnung)=kennzfreistundeTHEN 
delete(dnrvertretungen);FALSE ELIF wert(fnrvveranstaltung)=compress(lv)THEN 
FALSE ELSE TRUE FI .vertretungwieangegebenspeichern:standardmeldung(
meldnrdatenwerdengespeichert,"");putwert(fnrvdatum,vertretungsdatum);
putintwert(fnrvtagstd,std);IF gespeicherteparaphe=""THEN putwert(fnrvparaphe,
fundparaphe);putwert(fnrvanrechnung,standardmaskenfeld(fnranrechnungart));
putwert(fnrvveranstaltung,compress(lv));insert(dnrvertretungen)ELSE putwert(
fnrvparaphe,gespeicherteparaphe);search(dnrvertretungen,TRUE );IF dbstatus=0
THEN putwert(fnrvparaphe,fundparaphe);putwert(fnrvanrechnung,
standardmaskenfeld(fnranrechnungart));putwert(fnrvveranstaltung,compress(lv))
;update(dnrvertretungen)FI FI .naechstelvzeigenoderzurueck:IF 
bearbeitungueberobjektlisteTHEN naechsteangekreuztelvsetzenELSE ilvINCR 1FI ;
IF ilv>maxlvTHEN standardmeldung(meldnrletzterbehandelt,"");IF 
bearbeitungueberobjektlisteTHEN enter(3)ELSE enter(2)FI ELSE 
zeigebsmitvertretungsmoeglichkeiten;return(1)FI .naechsteangekreuztelvsetzen:
ilvINCR 1;WHILE NOT listenankreuzung(ilv)REP ilvINCR 1UNTIL ilv>maxlvPER .
END PROC vertretungenorgspeichern;PROC vertretungenorglvauflisten:
eingangspruefung;IF pruefstatus<>0THEN infeld(pruefstatus);return(1)ELSE 
vertretungsorganisationvorbereiten;IF zuvertretendelvvorhandenTHEN 
bearbeitungueberobjektliste:=TRUE ;standardstartproc(maskeliste);
standardmeldung(meldnrbittewarten,"");initlistenankreuzung;erstelvinliste:=1;
zeigelvinliste;vertretungenorglvauflisteneinlesenELSE standardmeldung(
meldnrkeinunterrichtzurzeit,"");infeld(fnrstartdatum);return(1)FI FI .
zuvertretendelvvorhanden:ilv<=maxlv.initlistenankreuzung:FOR ilvFROM 1UPTO 
letztestundeREP listenankreuzung(ilv):=FALSE PER .END PROC 
vertretungenorglvauflisten;PROC zeigelvinliste:ifnr:=erstesfeldinliste;ilv:=
erstelvinliste;FOR izeileFROM 1UPTO maxlistenzeileREP IF ilv>maxlvTHEN 
zeigeleerzeileELSE zeigelvzeile;ilvINCR 1FI ;ifnrINCR felderprozeileinliste
PER ;infeld(1);standardfelderausgeben;infeld(erstesfeldinliste);.
zeigeleerzeile:feldschutz(ifnr);standardmaskenfeld("",ifnr);
standardmaskenfeld(" ",ifnr+1).zeigelvzeile:feldfrei(ifnr);IF 
listenankreuzung(ilv)THEN standardmaskenfeld(ankreuzung,ifnr)ELSE 
standardmaskenfeld("",ifnr)FI ;auszeilezusammenbauen;standardmaskenfeld(
auszeile,ifnr+1).auszeilezusammenbauen:auszeile:=datum(vertret(ilv).datum);
auszeileCAT "  ";auszeileCAT namedestags(tagnummer(datum(vertret(ilv).datum))
);auszeileCAT " ";auszeileCAT stundennummer(vertret(ilv).std);auszeileCAT 
".  ";auszeileCAT "  ";auszeileCAT lvaufbereitet.lvaufbereitet:fundlv:=
vertret(ilv).lv;subtext(fundlv,1,2)+" "+subtext(fundlv,3,4)+" "+subtext(
fundlv,5,8).END PROC zeigelvinliste;PROC vertretungenorglvauflisteneinlesen:
infeld(erstesfeldinliste);standardnproc;ilv:=erstelvinliste;ifnr:=
erstesfeldinliste;FOR izeileFROM 1UPTO maxlistenzeileREP IF ilv<=maxlvTHEN 
IF standardmaskenfeld(ifnr)<>""THEN listenankreuzung(ilv):=TRUE ELSE 
listenankreuzung(ilv):=FALSE FI ;ilvINCR 1FI ;ifnrINCR felderprozeileinliste
PER END PROC vertretungenorglvauflisteneinlesen;PROC 
vertretungenorginlvlisteblaettern(BOOL CONST vor):IF vorTHEN IF 
erstelvinliste+maxlistenzeile>maxlvTHEN standardmeldung(
meldnrblaetternnichtmoeglich,"")ELSE erstelvinlisteINCR maxlistenzeile;
zeigelvinlisteFI ;return(1)ELSE IF erstelvinliste=1THEN standardmeldung(
meldnrblaetternnichtmoeglich,"")ELSE erstelvinlisteDECR maxlistenzeile;
zeigelvinlisteFI ;return(1)FI END PROC vertretungenorginlvlisteblaettern;
PROC vertretungenorgangekreuztebearbeiten:ilv:=1;WHILE NOT listenankreuzung(
ilv)REP ilvINCR 1UNTIL ilv>maxlvPER ;IF ilv>maxlvTHEN standardmeldung(
meldnrletzterbehandelt,"");enter(2)ELSE standardstartproc(maskebearb);
zeigebsmitvertretungsmoeglichkeiten;standardnprocFI END PROC 
vertretungenorgangekreuztebearbeiten;PROC eingangspruefung:IF aktschuljahr=""
THEN aktschuljahr:=schulkenndatum(schuljahr);akthalbjahr:=schulkenndatum(
schulhalbjahr)FI ;stundenplanhalbjahrsetzen(akthalbjahr,aktschuljahr);
stundenplanbasisundstundenplanholen(fstatusstuplan);IF fstatusstuplan<>0AND 
fstatusstuplan<>8THEN standardmeldung(meldnrstundenplanfehlt,"");pruefstatus
:=fnrsuchparaphe;LEAVE eingangspruefungFI ;standardpruefe(1,fnrsuchparaphe,0,
0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefungELSE 
fundparaphe:=standardmaskenfeld(fnrsuchparaphe);IF gueltigeparaphen=""THEN 
holegueltigeparaphenFI ;IF parapheungueltigTHEN standardmeldung(
meldnrungueltigeparaphe,"");pruefstatus:=fnrsuchparaphe;LEAVE 
eingangspruefungELSE paraphe:=fundparapheFI ;standardpruefe(6,fnrstartdatum,0
,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefungELSE 
startdatum:=standardmaskenfeld(fnrstartdatum)FI ;INT VAR ug,og,wochentagnr;
standardpruefe(2,fnrstartstunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN 
LEAVE eingangspruefungELSE wochentagnr:=tagnummer(startdatum);IF wochentagnr=
6THEN og:=samstagstdELSE og:=stundenprotagFI ;ug:=erstestunde;standardpruefe(
3,fnrstartstunde,ug,og,"",pruefstatus);IF pruefstatus<>0THEN LEAVE 
eingangspruefungELSE startstunde:=standardmaskenfeld(fnrstartstunde)FI FI ;
endedatum:=standardmaskenfeld(fnrendedatum);endestunde:=standardmaskenfeld(
fnrendestunde);IF endedatum=""THEN endedatum:=startdatum;IF endestunde=""
THEN endestunde:=startstunde;LEAVE eingangspruefungELSE standardpruefe(2,
fnrendestunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE 
eingangspruefungELIF wochentagnr=6THEN og:=samstagstdELSE og:=stundenprotag
FI ;ug:=int(startstunde);standardpruefe(3,fnrendestunde,ug,og,"",pruefstatus)
;IF pruefstatus<>0THEN LEAVE eingangspruefungFI FI ;ELSE standardpruefe(6,
fnrendedatum,0,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefung
FI ;standardpruefe(2,fnrendestunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN 
LEAVE eingangspruefungELSE wochentagnr:=tagnummer(endedatum);IF wochentagnr=6
THEN og:=samstagstdELSE og:=stundenprotagFI ;ug:=erstestunde;standardpruefe(3
,fnrendestunde,ug,og,"",pruefstatus);IF pruefstatus<>0THEN LEAVE 
eingangspruefungFI ;FI ;dauer:=datum(endedatum)-datum(startdatum);pruefstatus
:=fnrendedatum;IF dauer<0THEN standardmeldung(meldnrzweitesdatumkleiner,"");
LEAVE eingangspruefungELIF dauer=0THEN IF int(endestunde)<int(startstunde)
THEN standardmeldung(meldnrzweitesdatumkleiner,"");LEAVE eingangspruefungFI 
ELIF dauer>7THEN standardmeldung(meldnrzulangevertretungsdauer,"");LEAVE 
eingangspruefungELIF dauer>6THEN IF int(endestunde)>=int(startstunde)THEN 
standardmeldung(meldnrzulangevertretungsdauer,"");LEAVE eingangspruefungFI 
FI ;pruefstatus:=0;FI ;FI ;END PROC eingangspruefung;BOOL PROC 
parapheungueltig:suchpos(gueltigeparaphen,fundparaphe,laengeparaphe)=0END 
PROC parapheungueltig;PROC holegueltigeparaphen:gueltigeparaphen:="";
inittupel(dnrlehrer);statleseschleife(dnrlehrer,"","",fnrlparaphe,fnrlparaphe
,PROC paraphelesen)END PROC holegueltigeparaphen;PROC paraphelesen(BOOL VAR b
):IF dbstatus<>0THEN b:=TRUE ELSE gueltigeparaphenCAT text(wert(fnrlparaphe),
laengeparaphe)FI END PROC paraphelesen;BOOL PROC ungueltigesanrechnungskennz(
TEXT CONST kennz):IF gueltigeanrechnungskennz=""THEN 
holegueltigeanrechnungskennzFI ;pos(gueltigeanrechnungskennz,trenner+kennz+
trenner)=0END PROC ungueltigesanrechnungskennz;PROC 
holegueltigeanrechnungskennz:gueltigeanrechnungskennz:=trenner;inittupel(
dnrschluessel);statleseschleife(dnrschluessel,sachgebietanrechnungskennz,"",
fnrschlsachgebiet,fnrschlschluessel,PROC anrechnungskennzlesen)END PROC 
holegueltigeanrechnungskennz;PROC anrechnungskennzlesen(BOOL VAR b):IF 
dbstatus<>0COR wert(fnrschlsachgebiet)<>sachgebietanrechnungskennzTHEN b:=
TRUE ELSE gueltigeanrechnungskennzCAT wert(fnrschlschluessel);
gueltigeanrechnungskennzCAT trennerFI END PROC anrechnungskennzlesen;INT 
PROC suchpos(TEXT CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:=
pos(quelle,suchtext);WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE 
suchposWITH findposELSE findpos:=pos(quelle,suchtext,findpos+1);FI PER ;
findposEND PROC suchpos;TEXT PROC jgstzweistellig(INT CONST intjgst):IF 
intjgst=0THEN "00"ELIF intjgst>4AND intjgst<10THEN "0"+text(intjgst)ELSE text
(intjgst)FI END PROC jgstzweistellig;INT PROC tagnummer(TEXT CONST 
datumsangabe):(datum(datumsangabe)+5)MOD 7END PROC tagnummer;TEXT PROC 
namedestags(INT CONST tagesnummer):SELECT tagesnummerOF CASE 0:"So"CASE 1:
"Mo"CASE 2:"Di"CASE 3:"Mi"CASE 4:"Do"CASE 5:"Fr"CASE 6:"Sa"OTHERWISE ""END 
SELECT .END PROC namedestags;TEXT PROC stundennummer(INT CONST istd):IF (istd
MOD stundenprotag)=0THEN text(stundenprotag)ELSE text(istdMOD stundenprotag,2
)FI END PROC stundennummer;INT PROC stundezu(TEXT CONST angtag,angstd):(
tagnummer(angtag)-1)*stundenprotag+int(angstd)END PROC stundezu;END PACKET 
vertretungenorganisieren