summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/4.springstunden lehrer analysieren
blob: bd205d241160b4bb560d3f9024e4725d565fa8fa (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
PACKET springstundenlehrerDEFINES springstundenlehrerausfuehren:LET fnrakthj=
2,fnrohneminiplan=3,minitagestr="!",minivornachmtr=" ",miniunterricht="*",
minisprstd="o",minifrei=".",ausgabeparam="#",leerzeile=" ",laengeparbez=9,
tageprowoche=6,stdprotag=12,letztestunde=66,meldungbearbwird=352,
meldungwarten=69,meldungkeinelehrer=337,meldungkeinzeitraster=336,
meldungserverfehler=376,meldungkeinstdplan=366,meldungkeinesugruppen=334,
meldungzuvielesugruppen=356,meldungkeinelv=326,meldungzuvielelv=358,
meldungbasisinkon=378,meldungstdplauswvorber=384,kennungpar="P",kennunggesp=
"x",kennungvorm="v",kennungnachm="n",dateiname="Liste der Springstunden",
ueberschrift="Springstunden der Lehrer für das Schulhalbjahr ",unterstrich=
"-------------------------------------------------------",legende1=
"In den Mini-Stundenplänen bedeuten:",legende2=
"""  Unterricht für den Lehrer",legende3="""  Springstunde für den Lehrer",
legende4="""  andere Zeiten ohne Unterricht",legende5=
"    ""x""  gesperrte Zeiten aufgrund des Zeitrasters",legende6=
"""  Trennzeichen Vor- und Nachmittag",legende7=
"""  Trennzeichen Unterrichtstage",legende8="Zeitraster der Schule:",legende9
="Mo            Di            Mi            Do            Fr            Sa",
ausgabewstd=" Wstd.  ",vorgabetage=" 0 Tage (0 v/ 0 n)  ",vorgabesprstd1=
" Springstd. (",vorgabesprstd2=" x1/ ",vorgabesprstd3=" x2/ ",vorgabesprstd4=
" xgr.)",posunttage=2,posvormtage=10,posnachmtage=15,schuljahr="Schuljahr",
halbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";TEXT VAR 
paraphe,schj,schhj,ausgabetage,ausgabesprstd,miniplan:="",iminiplan,
ausgminiplan,tagesplan,zeile,vormnachmwechsel:="",relzeit,zeichen;INT VAR i,j
,wstd,stdverschiebung,erstepos,letztepos,anzunttage,anzvormtage,anznachmtage,
anzsprstd,anzsprstd1,anzsprstd2,anzsprstdx,sprstdlaenge,indextagesanf,mittag,
fstat;TEXT VAR kvn,kzt,kaktvn;BOOL VAR miniplanausgabe:=FALSE ,
erstenichtvormstd:=TRUE ,keinmittag:=TRUE ;FILE VAR datei;PROC 
springstundenlehrerausfuehren:standardmeldung(meldungwarten,"");
miniplanausgabe:=FALSE ;schj:=schulkenndatum(schuljahr);schhj:=schulkenndatum
(halbjahr);IF standardmaskenfeld(fnrakthj)=""THEN geplanteshjundsjberechnen(
schhj,schj)FI ;IF standardmaskenfeld(fnrohneminiplan)=""THEN miniplanausgabe
:=TRUE ;FI ;erstelleminiplan;stundenplanhalbjahrsetzen(schhj,schj);
standardmeldung(meldungstdplauswvorber,"");
stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN 
meldungausgeben(fstat);return(1);LEAVE springstundenlehrerausfuehrenFI ;
inittupel(dnrlehrer);IF records(dnrlehrer)=0.0THEN standardmeldung(
meldungkeinelehrer,"");return(1);LEAVE springstundenlehrerausfuehrenELSE 
bereiteprotokollvor;statleseschleife(dnrlehrer,"","",dnrlehrer+1,dnrlehrer+2,
PROC lehrer)FI ;zeigedatei(dateiname,"vr").bereiteprotokollvor:forget(
dateiname,quiet);datei:=sequentialfile(output,dateiname);putline(datei,
schulkenndatum(schulname));putline(datei,text(schulkenndatum(schulort),65)+
date);putline(datei,leerzeile);putline(datei,ueberschrift+schhj+". "+text(
schj,2)+"/"+subtext(schj,3));putline(datei,unterstrich);putline(datei,
leerzeile);IF miniplanausgabeTHEN putline(datei,legende1);putline(datei,
"    """+miniunterricht+legende2);putline(datei,"    """+minisprstd+legende3)
;putline(datei,"    """+minifrei+legende4);putline(datei,legende5);putline(
datei,"    """+minivornachmtr+legende6);putline(datei,"    """+minitagestr+
legende7);putline(datei,leerzeile);putline(datei,legende8);putline(datei,
legende9);bereiteplanauf(miniplan);putline(datei,ausgminiplan);putline(datei,
leerzeile)FI .erstelleminiplan:miniplan:="";vormnachmwechsel:="";IF records(
dnrzeitraster)=0.0THEN standardmeldung(meldungkeinzeitraster,"");return(1);
LEAVE springstundenlehrerausfuehrenFI ;erstenichtvormstd:=TRUE ;inittupel(
dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,dnrzeitraster+1,
dnrzeitraster+2,PROC zeitrasterdaten);IF length(miniplan)<letztestundeTHEN 
standardmeldung(meldungkeinzeitraster,"");return(1);LEAVE 
springstundenlehrerausfuehrenFI .END PROC springstundenlehrerausfuehren;PROC 
lehrer(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE paraphe:=wert(fnrlparaphe)
;standardmeldung(meldungbearbwird,paraphe+ausgabeparam);wstd:=
anzahlverplstden(paraphe);zeile:=text(paraphe,laengeparbez);zeileCAT text(
wstd,2);zeileCAT ausgabewstd;untersuchetage;zeileCAT ausgabetage;
untersuchesprstden;zeileCAT ausgabesprstd;putline(datei,zeile);IF 
miniplanausgabeTHEN bereiteplanauf(iminiplan);changeall(ausgminiplan,
kennungvorm,minifrei);changeall(ausgminiplan,kennungnachm,minifrei);putline(
datei,ausgminiplan)FI ;line(datei)FI .untersuchetage:ausgabetage:=vorgabetage
;IF anzunttage<>0THEN replace(ausgabetage,posunttage,text(anzunttage))FI ;IF 
anzvormtage<>0THEN replace(ausgabetage,posvormtage,text(anzvormtage))FI ;IF 
anznachmtage<>0THEN replace(ausgabetage,posnachmtage,text(anznachmtage))FI .
untersuchesprstden:anzsprstd:=0;anzsprstd1:=0;anzsprstd2:=0;anzsprstdx:=0;
FOR iFROM 1UPTO tageprowocheREP erstepos:=0;letztepos:=0;indextagesanf:=(i-1)
*stdprotag;tagesplan:=subtext(iminiplan,indextagesanf+1,i*stdprotag);
ermittlerandundsprstdenPER .ermittlerandundsprstden:erstepos:=pos(tagesplan,
miniunterricht);IF erstepos<>0THEN ermittleletztestd;ermittlevormnachmwechsel
;ermittlespringstdFI .ermittleletztestd:FOR jFROM stdprotagDOWNTO 1REP IF (
tagesplanSUB j)=miniunterrichtTHEN letztepos:=j;LEAVE ermittleletztestdFI 
PER .ermittlevormnachmwechsel:mittag:=0;FOR jFROM 12DOWNTO 1REP IF (miniplan
SUB indextagesanf+j)=kennungvormTHEN mittag:=j;LEAVE ermittlevormnachmwechsel
FI PER .ermittlespringstd:keinmittag:=TRUE ;FOR jFROM letzteposDOWNTO 
ersteposREP IF (tagesplanSUB j)=kennungvormCOR (tagesplanSUB j)=kennungnachm
COR (tagesplanSUB j)=kennunggespTHEN anzsprstdINCR 1;sprstdlaengeINCR 1;IF 
miniplanausgabeTHEN replace(iminiplan,indextagesanf+j,minisprstd);FI ;IF j=
mittag+1COR j=mittagTHEN IF keinmittagTHEN anzsprstdINCR 1;sprstdlaengeINCR 1
;keinmittag:=FALSE FI FI ELSE IF sprstdlaenge=1THEN anzsprstd1INCR 1ELIF 
sprstdlaenge=2THEN anzsprstd2INCR 1ELIF sprstdlaenge>2THEN anzsprstdxINCR 1
FI ;sprstdlaenge:=0;FI PER ;IF keinmittagCAND erstepos<=mittagCAND letztepos>
mittagTHEN anzsprstdINCR 1;anzsprstd1INCR 1FI ;ausgabesprstd:=text(anzsprstd,
2)+vorgabesprstd1+text(anzsprstd1,2)+vorgabesprstd2+text(anzsprstd2,2)+
vorgabesprstd3+text(anzsprstdx,2)+vorgabesprstd4.END PROC lehrer;PROC 
bereiteplanauf(TEXT CONST plan):ausgminiplan:=plan;stdverschiebung:=0;FOR i
FROM 1UPTO length(vormnachmwechsel)DIV 3REP relzeit:=vormnachmwechselSUB i*3-
2;relzeitCAT (vormnachmwechselSUB i*3-1);zeichen:=vormnachmwechselSUB i*3;
insertchar(ausgminiplan,zeichen,int(relzeit)+stdverschiebung);stdverschiebung
INCR 1PER ;END PROC bereiteplanauf;PROC zeitrasterdaten(BOOL VAR b):IF wert(
fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE kvn:=
wert(fnrzrkennungteil);kzt:=text(wert(fnrzrtagstunde),2);miniplanCAT kvn;IF 
kvn<>kennungvormTHEN IF erstenichtvormstdTHEN kaktvn:=kzt;erstenichtvormstd:=
FALSE FI ELSE erstenichtvormstd:=TRUE FI ;IF int(kzt)MOD stdprotag=1CAND kzt
<>"1 "THEN IF kaktvn<>""THEN vormnachmwechselCAT kaktvn;vormnachmwechselCAT 
minivornachmtr;kaktvn:=""FI ;vormnachmwechselCAT kzt;vormnachmwechselCAT 
minitagestrFI ;IF kzt=text(letztestunde)THEN IF kaktvn<>""THEN 
vormnachmwechselCAT kaktvn;vormnachmwechselCAT minivornachmtr;kaktvn:=""FI 
FI FI END PROC zeitrasterdaten;INT PROC anzahlverplstden(TEXT CONST paraphe):
TEXT VAR stundenplan:=allezeitenvon(kennungpar,paraphe),unttage:=tageprowoche
*"0",vormtage:=tageprowoche*"0",nachmtage:=tageprowoche*"0";INT VAR einspos:=
1,anzeinsen:=0,wochentag;iminiplan:=miniplan;anzunttage:=0;anzvormtage:=0;
anznachmtage:=0;WHILE einspos<>0REP einspos:=pos(stundenplan,"1",einspos);IF 
einspos<>0THEN anzeinsenINCR 1;replace(iminiplan,einspos,miniunterricht);
wochentag:=(einspos-1)DIV stdprotag+1;IF (unttageSUB wochentag)="0"THEN 
replace(unttage,wochentag,"1");anzunttageINCR 1FI ;IF (vormtageSUB wochentag)
="0"CAND vormittagsunterrichtTHEN replace(vormtage,wochentag,"1");anzvormtage
INCR 1FI ;IF (nachmtageSUB wochentag)="0"CAND nachmittagsunterrichtTHEN 
replace(nachmtage,wochentag,"1");anznachmtageINCR 1FI ;einsposINCR 1FI PER ;
anzeinsen.vormittagsunterricht:(miniplanSUB einspos)=kennungvorm.
nachmittagsunterricht:(miniplanSUB einspos)=kennungnachm.END PROC 
anzahlverplstden;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 springstundenlehrer;