summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/4.einzelstdpl.sek2
blob: 17bc9bd8cafe15a952b55b9e7315b9cf7f2d5d58 (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
PACKET einzelstdplsek2DEFINES einzelstdplsek2eingang,einzelstdplsek2starten,
einzelstdplsek2sonderwerte,einzelstdplsek2multistop,
einzelstdplsek2druckdateibauen:LET swrufname=511,swfamname=512,swgebdat=513,
swschuljahr=514,swhalbjahr=515,swtutorkurs=516,swtagesstunde=520,swmozeile1=
521,swsazeile1=526,swlv=540,swlehrername=541,maske=
"ms einzelstdpl sek2 eingang",fnr2jgst=2,fnr3famname=3,fnr4rufname=4,
fnr5gebdat=5,fnr6ausgbs=6,fnr7ausgdr=7,meldnrauswahlunsinnig=56,
meldnrdatenexistierennicht=59,meldnrbittewarten=69,
meldnrschuelernichtimentsprbestand=126,meldnrpraezisieren=129,
meldnrungueltigesdatum=157,meldnrjgstoderschueler=318,
meldnrkeinestundenplandatenvorhanden=366,meldnrfalschejgstangabe=404,
maxwochstdn=66,maxanzfaecher=100;INT CONST maxwochtage:=6,erstestd:=1,
letztestd:=12;LET blank=" ",null=0,niltext="",punkt=".",maxzeichenimvordruck=
79;TASK VAR vordruckserver;TEXT CONST dateimitueberschrift:=
"vordruck1 einzelstdpl sek2",dateimitstdplzeilen:=
"vordruck2 einzelstdpl raeume",dateimiterlauterungen:=
"vordruck2 einzelstdpl sek2",strich:="-",kreuz:="+",abschlusslinie:=76*strich
+blank,normaletrennlinie:=3*strich+kreuz+5*(11*strich+kreuz)+11*strich+": ",
lvnichtimbestand:="nicht in Datei 'Lehrveranstaltungen' enthalten ",
paraphenichtimbestand:=" nicht in Datei 'Lehrer' enthalten ";TEXT VAR hj,sj,
sjaufber,uebfolgeseiten,famname,rufname,gebdat,jgst,tutorkurs,tutorkursalt,
hilfsstring,tupelwerthjd,kennungen,faecher,paraphe,anrede,titel,zusatz,name,
hilfstext,lv,zeile1,zeile2,l:="",r:="",p:="";ROW maxanzfaecherTEXT VAR 
lehrveranstaltungen;BOOL VAR gesamtesek2,bestjgst,einzelschueler,
bildschirmausgabe;INT VAR aktuellerindex,gemerkterdbstatus,anzzeilen,
eingabestatus,i,x,y,z,feldnr,meldnr,zaehler,anzfaecher;PROC 
einzelstdplsek2eingang:standardvproc(maske)END PROC einzelstdplsek2eingang;
PROC einzelstdplsek2starten:sj:=schulkenndatum("Schuljahr");hj:=
schulkenndatum("Schulhalbjahr");IF maskenwerteokTHEN IF stundenplanokTHEN 
startenausfuehrenELSE meldnr:=meldnrkeinestundenplandatenvorhanden;
meldefehlerundzurueckzumdialog;FI ;ELSE meldefehlerundzurueckzumdialog;FI ;.
startenausfuehren:sjaufber:=subtext(sj,1,2)+"/";sjaufberCAT subtext(sj,3,4);
vordruckserver:=/"anschreiben server";forget(dateimitueberschrift,quiet);
forget(dateimitstdplzeilen,quiet);forget(dateimiterlauterungen,quiet);fetch(
dateimitueberschrift,vordruckserver);fetch(dateimitstdplzeilen,vordruckserver
);fetch(dateimiterlauterungen,vordruckserver);setzesonderwerteschulkenndaten;
standardmeldung(meldnrbittewarten,niltext);inittupel(dnrhalbjahresdaten);
putwert(fnrhjdsj,sj);putwert(fnrhjdhj,hj);putwert(fnrhjdfamnames,famname);
putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdat);IF 
einzelschuelerTHEN aktuellerindex:=dnrhalbjahresdaten;ELSE aktuellerindex:=
ixhjdsjhjjgstkenn;putwert(fnrhjdjgst,jgst);FI ;tutorkursalt:=niltext;
zusammengesetztesanschreiben(aktuellerindex,bildschirmausgabe,einzelschueler,
BOOL PROC einzelstdplsek2sonderwerte,BOOL PROC einzelstdplsek2multistop,TEXT 
PROC einzelstdplsek2druckdateibauen);END PROC einzelstdplsek2starten;PROC 
meldefehlerundzurueckzumdialog:standardmeldung(meldnr,niltext);return(1)END 
PROC meldefehlerundzurueckzumdialog;BOOL PROC maskenwerteok:BOOL VAR ok:=
FALSE ,gesamtesek2:=FALSE ;bestjgst:=FALSE ;einzelschueler:=FALSE ;
standardpruefe(5,fnr6ausgbs,fnr7ausgdr,null,niltext,eingabestatus);IF 
eingabestatus<>0THEN meldnr:=meldnrauswahlunsinnig;infeld(fnr6ausgbs);ELSE 
bildschirmausgabe:=standardmaskenfeld(fnr7ausgdr)=niltext;jgst:=
standardmaskenfeld(fnr2jgst);famname:=standardmaskenfeld(fnr3famname);rufname
:=standardmaskenfeld(fnr4rufname);gebdat:=standardmaskenfeld(fnr5gebdat);IF 
jgst=niltextTHEN IF famname=niltextCAND rufname=niltextCAND gebdat=niltext
THEN gesamtesek2:=TRUE ;jgst:="11";ok:=TRUE ELSE IF einzelschuelerkorrekt
THEN einzelschueler:=TRUE ;ok:=TRUE ELSE infeld(feldnr)FI ;FI ;ELSE 
standardpruefe(2,fnr2jgst,null,null,niltext,eingabestatus);IF eingabestatus<>
0COR int(jgst)<11COR int(jgst)>13THEN meldnr:=meldnrfalschejgstangabe;infeld(
fnr2jgst);ELSE IF famname<>niltextCOR rufname<>niltextCOR gebdat<>niltext
THEN meldnr:=meldnrjgstoderschueler;infeld(fnr2jgst)ELSE bestjgst:=TRUE ;ok:=
TRUE FI ;FI ;FI ;FI ;okEND PROC maskenwerteok;BOOL PROC stundenplanok:
stundenplanhalbjahrsetzen(hj,sj);stundenplanbasisundstundenplanholen(
eingabestatus);eingabestatus=0OR eingabestatus=8END PROC stundenplanok;BOOL 
PROC einzelschuelerkorrekt:IF famname=niltextTHEN feldnr:=fnr3famname;meldnr
:=meldnrpraezisieren;LEAVE einzelschuelerkorrektWITH FALSE ;FI ;IF rufname=
niltextTHEN IF gebdat=niltextTHEN IF famnameeindeutigTHEN rufname:=wert(
fnrsurufnames);gebdat:=wert(fnrsugebdatums);LEAVE einzelschuelerkorrektWITH 
TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE ;FI ;ELSE feldnr:=fnr4rufname
;meldnr:=meldnrpraezisieren;LEAVE einzelschuelerkorrektWITH FALSE ;FI ;ELSE 
IF gebdat<>niltextTHEN IF kompletterschluesselokundhjddaTHEN LEAVE 
einzelschuelerkorrektWITH TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE FI 
;ELSE IF famnameundrufnameeindeutigTHEN gebdat:=wert(fnrsugebdatums);LEAVE 
einzelschuelerkorrektWITH TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE FI 
;FI ;FI ;TRUE END PROC einzelschuelerkorrekt;BOOL PROC famnameeindeutig:
inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsustatuss,
"ls");search(dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameTHEN feldnr:=
fnr3famname;meldnr:=meldnrdatenexistierennicht;LEAVE famnameeindeutigWITH 
FALSE ;ELSE succ(dnrschueler);IF wert(fnrsufamnames)=famnameTHEN feldnr:=
fnr4rufname;meldnr:=meldnrpraezisieren;LEAVE famnameeindeutigWITH FALSE ;
ELSE pred(dnrschueler);FI ;FI ;TRUE END PROC famnameeindeutig;BOOL PROC 
famnameundrufnameeindeutig:inittupel(dnrschueler);putwert(fnrsufamnames,
famname);putwert(fnrsurufnames,rufname);putwert(fnrsustatuss,"ls");search(
dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameCOR wert(fnrsurufnames)<>
rufnameTHEN feldnr:=fnr3famname;meldnr:=meldnrdatenexistierennicht;LEAVE 
famnameundrufnameeindeutigWITH FALSE ELSE succ(dnrschueler);IF wert(
fnrsufamnames)=famnameAND wert(fnrsurufnames)=rufnameTHEN feldnr:=fnr5gebdat;
meldnr:=meldnrpraezisieren;LEAVE famnameundrufnameeindeutigWITH FALSE ELSE 
pred(dnrschueler);FI ;FI ;TRUE END PROC famnameundrufnameeindeutig;BOOL PROC 
kompletterschluesselokundhjdda:standardpruefe(6,fnr5gebdat,null,null,niltext,
eingabestatus);IF eingabestatus<>0THEN feldnr:=fnr5gebdat;meldnr:=
meldnrungueltigesdatum;LEAVE kompletterschluesselokundhjddaWITH FALSE ;FI ;
hilfstext:=subtext(gebdat,1,2);hilfstextCAT punkt;hilfstextCAT subtext(gebdat
,3,4);hilfstextCAT punkt;hilfstextCAT subtext(gebdat,5,6);gebdat:=hilfstext;
inittupel(dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert(
fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdat);putwert(fnrhjdsj,sj);
putwert(fnrhjdhj,hj);search(dnrhalbjahresdaten,TRUE );IF dbstatus<>0THEN 
feldnr:=fnr3famname;meldnr:=meldnrschuelernichtimentsprbestand;LEAVE 
kompletterschluesselokundhjddaWITH FALSE ;FI ;TRUE END PROC 
kompletterschluesselokundhjdda;BOOL PROC einzelstdplsek2multistop:BOOL VAR b;
IF einzelschuelerTHEN b:=wert(fnrhjdfamnames)=famnameAND wert(fnrhjdrufnames)
=rufnameAND intwert(fnrhjdjgst)>10AND schulhalbjahrkorrektAND dbstatus=ok
ELIF bestjgstTHEN b:=wert(fnrhjdjgst)=jgstAND schulhalbjahrkorrektAND 
dbstatus=okELSE b:=schulhalbjahrkorrektAND dbstatus=okFI ;bENDPROC 
einzelstdplsek2multistop;BOOL PROC schulhalbjahrkorrekt:intwert(fnrhjdsj)=int
(sj)AND intwert(fnrhjdhj)=int(hj)END PROC schulhalbjahrkorrekt;BOOL PROC 
einzelstdplsek2sonderwerte:initialisieresonderwerte;setzesonderwert(
swschuljahr,sjaufber);setzesonderwert(swhalbjahr,hj);famname:=wert(
fnrhjdfamnames);rufname:=wert(fnrhjdrufnames);gebdat:=wert(fnrhjdgebdats);
jgst:=wert(fnrhjdjgst);adressat(famname);setzesonderwert(swrufname,rufname);
setzesonderwert(swfamname,famname);setzesonderwert(swgebdat,gebdat);tutorkurs
:=wert(fnrhjdkennung);IF tutorkurs=niltextTHEN gemerkterdbstatus:=dbstatus;
inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames,
rufname);putwert(fnrsugebdatums,gebdat);search(dnrschueler,TRUE );IF dbstatus
=0THEN tutorkurs:=wert(fnrsusgrpzugtut);FI ;dbstatus(gemerkterdbstatus);FI ;
gemerkterdbstatus:=dbstatus;inittupel(dnrlehrer);IF tutorkurs<>tutorkursalt
THEN inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj
,hj);putwert(fnrsgrpjgst,jgst);putwert(fnrsgrpkennung,tutorkurs);search(
dnrlehrveranstaltungen,TRUE );paraphe:=wert(fnrsgrplehrer);IF dbstatus<>0COR 
paraphe=niltextTHEN hilfsstring:=jgst+blank+tutorkurs;setzesonderwert(
swtutorkurs,hilfsstring);ELSE hilfsstring:=jgst+blank;hilfsstringCAT paraphe;
putwert(fnrlparaphe,paraphe);search(dnrlehrer,TRUE );IF wert(fnrlgeschlecht)=
"m"THEN hilfsstringCAT " Hr. "ELSE hilfsstringCAT " Fr. "FI ;hilfsstringCAT 
wert(fnrlamtsbeztitel);hilfsstringCAT blank+wert(fnrlzusatz);hilfsstringCAT 
blank+wert(fnrlfamname);setzesonderwert(swtutorkurs,hilfsstring);FI ;
tutorkursalt:=tutorkurs;ELSE setzesonderwert(swtutorkurs,hilfsstring);FI ;
dbstatus(gemerkterdbstatus);TRUE END PROC einzelstdplsek2sonderwerte;TEXT 
PROC einzelstdplsek2druckdateibauen:LET stddruckdatei="liste.1",druckdatei=
"Stundenplan",hilfsdatei="hilfsdatei";FILE VAR f;forget(druckdatei,quiet);
setzemitseitennummern(TRUE );druckvorbereiten;setzeanzahlderzeichenprozeile(
maxzeichenimvordruck);jgst:=wert(fnrhjdjgst);faecher:=wert(fnrhjdfach);
kennungen:=wert(fnrhjdlerngrpkenn);lehrveranstaltungenimrowmerken;
uebfolgeseiten:="Erläuterungen zum Stundenplan: "+rufname+blank+famname+" ("+
sjaufber+","+hj+") ";anzzeilen:=1;briefalternative(dateimitueberschrift,
hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,
quiet);FOR xFROM erstestdUPTO letztestdREP vordruckzweiindruckdatei(x)PER ;
ueberschriftenfuererlaeuterungenindruckdatei;FOR zaehlerFROM 1UPTO anzfaecher
REP IF anzzeilen>drucklaengeTHEN seitenwechsel;druckzeileschreiben(
uebfolgeseiten);druckzeileschreiben(blank);spaltenueberschriftenindruckdatei;
anzzeilenINCR 4;FI ;vordruckdreiindruckdatei(zaehler)PER ;
drucknachbereitenohneausdrucken;rename(stddruckdatei,druckdatei);f:=
sequentialfile(modify,druckdatei);toline(f,1);input(f);druckdatei.
lehrveranstaltungenimrowmerken:FOR iFROM 1UPTO maxanzfaecherREP 
lehrveranstaltungen(i):=niltextPER ;anzfaecher:=length(faecher)DIV 2;FOR i
FROM 1UPTO anzfaecherREP lehrveranstaltungen(i):=jgst+subtext(faecher,1,2)+
subtext(kennungen,1,4);faecher:=subtext(faecher,3,length(faecher));kennungen
:=subtext(kennungen,5,length(kennungen));PER ;.
ueberschriftenfuererlaeuterungenindruckdatei:IF anzzeilen+6>drucklaengeTHEN 
seitenwechsel;druckzeileschreiben(uebfolgeseiten);druckzeileschreiben(blank);
anzzeilen:=3;FI ;zeile1:=blank;druckzeileschreiben(zeile1);zeile1:=
"Erläuterungen: ";druckzeileschreiben(zeile1);zeile1:=blank;
druckzeileschreiben(zeile1);spaltenueberschriftenindruckdatei;anzzeilenINCR 6
;END PROC einzelstdplsek2druckdateibauen;PROC 
spaltenueberschriftenindruckdatei:zeile1:="Lehrveranstaltung : Lehrer ";
druckzeileschreiben(zeile1);zeile1:="------------------:"+56*"-"+blank;
druckzeileschreiben(zeile1);END PROC spaltenueberschriftenindruckdatei;PROC 
zeilenweisehilfsdateiindruckdatei(TEXT CONST hilfsdatei):TEXT VAR zeile:=
niltext;FILE VAR f;f:=sequentialfile(input,hilfsdatei);FOR iFROM 1UPTO lines(
f)REP getline(f,zeile);anzzeilenINCR 1;IF anzzeilen<drucklaengeTHEN 
druckzeileschreiben(zeile);ELSE seitenwechsel;druckzeileschreiben(
uebfolgeseiten);druckzeileschreiben(blank);druckzeileschreiben(zeile);
anzzeilen:=3;FI ;PER ;END PROC zeilenweisehilfsdateiindruckdatei;PROC 
vordruckzweiindruckdatei(INT CONST std):LET hilfsdatei="hilfsdatei";TEXT VAR 
zeile:=niltext;FILE VAR f;setzesonderwert(swtagesstunde,text(std,2));
stdplanprowochstdlesenundswsetzen(std);briefalternative(dateimitstdplzeilen,
hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);f:=sequentialfile(
input,hilfsdatei);IF std<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:=
abschlusslinieFI ;druckzeileschreiben(zeile);anzzeilenINCR 1;forget(
hilfsdatei,quiet);END PROC vordruckzweiindruckdatei;PROC 
vordruckdreiindruckdatei(INT CONST index):LET hilfsdatei="hilfsdatei";TEXT 
VAR zeile:=niltext;FILE VAR f;hilfstext:=lehrveranstaltungen(index);lv:=
subtext(hilfstext,1,2)+blank;lvCAT subtext(hilfstext,3,4)+blank;lvCAT subtext
(hilfstext,5,8);setzesonderwert(swlv,lv);gemerkterdbstatus:=dbstatus;
inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,sj);putwert(fnrlvhj,hj);
putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,compress(subtext(hilfstext,3
,8)));search(dnrlehrveranstaltungen,TRUE );IF dbstatus<>0THEN setzesonderwert
(swlehrername,lvnichtimbestand);ELSE inittupel(dnrlehrer);putwert(fnrlparaphe
,wert(fnrlvparaphe));search(dnrlehrer,TRUE );IF dbstatus<>0THEN 
setzesonderwert(swlehrername,"Paraphe "+wert(fnrlvparaphe)+
paraphenichtimbestand)ELSE anredetitelusfzusammensetzten;setzesonderwert(
swlehrername,anrede+titel+name)FI ;FI ;dbstatus(gemerkterdbstatus);
briefalternative(dateimiterlauterungen,hilfsdatei);
zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);.
anredetitelusfzusammensetzten:IF wert(fnrlgeschlecht)="w"THEN anrede:="Fr. "
ELSE anrede:="Hr. "FI ;titel:=wert(fnrlamtsbeztitel);zusatz:=wert(fnrlzusatz)
;name:=blank+wert(fnrlfamname);IF length(titel)>0THEN titelCAT blank;titel
CAT zusatzELSE titel:=zusatzFI ;END PROC vordruckdreiindruckdatei;PROC 
stdplanprowochstdlesenundswsetzen(INT CONST std):INT VAR sonderwert;INT VAR 
wochenstd:=std;FOR sonderwertFROM swmozeile1UPTO swsazeile1REP zaehler:=1;IF 
wochenstd<=maxwochstdnTHEN WHILE zaehler<=anzfaecherAND NOT lvgeplant(
wochenstd,lehrveranstaltungen(zaehler))REP zaehlerINCR 1;PER ;IF zaehler>
anzfaecherTHEN setzesonderwert(sonderwert,niltext);setzesonderwert(sonderwert
+6,niltext);ELSE lv:=lehrveranstaltungen(zaehler);planeintraglesen(wochenstd,
"L",lv,l,r,p);zeile1:=subtext(lv,1,2)+blank;zeile1CAT subtext(lv,3,8);zeile2
:=text(r,10);setzesonderwert(sonderwert,zeile1);setzesonderwert(sonderwert+6,
zeile2);FI ;wochenstdINCR letztestd;ELSE zeile2:=niltext;setzesonderwert(
sonderwert,zeile2);setzesonderwert(sonderwert+6,zeile2);FI ;PER ;END PROC 
stdplanprowochstdlesenundswsetzen;END PACKET einzelstdplsek2;