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

SET NOCOUNT ON
-- ! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !



DECLARE
 @errMsg NVARCHAR(500)=N'',
 @errProc NVARCHAR(100),
 @tranPred INT,
 @iChyba INT,
 @bChyba BIT,
 @iTemp INT,
 @debugXML XML,
 @idUziv INT

DECLARE
 @operJson NVARCHAR(max),
 @idDatazoneOper INT,
 @prikJson NVARCHAR(max),
 @materialJson NVARCHAR(max),
 @objekt NVARCHAR(50),
 @akce NVARCHAR(50),
 @trida NVARCHAR(50),
 @statusOp NVARCHAR(50),
 @typOperJson NVARCHAR(50),
 @jsonString NVARCHAR(max),
 @cisZam INT,
 @idZam INT,
 @idVPr INT,
 @radaVPr NVARCHAR(10),
 @radaDZVydej NVARCHAR(3),
 @dpzVydej TINYINT,
 @idVCPrik INT,
 @vc NVARCHAR(100),
 @pocetVC INT,
 @dokl INT,
 @alt NCHAR(1),
 @idPrP INT,
 @idPrPOdv INT,
 @doklOdv INT,
 @doklNew INT,
 @doklAutomat INT,
 @altAutomat NCHAR(1),
 @jeOdvadeci BIT=0,
 @datStart DATETIME,
 @datKonec DATETIME,
 @skCasSek INT,
 @mnoz NUMERIC(19,6),
 @idPrednaOp INT,
 @idPrednaOpOdv INT,
 @operPrednaOdv NVARCHAR(4),
 @cisloOdvOper NVARCHAR(4),
 @operPrednaPrac INT,
 @typOper TINYINT,
 @idPrac INT,
 @idPracOld INT,
 @idPracAutomat INT,
 @idStroj INT,
 @nazevOp NVARCHAR(100),
 @operPredna NVARCHAR(4),
 @odvadeciPredna BIT=0,
 @prvniOperace BIT=0,  -- priznak prvni operace (neodvadeci)
 @prvniOperaceVPrInt INT,
 @cisOper INT,
 @cisOperMax INT,
 @operMax NVARCHAR(4),
 @nazevOpMax NVARCHAR(100),
 @idKoop INT,
 @idEvidROp INT,
 @idEvidROpPol INT,
 @cntEvidROpPol INT,
 @idMzdy INT,
 @pocetMezd INT=0,
 @idMezdStr NVARCHAR(max),
 @idPrednaOpAutomat INT,
 @operPrednaOpAutomat NVARCHAR(4),
 @casSekOperPrednaAutomat INT,
 @casSekVypalovani INT,
 @idMzdyAutomat INT,
 @datKonecOp DATETIME,
 @ksZive NUMERIC(19,6),
 @ksEvid NUMERIC(19,6),
 @pocetEvidOp INT,
 @mamVypaleno BIT=0,
 @pocetVypalovani INT=0

DECLARE
 @idDZ INT,
 @idDZ2 INT,
 @sz NVARCHAR(3),
 @rc NVARCHAR(30),
 @szJeMat BIT=0,
 @idKZ INT,
 @idPrKVazby INT,
 @idDilec INT,
 @idVCS INT,
 @mnozstviPomer_A NUMERIC(19,6),
 @mnozstviPomer_B NUMERIC(19,6),
 @idGenVydejPrednaPol INT,
 @sklProVydej NVARCHAR(30),
 @sklProVydejRP NVARCHAR(30),
 @sklSurovyDil NVARCHAR(30),
 @sklSurovyJeIMaterial BIT=0   -- priznak ze sklad pro vydej suroveho dilu (SK 100) je i pro vydej materialu (ext.info na dilci TabKmenZbozi_EXT._SkladProVydejMat)

DECLARE @prikOperProEvid TABLE (IDPrikaz INT NOT NULL, DokladOp INT, AltOp NCHAR(1) )
DECLARE @evidOperR TABLE (ID INT NOT NULL, IDEvidRozpracOper INT, IDPrikaz INT, Doklad INT, Alt NCHAR(1), JeOdvadeci BIT NOT NULL DEFAULT 0, Smazat BIT NOT NULL DEFAULT 0)
DECLARE @evidMzdy TABLE (ID INT NOT NULL)
DECLARE @evidMzdyVypalovani TABLE (ID INT NOT NULL)

DROP TABLE IF EXISTS #TabJSONData
CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max) )


DROP TABLE IF EXISTS #HDCTabPrKVazbyGen_IDMzdyPredna
CREATE TABLE #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz int, Doklad int, IDMzdy int) 


DROP TABLE IF EXISTS #HDCTabPrKVazbyGenVCPredna
CREATE TABLE #HDCTabPrKVazbyGenVCPredna (
 ID INT IDENTITY NOT NULL,
 IDPolozky INT NOT NULL,
 VyrCislo NVARCHAR(100) NOT NULL,
 Mnozstvi NUMERIC(19,6) NOT NULL,
 Sklad NVARCHAR(30) NULL,
 IDKmenZbozi INT NULL,
 IDVyrCP INT NULL,
 PRIMARY KEY(ID)
)



DROP TABLE IF EXISTS #HDCTabPrKVazbyGenPredna
CREATE TABLE #HDCTabPrKVazbyGenPredna (
 ID INT IDENTITY NOT NULL,
 Generuj BIT NOT NULL DEFAULT 1,
 PoKorekciDat BIT NOT NULL DEFAULT 0,
 IDPrKV INT NOT NULL,
 Doklad INT NOT NULL,
 IDPrikaz INT NOT NULL,
 Prednastaveno BIT NOT NULL DEFAULT 1,
 Sklad NVARCHAR(30) NULL,
 VyrStredisko NVARCHAR(30) NULL,
 IDPracoviste INT NULL,
 mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0,
 Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0,
 Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0,
 Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0,
 Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0,
 Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0,
 MnozstviMax NUMERIC(19,6) NULL,
 PuvodniMnozstviPoz NUMERIC(19,6) NULL,
 MnozstviPoz NUMERIC(19,6) NOT NULL,
 PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0,
 IDPohZbo INT NULL,
 PoznamkaNaDoklad NTEXT NULL,
 priorita INT NOT NULL DEFAULT 0,
 vyssi INT NOT NULL,
 nizsi INT NOT NULL,
 DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1,
 pozice NVARCHAR(100) NULL DEFAULT N'',
 Operace NCHAR(4) NULL,
 FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0,
 mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1,
 ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0,
 mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0,
 Prirez NUMERIC(19,6) NOT NULL DEFAULT 1,
 Poznamka NTEXT NULL,
 pom_pomer_A NUMERIC(19,6) NULL,
 pom_pomer_B NUMERIC(19,6) NULL,
 Dodavatel INT NULL,
 mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))),
 PRIMARY KEY (ID)
)

