summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen
blob: 6e953d38d41e24fcde6527edb8c9d29cfc70c8ad (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
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