224 lines
6.4 KiB
Transact-SQL
224 lines
6.4 KiB
Transact-SQL
-- dbo.ep_Vyroba_GenOdvodZeMzdy
|
|
CREATE PROCEDURE dbo.ep_Vyroba_GenOdvodZeMzdy
|
|
@IDMzdy INT,
|
|
@bezVyrCis BIT=1,
|
|
@errMsg NVARCHAR(500)=N'' OUT,
|
|
@realizujPrijem BIT=0,
|
|
@IDDoklad INT=NULL OUT
|
|
AS
|
|
|
|
-- HD Consulting Strakonice, T. Buzin
|
|
-- !! proceduru neupravujte, bude stejne pregenerovana pri startu sluzby HDCAPI !!
|
|
-- konfiguraci lze ovlivnit pres tabulku #HDCTabGenOdvodZeMzdyKonfig
|
|
-- pozor, v tom pripade musi byt na rade prikazu sklad pro generovani odvodu roven NULL
|
|
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE
|
|
@ret integer,
|
|
@bChyba BIT,
|
|
@idUziv INT,
|
|
@idDZ INT,
|
|
@IDPrikaz INT,
|
|
@IDKmen INT,
|
|
@NekontrolMnozOdvedFinal bit=0,
|
|
@mnozstvi numeric(19,6)=0,
|
|
@radaOdvNaSklad NVARCHAR(3)=NULL,
|
|
@sklProOdvod NVARCHAR(30)=NULL,
|
|
@radaVPr NVARCHAR(10)
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
-- CREATE TABLE #HDCTabGenOdvodZeMzdyKonfig (RadaOdvodNaSklad NVARCHAR(3), SkladProOdvod NVARCHAR(30), BezVyrobnichCisel BIT=0, IDUziv INT)
|
|
IF OBJECT_ID(N'tempdb..#HDCTabGenOdvodZeMzdyKonfig', N'U') IS NOT NULL
|
|
SELECT TOP(1) @radaOdvNaSklad=RadaOdvodNaSklad, @sklProOdvod=SkladProOdvod, @bezVyrCis=ISNULL(BezVyrobnichCisel,@bezVyrCis),
|
|
@idUziv=ISNULL(IDUziv, @idUziv)
|
|
FROM #HDCTabGenOdvodZeMzdyKonfig
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabOdved
|
|
CREATE TABLE #TabOdved (
|
|
ID INT IDENTITY NOT NULL,
|
|
IDPrikaz INT NOT NULL,
|
|
IDDilec INT NOT NULL,
|
|
IDZakazModif INT NULL,
|
|
IDZakazka INT NULL,
|
|
maxMnozstvi NUMERIC(19,6) NULL,
|
|
mnozstvi NUMERIC(19,6) NOT NULL,
|
|
EvidJednotka NUMERIC(19,6) NOT NULL,
|
|
Sklad NVARCHAR(30) NULL,
|
|
KodUmisteni NVARCHAR(15) NULL,
|
|
IDPohZbo INT NULL,
|
|
PomVnoreni INT NULL,
|
|
StavPrikazu TINYINT NULL,
|
|
PRIMARY KEY(ID)
|
|
)
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabOdved_IDMzdy
|
|
CREATE TABLE #TabOdved_IDMzdy (IDPrikaz int, IDMzdy int)
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabVyrCisProGenOdv
|
|
CREATE TABLE #TabVyrCisProGenOdv (
|
|
ID INT IDENTITY NOT NULL,
|
|
IDOdvedeni INT NOT NULL,
|
|
IDPrikaz INT NOT NULL,
|
|
VyrCislo NVARCHAR(100) NOT NULL,
|
|
Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0,
|
|
MaxMnozstvi NUMERIC(19,6) NULL,
|
|
IDVyrCP INT NULL,
|
|
PRIMARY KEY(ID)
|
|
)
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabPolotovProGenOdv
|
|
CREATE TABLE #TabPolotovProGenOdv (
|
|
ID INT IDENTITY NOT NULL,
|
|
IDOdvedeni INT NOT NULL,
|
|
IDPrikaz INT NOT NULL,
|
|
Doklad INT NOT NULL,
|
|
IDDilec INT NOT NULL,
|
|
Mnozstvi NUMERIC(19,6) NOT NULL,
|
|
MaxMnozstvi NUMERIC(19,6) NULL,
|
|
PRIMARY KEY(ID)
|
|
)
|
|
|
|
|
|
DROP TABLE IF EXISTS #TabGenPrijem
|
|
CREATE TABLE #TabGenPrijem (ID INT NOT NULL, PRIMARY KEY(ID))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IF EXISTS (SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanoOdvadeni=1 AND ID=@IDMzdy)
|
|
RETURN 0
|
|
|
|
|
|
SELECT @mnozstvi=kusy_odv FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy
|
|
|
|
UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanoOdvadeni=1 WHERE ID=@IDMzdy
|
|
IF (@@ROWCOUNT=0) RETURN 0
|
|
IF @mnozstvi<=0.0 RETURN 0
|
|
|
|
|
|
|
|
SELECT @IDPrikaz=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy
|
|
SELECT @radaVPr=Rada, @IDKmen=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@IDPrikaz
|
|
|
|
-- nastav sklad pro odvod podle karty
|
|
IF (@sklProOdvod IS NULL)
|
|
SELECT @sklProOdvod=VychoziSklad FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen
|
|
|
|
-- pripadne zkus podle rady prikazu
|
|
SELECT @radaOdvNaSklad=CASE WHEN RadaDokl_OdvedeniPrikazu IS NULL THEN @radaOdvNaSklad ELSE RadaDokl_OdvedeniPrikazu END,
|
|
@sklProOdvod=CASE WHEN PrijemVyrDil_SkladProGenHlavDZ IS NULL THEN @sklProOdvod ELSE PrijemVyrDil_SkladProGenHlavDZ END
|
|
FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr
|
|
|
|
|
|
|
|
|
|
UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnozstvi>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnozstvi END WHERE IDPrikaz=@IDPrikaz
|
|
IF (@@ROWCOUNT=0)
|
|
INSERT INTO #tabOdved (IDPrikaz, IDDilec, IDZakazModif, IDZakazka, maxMnozstvi, EvidJednotka, mnozstvi, sklad, StavPrikazu)
|
|
SELECT P.ID,
|
|
CASE WHEN ISNULL(ParKZ.OdvadetNaZaklVari,0)=0 THEN P.IDTabKmen ELSE KZ.IDKusovnik END,
|
|
ZMD.IDZakazModif,
|
|
P.IDZakazka,
|
|
CASE WHEN @NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END,
|
|
P.EvidJednotka,
|
|
CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END,
|
|
P.sklad,
|
|
P.StavPrikazu
|
|
FROM dbo.TabPrikaz P
|
|
INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=P.IDTabKmen)
|
|
LEFT OUTER JOIN dbo.TabZakazModifDilce ZMD ON (ZMD.IDZakazModif=P.IDZakazModif AND ZMD.IDKmenZbozi=KZ.ID)
|
|
LEFT OUTER JOIN dbo.TabParKmZ ParKZ ON (ParKZ.IDKmenZbozi=P.IDTabKmen)
|
|
WHERE P.ID=@IDPrikaz AND
|
|
(CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END)>0
|
|
INSERT INTO #TabOdved_IDMzdy (IDPrikaz, IDMzdy) VALUES (@IDPrikaz, @IDMzdy)
|
|
|
|
|
|
|
|
UPDATE O SET maxMnozstvi=CASE WHEN RP.NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END
|
|
FROM #tabOdved O
|
|
INNER JOIN dbo.TabPrikaz P ON (P.ID=O.IDPrikaz)
|
|
INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada)
|
|
|
|
UPDATE #tabOdved SET mnozstvi=maxMnozstvi WHERE maxMnozstvi IS NOT NULL AND mnozstvi>maxMnozstvi
|
|
DELETE #TabVyrCisProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0)
|
|
DELETE #TabPolotovProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0)
|
|
DELETE #tabOdved WHERE Mnozstvi<=0.0
|
|
|
|
|
|
EXEC dbo.hp_PrednabidniTabVyrCisProGenOdv @ProIDPrikaz=NULL
|
|
IF (@bezVyrCis=1)
|
|
DELETE #TabVyrCisProGenOdv
|
|
|
|
|
|
BEGIN TRY
|
|
EXEC @ret=dbo.hp_OdvedeniPrikazu @RadaDokladu=@radaOdvNaSklad, @IDObdobi=NULL, @KonecneOdvedeni=0, @DatPorizeni=NULL, @SekejZakazky=1, @SekejPrikazy=1
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @errMsg = 'Chyba pri odvadeni: ' + ERROR_MESSAGE()
|
|
END CATCH
|
|
|
|
|
|
|
|
|
|
|
|
IF (@realizujPrijem=1)
|
|
BEGIN
|
|
DECLARE
|
|
@idPrij INT
|
|
|
|
DECLARE prij CURSOR LOCAL FOR
|
|
SELECT ID FROM #TabGenPrijem
|
|
OPEN prij
|
|
WHILE (1=1)
|
|
BEGIN
|
|
FETCH NEXT FROM prij INTO @idPrij
|
|
IF (@@FETCH_STATUS<>0) BREAK
|
|
|
|
BEGIN TRY
|
|
EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @errMsg = ERROR_MESSAGE()
|
|
END CATCH
|
|
|
|
END
|
|
CLOSE prij
|
|
DEALLOCATE prij
|
|
END
|
|
|
|
|
|
|
|
SET @IDDoklad = NULL
|
|
IF (1=(SELECT COUNT(*) FROM #TabGenPrijem))
|
|
SET @IDDoklad=(SELECT TOP(1) ID FROM #TabGenPrijem)
|
|
|
|
|
|
|
|
-- cisteni
|
|
DROP TABLE IF EXISTS #TabGenPrijem
|
|
DROP TABLE IF EXISTS #TabPolotovProGenOdv
|
|
DROP TABLE IF EXISTS #TabVyrCisProGenOdv
|
|
DROP TABLE IF EXISTS #TabOdved_IDMzdy
|
|
DROP TABLE IF EXISTS #TabOdved
|
|
|
|
DROP TABLE IF EXISTS #HDCTabGenOdvodZeMzdyKonfig
|