SELECT B.Firm_ID FROM -- Schválení dodavatelé a jejích schválení na počtu skupin oblastí
(
SELECT A.Firm_ID AS Firm_ID, S.Sel_ID AS Sel_ID FROM -- Schválení dodavatelé spojení se skupinou oblastí
(
SELECT F.ID AS Firm_ID, S.ApprovingArea_ID AS ApprovingArea_ID -- Schválení dodavatelé
FROM Firms F
JOIN ApprovedSuppliers S ON S.Firm_ID = F.ID
WHERE
F.Firm_ID IS NULL AND
S.ValidFromDate$DATE <= :DocDate AND
S.IsApproved = 'A' AND
S.ApprovingArea_ID IN (SELECT Obj_ID FROM SelDat WHERE Sel_ID = :Sel_ApprovingAreas)
GROUP BY F.ID, S.ApprovingArea_ID
UNION
SELECT F.ID AS Firm_ID, S2.ApprovingArea_ID AS ApprovingArea_ID -- Schválení dodavatelé ze schválených předků
FROM Firms F
JOIN Firms F2 ON F2.Firm_ID = F.ID
JOIN ApprovedSuppliers S2 ON F2.ID = S2.Firm_ID
WHERE
F.Firm_ID IS NULL AND
S2.ValidFromDate$DATE <= :DocDate AND
NOT EXISTS (SELECT ID FROM ApprovedSuppliers S WHERE S.Firm_ID = F.ID AND S.ApprovingArea_ID = S2.ApprovingArea_ID AND S.ValidFromDate$DATE <= :DocDate) AND
S2.ApprovingArea_ID IN (SELECT Obj_ID FROM SelDat WHERE Sel_ID = :Sel_ApprovingAreas)
GROUP BY F.ID, S2.ApprovingArea_ID
HAVING
-- Musí být všichni předchůdci schváleni
SUM(CASE WHEN S2.IsApproved = 'A' THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN S2.IsApproved = 'N' THEN 1 ELSE 0 END) = 0
) A
JOIN SelDat S ON S.Obj_ID = A.ApprovingArea_ID
WHERE S.Sel_ID IN (SELECT SD.Obj_ID FROM SelDat SD WHERE SD.Sel_ID = :Sel_ApprAreaGroups) -- Omezení pouze za skupiny
GROUP BY A.Firm_ID, S.Sel_ID
) B
GROUP BY B.Firm_ID
HAVING COUNT(B.Sel_ID) = (SELECT COUNT(Obj_ID) FROM SelDat WHERE Sel_ID = :Sel_ApprAreaGroups)Generated by ABRA Software a.s. 27.10.2021 16:35:29