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

CREATE PROCEDURE [dbo].[sp_CsengetesiRendOrakTorles]
    @TanevId int,
    @xml xml
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @torlendoCsengetesiRendek TABLE (id int);

  INSERT INTO @torlendoCsengetesiRendek
  SELECT 
  sor.value('.', 'int') AS id  
  FROM @xml.nodes('/CsengetesiRendOraTorles/IdLista/Id') as sorok(sor)

  SELECT
  ID oraId,
  csengrendOraId,
  newCsengrendOraId,
  newOraKezdete,
  newOraVege,
  ISNULL(newOraszam, 0) newOraszam,
  newCsengrendId,
  IsTanora,
  UpdateVegeDate,
  UpdateKezdeteDate,
  UpdateType
  INTO #TEMPmodositandoOrak
  from (
    select kapcsolodoOrak.ID,
    kapcsolodoOrak.C_CSENGETESIRENDID,
    kapcsolodoOrak.C_CSENGETESIRENDORAID csengrendOraId,
    kapcsolodoOrak.C_ORASZAM,
    alapcsora.C_KEZDETE,
    alapcsora.C_VEGE,
    kapcsolodoOrak.C_ORAKEZDETE,
    kapcsolodoOrak.C_ORAVEGE,
    kapcsolodoOrak.Tanora IsTanora,
    csengrend.ID newCsengrendOraId,
    csengrend.C_CSENGETESIRENDID newCsengrendId,
    csengrend.C_KEZDETE newOraKezdete,
    csengrend.C_VEGE newOraVege,
    csengrend.C_ORASZAM newOraszam
    ,IIF(kapcsolodoOrak.Tanora = 0 and cast(alapcsora.C_VEGE as time) = cast(kapcsolodoOrak.C_ORAVEGE as time) and csengrend.C_VEGE is not null, 1, 0) UpdateVegeDate
    ,IIF(kapcsolodoOrak.Tanora = 0 and cast(alapcsora.C_KEZDETE as time) = cast(kapcsolodoOrak.C_ORAKEZDETE as time) and csengrend.C_KEZDETE is not null, 1, 0) UpdateKezdeteDate
    ,IIF(csengrend.ID is null, 1, 0) UpdateType
    from (
      select
      x.ID,
      C_CSENGETESIRENDID,
      C_CSENGETESIRENDORAID,
      C_ORASZAM,
      C_ORAKEZDETE,
      C_ORAVEGE,
      Tanora
      from(
        select ID,
        C_CSENGETESIRENDID,
        C_CSENGETESIRENDORAID,
        C_ORASZAM,
        C_ORAKEZDETE,
        C_ORAVEGE,
        0 Tanora
        from T_ORARENDIORA_OSSZES
        union
        select ID,
        C_CSENGETESIRENDID,
        C_CSENGETESIRENDORAID,
        C_ORASZAM,
        C_ORAKEZDETE,
        C_ORAVEGE,
        1 Tanora
        from T_TANITASIORA_OSSZES
    ) x
    inner join @torlendoCsengetesiRendek torlendoIdk on torlendoIdk.id = x.C_CSENGETESIRENDORAID
  ) kapcsolodoOrak
  left join (
    select 
    ID,
    C_KEZDETE,
    C_VEGE
    from T_CSENGETESIRENDORA_OSSZES) alapcsora on  alapcsora.ID = kapcsolodoOrak.C_CSENGETESIRENDORAID
    left join (select csora.ID,
      csora.C_CSENGETESIRENDID,
      csora.C_KEZDETE,
      csora.C_VEGE,
      csora.C_ORASZAM
      from T_CSENGETESIRENDORA_OSSZES csora
      inner join T_CSENGETESIREND_OSSZES on csora.C_CSENGETESIRENDID = T_CSENGETESIREND_OSSZES.ID And T_CSENGETESIREND_OSSZES.C_AKTIV = 'T'
      where csora.C_TANEVID = @TanevId)csengrend on csengrend.C_ORASZAM = kapcsolodoOrak.C_ORASZAM and csengrend.ID != kapcsolodoOrak.C_CSENGETESIRENDORAID
  )t
  
  UPDATE o 
  SET 
  o.C_ORAVEGE = IIF(temp.UpdateVegeDate = 1, 
    DATEADD(HOUR, datepart(hour, temp.newOraVege),DATEADD(MINUTE,datepart(minute, temp.newOraVege),CAST(CAST(o.C_ORAVEGE AS DATE) as datetime))),
    o.C_ORAVEGE),
  o.C_ORAKEZDETE = IIF(temp.UpdateKezdeteDate = 1, 
    DATEADD(HOUR, datepart(hour, temp.newOraVege),DATEADD(MINUTE,datepart(minute, temp.newOraVege),CAST(CAST(o.C_ORAKEZDETE AS DATE) as datetime))),
    o.C_ORAKEZDETE),
  o.C_CSENGETESIRENDID = temp.newCsengrendId,
  o.C_CSENGETESIRENDORAID = temp.newCsengrendOraId,
  o.C_ORASZAM = temp.newOraszam
  from T_ORARENDIORA_OSSZES o
  inner join #TEMPmodositandoOrak temp on temp.csengrendOraId = o.C_CSENGETESIRENDORAID and temp.IsTanora = 0
  
  UPDATE t 
  SET   
  t.C_CSENGETESIRENDID = temp.newCsengrendId,
  t.C_CSENGETESIRENDORAID = temp.newCsengrendOraId,
  t.C_ORASZAM = temp.newOraszam
  from T_TANITASIORA_OSSZES t
  inner join #TEMPmodositandoOrak temp on temp.csengrendOraId = t.C_CSENGETESIRENDORAID and temp.IsTanora = 1
  
  DELETE csro
  FROM T_CSENGETESIRENDORA_OSSZES csro
  inner join @torlendoCsengetesiRendek torlendoIdk on torlendoIdk.id = csro.ID

  DROP TABLE #TEMPmodositandoOrak

END
GO
