app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen

Raw file
Back to index

PACKET einhaltungzeitwuenschepruefenDEFINES zeitwuenschepruefenausfuehren:
LET dateiname="Liste zur Einhaltung der Zeitwünsche",trenner="198",
letztestunde=66,fldlehrer=2,fldsugrup=3,fldraeume=4,fldfaecher=5,
fldkopplungen=6,fldakthalbj=7,meldungwarten=69,meldungbearbwird=352,#
meldungkeinelehrer=337,meldungkeineraeume=365,#meldungkeinefaecher=68,
meldungkeinzeitraster=336,meldungkeinezeitwuensche=389,meldungserverfehler=
376,meldungkeinstdplan=366,meldungkeinesugruppen=334,meldungzuvielesugruppen=
356,meldungkeinelv=326,meldungzuvielelv=358,meldungbasisinkon=378,
meldungstdplauswvorber=384,posanzut=1,posgewut=3,posanzvm=4,posgewvm=6,
posanznm=7,posgewnm=9,ausgfreipos=2,ausganzpos=11,ausggewpos=18,ausgnerfpos=
27,ausgabeparam="#",ausgnerf="*",minus="-",plus="+",leerzeile=" ",kennzlehrer
="P",kennzsugrup="S",kennzraeume="R",kennzfaecher="F",kennzlv="L",kennzkoppl=
"K",moeintrag="Mo  ",dieintrag="Di  ",mieintrag="Mi  ",doeintrag="Do  ",
freintrag="Fr  ",saeintrag="Sa  ",anhangl="Lehrer ",anhangs="Schülergruppen "
,anhangr="Räume ",anhangf="Fächer ",anhangk="Kopplungen ",ueberschrift=
"Liste zur Einhaltung der Zeitwünsche für ",unterstrich=
"-------------------------------------------------",leererunbestwunsch=
"         ",kennungvorm="v",kennungnachm="n",schuljahr="Schuljahr",
schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort",
anzgewichte=6,anzunterrichtstage=6,anzvormittage=6,anznachmittage=5,
anzsamstagstunden=6,anzunterrichtsstunden=12;FILE VAR datei;INT VAR hjkennneu
:=0,hjkennalt:=-1;INT VAR i,j,fstat,fall,anztage,anzvorm,anznachm;TEXT VAR 
schj,schhj,kenn,plan:="",anhang,faecherkatalog:=trenner;TEXT VAR bestwzeile,
unbestwtage,unbestwvorm,unbestwnachm,bestwurzeile:=
" _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _"+
"   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _  "+
" _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   "+
"_   _   _   _   _   _   _   _   _   _   _   _   _   _   _ ";TEXT VAR 
moobjeintrag,diobjeintrag,miobjeintrag,doobjeintrag,frobjeintrag,saobjeintrag
;BOOL VAR keinezeitwuensche:=TRUE ;ROW 4ROW anzgewichteINT VAR 
anzwuenschegesamt;ROW 4ROW anzgewichteINT VAR anznerfwuensche;PROC 
zeitwuenschepruefenausfuehren:keinezeitwuensche:=TRUE ;kenn:="";
standardmeldung(meldungwarten,"");pruefeeingangsmaske;pruefehalbjahr;
zeitwuenschevorhanden;IF halbjahrveraendertTHEN hjkennalt:=hjkennneu;
holestundenplan;erstellezeitrasterFI ;erstelleliste;IF keinezeitwuenscheTHEN 
fehlerkeinezeitwuenscheELSE zeigedatei(dateiname,"vr")FI .halbjahrveraendert:
hjkennneu<>hjkennalt.pruefeeingangsmaske:standardpruefe(5,2,6,0,"",fstat);IF 
fstat<>0THEN infeld(fstat);return(1);LEAVE zeitwuenschepruefenausfuehrenELIF 
standardmaskenfeld(fldlehrer)<>""THEN fall:=fldlehrer;anhang:=anhangl;kenn:=
kennzlehrerELIF standardmaskenfeld(fldsugrup)<>""THEN fall:=fldsugrup;anhang
:=anhangs;kenn:=kennzsugrupELIF standardmaskenfeld(fldraeume)<>""THEN fall:=
fldraeume;anhang:=anhangr;kenn:=kennzraeume;pruefefaecherELIF 
standardmaskenfeld(fldfaecher)<>""THEN fall:=fldfaecher;anhang:=anhangf;kenn
:=kennzfaecher;IF faecherkatalog=trennerTHEN holallefaecherFI ;ELIF 
standardmaskenfeld(fldkopplungen)<>""THEN fall:=fldkopplungen;anhang:=anhangk
;kenn:=kennzkopplFI .holallefaecher:inittupel(dnrfaecher);statleseschleife(
dnrfaecher,"","",fnrffach,fnrffach,PROC faecher).pruefefaecher:IF records(
dnrfaecher)=0.0THEN fehlerkeinefaecherFI .pruefehalbjahr:schj:=schulkenndatum
(schuljahr);schhj:=schulkenndatum(schulhalbjahr);IF standardmaskenfeld(
fldakthalbj)=""THEN geplanteshjundsjberechnen(schhj,schj);hjkennneu:=1ELSE 
hjkennneu:=0FI .holestundenplan:standardmeldung(meldungstdplauswvorber,"");
stundenplanhalbjahrsetzen(schhj,schj);stundenplanbasisundstundenplanholen(
fstat);IF fstat<>0CAND fstat<>8THEN meldungausgeben(fstat);return(1);LEAVE 
zeitwuenschepruefenausfuehrenFI .erstellezeitraster:plan:="";IF records(
dnrzeitraster)=0.0THEN fehlerzeitrasternichtvollstdELSE inittupel(
dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,fnrzrsj,fnrzrhj,
PROC zeitrasterdaten)FI ;IF length(plan)<letztestundeTHEN 
fehlerzeitrasternichtvollstdFI .zeitwuenschevorhanden:IF records(
dnrzeitwuensche)=0.0THEN fehlerkeinezeitwuenscheFI .
fehlerzeitrasternichtvollstd:standardmeldung(meldungkeinzeitraster,"");return
(1);LEAVE zeitwuenschepruefenausfuehren.fehlerkeinefaecher:standardmeldung(
meldungkeinefaecher,"");return(1);LEAVE zeitwuenschepruefenausfuehren.
fehlerkeinezeitwuensche:standardmeldung(meldungkeinezeitwuensche,"");return(1
);LEAVE zeitwuenschepruefenausfuehren.END PROC zeitwuenschepruefenausfuehren;
PROC erstelleliste:bereitedateiauf;initialisiererow;inittupel(dnrzeitwuensche
);putwert(fnrzwbezug,kenn);statleseschleife(dnrzeitwuensche,schj,schhj,
fnrzwsj,fnrzwhj,PROC zeitwuenschelisten);bereitestatistikauf.bereitedateiauf:
forget(dateiname,quiet);datei:=sequentialfile(output,dateiname);putline(datei
,schulkenndatum(schulname));putline(datei,text(schulkenndatum(schulort),65)+
date);putline(datei,leerzeile);putline(datei,ueberschrift+anhang+schhj+". "+
text(schj,2)+"/"+subtext(schj,3));putline(datei,unterstrich+length(anhang)*
"-");putline(datei,leerzeile).initialisiererow:FOR iFROM 1UPTO 4REP FOR j
FROM 1UPTO anzgewichteREP anzwuenschegesamt(i)(j):=0;anznerfwuensche(i)(j):=0
PER ;PER .bereitestatistikauf:putline(datei,"#page#");putline(datei,
"Endstatistik:");putline(datei,leerzeile);putline(datei,leerzeile);
gibwerteaus("  Stunden    ",1);gibwerteaus("  ganze Tage ",2);gibwerteaus(
"  Vormittage ",3);gibwerteaus("  Nachmittage",4).END PROC erstelleliste;
PROC gibwerteaus(TEXT CONST objekt,INT CONST row):putline(datei,
"Anzahl         Gewichte                            Summe ");putline(datei,
objekt+"  -3    -2    -1    +1    +2    +3          ");putline(datei,
"--------------+-----+-----+-----+-----+-----+-----+------");putline(datei,
"gesamt       "+werte(row,TRUE ));putline(datei,"erfüllt      "+erfuelltwerte
(row));putline(datei,"nicht erfüllt"+werte(row,FALSE ));putline(datei,
leerzeile);putline(datei,leerzeile).END PROC gibwerteaus;TEXT PROC werte(INT 
CONST row,BOOL CONST allewerte):TEXT VAR ausgabe:="";INT VAR summe:=0,eintrag
;IF allewerteTHEN FOR iFROM 1UPTO anzgewichteREP eintrag:=anzwuenschegesamt(
row)(i);summeINCR eintrag;ausgabeCAT text(eintrag,6)PER ELSE FOR iFROM 1UPTO 
anzgewichteREP eintrag:=anznerfwuensche(row)(i);summeINCR eintrag;ausgabeCAT 
text(eintrag,6)PER FI ;ausgabeCAT text(summe,6);ausgabeEND PROC werte;TEXT 
PROC erfuelltwerte(INT CONST row):TEXT VAR ausgabe:="";INT VAR summe:=0,
gesamt,nerf,erf;FOR iFROM 1UPTO anzgewichteREP gesamt:=anzwuenschegesamt(row)
(i);nerf:=anznerfwuensche(row)(i);erf:=gesamt-nerf;summeINCR erf;ausgabeCAT 
text(erf,6)PER ;ausgabeCAT text(summe,6);ausgabeEND PROC erfuelltwerte;PROC 
zeitwuenschelisten(BOOL VAR b):IF wert(fnrzwsj)<>schjCOR wert(fnrzwhj)<>schhj
COR wert(fnrzwbezug)<>kennCOR dbstatus<>0THEN b:=TRUE ELSE IF 
keinezeitwuenscheTHEN keinezeitwuensche:=FALSE FI ;bereiteobjektauf(wert(
fnrzwbezugsobjekt))FI END PROC zeitwuenschelisten;PROC bereiteobjektauf(TEXT 
CONST objekt):TEXT VAR bestwunsch,unbestwunsch;INT VAR suchpos:=1,freietage,
freievorm,freienachm,wnerf,wanz;TEXT VAR wunsch:="";standardmeldung(
meldungbearbwird,objekt+ausgabeparam);IF kenn=kennzfaecherTHEN IF pos(
faecherkatalog,trenner+objekt+trenner)=0THEN fehlereintragELSE listeneintrag
FI ELIF bezeichnungzulaessig(kenn,objekt)THEN listeneintragELSE fehlereintrag
FI .fehlereintrag:putline(datei,objekt+":   (ungültige Bezeichnung)");putline
(datei,leerzeile).listeneintrag:moobjeintrag:=moeintrag;diobjeintrag:=
dieintrag;miobjeintrag:=mieintrag;doobjeintrag:=doeintrag;frobjeintrag:=
freintrag;saobjeintrag:=saeintrag;uebertragwuensche;putline(datei,objekt+":")
;putline(datei,leerzeile);putline(datei,"Wünsche zu festen Zeiten:");putline(
datei,"(nicht erfüllte sind mit * markiert)");putline(datei,
"     1   2   3   4   5   6   7   8   9  10  11  12");putline(datei,
moobjeintrag+text(bestwzeile,48));putline(datei,diobjeintrag+subtext(
bestwzeile,49,96));putline(datei,miobjeintrag+subtext(bestwzeile,97,144));
putline(datei,doobjeintrag+subtext(bestwzeile,145,192));putline(datei,
frobjeintrag+subtext(bestwzeile,193,240));putline(datei,saobjeintrag+subtext(
bestwzeile,241));putline(datei,leerzeile);putline(datei,
"                im Plan  allgemeine Wünsche:");putline(datei,
"                frei     Anzahl/Gewicht  nicht erfüllt");putline(datei,
"ganze Tage      "+unbestwtage);putline(datei,"zusätzl. Vorm.  "+unbestwvorm)
;putline(datei,"zusätzl. Nachm. "+unbestwnachm);putline(datei,leerzeile);
putline(datei,leerzeile).uebertragwuensche:bestwunsch:=wert(
fnrzwbestimmtewuensche);unbestwunsch:=wert(fnrzwunbestimmtewuensche);
bestwzeile:=bestwurzeile;unbestwtage:=" _        _      _        _ ";
unbestwvorm:=" _        _      _        _ ";unbestwnachm:=
" _        _      _        _ ";tragbestwuenscheein;tragunbestwuenscheein.
tragbestwuenscheein:suchpos:=1;WHILE suchpos<>0REP suchpos:=pos(bestwunsch,
minus,suchpos);IF suchpos<>0THEN wunsch:=subtext(bestwunsch,suchpos,suchpos+1
);zaehlebestwunsch(1,wunsch,TRUE );IF unterricht(objekt,suchposDIV 2+1)THEN 
wunschCAT ausgnerf;zaehlebestwunsch(1,wunsch,FALSE )FI ;replace(bestwzeile,
suchpos*2-1,wunsch);suchposINCR 1FI ;PER ;suchpos:=1;WHILE suchpos<>0REP 
suchpos:=pos(bestwunsch,plus,suchpos);IF suchpos<>0THEN wunsch:=subtext(
bestwunsch,suchpos,suchpos+1);zaehlebestwunsch(1,wunsch,TRUE );IF NOT (
unterricht(objekt,suchposDIV 2+1))THEN wunschCAT ausgnerf;zaehlebestwunsch(1,
wunsch,FALSE )FI ;replace(bestwzeile,suchpos*2-1,wunsch);suchposINCR 1FI ;
PER .tragunbestwuenscheein:anztage:=0;anzvorm:=0;anznachm:=0;
ermittleunbestwdaten(objekt);freietage:=anzunterrichtstage-anztage;freievorm
:=anzvormittage-freietage-anzvorm;freienachm:=anznachmittage-freietage-
anznachm;replace(unbestwtage,ausgfreipos,text(freietage));replace(unbestwvorm
,ausgfreipos,text(freievorm));replace(unbestwnachm,ausgfreipos,text(
freienachm));IF unbestwunsch<>leererunbestwunschTHEN wunsch:=unbestwunschSUB 
posanzut;IF wunsch<>" "THEN replace(unbestwtage,ausganzpos,wunsch)FI ;wanz:=
int(wunsch);IF freietage<wanzTHEN wnerf:=wanz-freietage;replace(unbestwtage,
ausgnerfpos,text(wnerf))ELSE wnerf:=0FI ;wunsch:=unbestwunschSUB posgewut;IF 
wunsch<>" "THEN replace(unbestwtage,ausggewpos,wunsch)FI ;zaehleunbestwunsch(
2,wanz,wnerf,wunsch);wunsch:=unbestwunschSUB posanzvm;IF wunsch<>" "THEN 
replace(unbestwvorm,ausganzpos,wunsch)FI ;wanz:=int(wunsch);IF freievorm<wanz
THEN wnerf:=wanz-freievorm;replace(unbestwvorm,ausgnerfpos,text(wnerf))ELSE 
wnerf:=0FI ;wunsch:=unbestwunschSUB posgewvm;IF wunsch<>" "THEN replace(
unbestwvorm,ausggewpos,wunsch)FI ;zaehleunbestwunsch(3,wanz,wnerf,wunsch);
wunsch:=unbestwunschSUB posanznm;IF wunsch<>" "THEN replace(unbestwnachm,
ausganzpos,wunsch)FI ;wanz:=int(wunsch);IF freienachm<wanzTHEN wnerf:=wanz-
freienachm;replace(unbestwnachm,ausgnerfpos,text(wnerf))ELSE wnerf:=0FI ;
wunsch:=unbestwunschSUB posgewnm;IF wunsch<>" "THEN replace(unbestwnachm,
ausggewpos,wunsch)FI ;zaehleunbestwunsch(4,wanz,wnerf,wunsch);FI .END PROC 
bereiteobjektauf;PROC ermittleunbestwdaten(TEXT CONST objekt):BOOL VAR 
tagnichtgezaehlt:=TRUE ;INT VAR incr:=0,anz,zeitstd;anz:=
anzunterrichtsstunden;FOR iFROM 1UPTO anzunterrichtstage-1REP 
tagnichtgezaehlt:=TRUE ;suchevormunterricht;suchenachmunterricht;incrINCR 
anzunterrichtsstundenPER ;anz:=anzsamstagstunden;tagnichtgezaehlt:=TRUE ;
suchevormunterricht;suchenachmunterricht.suchevormunterricht:FOR jFROM 1UPTO 
anzREP zeitstd:=incr+j;IF (planSUB zeitstd)=kennungvormTHEN IF unterricht(
objekt,incr+j)THEN anzvormINCR 1;anztageINCR 1;tagnichtgezaehlt:=FALSE ;
LEAVE suchevormunterrichtFI ;ELIF (planSUB zeitstd)=kennungnachmTHEN LEAVE 
suchevormunterrichtFI ;PER .suchenachmunterricht:FOR jFROM anzDOWNTO 1REP 
zeitstd:=incr+j;IF (planSUB zeitstd)=kennungnachmTHEN IF unterricht(objekt,
incr+j)THEN anznachmINCR 1;IF tagnichtgezaehltTHEN anztageINCR 1;LEAVE 
suchenachmunterrichtFI ;FI ;ELIF (planSUB zeitstd)=kennungvormTHEN LEAVE 
suchenachmunterrichtFI ;PER .END PROC ermittleunbestwdaten;PROC 
zaehlebestwunsch(INT CONST rowindex,TEXT CONST wunsch,BOOL CONST erfuellt):
INT VAR gew;IF wunsch="-3"THEN gew:=1ELIF wunsch="-2"THEN gew:=2ELIF wunsch=
"-1"THEN gew:=3ELIF wunsch="+1"THEN gew:=4ELIF wunsch="+2"THEN gew:=5ELIF 
wunsch="+3"THEN gew:=6FI ;IF erfuelltTHEN anzwuenschegesamt(rowindex)(gew)
INCR 1ELSE anznerfwuensche(rowindex)(gew)INCR 1FI END PROC zaehlebestwunsch;
PROC zaehleunbestwunsch(INT CONST rowindex,wanz,wnerf,TEXT CONST wunsch):INT 
VAR gewicht;SELECT int(wunsch)OF CASE 3:gewicht:=1CASE 2:gewicht:=2OTHERWISE 
gewicht:=3END SELECT ;anzwuenschegesamt(rowindex)(gewicht)INCR wanz;IF wnerf
<>0THEN anznerfwuensche(rowindex)(gewicht)INCR wnerfFI END PROC 
zaehleunbestwunsch;BOOL PROC unterricht(TEXT CONST objekt,INT CONST zeit):
TEXT VAR lv,ra,par,daten;INT VAR spos,findpos;IF fall=fldsugrupCOR fall=
fldlehrerCOR fall=fldraeumeTHEN objektunterrichtELSE objektindatenderzeitFI .
objektunterricht:planeintraglesen(zeit,kenn,objekt,lv,ra,par);lv<>"".
objektindatenderzeit:IF fall=fldfaecherTHEN daten:=datenderzeit(zeit,kennzlv)
;findpos:=3ELSE daten:=datenderzeit(zeit,kenn);findpos:=1FI ;IF daten=""THEN 
FALSE ELSE suchindatenFI .suchindaten:spos:=1;WHILE spos<>0REP spos:=pos(
daten,objekt,spos);IF spos<>0THEN IF (sposMOD 8)=findposTHEN LEAVE unterricht
WITH TRUE FI ;sposINCR 1FI ;PER ;FALSE .END PROC unterricht;PROC 
zeitrasterdaten(BOOL VAR b):IF wert(fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhj
COR dbstatus<>0THEN b:=TRUE ELSE planCAT wert(fnrzrkennungteil);FI END PROC 
zeitrasterdaten;PROC faecher(BOOL VAR b):faecherkatalogCAT wert(fnrffach)+
trennerEND PROC faecher;PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN 
standardmeldung(meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(
meldungkeinstdplan,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen
,"");ELIF fstat=5THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6
THEN standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
FI END PROC meldungausgeben;END PACKET einhaltungzeitwuenschepruefen