﻿DROP PROCEDURE IF EXISTS uspGetTanarokNemNaplozottOrarendiOrakForEmail
GO

CREATE PROCEDURE uspGetTanarokNemNaplozottOrarendiOrakForEmail
AS BEGIN
  SET NOCOUNT ON;

  DECLARE  
     @tanarId int 
    ,@intezmenyId int
    ,@tanevId int
    ,@idoszakKezdete datetime 
    ,@idoszakVege datetime = CONVERT (date, GETDATE())
    ,@csakOrarendiOrak bit = 0
    ,@utolsoTanitasiNap datetime

  CREATE TABLE #NemNaplozottResult (
    NyomtatasiNev nvarchar(255)
   ,Email nvarchar(200)
   ,EmailGuid uniqueidentifier
   ,IntezmenyAzonosito nvarchar(30)
   ,IntezmenyNev nvarchar(255)
   ,IntezmenyEmailCim nvarchar(255)
   ,OsszesNemNaplozottTanorak int
   ,MultHetenNemNaplozottHelyettesitesek int
   ,MultHetenNemNaplozottTanorak int
  )

  DROP TABLE IF EXISTS #OrarendiOrak
  CREATE TABLE #OrarendiOrak (
     Datum datetime
    ,HelyettesitoTanarID int
    ,TanarID int
    ,OraTipus nvarchar (200)
  )

  DECLARE cur CURSOR LOCAL FOR
  SELECT 
     alk.ID
    ,alk.C_ALINTEZMENYID
    ,alk.C_ALTANEVID
    ,tv.C_ELSOTANITASINAP
    ,tv.C_UTOLSOTANITASINAP
  FROM T_ALKALMAZOTT alk
    INNER JOIN T_USERPROFILE up ON up.C_FELHASZNALOID = alk.ID AND up.TOROLT = 'F'
    INNER JOIN T_TANEV tv ON tv.ID = up.C_TANEVID AND tv.TOROLT = 'F'
    INNER JOIN T_MUNKAUGYIADATOK ma ON ma.C_ALKALMAZOTTID = alk.ID AND ma.TOROLT = 'F'
    INNER JOIN T_INTEZMENY i ON i.ID = alk.C_ALINTEZMENYID AND i.TOROLT = 'F'
  WHERE CAST(up.C_PROFILE AS XML).value('data(/UserProfile/NemNaplozottTanorakEmail)[1]', 'NVARCHAR(MAX)') = 'True' 
    AND alk.TOROLT = 'F' 
    AND (ma.C_ALKALMAZASMEGSZUNESE >= GETDATE() OR ma.C_ALKALMAZASMEGSZUNESE IS NULL)
    AND tv.C_AKTIV = 'T'

  OPEN cur
  FETCH NEXT FROM cur INTO @tanarId, @intezmenyId, @tanevId, @idoszakKezdete, @utolsoTanitasiNap
  WHILE @@FETCH_STATUS = 0 BEGIN
    
    IF @idoszakVege <= @utolsoTanitasiNap BEGIN
      
      INSERT INTO #OrarendiOrak (
         Datum
        ,HelyettesitoTanarID
        ,TanarID
        ,OraTipus
      )
      EXEC sp_GetOrarend
         @pIntezmenyId = @intezmenyId
        ,@pTanevId = @tanevId
        ,@pIdoszakKezdete = @idoszakKezdete
        ,@pIdoszakVege = @idoszakVege
        ,@pTanarId = @tanarId
        ,@pCsakOrarendiOrak = @csakOrarendiOrak
        ,@pIsNapirend = null
        ,@pOszlopok = N'Datum,HelyettesitoTanarID,TanarID,OraTipus'

      INSERT INTO #NemNaplozottResult (
         NyomtatasiNev
        ,Email
        ,EmailGuid
        ,IntezmenyAzonosito
        ,IntezmenyNev
        ,IntezmenyEmailCim
        ,OsszesNemNaplozottTanorak
        ,MultHetenNemNaplozottHelyettesitesek
        ,MultHetenNemNaplozottTanorak
      ) SELECT 
         fh.C_NYOMTATASINEV
        ,e.C_EMAILCIM
        ,e.C_GUID
        ,i.C_AZONOSITO
        ,ia.C_NEV
        ,ia.C_EMAILCIM
        ,ISNULL(tbl.OsszesNemNaplozottTanorak, 0)
        ,ISNULL(tbl.MultHetenNemNaplozottHelyettesitesek, 0)
        ,ISNULL(tbl.MultHetenNemNaplozottTanorak, 0)
      FROM T_FELHASZNALO fh 
        INNER JOIN T_EMAIL e ON e.C_FELHASZNALOID = fh.ID AND e.TOROLT = 'F'
        OUTER APPLY (
          SELECT 
             COUNT(1) AS OsszesNemNaplozottTanorak
            ,SUM(IIF(oo.HelyettesitoTanarID = @tanarId AND oo.Datum > CONVERT (date, DATEADD(DAY, -7,GETDATE())), 1, 0)) AS MultHetenNemNaplozottHelyettesitesek
            ,SUM(IIF(oo.Datum > CONVERT (date, DATEADD(DAY, -7, GETDATE())), 1, 0)) AS MultHetenNemNaplozottTanorak
          FROM #OrarendiOrak oo
          WHERE oo.OraTipus = 'OrarendiOra'
           AND (oo.TanarID = fh.ID OR oo.HelyettesitoTanarID = fh.ID)
        ) tbl
        INNER JOIN T_INTEZMENYADATOK ia ON ia.C_TANEVID = fh.C_TANEVID
        INNER JOIN T_INTEZMENY i ON i.ID = ia.C_INTEZMENYID
      WHERE e.C_EMAILCIM IS NOT NULL
        AND e.C_GUID IS NOT NULL 
        AND e.C_ISPUBLIC = 'F' 
        AND e.C_ISHIBASANMEGADVA = 'F' 
        AND e.C_ALAPERTELMEZETT = 'T'
        AND fh.ID = @tanarId 

    END    
    FETCH NEXT FROM cur INTO @tanarId, @intezmenyId, @tanevId, @idoszakKezdete, @utolsoTanitasiNap
  END
  CLOSE cur
  DEALLOCATE cur

  SELECT 
     nnr.NyomtatasiNev
    ,nnr.Email
    ,nnr.EmailGuid
    ,nnr.IntezmenyAzonosito
    ,nnr.IntezmenyEmailCim
    ,nnr.IntezmenyNev
    ,nnr.OsszesNemNaplozottTanorak
    ,nnr.MultHetenNemNaplozottTanorak
    ,nnr.MultHetenNemNaplozottHelyettesitesek
  FROM #NemNaplozottResult nnr
  ORDER BY nnr.NyomtatasiNev
END
GO
