From 04e68443040c7abad84d66477e98f93bed701760 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 4 Feb 2019 13:09:03 +0100 Subject: Initial import --- app/schulis/2.2.1/src/0.erf aufsichtszeiten | 201 ++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 app/schulis/2.2.1/src/0.erf aufsichtszeiten (limited to 'app/schulis/2.2.1/src/0.erf aufsichtszeiten') diff --git a/app/schulis/2.2.1/src/0.erf aufsichtszeiten b/app/schulis/2.2.1/src/0.erf aufsichtszeiten new file mode 100644 index 0000000..443be9d --- /dev/null +++ b/app/schulis/2.2.1/src/0.erf aufsichtszeiten @@ -0,0 +1,201 @@ +PACKET erfaufsichtszeitenDEFINES aufsichtszeitenveraendern, +aufsichtszeitenspeichern,aufsichtszeitenzeileentfernen, +aufsichtszeitenzeileeinfuegen,aufsichtszeitenuebernehmen, +aufsichtszeitenkopieren:LET niltext="",titelanfang="Aufsichtszeiten für das " +,titelmitte=". Halbjahr ",trennerfuerschuljahr="/",null=0,eins=1;LET +fnrfueruebernehmen=2,fnrfuergeplbearb=3,fnrabtagfuergepl=4,fnrfueraktbearb=5, +fnrabtagfuerakt=6,fnrcursorruhepos=7,allewochentagsbezeichnungen= +"MODIMIDOFRSAMoDiMiDoFrSamodimidofrsa",maske="ms aufsichtszeiten", +fnrwochentag=2,fnrerstebezeichnung=3,felderprozeile=5,offsetstundevor=1, +offsetstundenach=2,offsetbeginnuhr=3,offsetendeuhr=4,fnrerstesfeldletztezeile +=73,fnrletztesfeld=77,erstestundeamtag=1,stundenprowochentag=12, +stundenamsamstag=6,stelledestages=100,datensaetzepromaske=15;LET +textschuljahr="Schuljahr",textschulhalbjahr="Schulhalbjahr";LET +meldungfeldleerlassen=390,meldungzeilezutief=391,meldungmindeinestunde=392, +meldungspeicherung=50,meldungfalschezeitangabe=54,meldungeingabesinnlos=56, +meldungplausi=57,meldungdatenfehlen=68,meldungspeicherfehler=73, +meldungfrageuebernehmen=300,meldunguebernehmen=301,meldungzeitangabezulang= +341,meldungfalschezeitfolge=342,meldungfalschetagesbez=385, +meldungstdnachfolgend=386;TEXT VAR schuljahr:=niltext,halbjahr:=niltext;BOOL +VAR datenvorhanden;INT VAR tagnr;LET nummerfürmo=1,kürzelfürmo="Mo", +nummerfürdi=2,kürzelfürdi="Di",nummerfürmi=3,kürzelfürmi="Mi",nummerfürdo=4, +kürzelfürdo="Do",nummerfürfr=5,kürzelfürfr="Fr",nummerfürsa=6,kürzelfürsa= +"Sa";ROW datensaetzepromaskeTEXT VAR alteaufsichtszeiten;INT VAR aktindex; +PROC aufsichtszeitenzeileeinfuegen:INT VAR i,cursorfeld:=infeld;IF cursorfeld +>=fnrerstesfeldletztezeileTHEN standardmeldung(meldungzeilezutief,niltext); +ELSE cursorfeld:=cursorfeld-((cursorfeld-fnrerstebezeichnung)MOD +felderprozeile)+felderprozeile;FOR iFROM fnrletztesfeldDOWNTO cursorfeld+ +felderprozeileREP standardmaskenfeld(standardmaskenfeld(i-felderprozeile),i) +PER ;FOR iFROM cursorfeldUPTO cursorfeld+offsetendeuhrREP standardmaskenfeld( +niltext,i)PER ;FI ;return(1);END PROC aufsichtszeitenzeileeinfuegen;PROC +aufsichtszeitenzeileentfernen:INT VAR i,cursorfeld:=infeld;cursorfeld:= +cursorfeld-((cursorfeld-fnrerstebezeichnung)MOD felderprozeile);FOR iFROM +cursorfeldUPTO cursorfeld+offsetendeuhrREP standardmaskenfeld(niltext,i)PER ; +infeld(cursorfeld);return(1);END PROC aufsichtszeitenzeileentfernen;PROC +aufsichtszeitenveraendern:INT VAR aktfnr;pruefeplausidereingangsmaske; +setzeschulhalbjahrindenmaskekopf;holealledatendestages;infeld(fnrwochentag); +standardfelderausgeben;infeld(fnrerstebezeichnung);standardnproc. +pruefeplausidereingangsmaske:IF standardmaskenfeld(fnrfueruebernehmen)<> +niltextOR NOT (standardmaskenfeld(fnrfuergeplbearb)<>niltextXOR +standardmaskenfeld(fnrfueraktbearb)<>niltext)THEN standardmeldung( +meldungeingabesinnlos,niltext);IF standardmaskenfeld(fnrfueruebernehmen)= +niltextTHEN infeld(fnrfuergeplbearb)ELSE infeld(fnrfueruebernehmen)FI ;return +(1);LEAVE aufsichtszeitenveraendernFI ;IF standardmaskenfeld(fnrfuergeplbearb +)=niltextTHEN aktfnr:=fnrabtagfuergeplELSE aktfnr:=fnrabtagfueraktFI ;IF +standardmaskenfeld(aktfnr)<>niltextTHEN standardmeldung(meldungfeldleerlassen +,niltext);infeld(aktfnr);return(1);LEAVE aufsichtszeitenveraendernFI ;IF +standardmaskenfeld(fnrfuergeplbearb)=niltextTHEN aktfnr:=fnrabtagfueraktELSE +aktfnr:=fnrabtagfuergeplFI ;IF standardmaskenfeld(aktfnr)=niltextTHEN tagnr:= +nummerfürmo;ELSE tagnr:=pos(allewochentagsbezeichnungen,standardmaskenfeld( +aktfnr));IF tagnr=0THEN standardmeldung(meldungfalschetagesbez,niltext); +infeld(aktfnr);return(1);LEAVE aufsichtszeitenveraendernFI ;tagnr:=(tagnrMOD +12)DIV 2+1;FI .setzeschulhalbjahrindenmaskekopf: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)).END PROC +aufsichtszeitenveraendern;PROC aufsichtszeitenspeichern(BOOL CONST speichern) +:INT VAR fehlerstatus:=null,aktfnr,aznr,beginn,ende,letztestd,i;IF speichern +THEN pruefeplausibilitaet;IF fehlerstatus<>nullTHEN infeld(fehlerstatus); +return(1);LEAVE aufsichtszeitenspeichernFI ;speicherungdurchfuehren;FI ;IF +tagnrniltextCOR standardmaskenfeld(aktfnr+ +offsetbeginnuhr)<>niltextCOR standardmaskenfeld(aktfnr+offsetendeuhr)<> +niltext)CAND standardmaskenfeld(aktfnr+offsetstundevor)=niltextCAND +standardmaskenfeld(aktfnr+offsetstundenach)=niltextTHEN standardmeldung( +meldungmindeinestunde,niltext);fehlerstatus:=aktfnr+offsetstundevor;LEAVE +pruefeplausibilitaetFI ;IF tagnr=nummerfürsaTHEN letztestd:=stundenamsamstag +ELSE letztestd:=stundenprowochentagFI ;aktfnrINCR 1;IF standardmaskenfeld( +aktfnr)<>niltextTHEN standardpruefe(2,aktfnr,null,null,niltext,fehlerstatus); +IF fehlerstatus<>0THEN LEAVE pruefeplausibilitaetFI ;standardpruefe(3,aktfnr, +erstestundeamtag,letztestd,niltext,fehlerstatus);IF fehlerstatus<>0THEN +LEAVE pruefeplausibilitaetFI ;FI ;beginn:=int(standardmaskenfeld(aktfnr)); +aktfnrINCR 1;IF standardmaskenfeld(aktfnr)<>niltextTHEN standardpruefe(2, +aktfnr,null,null,niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE +pruefeplausibilitaetFI ;standardpruefe(3,aktfnr,erstestundeamtag,letztestd, +niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE pruefeplausibilitaetFI ; +FI ;ende:=int(standardmaskenfeld(aktfnr));IF beginn>0AND ende>0AND ende<> +beginn+1THEN standardmeldung(meldungstdnachfolgend,niltext);fehlerstatus:= +aktfnr-1;LEAVE pruefeplausibilitaetFI ;aktfnrINCR 1;beginn:=int( +standardmaskenfeld(aktfnr));IF falschezeitangabe(beginn,aktfnr,fehlerstatus) +THEN LEAVE pruefeplausibilitaetFI ;aktfnrINCR 1;ende:=int(standardmaskenfeld( +aktfnr));IF falschezeitangabe(ende,aktfnr,fehlerstatus)THEN LEAVE +pruefeplausibilitaetFI ;IF beginn>endeAND ende>0THEN standardmeldung( +meldungfalschezeitfolge,niltext);fehlerstatus:=aktfnr-1;LEAVE +pruefeplausibilitaetFI PER .speicherungdurchfuehren:standardmeldung( +meldungspeicherung,niltext);aktfnr:=fnrerstebezeichnung;aznr:=1; +suchenächstenichtleerezeile;WHILE aktfnr<=fnrerstesfeldletztezeileREP infeld( +aktfnr);fülleprimärindexfelder;search(dnraufsichtszeiten,true); +füllerestlichedbfelder;IF dbstatus<>nullTHEN insert(dnraufsichtszeiten)ELSE +update(dnraufsichtszeiten)FI ;speicherfehlerabfangen;aktfnrINCR +felderprozeile;aznrINCR 1;suchenächstenichtleerezeile;PER ;dbstatus(0);WHILE +dbstatus=0CAND aznr<=datensaetzepromaskeREP fülleprimärindexfelder;delete( +dnraufsichtszeiten);aznrINCR 1;PER .suchenächstenichtleerezeile:WHILE aktfnr +<=fnrerstesfeldletztezeileCAND zeileistleerREP aktfnrINCR felderprozeilePER . +zeileistleer:standardmaskenfeld(aktfnr)+standardmaskenfeld(aktfnr+ +offsetbeginnuhr)+standardmaskenfeld(aktfnr+offsetendeuhr)+standardmaskenfeld( +aktfnr+offsetstundevor)+standardmaskenfeld(aktfnr+offsetstundenach)=niltext. +fülleprimärindexfelder:putwert(fnrazsj,schuljahr);putwert(fnrazhj,halbjahr); +putintwert(fnrazaufsichtszeit,tagnr*stelledestages+aznr);. +füllerestlichedbfelder:putwert(fnrazbezeichnung,standardmaskenfeld(aktfnr)); +IF standardmaskenfeld(aktfnr+offsetstundevor)=niltextTHEN putintwert( +fnraztagstdvor,null)ELSE putintwert(fnraztagstdvor,(tagnr-1)* +stundenprowochentag+int(standardmaskenfeld(aktfnr+offsetstundevor)))FI ;IF +standardmaskenfeld(aktfnr+offsetstundenach)=niltextTHEN putintwert( +fnraztagstdnach,null)ELSE putintwert(fnraztagstdnach,(tagnr-1)* +stundenprowochentag+int(standardmaskenfeld(aktfnr+offsetstundenach)))FI ; +putwert(fnrazbeginnuhr,standardmaskenfeld(aktfnr+offsetbeginnuhr));putwert( +fnrazendeuhr,standardmaskenfeld(aktfnr+offsetendeuhr)).speicherfehlerabfangen +:IF dbstatus<>nullTHEN standardmeldung(meldungspeicherfehler,niltext);return( +1);LEAVE aufsichtszeitenspeichernFI .END PROC aufsichtszeitenspeichern;PROC +aufsichtszeitenkopieren:INT VAR i,altetagnr;aktindex:=null;altetagnr:=tagnr; +tagnr:=nummerfürmo;inittupel(dnraufsichtszeiten);statleseschleife( +dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC fuellenurmaske); +FOR iFROM aktindex*felderprozeile+fnrerstebezeichnungUPTO fnrletztesfeldREP +standardmaskenfeld(niltext,i)PER ;tagnr:=altetagnr;infeld(fnrerstebezeichnung +);return(1);END PROC aufsichtszeitenkopieren;PROC aufsichtszeitenuebernehmen( +BOOL CONST hauptaktion):TEXT VAR geplhj,geplsj;INT VAR i,j,altetagnr;IF NOT +hauptaktionTHEN prüfeobeingangsmaskerichtigangekreuzt;schuljahr:= +schulkenndatum(textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr); +tagnr:=nummerfürmo;fuelledenpuffermitdenaufsichtszeiten;IF datenvorhanden +THEN standardmeldung(meldungfrageuebernehmen,niltext);feldschutz( +fnrfueruebernehmen);feldschutz(fnrfuergeplbearb);feldschutz(fnrabtagfuergepl) +;feldschutz(fnrfueraktbearb);feldschutz(fnrabtagfuerakt);feldfrei( +fnrcursorruhepos);infeld(fnrcursorruhepos);standardnproc;ELSE standardmeldung +(meldungdatenfehlen,niltext);infeld(fnrfueruebernehmen);return(1)FI ELSE +standardmeldung(meldunguebernehmen,niltext);geplhj:=halbjahr;geplsj:= +schuljahr;geplanteshjundsjberechnen(geplhj,geplsj);WHILE datenvorhandenREP +löschealletagebiszumvorliegenden;speicheredenvorliegendentag;tagnrINCR 1; +fuelledenpuffermitdenaufsichtszeiten;PER ;löscheallerestlichentage;enter(2) +FI .prüfeobeingangsmaskerichtigangekreuzt:IF standardmaskenfeld( +fnrfueruebernehmen)=niltextOR standardmaskenfeld(fnrfuergeplbearb)<>niltext +OR standardmaskenfeld(fnrfueraktbearb)<>niltextTHEN standardmeldung( +meldungeingabesinnlos,niltext);infeld(fnrfueruebernehmen);return(1);LEAVE +aufsichtszeitenuebernehmenFI ;IF standardmaskenfeld(fnrabtagfuergepl)<> +niltextTHEN standardmeldung(meldungfeldleerlassen,niltext);infeld( +fnrabtagfuergepl);return(1);LEAVE aufsichtszeitenuebernehmenFI ;IF +standardmaskenfeld(fnrabtagfuerakt)<>niltextTHEN standardmeldung( +meldungfeldleerlassen,niltext);infeld(fnrabtagfuerakt);return(1);LEAVE +aufsichtszeitenuebernehmenFI ;.fuelledenpuffermitdenaufsichtszeiten:aktindex +:=null;datenvorhanden:=FALSE ;altetagnr:=tagnr;inittupel(dnraufsichtszeiten); +statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC +fuellenurpuffer);.löschealletagebiszumvorliegenden:FOR iFROM altetagnrUPTO +tagnr-1REP löschedateneinestagesPER .löschedateneinestages:j:=1;dbstatus(0); +WHILE dbstatus=0CAND j<=datensaetzepromaskeREP putwert(fnrazsj,geplsj); +putwert(fnrazhj,geplhj);putintwert(fnrazaufsichtszeit,i*stelledestages+j); +delete(dnraufsichtszeiten);jINCR 1;PER .speicheredenvorliegendentag:i:=1; +WHILE i<=aktindexREP fülleprimärindexfelder;search(dnraufsichtszeiten,true); +füllerestlichedbfelder;IF dbstatus<>nullTHEN insert(dnraufsichtszeiten)ELSE +update(dnraufsichtszeiten)FI ;speicherfehlerabfangen;iINCR 1;PER ;WHILE +dbstatus=0CAND i<=datensaetzepromaskeREP fülleprimärindexfelder;delete( +dnraufsichtszeiten);iINCR 1;PER .fülleprimärindexfelder:putwert(fnrazsj, +geplsj);putwert(fnrazhj,geplhj);putintwert(fnrazaufsichtszeit,tagnr* +stelledestages+i);.füllerestlichedbfelder:restoretupel(dnraufsichtszeiten, +alteaufsichtszeiten(i));putwert(fnrazsj,geplsj);putwert(fnrazhj,geplhj);. +speicherfehlerabfangen:IF dbstatus<>nullTHEN standardmeldung( +meldungspeicherfehler,niltext);infeld(fnrfueruebernehmen);return(2);LEAVE +aufsichtszeitenuebernehmenFI .löscheallerestlichentage:FOR iFROM altetagnr +UPTO nummerfürsaREP löschedateneinestagesPER .END PROC +aufsichtszeitenuebernehmen;PROC holealledatendestages:TEXT VAR tag;INT VAR i; +setzewochentagindiemaske;holegewünschtentagindiemaske. +setzewochentagindiemaske:SELECT tagnrOF CASE nummerfürmo:tag:=kürzelfürmo +CASE nummerfürdi:tag:=kürzelfürdiCASE nummerfürmi:tag:=kürzelfürmiCASE +nummerfürdo:tag:=kürzelfürdoCASE nummerfürfr:tag:=kürzelfürfrCASE nummerfürsa +:tag:=kürzelfürsaEND SELECT ;standardmaskenfeld(tag,fnrwochentag). +holegewünschtentagindiemaske:aktindex:=null;inittupel(dnraufsichtszeiten); +statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC +fuellenurmaske);FOR iFROM aktindex*felderprozeile+fnrerstebezeichnungUPTO +fnrletztesfeldREP standardmaskenfeld(niltext,i)PER ;.END PROC +holealledatendestages;PROC fuellenurmaske(BOOL VAR b):INT VAR feldnr,stunde; +IF wert(fnrazsj)>schuljahrCOR wert(fnrazhj)>halbjahrCOR intwert( +fnrazaufsichtszeit)>tagnr*stelledestages+datensaetzepromaskeCOR dbstatus<>0 +THEN b:=TRUE ELSE IF intwert(fnrazaufsichtszeit)>tagnr*stelledestagesTHEN +aktindexINCR eins;feldnr:=fnrerstebezeichnung+(aktindex-1)*felderprozeile; +standardmaskenfeld(wert(fnrazbezeichnung),feldnr);feldnrINCR 1;stunde:= +intwert(fnraztagstdvor);IF stunde>0THEN stunde:=(stunde-1)MOD +stundenprowochentag+1;standardmaskenfeld(text(stunde),feldnr);ELSE +standardmaskenfeld(niltext,feldnr);FI ;feldnrINCR 1;stunde:=intwert( +fnraztagstdnach);IF stunde>0THEN stunde:=(stunde-1)MOD stundenprowochentag+1; +standardmaskenfeld(text(stunde),feldnr);ELSE standardmaskenfeld(niltext, +feldnr);FI ;feldnrINCR 1;standardmaskenfeld(wert(fnrazbeginnuhr),feldnr); +feldnrINCR 1;standardmaskenfeld(wert(fnrazendeuhr),feldnr);FI FI END PROC +fuellenurmaske;PROC fuellenurpuffer(BOOL VAR b):IF wert(fnrazsj)>schuljahr +COR wert(fnrazhj)>halbjahrCOR (datenvorhandenCAND intwert(fnrazaufsichtszeit) +>tagnr*stelledestages+datensaetzepromaske)COR dbstatus<>0THEN b:=TRUE ELSE +IF intwert(fnrazaufsichtszeit)>tagnr*stelledestagesTHEN IF NOT datenvorhanden +THEN datenvorhanden:=TRUE ;tagnr:=intwert(fnrazaufsichtszeit)DIV +stelledestagesFI ;aktindexINCR eins;savetupel(dnraufsichtszeiten, +alteaufsichtszeiten(aktindex));FI FI END PROC fuellenurpuffer;BOOL PROC +falschezeitangabe(INT CONST zeit,fnr,INT VAR status):IF standardmaskenfeld( +fnr)=niltextTHEN LEAVE falschezeitangabeWITH 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 falschezeitangabe +WITH TRUE FI ;IF zeit59OR zeitDIV 100>24THEN +standardmeldung(meldungfalschezeitangabe,niltext);status:=fnr;TRUE ELSE +FALSE FI END PROC falschezeitangabe;END PACKET erfaufsichtszeiten; + -- cgit v1.2.3