DROP PROCEDURE IF EXISTS [dbo].[sp_KIRImportTanarok]
GO

CREATE PROCEDURE [dbo].[sp_KIRImportTanarok]
   @TanarokXML xml
  ,@FeladatellatasiHelyId int
  ,@intezmenyID int
  ,@tanevID int
  ,@userId int
AS
BEGIN
  SET NOCOUNT ON;
  SET XACT_ABORT ON;
  -- XML paraméter értelmezése
  DECLARE @Tanarok TABLE (
     Id int
    ,OktatasiAzonosito nvarchar(20)
    ,VezetekNev nvarchar(255)
    ,UtoNev nvarchar(255)
    ,Elotag nvarchar(20)
    ,NevSorrend char(1)
    ,AnyjaNeveElotag nvarchar(20)
    ,AnyjaNeve nvarchar(64)
    ,AnyjaNeveVezetekNev nvarchar(255)
    ,AnyjaNeveKeresztNev nvarchar(255)
    ,AnyjaNeveNevSorrend char(1)
    ,SzuletesiDatum datetime
    ,SzuletesiHely nvarchar(50)
    ,SzuletesiOrszag int
    ,SzuletesiNeveElotag nvarchar(20)
    ,SzuletesiNeve nvarchar(64)
    ,SzuletesiNeveVezetekNev nvarchar(255)
    ,SzuletesiNeveKeresztNev nvarchar(255)
    ,SzuletesiNeveNevSorrend char(1)
    ,Allampolgarsag int
    ,Allampolgarsag2 int
    ,Nem int
    ,EmailCim nvarchar(200)
    ,Telefonszam nvarchar(100)
    ,AllandoLakcimIranyitoSzam nvarchar(20)
    ,AllandoLakcimTelepules nvarchar(50)
    ,AllandoLakcimKozteruletNev nvarchar(40)
    ,AllandoLakcimKozteruletJellegNev nvarchar(50)
    ,AllandoLakcimHazszam nvarchar(30)
    ,AllandoLakcimPontositas nvarchar(40)
    ,TartozkodasiCimTelepules nvarchar(50)
    ,TartozkodasiCimKozteruletNev nvarchar(40)
    ,TartozkodasiCimKozteruletJellegNev nvarchar(50)
    ,TartozkodasiCimHazszam nvarchar(30)
    ,TartozkodasiCimIranyitoszam nvarchar(20)
    ,TartozkodasiCimPontositas nvarchar(40)
    ,KeresesiNev nvarchar(61)
    ,NyomtatasiNev nvarchar(255)
    ,OMAzonosito nvarchar(20)
    ,Foallas char(1)
    ,KotelezoOraszam numeric(10,2)
    ,FoglalkoztatasTipus int
    ,MunkakorTipusa int
    ,MunkaviszonyTipusa int
    ,JogviszonyKezdete datetime
    ,JogviszonyBefejezese datetime
    ,FelhasznaloId int -- Ide kerül be a tényleges ID, amit a DB-ben is van/lesz
    ,isUjTanar bit -- létezik-e már a rendszereben
    ,BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott char(1)
    ,UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja dateTime
  )

  INSERT INTO @Tanarok (
     Id
    ,OktatasiAzonosito
    ,VezetekNev
    ,UtoNev
    ,Elotag
    ,NevSorrend
    ,AnyjaNeveElotag
    ,AnyjaNeve
    ,AnyjaNeveVezetekNev
    ,AnyjaNeveKeresztNev
    ,AnyjaNeveNevSorrend
    ,SzuletesiDatum
    ,SzuletesiHely
    ,SzuletesiOrszag
    ,SzuletesiNeveElotag
    ,SzuletesiNeve
    ,SzuletesiNeveVezetekNev
    ,SzuletesiNeveKeresztNev
    ,SzuletesiNeveNevSorrend
    ,Allampolgarsag
    ,Allampolgarsag2
    ,Nem
    ,EmailCim
    ,Telefonszam
    ,AllandoLakcimIranyitoSzam
    ,AllandoLakcimTelepules
    ,AllandoLakcimKozteruletNev
    ,AllandoLakcimKozteruletJellegNev
    ,AllandoLakcimHazszam
    ,AllandoLakcimPontositas
    ,TartozkodasiCimTelepules
    ,TartozkodasiCimKozteruletNev
    ,TartozkodasiCimKozteruletJellegNev
    ,TartozkodasiCimHazszam
    ,TartozkodasiCimIranyitoszam
    ,TartozkodasiCimPontositas
    ,KeresesiNev
    ,NyomtatasiNev
    ,OMAzonosito
    ,Foallas
    ,KotelezoOraszam
    ,FoglalkoztatasTipus
    ,MunkakorTipusa
    ,MunkaviszonyTipusa
    ,JogviszonyKezdete
    ,JogviszonyBefejezese
    ,isUjTanar
    ,BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott
    ,UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja
  ) SELECT
    Id = Tanar.value('(ID)[1]', 'int'),
    OktatasiAzonosito = Tanar.value('(OktatasiAzonosito)[1]', 'nvarchar(20)'),
    VezetekNev = Tanar.value('(ViseltNevVezetekNev)[1]', 'nvarchar(255)'),
    UtoNev = Tanar.value('(ViseltNevKeresztNev)[1]', 'nvarchar(255)'),
    Elotag = Tanar.value('(ViseltNevElotag)[1]', 'nvarchar(20)'),
    NevSorrend = Tanar.value('(ViseltNevNevSorrend)[1]', 'char(1)'),
    AnyjaNeveElotag = Tanar.value('(AnyjaNeveElotag)[1]', 'nvarchar(20)'),
    AnyjaNeve = Tanar.value('(AnyjaNeve)[1]', 'nvarchar(64)'),
    AnyjaNeveVezetekNev = Tanar.value('(AnyjaNeveVezetekNev)[1]', 'nvarchar(255)'),
    AnyjaNeveKeresztNev = Tanar.value('(AnyjaNeveKeresztNev)[1]', 'nvarchar(255)'),
    AnyjaNeveNevSorrend = Tanar.value('(AnyjaNeveNevSorrend)[1]', 'char(1)'),
    SzuletesiDatum = Tanar.value('(SzuletesiDatum)[1]', 'datetime'),
    SzuletesiHely = Tanar.value('(SzuletesiHely)[1]', 'nvarchar(50)'),
    SzuletesiOrszag = Tanar.value('(SzuletesiOrszag)[1]', 'int'),
    SzuletesiNeveElotag = Tanar.value('(SzuletesiNevElotag)[1]', 'nvarchar(20)'),
    SzuletesiNeve = Tanar.value('(SzuletesiNeve)[1]', 'nvarchar(64)'),
    SzuletesiNeveVezetekNev = Tanar.value('(SzuletesiNevVezetekNev)[1]', 'nvarchar(255)'),
    SzuletesiNeveKeresztNev = Tanar.value('(SzuletesiNevKeresztNev)[1]', 'nvarchar(255)'),
    SzuletesiNeveNevSorrend = Tanar.value('(SzuletesiNevNevSorrend)[1]', 'char(1)'),
    Allampolgarsag = Tanar.value('(Allampolgarsag)[1]', 'int'),
    Allampolgarsag2 = Tanar.value('(Allampolgarsag2)[1][not(@xsi:nil = "true")]', 'int'),
    Nem = Tanar.value('(Nem)[1]', 'int'),
    EmailCim = Tanar.value('(EmailCim)[1]', 'nvarchar(200)'),
    Telefonszam = Tanar.value('(Telefonszam)[1]', 'nvarchar(100)'),
    AllandoLakcimIranyitoSzam = Tanar.value('(AllandoLakcimIranyitoSzam)[1]', 'nvarchar(20)'),
    AllandoLakcimTelepules = Tanar.value('(AllandoLakcimTelepules)[1]', 'nvarchar(50)'),
    AllandoLakcimKozteruletNev = Tanar.value('(AllandoLakcimKozteruletNev)[1]', 'nvarchar(40)'),
    AllandoLakcimKozteruletJellegNev = Tanar.value('(AllandoLakcimKozteruletJellegNev)[1]', 'nvarchar(50)'),
    AllandoLakcimHazszam = Tanar.value('(AllandoLakcimHazszam)[1]', 'nvarchar(30)'),
    AllandoLakcimPontositas = Tanar.value('(AllandoLakcimPontositas)[1]', 'nvarchar(40)'),
    TartozkodasiCimTelepules = Tanar.value('(TartozkodasiCimTelepules)[1]', 'nvarchar(50)'),
    TartozkodasiCimKozteruletNev = Tanar.value('(TartozkodasiCimKozteruletNev)[1]', 'nvarchar(40)'),
    TartozkodasiCimKozteruletJellegNev = Tanar.value('(TartozkodasiCimKozteruletJellegNev)[1]', 'nvarchar(50)'),
    TartozkodasiCimHazszam = Tanar.value('(TartozkodasiCimHazszam)[1]', 'nvarchar(30)'),
    TartozkodasiCimIranyitoszam = Tanar.value('(TartozkodasiCimIranyitoSzam)[1]', 'nvarchar(20)'),
    TartozkodasiCimPontositas = Tanar.value('(TartozkodasiCimPontositas)[1]', 'nvarchar(40)'),
    KeresesiNev = Tanar.value('(KeresesiNev)[1]', 'nvarchar(61)'),
    NyomtatasiNev = Tanar.value('(NyomtatasiNev)[1]', 'nvarchar(255)'),
    OMAzonosito = Tanar.value('(OMAzonosito)[1]', 'nvarchar(20)'),
    Foallas = Tanar.value('(Foallas)[1]', 'char(1)'),
    KotelezoOraszam = Tanar.value('(KotelezoOraszam)[1]', 'numeric(10,2)'),
    FoglalkoztatasTipus = Tanar.value('number((FoglalkoztatasTipus)[1])', 'int'),
    MunkakorTipusa = Tanar.value('(MunkakorTipusa)[1]', 'int'),
    MunkaviszonyTipusa = Tanar.value('(MunkaviszonyTipusa)[1]', 'int'),
    JogviszonyKezdete = Tanar.value('(JogviszonyKezdete)[1]', 'datetime'),
    JogviszonyBefejezese = Tanar.value('(JogviszonyBefejezese)[1]', 'datetime'),
    1 AS isUjTanar,
    BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott = Tanar.value('(BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott)[1]', 'char(1)'),
    UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja = Tanar.value('(UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja)[1]', 'datetime')
  FROM @TanarokXML.nodes('/KIRTanarok/ImportaltTanarok/Tanar') as Tanarok(Tanar)

  DECLARE @LinkTable TABLE (
     felHasznaloId int
    ,OktatasiAzonosito nvarchar(20)
    ,NevSorrend char(1)
    ,SzuletesiNeveElotag nvarchar(255)
    ,SzuletesiNeveVezetekNev nvarchar(255)
    ,SzuletesiNeveKeresztNev nvarchar(255)
    ,AnyjaNeveNevSorrend char(1)
    ,AnyjaNeveElotag nvarchar(255)
    ,AnyjaNeveVezetekNev nvarchar(255)
    ,AnyjaNeveKeresztNev nvarchar(255)
    ,SzuletesiDatum datetime
    ,SzuletesiHely nvarchar(50)
    ,action nvarchar(20))

  BEGIN TRY
    BEGIN TRANSACTION

    MERGE T_FELHASZNALO_OSSZES fh
    USING (
      SELECT * FROM @Tanarok
    ) t ON ((ISNULL(t.NevSorrend,'') = ISNULL(fh.C_NEVSORREND,'') AND ISNULL(t.VezetekNev,'') = ISNULL(fh.C_VEZETEKNEV,'') AND ISNULL(t.UtoNev,'') = ISNULL(fh.C_UTONEV,''))
        OR (ISNULL(t.VezetekNev,'') = ISNULL(fh.C_UTONEV,'') AND ISNULL(t.UtoNev,'') = ISNULL(fh.C_VEZETEKNEV,'')))
      AND ISNULL(t.Elotag,'') = ISNULL(fh.C_ELOTAG,'')
      AND ((ISNULL(t.AnyjaNeveNevSorrend,'') = ISNULL(fh.C_ANYJANEVESORREND,'') AND ISNULL(t.AnyjaNeveVezetekNev,'') = ISNULL(fh.C_ANYJAVEZETEKNEVE,'') AND ISNULL(t.AnyjaNeveKeresztNev,'') = ISNULL(fh.C_ANYJAUTONEVE,''))
        OR (ISNULL(t.AnyjaNeveVezetekNev,'') = ISNULL(fh.C_ANYJAUTONEVE,'') AND ISNULL(t.AnyjaNeveKeresztNev,'') = ISNULL(fh.C_ANYJAVEZETEKNEVE,'')))
      AND ISNULL(t.AnyjaNeveElotag,'') = ISNULL(fh.C_ANYJANEVEELOTAG,'') 
      AND t.SzuletesiDatum = fh.C_SZULETESIDATUM AND t.SzuletesiHely = fh.C_SZULETESIHELY
      AND ISNULL(t.OktatasiAzonosito,'') = ISNULL(fh.C_OKTATASIAZONOSITO,'')
      AND fh.C_INTEZMENYID = @intezmenyid AND fh.C_TANEVID = @tanevID AND fh.TOROLT = 'F'
      AND EXISTS (SELECT 1 FROM T_ALKALMAZOTT_OSSZES a WHERE a.ID = fh.ID AND a.C_ALTANEVID = fh.C_TANEVID AND a.TOROLT = 'F') --ha letezik alkalmazottkent akkor mindenkepp update, maskepp insert
    WHEN MATCHED THEN
      UPDATE SET
        fh.C_NEME = t.Nem,
        fh.C_SZULETESIDATUM = t.SzuletesiDatum,
        fh.C_SZULETESINEV = t.SzuletesiNeve,
        fh.C_ANYJANEVE = t.AnyjaNeve,
        fh.C_SZULETESIHELY = t.SzuletesiHely,
        fh.C_ALLAMPOLGARSAGA = t.Allampolgarsag,
        fh.C_ALLAMPOLGARSAGA2 = t.Allampolgarsag2,
        fh.C_KERESESINEV = t.KeresesiNev,
        fh.C_SZULETESIORSZAG = t.SzuletesiOrszag,
        fh.C_SZULETESINEVSORREND = t.NevSorrend,
        fh.C_ANYJANEVESORREND = t.AnyjaNeveNevSorrend,
        fh.C_ALAPERTELMEZETTLCID = 1038,
        fh.C_NYOMTATASINEV = t.NyomtatasiNev,
        fh.C_UTONEV = t.UtoNev,
        fh.C_VEZETEKNEV = t.VezetekNev,
        fh.C_ELOTAG = t.Elotag,
        fh.C_NEVSORREND = t.NevSorrend,
        fh.C_NYILVANTARTASKEZDETE = GETDATE(),
        fh.C_OMKOD = t.OMAzonosito,
        fh.C_OKTATASIAZONOSITO = t.OktatasiAzonosito,
        fh.TOROLT = 'F',
        fh.SERIAL += 1,
        fh.LASTCHANGED = GETDATE(),
        fh.MODIFIER = @userId,
        fh.C_BELUGYALTALAZONOSITOTT = t.BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott,
        fh.C_UTOLSOADATFRISSITESIDOPONTJA =  t.UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja,
        fh.C_ANYJAUTONEVE = t.AnyjaNeveKeresztNev,
        fh.C_ANYJAVEZETEKNEVE = t.AnyjaNeveVezetekNev,
        fh.C_SZULETESIUTONEV = t.SzuletesiNeveKeresztNev,
        fh.C_SZULETESIVEZETEKNEV = t.SzuletesiNeveVezetekNev,
        fh.C_ANYJANEVEELOTAG = t.AnyjaNeveElotag,
        fh.C_SZULETESINEVELOTAG = t.SzuletesiNeveElotag
    WHEN NOT MATCHED THEN
      INSERT (
        [C_NEME],
        [C_SZULETESIDATUM],
        [C_SZULETESINEV],
        [C_ANYJANEVE],
        [C_SZULETESIHELY],
        [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_ANYJAUTONEVE],
        [C_ANYJAVEZETEKNEVE],
        [C_SZULETESIUTONEV],
        [C_SZULETESIVEZETEKNEV],
        [C_ANYJANEVEELOTAG],
        [C_SZULETESINEVELOTAG]
      ) VALUES (
        t.Nem,
        t.SzuletesiDatum,
        t.SzuletesiNeve,
        t.AnyjaNeve,
        t.SzuletesiHely,
        t.Allampolgarsag,
        t.Allampolgarsag2,
        t.KeresesiNev,
        t.SzuletesiOrszag,
        t.SzuletesiNeveNevSorrend,
        t.AnyjaNeveNevSorrend,
        1038,
        t.NyomtatasiNev,
        t.UtoNev,
        t.VezetekNev,
        t.Elotag,
        t.NevSorrend,
        GETDATE(),
        t.OktatasiAzonosito,
        t.OMAzonosito,
        @intezmenyID,
        @tanevID,
        NULL,
        @userId,
        t.BelugyMiniszteriumSzemelyiadatEsLakcimNyilvantartasavalBeazonositott,
        t.UtolsoSzemelyiadatEsLakcimNyilvantartasFrissitesIdopontja,
        t.AnyjaNeveKeresztNev,
        t.AnyjaNeveVezetekNev,
        t.SzuletesiNeveKeresztNev,
        t.SzuletesiNeveVezetekNev,
        t.AnyjaNeveElotag,
        t.SzuletesiNeveElotag
      )
    OUTPUT INSERTED.ID
    ,t.OktatasiAzonosito
    ,t.NevSorrend
    ,t.SzuletesiNeveElotag
    ,t.SzuletesiNeveVezetekNev
    ,t.SzuletesiNeveKeresztNev
    ,t.AnyjaNeveNevSorrend
    ,t.AnyjaNeveElotag
    ,t.AnyjaNeveVezetekNev
    ,t.AnyjaNeveKeresztNev
    ,t.SzuletesiDatum
    ,t.SzuletesiHely
    ,$action
    INTO @LinkTable(felHasznaloId
    ,OktatasiAzonosito
    ,NevSorrend
    ,SzuletesiNeveElotag
    ,SzuletesiNeveVezetekNev
    ,SzuletesiNeveKeresztNev
    ,AnyjaNeveNevSorrend
    ,AnyjaNeveElotag
    ,AnyjaNeveVezetekNev
    ,AnyjaNeveKeresztNev
    ,SzuletesiDatum
    ,SzuletesiHely
    ,action);

    UPDATE t
    SET t.FelhasznaloId = x.felhasznaloId
      ,t.isUjTanar = 0
    FROM @Tanarok t
      INNER JOIN @LinkTable x ON
      ((ISNULL(t.NevSorrend,'') = ISNULL(x.NevSorrend,'') AND ISNULL(t.SzuletesiNeveVezetekNev,'') = ISNULL(x.SzuletesiNeveVezetekNev,'') AND ISNULL(t.SzuletesiNeveKeresztNev,'') = ISNULL(x.SzuletesiNeveKeresztNev,''))
        OR (ISNULL(t.SzuletesiNeveVezetekNev,'') = ISNULL(x.SzuletesiNeveKeresztNev,'') AND ISNULL(t.SzuletesiNeveKeresztNev,'') = ISNULL(x.SzuletesiNeveVezetekNev,'')))
      AND ISNULL(t.SzuletesiNeveElotag,'') = ISNULL(x.SzuletesiNeveElotag,'') 
      AND ((ISNULL(t.AnyjaNeveNevSorrend,'') = ISNULL(x.AnyjaNeveNevSorrend,'') AND ISNULL(t.AnyjaNeveVezetekNev,'') = ISNULL(x.AnyjaNeveVezetekNev,'') AND ISNULL(t.AnyjaNeveKeresztNev,'') = ISNULL(x.AnyjaNeveKeresztNev,''))
        OR (ISNULL(t.AnyjaNeveVezetekNev,'') = ISNULL(x.AnyjaNeveKeresztNev,'') AND ISNULL(t.AnyjaNeveKeresztNev,'') = ISNULL(x.AnyjaNeveVezetekNev,'')))
      AND ISNULL(t.AnyjaNeveElotag,'') = ISNULL(x.AnyjaNeveElotag,'')
      AND t.SzuletesiDatum = x.SzuletesiDatum AND t.SzuletesiHely = x.SzuletesiHely 
      AND ISNULL(t.OktatasiAzonosito,'') = ISNULL(x.OktatasiAzonosito,'')

    MERGE T_ALKALMAZOTT_OSSZES a
    USING (
      SELECT * FROM @Tanarok
    ) t ON a.ID = t.FelhasznaloId AND a.C_ALINTEZMENYID = @intezmenyid AND a.C_ALTANEVID = @tanevID AND a.TOROLT = 'F'
    WHEN MATCHED THEN
      UPDATE SET
        a.C_FOALLAS = t.Foallas,
        a.TOROLT = 'F',
        a.SERIAL += 1,
        a.LASTCHANGED = GETDATE(),
        a.MODIFIER = @userId
    WHEN NOT MATCHED THEN
      INSERT (
        [ID],
        [C_FOALLAS],
        [C_ALINTEZMENYID],
        [C_ALTANEVID],
        [MODIFIER],
        [CREATOR]
      ) VALUES (
        t.FelhasznaloId,
        t.Foallas,
        @intezmenyID,
        @tanevID,
        NULL,
        @userId
      );
    MERGE T_MUNKAUGYIADATOK_OSSZES m
    USING (
      SELECT * FROM @Tanarok
    ) t ON m.C_ALKALMAZOTTID = t.FelhasznaloId AND m.C_INTEZMENYID = @intezmenyid AND m.C_TANEVID = @tanevID AND m.TOROLT = 'F'
    WHEN MATCHED THEN
      UPDATE SET
        m.C_ALKALMAZASKEZDETE = t.JogviszonyKezdete,
        m.C_ALKALMAZASMEGSZUNESE =  t.JogviszonyBefejezese,
        m.C_KOTELEZOORASZAM = t.KotelezoOraszam,
        m.C_FOGLALKOZTATASTIPUS = t.FoglalkoztatasTipus,
        m.C_MUNKAKORTIPUSA = IIF (t.MunkakorTipusa = 548,  m.C_MUNKAKORTIPUSA, t.MunkakorTipusa ),
        m.C_MUNKAVISZONYTIPUSA = IIF (t.MunkaviszonyTipusa = 643,  m.C_MUNKAVISZONYTIPUSA, t.MunkaviszonyTipusa ),
        m.C_FELADATELLATASIHELYID = @FeladatellatasiHelyId,
        m.TOROLT = 'F',
        m.SERIAL +=  1,
        m.LASTCHANGED = GETDATE(),
        m.MODIFIER = @userId
    WHEN NOT MATCHED THEN
      INSERT (
        C_ALKALMAZASKEZDETE,
        C_ALKALMAZASMEGSZUNESE,
        C_KOTELEZOORASZAM,
        C_FOGLALKOZTATASTIPUS,
        C_MUNKAKORTIPUSA,
        C_MUNKAVISZONYTIPUSA,
        C_ALKALMAZOTTID,
        C_FELADATELLATASIHELYID,
        C_INTEZMENYID,
        C_TANEVID,
        MODIFIER,
        CREATOR
      ) VALUES (
        t.JogviszonyKezdete,
        t.JogviszonyBefejezese,
        t.KotelezoOraszam,
        t.FoglalkoztatasTipus,
        t.MunkakorTipusa,
        t.MunkaviszonyTipusa,
        t.FelhasznaloId,
        @FeladatellatasiHelyId,
        @intezmenyID,
        @tanevID,
        NULL,
        @userId
      );

      MERGE T_CIM_OSSZES c
      USING (
        SELECT * FROM @Tanarok
        WHERE TartozkodasiCimIranyitoszam IS NOT NULL AND TartozkodasiCimIranyitoszam <> ''
          AND TartozkodasiCimTelepules IS NOT NULL AND TartozkodasiCimKozteruletNev IS NOT NULL AND TartozkodasiCimHazszam IS NOT NULL
      ) t ON c.C_FELHASZNALOID = t.FelhasznaloId AND c.C_INTEZMENYID = @intezmenyid AND c.C_TANEVID = @tanevID AND c.C_CIMTIPUSA = 909 AND c.TOROLT = 'F'
      WHEN MATCHED THEN
        UPDATE SET
          c.[C_CIMTIPUSA] = 909,
          c.[C_ORSZAG] = 765,
          c.[C_IRANYITOSZAM] = t.TartozkodasiCimIranyitoszam,
          c.[C_VAROS] = t.TartozkodasiCimTelepules,
          c.[C_KOZTERULET] = t.TartozkodasiCimKozteruletNev,
          c.[C_KOZTERULETJELLEGENEV] = t.TartozkodasiCimKozteruletJellegNev,
          c.[C_HAZSZAM] = t.TartozkodasiCimHazszam,
          c.[C_EMELET] = t.TartozkodasiCimPontositas,
          c.[TOROLT] = 'F',
          c.SERIAL += 1,
          c.LASTCHANGED = GETDATE(),
          c.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,
          t.TartozkodasiCimIranyitoszam,
          t.TartozkodasiCimTelepules,
          t.TartozkodasiCimKozteruletNev,
          t.TartozkodasiCimKozteruletJellegNev,
          t.TartozkodasiCimHazszam,
          t.TartozkodasiCimPontositas,
          t.FelhasznaloId,
          @intezmenyID,
          @tanevID,
          NULL,
          @userId
        );

      MERGE T_CIM_OSSZES c
      USING (
        SELECT * FROM @Tanarok
        WHERE AllandoLakcimIranyitoSzam IS NOT NULL AND AllandoLakcimTelepules IS NOT NULL AND AllandoLakcimKozteruletNev IS NOT NULL AND AllandoLakcimHazszam IS NOT NULL
      ) t ON c.C_FELHASZNALOID = t.FelhasznaloId AND c.C_INTEZMENYID = @intezmenyid AND c.C_TANEVID = @tanevID AND c.C_CIMTIPUSA = 907 AND c.TOROLT = 'F'
      WHEN MATCHED THEN
        UPDATE SET
          c.[C_CIMTIPUSA] = 907,
          c.[C_ORSZAG] = 765,
          c.[C_IRANYITOSZAM] = t.AllandoLakcimIranyitoSzam,
          c.[C_VAROS] = t.AllandoLakcimTelepules,
          c.[C_KOZTERULET] = t.AllandoLakcimKozteruletNev,
          c.[C_KOZTERULETJELLEGENEV] = t.AllandoLakcimKozteruletJellegNev,
          c.[C_HAZSZAM] = t.AllandoLakcimHazszam,
          c.[C_EMELET] = t.AllandoLakcimPontositas,
          c.[TOROLT] = 'F',
          c.SERIAL += 1,
          c.LASTCHANGED = GETDATE(),
          c.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 (
          907,
          765,
          t.AllandoLakcimIranyitoSzam,
          t.AllandoLakcimTelepules,
          t.AllandoLakcimKozteruletNev,
          t.AllandoLakcimKozteruletJellegNev,
          t.AllandoLakcimHazszam,
          t.AllandoLakcimPontositas,
          t.FelhasznaloId,
          @intezmenyID,
          @tanevID,
          NULL,
          @userId
        );

        INSERT INTO T_EMAIL_OSSZES(
          [C_EMAILTIPUSA],
          [C_EMAILCIM],
          [C_ALAPERTELMEZETT],
          [C_GONDVISELOID],
          [C_FELHASZNALOID],
          [C_INTEZMENYID],
          [C_TANEVID],
          [MODIFIER],
          [CREATOR]
        )
       SELECT 
          1025,
          t.EmailCim,
          ISNULL(LetezoEmail.KellAlap, 'T'),
          null,
          t.FelhasznaloId,
          @intezmenyID,
          @tanevID,
          NULL,
          @userId
       FROM @Tanarok t
        OUTER APPLY (SELECT TOP (1) 'F' AS KellAlap
          FROM T_EMAIL_OSSZES email 
          WHERE t.FelhasznaloId = email.C_FELHASZNALOID
            AND email.TOROLT = 'F' 
            AND email.C_ALAPERTELMEZETT = 'T') AS LetezoEmail
       WHERE EmailCim IS NOT NULL       
        AND NOT EXISTS 
         (SELECT * FROM T_EMAIL_OSSZES e 
            WHERE e.C_FELHASZNALOID = t.FelhasznaloId 
            AND e.C_INTEZMENYID = @intezmenyid 
            AND e.C_TANEVID = @tanevID 
            AND e.TOROLT = 'F' 
            AND e.C_EMAILCIM = t.EmailCim)      

      MERGE T_TELEFON_OSSZES tf
      USING (
        SELECT * FROM @Tanarok WHERE Telefonszam IS NOT NULL
      ) t ON tf.C_FELHASZNALOID = t.FelhasznaloId AND tf.C_INTEZMENYID = @intezmenyid AND tf.C_TANEVID = @tanevID AND tf.TOROLT = 'F'
      WHEN MATCHED THEN
        UPDATE SET
          tf.[C_TELEFONSZAM] = t.Telefonszam,
          tf.SERIAL += 1,
          tf.LASTCHANGED = GETDATE(),
          tf.MODIFIER = @userId
      WHEN NOT MATCHED THEN
        INSERT (
          [C_TELEFONTIPUSA],
          [C_TELEFONSZAM],
          [C_ALAPERTELMEZETT],
          [C_GONDVISELOID],
          [C_FELHASZNALOID],
          [C_INTEZMENYID],
          [C_TANEVID],
          [MODIFIER],
          [CREATOR]
        ) VALUES (
          1019,
          t.Telefonszam,
          'T',
          null,
          t.FelhasznaloId,
          @intezmenyID,
          @tanevID,
          NULL,
          @userId
        );

      DECLARE @szerepkorId int;

      SELECT @szerepkorId = ID
      FROM T_SZEREPKOR_OSSZES
      WHERE C_SZEREPKORTIPUS = '1760'
        AND C_INTEZMENYID = @intezmenyID AND C_TANEVID = @tanevID

      INSERT INTO T_FELHASZNALO_SZEREPKOR (
         C_FELHASZNALOID
        ,C_SZEREPKORID
      ) SELECT
         t.FelhasznaloId
        ,@szerepkorId
      FROM @Tanarok t
      WHERE NOT EXISTS (SELECT 1 FROM T_FELHASZNALO_SZEREPKOR fsz WHERE fsz.C_FELHASZNALOID = FelhasznaloId AND fsz.C_SZEREPKORID = @szerepkorId)

      DECLARE @aktTanevId int
        ,@kovetkezoTanevId int
        ,@alkalmazottId int
        ,@alkTanevId int
        ,@alkOktatasiAzonosito nvarchar(20)
        ,@alkNevSorrend char(1)
        ,@alkSzuletesiNeveElotag nvarchar(255)
        ,@alkSzuletesiNeveVezetekNev nvarchar(255)
        ,@alkSzuletesiNeveKeresztNev nvarchar(255)
        ,@alkAnyjaNeveNevSorrend char(1)
        ,@alkAnyjaNeveElotag nvarchar(255)
        ,@alkAnyjaNeveVezetekNev nvarchar(255)
        ,@alkAnyjaNeveKeresztNev nvarchar(255)
        ,@alkSzuletesiDatum datetime
        ,@alkSzuletesiHely nvarchar(50)

      DECLARE felhCur CURSOR FOR
      SELECT felHasznaloId FROM @LinkTable
      OPEN felhCur
      FETCH NEXT FROM felhCur INTO @alkalmazottId
      WHILE @@FETCH_STATUS=0
      BEGIN

        SELECT @alkTanevId=C_TANEVID
          ,@alkOktatasiAzonosito = C_OKTATASIAZONOSITO
          ,@alkNevSorrend = C_SZULETESINEVSORREND
          ,@alkSzuletesiNeveElotag = C_SZULETESINEVELOTAG
          ,@alkSzuletesiNeveVezetekNev = C_SZULETESIVEZETEKNEV
          ,@alkSzuletesiNeveKeresztNev = C_SZULETESIUTONEV
          ,@alkAnyjaNeveNevSorrend = C_ANYJANEVESORREND
          ,@alkAnyjaNeveElotag = C_ANYJANEVEELOTAG
          ,@alkAnyjaNeveVezetekNev = C_ANYJAVEZETEKNEVE
          ,@alkAnyjaNeveKeresztNev = C_ANYJAUTONEVE
          ,@alkSzuletesiDatum = C_SZULETESIDATUM
          ,@alkSzuletesiHely = C_SZULETESIHELY
        FROM T_FELHASZNALO
        WHERE ID = @alkalmazottId

        SELECT @kovetkezoTanevId = ID FROM T_TANEV_OSSZES WHERE C_INTEZMENYID=@intezmenyId AND TOROLT='F' AND C_KOVETKEZO='T'

        IF @kovetkezoTanevId IS NOT NULL AND @alkTanevId<>@kovetkezoTanevId
          AND NOT EXISTS(SELECT 1 FROM T_FELHASZNALO_OSSZES
            WHERE @alkTanevId=C_TANEVID
                AND @alkOktatasiAzonosito = C_OKTATASIAZONOSITO
                AND ((@alkNevSorrend = C_SZULETESINEVSORREND AND @alkSzuletesiNeveVezetekNev = C_VEZETEKNEV AND @alkSzuletesiNeveKeresztNev = C_UTONEV)
                  OR (@alkSzuletesiNeveVezetekNev = C_UTONEV AND @alkSzuletesiNeveKeresztNev = C_VEZETEKNEV))
                AND @alkSzuletesiNeveElotag = C_ELOTAG 
                AND ((@alkAnyjaNeveNevSorrend = C_ANYJANEVESORREND AND @alkAnyjaNeveVezetekNev = C_ANYJAVEZETEKNEVE AND @alkAnyjaNeveKeresztNev = C_ANYJAUTONEVE)
                  OR (@alkAnyjaNeveVezetekNev = C_ANYJAUTONEVE AND @alkAnyjaNeveKeresztNev = C_ANYJAVEZETEKNEVE))
                AND @alkAnyjaNeveElotag = C_ANYJANEVEELOTAG 
                AND @alkSzuletesiDatum = C_SZULETESIDATUM
                AND @alkSzuletesiHely = C_SZULETESIHELY
                AND TOROLT = 'F' AND C_TANEVID = @kovetkezoTanevId)
        BEGIN
          EXEC uspFollowUpAlkalmazott
            @intezmenyId = @intezmenyID,
            @aktTanevId = @alkTanevId,
            @kovetkezoTanevId = @kovetkezoTanevId,
            @alkalmazottId = @alkalmazottId

          DECLARE tovabbiMunkaugyCur CURSOR FOR
          SELECT ID FROM T_TOVABBIMUNKAUGYIADATOK_OSSZES tma
          WHERE tma.C_ALKALMAZOTTID = @alkalmazottId AND tma.TOROLT='F'

          DECLARE pepCur CURSOR FOR
          SELECT ID FROM T_PEDAGOGUSELETPALYAMODELL_OSSZES pep
          WHERE pep.C_TANARID = @alkalmazottId AND pep.TOROLT='F'

          DECLARE
             @tovabbiMunkaugyiAdatId int
            ,@pepId int

          OPEN tovabbiMunkaugyCur
          FETCH NEXT FROM tovabbiMunkaugyCur INTO @tovabbiMunkaugyiAdatId
          WHILE @@FETCH_STATUS = 0
          BEGIN
            EXEC uspFollowUpAlkalmazottTovabbiMunkaugy @intezmenyId, @aktTanevId, @kovetkezoTanevId, @tovabbiMunkaugyiAdatId
            FETCH NEXT FROM tovabbiMunkaugyCur INTO @tovabbiMunkaugyiAdatId
          END
          CLOSE tovabbiMunkaugyCur
          DEALLOCATE tovabbiMunkaugyCur

          OPEN pepCur
          FETCH NEXT FROM pepCur INTO @pepId
          WHILE @@FETCH_STATUS = 0
          BEGIN
            EXEC uspFollowUpAlkalmazottPEP @intezmenyId, @aktTanevId, @kovetkezoTanevId, @pepId
            FETCH NEXT FROM pepCur INTO @pepId
          END
          CLOSE pepCur
          DEALLOCATE pepCur

        END
        FETCH NEXT FROM felhCur INTO @alkalmazottId
      END
    COMMIT TRANSACTION
  END TRY
  BEGIN CATCH
    IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0
      ROLLBACK TRANSACTION;
    THROW
  END CATCH
END
GO
