Autor Thema: Zeitüberschneidung prüfen  (Gelesen 3634 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Zeitüberschneidung prüfen
« 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
« Letzte Änderung: 06.11.08 - 17:23:00 von bikerboy »
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Zeitüberschneidung prüfen
« Antwort #1 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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Zeitüberschneidung prüfen
« Antwort #2 am: 06.11.08 - 18:34:31 »
Wozu diese ganzen @TextToTime Dingens? Sind das keine Datums/Zeitfelder?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Zeitüberschneidung prüfen
« Antwort #3 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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Zeitüberschneidung prüfen
« Antwort #4 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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Zeitüberschneidung prüfen
« Antwort #5 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
Situs vilate in isse tabernit.

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Zeitüberschneidung prüfen
« Antwort #6 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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz