﻿IF OBJECT_ID('[dbo].[sp_KIRImportTanarok]', 'P') IS NOT NULL BEGIN
  DROP PROCEDURE [dbo].[sp_KIRImportTanarok]
END
GO

CREATE PROCEDURE [dbo].[sp_KIRImportTanarok]
  -- Add the parameters for the stored procedure here
   @TanarokXML xml
  ,@FeladatellatasiHelyId int
  ,@intezmenyID int
  ,@tanevID int
  ,@userId int
AS
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;
  SET XACT_ABORT ON;

  -- XML paraméter értelmezése
  DECLARE @Tanarok TABLE (
     Id int
    ,OktatasiAzonosito varchar(15)
    ,KretaKod varchar(6)
    ,VezetekNev nvarchar(50)  
    ,UtoNev nvarchar(50)
    ,Elotag nvarchar(10)
    ,NevSorrend char(1)
    ,AnyjaNeveElotag nvarchar(10) 
    ,AnyjaNeveVezetekNev nvarchar(50)
    ,AnyjaNeveKeresztNev nvarchar(50)  
    ,AnyjaNeveNevSorrend nvarchar(50)
    ,SzuletesiDatum datetime
    ,SzuletesiHely nvarchar(255)
    ,SzuletesiOrszag int  
    ,Allampolgarsag int
    ,Nem int
    ,EmailCim nvarchar(255)
    ,Telefonszam nvarchar(100)
    ,AllandoLakcimIranyitoSzam nvarchar(10)  
    ,AllandoLakcimTelepules nvarchar(255)
    ,AllandoLakcimKozteruletNev nvarchar(255)
    ,AllandoLakcimKozteruletJelleg int
    ,AllandoLakcimHazszam nvarchar(20)
    ,TartozkodasiCimTelepules nvarchar(255)
    ,TartozkodasiCimKozteruletNev nvarchar(255)  
    ,TartozkodasiCimKozteruletJelleg int
    ,TartozkodasiCimHazszam nvarchar(20)  
    ,TartozkodasiCimIranyitoszam nvarchar(20)
    ,KeresesiNev nvarchar(255) 
    ,NyomtatasiNev nvarchar(255)
    ,OMAzonosito nvarchar(15) 
    ,Foallas char(1)
    ,KotelezoOraszam nvarchar(15)
    ,MunkakorTipusa nvarchar(15)
    ,MunkaviszonyTipusa nvarchar(15)
    ,JogviszonyKezdete 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
  )
  
  INSERT INTO @Tanarok (
     Id
    ,OktatasiAzonosito
    ,KretaKod
    ,VezetekNev
    ,UtoNev
    ,Elotag
    ,NevSorrend
    ,AnyjaNeveElotag
    ,AnyjaNeveVezetekNev
    ,AnyjaNeveKeresztNev
    ,AnyjaNeveNevSorrend
    ,SzuletesiDatum
    ,SzuletesiHely
    ,SzuletesiOrszag
    ,Allampolgarsag
    ,Nem
    ,EmailCim
    ,Telefonszam
    ,AllandoLakcimIranyitoSzam
    ,AllandoLakcimTelepules
    ,AllandoLakcimKozteruletNev
    ,AllandoLakcimKozteruletJelleg
    ,AllandoLakcimHazszam
    ,TartozkodasiCimTelepules
    ,TartozkodasiCimKozteruletNev
    ,TartozkodasiCimKozteruletJelleg
    ,TartozkodasiCimHazszam
    ,TartozkodasiCimIranyitoszam
    ,KeresesiNev
    ,NyomtatasiNev
    ,OMAzonosito
    ,Foallas
    ,KotelezoOraszam
    ,MunkakorTipusa
    ,MunkaviszonyTipusa
    ,JogviszonyKezdete
    ,isUjTanar
  ) SELECT  
    Id = Tanar.value('(ID)[1]', 'int'),
    OktatasiAzonosito = Tanar.value('(OktatasiAzonosito)[1]', 'varchar(15)'),
    KretaKod = Tanar.value('(KretaKod)[1]', 'varchar(6)'),
    VezetekNev =  Tanar.value('(ViseltNevVezetekNev)[1]', 'nvarchar(50)'),  
    UtoNev =  Tanar.value('(ViseltNevKeresztNev)[1]', 'nvarchar(50)'),
    Elotag =  Tanar.value('(ViseltNevElotag)[1]', 'nvarchar(10)'),  
    NevSorrend =  Tanar.value('(ViseltNevNevSorrend)[1]', 'char(1)'),
    AnyjaNeveElotag =  Tanar.value('(AnyjaNeveElotag)[1]', 'nvarchar(10)'), 
    AnyjaNeveVezetekNev =  Tanar.value('(AnyjaNeveVezetekNev)[1]', 'nvarchar(50)'),
    AnyjaNeveKeresztNev =  Tanar.value('(AnyjaNeveKeresztNev)[1]', 'nvarchar(50)'),  
    AnyjaNeveNevSorrend =  Tanar.value('(AnyjaNeveNevSorrend)[1]', 'nvarchar(50)'),
    SzuletesiDatum =  Tanar.value('(SzuletesiDatum)[1]', 'date'),  
    SzuletesiHely =  Tanar.value('(SzuletesiHely)[1]', 'nvarchar(255)'),
    SzuletesiOrszag =  Tanar.value('(SzuletesiOrszag)[1]', 'int'),  
    Allampolgarsag =  Tanar.value('(Allampolgarsag)[1]', 'int'),
    Nem =  Tanar.value('(Nem)[1]', 'int'),  
    EmailCim =  Tanar.value('(EmailCim)[1]', 'nvarchar(255)'),
    Telefonszam =  Tanar.value('(Telefonszam)[1]', 'nvarchar(100)'),
    AllandoLakcimIranyitoSzam =  Tanar.value('(AllandoLakcimIranyitoSzam)[1]', 'nvarchar(10)'),  
    AllandoLakcimTelepules =  Tanar.value('(AllandoLakcimTelepules)[1]', 'nvarchar(255)'),
    AllandoLakcimKozteruletNev =  Tanar.value('(AllandoLakcimKozteruletNev)[1]', 'nvarchar(255)'),  
    AllandoLakcimKozteruletJelleg =  Tanar.value('number((AllandoLakcimKozteruletJelleg)[1])', 'int'),
    AllandoLakcimHazszam =  Tanar.value('(AllandoLakcimHazszam)[1]', 'nvarchar(20)'),  
    TartozkodasiCimTelepules =  Tanar.value('(TartozkodasiCimTelepules)[1]', 'nvarchar(255)'),
    TartozkodasiCimKozteruletNev =  Tanar.value('(TartozkodasiCimKozteruletNev)[1]', 'nvarchar(255)'),  
    TartozkodasiCimKozteruletJelleg =  Tanar.value('number((TartozkodasiCimKozteruletJelleg)[1])', 'int'),
    TartozkodasiCimHazszam =  Tanar.value('(TartozkodasiCimHazszam)[1]', 'nvarchar(20)'),  
    TartozkodasiCimIranyitoszam =  Tanar.value('(TartozkodasiCimIranyitoSzam)[1]', 'nvarchar(20)'),
    KeresesiNev =  Tanar.value('(KeresesiNev)[1]', 'nvarchar(255)'), 
    NyomtatasiNev =  ltrim(Tanar.value('(NyomtatasiNev)[1]', 'nvarchar(255)')),
    OMAzonosito =  Tanar.value('(OMAzonosito)[1]', 'nvarchar(15)'), 
    Foallas =  Tanar.value('(Foallas)[1]', 'char(1)'),
    KotelezoOraszam =  Tanar.value('(KotelezoOraszam)[1]', 'nvarchar(15)'), 
    MunkakorTipusa =  Tanar.value('(MunkakorTipusa)[1]', 'nvarchar(15)'),
    MunkaviszonyTipusa =  Tanar.value('(MunkaviszonyTipusa)[1]', 'nvarchar(15)'),
    JogviszonyKezdete =  Tanar.value('(JogviszonyKezdete)[1]', 'date'),
    1 AS isUjTanar
  FROM @TanarokXML.nodes('/KIRTanarok/ImportaltTanarok/Tanar') as Tanarok(Tanar)
  

  
  DECLARE @LinkTable TABLE (felHasznaloId int, kretaKod varchar(6), action nvarchar(20))
  
  BEGIN TRY
    BEGIN TRANSACTION
  
    MERGE T_FELHASZNALO_OSSZES fh
    USING (
      SELECT * FROM @Tanarok
    ) t ON t.KretaKod = fh.C_KRETAKOD AND fh.C_INTEZMENYID = @intezmenyid AND fh.C_TANEVID = @tanevID
    WHEN MATCHED THEN
      UPDATE SET
        fh.C_NEME = t.Nem,
        fh.C_SZULETESIDATUM = t.SzuletesiDatum,
        fh.C_SZULETESINEV = t.VezetekNev + ' ' + t.UtoNev,
        fh.C_ANYJANEVE = t.AnyjaNeveVezetekNev + ' ' + t.AnyjaNeveKeresztNev,
        fh.C_SZULETESIHELY = t.SzuletesiHely,
        fh.C_ALLAMPOLGARSAGA = t.Allampolgarsag,
        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_SZULETESINEVELVALASZTO = LEN(t.VezetekNev),
        fh.C_ANYJANEVEELVALASZTO = LEN(t.AnyjaNeveVezetekNev),
        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_KRETAKOD = t.KretaKod,
        fh.C_OKTATASIAZONOSITO = t.OktatasiAzonosito,
        fh.TOROLT = 'F',
        fh.SERIAL += 1,
        fh.LASTCHANGED = GETDATE(),
        fh.MODIFIER = @userId 
    WHEN NOT MATCHED THEN
      INSERT (
        [C_NEME],
        [C_SZULETESIDATUM],
        [C_SZULETESINEV],
        [C_ANYJANEVE],
        [C_SZULETESIHELY],
        [C_ALLAMPOLGARSAGA],
        [C_KERESESINEV],
        [C_SZULETESIORSZAG],
        [C_SZULETESINEVSORREND],
        [C_ANYJANEVESORREND],
        [C_ALAPERTELMEZETTLCID],
        [C_SZULETESINEVELVALASZTO],
        [C_ANYJANEVEELVALASZTO],
        [C_NYOMTATASINEV],
        [C_UTONEV],
        [C_VEZETEKNEV],
        [C_ELOTAG],
        [C_NEVSORREND],
        [C_NYILVANTARTASKEZDETE],
        [C_OKTATASIAZONOSITO],
        [C_OMKOD],
        [C_KRETAKOD], 
        [C_INTEZMENYID], 
        [C_TANEVID],
        [MODIFIER],
        [CREATOR]
      ) VALUES (
        t.Nem, 
        t.SzuletesiDatum, 
        t.VezetekNev + ' ' + t.UtoNev, 
        t.AnyjaNeveVezetekNev + ' ' + t.AnyjaNeveKeresztNev, 
        t.SzuletesiHely,  
        t.Allampolgarsag, 
        t.KeresesiNev, 
        t.SzuletesiOrszag, 
        t.NevSorrend, 
        t.AnyjaNeveNevSorrend, 
        1038, 
        LEN(t.VezetekNev), 
        LEN(t.AnyjaNeveVezetekNev), 
        t.NyomtatasiNev,
        t.UtoNev, 
        t.VezetekNev, 
        t.Elotag, 
        t.NevSorrend,
        GETDATE(), 
        t.OktatasiAzonosito, 
        t.OMAzonosito,
        t.KretaKod, 
        @intezmenyID, 
        @tanevID,
        NULL, 
        @userId
      )
    OUTPUT INSERTED.ID, t.KretaKod, $action
    INTO @LinkTable(felhasznaloId, kretaKod, action);
    
    UPDATE t
    SET t.FelhasznaloId = x.felhasznaloId
      ,t.isUjTanar = 0
    FROM @Tanarok t
      INNER JOIN @LinkTable x ON x.KretaKod = t.KretaKod
    
    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
    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
    WHEN MATCHED THEN
      UPDATE SET
        m.C_ALKALMAZASKEZDETE = t.JogviszonyKezdete,
        m.C_KOTELEZOORASZAM = t.KotelezoOraszam,
		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_KOTELEZOORASZAM,
        C_MUNKAKORTIPUSA,
        C_MUNKAVISZONYTIPUSA,
        C_ALKALMAZOTTID,
        C_FELADATELLATASIHELYID,
        C_INTEZMENYID,
        C_TANEVID,
        MODIFIER,
        CREATOR
      ) VALUES (
        t.JogviszonyKezdete,
        t.KotelezoOraszam,
        t.MunkakorTipusa,
        t.MunkaviszonyTipusa,
        t.FelhasznaloId,
        @FeladatellatasiHelyId,
        @intezmenyID,
        @tanevID,
        NULL, 
        @userId
      );
      
      
      MERGE T_CIM_OSSZES c
      USING (
        SELECT * FROM @Tanarok
      ) t ON c.C_FELHASZNALOID = t.FelhasznaloId AND c.C_INTEZMENYID = @intezmenyid AND c.C_TANEVID = @tanevID AND c.C_CIMTIPUSA = 908
      WHEN MATCHED THEN
        UPDATE SET
          c.[C_CIMTIPUSA] = 908,
          c.[C_ORSZAG] = 765,
          c.[C_IRANYITOSZAM] = t.TartozkodasiCimIranyitoszam,
          c.[C_VAROS] = t.TartozkodasiCimTelepules,
          c.[C_KOZTERULET] = t.TartozkodasiCimKozteruletNev,
          c.[C_KOZTERULETJELLEGE] = t.TartozkodasiCimKozteruletJelleg,
          c.[C_HAZSZAM] = t.TartozkodasiCimHazszam,
          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_KOZTERULETJELLEGE],
          [C_HAZSZAM],
          [C_FELHASZNALOID],
          [C_INTEZMENYID],
          [C_TANEVID],
          [MODIFIER],
          [CREATOR]
        ) VALUES (
          908, 
          765, 
          t.TartozkodasiCimIranyitoszam,
          t.TartozkodasiCimTelepules,
          t.TartozkodasiCimKozteruletNev,
          t.TartozkodasiCimKozteruletJelleg,
          t.TartozkodasiCimHazszam,
          t.FelhasznaloId,
          @intezmenyID,
          @tanevID,
          NULL,
          @userId
        );   
        
      MERGE T_CIM_OSSZES c
      USING (
        SELECT * FROM @Tanarok
      ) t ON c.C_FELHASZNALOID = t.FelhasznaloId AND c.C_INTEZMENYID = @intezmenyid AND c.C_TANEVID = @tanevID AND c.C_CIMTIPUSA = 907
      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_KOZTERULETJELLEGE] = t.AllandoLakcimKozteruletJelleg,
          c.[C_HAZSZAM] = t.AllandoLakcimHazszam,
          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_KOZTERULETJELLEGE],
          [C_HAZSZAM],
          [C_FELHASZNALOID],
          [C_INTEZMENYID],
          [C_TANEVID],
          [MODIFIER],
          [CREATOR]
        ) VALUES (
          907,
          765,
          t.AllandoLakcimIranyitoSzam, 
          t.AllandoLakcimTelepules,
          t.AllandoLakcimKozteruletNev,
          t.AllandoLakcimKozteruletJelleg, 
          t.AllandoLakcimHazszam,
          t.FelhasznaloId,
          @intezmenyID,
          @tanevID,
          NULL,
          @userId
        );   

      MERGE T_EMAIL_OSSZES e
      USING (
        SELECT * FROM @Tanarok
      ) t ON e.C_FELHASZNALOID = t.FelhasznaloId AND e.C_INTEZMENYID = @intezmenyid AND e.C_TANEVID = @tanevID
      WHEN MATCHED THEN
        UPDATE SET
          e.C_EMAILCIM = t.EmailCim,
          e.SERIAL += 1,
          e.LASTCHANGED = GETDATE(),
          e.MODIFIER = @userId    
      WHEN NOT MATCHED THEN
        INSERT (
          [C_EMAILTIPUSA],
          [C_EMAILCIM],
          [C_ALAPERTELMEZETT],
          [C_GONDVISELOID],
          [C_FELHASZNALOID],
          [C_INTEZMENYID],
          [C_TANEVID],
          [MODIFIER],
          [CREATOR]
        ) VALUES (
          1025, 
          t.EmailCim, 
          'T', 
          null,
          t.FelhasznaloId,
          @intezmenyID,
          @tanevID,
          NULL,
          @userId
        ); 

      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
      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)
   
    COMMIT TRANSACTION
--    ROLLBACK TRANSACTION
  END TRY      
  BEGIN CATCH
    IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0 
      ROLLBACK TRANSACTION;
    THROW 
  END CATCH
END