-- cisteni seedu
SET @iTemp = (SELECT MAX(ID) FROM dbo.TabPrikazMzdyAZmetky)
DBCC CHECKIDENT (TabPrikazMzdyAZmetky, RESEED, @iTemp)
SET @iTemp = (SELECT MAX(ID) FROM dbo.TabDokladyZbozi)
DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @iTemp)
SET @iTemp = (SELECT MAX(ID) FROM dbo.TabPohybyZbozi)
DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @iTemp)





IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL
 SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME())
SET @idUziv = ISNULL(@idUziv, 0)

SET @operPrednaOdv = N''
SET @idPrednaOpOdv = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _OdvadeciOperace=1)
IF (@idPrednaOpOdv IS NOT NULL)
 SET @operPrednaOdv = (SELECT _CIsloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpOdv)





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

  IF (ISJSON(@jsonString)=0)
   BEGIN
    UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Neplatna JSON data' WHERE ID=@idJson
   END

  SET @objekt = TRIM(ISNULL(@objekt, N''))
  SET @akce = TRIM(ISNULL(@akce, N''))

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


   DELETE FROM #TabJSONData
   INSERT #TabJSONData (doc) VALUES (@jsonString)
   IF (@objekt=N'')
    SELECT TOP(1) @objekt = JSON_VALUE(doc, '$.object') FROM #TabJSONData
   IF (@akce=N'')
    SELECT TOP(1) @akce = JSON_VALUE(doc, '$.action') FROM #TabJSONData

   IF (@objekt=N'operace')
    BEGIN
     SELECT TOP(1) @cisZam = JSON_VALUE(doc, '$.operace.worker.code') FROM #TabJSONData
     SET @idZam = (SELECT ID FROM dbo.TabCisZam WHERE Cislo=@cisZam)
    END

   UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL, CisloZam=@cisZam, Blokovano=1 WHERE ID=@idJson


   IF (@objekt=N'operace') AND (@idZam IS NOT NULL)
    BEGIN
     IF (@akce=N'start')
      BEGIN
       SET @idDatazoneOper = NULL
       SET @idEvidROp = NULL
       SET @errMsg = N''
       SET @operPredna = N''
       SET @odvadeciPredna = 0
       SET @nazevOp = N''
       SET @operMax = N''

       SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'),
              @idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @datStart = JSON_VALUE(d3.operace, '$.startAt'),
              @statusOp = JSON_VALUE(d3.operace, '$.status'), @typOperJson=JSON_VALUE(d3.operace, '$.typ'),
              @prikJson = d4.prikazy, @idDatazoneOper = JSON_VALUE(d.doc, '$.operace.datazoneId')
        FROM #TabJSONData d
         CROSS APPLY OPENJSON(d.doc, N'$')
          WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2
         CROSS APPLY OPENJSON(d.doc, N'$')
          WITH ([operace] NVARCHAR(max) AS JSON) AS d3
         CROSS APPLY OPENJSON(d3.operace, N'$')
          WITH ([prikazy] NVARCHAR(max) AS JSON) AS d4

       IF (@idVPr IS NOT NULL)
        UPDATE dbo._hdc_ph_PrijataJsonData SET IDPrikaz=@idVPr WHERE ID=@idJson
       IF (@idDatazoneOper IS NOT NULL)
        UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idDatazoneOper WHERE ID=@idJson

       DELETE FROM @prikOperProEvid
       SET @idPrP = NULL

       IF (@idPrednaOp IS NOT NULL)
        BEGIN
         SET @operPredna = CONVERT(nvarchar, @idPrednaOp)
         SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna)
        END
       IF (@idPrednaOp IS NOT NULL)
        BEGIN
         SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace
          FROM dbo.TabPredna WHERE ID=@idPrednaOp
         IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL)
          SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
         IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_OdvadeciOperace') IS NOT NULL)
          SET @odvadeciPredna = (SELECT _OdvadeciOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
        END        
       SET @operPredna = ISNULL(@operPredna,N'')
       IF (@operPredna=N'')
        BEGIN
         UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: přednastavení ID ' + CONVERT(nvarchar, @idPrednaOp) + N' nemá zadané číslo operace.' WHERE ID=@idJson
         CONTINUE
        END


       IF (@typOperJson IN (N'prikaz', N'prednastavena')) AND (@idVPr IS NOT NULL)
        INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr
        
       IF (@typOperJson=N'hromadny') AND (@idVPr IS NULL)
        BEGIN
         DELETE FROM #TabJSONData
         INSERT #TabJSONData (doc) SELECT @prikJson
         SET @debugXML = (SELECT * FROM #TabJSONData FOR XML AUTO)
         DECLARE hop CURSOR LOCAL FOR
          SELECT d1.id
           FROM #TabJSONData d
            CROSS APPLY OPENJSON(d.doc, N'$')
            WITH (id INT) AS d1
         OPEN hop
         WHILE (1=1)
          BEGIN
           FETCH NEXT FROM hop INTO @idVPr
           IF (@@FETCH_STATUS<>0) BREAK
           INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr
          END
         CLOSE hop
         DEALLOCATE hop
        END -- hromadny


-- sklad pro vydej si zjisti z rady prikazu nebo ext.info na dilci
       SET @sklProVydej = NULL

       DECLARE p CURSOR LOCAL FOR
        SELECT IDPrikaz FROM @prikOperProEvid
       OPEN p
       WHILE (1=1)
        BEGIN
         FETCH NEXT FROM p INTO @idVPr
         IF (@@FETCH_STATUS<>0) BREAK

         SELECT @idDilec=p.IDTabKmen, @sklProVydejRP=rp.VydejMatPol_SkladProGenHlavDZ
          FROM dbo.TabPrikaz p WITH(NOLOCK) JOIN dbo.TabRadyPrikazu rp WITH(NOLOCK) ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr

--         SET @operPredna=dbo.hf_ZarovnejOperaciTechPos(@operPredna)
/*
         SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND nazev=@nazevOp
                        AND ISNULL(pracoviste,0)=ISNULL(@idPrac,0) AND ISNULL(IDkooperace,0)=ISNULL(@idKoop,0) AND ISNULL(IDStroje,0)=ISNULL(@idStroj,0))
*/
         SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE Prednastaveno=1 AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND operace=@operPredna)

-- existuje odvadeci operace v Prednastaveni pro operace a v prikazu ? pokud neni v prikazu, pridej ji do prikazu
         SET @doklOdv = NULL
         SET @idPrPOdv = (SELECT ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND Operace=@operPrednaOdv AND Odvadeci=1)

-- pokud prednastavena Odvadeci jeste neni v prikazu, pridej ji tam
         IF (@idPrPOdv IS NULL) AND (@idPrednaOpOdv IS NOT NULL)
          BEGIN
           EXEC @idPrPOdv = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOpOdv, @Operace=@operPrednaOdv
           IF (@idPrPOdv IS NOT NULL)
            BEGIN
-- korekce cisla dokladu odvadeci operace, posun na konec seznamu operaci
             SET @doklOdv=9990
             UPDATE dbo.TabPrPostup SET Odvadeci=0 WHERE ID<>@idPrPOdv AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL
             UPDATE dbo.TabPrPostup SET Doklad=@doklOdv, Odvadeci=1 WHERE ID=@idPrPOdv
            END
          END
         IF (@doklOdv IS NULL) AND (@idPrPOdv IS NOT NULL)
          SELECT @doklOdv=Doklad FROM dbo.TabPrPostup WHERE ID=@idPrPOdv


-- prednastavena operace v prikazu jeste neni, pridej ji
         IF (@idPrP IS NULL)
          BEGIN
           EXEC @idPrP = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOp, @Operace=@operPredna,
                                                         @VyraditZKontrolyPosloupOper=1
           IF (@idPrP IS NOT NULL)
            BEGIN
-- korekce cisla dokladu, pred odvadeci opeaci
             SELECT @dokl=ISNULL(MAX(Doklad),0)+1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad<9990
             UPDATE dbo.TabPrPostup SET Doklad=@dokl, Odvadeci=0 WHERE ID=@idPrP
            END
          END

         SET @idPrednaOpAutomat = NULL
         SET @operPrednaOpAutomat = N''

         IF (@idPrP IS NOT NULL)
          BEGIN
           SELECT @dokl=Doklad, @alt=Alt FROM dbo.TabPrPostup WHERE ID=@idPrP
           UPDATE dbo.TabPrPostup SET VyraditZKontrolyPosloupOper=1 WHERE ID=@idPrP AND Odvadeci=0

-- korekce cisla dokladu aby bylo pred odvadeci operaci
           IF (@doklOdv IS NOT NULL)
            IF (@dokl>@doklOdv)
             BEGIN
              SET @doklNew = 1 + ISNULL( (SELECT MAX(Doklad) FROM dbo.TabPrPostup
                                             WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Doklad<@doklOdv AND ID<>@idPrP), 0)
              IF (@doklNew IS NOT NULL)
               BEGIN
                UPDATE dbo.TabPrPostup SET Doklad=@doklNew WHERE ID=@idPrP
                SET @dokl = @doklNew
               END
             END
             
           IF (@idEvidROp IS NULL)
            EXEC @idEvidROp = dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=@idZam, @IDPracoviste=@idPrac, @IDStroje=@idStroj, @CasZahajeni=@datStart, @errMsg = @errMsg OUT

           IF (@idEvidROp IS NOT NULL)
            BEGIN
			 IF NOT EXISTS(SELECT 1 FROM dbo.TabEvidRozpracOper_EXT WHERE ID=@idEvidROp)
			  INSERT dbo.TabEvidRozpracOper_EXT (ID) VALUES (@idEvidROp)
			 IF (@idDatazoneOper IS NOT NULL)
			  UPDATE dbo.TabEvidRozpracOper_EXT SET _PHIdent=@idDatazoneOper WHERE ID=@idEvidROp

             SET @idVCPrik = NULL
             IF 1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr), 0)
              SET @idVCPrik = (SELECT TOP(1) ID FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr)
             EXEC @idEvidROpPol = dbo.ep_Vyroba_InsertEvidRozpracOperPol @IDEvidRozpOper=@idEvidROp, @IdPrikaz=@idVPr, @doklPrPost=@dokl,
                                                                         @altPrPost=@alt, @IdVyrCis=@idVCPrik, @errMsg = @errMsg OUT
            END -- idEvidROp IS NOT NULL
          END -- idPrP IS NOT NULL

