-- dbo.ep_HDCDZApi_ZpracujPrijataData
CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData
      @idJson INT=NULL
AS


-- HD Consulting Strakonice, T. Buzin
-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !!


SET NOCOUNT ON


DECLARE
 @tranPred INT,
 @cnt INT,
 @datPorizeni DATETIME,
 @errMsg NVARCHAR(500),
 @bChyba BIT,
 @iChyba INT,
 @debugXml XML,
 @aktDatum DATETIME,
 @logTyp TINYINT,
 @logText NVARCHAR(500),
 @logInt INT,
 @logStr NVARCHAR(255),
 @log4Mail BIT=0

DECLARE
 @jsonString NVARCHAR(MAX),
 @jsonString2 NVARCHAR(MAX),
 @typDokum NVARCHAR(50),
 @subtypDokum NVARCHAR(50),
 @akce NVARCHAR(50),
 @akceSource NVARCHAR(50),
 @datumText NVARCHAR(25)

DECLARE @TabPHObj TABLE (ID INT NOT NULL, IDPHIdent INT)


-- vytvor pomocnou tabulku
/*
IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL
 DROP TABLE #TabJSONData
CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max))
*/
DROP TABLE IF EXISTS #TabJSONData
CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max))





IF (@idJson IS NULL)
  DECLARE j CURSOR LOCAL FOR
   SELECT ID, JSONData, DatPorizeni
    FROM dbo._hdc_ph_PrijataJsonData
    WHERE DatZpracovani IS NULL
        AND ISNULL(JSONData, N'')<>N''
    ORDER BY DatPorizeni ASC
 ELSE
  DECLARE j CURSOR LOCAL FOR
   SELECT ID, JSONData, DatPorizeni
    FROM dbo._hdc_ph_PrijataJsonData
    WHERE ID=@idJson
OPEN j
WHILE (1=1)
 BEGIN
  FETCH NEXT FROM j INTO @idJson, @jsonString, @datPorizeni
  IF (@@FETCH_STATUS<>0) BREAK

  IF (ISJSON(@jsonString)=0)
   CONTINUE


  BEGIN TRY
  SET @tranPred = @@TRANCOUNT
  IF (@tranPred=0)
   BEGIN TRAN


  SET @datumText = NULL
-- smaz pomocnou tabulku
  DELETE FROM #TabJSONData
  INSERT #TabJSONData (doc) SELECT @jsonString
  SELECT TOP(1) @akce = JSON_VALUE(doc, '$.action'), @akceSource = JSON_VALUE(doc, '$.source'), @datumText = JSON_VALUE(doc, '$.actionAt') FROM #TabJSONData

  SET @akce = ISNULL(@akce, N'')
  SET @akceSource = ISNULL(@akceSource, N'')
  SET @datumText = ISNULL(@datumText, N'')
  IF (@datumText<>N'')
   SET @datPorizeni = CONVERT(datetime, @datumText, 120)

  IF (@akce<>N'')
   UPDATE dbo._hdc_ph_PrijataJsonData SET Akce=@akce WHERE ID=@idJson AND Akce IS NULL


  IF ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson), 0)>=3
   BEGIN
    IF EXISTS(SELECT 1 FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson AND ISNULL(PosledniChyba,N'')=N'')
     UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=(SELECT TOP(1) LogText FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson ORDER BY DatPorizeni DESC) WHERE ID=@idJson
    CONTINUE
   END


  SET @logTyp = 0
  SET @logInt = NULL
  SET @logStr = N''
  SET @log4Mail = 0
  SET @logText = N''



-- BEGIN: TLACITKO
  IF (@akce=N'click' AND @akceSource='button')
   BEGIN
    SET @akce = N''
    UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE() WHERE ID=@idJson
   END -- akce: vyroba_zacatek
-- END: TLACITKO





   IF (@tranPred=0) AND (@@TRANCOUNT>0)
    COMMIT TRAN
  END TRY
  BEGIN CATCH
   IF (@tranPred=0) AND (@@TRANCOUNT>0)
    ROLLBACK TRAN
   SET @errMsg = ERROR_MESSAGE()

   UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson

   IF (@logTyp>0)
     INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, StrValue, IdJsonData, ForMail)
      SELECT @logTyp, ISNULL(@logText, N'') + NCHAR(13)+NCHAR(10) + @errMsg, @logInt, @logStr, @idJson, @log4Mail
    ELSE
     INSERT dbo._hdc_ph_Log (Typ, LogText, IdJsonData, ForMail) SELECT 1, N'Chyba zpracovani PrijataJsonData: ' + @errMsg, @idJson, 1
  END CATCH
  SET @logTyp=0

 END
CLOSE j
DEALLOCATE j




-- pro jistotu
IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL
 DROP TABLE #TabJSONData
