﻿DROP PROCEDURE IF EXISTS uspUpdateAtlagByOsztalyCsoportTantargy
GO

CREATE PROCEDURE uspUpdateAtlagByOsztalyCsoportTantargy
   @pTantargyId int = null
  ,@pTanevId int
  ,@pIntezmenyId int
  ,@pFelhasznaloId int
  ,@pOsztalyCsoportId int
AS
BEGIN
    SELECT
      er.C_TANULOID, 
      er.C_TANTARGYID, 
      SUM(d.C_VALUE) AS C_OSZTALYZATOSSZEGE,
      COUNT(1) AS C_OSZTALYZATSZAMA,
      SUM(d.C_VALUE * em.C_SULY) AS C_SULYOZOTTOSZTALYZATOSSZEGE, 
      SUM(em.C_SULY) AS C_SULYOZOTTOSZTALYZATSZAMA,
      feh.C_OKTATASINEVELESIFELADATTIPUS AS C_OKTATASNEVELESIFELADATID
    INTO #Source
    FROM T_TANULOERTEKELES_OSSZES er
      INNER JOIN T_ERTEKELESMOD_OSSZES em ON em.ID = er.C_ERTEKELESMODID AND em.C_ALTANEVID = er.C_TANEVID
      INNER JOIN T_DICTIONARYITEMBASE_OSSZES d ON d.ID = er.C_ERTEKELESOSZTALYZATID AND d.C_TANEVID = er.C_TANEVID
      INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = er.C_OSZTALYCSOPORTID
      INNER JOIN T_FELADATELLATASIHELY_OSSZES feh ON feh.ID = ocs.C_FELADATELLATASIHELYID
    WHERE er.C_TANEVID = @pTanevId
      AND er.C_INTEZMENYID = @pIntezmenyId
      AND er.C_TIPUSID = 1518
      AND ocs.ID = @pOsztalyCsoportId
      AND er.TOROLT = 'F'
      AND (@pTantargyId IS NULL OR er.C_TANTARGYID = @pTantargyId)
    GROUP BY er.C_TANULOID, er.C_TANTARGYID, feh.C_OKTATASINEVELESIFELADATTIPUS

    DECLARE @pOktatasNevelesiFeladatId int
      
      SELECT  @pOktatasNevelesiFeladatId = C_OKTATASINEVELESIFELADATTIPUS FROM T_FELADATELLATASIHELY_OSSZES
      WHERE ID = (SELECT C_FELADATELLATASIHELYID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @pOsztalyCsoportId)

    MERGE INTO T_TANULOTANTARGYATLAG_OSSZES AS trg
    USING #Source AS src
    ON trg.C_TANULOID = src.C_TANULOID 
      AND trg.C_TANTARGYID = src.C_TANTARGYID
      AND trg.C_OKTATASNEVELESIFELADATID = src.C_OKTATASNEVELESIFELADATID
    WHEN MATCHED THEN
      UPDATE SET C_SULYOZOTTOSZTALYZATOSSZEGE = src.C_SULYOZOTTOSZTALYZATOSSZEGE
          ,C_SULYOZOTTOSZTALYZATSZAMA = src.C_SULYOZOTTOSZTALYZATSZAMA
          ,C_OSZTALYZATOSSZEGE = src.C_OSZTALYZATOSSZEGE
          ,C_OSZTALYZATSZAMA = src.C_OSZTALYZATSZAMA
          ,MODIFIER = @pFelhasznaloId
    WHEN NOT MATCHED BY TARGET THEN
      INSERT (C_OSZTALYZATOSSZEGE         
              ,C_OSZTALYZATSZAMA           
              ,C_SULYOZOTTOSZTALYZATOSSZEGE
              ,C_SULYOZOTTOSZTALYZATSZAMA  
              ,C_TANTARGYID                
              ,C_TANULOID                  
              ,C_INTEZMENYID               
              ,C_TANEVID                   
              ,TOROLT                      
              ,SERIAL                      
              ,LASTCHANGED                 
              ,CREATED                     
              ,MODIFIER                    
              ,CREATOR                     
              ,C_OKTATASNEVELESIFELADATID)
      VALUES (src.C_OSZTALYZATOSSZEGE
              ,src.C_OSZTALYZATSZAMA
              ,src.C_SULYOZOTTOSZTALYZATOSSZEGE
              ,src.C_SULYOZOTTOSZTALYZATSZAMA
              ,src.C_TANTARGYID
              ,src.C_TANULOID
              ,@pIntezmenyId
              ,@pTanevId
              ,'F'
              ,0
              ,GETDATE()
              ,GETDATE()
              ,0
              ,@pFelhasznaloId
              ,@pOktatasNevelesiFeladatId)
    WHEN NOT MATCHED BY SOURCE AND trg.C_TANEVID = @pTanevId 
      AND (@pTantargyId IS NULL OR trg.C_TANTARGYID = @pTantargyId)
      AND trg.C_OKTATASNEVELESIFELADATID = @pOktatasNevelesiFeladatId
    THEN
      DELETE;
END
GO