-- pokud mam naslednou automatickou operaci, zkontrolu a pripadne ji pridej na prikaz
         IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NOT NULL)
          SET @idPrednaOpAutomat = (SELECT _IDNasledujiciOperaceAutomat FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
         IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOpAutomat IS NOT NULL)
           SELECT @operPrednaOpAutomat = _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpAutomat
         SET @operPrednaOpAutomat = ISNULL(@operPrednaOpAutomat, N'')
         IF (@operPrednaOpAutomat<>N'')
          BEGIN
           SET @idPrP = (SELECT ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOpAutomat)
           IF (@idPrP IS NULL)
            EXEC @idPrP = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOpAutomat, @Operace=@operPrednaOpAutomat,
                                                          @VyraditZKontrolyPosloupOper=1
           IF (@idPrP IS NOT NULL)
            BEGIN
-- korekce cisla dokladu
             SELECT @dokl=Doklad FROM dbo.TabPrPostup WHERE ID=@idPrP
             IF (@dokl>@doklOdv)
              BEGIN
               SET @doklNew = 1 + ISNULL( (SELECT MAX(Doklad) FROM dbo.TabPrPostup
                                              WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Doklad<@doklOdv AND ID<>@idPrP), 0)
               IF (@doklNew IS NOT NULL)
                BEGIN
                 UPDATE dbo.TabPrPostup SET Doklad=@doklNew WHERE ID=@idPrP AND Operace=@operPrednaOpAutomat
                 SET @dokl = @doklNew
                END
              END  -- @dokl>@doklOdv
            END  -- @idPrP IS NOT NULL
          END  -- @operPrednaOpAutomat<>N''
        END
       CLOSE p
       DEALLOCATE p

       IF (@errMsg<>N'')
        UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson
       UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDEvidRozpOp=@idEvidROp WHERE ID=@idJson
      END -- akce Start





     IF (@akce=N'stop')
      BEGIN
       SET @idDatazoneOper = NULL
       SET @idEvidROp = NULL
       SET @errMsg = N''
       SET @operPredna = N''
       SET @odvadeciPredna = 0
       SET @operPrednaOpAutomat = N''
       SET @idPrednaOpAutomat = NULL
       SET @nazevOp = N''
       SET @operMax = N''
       DELETE FROM @prikOperProEvid
       DELETE FROM @evidOperR
       DELETE FROM @evidMzdy

       SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'),
              @idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @datStart = JSON_VALUE(d3.operace, '$.startAt'),
              @datKonec = JSON_VALUE(d3.operace, '$.stopAt'), @statusOp = JSON_VALUE(d3.operace, '$.status'),
              @typOperJson=JSON_VALUE(d3.operace, '$.typ'),
              @prikJson = d4.prikazy, @materialJson=d4.material, @idDatazoneOper = JSON_VALUE(d.doc, '$.operace.datazoneId')
        FROM #TabJSONData d
         CROSS APPLY OPENJSON(d.doc, N'$')
          WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2
         CROSS APPLY OPENJSON(d.doc, N'$')
          WITH ([operace] NVARCHAR(max) AS JSON) AS d3
         CROSS APPLY OPENJSON(d3.operace, N'$')
          WITH ([prikazy] NVARCHAR(max) AS JSON, [material] NVARCHAR(max) AS JSON) AS d4

       SET @materialJson = ISNULL(@materialJson, N'')
       IF (CHARINDEX('skupina', @materialJson)>0)
        UPDATE dbo._hdc_ph_PrijataJsonData SET MamMaterial=1 WHERE ID=@idJson
  
       IF (@idVPr IS NOT NULL)
        UPDATE dbo._hdc_ph_PrijataJsonData SET IDPrikaz=@idVPr WHERE ID=@idJson
       IF (@idDatazoneOper IS NOT NULL)
        UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idDatazoneOper WHERE ID=@idJson

       SET @idPrP = NULL
       SET @idPrac = NULL

       IF (@idPrednaOp IS NOT NULL)
        BEGIN
         SET @operPredna = CONVERT(nvarchar, @idPrednaOp)
         SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna)
        END
       IF (@idPrednaOp IS NOT NULL)
        BEGIN
         SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace
          FROM dbo.TabPredna WHERE ID=@idPrednaOp
         IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL)
          SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
         IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_OdvadeciOperace') IS NOT NULL)
          SET @odvadeciPredna = (SELECT _OdvadeciOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
        END        
       SET @operPredna = ISNULL(@operPredna,N'')
       IF (@operPredna=N'')
        BEGIN
         UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: přednastavení ID ' + CONVERT(nvarchar, @idPrednaOp) + N' nemá zadané číslo operace.' WHERE ID=@idJson
         CONTINUE
        END

       SET @idPrednaOpAutomat = NULL
       SET @operPrednaOpAutomat = N''
       IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NOT NULL)
        SET @idPrednaOpAutomat = (SELECT _IDNasledujiciOperaceAutomat FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
       IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOpAutomat IS NOT NULL)
         SELECT @operPrednaOpAutomat = _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpAutomat
       SET @operPrednaOpAutomat = ISNULL(@operPrednaOpAutomat, N'')      
       SET @casSekOperPrednaAutomat = ISNULL( (SELECT TAC_J_S FROM dbo.TabPredna WHERE ID=@idPrednaOpAutomat), 0)

       SET @casSekVypalovani = 0
       IF (@operPrednaOpAutomat=N'9260')
        SET @casSekVypalovani = @casSekOperPrednaAutomat
      

       IF (@idPrac IS NULL)
        BEGIN
         UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'Z operace nelze identifikovat pracoviste, neslo by identifikovat EvidRozpracOper' WHERE ID=@idJson
         CONTINUE
        END


       IF (@typOperJson IN (N'prikaz', N'prednastavena')) AND (@idVPr IS NOT NULL)
        INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr

       IF (@typOperJson=N'hromadny') AND (@idVPr IS NULL)
        BEGIN
         DELETE FROM #TabJSONData
         INSERT #TabJSONData (doc) SELECT @prikJson
         SET @debugXML = (SELECT * FROM #TabJSONData FOR XML AUTO)
         DECLARE hop CURSOR LOCAL FOR
          SELECT d1.id
           FROM #TabJSONData d
            CROSS APPLY OPENJSON(d.doc, N'$')
            WITH (id INT) AS d1
         OPEN hop
         WHILE (1=1)
          BEGIN
           FETCH NEXT FROM hop INTO @idVPr
           IF (@@FETCH_STATUS<>0) BREAK
           INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr
          END
         CLOSE hop
         DEALLOCATE hop
        END -- hromadny


       DECLARE p CURSOR LOCAL FOR
        SELECT IDPrikaz FROM @prikOperProEvid
       OPEN p
       WHILE (1=1)
        BEGIN
         FETCH NEXT FROM p INTO @idVPr
         IF (@@FETCH_STATUS<>0) BREAK

         SET @idEvidROpPol = (SELECT TOP(1) r.ID FROM dbo.TabEvidRozpracOperR r INNER JOIN dbo.TabEvidRozpracOper h ON (h.ID=r.IDEvidRozpracOper)
                                LEFT JOIN dbo.TabEvidRozpracOper_EXT he ON (he.ID=h.ID)
                                INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=r.IDPrikaz AND pp.Doklad=r.DokladPrPostup AND pp.Alt=r.AltPrPostup)
                                INNER JOIN dbo.TabPrikaz p ON (p.ID=r.IDPrikaz)
                               WHERE pp.IDOdchylkyDo IS NULL AND h.IDPracoviste=@idPrac AND r.IDPrikaz=@idVPr AND p.StavPrikazu IN (30)
                                 AND pp.Operace=@operPredna AND pp.Prednastaveno=1 AND h.IDZamestnance=@idZam
                                 AND ISNULL(he._PHIdent,0)=ISNULL(@idDatazoneOper,0)
                                 AND h.CasUkonceni IS NULL)
         IF (@idEvidROpPol IS NOT NULL)
          INSERT @evidOperR (ID, IDEvidRozpracOper, IDPrikaz, Doklad, Alt)
           SELECT ID, IDEvidRozpracOper, @idVPr, DokladPrPostup, AltPrPostup FROM dbo.TabEvidRozpracOperR WHERE ID=@idEvidROpPol
        END
       CLOSE p
       DEALLOCATE p
       
       IF EXISTS (SELECT 1 FROM @evidOperR)
        BEGIN
         IF (@datKonec<=@datStart) OR (@datKonec IS NULL)
          SET @datKonec = DATEADD(s, 5, @datStart)
         SET @skCasSek = DATEDIFF(s, @datStart, @datKonec)
         
         SET @cntEvidROpPol = ISNULL( (SELECT COUNT(ID) FROM TabEvidRozpracOperR
                                        WHERE IDEvidRozpracOper=(SELECT TOP(1) IDEvidRozpracOper FROM @evidOperR)), 0)
         SET @pocetEvidOp = ISNULL( (SELECT COUNT(*) FROM @evidOperR), 0)
                                        
