Třídová akce

Popis:
Vrátí seznam schválených firem pro zvolené skupiny oblastí schvalování a datum schvalování. Schválený dodavatel je takový, který je schválen alespoň pro jednu oblast ze zadaných skupin oblastí. Vstup: DocDate - Datum, pro který se vyhodnocuje schvalování. Sel_ApprovingAreas - Odkaz do tabulky SelDat, kde jsou identifikátory všech oblastí schvalování. Sel_ApprovingAreas - Odkaz do tabulky SelDat, kde jsou identifikátory všech oblastí schvalování. Sel_ApprAreaGroups - Odkaz do tabulky SelDat, kde jsou identifikátory skupin. Identifikátory skupin jsou znovu odkazy do tabulky SelDat, kde jsou umístěny identifikátory oblastí pro danou skupinu oblastí. Výstup: Seznam identifikátorů schválených dodavatelů.
Kód:
4
Tělo:
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