﻿DROP PROCEDURE IF EXISTS [dbo].[sp_KIRImportTanulok]
GO

CREATE PROCEDURE [dbo].[sp_KIRImportTanulok]
  @TanulokXML as XML,
  @intezmenyID int,
  @tanevID int,
  @userId int
AS
BEGIN
  SET NOCOUNT ON;
  DECLARE
    @userNameGenerateMode int

  DECLARE @linkTable TABLE (
    tempId int,
    insertedId int,
    act varchar(10)
  )

  -- XML paraméter értelmezése
  SELECT  ID = Tanulo.value('(ID)[1]', 'int'),
    OktatasiAzonosito = Tanulo.value('(OktatasiAzonosito)[1]', 'nvarchar(20)'),
    VezetekNev = Tanulo.value('(ViseltNevVezetekNev)[1]', 'nvarchar(255)'),
    UtoNev = Tanulo.value('(ViseltNevKeresztNev)[1]', 'nvarchar(255)'),
    Elotag = Tanulo.value('(ViseltNevElotag)[1]', 'nvarchar(20)'),
    NevSorrend = Tanulo.value('(ViseltNevNevSorrend)[1]', 'char(1)'),
    SzuletesiNeveElotag =  Tanulo.value('(SzuletesiNevElotag)[1]', 'nvarchar(20)'),
    SzuletesiNeve = Tanulo.value('(SzuletesiNeve)[1]', 'nvarchar(64)'),
    SzuletesiNevVezetekNev = Tanulo.value('(SzuletesiNevVezetekNev)[1]', 'nvarchar(255)'),
    SzuletesiNevKeresztNev = Tanulo.value('(SzuletesiNevKeresztNev)[1]', 'nvarchar(255)'),
    SzuletesiNevNevSorrend = Tanulo.value('(SzuletesiNevNevSorrend)[1]', 'char(1)'),
    AnyjaNeveElotag =  Tanulo.value('(AnyjaNeveElotag)[1]', 'nvarchar(20)'),
    AnyjaNeve = Tanulo.value('(AnyjaNeve)[1]', 'nvarchar(64)'),
    AnyjaNeveVezetekNev = Tanulo.value('(AnyjaNeveVezetekNev)[1]', 'nvarchar(255)'),
    AnyjaNeveKeresztNev = Tanulo.value('(AnyjaNeveKeresztNev)[1]', 'nvarchar(255)'),
    AnyjaNeveNevSorrend = Tanulo.value('(AnyjaNeveNevSorrend)[1]', 'char(1)'),
    SzuletesiDatum = Tanulo.value('(SzuletesiDatum)[1]', 'datetime'),
    SzuletesiHely = Tanulo.value('(SzuletesiHely)[1]', 'nvarchar(50)'),
    SzuletesiOrszag = Tanulo.value('(SzuletesiOrszag)[1]', 'int'),
    Allampolgarsag = Tanulo.value('(Allampolgarsag)[1]', 'int'),
    Allampolgarsag2 = Tanulo.value('(Allampolgarsag2)[1][not(@xsi:nil = "true")]', 'int'),
    Nem = Tanulo.value('(Nem)[1]', 'int'),
    TAJSzam = Tanulo.value('(TAJSzam)[1]', 'nvarchar(9)'),
    AllandoLakcimIranyitoSzam = Tanulo.value('(AllandoLakcimIranyitoSzam)[1]', 'nvarchar(20)'),
    AllandoLakcimTelepules = Tanulo.value('(AllandoLakcimTelepules)[1]', 'nvarchar(50)'),
    AllandoLakcimKozteruletNev = Tanulo.value('(AllandoLakcimKozteruletNev)[1]', 'nvarchar(40)'),
    AllandoLakcimKozteruletJellegNev = Tanulo.value('(AllandoLakcimKozteruletJellegNev)[1]', 'nvarchar(50)'),
    AllandoLakcimHazszam = Tanulo.value('(AllandoLakcimHazszam)[1]', 'nvarchar(30)'),
    AllandoLakcimPontositas = Tanulo.value('(AllandoLakcimPontositas)[1]', 'nvarchar(40)'),
    TartozkodasiCimTelepules = Tanulo.value('(TartozkodasiCimTelepules)[1]', 'nvarchar(50)'),
    TartozkodasiCimKozteruletNev = Tanulo.value('(TartozkodasiCimKozteruletNev)[1]', 'nvarchar(40)'),
    TartozkodasiCimKozteruletJellegNev = Tanulo.value('(TartozkodasiCimKozteruletJellegNev)[1]', 'nvarchar(50)'),
    TartozkodasiCimHazszam = Tanulo.value('(TartozkodasiCimHazszam)[1]', 'nvarchar(30)'),
    TartozkodasiCimIranyitoszam = Tanulo.value('(TartozkodasiCimIranyitoSzam)[1]', 'nvarchar(20)'),
    TartozkodasiCimPontositas = Tanulo.value('(TartozkodasiCimPontositas)[1]', 'nvarchar(40)'),
    TankotelezettsegVege = Tanulo.value('(TankotelezettsegVege)[1]', 'datetime'),
    TankotelezettsegetTeljesito = Tanulo.value('(TankotelezettsegetTeljesito)[1]', 'char(1)'),
    SajatosNevelesIgenyu = Tanulo.value('(SajatosNevelesIgenyu)[1]', 'char(1)'),
    BeilleszkedesselKuzd = Tanulo.value('(BeilleszkedesselKuzd)[1]', 'char(1)'),
    OMAzonosito = Tanulo.value('(OMAzonosito)[1]', 'nvarchar(20)'),
    JogviszonyStatusza = Tanulo.value('(JogviszonyStatusza)[1]', 'char(1)'),
    JogviszonyKezdete = Tanulo.value('(JogviszonyKezdete)[1]', 'datetime'),
    JogviszonyVarBefejezese = Tanulo.value('(JogviszonyVarBefejezese)[1]', 'datetime'),
    JogviszonyJellege = Tanulo.value('(JogviszonyJellege)[1]', 'nvarchar(2000)'),
    Vendegtanulo = Tanulo.value('(Vendegtanulo)[1]', 'char(1)'),
    Magantanulo = Tanulo.value('(Magantanulo)[1]', 'char(1)'),
    Osztaly = Tanulo.value('(Osztaly)[1]', 'nvarchar(255)'),
    KeresesiNev = Tanulo.value('(KeresesiNev)[1]', 'nvarchar(61)'),
    NyomtatasiNev = Tanulo.value('(NyomtatasiNev)[1]', 'nvarchar(255)'),
    Telefonszam = Tanulo.value('(Telefonszam)[1]', 'nvarchar(100)'),
    EmailCim = Tanulo.value('(Email)[1]', 'nvarchar(200)'),
    BejelentkezesiNev = Tanulo.value('(BejelentkezesiNev)[1]', 'nvarchar(255)'),
    Jelszo = Tanulo.value('(Jelszo)[1]', 'nvarchar(64)'),
    Salt = Tanulo.value('(Salt)[1]', 'nvarchar(64)'),
    BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott = Tanulo.value('(BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott)[1]', 'char(1)'),
    UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja = Tanulo.value('(UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja)[1]', 'datetime'),
    ErvenyesDiakigazolvanySzama = Tanulo.value('(ErvenyesDiakigazolvanySzama)[1]', 'nvarchar(255)'),

    0 AS isTanulo,
    0 TanuloID
  INTO #tempTanulok
  FROM @TanulokXML.nodes('/KIRTanulok/ImportaltTanulok/Tanulo') as Tanulok(Tanulo)

  -- A létezo felhasználók ID-ját kitöltjük, és az isTanulot is update-eljük
  UPDATE t
  SET t.TanuloID = fh.ID,
      t.isTanulo = 1
  FROM #tempTanulok t
    INNER JOIN T_FELHASZNALO_OSSZES fh ON
      ((t.NevSorrend = fh.C_NEVSORREND AND t.VezetekNev = fh.C_VEZETEKNEV AND t.UtoNev = fh.C_UTONEV)
        OR (t.VezetekNev = fh.C_UTONEV AND t.UtoNev = fh.C_VEZETEKNEV))
      AND t.Elotag = fh.C_ELOTAG
      AND ((t.AnyjaNeveNevSorrend = fh.C_ANYJANEVESORREND AND t.AnyjaNeveVezetekNev = fh.C_ANYJAVEZETEKNEVE AND t.AnyjaNeveKeresztNev = fh.C_ANYJAUTONEVE)
        OR (t.AnyjaNeveVezetekNev = fh.C_ANYJAUTONEVE AND t.AnyjaNeveKeresztNev = fh.C_ANYJAVEZETEKNEVE))
      AND t.AnyjaNeveElotag = fh.C_ANYJANEVEELOTAG 
      AND t.SzuletesiDatum = fh.C_SZULETESIDATUM AND t.SzuletesiHely = fh.C_SZULETESIHELY
      AND ISNULL(t.OktatasiAzonosito,'') = ISNULL(fh.C_OKTATASIAZONOSITO,'')
      AND EXISTS (SELECT 1 FROM T_TANULO_OSSZES tanulo WHERE tanulo.ID = fh.ID AND tanulo.C_ALTANEVID = fh.C_TANEVID AND tanulo.TOROLT = 'F') --ha letezik tanulokent akkor mindenkepp update, maskepp insert
  WHERE fh.TOROLT = 'F'
    AND fh.C_TANEVID = @tanevID
    AND fh.C_INTEZMENYID = @intezmenyID
    AND NOT EXISTS (SELECT 1 FROM T_ALKALMAZOTT_OSSZES a WHERE a.ID = fh.ID)
    AND EXISTS (SELECT 1 FROM T_TANULO_OSSZES tn WHERE tn.ID = fh.ID)

  BEGIN TRY
  BEGIN TRANSACTION

    -- FELHASZNÁLÓK INSERTJE VAGY UPDATE-JE AKA MERGE
  MERGE T_FELHASZNALO_OSSZES trg
  USING #tempTanulok src ON src.TanuloID = trg.ID AND trg.C_TANEVID = @tanevID
  WHEN MATCHED AND src.isTanulo = 1 THEN
    UPDATE SET
      trg.C_NEME = src.Nem,
      trg.C_SZULETESIDATUM = src.SzuletesiDatum,
      trg.C_SZULETESINEV = src.SzuletesiNeve,
      trg.C_ANYJANEVE = src.AnyjaNeve,
      trg.C_SZULETESIHELY = src.SzuletesiHely,
      trg.C_TAJSZAM = src.TAJSzam,
      trg.C_ALLAMPOLGARSAGA = src.Allampolgarsag,
      trg.C_ALLAMPOLGARSAGA2 = src.Allampolgarsag2,
      trg.C_KERESESINEV = src.KeresesiNev,
      trg.C_SZULETESIORSZAG = src.SzuletesiOrszag,
      trg.C_SZULETESINEVSORREND = src.SzuletesiNevNevSorrend,
      trg.C_ANYJANEVESORREND = src.AnyjaNeveNevSorrend,
      trg.C_ALAPERTELMEZETTLCID = 1038,
      trg.C_NYOMTATASINEV = src.NyomtatasiNev,
      trg.C_UTONEV = src.UtoNev,
      trg.C_VEZETEKNEV = src.VezetekNev,
      trg.C_ELOTAG = src.Elotag,
      trg.C_NEVSORREND = src.NevSorrend,
      trg.C_NYILVANTARTASKEZDETE = src.JogviszonyKezdete,
      trg.C_OMKOD = src.OMAzonosito,
      trg.TOROLT = 'F',
      trg.SERIAL = trg.SERIAL + 1,
      trg.LASTCHANGED = GETDATE(),
      trg.MODIFIER = @userId,
      trg.C_OKTATASIAZONOSITO = src.OktatasiAzonosito,
      trg.C_BELUGYALTALAZONOSITOTT = src.BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott,
      trg.C_UTOLSOADATFRISSITESIDOPONTJA =  src.UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja,
      trg.C_ANYJAUTONEVE = src.AnyjaNeveKeresztNev,
      trg.C_ANYJAVEZETEKNEVE = src.AnyjaNeveVezetekNev,
      trg.C_SZULETESIUTONEV = src.SzuletesiNevKeresztNev,
      trg.C_SZULETESIVEZETEKNEV = src.SzuletesiNevVezetekNev,
      trg.C_ANYJANEVEELOTAG = src.AnyjaNeveElotag,
      trg.C_SZULETESINEVELOTAG = src.SzuletesiNeveElotag
    WHEN NOT MATCHED THEN
      INSERT (
         C_NEME
        ,C_SZULETESIDATUM
        ,C_SZULETESINEV
        ,C_ANYJANEVE
        ,C_SZULETESIHELY
        ,C_TAJSZAM
        ,C_ALLAMPOLGARSAGA
        ,C_ALLAMPOLGARSAGA2
        ,C_KERESESINEV
        ,C_SZULETESIORSZAG
        ,C_SZULETESINEVSORREND
        ,C_ANYJANEVESORREND
        ,C_ALAPERTELMEZETTLCID
        ,C_NYOMTATASINEV
        ,C_UTONEV
        ,C_VEZETEKNEV
        ,C_ELOTAG
        ,C_NEVSORREND
        ,C_NYILVANTARTASKEZDETE
        ,C_OKTATASIAZONOSITO
        ,C_OMKOD
        ,C_INTEZMENYID
        ,C_TANEVID
        ,MODIFIER
        ,CREATOR
        ,C_BELUGYALTALAZONOSITOTT
        ,C_UTOLSOADATFRISSITESIDOPONTJA
        ,C_MEGJEGYZES
        ,C_ANYJAUTONEVE
        ,C_ANYJAVEZETEKNEVE
        ,C_SZULETESIUTONEV
        ,C_SZULETESIVEZETEKNEV
        ,C_ANYJANEVEELOTAG
        ,C_SZULETESINEVELOTAG
      )
      VALUES (
         src.Nem
        ,src.SzuletesiDatum
        ,src.SzuletesiNeve
        ,src.AnyjaNeve
        ,src.SzuletesiHely
        ,src.TAJSzam
        ,src.Allampolgarsag
        ,src.Allampolgarsag2
        ,src.KeresesiNev
        ,src.SzuletesiOrszag
        ,src.SzuletesiNevNevSorrend
        ,src.AnyjaNeveNevSorrend
        ,1038
        ,src.NyomtatasiNev
        ,src.UtoNev
        ,src.VezetekNev
        ,src.Elotag
        ,src.NevSorrend
        ,src.JogviszonyKezdete
        ,src.OktatasiAzonosito
        ,src.OMAzonosito
        ,@intezmenyID
        ,@tanevID
        ,NULL
        ,@userId
        ,src.BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott
        ,src.UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja
        ,src.JogviszonyJellege
        ,src.AnyjaNeveKeresztNev
        ,src.AnyjaNeveVezetekNev
        ,src.SzuletesiNevKeresztNev
        ,src.SzuletesiNevVezetekNev
        ,src.AnyjaNeveElotag
        ,src.SzuletesiNeveElotag
        )
      OUTPUT INSERTED.ID, src.ID, $action
      INTO @linkTable(insertedID, tempId, act);

    MERGE T_TANULO_OSSZES trg
    USING (
      SELECT t.*, l.insertedId AS insertedID
      FROM #tempTanulok t
        INNER JOIN @linkTable l ON t.ID = l.tempID
    ) src ON src.TanuloID = trg.ID AND trg.C_ALTANEVID = @tanevID AND src.isTanulo = 1
    WHEN MATCHED THEN
      UPDATE SET
        trg.C_TANKOTELEZETTSEGVEGE = src.TankotelezettsegVege,
        trg.C_TANKOTELEZETT = src.TankotelezettsegetTeljesito,
        trg.C_SAJATOSNEVELESU = src.SajatosNevelesIgenyu,
        trg.C_BTMPROBLEMAS = src.BeilleszkedesselKuzd,
        trg.C_JOGVISZONYVARHATOBEFEJEZESE = src.JogviszonyVarBefejezese,
        trg.C_VENDEG = src.Vendegtanulo,
        trg.C_MAGANTANULO = src.Magantanulo,
        trg.C_JOGVISZONYATSZUNETELTETO = src.JogviszonyStatusza,
        trg.C_FELVETELTANEVEID = @tanevID,
        trg.TOROLT = 'F',
        trg.SERIAL = trg.SERIAL + 1,
        trg.LASTCHANGED = GETDATE(),
        trg.MODIFIER = @userId,
        trg.C_DIAKIGAZOLVANYSZAM = src.ErvenyesDiakigazolvanySzama
    WHEN NOT MATCHED THEN
      INSERT (
         ID
        ,C_TANKOTELEZETTSEGVEGE
        ,C_TANKOTELEZETT
        ,C_SAJATOSNEVELESU
        ,C_BTMPROBLEMAS
        ,C_JOGVISZONYVARHATOBEFEJEZESE
        ,C_VENDEG
        ,C_MAGANTANULO
        ,C_JOGVISZONYATSZUNETELTETO
        ,C_FELVETELTANEVEID
        ,C_ALINTEZMENYID
        ,C_ALTANEVID
        ,MODIFIER
        ,CREATOR
        ,C_DIAKIGAZOLVANYSZAM
      ) VALUES (
         src.insertedID
        ,src.TankotelezettsegVege
        ,src.TankotelezettsegetTeljesito
        ,src.SajatosNevelesIgenyu
        ,src.BeilleszkedesselKuzd
        ,src.JogviszonyVarBefejezese
        ,src.Vendegtanulo
        ,src.Magantanulo
        ,src.JogviszonyStatusza
        ,@tanevID
        ,@intezmenyID
        ,@tanevID
        ,NULL
        ,@userId
        ,src.ErvenyesDiakigazolvanySzama
        );

      -------FELHASZNALO BELEPES--------
    SET @userNameGenerateMode = dbo.fnGetRendszerbeallitasEnumBool(2885, @intezmenyID, @tanevID)
    IF @userNameGenerateMode <> 3 BEGIN
      INSERT INTO [T_FELHASZNALOBELEPES_OSSZES] (
         C_JELSZO
        ,C_BEJELENTKEZESINEV
        ,C_SO
        ,C_FELHASZNALOID
        ,C_INTEZMENYID
        ,C_TANEVID
        ,MODIFIER
        ,CREATOR
      ) SELECT
       t.Jelszo
      ,t.BejelentkezesiNev
      ,t.Salt
      ,fh.ID
      ,@intezmenyID
      ,@tanevID
      ,NULL
      ,@userId
      FROM #tempTanulok t
        INNER JOIN @linkTable l ON t.ID = l.tempID
        INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.ID = l.insertedId
      WHERE NOT EXISTS (
          SELECT 1
          FROM T_FELHASZNALOBELEPES_OSSZES belepes
          WHERE belepes.TOROLT = 'F'
            AND ((belepes.C_FELHASZNALOID = fh.ID AND belepes.C_GONDVISELOID IS NULL)
            OR belepes.C_BEJELENTKEZESINEV = t.BejelentkezesiNev)
        )
    END

    --------FELHASZNALO SZEREPKÖR-----------
    DECLARE @szerepkorId int

    SELECT @szerepkorId = ID
    FROM T_SZEREPKOR_OSSZES
    WHERE C_SZEREPKORTIPUS = 1761
      AND C_TANEVID = @tanevID

    INSERT INTO T_FELHASZNALO_SZEREPKOR (C_FELHASZNALOID, C_SZEREPKORID)
    SELECT fh.ID, @szerepkorId
    FROM #tempTanulok t
      INNER JOIN @linkTable l ON t.ID = l.tempID
      INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.ID = l.insertedId
    WHERE C_TANEVID = @tanevID
      AND NOT EXISTS (SELECT 1 FROM T_FELHASZNALO_SZEREPKOR fsz WHERE fsz.C_FELHASZNALOID = fh.ID AND C_SZEREPKORID = @szerepkorId )

    ----- Telefonszám -----
    MERGE T_TELEFON_OSSZES trg
    USING (
      SELECT t.*, l.insertedId AS insertedID
      FROM #tempTanulok t
        INNER JOIN @linkTable l ON t.ID = l.tempID --AND C_ALAPERTELMEZETT = 'T'
      WHERE t.Telefonszam IS NOT NULL AND t.Telefonszam <> ''
    ) src ON src.TanuloID = trg.C_FELHASZNALOID AND trg.C_TANEVID = @tanevID AND src.isTanulo = 1 AND trg.C_ALAPERTELMEZETT = 'T'
    WHEN MATCHED THEN
      UPDATE SET
        trg.C_TELEFONSZAM = src.Telefonszam,
        trg.TOROLT = 'F',
        trg.SERIAL = trg.SERIAL + 1,
        trg.LASTCHANGED = GETDATE(),
        trg.MODIFIER = @userId
      WHEN NOT MATCHED THEN
    INSERT (
       C_TELEFONTIPUSA
      ,C_TELEFONSZAM
      ,C_LEIRAS
      ,C_ALAPERTELMEZETT
      ,C_GONDVISELOID
      ,C_FELHASZNALOID
      ,C_INTEZMENYID
      ,C_TANEVID
      ,MODIFIER
      ,CREATOR
      ) VALUES (
        1019 -- C_TELEFONTIPUSA - int
        ,src.Telefonszam -- C_TELEFONSZAM - nvarchar(100)
        ,N'' -- C_LEIRAS - nvarchar(50)
        ,'T' -- C_ALAPERTELMEZETT - char(1)
        ,NULL   -- C_GONDVISELOID - int
        ,src.insertedID   -- C_FELHASZNALOID - int
        ,@intezmenyID -- C_INTEZMENYID - int
        ,@tanevID -- C_TANEVID - int
        ,NULL   -- MODIFIER - int
        ,@userId   -- CREATOR - int
      );

    ----- TARTÓZKODÁSI HELY -----
    MERGE T_CIM_OSSZES trg
      USING (
        SELECT t.*, l.insertedId AS insertedID
        FROM #tempTanulok t
          INNER JOIN @linkTable l ON t.ID = l.tempID
          WHERE t.TartozkodasiCimIranyitoszam IS NOT NULL AND t.TartozkodasiCimIranyitoszam <> ''
            AND t.TartozkodasiCimTelepules IS NOT NULL AND t.TartozkodasiCimKozteruletNev IS NOT NULL AND t.TartozkodasiCimHazszam IS NOT NULL
        ) src ON src.TanuloID = trg.C_FELHASZNALOID AND trg.C_TANEVID = @tanevID AND src.isTanulo = 1 AND trg.C_CIMTIPUSA = 909
      WHEN MATCHED THEN
        UPDATE SET
          trg.C_CIMTIPUSA = 909,
          trg.C_ORSZAG = 765,
          trg.C_IRANYITOSZAM = src.TartozkodasiCimIranyitoszam,
          trg.C_VAROS = src.TartozkodasiCimTelepules,
          trg.C_KOZTERULET = src.TartozkodasiCimKozteruletNev,
          trg.C_KOZTERULETJELLEGENEV = src.TartozkodasiCimKozteruletJellegNev,
          trg.C_HAZSZAM = src.TartozkodasiCimHazszam,
          trg.C_EMELET = src.TartozkodasiCimPontositas,
          trg.C_FELHASZNALOID = src.insertedId,
          trg.TOROLT = 'F',
          trg.SERIAL = trg.SERIAL + 1,
          trg.LASTCHANGED = GETDATE(),
          trg.MODIFIER = @userId
      WHEN NOT MATCHED THEN
        INSERT (
           C_CIMTIPUSA
          ,C_ORSZAG
          ,C_IRANYITOSZAM
          ,C_VAROS
          ,C_KOZTERULET
          ,C_KOZTERULETJELLEGENEV
          ,C_HAZSZAM
          ,C_EMELET
          ,C_FELHASZNALOID
          ,C_INTEZMENYID
          ,C_TANEVID
          ,MODIFIER
          ,CREATOR
          ) VALUES (
           909
          ,765
          ,src.TartozkodasiCimIranyitoszam
          ,src.TartozkodasiCimTelepules
          ,src.TartozkodasiCimKozteruletNev
          ,src.TartozkodasiCimKozteruletJellegNev
          ,src.TartozkodasiCimHazszam
          ,src.TartozkodasiCimPontositas
          ,src.insertedID
          ,@intezmenyID
          ,@tanevID
          ,NULL
          ,@userId
        );

    ----- TARTÓZKODÁSI HELY -----
    MERGE T_CIM_OSSZES trg
      USING (
        SELECT t.*, l.insertedId AS insertedID
        FROM #tempTanulok t
          INNER JOIN @linkTable l ON t.ID = l.tempID
        WHERE t.AllandoLakcimIranyitoSzam IS NOT NULL AND t.AllandoLakcimTelepules IS NOT NULL AND t.AllandoLakcimKozteruletNev IS NOT NULL AND t.AllandoLakcimHazszam IS NOT NULL
        ) src ON src.TanuloID = trg.C_FELHASZNALOID AND trg.C_TANEVID = @tanevID AND src.isTanulo = 1 AND trg.C_CIMTIPUSA = 907
      WHEN MATCHED THEN
        UPDATE SET
          trg.C_CIMTIPUSA = 907,
          trg.C_ORSZAG = 765,
          trg.C_IRANYITOSZAM = src.AllandoLakcimIranyitoSzam,
          trg.C_VAROS = src.AllandoLakcimTelepules,
          trg.C_KOZTERULET = src.AllandoLakcimKozteruletNev,
          trg.C_KOZTERULETJELLEGENEV = src.AllandoLakcimKozteruletJellegNev,
          trg.C_HAZSZAM = src.AllandoLakcimHazszam,
          trg.C_EMELET = src.AllandoLakcimPontositas,
          trg.C_ALAPERTELMEZETT = 'T',
          trg.C_FELHASZNALOID = src.insertedId,
          trg.TOROLT = 'F',
          trg.SERIAL = trg.SERIAL + 1,
          trg.LASTCHANGED = GETDATE(),
          trg.MODIFIER = @userId
      WHEN NOT MATCHED THEN
        INSERT (
           C_CIMTIPUSA
          ,C_ORSZAG
          ,C_IRANYITOSZAM
          ,C_VAROS
          ,C_KOZTERULET
          ,C_KOZTERULETJELLEGENEV
          ,C_HAZSZAM
          ,C_EMELET
          ,C_ALAPERTELMEZETT
          ,C_FELHASZNALOID
          ,C_INTEZMENYID
          ,C_TANEVID
          ,MODIFIER
          ,CREATOR
        ) VALUES (
           907
          ,765
          ,src.AllandoLakcimIranyitoSzam
          ,src.AllandoLakcimTelepules
          ,src.AllandoLakcimKozteruletNev
          ,src.AllandoLakcimKozteruletJellegNev
          ,src.AllandoLakcimHazszam
          ,src.AllandoLakcimPontositas
          ,'T'
          ,src.insertedID
          ,@intezmenyID
          ,@tanevID
          ,NULL
          ,@userId
        );

  ----- E-mail cím -----
    MERGE T_EMAIL_OSSZES trg
    USING (
      SELECT #tempTanulok.*, linkTable.insertedId AS insertedID
      FROM #tempTanulok
        INNER JOIN
        @linkTable linkTable ON #tempTanulok.ID = linkTable.tempID --AND C_ALAPERTELMEZETT = 'T'
      WHERE #tempTanulok.EmailCim IS NOT NULL AND #tempTanulok.EmailCim <> ''
    )  src ON
          trg.C_FELHASZNALOID    = src.TanuloID
      AND  trg.C_TANEVID      = @tanevID
      AND  src.isTanulo            = 1
      AND  trg.C_ALAPERTELMEZETT  = 'T'
    WHEN MATCHED THEN
      UPDATE SET
         trg.C_EMAILCIM  = src.EmailCim
        ,trg.TOROLT    = 'F'
        ,trg.SERIAL    = trg.SERIAL + 1
        ,trg.LASTCHANGED  = GETDATE()
        ,trg.MODIFIER    = @userId
    WHEN NOT MATCHED THEN
      INSERT (
         C_EMAILTIPUSA
        ,C_EMAILCIM
        ,C_ALAPERTELMEZETT
        ,C_GONDVISELOID
        ,C_FELHASZNALOID
        ,C_INTEZMENYID
        ,C_TANEVID
        ,MODIFIER
        ,CREATOR
      ) VALUES (
         1024 -- C_EMAILTIPUSA - int   NA
        ,src.EmailCim -- C_EMAILCIM - nvarchar(100)
        ,'T' -- C_ALAPERTELMEZETT - char(1)
        ,NULL   -- C_GONDVISELOID - int
        ,src.insertedID   -- C_FELHASZNALOID - int
        ,@intezmenyID -- C_INTEZMENYID - int
        ,@tanevID -- C_TANEVID - int
        ,NULL   -- MODIFIER - int
        ,@userId   -- CREATOR - int
      );

    COMMIT TRANSACTION
  END TRY
  BEGIN CATCH
    IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0
      ROLLBACK TRANSACTION;
    THROW
  END CATCH
END
GO
