BEGIN
/* Vrácení pokladních príjmu */
mRELDEF = 9;
FOR
SELECT
A.id, A.docdate$date,
DQ.Code || '-' || A.OrdNumber || '/' || P.Code,
A.description, F.name, A.RoundingAmount, A.LocalRoundingAmount,
DQ.Code, A.OrdNumber, P.Code
FROM
refundedcashreceived A
JOIN Periods P ON P.ID = A.Period_ID
JOIN DocQueues DQ ON DQ.ID = A.DocQueue_ID
JOIN firms F ON F.ID = A.Firm_ID
WHERE
( (:IN_DATE_FROM$DATE <= A.docdate$date) AND (A.docdate$date < :IN_DATE_TO$DATE) ) AND
(A.cashdesk_id = :IN_CASHDESK_ID) AND
( (:IN_DOCQUEUE_SEL_ID = '') OR
(A.docqueue_id IN (SELECT obj_id FROM SELDAT WHERE sel_id = :IN_DOCQUEUE_SEL_ID)) ) AND
(((A.Firm_ID in (select OBJ_ID from SELDAT where SEL_ID = :In_Firm_Sel_ID))
or
(A.Firm_ID in (SELECT ID FROM Firms WHERE Firm_ID in (select OBJ_ID from SELDAT where SEL_ID = :In_Firm_Sel_ID))))
OR
:In_Firm_Sel_ID = '')
and
( (:IN_CREATEDBY_SEL_ID = '') OR
(A.createdby_id IN (SELECT obj_id FROM SELDAT WHERE sel_id = :IN_CREATEDBY_SEL_ID)) ) AND
( (:IN_CORRECTEDBY_SEL_ID = '') OR
(A.correctedby_id IN (SELECT obj_id FROM SELDAT WHERE sel_id = :IN_CORRECTEDBY_SEL_ID)) ) AND
( (:IN_ACCOUNTING = '.') OR
((:IN_ACCOUNTING = '<') AND (0 < (SELECT COUNT(*) FROM locatebookentry(:mRELDEF, A.id))) ) OR
((:IN_ACCOUNTING = '=') AND (0 = (SELECT COUNT(*) FROM locatebookentry(:mRELDEF, A.id))) ) )
INTO
OUT_DOCUMENT_ID, OUT_DOC_DATE$DATE, OUT_DISPLAYNAME, OUT_DOCUMENT_DESCRIPTION,
OUT_FIRM_NAME, mRoundingAmount, mLocalRoundingAmount, OUT_DQCode, OUT_OrdNumber, OUT_PCode
DO BEGIN
/* príznak pro správné razení dokladu typu príjem - výdej */
OUT_ORDER_KIND = 2;
/* Získáme cenu z rádek... */
SELECT
SUM(A2.tamount) * (-1), SUM(A2.localtamount) * (-1)
FROM
refundedcashreceived2 A2
WHERE
(A2.parent_id = :OUT_DOCUMENT_ID) AND
(:InDivisionSelID = '' or
A2.Division_ID in
(
SELECT Bx.ID FROM Divisions Bx WHERE Bx.Hidden = 'N' AND
( (Bx.ID in (select OBJ_ID from SELDAT where SEL_ID = :InDivisionSelID)) OR
((:InDivisionsWithChilds in ('1', 'A')) and (Bx.ID in (select ID from Sys$Divisions2 where Superior_ID in (select OBJ_ID from SELDAT where SEL_ID = :InDivisionSelID)))))
)
) and
(:InBusOrderSelID = '' or
A2.BusOrder_ID in
(
SELECT Bx.ID FROM BusOrders Bx WHERE Bx.Hidden = 'N' AND
( (Bx.ID in (select OBJ_ID from SELDAT where SEL_ID = :InBusOrderSelID)) OR
((:InBusOrdersWithChilds in ('1', 'A')) and (Bx.ID in (select X.ID from Sys$BusOrders2 X where X.Superior_ID in (select OBJ_ID from SELDAT where SEL_ID = :InBusOrderSelID)))))
)
) and
(:In_BusTransactionSelID = '' or
A2.BusTransaction_ID in
(
SELECT Bx.ID FROM BusTransactions Bx WHERE Bx.Hidden = 'N' AND
( (Bx.ID in (select OBJ_ID from SELDAT where SEL_ID = :In_BusTransactionSelID)) OR
((:InBusTransactionsWithChilds in ('1', 'A')) and (Bx.ID in (select X.ID from Sys$BusTransactions2 X where X.Superior_ID in (select OBJ_ID from SELDAT where SEL_ID = :In_BusTransactionSelID)))))
)
) and
(:InBusProjectSelID = '' or
A2.BusProject_ID in
(
SELECT Bx.ID FROM BusProjects Bx WHERE Bx.Hidden = 'N' AND
( (Bx.ID in (select OBJ_ID from SELDAT where SEL_ID = :InBusProjectSelID)) OR
((:InBusProjectsWithChilds in ('1', 'A')) and (Bx.ID in (select X.ID from Sys$BusProjects2 X where X.Superior_ID in (select OBJ_ID from SELDAT where SEL_ID = :InBusProjectSelID)))))
)
)
INTO
mAMOUNT, mLOCAL_AMOUNT;
EXECUTE PROCEDURE init_float :mAMOUNT, 0 RETURNING_VALUES :OUT_AMOUNT;
EXECUTE PROCEDURE init_float :mLOCAL_AMOUNT, 0 RETURNING_VALUES :OUT_LOCALAMOUNT;
IF ((OUT_AMOUNT <> 0) OR (OUT_LOCALAMOUNT <> 0)) THEN BEGIN
/* Pokud je vrácen císelný výsledek a ten ješte je ruzný od nuly, pak
je nalezena veta urcená ke vrácení z procedury. */
SELECT
MAX(out_displayname)
FROM
locatebookentry(:mRELDEF, :OUT_DOCUMENT_ID)
INTO
OUT_BOOKENTRY_DISPLAYNAME;
IF (OUT_AMOUNT <> 0) THEN
OUT_AMOUNT = OUT_AMOUNT - mRoundingAmount;
IF (OUT_LOCALAMOUNT <> 0) THEN
OUT_LOCALAMOUNT = OUT_LOCALAMOUNT - mLocalRoundingAmount;
SUSPEND;
END
END
END;