BEGIN
/* zjistime zacatek a konec casoveho intervalu vsech zapsanych period */
SELECT
MIN(DateFrom$Date), MAX(DateTo$Date)
FROM
Periods
INTO
mMin, mMax;
/* Plati ze kdyz je vstupni "Datum od" az za rozsahem intervalu vratime posledni obdobi */
BOOL = 0;
IF (ADateFrom > mMax) THEN BEGIN
/* datum je az za vsemi definovanymi obdobimy, vrati se posledni obdobi */
SELECT
id
FROM
Periods
WHERE
DateTo$Date = :mMax
INTO
RPeriod_ID;
BOOL = 1;
END
ELSE BEGIN
IF (ADateTo > mMin) THEN BEGIN
/* zadany interval od..do lezi v definvanych obdobich. */
SELECT
ID
FROM
Periods
WHERE
DateFrom$DATE = (SELECT MIN(DateFrom$DATE) FROM Periods WHERE DateTo$DATE > :ADateFrom)
INTO
RPeriod_ID;
BOOL = 1;
END
END
/* Pokud je zadáno minimální možné období, tak to musíme ověřit a případně nastavit */
IF ( (IN_FIRST_POSSIBLE_PERIOD IS NOT NULL) AND
(IN_FIRST_POSSIBLE_PERIOD <> '') AND
(IN_FIRST_POSSIBLE_PERIOD <> '0000000000') AND
(BOOL <> 0) )
THEN BEGIN
/* Bylo zadáno minimální počáteční období */
/* Pořadové číslo vypočítaného období */
SELECT sequencenumber FROM periods WHERE id = :RPeriod_ID INTO mSEQUENCE_NUMBER;
/* Pořadové číslo předaného období */
SELECT sequencenumber, datefrom$date
FROM periods
WHERE id = :IN_FIRST_POSSIBLE_PERIOD
INTO mSEQUENCE_NUMBER2, mMIN;
IF (ADateTo <= mMIN) THEN BEGIN
/* */
BOOL = 0;
END
IF (mSEQUENCE_NUMBER < mSEQUENCE_NUMBER2) THEN BEGIN
/* Vrácené období bude předané období */
RPeriod_ID = IN_FIRST_POSSIBLE_PERIOD;
END
END
/* Na závěr provést SUSPEND */
IF (BOOL <> 0) THEN
SUSPEND;
END;