Files
HDCApi/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdy.sql
2025-05-21 21:14:32 +02:00

300 lines
9.8 KiB
Transact-SQL
Raw Blame History

-- dbo.ep_Vyroba_GenOdvodZeMzdy
CREATE PROCEDURE dbo.ep_Vyroba_GenOdvodZeMzdy
@IDMzdy INT=NULL,
@bezVyrCis BIT=1,
@radaOdvod NVARCHAR(3)=NULL,
@skladOdvod NVARCHAR(30)=NULL,
@realizujPrijem BIT=0,
@prevodDoVyssiho BIT=0,
@kopiiNaTechSklad BIT=0,
@errMsg NVARCHAR(500)=N'' OUT
AS
-- HD Consulting Strakonice, T. Buzin
-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !!
-- 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
@aktDatum DATETIME=GETDATE(),
@bChyba BIT,
@ret INT,
@jeOdvOper BIT=0,
@idUziv INT,
@IDPrikaz INT,
@IDZakazModif INT,
@IDPrikazVyssi INT,
@doklKV INT,
@IDKmen INT,
@idPZ INT,
@NekontrolMnozOdvedFinal BIT=0,
@mnozstvi NUMERIC(19,6)=0,
@radaOdvNaSklad NVARCHAR(3)=N'273',
@sklProOdvod NVARCHAR(30)=N'261',
@radaVPr NVARCHAR(10),
@idPrij INT,
@idPrijKopie INT,
@sklTechnicky NVARCHAR(30),
@dpz TINYINT,
@dzDatum DATETIME,
@dzMena NVARCHAR(3)
DECLARE
@idDZPomocPrijem INT,
@idPZPomocPrijem INT,
@idSSPomocPrijem INT,
@mnozPrijem NUMERIC(19,6)
SELECT @jeOdvOper=pp.Odvadeci
FROM dbo.TabPrikazMzdyAZmetky pmz
INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=pmz.IDPrikaz AND pp.Doklad=pmz.DokladPrPostup AND pp.Alt=pmz.AltPrPostup AND pp.IDOdchylkyDo IS NULL)
WHERE pmz.ID=@IDMzdy
IF (@jeOdvOper=0)
RETURN
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=ISNULL(RadaOdvodNaSklad, @radaOdvNaSklad), @sklProOdvod=ISNULL(SkladProOdvod, @sklProOdvod),
@bezVyrCis=ISNULL(BezVyrobnichCisel, @bezVyrCis), @idUziv=ISNULL(IDUziv, @idUziv)
FROM #HDCTabGenOdvodZeMzdyKonfig
IF (@sklTechnicky IS NULL)
SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE<4E><45>%'
IF (@sklTechnicky IS NULL)
SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%v<>dej%'
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
SELECT @mnozstvi=kusy_odv FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy
UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanoOdvadeni=1 WHERE ID=@IDMzdy
IF (@@ROWCOUNT=0) RETURN
IF @mnozstvi<=0.0 RETURN
SELECT @IDPrikaz=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy
SELECT @radaVPr=Rada, @IDKmen=IDTabKmen, @IDZakazModif=IDZakazModif, @IDPrikazVyssi=IDPrikazVyssi
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
IF (@radaOdvod IS NOT NULL)
SET @radaOdvNaSklad=@radaOdvod
IF (@skladOdvod IS NOT NULL)
SET @sklProOdvod = @skladOdvod
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
IF (@sklProOdvod IS NOT NULL)
UPDATE #tabOdved SET Sklad=@sklProOdvod
EXEC dbo.hp_PrednabidniTabVyrCisProGenOdv @ProIDPrikaz=NULL
IF (@bezVyrCis=1)
DELETE #TabVyrCisProGenOdv
IF (@prevodDoVyssiho=0)
BEGIN
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
END
ELSE
BEGIN
IF (@IDPrikazVyssi IS NOT NULL)
BEGIN
IF OBJECT_ID(N'tempdb..#TabOdved_IDMzdy', N'U') IS NOT NULL
DELETE FROM #TabOdved_IDMzdy
INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idPrikaz, @idMzdy
SET @doklKV = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@IDPrikazVyssi AND nizsi=@IDKmen AND IDOdchylkyDo IS NULL)
EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idPrikaz, @IDPrikazCil=@IDPrikazVyssi,
@Doklad=@doklKV, @IDDilec=@IDKmen, @mnozstvi=@mnozstvi, @IDOdvedeniVC=0, @IDZakazModif=@IDZakazModif
IF OBJECT_ID(N'tempdb..#TabGenPrijem', N'U') IS NOT NULL
DELETE FROM #TabGenPrijem
END -- @IDPrikazVyssi IS NOT NULL
END
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
-- kopie na technologicky sklad, aby se mohly delat vydejky
SET @idPrijKopie = NULL
IF (@kopiiNaTechSklad=1) AND (@sklTechnicky IS NOT NULL)
BEGIN
SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabPohybyZbozi WHERE ID=@idPrij
EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijKopie OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad,
@Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@dzDatum
IF (@idPrijKopie IS NOT NULL)
EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijKopie, @IDDokladSrc=@idPrij, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=NULL,
@KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL,
@StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL,
@PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1,
@SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT,
@KopirovaniDokladu=0
END -- kopii na TechSklad
IF (@realizujPrijem=1)
BEGIN
BEGIN TRY
EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1
IF (@idPrijKopie IS NOT NULL)
EXEC dbo.hp_Realizuj_Prijem @ID=@idPrijKopie, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1
END TRY
BEGIN CATCH
SET @errMsg = ERROR_MESSAGE()
END CATCH
END
END
CLOSE prij
DEALLOCATE prij
-- 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