summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.kursdaten importieren
blob: 20dd27e18351e85dd7164d5fbb0a604dc9e54b10 (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
198
199
PACKET kursdatenueberschnittstelleimportierenDEFINES 
kursdatenschnittstelleimportanfang,
kursdatenschnittstelleimportaufbereitenfrage,
kursdatenschnittstelleimportaufbereiten,
kursdatenschnittstelleimportloescheundreturn,
kursdatenschnittstelleimportarchiv:LET eingangsmaske=
"ms kurswahldaten importieren",schuljahr="Schuljahr",halbjahr="Schulhalbjahr"
,kuwa2sperre="Kurswahl-2 ",filemodus="file ibm",listenname=
"Liste der Dateien auf der Diskette:",protname="Protokoll zur Übernahme",
schulname="Schulname",schulort="Schulort",leerzeile=" ",ueberschrift1=
"Protokoll zur Übernahme von Kurswahldaten aus Standardschnittstelle der",
ueberschrift2a="Jgst. ",ueberschrift2b=" für das Halbjahr ",ueberschrift2c=
" (Schuljahr ",unterschrift=
"-----------------------------------------------------------------------",
fehlerfall1="Fehler,  Schüler nicht in akt. Jgst. : ",fehlerfall2=
"Warnung, neuer Kurs                  : ",fehlerfall3a=
"Fehler,  Planblock nicht übernommen  : ",fehlerfall3b=
"            Nicht übernommene Daten  : ",fehlerfall3c=
"                                       ",fehlerfall4a=
"Fehler,  unbekannter Kurs            : ",fehlerfall4b=
"         in Kurswahl von             : ",trenner="�",dos="DOS",
eingangdateiname=2,kurslaengebr=6,kurslaengewk=7,kursendebr=5,kursendewk=6,
kzart="A",kzalle="A",kzplbl="P",kzstd="S",suffixfa=".FA",suffixwk=".WK",
suffixbr=".BR",suffixzi=".ZI",meldungkeineschueler=423,meldunggewhjunzul=405,
meldunggewsjunzul=127,meldunggewjgstunzul=404,meldungparallelanw=425,
meldungbearbwird=352,meldungwarten=69,meldungpraezisieren=129,
meldungserverfehler=416,meldungdatenuebernehmen=433,meldungdatenirrelevant=
432,meldungnamefalsch=323,meldungrausreichen=343,meldungnameunbek=351;INT 
VAR i;TEXT VAR t;INT VAR fstat,aktfeld,ermwstd,kurspos,aktpos,aktzeile;TEXT 
VAR aktdateiname:="schulis",gewjgst,gewhj,aktjgst,geplsj,geplhj,gewsj,aktsj:=
"0000",akthj,neuewahldaten,aktfake,dateieintrag,aktkurs,neuekurse:=trenner,
fach,kennung,behandeltekurse:=trenner,weitererblock;BOOL VAR archivfehler:=
FALSE ,sperreok:=TRUE ,aktodergeplhj:=FALSE ;THESAURUS VAR thes;FILE VAR dsfa
,dswk,dsbr,dszi,prot,g;PROC kursdatenschnittstelleimportanfang:
standardstartproc(eingangsmaske);infeld(2);standardmaskenfeld(aktdateiname,
eingangdateiname);standardfelderausgeben;standardnproc.END PROC 
kursdatenschnittstelleimportanfang;PROC 
kursdatenschnittstelleimportaufbereitenfrage:standardmeldung(meldungwarten,""
);fstat:=0;pruefdateiname;holedateivomarchiv;holedatenfuerabfrage.
holedatenfuerabfrage:toline(dszi,1);readrecord(dszi,dateieintrag);gewsj:=text
(dateieintrag,4);i:=int(gewsj);IF NOT lastconversionokTHEN 
fehlermeldungsjunzulaessigFI ;gewhj:=dateieintragSUB 7;IF gewhj<>"1"CAND 
gewhj<>"2"THEN fehlermeldunggewhjunzulaessigFI ;gewjgst:=subtext(dateieintrag
,5,6);IF gewjgst<>"10"CAND gewjgst<>"11"CAND gewjgst<>"12"CAND gewjgst<>"13"
THEN fehlermeldunggewjgstunzulaessigFI ;IF aktsj="0000"THEN aktsj:=
schulkenndatum(schuljahr);akthj:=schulkenndatum(halbjahr);geplhj:=akthj;
geplsj:=aktsj;geplanteshjundsjberechnen(geplhj,geplsj)FI ;IF gewsj=aktsjCAND 
gewhj=akthjTHEN aktodergeplhj:=TRUE ;aktjgst:=gewjgstELIF gewsj=aktsjCAND 
gewhj<akthjTHEN fehlermeldungdatennichtrelevantELIF gewsj<aktsjTHEN 
fehlermeldungdatennichtrelevantELSE IF gewsj=geplsjCAND gewhj=geplhjTHEN 
aktodergeplhj:=TRUE ELSE aktodergeplhj:=FALSE FI ;aktjgst:=text(int(gewjgst)-
(int(text(gewsj,2))-int(text(aktsj,2))))FI ;standardmeldung(
meldungdatenuebernehmen,aktjgst+"#"+gewjgst+"."+gewhj+"#");standardnproc.
fehlermeldungdatennichtrelevant:meldungausgeben(meldungdatenirrelevant,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
fehlermeldungsjunzulaessig:meldungausgeben(meldunggewsjunzul,eingangdateiname
,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
fehlermeldunggewhjunzulaessig:meldungausgeben(meldunggewhjunzul,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
fehlermeldunggewjgstunzulaessig:meldungausgeben(meldunggewjgstunzul,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
pruefdateiname:aktdateiname:=standardmaskenfeld(eingangdateiname);IF 
aktdateiname=""THEN fehlermeldungfeldfuellenELIF falschercode(aktdateiname)
THEN fehlermeldungnamefalsch(TRUE )FI .holedateivomarchiv:archivanmelden;IF 
archivfehlerTHEN LEAVE kursdatenschnittstelleimportaufbereitenfrageFI ;
disablestop;forget(aktdateiname+suffixfa,quiet);fetch(aktdateiname+suffixfa,/
dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE 
kursdatenschnittstelleimportaufbereitenfrageFI ;dsfa:=sequentialfile(modify,
old(aktdateiname+suffixfa));forget(aktdateiname+suffixwk,quiet);fetch(
aktdateiname+suffixwk,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE 
kursdatenschnittstelleimportaufbereitenfrageFI ;dswk:=sequentialfile(modify,
old(aktdateiname+suffixwk));forget(aktdateiname+suffixbr,quiet);fetch(
aktdateiname+suffixbr,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE 
kursdatenschnittstelleimportaufbereitenfrageFI ;dsbr:=sequentialfile(modify,
old(aktdateiname+suffixbr));forget(aktdateiname+suffixzi,quiet);fetch(
aktdateiname+suffixzi,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE 
kursdatenschnittstelleimportaufbereitenfrageFI ;dszi:=sequentialfile(modify,
old(aktdateiname+suffixzi));enablestop.END PROC 
kursdatenschnittstelleimportaufbereitenfrage;PROC 
kursdatenschnittstelleimportaufbereiten:standardmeldung(meldungwarten,"");
kurswahlinitialisieren(aktjgst,gewjgst,gewhj,kzalle,gewsj);kurswahlbasisholen
(fstat);IF fstat<>0THEN meldungausgeben(meldungserverfehler,eingangdateiname,
1);LEAVE kursdatenschnittstelleimportaufbereitenELIF letzterschueler<
ersterschuelerTHEN meldungausgeben(meldungkeineschueler,eingangdateiname,1);
LEAVE kursdatenschnittstelleimportaufbereitenFI ;kurswahlsperresetzen(
kuwa2sperre,sperreok);IF NOT sperreokTHEN meldungausgeben(meldungparallelanw,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenFI ;
neuekurse:=trenner;behandeltekurse:=trenner;bereiteprotokollvor;
uebernehmebrdatei;uebernehmewkdatei;loeschemeldung;kurswahlsperrebeenden(
kuwa2sperre);kurswahlbasissichern;zeigedatei(protname,"vr").
kurswahlbasissichern:kurswahl0sichern(fstat);kurswahl1sichern(fstat);
kurswahl2sichern(fstat);IF fstat<>0THEN meldungausgeben(meldungserverfehler,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenFI .
bereiteprotokollvor:forget(protname,quiet);prot:=sequentialfile(output,
protname);putline(prot,schulkenndatum(schulname));putline(prot,text(
schulkenndatum(schulort),65)+date);putline(prot,leerzeile);putline(prot,
ueberschrift1);putline(prot,ueberschrift2a+aktjgst+ueberschrift2b+gewjgst+"."
+gewhj+ueberschrift2c+text(gewsj,2)+"/"+subtext(gewsj,3)+"):");putline(prot,
unterschrift);putline(prot,leerzeile).uebernehmebrdatei:bereitek1dateivor;
toline(dsbr,1);col(dsbr,1);WHILE NOT eof(dsbr)REP readrecord(dsbr,
dateieintrag);IF compress(dateieintrag)<>""THEN pruefplanblockundkurse(text(
dateieintrag,3),subtext(dateieintrag,4))FI ;down(dsbr);col(dsbr,1)PER .
bereitek1dateivor:planbloeckeinitialisieren;FOR iFROM 1UPTO 22REP 
planblockloeschen(text(i))PER .uebernehmewkdatei:toline(dswk,1);col(dswk,1);
WHILE NOT eof(dswk)REP readrecord(dswk,dateieintrag);pruefschueler(compress(
text(dateieintrag,30)),compress(subtext(dateieintrag,31,45)),subtext(
dateieintrag,46,53),subtext(dateieintrag,54));down(dswk);col(dswk,1)PER .END 
PROC kursdatenschnittstelleimportaufbereiten;PROC pruefplanblockundkurse(
TEXT CONST block,kurse):INT VAR blockbez:=int(text(block,2)),laengekurse:=
length(kurse);standardmeldung(meldungbearbwird,"Planblock "+text(block,2)+"#"
);IF blockbez>0CAND blockbez<23THEN tragblockein;tragkurseeinELSE 
fehlermeldungblockfalschFI .fehlermeldungblockfalsch:putline(prot,
fehlerfall3a+text(block,2));putline(prot,fehlerfall3b+text(kurse,42));IF 
laengekurse>42THEN putline(prot,fehlerfall3c+subtext(kurse,43))FI .
tragblockein:planblockeintragen(text(block,2),text(int(blockSUB 3))).
tragkurseein:kurspos:=1;WHILE kurspos<laengekurseREP aktkurs:=subtext(kurse,
kurspos,kurspos+kursendebr);aktfake:=text(aktkurs,2)+text(subtext(aktkurs,5),
4);weitererblock:="";t:=kursdaten(aktfake,kzart);IF dbstatus=1CAND compress(
aktfake)<>""THEN ermittlewstd;tragkursein;
planbloeckezumkurseintragenmitevtlblockeintrag(aktfake,text(block,2),
weitererblock);behandeltekurseCAT aktfake+trennerELSE 
evtlplanbloeckeaktualisierenFI ;kursposINCR kurslaengebrPER .ermittlewstd:IF 
pos(neuekurse,trenner+aktfake+trenner)=0THEN aktzeile:=lineno(dsbr);ermwstd:=
int(blockSUB 3);toline(dsbr,aktzeile+1);col(dsbr,1);WHILE NOT eof(dsbr)REP 
downety(dsbr,aktkurs);aktpos:=col(dsbr);IF NOT eof(dsbr)CAND ((aktpos-3)MOD 6
)=1THEN readrecord(dsbr,t);ermwstdINCR int(tSUB 3);weitererblock:=text(t,2);
down(dsbr);col(dsbr,1);neuekurseCAT aktfake+trenner;toline(dsbr,aktzeile);
LEAVE ermittlewstdELSE col(dsbr,aktpos+1)FI ;PER ;neuekurseCAT aktfake+
trenner;toline(dsbr,aktzeile)FI .evtlplanbloeckeaktualisieren:IF pos(
behandeltekurse,trenner+aktfake+trenner)=0CAND compress(aktfake)<>""THEN 
aktzeile:=lineno(dsbr);toline(dsbr,aktzeile+1);col(dsbr,1);WHILE NOT eof(dsbr
)REP downety(dsbr,aktkurs);aktpos:=col(dsbr);IF NOT eof(dsbr)CAND ((aktpos-3)
MOD 6)=1THEN readrecord(dsbr,t);weitererblock:=text(t,2);behandeltekurseCAT 
aktfake+trenner;toline(dsbr,aktzeile);
planbloeckezumkurseintragenmitevtlblockeintrag(aktfake,text(block,2),
weitererblock);LEAVE evtlplanbloeckeaktualisierenELSE col(dsbr,aktpos+1)FI ;
PER ;weitererblock:="";planbloeckezumkurseintragenmitevtlblockeintrag(aktfake
,text(block,2),weitererblock);behandeltekurseCAT aktfake+trenner;toline(dsbr,
aktzeile)FI .tragkursein:IF aktodergeplhjTHEN putline(prot,fehlerfall2+text(
aktkurs,2)+" "+text(subtext(aktkurs,5),4)+", Art "+subtext(aktkurs,3,4))FI ;
kurseintragen(text(aktkurs,2),text(subtext(aktkurs,5),4),text(ermwstd),
subtext(aktkurs,3,4)).END PROC pruefplanblockundkurse;PROC 
planbloeckezumkurseintragenmitevtlblockeintrag(TEXT CONST kurs,block1,block2)
:TEXT VAR t:=planblockdaten(block1,kzstd);IF dbstatus=1THEN 
planblockeintragen(block1,"0")FI ;t:=planblockdaten(block2,kzstd);IF dbstatus
=1THEN planblockeintragen(block2,"0")FI ;planbloeckezumkurseintragen(kurs,
block1,block2)END PROC planbloeckezumkurseintragenmitevtlblockeintrag;PROC 
pruefschueler(TEXT CONST famname,rufname,gebdatum,wahldaten):standardmeldung(
meldungbearbwird,famname+", "+rufname+"#");t:=wahldatenzumschueler(famname,
rufname,gebdatum,kzart);IF dbstatus=1THEN fehlermeldungunbekschuelerELSE 
tragwahldateneinFI .fehlermeldungunbekschueler:putline(prot,fehlerfall1+text(
famname+", "+rufname+", "+gebdatum,40)).tragwahldatenein:
schuelerwahleintragen(famname,rufname,gebdatum,aufbereitetewahldaten(famname,
rufname,gebdatum,wahldaten)).END PROC pruefschueler;TEXT PROC 
aufbereitetewahldaten(TEXT CONST famname,rufname,gebdatum,altewahldaten):INT 
VAR wahllaenge:=length(altewahldaten);TEXT VAR planbloecke;kurspos:=1;
neuewahldaten:="";WHILE kurspos<wahllaengeREP aktkurs:=subtext(altewahldaten,
kurspos,kurspos+kursendewk);fach:=text(aktkurs,2);kennung:=subtext(aktkurs,6)
+"  ";planbloecke:=kursdaten(fach+kennung,kzplbl);IF compress(planbloecke)=""
THEN putline(prot,fehlerfall4a+fach+" "+kennung+", Art "+subtext(aktkurs,3,4)
);putline(prot,fehlerfall4b+text(famname+", "+rufname+", "+gebdatum,40))ELSE 
ergaenzewahldatenFI ;kursposINCR kurslaengewkPER ;neuewahldaten.
ergaenzewahldaten:neuewahldatenCAT (aktkursSUB 5);neuewahldatenCAT subtext(
aktkurs,3,4);neuewahldatenCAT fach;neuewahldatenCAT kennung;neuewahldatenCAT 
planbloecke.END PROC aufbereitetewahldaten;BOOL PROC falschercode(TEXT CONST 
t):INT VAR zeichencode;FOR iFROM 1UPTO LENGTH t-3REP zeichencode:=code(tSUB i
);IF NOT ((zeichencode>=48AND zeichencode<=57)OR (zeichencode>=65AND 
zeichencode<=90)OR (zeichencode>=97AND zeichencode<=122))THEN LEAVE 
falschercodeWITH TRUE FI PER ;FALSE END PROC falschercode;PROC 
meldungausgeben(INT CONST meldung,gewfeld,gewruecksprung):fstat:=1;
standardmeldung(meldung,"");infeld(gewfeld);return(gewruecksprung)END PROC 
meldungausgeben;PROC archivanmelden:aktfeld:=infeld;archivfehler:=FALSE ;
commanddialogue(FALSE );disablestop;reserve(filemodus,/dos);IF iserrorTHEN 
archivfehler:=TRUE ;abbruchnachfehler(1);ELSE enablestopFI .END PROC 
archivanmelden;PROC kursdatenschnittstelleimportarchiv:aktfeld:=infeld;
archivanmelden;IF archivfehlerTHEN LEAVE kursdatenschnittstelleimportarchiv
FI ;archivlisten;infeld(aktfeld).archivlisten:standardmeldung(meldungwarten,
"");disablestop;g:=sequentialfile(output,listenname);thes:=ALL /dos;IF 
iserrorTHEN abbruchnachfehler(1);ELSE thesaurusaufbereiten;enablestop;
zeigedatei(listenname,"vr");release(/dos)FI .thesaurusaufbereiten:t:=" ";i:=0
;REP get(thes,t,i);putline(g,t)UNTIL t=""PER .END PROC 
kursdatenschnittstelleimportarchiv;PROC abbruchnachfehler(INT CONST schritte)
:standardmeldung(meldungrausreichen,"Fehler: "+errormessage+" !#");clearerror
;return(schritte);infeld(aktfeld);release(/dos);commanddialogue(TRUE );
enablestopEND PROC abbruchnachfehler;PROC fehlermeldungdateifehlt:fstat:=1;
standardmeldung(meldungnameunbek,aktdateiname+".FA (-WK,-BR,-ZI)#");infeld(
eingangdateiname);return(1).END PROC fehlermeldungdateifehlt;PROC 
fehlermeldungfeldfuellen:meldungausgeben(meldungpraezisieren,eingangdateiname
,1).END PROC fehlermeldungfeldfuellen;PROC fehlermeldungnamefalsch(BOOL 
CONST mitfalschemzeichen):IF mitfalschemzeichenTHEN fstat:=1;standardmeldung(
meldungnamefalsch,subtext(aktdateiname,i,i)+"#"+aktdateiname+"#");infeld(
eingangdateiname);return(1)ELSE meldungausgeben(meldungnamefalsch,
eingangdateiname,1)FI END PROC fehlermeldungnamefalsch;PROC 
kursdatenschnittstelleimportloescheundreturn:forget(listenname,quiet);forget(
protname,quiet);loeschemeldung;return(3)END PROC 
kursdatenschnittstelleimportloescheundreturn;PROC loeschemeldung:aktfeld:=
infeld;infeld(1);standardfelderausgeben;infeld(aktfeld)END PROC 
loeschemeldung;END PACKET kursdatenueberschnittstelleimportieren