-- pokud mam stejny pocet rozpracovanych operaci vuci prikazum v json, zkontroluj jestli nejaka neni odvadeci
         IF (@cntEvidROpPol=@pocetEvidOp)
          BEGIN
           DECLARE e CURSOR LOCAL FOR
            SELECT ID FROM @evidOperR
           OPEN e
           WHILE (1=1)
            BEGIN
             FETCH NEXT FROM e INTO @idEvidROpPol
             IF (@@FETCH_STATUS<>0) BREAK

             SELECT @idVPr=r.IDPrikaz, @dokl=r.DokladPrPostup, @alt=r.AltPrPostup, @idVCPrik=r.IDVyrCis, @idPracOld=h.IDPracoviste
              FROM dbo.TabEvidRozpracOperR r INNER JOIN dbo.TabEvidRozpracOper h ON (h.ID=r.IDEvidRozpracOper)
               WHERE r.ID=@idEvidROpPol

             SELECT @ksZive=kusy_zive FROM dbo.TabPrikaz WHERE ID=@idVPr
             SET @ksEvid = ISNULL( (SELECT SUM(kusy_odv+kusy_zmet_opr+kusy_zmet_neopr) FROM dbo.TabPrikazMzdyAZmetky
                                     WHERE IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND AltPrPostup=@alt
                                       AND ISNULL(IDVyrCis,0)=ISNULL(@idVCPrik,0)
                                   ), 0)
             SET @jeOdvadeci=0
             IF EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL
                          AND Prednastaveno=1 AND Odvadeci=1)
              SET @jeOdvadeci=1
             UPDATE @evidOperR SET JeOdvadeci=@jeOdvadeci WHERE ID=@idEvidROpPol

             IF (@jeOdvadeci=1) AND (@ksEvid>=@ksZive)             
              BEGIN
               DELETE FROM dbo.TabEvidRozpracOperR WHERE ID=@idEvidROpPol
               UPDATE @evidOperR SET Smazat=1 WHERE ID=@idEvidROpPol
              END
            END
           CLOSE e
           DEALLOCATE e
           DELETE FROM @evidOperR WHERE Smazat=1 OR IDEvidRozpracOper IS NULL
          END -- mam v json stejny pocet prikazu jako v EvidROp

