SET TERM ^ ;
ALTER PROCEDURE PR_URLOPY (
ROK1 INTEGER,
ROK_BO INTEGER,
IDWYDZ VARCHAR(10) )
RETURNS (
IDPRAC VARCHAR(10),
NAZPRAC VARCHAR(50),
AKTYWNY SMALLINT,
ORGUNIT VARCHAR(10),
GRUPA VARCHAR(10),
IDSTAN VARCHAR(10),
NAZSTAN VARCHAR(50),
ROK INTEGER,
WYMIAR_BIEZ INTEGER,
EKWIWALENT_BIEZ INTEGER,
POPRZEDNI INTEGER,
URLOP_RAZEM INTEGER,
WYK_UW INTEGER,
WYK_UWZ INTEGER,
WYK_RAZEM INTEGER,
POZOSTALY INTEGER,
WYK_UW_BIEZ INTEGER,
WYK_UWZ_BIEZ INTEGER )
AS
BEGIN
DELETE FROM TEMP_URLOP_WYK;
INSERT INTO TEMP_URLOP_WYK (IDPRAC, ROK, TYP, ILOSC)
SELECT
kb.IDPRAC,
EXTRACT(YEAR FROM k.DATA) AS ROK,
ko.IDOPER AS TYP,
SUM(DATEDIFF(HOUR, CZASSTART, CZASSTOP)/8) AS ILOSC
FROM
KARTYOPERACJE ko
LEFT JOIN KARTY k ON k.IDKARTY=ko.IDKARTY
LEFT JOIN KARTYBRYGADY kb ON kb.IDPARTII=ko.idpARTII
LEFT JOIN PARAMS pm ON pm.ID=1
WHERE
( EXTRACT(YEAR FROM k.DATA) >= :ROK_BO )
AND
( IDOPER = pm.IDURLOP OR IDOPER = pm.IDURLOPZ )
GROUP BY
kb.IDPRAC, ROK, TYP;
FOR
SELECT
p.IDPRAC
, p.NAZPRAC
, p.AKTYWNY
, p.ORGUNIT
, p.GRUPA
, p.IDSTAN
, s.NAZSTAN
, u.ROK
, u.WYMIAR AS WYMIAR_BIEZ
, COALESCE(u.EKWIWALENT, 0) AS EKWIWALENT_BIEZ
, COALESCE(dowyk.ILOSC, 0) - u.WYMIAR AS ZALEGLY
, COALESCE(dowyk.ILOSC, 0) AS URLOP_RAZEM
, COALESCE(wyk.ILOSC, 0) AS WYK_UW
, COALESCE(wykuz.ILOSC, 0) AS WYK_UWZ
, COALESCE(wyk.ILOSC, 0) + COALESCE(wykuz.ILOSC, 0) AS WYK_RAZEM
, COALESCE(dowyk.ILOSC, 0) - COALESCE(wyk.ILOSC, 0) - COALESCE(wykuz.ILOSC, 0) AS POZOSTALY
, COALESCE(wyk_biez.ILOSC,0) AS WYK_UW_BIEZ
, COALESCE(wykuz_biez.ILOSC,0) AS WYK_UWZ_BIEZ
FROM V_PRACOWNICY p
LEFT JOIN STANOWISKA s ON s.IDSTAN=p.IDSTAN
LEFT JOIN PARAMS pm ON pm.ID=1
LEFT JOIN URLOPY u ON u.IDPRAC=p.IDPRAC
LEFT JOIN
(
SELECT
IDPRAC,
SUM(WYMIAR-COALESCE(EKWIWALENT, 0)) AS ILOSC,
SUM(COALESCE(EKWIWALENT, 0)) AS EKWIWALENT
FROM
URLOPY u
WHERE
u.ROK>=:ROK_BO AND u.ROK<=:ROK1
GROUP BY
IDPRAC
) dowyk ON dowyk.IDPRAC=u.IDPRAC
LEFT JOIN (SELECT idprac, SUM(ilosc) AS ILOSC FROM TEMP_URLOP_WYK u LEFT JOIN PARAMS pm ON pm.ID=1 WHERE u.ROK<=:ROK1 AND u.TYP=pm.IDURLOP GROUP BY u.IDPRAC) wyk ON wyk.IDPRAC=p.idprac
LEFT JOIN (SELECT idprac, SUM(ilosc) AS ILOSC FROM TEMP_URLOP_WYK u LEFT JOIN PARAMS pm ON pm.ID=1 WHERE u.ROK<=:ROK1 AND u.TYP=pm.IDURLOPZ GROUP BY u.IDPRAC) wykuz ON wykuz.IDPRAC=p.idprac
LEFT JOIN (SELECT idprac, SUM(ilosc) AS ILOSC FROM TEMP_URLOP_WYK u LEFT JOIN PARAMS pm ON pm.ID=1 WHERE u.ROK=:ROK1 AND u.TYP=pm.IDURLOP GROUP BY u.IDPRAC) wyk_biez ON wyk_biez.IDPRAC=p.idprac
LEFT JOIN (SELECT idprac, SUM(ilosc) AS ILOSC FROM TEMP_URLOP_WYK u LEFT JOIN PARAMS pm ON pm.ID=1 WHERE u.ROK=:ROK1 AND u.TYP=pm.IDURLOPZ GROUP BY u.IDPRAC) wykuz_biez ON wykuz_biez.IDPRAC=p.idprac
WHERE
u.ROK=:ROK1 AND p.OUWYD LIKE :idwydz
ORDER BY
p.NAZPRAC
INTO IDPRAC, NAZPRAC, AKTYWNY, ORGUNIT, GRUPA, IDSTAN, NAZSTAN, ROK, WYMIAR_BIEZ, EKWIWALENT_BIEZ, POPRZEDNI, URLOP_RAZEM, WYK_UW, WYK_UWZ, WYK_RAZEM, POZOSTALY, WYK_UW_BIEZ, WYK_UWZ_BIEZ
do BEGIN
SUSPEND;
END
END^
SET TERM ; ^