summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/0.erf zeitraster
blob: b1b1bd780508442c63a18b5f7590291359ecf0fa (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
PACKET erfzeitrasterDEFINES zeitrasterveraendern,zeitrasterspeichern,
zeitrasteruebernehmen,zeitrasterkopieren:LET trenner="�",niltext="",
titelanfang="Zeitraster für das ",titelmitte=". Halbjahr ",
trennerfuerschuljahr="/",null=0,eins=1;LET fnrfueruebernehmen=2,
fnrfuergeplbearb=3,fnrfueraktbearb=4,fnrcursorruhepos=5,maske="ms zeitraster"
,fnrerstertagesteil=2,wochentage=6,stundenprowochentag=12,stundenamsamstag=6,
vormittagsstunden=6,nachmittagsstunden=6,zeitfelderprowochentag=24,
felderprowochentag=36,datensaetzepromaske=66,erstesfeldfuersamstag=182;LET 
textschuljahr="Schuljahr",textschulhalbjahr="Schulhalbjahr";LET 
kennungvormittag="v",kennungnachmittag="n",allekennungen="vnx",
kennungmoerstestd=1;LET meldungeingabesinnlos=56,meldungfalschekennung=55,
meldungfalschezeitangabe=54,meldungzeitangabezulang=341,
meldungfalschezeitfolge=342,meldungplausi=57,meldungdatenfehlen=68,
meldungfrageuebernehmen=300,meldunguebernehmen=301,meldungfeldfuellen=52,
meldungspeicherfehler=73,meldungspeicherung=50;TEXT VAR schuljahr:=niltext,
halbjahr:=niltext;BOOL VAR datenvorhanden,datenlueckenhaft;ROW 
datensaetzepromaskeTEXT VAR alteszeitraster;INT VAR aktindex;PROC 
zeitrasterveraendern:INT VAR i,j,aktfnr;IF standardmaskenfeld(
fnrfueruebernehmen)=niltextAND (standardmaskenfeld(fnrfuergeplbearb)<>niltext
XOR standardmaskenfeld(fnrfueraktbearb)<>niltext)THEN schuljahr:=
schulkenndatum(textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr);IF 
standardmaskenfeld(fnrfuergeplbearb)<>niltextTHEN geplanteshjundsjberechnen(
halbjahr,schuljahr)FI ;standardstartproc(maske);
standardkopfmaskeaktualisieren(titelanfang+halbjahr+titelmitte+text(schuljahr
,2)+trennerfuerschuljahr+subtext(schuljahr,3));aktindex:=null;inittupel(
dnrzeitraster);statleseschleife(dnrzeitraster,schuljahr,halbjahr,fnrzrsj,
fnrzrhj,PROC fuellemaskeundpuffer);datenvorhanden:=aktindex>null;
datenlueckenhaft:=datenvorhandenCAND aktindex<datensaetzepromaske;IF NOT 
datenvorhandenTHEN aktfnr:=fnrerstertagesteil;FOR iFROM einsUPTO wochentage-
einsREP FOR jFROM einsUPTO vormittagsstundenREP standardmaskenfeld(
kennungvormittag,aktfnr);aktfnrINCR einsPER ;FOR jFROM einsUPTO 
nachmittagsstundenREP standardmaskenfeld(kennungnachmittag,aktfnr);aktfnr
INCR einsPER ;aktfnrINCR zeitfelderprowochentag;PER ;FOR iFROM einsUPTO 
stundenamsamstagREP standardmaskenfeld(kennungvormittag,aktfnr);aktfnrINCR 
einsPER ;FI ;standardnprocELSE standardmeldung(meldungeingabesinnlos,niltext)
;IF standardmaskenfeld(fnrfueruebernehmen)=niltextTHEN infeld(
fnrfuergeplbearb)ELSE infeld(fnrfueruebernehmen)FI ;return(1)FI END PROC 
zeitrasterveraendern;PROC zeitrasterspeichern:INT VAR fehlerstatus:=null,
aktfnr,aktfnrbeginn,aktfnrende,beginnzeit,endezeit,i;pruefeplausibilitaet;IF 
fehlerstatus<>nullTHEN infeld(fehlerstatus);return(1);LEAVE 
zeitrasterspeichernELSE speicherungdurchfuehrenFI ;enter(2).
pruefeplausibilitaet:standardmeldung(meldungplausi,niltext);FOR iFROM null
UPTO datensaetzepromaske-einsREP aktfnr:=fnrerstertagesteil+iMOD 
stundenprowochentag+(iDIV stundenprowochentag)*felderprowochentag;IF aktfnr>=
erstesfeldfuersamstagTHEN aktfnrbeginn:=aktfnr+stundenamsamstag;aktfnrende:=
aktfnrbeginn+stundenamsamstagELSE aktfnrbeginn:=aktfnr+stundenprowochentag;
aktfnrende:=aktfnrbeginn+stundenprowochentagFI ;IF standardmaskenfeld(aktfnr)
=niltextTHEN standardmeldung(meldungfeldfuellen,niltext);fehlerstatus:=aktfnr
;LEAVE pruefeplausibilitaetFI ;IF pos(allekennungen,standardmaskenfeld(aktfnr
))=nullTHEN standardmeldung(meldungfalschekennung,niltext);fehlerstatus:=
aktfnr;LEAVE pruefeplausibilitaetFI ;beginnzeit:=int(standardmaskenfeld(
aktfnrbeginn));IF falschezeitangabe(beginnzeit,aktfnrbeginn,fehlerstatus)
THEN LEAVE pruefeplausibilitaetFI ;endezeit:=int(standardmaskenfeld(
aktfnrende));IF falschezeitangabe(endezeit,aktfnrende,fehlerstatus)THEN 
LEAVE pruefeplausibilitaetFI ;IF beginnzeit>endezeitAND endezeit>0THEN 
standardmeldung(meldungfalschezeitfolge,niltext);fehlerstatus:=aktfnrbeginn;
LEAVE pruefeplausibilitaetFI PER .speicherungdurchfuehren:standardmeldung(
meldungspeicherung,niltext);FOR aktindexFROM einsUPTO datensaetzepromaskeREP 
berechnemaskenunddbgroessen;IF datenvorhandenTHEN IF stundewurdeveraendert
THEN infeld(aktfnr);putwert(fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr);
putintwert(fnrzrtagstunde,aktindex);search(dnrzeitraster,true);putwert(
fnrzrkennungteil,standardmaskenfeld(aktfnr));putwert(fnrzrbeginnuhr,
standardmaskenfeld(aktfnrbeginn));putwert(fnrzrendeuhr,standardmaskenfeld(
aktfnrende));IF dbstatus<>nullTHEN insert(dnrzeitraster)ELSE update(
dnrzeitraster)FI ;speicherfehlerabfangenFI ELSE infeld(aktfnr);putwert(
fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr);putintwert(fnrzrtagstunde,
aktindex);putwert(fnrzrkennungteil,standardmaskenfeld(aktfnr));putwert(
fnrzrbeginnuhr,standardmaskenfeld(aktfnrbeginn));putwert(fnrzrendeuhr,
standardmaskenfeld(aktfnrende));insert(dnrzeitraster)FI PER .
berechnemaskenunddbgroessen:aktfnr:=fnrerstertagesteil+(aktindex-eins)MOD 
stundenprowochentag+((aktindex-eins)DIV stundenprowochentag)*
felderprowochentag;IF aktfnr>=erstesfeldfuersamstagTHEN aktfnrbeginn:=aktfnr+
stundenamsamstag;aktfnrende:=aktfnrbeginn+stundenamsamstagELSE aktfnrbeginn:=
aktfnr+stundenprowochentag;aktfnrende:=aktfnrbeginn+stundenprowochentagFI ;.
stundewurdeveraendert:datenlueckenhaftCOR standardmaskenfeld(aktfnr)+trenner+
standardmaskenfeld(aktfnrbeginn)+trenner+standardmaskenfeld(aktfnrende)<>
alteszeitraster(aktindex).speicherfehlerabfangen:IF dbstatus<>nullTHEN 
standardmeldung(meldungspeicherfehler,niltext);return(1);LEAVE 
zeitrasterspeichernFI .END PROC zeitrasterspeichern;PROC zeitrasterkopieren:
TEXT VAR tagesteil,beginn,ende;INT VAR i,j,aktfnr:=fnrerstertagesteil;FOR i
FROM 0UPTO stundenprowochentag-1REP aktfnr:=fnrerstertagesteil+i;tagesteil:=
standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;beginn:=
standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;ende:=
standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;FOR jFROM 1UPTO 
wochentage-2REP standardmaskenfeld(tagesteil,aktfnr);aktfnrINCR 
stundenprowochentag;standardmaskenfeld(beginn,aktfnr);aktfnrINCR 
stundenprowochentag;standardmaskenfeld(ende,aktfnr);aktfnrINCR 
stundenprowochentagPER ;IF i<stundenamsamstagTHEN standardmaskenfeld(
tagesteil,aktfnr);aktfnrINCR stundenamsamstag;standardmaskenfeld(beginn,
aktfnr);aktfnrINCR stundenamsamstag;standardmaskenfeld(ende,aktfnr)FI PER ;
return(1);END PROC zeitrasterkopieren;PROC zeitrasteruebernehmen(BOOL CONST 
hauptaktion):INT VAR posi,i;TEXT VAR satz;BOOL VAR ueberschreiben;IF NOT 
hauptaktionTHEN IF NOT eingangsmaskerichtigangekreuztTHEN standardmeldung(
meldungeingabesinnlos,niltext);infeld(fnrfueruebernehmen);return(1);LEAVE 
zeitrasteruebernehmenFI ;schuljahr:=schulkenndatum(textschuljahr);halbjahr:=
schulkenndatum(textschulhalbjahr);fuelledenpuffermitdemzeitraster;IF 
datenvorhandenTHEN standardmeldung(meldungfrageuebernehmen,niltext);
feldschutz(fnrfueruebernehmen);feldschutz(fnrfuergeplbearb);feldschutz(
fnrfueraktbearb);feldfrei(fnrcursorruhepos);infeld(fnrcursorruhepos);
standardnproc;ELSE standardmeldung(meldungdatenfehlen,niltext);infeld(
fnrfueruebernehmen);return(1)FI ELSE standardmeldung(meldunguebernehmen,
niltext);geplanteshjundsjberechnen(halbjahr,schuljahr);
testeobdatenschonvorhanden;FOR iFROM einsUPTO aktindexREP 
ladedendatenbankpuffer;IF ueberschreibenCAND dbstatus=nullTHEN update(
dnrzeitraster)ELSE insert(dnrzeitraster)FI ;speicherfehlerabfangen;PER ;enter
(2)FI .eingangsmaskerichtigangekreuzt:standardmaskenfeld(fnrfueruebernehmen)
<>niltextAND standardmaskenfeld(fnrfuergeplbearb)=niltextAND 
standardmaskenfeld(fnrfueraktbearb)=niltext.fuelledenpuffermitdemzeitraster:
aktindex:=null;inittupel(dnrzeitraster);statleseschleife(dnrzeitraster,
schuljahr,halbjahr,fnrzrsj,fnrzrhj,PROC fuellenurpuffer);datenvorhanden:=
aktindex>null.testeobdatenschonvorhanden:putwert(fnrzrsj,schuljahr);putwert(
fnrzrhj,halbjahr);putintwert(fnrzrtagstunde,kennungmoerstestd);search(
dnrzeitraster,TRUE );ueberschreiben:=dbstatus=null.ladedendatenbankpuffer:
putwert(fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr);satz:=alteszeitraster(i)
;posi:=pos(satz,trenner);putwert(fnrzrtagstunde,text(satz,posi-eins));IF 
ueberschreibenTHEN search(dnrzeitraster,TRUE )FI ;satz:=subtext(satz,posi+
eins);posi:=pos(satz,trenner);putwert(fnrzrkennungteil,text(satz,posi-eins));
satz:=subtext(satz,posi+eins);posi:=pos(satz,trenner);putwert(fnrzrbeginnuhr,
text(satz,posi-eins));satz:=subtext(satz,posi+eins);putwert(fnrzrendeuhr,satz
).speicherfehlerabfangen:IF ueberschreibenCAND dbstatus<>nullTHEN 
standardmeldung(meldungspeicherfehler,niltext);infeld(fnrfueruebernehmen);
return(1);LEAVE zeitrasteruebernehmenFI .END PROC zeitrasteruebernehmen;PROC 
fuellemaskeundpuffer(BOOL VAR b):INT VAR feldnr,feldnr2;IF wert(fnrzrsj)>
schuljahrCOR wert(fnrzrhj)>halbjahrCOR dbstatus<>0THEN b:=TRUE ELSE feldnr:=
fnrerstertagesteil+aktindexMOD stundenprowochentag+(aktindexDIV 
stundenprowochentag)*felderprowochentag;aktindexINCR eins;alteszeitraster(
aktindex):=wert(fnrzrkennungteil)+trenner+wert(fnrzrbeginnuhr)+trenner+wert(
fnrzrendeuhr);standardmaskenfeld(wert(fnrzrkennungteil),feldnr);IF feldnr>=
erstesfeldfuersamstagTHEN feldnrINCR stundenamsamstag;feldnr2:=feldnr+
stundenamsamstagELSE feldnrINCR stundenprowochentag;feldnr2:=feldnr+
stundenprowochentagFI ;standardmaskenfeld(wert(fnrzrbeginnuhr),feldnr);
standardmaskenfeld(wert(fnrzrendeuhr),feldnr2);FI END PROC 
fuellemaskeundpuffer;PROC fuellenurpuffer(BOOL VAR b):IF wert(fnrzrsj)>
schuljahrCOR wert(fnrzrhj)>halbjahrCOR dbstatus<>0THEN b:=TRUE ELSE aktindex
INCR eins;alteszeitraster(aktindex):=wert(fnrzrtagstunde)+trenner+wert(
fnrzrkennungteil)+trenner+wert(fnrzrbeginnuhr)+trenner+wert(fnrzrendeuhr)FI 
END PROC fuellenurpuffer;BOOL PROC falschezeitangabe(INT CONST zeit,fnr,INT 
VAR status):IF standardmaskenfeld(fnr)=niltextTHEN LEAVE falschezeitangabe
WITH FALSE FI ;IF length(standardmaskenfeld(fnr))>4THEN standardmeldung(
meldungzeitangabezulang,niltext);status:=fnr;LEAVE falschezeitangabeWITH 
TRUE FI ;standardpruefe(2,fnr,null,null,niltext,status);IF status<>nullTHEN 
LEAVE falschezeitangabeWITH TRUE FI ;IF zeit<nullOR zeitMOD 100>59OR zeitDIV 
100>24THEN standardmeldung(meldungfalschezeitangabe,niltext);status:=fnr;
TRUE ELSE FALSE FI END PROC falschezeitangabe;END PACKET erfzeitraster;