-- mam jen jednu EvidRozpracOper hlavicku ?
         IF (1=ISNULL( (SELECT COUNT(*) FROM (SELECT DISTINCT(IDEvidRozpracOper) FROM @evidOperR GROUP BY IDEvidRozpracOper) x), 0))
          BEGIN
           SELECT TOP(1) @idEvidROp=IDEvidRozpracOper FROM @evidOperR
           UPDATE dbo.TabEvidRozpracOperR
              SET Mnoz_odv = IIF(@jeOdvadeci=1, 1, 0)
--                  ,Sk_Cas = CASE Sk_Cas_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END,
--                  Sk_Cas_Obsluhy = CASE Sk_Cas_Obsluhy_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END
             WHERE IDEvidRozpracOper=@idEvidROp
           UPDATE dbo.TabEvidRozpracOper SET CasUkonceni=@datKonec, CelkovyCas_T=0, CelkovyCas=@skCasSek WHERE ID=@idEvidROp
           EXEC hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=@idEvidROp, @CelkovyCas_S=@skCasSek, @KVO=1
           
-- evidence vsech mezd
           DELETE FROM @evidMzdy
           DELETE FROM @evidMzdyVypalovani
           DECLARE e CURSOR LOCAL FOR
            SELECT ID, IDPrikaz, Doklad, Alt, JeOdvadeci FROM @evidOperR
           OPEN e
           WHILE (1=1)
            BEGIN
             FETCH NEXT FROM e INTO @idEvidROpPol, @idVPr, @dokl, @alt, @jeOdvadeci
             IF (@@FETCH_STATUS<>0) BREAK

-- vypni kontrolu posloupnosti pro operaci
             UPDATE dbo.TabPrPostup SET VyraditZKontrolyPosloupOper=1 WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL

             EXEC @idMzdy = dbo.hp_EvidenceOperace @IDEvidRozpracOperR=@idEvidROpPol, @Stav=0
             IF (@idMzdy IS NOT NULL)
              BEGIN
               INSERT @evidMzdy (ID) VALUES (@idMzdy)
               IF (@idPracOld IS NOT NULL)
                EXEC dbo.hp_ZmenaStavuMezdAZmetku @ID=@idMzdy, @Stav=1, @ZapisZmenu=0
                
               IF (@idVPr IS NULL)
                SELECT @idVPr=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy

               UPDATE dbo.TabPrikazMzdyAZmetky SET Datum = dbo.hf_TruncDate(@datKonec) WHERE ID=@idMzdy
               SELECT @datKonecOp=DatumUkonceniOp FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy
-- zaeviduj i automatickou operaci
               IF (@operPrednaOpAutomat<>N'')
                BEGIN
                 SET @datStart = DATEADD(second, 1, @datKonecOp)
                 SET @datKonec = DATEADD(second, @casSekOperPrednaAutomat, @datStart)
                 SELECT @doklAutomat=Doklad, @altAutomat=Alt, @idPracAutomat=pracoviste FROM dbo.TabPrPostup
                   WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOpAutomat
                 IF (@doklAutomat IS NOT NULL)
                  BEGIN
                   SET @idMzdyAutomat = NULL
                   EXEC @idMzdyAutomat = dbo.hp_EvidenceOperace @IDPrikaz=@idVPr, @Doklad=@doklAutomat, @Alt=@altAutomat, @Datum=@datStart,
                                                                @Sk_Cas_S=@casSekOperPrednaAutomat, @Sk_Cas_Obsluhy_S=0, @IDZam=@idZam,
                                                                @DatumZahajeniOp=@datStart, @DatumUkonceniOp=@datKonec
                   IF (@idMzdyAutomat IS NOT NULL) AND (@idPracAutomat IS NOT NULL)
                    EXEC dbo.hp_ZmenaStavuMezdAZmetku @ID=@idMzdyAutomat, @Stav=1, @ZapisZmenu=0

