app/schulis/2.2.1/src/4.einzelstdpl.sek2

Raw file
Back to index

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;