Třídová akce

Popis:
Vrátí seznam schválených firem pro zadané oblasti schvalování. Vstup: Sel_ApprovingAreas - Odkaz do tabulky SelDat, kde jsou identifikátory oblastí schvalování. Sel_Firms - Odkaz do tabulky SelDat, kde jsou identifikátory firem, za které lze omezit hledání. Výstup: Seznam schválených firem.
Kód:
6
Tělo:
SELECT F.ID AS Firm_ID -- Schválení dodavatelé
FROM Firms F
JOIN ApprovedSuppliers S ON S.Firm_ID = F.ID
WHERE 
  -- Hledám v nepředchůdcích
  F.Firm_ID IS NULL AND
  (:Sel_Firms = CAST('' AS VARCHAR(10)) OR F.ID IN (SELECT COALESCE(FS.Firm_ID, FS.ID) AS Firm_ID FROM SelDat SD JOIN Firms FS ON FS.ID = SD.Obj_ID WHERE SD.Sel_ID = :Sel_Firms)) AND
  S.IsApproved = 'A' AND
  S.ApprovingArea_ID IN (SELECT Obj_ID FROM SelDat WHERE Sel_ID = :Sel_ApprovingAreas)
GROUP BY F.ID
UNION
SELECT F.ID  AS Firm_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 
  -- Hledám v nepředchůdcích
  F.Firm_ID IS NULL AND
  (:Sel_Firms = CAST('' AS VARCHAR(10)) OR F.ID IN (SELECT COALESCE(FS.Firm_ID, FS.ID) AS Firm_ID FROM SelDat SD JOIN Firms FS ON FS.ID = SD.Obj_ID WHERE SD.Sel_ID = :Sel_Firms)) AND
NOT EXISTS (SELECT ID FROM ApprovedSuppliers S WHERE S.Firm_ID = F.ID AND S.ApprovingArea_ID = S2.ApprovingArea_ID) AND
S2.ApprovingArea_ID IN (SELECT Obj_ID FROM SelDat WHERE Sel_ID = :Sel_ApprovingAreas)
GROUP BY F.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 

Generated by ABRA Software a.s. 27.10.2021 16:35:29