app/schulis/2.2.1/src/4.vertretungen organisieren

Raw file
Back to index

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