summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/4.daten für schulis aufbereiten
blob: 89c96ea1d50495d88d39b193e576d8c5d6b36687 (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
PACKET integastundenplanuebernehmenDEFINES integastundenplanarchivlisten,
integastundenplanstdvproc,integastundenplanuebernehmen,
integastundenplandatenschreiben:LET integadatei="SCHULIS.PUN",filemodus=
"file ibm",dos="DOS",anzstdenprotag=12,schulname="Schulname",schulort=
"Schulort",schuljahr="Schuljahr",halbjahr="Schulhalbjahr",maskeeingang=
"ms stdplan von intega uebernehmen",listenname=
"Liste der Dateien auf der Diskette:",protokollname=
"Stundenplan von INTEGA übernehmen",leerzeile=" ",ueberschrift=
"   Fehlerprotokoll zur Übernahme des Stundenplans ",unterstrich=
"   ------------------------------------------------------------------",
fehler1kopf="1. Kopplung existiert in schulis nicht für:",fehler2kopf=
"2. Lehrveranstaltung kann nicht identifiziert werden für:",fehler3kopf1=
"3. Kopplung und Paraphe passen in schulis auf Lehrveranstaltung, aber",
fehler3kopf2="   Fach stimmt nicht überein für:",fehler4kopf=
"4. In INTEGA wurden Zeiten verplant, die in schulis gesperrt sind für:",
fehlerspalten1=
"            Kopplung Fach Lehrer Klassengruppen          Zeit  Raum",
fehlerspalten2="   schulis  INTEGA ",fehlerspalten3=
"   Lehrver. Kopplung Fach Lehrer Klassengruppen          Zeit  Raum",
spalten3fueller="                                                         ",
keinfehler="        Kein Fehler dieser Art aufgetreten!",tab1=
"  +--------+--------+----+------+-----------------------+-----+----+",tab2=
"           +--------+----+------+-----------------------+-----+----+",
feldakthj=2,laengelvkopp=8,laengeindex=4,laengezeitraum=6,beginnkopp=1,
endekopp=8,beginnfach=9,endefach=12,beginnlvfach=3,endelvfach=4,beginnpar=13,
endepar=16,beginnklgr=19,endeklgr=42,beginnbelegg=43,fachergaenzung="  ",
leereraumangabe="    ",leerelv="        ",pseudoraum="PSEU",ausgabeparam="#",
frageraum="????",kennungkopplung="K",kennungparaphe="P",kennungzulzeit="ZZ",
kennungmo="Mo ",kennungdi="Di ",kennungmi="Mi ",kennungdo="Do ",kennungfr=
"Fr ",kennungsa="Sa ",meldungserverfehler=376,meldungkeinstdplan=366,
meldungkeinesugruppen=334,meldungzuvielesugruppen=356,meldungkeinelv=326,
meldungzuvielelv=358,meldungstdplanveraltet=377,meldungbasisinkon=378,
meldwarten=69,melddatenaufber=357,melduebern=374,meldueberschr=372,
meldaenderungenunvollstaendig=364,meldprotokollaufbereiten=373,
meldstandderuebern=375,meldarchivfehler=343;FILE VAR g,protokoll,
integastdplandatei;THESAURUS VAR thes;TEXT VAR gewsj,gewhj,t,integaeintrag,lv
,leistekoppexistnicht,leistelvnichtident,leistelvfalschesfach,leisteunzzeit,
integakopplung,integafach,integaparaphe,integabelegg,zeitraumeintrag,
zeitderlv,raumderlv,stdplaneintrag;INT VAR fstat,i,posanf,posende,
intzeitderlv;BOOL VAR archivfehler:=FALSE ,transferfehler:=FALSE ,eintragok;
PROC archivanmelden(INT CONST ruecksprung):archivfehler:=FALSE ;
commanddialogue(FALSE );disablestop;reserve(filemodus,/dos);IF iserrorTHEN 
archivfehler:=TRUE ;abbruchnachfehler(ruecksprung);LEAVE archivanmeldenFI ;
enablestopEND PROC archivanmelden;PROC integastundenplanarchivlisten:
standardmeldung(meldwarten," ");archivanmelden(1);IF archivfehlerTHEN LEAVE 
integastundenplanarchivlistenFI ;disablestop;forget(listenname,quiet);thes:=
ALL (/dos);IF iserrorTHEN archivfehler:=TRUE ;abbruchnachfehler(1);ELSE 
release(/dos);thesaurusaufbereiten;enablestop;zeigedatei(listenname,"vr")FI .
thesaurusaufbereiten:g:=sequentialfile(output,listenname);t:=" ";i:=0;REP get
(thes,t,i);putline(g,t)UNTIL t=""PER .END PROC integastundenplanarchivlisten;
PROC integastundenplanstdvproc:standardstartproc(maskeeingang);IF 
transferfehlerTHEN standardmeldung(meldaenderungenunvollstaendig,"")FI ;
transferfehler:=FALSE ;infeld(2);standardnprocEND PROC 
integastundenplanstdvproc;PROC integastundenplanuebernehmen:standardmeldung(
meldwarten,"");gewsj:=schulkenndatum(schuljahr);gewhj:=schulkenndatum(
halbjahr);IF standardmaskenfeld(feldakthj)=""THEN geplanteshjundsjberechnen(
gewhj,gewsj)FI ;stundenplanhalbjahrsetzen(gewhj,gewsj);standardmeldung(
melddatenaufber,"");stundenplanbasisundstundenplanholen(fstat);IF fstat<>0
CAND fstat<>8THEN standardmeldung(melduebern,"")ELSE standardmeldung(
meldueberschr,"")FI ;standardnproc.END PROC integastundenplanuebernehmen;
PROC integastundenplandatenschreiben:TEXT VAR alteerstellungszeit:="";IF 
fstat<>0CAND fstat<>8THEN standardmeldung(meldwarten,"");
stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(2);
meldungausgeben(fstat);LEAVE integastundenplandatenschreibenELSE 
stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN 
return(2);meldungausgeben(fstat);LEAVE integastundenplandatenschreibenFI ;FI 
;FI ;alteerstellungszeit:=erstellungszeitderdatenraeume;stundenplanloeschen(
fstat);stundenplanerstellen(alteerstellungszeit,fstat);datenvonarchivholen(2)
;IF archivfehlerTHEN LEAVE integastundenplandatenschreibenFI ;
dateninstdplanschreibenEND PROC integastundenplandatenschreiben;PROC 
datenvonarchivholen(INT CONST ruecksprung):standardmeldung(meldwarten," ");
archivanmelden(ruecksprung);IF archivfehlerTHEN LEAVE datenvonarchivholenFI ;
disablestop;fetch(integadatei,/dos);IF iserrorTHEN archivfehler:=TRUE ;
abbruchnachfehler(ruecksprung);ELSE release(/dos);enablestop;commanddialogue(
TRUE );FI END PROC datenvonarchivholen;PROC dateninstdplanschreiben:INT VAR 
zeilennr:=0;TEXT VAR anzzeilen;BOOL VAR lvnichtvermerkt:=TRUE ;
fehlerprotvorbereiten;datenraumankoppeln;WHILE NOT eof(integastdplandatei)
REP zeilennrINCR 1;getline(integastdplandatei,integaeintrag);standardmeldung(
meldstandderuebern,anzzeilen+ausgabeparam+text(zeilennr)+ausgabeparam);
stundenplaneintraegevornehmenPER ;IF leisteunzzeit<>""COR 
leistekoppexistnicht<>""COR leistelvnichtident<>""COR leistelvfalschesfach<>
""THEN sicherstdplan;standardmeldung(meldprotokollaufbereiten," ");forget(
protokollname,quiet);protokoll:=sequentialfile(output,protokollname);
fuelleprotokoll;infeld(1);standardfelderausgeben;infeld(2);zeigedatei(
protokollname,"vr")ELSE sicherstdplan;infeld(1);standardfelderausgeben;infeld
(2);return(2)FI .sicherstdplan:stundenplanreorganisierenundsichern(fstat);IF 
fstat<>0THEN transferfehler:=TRUE FI .fehlerprotvorbereiten:leisteunzzeit:=""
;leistekoppexistnicht:="";leistelvnichtident:="";leistelvfalschesfach:="".
datenraumankoppeln:integastdplandatei:=sequentialfile(input,integadatei);
anzzeilen:=text(lines(integastdplandatei)).stundenplaneintraegevornehmen:
integakopplung:=text(integaeintrag,laengelvkopp);integafach:=subtext(
integaeintrag,beginnfach,endefach);integaparaphe:=subtext(integaeintrag,
beginnpar,endepar);integabelegg:=subtext(integaeintrag,beginnbelegg);t:=
allelvmit(kennungkopplung,integakopplung);IF t=""THEN leistekoppexistnicht
CAT text(zeilennr,laengeindex)ELSE IF lvmitgleicherparaphe(t)THEN pruefefach
ELSE leistelvnichtidentCAT text(zeilennr,laengeindex)FI FI .pruefefach:IF 
integafach<>subtext(lv,beginnlvfach,endelvfach)+fachergaenzungTHEN 
leistelvfalschesfachCAT text(zeilennr,laengeindex);leistelvfalschesfachCAT 
text(lv,laengelvkopp)ELSE tragstundeneinundpruefezeitenFI .
tragstundeneinundpruefezeiten:stdplaneintrag:=lv+integakopplung+integaparaphe
;posanf:=1;posende:=length(integabelegg);lvnichtvermerkt:=TRUE ;WHILE posanf<
posendeREP zeitraumeintrag:=subtext(integabelegg,posanf,posanf+laengezeitraum
-1);zeitderlv:=text(zeitraumeintrag,2);intzeitderlv:=int(zeitderlv);raumderlv
:=compress(subtext(zeitraumeintrag,3));IF raumderlv=""COR raumderlv=
pseudoraumCOR raumderlv=frageraumTHEN raumderlv:=leereraumangabeFI ;IF NOT 
bezeichnungzulaessig(kennungzulzeit,zeitderlv)THEN IF lvnichtvermerktTHEN 
leisteunzzeitCAT text(zeilennr,laengeindex);leisteunzzeitCAT text(lv,
laengelvkopp);lvnichtvermerkt:=FALSE FI ELSE planeintragvornehmen(
intzeitderlv,lv,raumderlv,eintragok);IF NOT eintragokTHEN transferfehler:=
TRUE FI ;FI ;posanfINCR laengezeitraumPER .fuelleprotokoll:putline(protokoll,
schulkenndatum(schulname));putline(protokoll,text(schulkenndatum(schulort),65
)+date);putline(protokoll,leerzeile);putline(protokoll,ueberschrift+gewhj+
". "+text(gewsj,2)+"/"+subtext(gewsj,3)+" von INTEGA");putline(protokoll,
unterstrich);putline(protokoll,leerzeile);putline(protokoll,fehler1kopf);
putline(protokoll,leerzeile);IF leistekoppexistnicht=""THEN putline(protokoll
,keinfehler)ELSE putline(protokoll,fehlerspalten1);putline(protokoll,tab2);
gibfalschekopplungenausFI ;putline(protokoll,leerzeile);putline(protokoll,
fehler2kopf);putline(protokoll,leerzeile);IF leistelvnichtident=""THEN 
putline(protokoll,keinfehler)ELSE putline(protokoll,fehlerspalten1);putline(
protokoll,tab2);gibfalschelvausFI ;putline(protokoll,leerzeile);putline(
protokoll,fehler3kopf1);putline(protokoll,fehler3kopf2);putline(protokoll,
leerzeile);IF leistelvnichtident=""THEN putline(protokoll,keinfehler)ELSE 
putline(protokoll,fehlerspalten2);putline(protokoll,fehlerspalten3);putline(
protokoll,tab1);gibnichtidentlvausFI ;putline(protokoll,leerzeile);putline(
protokoll,fehler4kopf);putline(protokoll,leerzeile);IF leisteunzzeit=""THEN 
putline(protokoll,keinfehler)ELSE putline(protokoll,fehlerspalten3);putline(
protokoll,tab1);gibfalschezeitenausFI .gibfalschezeitenaus:gibleisteaus(
leisteunzzeit,FALSE ,FALSE ).gibfalschekopplungenaus:gibleisteaus(
leistekoppexistnicht,TRUE ,TRUE ).gibfalschelvaus:gibleisteaus(
leistelvnichtident,TRUE ,TRUE ).gibnichtidentlvaus:gibleisteaus(
leistelvfalschesfach,FALSE ,TRUE ).END PROC dateninstdplanschreiben;PROC 
gibleisteaus(TEXT CONST leiste,BOOL CONST ohnelv,allezeiten):INT VAR 
posanfleiste,posendeleiste,posanflv,posanfbelegg,posendebelegg;BOOL VAR 
erstezeilederlv:=TRUE ;posanfleiste:=1;posendeleiste:=length(leiste);modify(
integastdplandatei);WHILE posanfleiste<posendeleisteREP col(
integastdplandatei,1);toline(integastdplandatei,int(subtext(leiste,
posanfleiste,posanfleiste+laengeindex-1)));readrecord(integastdplandatei,
integaeintrag);integabelegg:=subtext(integaeintrag,beginnbelegg);IF ohnelv
THEN lv:=leerelv;posanfleisteINCR laengeindexELSE posanflv:=posanfleiste+
laengeindex;lv:=subtext(leiste,posanflv,posanflv+laengelvkopp-1);posanfleiste
INCR laengeindex+laengelvkoppFI ;posanfbelegg:=1;posendebelegg:=length(
integabelegg);zeitraumeintrag:=subtext(integabelegg,posanfbelegg,posanfbelegg
+laengezeitraum-1);zeitderlv:=text(zeitraumeintrag,2);intzeitderlv:=int(
zeitderlv);raumderlv:=subtext(zeitraumeintrag,3);IF raumderlv=""COR raumderlv
=pseudoraumCOR raumderlv=frageraumTHEN raumderlv:=leereraumangabeFI ;IF 
allezeitenTHEN putline(protokoll,"   "+lv+" "+subtext(integaeintrag,
beginnkopp,endekopp)+" "+subtext(integaeintrag,beginnfach,endefach)+" "+
subtext(integaeintrag,beginnpar,endepar)+"   "+subtext(integaeintrag,
beginnklgr,endeklgr)+gibtagstd(intzeitderlv)+" "+raumderlv);posanfbeleggINCR 
laengezeitraum;WHILE posanfbelegg<posendebeleggREP zeitraumeintrag:=subtext(
integabelegg,posanfbelegg,posanfbelegg+laengezeitraum-1);zeitderlv:=text(
zeitraumeintrag,2);intzeitderlv:=int(zeitderlv);putline(protokoll,
spalten3fueller+gibtagstd(intzeitderlv)+" "+raumderlv);posanfbeleggINCR 
laengezeitraumPER ELSE erstezeilederlv:=TRUE ;WHILE posanfbelegg<
posendebeleggREP zeitraumeintrag:=subtext(integabelegg,posanfbelegg,
posanfbelegg+laengezeitraum-1);zeitderlv:=text(zeitraumeintrag,2);IF NOT 
bezeichnungzulaessig(kennungzulzeit,zeitderlv)THEN intzeitderlv:=int(
zeitderlv);IF erstezeilederlvTHEN putline(protokoll,"   "+lv+" "+subtext(
integaeintrag,beginnkopp,endekopp)+" "+subtext(integaeintrag,beginnfach,
endefach)+" "+subtext(integaeintrag,beginnpar,endepar)+"   "+subtext(
integaeintrag,beginnklgr,endeklgr)+gibtagstd(intzeitderlv)+" "+raumderlv);
erstezeilederlv:=FALSE ELSE putline(protokoll,spalten3fueller+gibtagstd(
intzeitderlv)+" "+raumderlv);FI ;FI ;posanfbeleggINCR laengezeitraum;PER FI 
PER .END PROC gibleisteaus;BOOL PROC lvmitgleicherparaphe(TEXT CONST 
allelvderkopp):posanf:=1;posende:=length(allelvderkopp);WHILE posanf<posende
REP lv:=subtext(allelvderkopp,posanf,posanf+laengelvkopp-1);IF datenzurlv(
kennungparaphe,lv)=integaparapheTHEN LEAVE lvmitgleicherparapheWITH TRUE FI ;
posanfINCR laengelvkoppPER ;FALSE .END PROC lvmitgleicherparaphe;PROC 
abbruchnachfehler(INT CONST ruecksprung):return(ruecksprung);standardmeldung(
meldarchivfehler,"Fehler: "+errormessage+" !#");clearerror;release(/dos);
commanddialogue(TRUE );enablestopEND PROC abbruchnachfehler;PROC 
meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung(
meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan,
"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5
THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN 
standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
FI END PROC meldungausgeben;TEXT PROC gibtagstd(INT CONST index):INT VAR 
intstd:=(index-1)MOD anzstdenprotag+1;TEXT VAR std:="0";IF intstd<10THEN std
CAT text(intstd)ELSE std:=text(intstd)FI ;SELECT (index-1)DIV anzstdenprotag
OF CASE 0:kennungmo+stdCASE 1:kennungdi+stdCASE 2:kennungmi+stdCASE 3:
kennungdo+stdCASE 4:kennungfr+stdCASE 5:kennungsa+stdOTHERWISE stdEND SELECT 
END PROC gibtagstd;END PACKET integastundenplanuebernehmen;