612 lines
27 KiB
MySQL
612 lines
27 KiB
MySQL
-- 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,
|
|
@debugXML XML
|
|
|
|
DECLARE
|
|
@operJson NVARCHAR(max),
|
|
@prikJson 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,
|
|
@idVCPrik INT,
|
|
@vc NVARCHAR(100),
|
|
@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),
|
|
@operPrednaPrac INT,
|
|
@typOper TINYINT,
|
|
@idPrac INT,
|
|
@idPracOld INT,
|
|
@idStroj INT,
|
|
@nazevOp NVARCHAR(100),
|
|
@operPredna NVARCHAR(4),
|
|
@odvadeciPredna BIT=0,
|
|
@cisOper INT,
|
|
@cisOperMax INT,
|
|
@operMax NVARCHAR(4),
|
|
@nazevOpMax NVARCHAR(100),
|
|
@idKoop INT,
|
|
@idEvidROp INT,
|
|
@idEvidROpPol INT,
|
|
@idMzdy INT,
|
|
@idPrednaOpAutomat INT,
|
|
@operPrednaOpAutomat NVARCHAR(4),
|
|
@casSekOperPredaAutomat INT,
|
|
@idMzdyAutomat INT,
|
|
@datKonecOp DATETIME,
|
|
@ksZive NUMERIC(19,6),
|
|
@ksEvid NUMERIC(19,6)
|
|
|
|
DECLARE
|
|
@idDZ INT,
|
|
@sz NVARCHAR(3),
|
|
@rc NVARCHAR(30),
|
|
@idKZ INT,
|
|
@idPrKVazby INT,
|
|
@idDilec INT,
|
|
@mnozstviPomer_A NUMERIC(19,6),
|
|
@mnozstviPomer_B NUMERIC(19,6),
|
|
@idGenVydejPrednaPol INT,
|
|
@sklProVydej NVARCHAR(30)
|
|
|
|
|
|
|
|
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 #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)
|
|
)
|
|
|
|
|
|
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 WHERE ID=@idJson
|
|
ELSE
|
|
DECLARE j CURSOR LOCAL FOR
|
|
SELECT ID, JsonData, Objekt, Akce
|
|
FROM dbo._hdc_ph_PrijataJsonData
|
|
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
|
|
|
|
SELECT TOP(1) @cisZam = JSON_VALUE(doc, '$.operace.worker.code') FROM #TabJSONData
|
|
SET @idZam = (SELECT ID FROM dbo.TabCisZam WHERE Cislo=@cisZam)
|
|
|
|
UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL, CisloZam=@cisZam WHERE ID=@idJson
|
|
|
|
|
|
IF (@objekt=N'operace') AND (@idZam IS NOT NULL)
|
|
BEGIN
|
|
IF (@akce=N'start')
|
|
BEGIN
|
|
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')
|
|
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
|
|
|
|
IF (@idVPr IS NOT NULL)
|
|
BEGIN
|
|
SELECT @idDilec=p.IDTabKmen, @sklProVydej=rp.VydejMatPol_SkladProGenHlavDZ
|
|
FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr
|
|
|
|
SET @idPrP = NULL
|
|
|
|
IF (@typOperJson=N'prikaz')
|
|
BEGIN
|
|
SET @operPredna = CONVERT(nvarchar, @idPrednaOp)
|
|
SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna)
|
|
SET @typOperJson=N'prednastavena'
|
|
END
|
|
|
|
IF (@typOperJson=N'prednastavena')
|
|
BEGIN
|
|
IF (@idPrednaOp IS NOT NULL)
|
|
BEGIN
|
|
SELECT @operPrednaPrac=IDpracoviste FROM dbo.TabPredna WHERE ID=@idPrednaOp
|
|
IF EXISTS(SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu IN (20,30,40) AND BlokovaniEditoru IS NULL)
|
|
AND EXISTS(SELECT 1 FROM dbo.TabPredna WHERE ID=@idPrednaOp AND BlokovaniEditoru IS NULL)
|
|
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
|
|
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 @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 priorita=0 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 priorita=0 AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOdv)
|
|
|
|
-- 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
|
|
IF (@idPrP IS NOT NULL)
|
|
BEGIN
|
|
-- korekce cisla dokladu, pred odvadeci opeaci
|
|
SELECT @dokl=ISNULL(MAX(Doklad),0)+1 FROM dbo.TabPrPostup WITH (TABLOCKX) WHERE IDPrikaz=@idVPr AND Doklad<9990
|
|
UPDATE dbo.TabPrPostup SET Doklad=@dokl, Odvadeci=0, VyraditZKontrolyPosloupOper=1 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
|
|
|
|
EXEC @idEvidROp = dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=@idZam, @IDPracoviste=@idPrac, @IDStroje=@idStroj, @CasZahajeni=@datStart, @errMsg = @errMsg OUT
|
|
IF (@idEvidROp IS NOT NULL)
|
|
BEGIN
|
|
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
|
|
|
|
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 -- idVPr IS NOT NULL
|
|
|
|
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 @errMsg = N''
|
|
|
|
SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'),
|
|
@idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @statusOp = JSON_VALUE(d3.operace, '$.status'),
|
|
@datStart = JSON_VALUE(d3.operace, '$.startAt'), @datKonec = JSON_VALUE(d3.operace, '$.stopAt'),
|
|
@operJson=d3.operace, @typOperJson=JSON_VALUE(d3.operace, '$.typ')
|
|
FROM #TabJSONData d
|
|
CROSS APPLY OPENJSON(d.doc, '$')
|
|
WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2
|
|
CROSS APPLY OPENJSON(d.doc, '$')
|
|
WITH ([operace] NVARCHAR(max) AS JSON) AS d3
|
|
|
|
IF EXISTS (SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu<>30)
|
|
BEGIN
|
|
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Vyrobni prikaz neni ve stavu Zadano' WHERE ID=@idJson
|
|
CONTINUE
|
|
END
|
|
|
|
SELECT @ksZive=p.kusy_zive, @sklProVydej=rp.VydejMatPol_SkladProGenHlavDZ
|
|
FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr
|
|
|
|
IF (@datKonec<=@datStart)
|
|
SET @datKonec = DATEADD(s, 1, @datStart)
|
|
|
|
IF (@idVPr IS NOT NULL) AND (@operJson IS NOT NULL)
|
|
BEGIN
|
|
SELECT @idDilec = IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr
|
|
SET @idPrP = NULL
|
|
SET @operPredna = N''
|
|
SET @idPrednaOpAutomat = NULL
|
|
SET @operPrednaOpAutomat = N''
|
|
|
|
IF (@typOperJson=N'prikaz')
|
|
BEGIN
|
|
SET @operPredna = CONVERT(nvarchar, @idPrednaOp)
|
|
SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna)
|
|
SET @typOperJson=N'prednastavena'
|
|
END
|
|
|
|
IF (@idPrednaOp IS NOT NULL)
|
|
BEGIN
|
|
IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOp IS NOT NULL)
|
|
SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp)
|
|
SET @operPredna = ISNULL(@operPredna, N'')
|
|
IF (@operPredna=N'')
|
|
BEGIN
|
|
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Nebylo nalezeno cislo operace Prednastaveni' WHERE ID=@idJson
|
|
CONTINUE
|
|
END
|
|
|
|
-- zjisti vyrobni cislo
|
|
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)
|
|
|
|
-- zjisti operaci automatu
|
|
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 @casSekOperPredaAutomat = ISNULL( (SELECT TAC_Obsluhy_J_S FROM dbo.TabPredna WHERE ID=@idPrednaOpAutomat), 0)
|
|
|
|
|
|
IF EXISTS(SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu IN (20,30,40) AND BlokovaniEditoru IS NULL)
|
|
AND EXISTS(SELECT 1 FROM dbo.TabPredna WHERE ID=@idPrednaOp AND BlokovaniEditoru IS NULL)
|
|
SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace
|
|
FROM dbo.TabPredna WHERE ID=@idPrednaOp
|
|
END
|
|
|
|
SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE priorita=0 AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND operace=@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))
|
|
*/
|
|
SELECT @jeOdvadeci=Odvadeci, @dokl=Doklad, @alt=Alt FROM dbo.TabPrPostup WHERE ID=@idPrP
|
|
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), 0)
|
|
-- muzu jeste odvest kusy ?
|
|
IF (@jeOdvadeci=1) AND (@ksEvid>=@ksZive)
|
|
BEGIN
|
|
UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Nelze evidovat, uz je vse odvedeno' WHERE ID=@idJson
|
|
CONTINUE
|
|
END
|
|
|
|
|
|
SET @idMzdy = NULL
|
|
SET @iChyba = -1
|
|
SET @idEvidROp = (SELECT TOP(1) h.ID FROM dbo.TabEvidRozpracOperR r INNER JOIN dbo.TabEvidRozpracOper h ON (h.ID=r.IDEvidRozpracOper)
|
|
WHERE h.IDZamestnance=@idZam AND h.CasUkonceni IS NULL AND r.DokladPrPostup=@dokl AND r.AltPrPostup=@alt AND r.IDPrikaz=@idVPr)
|
|
IF (@idEvidROp IS NOT NULL)
|
|
BEGIN
|
|
SELECT @idPracOld=IDPracoviste FROM dbo.TabEvidRozpracOper WHERE ID=@idEvidROp
|
|
SET @skCasSek = DATEDIFF(s, @datStart, @datKonec)
|
|
UPDATE dbo.TabEvidRozpracOperR SET Mnoz_odv=CASE WHEN (@jeOdvadeci=1) THEN 1 ELSE 0 END,
|
|
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=DATEDIFF(s, @datStart, @datKonec) WHERE ID=@idEvidROp
|
|
EXEC dbo.hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=@idEvidROp, @CelkovyCas_S=@skCasSek, @KVO=1
|
|
|
|
SET @idEvidROpPol = (SELECT TOP(1) ID FROM dbo.TabEvidRozpracOperR WHERE IDEvidRozpracOper=@idEvidROp AND IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND AltPrPostup=@alt)
|
|
EXEC @idMzdy = dbo.hp_EvidenceOperace @IDEvidRozpracOperR=@idEvidROpPol, @Stav=0
|
|
UPDATE dbo.TabEvidRozpracOper SET DatumUzavreni=GETDATE(), AutorUzavreni=SUSER_SNAME() WHERE ID=@idEvidROp
|
|
|
|
IF (@idMzdy IS NOT NULL) AND (@idPracOld IS NOT NULL)
|
|
EXEC dbo.hp_ZmenaStavuMezdAZmetku @ID=@idMzdy, @Stav=1, @ZapisZmenu=0
|
|
END -- @idEvidROp IS NOT NULL
|
|
|
|
|
|
IF (@idMzdy IS NOT NULL)
|
|
BEGIN
|
|
UPDATE dbo.TabPrikazMzdyAZmetky SET Datum=CONVERT(datetime, CONVERT(int, CONVERT(float, @datStart))) WHERE ID=@idMZdy
|
|
|
|
SELECT @datKonecOp = DatumUkonceniOp FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy
|
|
|
|
-- zkus zaevidovat operaci automatu
|
|
IF (@operPrednaOpAutomat<>N'')
|
|
BEGIN
|
|
-- pouzij cas ukonceni predchozi operace
|
|
SET @datStart = DATEADD(second, 1, @datKonecOp)
|
|
SET @datKonec = DATEADD(second, @casSekOperPredaAutomat, @datStart)
|
|
|
|
SELECT @doklAutomat=Doklad, @altAutomat=Alt 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, @IDVyrCis=@idVCPrik,
|
|
@Sk_Cas_S=@casSekOperPredaAutomat, @Sk_Cas_Obsluhy_S=0, @IDZam=@idZam,
|
|
@DatumZahajeniOp=@datStart, @DatumUkonceniOp=@datKonec
|
|
END
|
|
END
|
|
|
|
-- generuj vydejku materialu
|
|
SET @sz = NULL
|
|
DELETE FROM #TabJSONData
|
|
INSERT #TabJSONData (doc) SELECT @operJson
|
|
DECLARE m CURSOR LOCAL FOR
|
|
SELECT m.skupina, m.regcis, m.quantity
|
|
FROM #TabJSONData d
|
|
CROSS APPLY OPENJSON(d.doc, N'$.material')
|
|
WITH (skupina NVARCHAR(3), regcis NVARCHAR(30), quantity NUMERIC(19,6)) AS m
|
|
OPEN m
|
|
WHILE (1=1)
|
|
BEGIN
|
|
FETCH NEXT FROM m INTO @sz, @rc, @mnoz
|
|
IF (@@FETCH_STATUS<>0) BREAK
|
|
SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc)
|
|
IF (@idKZ IS NOT NULL)
|
|
BEGIN
|
|
UPDATE dbo.TabKmenZbozi SET Material=1 WHERE ID=@idKZ AND Dilec=0 AND Material=0
|
|
SET @idPrKVazby=(SELECT TOP(1) ID FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr
|
|
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 @idGenVydejPrednaPol = SCOPE_IDENTITY()
|
|
|
|
-- pokud neni prednastaveny sklad pro vydej, zkus to z rady prikazu
|
|
UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklProVydej WHERE ID=@idGenVydejPrednaPol AND Sklad IS NULL AND @sklProVydej IS NOT NULL
|
|
|
|
IF (@dokl IS NOT NULL)
|
|
INSERT INTO #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz, Doklad, IDMzdy) SELECT @idVPr, @dokl, @idMzdy
|
|
END -- idPrKVazby IS NOT NULL
|
|
END -- idKZ
|
|
END
|
|
CLOSE m
|
|
DEALLOCATE m
|
|
|
|
SET @debugXML = (SELECT * FROM #HDCTabPrKVazbyGenPredna FOR XML AUTO)
|
|
|
|
|
|
IF (@idMzdy IS NOT NULL) AND (@sz IS NOT NULL) -- pokud prosel loopem na materialy, sz nemuze byt null
|
|
IF OBJECT_ID(N'dbo.ep_Vyroba_GenVydejZeMzdy', N'P') IS NOT NULL
|
|
BEGIN
|
|
SET @idDZ = NULL
|
|
BEGIN TRY
|
|
EXEC @iChyba = dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzdy, @IDDoklad=@idDZ OUT, @errMsg=@errMsg OUT, @realizujVydej=1
|
|
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
|
|
|
|
|
|
-- pokud je odvadeci, generuj odvod na sklad
|
|
IF (@idMzdy IS NOT NULL) AND (@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
|
|
END
|
|
|
|
|
|
END -- idMzdy IS NOT NULL
|
|
END -- idVPr IS NOT NULL AND operJson IS NOT NULL
|
|
|
|
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=@idMzdy WHERE ID=@idJson
|
|
END -- akce Stop
|
|
|
|
END -- objekt Operace AND idZam IS NOT NULL
|
|
|
|
|
|
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 #TabJSONData
|