-- poznamenej operaci vypalovani, bude se na ni rozpocitavat cas
                   IF (@idMzdyAutomat IS NOT NULL) AND (@operPrednaOpAutomat=N'9260')
                    INSERT @evidMzdyVypalovani (ID) VALUES (@idMzdyAutomat)

                  END -- @doklAutomat IS NOT NULL
                 
                END -- @operPrednaOpAutomat <> ''
              END -- @idMzdy IS NOT NULL
              
            END
           CLOSE e
           DEALLOCATE e
           
           SET @pocetMezd = ISNULL( (SELECT COUNT(*) FROM @evidMzdy), 0)

           IF (@pocetMezd=ISNULL( (SELECT COUNT(*) FROM @evidOperR), 0))
            UPDATE dbo.TabEvidRozpracOper SET DatumUzavreni=GETDATE(), AutorUzavreni=SUSER_SNAME() WHERE ID=@idEvidROp
           
           SET @pocetVypalovani = ISNULL( (SELECT COUNT(*) FROM @evidMzdyVypalovani), 0)
           IF (@pocetVypalovani>0) AND (@casSekVypalovani>0)
            BEGIN
             SET @casSekVypalovani = CEILING(@casSekVypalovani / @pocetVypalovani)
             DECLARE v CURSOR LOCAL FOR
              SELECT ID FROM @evidMzdyVypalovani
             OPEN v
             WHILE (1=1)
              BEGIN
               FETCH NEXT FROM v INTO @idMzdy
               IF (@@FETCH_STATUS<>0) BREAK
               UPDATE dbo.TabPrikazMzdyAZmetky SET Sk_Cas=dbo.hf_PrepoctiCas(@casSekVypalovani, 0, Sk_Cas_T) WHERE ID=@idMzdy
               EXEC dbo.hp_EvidenceOperace_OpravaMzdy @IDMzdy=@idMzdy
              END
             CLOSE v
             DEALLOCATE v
            END


          END  -- mam jen jednu EvidRozpOper
        END -- mam EvidRozpOperR k evidenci


-- pokud mam mzdy, koukni jestli mam delat vydej/odvod
       SET @materialJson = ISNULL(@materialJson, N'')
       IF EXISTS(SELECT 1 FROM @evidMzdy)
        BEGIN
         SET @idDZ = NULL    -- vydejka materialu
         SET @idDZ2 = NULL   -- vydejka suroveho dilu (SK 100)

         DECLARE ev CURSOR LOCAL FOR
          SELECT ID FROM @evidMzdy
         OPEN ev 
         WHILE (1=1)
          BEGIN
           FETCH NEXT FROM ev INTO @idMzdy
           IF (@@FETCH_STATUS<>0) BREAK
           
           SELECT @idVPr=IDPrikaz, @dokl=DokladPrPostup, @alt=AltPrPostup FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy
           SELECT @idDilec=p.IDTabKmen, @radaVPr=p.Rada, @radaDZVydej=rp.RadaDokl_GenerRezVyd_Mat, @dpzVydej=rp.DruhPohybu_GenerRezVyd,
                  @sklProVydejRP=rp.VydejMatPol_SkladProGenHlavDZ, @sklSurovyDil=rpe._SkladSurovychDilu
            FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) LEFT JOIN dbo.TabRadyPrikazu_EXT rpe ON (rpe.ID=rp.ID)
             WHERE p.ID=@idVPr
           SET @sklSurovyDil = ISNULL(@sklSurovyDil, @sklProVydejRP)


		   SET @prvniOperaceVPrInt = ISNULL( (SELECT MIN(TRY_PARSE(Operace AS int)) FROM dbo.TabPrPostup WHERE ISNULL(Operace,N'')<>N'' AND IDPrikaz=@idVPr
		                                       AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND Odvadeci=0 AND ISNULL(TRY_PARSE(Operace AS int),0)>0)
                                            , 0)
           SET @prvniOperace=0
           IF (CONVERT(int,@operPredna)=@prvniOperaceVPrInt)
            SET @prvniOperace=1
-- pokud jsem prvni operace na prikazu (ne odvadeci) a jsem prvni evidence, udelej vydej suroveho materialu (SK 100), sklad 001
           IF (@prvniOperace=1) AND NOT EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND ID<>@idMzdy)
            BEGIN
             IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL
              DELETE FROM #HDCTabPrKVazbyGenPredna
             IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenVCPredna', 'U') IS NOT NULL
              DELETE FROM #HDCTabPrKVazbyGenVCPredna
             IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
              DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna

             DECLARE m CURSOR LOCAL FOR
              SELECT v.ID, v.mnozstvi
               FROM dbo.TabPrKVazby v INNER JOIN dbo.TabKmenZbozi kN ON (kN.ID=v.nizsi)
                WHERE v.IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND kN.SkupZbo IN (N'100') AND v.vyssi=@idDilec
             OPEN m
             WHILE (1=1)
              BEGIN
               FETCH NEXT FROM m INTO @idPrKVazby, @mnoz
               IF (@@FETCH_STATUS<>0) BREAK

               SELECT @dokl=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby
               SELECT @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr),
                      @mnozstviPomer_B=PrP.kusy_zad
                 FROM dbo.TabPrikazMzdyAZmetky MZ
                  INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) 
                 WHERE MZ.ID=@idMzdy 

               INSERT INTO #HDCTabPrKVazbyGenPredna
                  (IDPrKV,  MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko,
                   IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi,
                   DavkaTPV, pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) 
                 SELECT
                    PrKV.ID, @mnoz, @mnozstviPomer_A, @mnozstviPomer_B,  PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko,
                    PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane,
                    PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi,
                    PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou,
                    PrKV.Prirez, PrKV.Poznamka 
                  FROM dbo.TabPrKVazby PrKV 
                  WHERE PrKV.ID=@idPrKVazby AND PrKV.uzavreno=0
               SET @iTemp = SCOPE_IDENTITY()

