-- ====================================================================================================================
-- Beállítja az aktuális tanévben a megadott felhasználónak a jszavát, majd resultsetben visszaadja.
-- ====================================================================================================================
DROP PROCEDURE IF EXISTS dev.uspSetPassword
GO

CREATE PROCEDURE dev.uspSetPassword
   @pIntezmenyAzonositok nvarchar(max) -- Intezmenyek azonosítói, vesszővel elválasztva
  ,@pFelhasznaloNev nvarchar(50) -- Felhasználónév
  ,@pJelszo nvarchar(20) = NULL  -- Jelszó, ha NULL, akkor generál neki egy 8 karakteres jelszót 
AS 
BEGIN
  DECLARE @Table TABLE (
     IntezmenyAzonosito nvarchar(110)
    ,IntezmenyId int
    ,TanevId int
    ,FelhasznaloBelepesId int
    ,Jelszo nvarchar(8)
  )

  DECLARE
     @felhasznaloBelepesId int 
    ,@jelszo nvarchar(50)
    ,@so nvarchar(64)
    ,@jelszoHash nvarchar(64)

  INSERT INTO @Table (IntezmenyAzonosito, IntezmenyId, TanevId, FelhasznaloBelepesId, Jelszo)
  SELECT i.C_AZONOSITO, i.ID, tv.ID, fb.ID, ISNULL(@pJelszo, dev.fnGeneratePassword(8)) AS Jelszo
  FROM T_INTEZMENY i
    INNER JOIN T_TANEV tv ON tv.C_INTEZMENYID = i.ID AND tv.C_AKTIV = 'T' AND tv.TOROLT = 'F'
    INNER JOIN T_FELHASZNALOBELEPES fb ON fb.C_TANEVID = tv.ID AND fb.C_BEJELENTKEZESINEV = @pFelhasznaloNev AND fb.TOROLT = 'F'
  WHERE i.TOROLT = 'F'
    AND i.C_AZONOSITO IN (SELECT LTRIM(RTRIM(value)) FROM string_split(@pIntezmenyAzonositok, ',')) 

  DECLARE intCursor CURSOR LOCAL FOR
  SELECT FelhasznaloBelepesId, Jelszo 
  FROM @Table

  OPEN intCursor
  FETCH NEXT FROM intCursor
  INTO @FelhasznaloBelepesId, @Jelszo

  WHILE @@FETCH_STATUS = 0 BEGIN
    SET @so = CAST((SELECT * FROM dev.vGetRand) AS nvarchar(64))
    SET @jelszoHash = dev.fnConvertBase64(HASHBYTES('SHA1', CONVERT(VARBINARY(MAX), CONVERT(NVARCHAR(MAX), @jelszo + @so))))

    UPDATE T_FELHASZNALOBELEPES SET 
       C_JELSZO = @jelszoHash
      ,C_SO = @so
      ,C_JELSZOVALTOZTATASIDEJE = GETDATE()
      ,SERIAL = SERIAL + 1
      ,LASTCHANGED = GETDATE()
      ,MODIFIER = 0
    WHERE ID = @FelhasznaloBelepesId

    FETCH NEXT FROM intCursor
    INTO @FelhasznaloBelepesId, @Jelszo 
  END

  SELECT IntezmenyAzonosito, Jelszo 
  FROM @Table
END
GO
