Files
HDCApi/_custom/Rootvin/sql/ep_Vyroba_GenObjednavkuMatDoVyroby.sql

284 lines
10 KiB
Transact-SQL

-- dbo.ep_Vyroba_GenObjednavkuMatDoVyroby
CREATE PROCEDURE dbo.ep_Vyroba_GenObjednavkuMatDoVyroby
@cilovySklad NVARCHAR(30)=N'',
@radaDokl NVARCHAR(3)=N'',
@druhPohybuZbo TINYINT=4,
@errMsg NVARCHAR(500)=N'' OUT
AS
-- HD Consulting Strakonice, T. Buzin
-- !! proceduru neupravujte, bude stejne pregenerovana pri spusteni pluginu Pekarna nebo pri startu Windows sluzby HDCDZApi !!
SET NOCOUNT ON
DECLARE
@tranPred INT,
@cnt INT
DECLARE
@idObj INT,
@radaPrijem NVARCHAR(3),
@druhPohybuZboPrijem TINYINT,
@idDoklad INT,
@datumDokladuMat DATETIME,
@datumDokladuFin DATETIME,
@genDokladMat BIT=0,
@idDokladMat INT,
@genDokladFin BIT=0,
@idDokladFin INT,
@cOrg INT=0,
@dzMena NVARCHAR(3),
@dzKurz NUMERIC(19,6),
@dzKurzEur NUMERIC(19,6),
@jednM INT,
@vstC TINYINT,
@idPohyb INT,
@idPZ INT,
@idZboSklad INT,
@idKmen INT,
@idKZ INT,
@sz NVARCHAR(3),
@rc NVARCHAR(30),
@sarze NVARCHAR(100),
@paletList NVARCHAR(100),
@skladMat NVARCHAR(30),
@skladFin NVARCHAR(30),
@mnoz NUMERIC(19,6),
@mnozVydano NUMERIC(19,6),
@material BIT
IF OBJECT_ID(N'tempdb..#VyrobaGenObjednavkuMatDoVyroby', N'U') IS NOT NULL
SELECT TOP(1) @skladMat=SkladMaterial, @skladFin=SkladVyrobky
FROM #VyrobaGenObjednavkuMatDoVyroby
SET @radaDokl = ISNULL(@radaDokl, N'231')
SET @druhPohybuZbo = ISNULL(@druhPohybuZbo, 4)
IF NOT EXISTS(SELECT 1 FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaDokl AND DruhPohybuZbo=@druhPohybuZbo)
RETURN
SELECT @cilovySklad=IDSkladPrevodu, @radaPrijem=TypPrevodky, @druhPohybuZboPrijem=TabDruhDZ_DruhPohybuZboPre
FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaDokl AND DruhPohybuZbo=@druhPohybuZbo
SET @radaPrijem = ISNULL(@radaPrijem, N'281')
SET @druhPohybuZboPrijem = ISNULL(@druhPohybuZboPrijem, 0)
IF NOT EXISTS (SELECT 1 FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaPrijem AND DruhPohybuZbo=@druhPohybuZboPrijem)
RETURN
SET @cilovySklad = ISNULL(@cilovySklad, N'')
IF (@cilovySklad=N'')
SET @cilovySklad = N'211'
SET @skladMat = ISNULL(@skladMat, N'')
IF (@skladMat=N'')
SET @skladMat = N'311'
SET @skladFin = ISNULL(@skladFin, N'')
IF (@skladFin=N'')
SET @skladFin = N'312'
SET @genDokladMat=0
IF EXISTS (SELECT 1 FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0
AND o.JeMaterial=1 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0
)
BEGIN
SET @genDokladMat=1
SET @datumDokladuMat = (SELECT MIN(o.DatPorizeni) FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0
AND o.JeMaterial=1 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0
)
END
SET @datumDokladuMat = ISNULL(@datumDokladuMat, GETDATE())
SET @genDokladFin=0
IF EXISTS (SELECT 1 FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0
AND o.JeMaterial=0 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0
)
BEGIN
SET @genDokladFin=1
SET @datumDokladuFin = (SELECT MIN(o.DatPorizeni) FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0
AND o.JeMaterial=0 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0
)
END
SET @datumDokladuFin = ISNULL(@datumDokladuFin, GETDATE())
IF (@genDokladMat=1) OR (@genDokladFin=1)
BEGIN
DECLARE m CURSOR LOCAL FAST_FORWARD FOR
SELECT DISTINCT(JeMaterial)
FROM dbo._TabVyroba_Objednavky
WHERE Splneno=0
AND OdmitnutoSkladem=0
AND NocniObjednavka=0
AND Storno=0
AND Vratka=0
AND Blokovano=0
GROUP BY JeMaterial
OPEN m
WHILE (1=1)
BEGIN
FETCH NEXT FROM m INTO @material
IF (@@FETCH_STATUS<>0) BREAK
SET @cnt = (SELECT COUNT(d.ID) FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl
AND CAST(d.DatPorizeni AS DATE)=IIF(@material=0, CAST(@datumDokladuMat AS DATE), CAST(@datumDokladuFin AS DATE)) AND d.BlokovaniEditoru IS NULL
AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=(@material+1)
)
IF (@cnt<=1)
BEGIN
IF (@material=0)
IF (@idDokladFin IS NULL)
SET @idDoklad = (SELECT d.ID FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl
AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuFin AS DATE) AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=2
AND d.BlokovaniEditoru IS NULL AND de._Vydej_ObjednavkaMat=1
)
ELSE
SET @idDoklad = @idDokladFin
IF (@material=1)
IF (@idDokladMat IS NULL)
SET @idDoklad = (SELECT d.ID FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl
AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuMat AS DATE) AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=1
AND d.BlokovaniEditoru IS NULL AND de._Vydej_ObjednavkaMat=1
)
ELSE
SET @idDoklad = @idDokladMat
IF (@idDoklad IS NULL)
BEGIN
IF (@material=0) AND (@genDokladFin=1)
EXEC dbo.hp_InsertHlavickyOZ @Ident=@idDoklad OUT, @Sklad=@skladFin, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaDokl, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuFin
IF (@material=1) AND (@genDokladMat=1)
EXEC dbo.hp_InsertHlavickyOZ @Ident=@idDoklad OUT, @Sklad=@skladMat, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaDokl, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuMat
IF (@idDoklad IS NOT NULL)
BEGIN
IF NOT EXISTS (SELECT 1 FROM dbo.TabDOkladyZbozi_EXT WHERE ID=@idDoklad)
INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDoklad)
UPDATE dbo.TabDokladyZbozi_EXT SET _Vydej_ObjednavkaMat=1 WHERE ID=@idDoklad
IF (@material=0)
SET @idDokladFin = @idDoklad
ELSE
SET @idDokladMat = @idDoklad
END
END
SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzEur=KurzEuro, @vstC=VstupniCena, @jednM=JednotkaMeny
FROM dbo.TabDokladyZbozi WHERE ID=@idDoklad
IF (@idDoklad IS NOT NULL)
BEGIN
DECLARE c CURSOR LOCAL FOR
SELECT ID, SkupZbo, RegCis, IDKmenZbozi, Mnozstvi, PaletovyList, Sarze
FROM dbo._TabVyroba_Objednavky
WHERE Splneno=0
AND OdmitnutoSkladem=0
AND NocniObjednavka=0
AND Storno=0
AND Vratka=0
AND Blokovano=0
AND JeMaterial=@material
ORDER BY DatPorizeni
OPEN c
WHILE (1=1)
BEGIN
FETCH NEXT FROM c INTO @idObj, @sz, @rc, @idKmen, @mnoz, @paletList, @sarze
IF (@@FETCH_STATUS<>0) BREAK
SET @mnozVydano = ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@idObj), 0)
SET @mnoz = @mnoz - @mnozVydano
IF (@mnoz>0)
BEGIN
SET @idZboSklad = NULL
IF (@material=0)
SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@skladFin)
ELSE
SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@skladMat)
IF (@idZboSklad IS NULL)
IF (@material=0)
EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@skladFin, @IDZboSklad=@idZboSklad OUT
ELSE
EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@skladMat, @IDZboSklad=@idZboSklad OUT
IF (@idZboSklad IS NOT NULL)
BEGIN
EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZ OUT, @IDDoklad=@idDoklad, @DruhPohybu=@druhPohybuZbo, @CisloOrg=@cOrg, @IDZboSklad=@idZboSklad,
@Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzEur, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL,
@ZakazanoDPH=0, @VstupniCena=@vstC, @PovolitDuplicitu=1, @Mnozstvi@=mnoz
IF (@idPZ IS NOT NULL)
BEGIN
INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, Mnozstvi, Sarze, PaletovyList, SkupZbo, RegCis)
SELECT @idObj, @idDoklad, @idPZ, @mnoz, @sarze, @paletList, @sz, @rc
SET @paletList = ISNULL(@paletList, N'')
SET @sarze = ISNULL(@sarze, N'')
IF (@paletList<>N'')
BEGIN
IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ)
INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ)
UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PaletList=@paletList, _Vyroba_Sarze=@sarze WHERE ID=@idPZ
END
END -- @idPZ IS NOT NULL
END -- @idSS IS NOT NULL
END -- @mnoz>0
END
CLOSE c
DEALLOCATE c
END -- @idDoklad IS NOT NULL
END -- @cnt<=1
END
CLOSE m
DEALLOCATE m
END -- mam neco k zapsani ?
IF OBJECT_ID(N'dbo.ep_Vyroba_GenObjednavkuMatDoVyroby2', 'P') IS NOT NULL
EXEC dbo.ep_Vyroba_GenObjednavkuMatDoVyroby2 @idDoklad
-- oznac splnene polozky
DECLARE c CURSOR LOCAL FAST_FORWARD FOR
SELECT ID, Mnozstvi
FROM dbo._TabVyroba_Objednavky
WHERE Splneno=0
AND Vratka=0
AND Storno=0
AND OdmitnutoSkladem=0
OPEN c
WHILE (1=1)
BEGIN
FETCH NEXT FROM c INTO @idObj, @mnoz
IF (@@FETCH_STATUS<>0) BREAK
SET @mnozVydano = ISNULL( (SELECT SUM(op.Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol op JOIN dbo.TabPohybyZbozi p ON (p.ID=op.IDPohybOZ)
WHERE op.IDHlava=@idObj AND p.SkutecneDatReal IS NOT NULL), 0)
IF (@mnoz=@mnozVydano)
UPDATE dbo._TabVyroba_Objednavky SET Splneno=1 WHERE ID=@idObj
END
CLOSE c
DEALLOCATE c