-- pokud mam na prikazu jen jedno VC, pridej ho pro vydej suroveho dilce
               SET @pocetVC = ISNULL( (SELECT COUNT(ID) FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr), 0)
               IF (@pocetVC=1) AND (@iTemp IS NOT NULL)
                BEGIN
                 SELECT TOP(1) @vc=VyrCislo FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr
                 IF (@mnoz<=ISNULL( (SELECT Mnozstvi-Odvedeno-Zmetky FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr AND VyrCislo=@vc), 0))
                  IF NOT EXISTS (SELECT 1 FROM #HDCTabPrKVazbyGenVCPredna WHERE IDPolozky=@iTemp AND VyrCislo=@vc)
                   INSERT #HDCTabPrKVazbyGenVCPredna (IDPolozky, VyrCislo, Mnozstvi, Sklad) SELECT @iTemp, @vc, @mnoz, @sklProVydejRP
                END

-- dopln vazbu na mzdu
               IF (@dokl IS NOT NULL) AND OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
                INSERT INTO #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz, Doklad, IDMzdy) SELECT @idVPr, @dokl, @idMzdy

-- sklad pro vydej suroveho dilu je nastaven ext.info na rade prikazu
               UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklSurovyDil
               UPDATE #HDCTabPrKVazbyGenVCPredna SET Sklad=@sklSurovyDil

              END
             CLOSE m
             DEALLOCATE m

             IF EXISTS(SELECT 1 FROM #HDCTabPrKVazbyGenPredna) -- mam nejaky material pro vydejku ?
              IF OBJECT_ID(N'dbo.ep_Vyroba_GenVydejZeMzdy', N'P') IS NOT NULL
               BEGIN
                UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklProVydejRP
                SET @idDZ2 = NULL
                BEGIN TRY
                 EXEC @iChyba = dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzdy, @IDDoklad=@idDZ2 OUT, @errMsg=@errMsg OUT, @realizujVydej=0
                 IF (@errMsg<>N'') OR (@iChyba>0)
                  BEGIN
                   UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky suroveho dilu: ' + @errMsg WHERE ID=@idMzdy
                   UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2
                  END
                END TRY
                BEGIN CATCH
                 IF (CHARINDEX(N'50014', @errMsg)>0)
                  SET @errMsg = N'Nesoulad množství výrobních čísel a položky' + NCHAR(13)+NCHAR(10) + @errMsg
                 IF (@errMsg<>N'')
                  UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy
                 UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2
                END CATCH
                IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL
                 DELETE FROM #HDCTabPrKVazbyGenPredna
                IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
                 DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna
               END -- mam ep_Vyroba_GenVydejZeMzdy

            END -- @prvniOperace=1



-- mam vydat nejaky material, naskenovany s ukoncenim operace ?
           IF (CHARINDEX('skupina', @materialJson)>0)
            BEGIN
             IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL
              DELETE FROM #HDCTabPrKVazbyGenPredna
             IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
              DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna
           
             SELECT @sklProVydej=ISNULL(ke._SkladProVydejMat, rp.VydejMatPol_SkladProGenHlavDZ)
              FROM dbo.TabPrikaz p
               INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada)
               INNER JOIN dbo.TabKmenZbozi k ON (k.ID=p.IDTabKmen)
               LEFT JOIN dbo.TabKmenZbozi_EXT ke ON (ke.ID=k.ID)
              WHERE p.ID=@idVPr

             SET @sklSurovyJeIMaterial=0
--             IF (@sklProVydejRP=@sklProVydej)
--              SET @sklSurovyJeIMaterial=1

             DELETE FROM #TabJSONData
             INSERT #TabJSONData (doc) SELECT @materialJson
             DECLARE m CURSOR LOCAL FOR
              SELECT ma.skupina, ma.regcis, ma.quantity
               FROM #TabJSONData d
                CROSS APPLY OPENJSON (d.doc, N'$')
                WITH (skupina NVARCHAR(3), regcis NVARCHAR(30), quantity NUMERIC(19,6) ) AS ma
             OPEN m
             WHILE (1=1)
              BEGIN           
               FETCH NEXT FROM m INTO @sz, @rc, @mnoz
               IF (@@FETCH_STATUS<>0) BREAK


-- pokud jsem material/polotovar SK 100 (surovy dilec), vydej me jinym vydejem (viz vyse), mozna i z jineho skladu
-- (Rada prikazu sklad pro vydej x ext.param na dilci TabKmenZbozi_EXT._SkladProVydejMat)
               IF (@sz IN (N'100'))
                CONTINUE


               SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc)
               IF (@idKZ IS NOT NULL)
                BEGIN
                 IF (@pocetMezd>1)
                  SET @mnoz = (@mnoz / @pocetMezd)

-- pokud neni urceno ze naskenovana karta je material, nastav to, pri tom zkontroluj i jestli je to nastavene na rade, at neprepises polotovar
                 SELECT @szJeMat=Material FROM dbo.TabSkupinyZbozi WHERE SkupZbo=@sz
                 SELECT @szJeMat=@szJeMat | Material FROM dbo.TabKmenZbozi WHERE ID=@idKZ
                 UPDATE dbo.TabKmenZbozi SET Material=1 WHERE ID=@idKZ AND Dilec=0 AND Material=0 AND @szJeMat=1

                 SET @idPrKVazby = (SELECT TOP(1) ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL
                                     AND vyssi=@idDilec AND nizsi=@idKZ ORDER BY Prednastaveno DESC)

                 IF (@idPrKVazby IS NULL)
                  EXEC @idPrKVazby = dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZ, @Mnozstvi=@mnoz
                 SET @dokl = NULL
                 IF (@idPrKVazby IS NOT NULL)
                  BEGIN
                   SELECT @dokl=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby
                   SELECT @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr),
                          @mnozstviPomer_B=PrP.kusy_zad
                     FROM dbo.TabPrikazMzdyAZmetky MZ
                      INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) 
                     WHERE MZ.ID=@idMzdy 
                   INSERT INTO #HDCTabPrKVazbyGenPredna
                      (IDPrKV,  MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko,
                       IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi,
                       DavkaTPV, pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) 
                     SELECT
                        PrKV.ID, @mnoz, @mnozstviPomer_A, @mnozstviPomer_B,  PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko,
                        PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane,
                        PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi,
                        PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou,
                        PrKV.Prirez, PrKV.Poznamka 
                       FROM dbo.TabPrKVazby PrKV 
                       WHERE PrKV.ID=@idPrKVazby AND PrKV.uzavreno=0
                   SET @iTemp = SCOPE_IDENTITY()

