Advertisement
pavelhodek

Untitled

May 7th, 2013
1,150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 10.48 KB | None | 0 0
  1. CREATE FUNCTION [dbo].[CCAK_VYSV_PredmetyStudenta] (
  2.     @PAR_ORGANIZACE_ID ID,
  3.     @PAR_OBDOBI_ID_R ID,
  4.     @PAR_OBDOBI_ID_P ID,
  5.     @PAR_SKUPINA_ID ID,
  6.     @PAR_OSOBA_ID ID,
  7.     @PAR_VYSVEDCENI_ID ID
  8. )
  9. RETURNS @PREDMETY_TABLE TABLE (
  10.     ORGANIZACE_ID ID,
  11.     VYSVEDCENI_ID ID,
  12.     OBDOBI_ID_R ID,
  13.     OBDOBI_ID_P ID,
  14.     OSOBA_ID ID,
  15.     REALIZACE_ID ID,
  16.     NAZEV VARCHAR(255),
  17.     PORADI_NA_VYSVEDCENI INT,
  18.     PRIZNAK_ZAMEK BIT,
  19.     PRIZNAK_DRUH_PREDMETU VARCHAR(10)
  20. )
  21. AS
  22. BEGIN
  23.     DECLARE
  24.         @POUZIT_STUDIJNI_PLAN BIT,
  25.         @MA_STUDENT_ULOZENE_VYSVEDCENI BIT
  26.  
  27.     -- zamezeni parameter sniffingu (prekopirovani parametru do promennych)
  28.     DECLARE
  29.         @ORGANIZACE_ID ID,
  30.         @OBDOBI_ID_R ID,
  31.         @OBDOBI_ID_P ID,
  32.         @SKUPINA_ID ID,
  33.         @OSOBA_ID ID,
  34.         @VYSVEDCENI_ID ID
  35.  
  36.     SET @ORGANIZACE_ID = @PAR_ORGANIZACE_ID
  37.     SET @OBDOBI_ID_R = @PAR_OBDOBI_ID_R
  38.     SET @OBDOBI_ID_P = @PAR_OBDOBI_ID_P
  39.     SET @SKUPINA_ID = @PAR_SKUPINA_ID
  40.     SET @OSOBA_ID = @PAR_OSOBA_ID
  41.     SET @VYSVEDCENI_ID = @PAR_VYSVEDCENI_ID
  42.  
  43.  
  44.     SET @POUZIT_STUDIJNI_PLAN = CASE WHEN (dbo.CCAK_CtiParametrChar(@ORGANIZACE_ID, NULL, NULL, 'POUZIVAT_UCEBNI_PLAN') = 'ANO') THEN 1 ELSE 0 END;
  45.  
  46.     SET @MA_STUDENT_ULOZENE_VYSVEDCENI = CASE WHEN EXISTS (
  47.             SELECT NULL
  48.             FROM CCAK_VYSVEDCENI
  49.             WHERE ORGANIZACE_ID = @ORGANIZACE_ID
  50.             AND OBDOBI_ID_R = @OBDOBI_ID_R
  51.             AND OBDOBI_ID_P = @OBDOBI_ID_P
  52.             AND SKUPINA_ID = @SKUPINA_ID
  53.             AND OSOBA_ID = @OSOBA_ID   
  54.     ) THEN 1 ELSE 0 END;
  55.    
  56.    
  57.     -- zkusim najit ulozenou definici vysvedceni studenta
  58.     IF (@VYSVEDCENI_ID IS NULL)
  59.     BEGIN
  60.         SET @VYSVEDCENI_ID = (
  61.             SELECT VYSVEDCENI_ID
  62.             FROM CCAK_VYSVEDCENI
  63.             WHERE ORGANIZACE_ID = @ORGANIZACE_ID
  64.             AND OBDOBI_ID_R = @OBDOBI_ID_R
  65.             AND OBDOBI_ID_P = @OBDOBI_ID_P
  66.             AND SKUPINA_ID = @SKUPINA_ID
  67.             AND OSOBA_ID = @OSOBA_ID
  68.             );
  69.     END
  70.  
  71.     -- zkusim najit ulozenou definici vysvedceni tridy
  72.     IF (@VYSVEDCENI_ID IS NULL)
  73.     BEGIN
  74.         SET @VYSVEDCENI_ID = (
  75.             SELECT VYSVEDCENI_ID
  76.             FROM CCAK_VYSVEDCENI
  77.             WHERE ORGANIZACE_ID = @ORGANIZACE_ID
  78.             AND OBDOBI_ID_R = @OBDOBI_ID_R
  79.             AND OBDOBI_ID_P = @OBDOBI_ID_P
  80.             AND SKUPINA_ID = @SKUPINA_ID
  81.             AND OSOBA_ID IS NULL
  82.             );
  83.     END
  84.    
  85.     IF (@VYSVEDCENI_ID IS NULL)
  86.         RETURN
  87.    
  88.    
  89.     -- nacteni ulozenych predmetu osoby
  90.     INSERT INTO @PREDMETY_TABLE (
  91.         ORGANIZACE_ID,
  92.         VYSVEDCENI_ID,
  93.         OBDOBI_ID_R,
  94.         OBDOBI_ID_P,
  95.         OSOBA_ID,
  96.         REALIZACE_ID,
  97.         NAZEV,
  98.         PORADI_NA_VYSVEDCENI,
  99.         PRIZNAK_ZAMEK,
  100.         PRIZNAK_DRUH_PREDMETU  
  101.     )
  102.     SELECT
  103.     vys.ORGANIZACE_ID, vys.VYSVEDCENI_ID, vys.OBDOBI_ID_R, vys.OBDOBI_ID_P, @OSOBA_ID, vys_real.REALIZACE_ID, REAL.NAZEV, vys_real.PORADI, vys_real.PRIZNAK_ZAMEK
  104.     , REAL.PRIZNAK_DRUH_PREDMETU
  105.     FROM CCAK_VYSVEDCENI vys
  106.     INNER JOIN CCAK_VYSVEDCENI_REALIZACE vys_real ON vys_real.VYSVEDCENI_ID = vys.VYSVEDCENI_ID
  107.     INNER JOIN CCAK_REALIZACE_VZD_JEDNOTEK REAL ON REAL.ORGANIZACE_ID = vys.ORGANIZACE_ID AND REAL.OBDOBI_ID = vys.OBDOBI_ID_R AND REAL.REALIZACE_ID = vys_real.REALIZACE_ID
  108.     WHERE vys.VYSVEDCENI_ID = @VYSVEDCENI_ID
  109.    
  110.    
  111.     IF (@POUZIT_STUDIJNI_PLAN = 1) BEGIN
  112.         UPDATE PREDMET
  113.         SET PREDMET.PRIZNAK_DRUH_PREDMETU = (
  114.             SELECT TOP 1 spo.DRUH_PREDMETU
  115.             FROM CCAK_STUDIJNI_PLAN_OSOBY AS spo
  116.             INNER JOIN CCAK_REALIZACE_VZD_JEDNOTEK AS rvj ON spo.ORGANIZACE_ID = rvj.ORGANIZACE_ID AND spo.OBDOBI_ID = rvj.OBDOBI_ID AND spo.REALIZACE_ID = rvj.REALIZACE_ID
  117.             WHERE (spo.ORGANIZACE_ID = @ORGANIZACE_ID)
  118.             AND (spo.OSOBA_ID = @OSOBA_ID)
  119.             AND isnull(rvj.NAZEV, '') = isnull(PREDMET.NAZEV, '')
  120.         )
  121.         FROM @PREDMETY_TABLE PREDMET
  122.     END
  123.  
  124.  
  125.     -- pomocna tabulka pro rozvrhovane/uzavrene predmety
  126.     DECLARE @PREDMETY_ROZVRHU_TABLE TABLE (
  127.         REALIZACE_ID ID,
  128.         ZKRATKA VARCHAR(20),
  129.         PORADI_ZOBRAZENI NUMERIC(5,0),
  130.         NAZEV VARCHAR(255),
  131.         PRIZNAK_DRUH_PREDMETU VARCHAR(1),
  132.         DRUH_VZD_JEDNOTKY VARCHAR(1)
  133.     )
  134.  
  135.     -- povinne rozvrhovane/uzavrene predmety studenta
  136.     INSERT INTO @PREDMETY_ROZVRHU_TABLE (REALIZACE_ID, ZKRATKA, PORADI_ZOBRAZENI, NAZEV, PRIZNAK_DRUH_PREDMETU, DRUH_VZD_JEDNOTKY)
  137.     SELECT
  138.     ud.REALIZACE_ID, pr.ZKRATKA, pr.PORADI_ZOBRAZENI, pr.NAZEV, pr.PRIZNAK_DRUH_PREDMETU, pr.DRUH_VZD_JEDNOTKY
  139.     FROM CCAK_REALIZACE_VZD_JEDNOTEK pr
  140.     INNER JOIN CCAK_UDALOST ud ON pr.ORGANIZACE_ID = ud.ORGANIZACE_ID AND pr.OBDOBI_ID = ud.OBDOBI_ID_R AND pr.REALIZACE_ID = ud.REALIZACE_ID
  141.     INNER JOIN CCAK_UDALOST_STUDIJNI_SKUPINY uss ON ud.ORGANIZACE_ID = uss.ORGANIZACE_ID AND ud.UDALOST_ID = uss.UDALOST_ID
  142.     INNER JOIN CCAK_OSOBY_VE_SKUPINE ovs ON uss.ORGANIZACE_ID = ovs.ORGANIZACE_ID AND uss.OBDOBI_ID = ovs.OBDOBI_ID AND uss.SKUPINA_ID = ovs.SKUPINA_ID
  143.     INNER JOIN CCAK_CIS_VERZI_ROZVRHU cvr ON ud.ORGANIZACE_ID = cvr.ORGANIZACE_ID AND ud.OBDOBI_ID_P = cvr.OBDOBI_ID AND ud.VERZE_ID = cvr.VERZE_ID
  144.     WHERE (pr.ORGANIZACE_ID = @ORGANIZACE_ID)
  145.     AND (ovs.OSOBA_ID = @OSOBA_ID)
  146.     AND (ud.OBDOBI_ID_R = @OBDOBI_ID_R)
  147.     AND (ud.OBDOBI_ID_P = @OBDOBI_ID_P OR dbo.CCAK_JeDrivejsiObdobiRoku(ud.ORGANIZACE_ID, ud.OBDOBI_ID_P, @OBDOBI_ID_P) = 1)
  148.     AND (ud.TYP_UDALOSTI_ID = 'ROZVRH')
  149.     AND (cvr.PRIZNAK_PLATNA = 1)
  150.  
  151.     UNION
  152.  
  153.     SELECT re.REALIZACE_ID, re.ZKRATKA, re.PORADI_ZOBRAZENI, re.NAZEV, re.PRIZNAK_DRUH_PREDMETU, re.DRUH_VZD_JEDNOTKY
  154.     FROM CCAK_UZAVERKA_HODN AS uz
  155.     INNER JOIN CCAK_REALIZACE_VZD_JEDNOTEK re ON re.ORGANIZACE_ID = uz.ORGANIZACE_ID AND re.OBDOBI_ID = uz.OBDOBI_ID_PREDMET AND re.REALIZACE_ID = uz.REALIZACE_ID
  156.     WHERE (uz.ORGANIZACE_ID = @ORGANIZACE_ID)
  157.     AND (uz.OBDOBI_ID_PREDMET = @OBDOBI_ID_R)
  158.     AND (uz.OBDOBI_ID = @OBDOBI_ID_P OR dbo.CCAK_JeDrivejsiObdobiRoku(uz.ORGANIZACE_ID, uz.OBDOBI_ID, @OBDOBI_ID_P) = 1)
  159.     AND (uz.OSOBA_ID = @OSOBA_ID)
  160.  
  161.     IF (@POUZIT_STUDIJNI_PLAN = 1) BEGIN
  162.         UPDATE PREDMET
  163.         SET PREDMET.PRIZNAK_DRUH_PREDMETU = (
  164.             SELECT TOP 1 spo.DRUH_PREDMETU
  165.             FROM CCAK_STUDIJNI_PLAN_OSOBY AS spo
  166.             INNER JOIN CCAK_REALIZACE_VZD_JEDNOTEK AS rvj ON spo.ORGANIZACE_ID = rvj.ORGANIZACE_ID AND spo.OBDOBI_ID = rvj.OBDOBI_ID AND spo.REALIZACE_ID = rvj.REALIZACE_ID
  167.             WHERE (spo.ORGANIZACE_ID = @ORGANIZACE_ID)
  168.             AND (spo.OSOBA_ID = @OSOBA_ID)
  169.             AND isnull(rvj.NAZEV, '') = isnull(PREDMET.NAZEV, '')
  170.         )
  171.         FROM @PREDMETY_ROZVRHU_TABLE PREDMET
  172.     END
  173.  
  174.     DELETE FROM @PREDMETY_ROZVRHU_TABLE
  175.     WHERE (PRIZNAK_DRUH_PREDMETU NOT IN ('P', 'V'))
  176.    
  177.     DELETE ULOZENY
  178.     FROM @PREDMETY_TABLE ULOZENY
  179.     WHERE ULOZENY.PRIZNAK_ZAMEK = 0
  180.     AND PRIZNAK_DRUH_PREDMETU IN ('P', 'V')
  181.     AND NOT EXISTS (
  182.         SELECT NULL
  183.         FROM @PREDMETY_ROZVRHU_TABLE POVINNY
  184.         WHERE ULOZENY.NAZEV = POVINNY.NAZEV
  185.     )
  186.    
  187.     -- cistim pomocnou tabulku
  188.     DELETE FROM @PREDMETY_ROZVRHU_TABLE
  189.    
  190.     -- nepovinne rozvrhovane/uzavrene predmety studenta
  191.     INSERT INTO @PREDMETY_ROZVRHU_TABLE (
  192.         REALIZACE_ID, ZKRATKA, PORADI_ZOBRAZENI, NAZEV, PRIZNAK_DRUH_PREDMETU, DRUH_VZD_JEDNOTKY)
  193.     SELECT  
  194.     ud.REALIZACE_ID, pr.ZKRATKA, pr.PORADI_ZOBRAZENI, pr.NAZEV, pr.PRIZNAK_DRUH_PREDMETU, pr.DRUH_VZD_JEDNOTKY
  195.     FROM CCAK_REALIZACE_VZD_JEDNOTEK pr
  196.     INNER JOIN CCAK_CIS_OBDOBI obd ON pr.ORGANIZACE_ID = obd.ORGANIZACE_ID AND pr.OBDOBI_ID = obd.OBDOBI_ID
  197.     INNER JOIN CCAK_UDALOST ud ON pr.ORGANIZACE_ID = ud.ORGANIZACE_ID AND pr.OBDOBI_ID = ud.OBDOBI_ID_R AND pr.REALIZACE_ID = ud.REALIZACE_ID
  198.     INNER JOIN CCAK_UDALOST_STUDIJNI_SKUPINY uss ON ud.ORGANIZACE_ID = uss.ORGANIZACE_ID AND ud.UDALOST_ID = uss.UDALOST_ID
  199.     INNER JOIN CCAK_OSOBY_VE_SKUPINE ovs ON uss.ORGANIZACE_ID = ovs.ORGANIZACE_ID AND uss.OBDOBI_ID = ovs.OBDOBI_ID AND uss.SKUPINA_ID = ovs.SKUPINA_ID
  200.     INNER JOIN CCAK_CIS_VERZI_ROZVRHU cvr ON ud.ORGANIZACE_ID = cvr.ORGANIZACE_ID AND ud.OBDOBI_ID_P = cvr.OBDOBI_ID AND ud.VERZE_ID = cvr.VERZE_ID
  201.     WHERE (pr.ORGANIZACE_ID = @ORGANIZACE_ID)
  202.     AND (ovs.OSOBA_ID = @OSOBA_ID)
  203.     AND (ud.OBDOBI_ID_R = @OBDOBI_ID_R)
  204.     AND (ud.OBDOBI_ID_P = @OBDOBI_ID_P OR dbo.CCAK_JeDrivejsiObdobiRoku(ud.ORGANIZACE_ID, ud.OBDOBI_ID_P, @OBDOBI_ID_P) = 1)
  205.     AND ((ud.TYP_UDALOSTI_ID = 'ROZVRH') OR (ud.TYP_UDALOSTI_ID = 'ZAJMOVY_UTVAR' AND obd.DATUM_OD < '2012-09-01T00:00:00'))
  206.     AND (cvr.PRIZNAK_PLATNA = 1)
  207.  
  208.     UNION
  209.  
  210.     SELECT re.REALIZACE_ID, re.ZKRATKA, re.PORADI_ZOBRAZENI, re.NAZEV, re.PRIZNAK_DRUH_PREDMETU, re.DRUH_VZD_JEDNOTKY
  211.     FROM CCAK_UZAVERKA_HODN AS uz
  212.     INNER JOIN CCAK_REALIZACE_VZD_JEDNOTEK re ON re.ORGANIZACE_ID=uz.ORGANIZACE_ID AND re.OBDOBI_ID=uz.OBDOBI_ID_PREDMET AND re.REALIZACE_ID=uz.REALIZACE_ID
  213.     INNER JOIN CCAK_CIS_OBDOBI obd ON re.ORGANIZACE_ID = obd.ORGANIZACE_ID AND re.OBDOBI_ID = obd.OBDOBI_ID
  214.     WHERE (uz.ORGANIZACE_ID = @ORGANIZACE_ID)
  215.     AND (uz.OBDOBI_ID_PREDMET = @OBDOBI_ID_R)
  216.     AND (uz.OBDOBI_ID = @OBDOBI_ID_P OR dbo.CCAK_JeDrivejsiObdobiRoku(uz.ORGANIZACE_ID, uz.OBDOBI_ID, @OBDOBI_ID_P) = 1)
  217.     AND ((obd.DATUM_OD >= '2012-09-01T00:00:00' AND NOT re.DRUH_VZD_JEDNOTKY = 'Z') OR (obd.DATUM_OD < '2012-09-01T00:00:00')) -- zájmové předněty se po 1.9.2012 neuvádějí
  218.     AND (uz.OSOBA_ID = @OSOBA_ID)
  219.  
  220.     IF (@POUZIT_STUDIJNI_PLAN = 1) BEGIN
  221.         UPDATE PREDMET
  222.         SET PREDMET.PRIZNAK_DRUH_PREDMETU = (
  223.             SELECT TOP 1 spo.DRUH_PREDMETU
  224.             FROM CCAK_STUDIJNI_PLAN_OSOBY AS spo
  225.             INNER JOIN CCAK_REALIZACE_VZD_JEDNOTEK AS rvj ON spo.ORGANIZACE_ID = rvj.ORGANIZACE_ID AND spo.OBDOBI_ID = rvj.OBDOBI_ID AND spo.REALIZACE_ID = rvj.REALIZACE_ID
  226.             WHERE (spo.ORGANIZACE_ID = @ORGANIZACE_ID)
  227.             AND (spo.OSOBA_ID = @OSOBA_ID)
  228.             AND isnull(rvj.NAZEV, '') = isnull(PREDMET.NAZEV, '')
  229.         )
  230.         FROM @PREDMETY_ROZVRHU_TABLE PREDMET
  231.     END
  232.  
  233.     DELETE FROM @PREDMETY_ROZVRHU_TABLE
  234.     WHERE (PRIZNAK_DRUH_PREDMETU IN ('P', 'V'))
  235.  
  236.     DELETE ULOZENY
  237.     FROM @PREDMETY_TABLE ULOZENY
  238.     WHERE ULOZENY.PRIZNAK_ZAMEK = 0
  239.     AND (PRIZNAK_DRUH_PREDMETU NOT IN ('P', 'V') OR PRIZNAK_DRUH_PREDMETU IS NULL)
  240.     AND NOT EXISTS (
  241.         SELECT NULL
  242.         FROM @PREDMETY_ROZVRHU_TABLE NEPOVINNY
  243.         WHERE ULOZENY.NAZEV = NEPOVINNY.NAZEV
  244.     )
  245.  
  246.     RETURN
  247. END
  248.  
  249. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement