Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: bikerboy am 06.11.08 - 17:20:01

Titel: Zeitüberschneidung prüfen
Beitrag von: bikerboy am 06.11.08 - 17:20:01
Hallo habe heute einen Code geschrieben, der auf Zeitüberschneidungen Prüfen soll, bevor ein neuer Eintrag in eine List aufgenommen wird.

Dazu gehe ich vor jeder Eintragung die Liste durch und überprüfe Sie mit folgendem Code.

Das die Werte leer sind wird von vorneherein unterdrückt. Wichtig der Code hat heute Mittag gefunzt.

Code
_startDate := 	@TextToTime(trvl_Pos_StartDATE);
_startTime := 	@TextToTime(trvl_Pos_StartTIME);
_endDate := 	@TextToTime(trvl_Pos_EndDATE);
_endTime := 	@TextToTime(trvl_Pos_EndTIME);

@If(_startDate > _endDate ; @Return(@Prompt([Ok]; _errorTitle; _errorStartBeforeEnd));"");
@If(_startDate = _endDate & _endTime < _startTime ; @Return(@Prompt([Ok]; _errorTitle; _errorStartBeforeEnd_Time));"");

_tmpStartDate := _startDate ;
_tmpEndDate := _endDate ;
_tmpDays := 0;

@Transform(posDataString ; "_position" ;
	@Do(

		_startDate_Pos := 	@TextToTime(@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1));
		_startTime_Pos := 	@TextToTime(@Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1));
		_endDate_Pos := 	@TextToTime(@Left(@Right(_position;_dLim1 + "EndDate" + _dLim2);_dLim1));
		_endTime_Pos := 	@TextToTime(@Left(@Right(_position;_dLim1 + "EndTime" + _dLim2);_dLim1));


		@If(
			_startDate > _startDate_Pos 	& _endDate < _endDate_Pos 	; 	@Return(@Prompt([Ok];_errorTitle;_errorConflict));
			_startDate = _endDate_Pos 	& _startTime < _endTime_Pos; 	@Return(@Prompt([Ok];_errorTitle;_errorConflict));
			_endDate = _startDate_Pos		& _endTime > _startTime_Pos; 	@Return(@Prompt([Ok];_errorTitle;_errorConflict));
			_startDate < _startDate_Pos	& _endDate > _startDate_Pos; 	@Return(@Prompt([Ok];_errorTitle;_errorConflict));
			@Prompt([Ok];"Hinweis"; "Kein Konflikt")
		)
	)
);

Nun sagt er mir aber das kein Konflikt bestehe
Titel: Re: Zeitüberschneidung prüfen
Beitrag von: bikerboy am 06.11.08 - 18:27:58
So neue Erkenntnisse

bei der ersten Fehlereingabe bekommt er das mit, meckert es an, wenn ich dann nochmal auf den selben Knopf drücke, dann meckert er nicht, sagt mir nicht , dass es keine Konflikt gibt und setzt die Position einfach ein
Titel: Re: Zeitüberschneidung prüfen
Beitrag von: m3 am 06.11.08 - 18:34:31
Wozu diese ganzen @TextToTime Dingens? Sind das keine Datums/Zeitfelder?
Titel: Re: Zeitüberschneidung prüfen
Beitrag von: bikerboy am 06.11.08 - 18:48:11
Die oberen schon, habe ich mittlerweile auch wieder rausgenommen.

aktueller Code:

Code
_startDate := 	trvl_Pos_StartDATE;
_startTime := 	trvl_Pos_StartTIME;
_endDate := 	trvl_Pos_EndDATE;
_endTime := 	trvl_Pos_EndTIME;

@If(_startDate > _endDate ; @Return(@Prompt([Ok]; _errorTitle; _errorStartBeforeEnd));"");
@If(_startDate = _endDate & _endTime < _startTime ; @Return(@Prompt([Ok]; _errorTitle; _errorStartBeforeEnd_Time));"");


@Transform(posDataString ; "_position" ;
	@Do(
		@Prompt([Ok]; "Test" ; _position);
		_startDate_Pos := 	@TextToTime(@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1));
		_startTime_Pos := 	@TextToTime(@Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1));
		_endDate_Pos := 	@TextToTime(@Left(@Right(_position;_dLim1 + "EndDate" + _dLim2);_dLim1));
		_endTime_Pos := 	@TextToTime(@Left(@Right(_position;_dLim1 + "EndTime" + _dLim2);_dLim1));


		@If(
			_startDate > _startDate_Pos 	& _endDate < _endDate_Pos; 	@Return(@Prompt([Ok];"Fehler1";_errorConflict));
			_startDate < _startDate_Pos	& _endDate > _endDate_Pos; 	@Return(@Prompt([Ok];"Fehler2";_errorConflict));
			_startDate > _startDate_Pos	& _startDate < _endDatePos;		@Return(@Prompt([Ok];"Fehler3";_errorConflict));
			_endDate > _startDate_Pos		& _endDate < _endDatePos;		@Return(@Prompt([Ok];"Fehler4";_errorConflict));
			_startDate = _endDate_Pos 	& _startTime < _endTime_Pos; 	@Return(@Prompt([Ok];"Fehler5";_errorConflict));
			_endDate = _startDate_Pos		& _endTime > _startTime_Pos; 	@Return(@Prompt([Ok];"Fehler6";_errorConflict));			
			@Prompt([Ok];"Hinweis"; "Kein Konflikt")
		);@True
	)
);