-- pokud neni prednastaveny sklad pro vydej, zkus to z rady prikazu, pripadne z ext.info na dilci TabKmenZbozi_EXT._SkladProVydejMat
                   UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklProVydej WHERE ID=@iTemp AND @sklProVydej IS NOT NULL

                   IF (@dokl IS NOT NULL) AND OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
                    INSERT INTO #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz, Doklad, IDMzdy) SELECT @idVPr, @dokl, @idMzdy
                  END -- idPrKVazby IS NOT NULL
                END -- idKZ IS NOT NULL
              END
             CLOSE m
             DEALLOCATE m
            
-- mam nejaky material pro vydejku ?
             IF EXISTS(SELECT 1 FROM #HDCTabPrKVazbyGenPredna)
              IF OBJECT_ID(N'dbo.ep_Vyroba_GenVydejZeMzdy', N'P') IS NOT NULL
               BEGIN
                SET @idDZ = NULL

-- pokud je sklad pro vydej materialu na rade VPr stejny jako na ext.info dilce prikazu, udelej vydej v jednom dokladu
                IF (@sklSurovyJeIMaterial=1) AND (@idDZ2 IS NOT NULL)
                 BEGIN
                  SET @idDZ = @idDZ2
                  SET @idDZ2 = NULL
                 END
-- pokud je sklad jiny nez na rade VPr, zaloz hlavicku a predej ji do generovaci procedury, jinak se v "hp_generujRezVydNew" bere sklad z rady VPr
                IF (@idDZ IS NULL) AND (@sklProVydej<>@sklProVydejRP)
                 EXEC dbo.hp_InsertHlavickyOZ_Full @Ident=@idDZ OUT, @Sklad=@sklProVydej, @DruhPohybu=@dpzVydej, @RadaDokladu=@radaDZVydej, @CisloOrg=0


                BEGIN TRY
                 EXEC @iChyba = dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzdy, @IDDoklad=@idDZ OUT, @errMsg=@errMsg OUT, @realizujVydej=1
                 IF (@errMsg<>N'') OR (@iChyba>0)
                  BEGIN
                   UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy
                   UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ
                  END
                END TRY
                BEGIN CATCH
                 IF (CHARINDEX(N'50014', @errMsg)>0)
                  SET @errMsg = N'Nesoulad množství výrobních čísel a položky' + NCHAR(13)+NCHAR(10) + @errMsg
                 IF (@errMsg<>N'')
                  UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy
                 UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ
                END CATCH
                IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL
                 DELETE FROM #HDCTabPrKVazbyGenPredna
                IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL
                 DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna
               END -- mam ep_Vyroba_GenVydejZeMzdy

            END -- (CHARINDEX('skupina', @materialJson)>0)


-- pokud je odvadeci, generuj odvod na sklad
           SET @jeOdvadeci=0
           SET @cisloOdvOper=NULL
           IF EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL
                       AND Prednastaveno=1 AND Odvadeci=1)
            BEGIN
             SET @jeOdvadeci=1
             SET @cisloOdvOper = (SELECT Operace FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Prednastaveno=1
                                   AND Odvadeci=1 AND IDOdchylkyDo IS NULL)
            END
           IF (@jeOdvadeci=1)
            BEGIN
             IF OBJECT_ID(N'dbo.ep_Vyroba_GenOdvodZeMzdy', N'P') IS NOT NULL
              BEGIN
               SET @idDZ = NULL
               BEGIN TRY
                EXEC @iChyba = dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzdy, @bezVyrCis=0, @errMsg=@errMsg OUT, @realizujPrijem=1, @IDDoklad=@idDZ OUT
                IF (@errMsg<>N'')
                 UPDATE dbo.TabDokladyZbozi SET BLokovaniEditoru=NULL WHERE ID=@idDZ
               END TRY
               BEGIN CATCH
                UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ
               END CATCH
              END -- existuje ep_Vyroba_GenOdvodZeMzdy
            END  -- jeOdvadeci=1

          END
         CLOSE ev
         DEALLOCATE ev


-- pokud mam vydejku na surovy dil na jinem dokladu/skladu, realizuj ji
         IF (@idDZ2 IS NOT NULL) AND NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE ID=@idDZ2 AND Realizovano=1)
          BEGIN
           BEGIN TRY
            EXEC dbo.hp_Realizuj_Vydej @ID=@idDZ2, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT 
           END TRY
           BEGIN CATCH
            SET @errMsg = ERROR_MESSAGE()
            IF (CHARINDEX(N'50014', @errMsg)>0)
             SET @errMsg = N'Nesoulad množství výrobních čísel a položky' + NCHAR(13)+NCHAR(10) + @errMsg
            IF (@errMsg<>N'')
             UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky suroveho dilu: ' + @errMsg WHERE ID=@idMzdy
            UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2
           END CATCH
          END

        END -- mam evidovane mzdy


        

       IF (ISNULL( (SELECT COUNT(*) FROM @evidMzdy), 0)>1)
        SET @idMezdStr = (SELECT STRING_AGG(ID, N',') FROM @evidMzdy)
       SET @idMezdStr = ISNULL(@idMezdStr, N'')
       
       SET @errMsg = ISNULL(@errMsg,N'')
       IF (@errMsg<>N'')
        UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson
       UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDMzda=IIF(@idMezdStr<>N'',NULL,@idMzdy),
                                              IDMezd=IIF(@idMezdStr=N'', NULL, @idMezdStr)
          WHERE ID=@idJson
        
      END -- akce Stop


    END -- objekt Operace AND idZam IS NOT NULL


   UPDATE dbo._hdc_ph_PrijataJsonData SET Blokovano=0 WHERE ID=@idJson
   IF (@tranPred=0) AND (@@TRANCOUNT>0)
    COMMIT TRAN
  END TRY
  BEGIN CATCH
   SET @errMsg = ERROR_MESSAGE()
   SET @errProc = ERROR_PROCEDURE()
   IF (@tranPred=0) AND (@@TRANCOUNT>0)
    ROLLBACK TRAN
   UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson
  END CATCH

 END
CLOSE j
DEALLOCATE j



-- cisteni
DROP TABLE IF EXISTS #HDCTabPrKVazbyGenPredna
DROP TABLE IF EXISTS #HDCTabPrKVazbyGenVCPredna
DROP TABLE IF EXISTS #HDCTabPrKVazbyGen_IDMzdyPredna
DROP TABLE IF EXISTS #TabJSONData