bin auch schon ein bisschen weiter, aber es passiert immer noch das er mir gar nichts meldet was eigentlich nicht sein darf
Titel: Re: Zeitüberschneidung prüfen
Beitrag von: bikerboy am 06.11.08 - 19:27:45
So nun kann ich beruhigt Feierabend machen.

Code
_startDate := 	trvl_Pos_StartDATE;
_startTime := 	trvl_Pos_StartTIME;
_endDate := 	trvl_Pos_EndDATE;
_endTime := 	trvl_Pos_EndTIME;

_startDateTime 	:= @TextToTime(@Text(_startDate) + " " + @Text(_startTime));
_endDateTime 	:= @TextToTime(@Text(_endDate) + " " + @Text(_endTime));

@If(_startDate > _endDate ; @Return(@Prompt([Ok]; _errorTitle; _errorStartBeforeEnd));"");
@If(_startDate = _endDate & _endTime < _startTime ; @Return(@Prompt([Ok]; _errorTitle; _errorStartBeforeEnd_Time));"");


@Transform(posDataString ; "_position" ;
	@Do(
		@Prompt([Ok]; "Test" ; _position);
		_startDate_Pos := 	@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1);
		_startTime_Pos := 	@Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1);
		_endDate_Pos := 	@Left(@Right(_position;_dLim1 + "EndDate" + _dLim2);_dLim1);
		_endTime_Pos := 	@Left(@Right(_position;_dLim1 + "EndTime" + _dLim2);_dLim1);
		
		_startDateTime_Pos := @TextToTime(@Text(_startDate_Pos) + " " + @Text(_startTime_Pos));
		_endDateTime_Pos := @TextToTime(@Text(_endDate_Pos) + " " + @Text(_endTime_Pos));

		@If(
	_startDateTime > _startDateTime_Pos & _endDateTime < _endDateTime_Pos ;	@Return(@Prompt([Ok];"Fehler1";_errorConflict));
	_startDateTime < _startDateTime_Pos & _endDateTime > _endDateTime_Pos ;	@Return(@Prompt([Ok];"Fehler2";_errorConflict));
	_startDateTime > _startDateTime_Pos & _startDateTime < _endDateTime_Pos ;	@Return(@Prompt([Ok];"Fehler3";_errorConflict));
	_endDateTime < _startDateTime_Pos & _endDateTime < _endDateTime_Pos ;	@Return(@Prompt([Ok];"Fehler4";_errorConflict));
	""
		);@True
	)
);

Hat dem ersten Versuch gehalten, Feinheiten werden morgen geprüft
Titel: Re: Zeitüberschneidung prüfen
Beitrag von: LN4ever am 07.11.08 - 11:43:03
Lieber Robert,

ich habe mir gar nicht alle Fallunterscheidungen angeschaut, denn es sind auf jeden Fall zu viele. Zwei Termine haben genau dann eine Zeitüberschneidung, wenn enddate > startdate und enddatepos >= startdatepos und

startdatepos < enddate & enddatepos > startdate

Diese eine Bedingung bildet alle Fälle ab.

Ich weiß, daß viele damit Probleme haben - und das führt so weit, daß man Kalendereinträge nur zum Teil als Maßgabe für Verfügbarkeit heranziehen kann, weil es bis heute niemand aufgefallen ist, daß zu jeder Terminbuchung eine benutzerspezifische Zusatzbuchung für Vor- und Nachbereitung gehört, die an den Haupttermin gekoppelt wird. Userspezifisch, weil diese Zeit - vor allem Reisezeit - bei jedem Empfänger einer Einladung unterschiedlich sein kann.

Gruß

Norbert
Titel: Re: Zeitüberschneidung prüfen
Beitrag von: bikerboy am 07.11.08 - 14:58:56
Danke lieber Norbert,

meine Sache hatte ja auch funktioniert, aber deine ist wesentlich eleganter, wahrscheinlich hätte ich das weiterhin so gelassen, aber deine Version ist wesentlich kompakter.

Danke dir