-- 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,
     @aktualizujPolozkyExistPrij BIT=0
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
 @iTemp INT,
 @aktDatum DATETIME=GETDATE(),
 @datPrijem DATETIME,
 @bChyba BIT,
 @ret INT,
 @cnt INT,
 @jeOdvOper BIT=0,
 @idUziv INT,
 @IDPrikaz INT,
 @IDZakazModif INT,
 @IDPrikazVyssi INT,
 @doklKV INT,
 @IDKmen INT,
 @jeFinal BIT=0,
 @idPZ INT,
 @idPZNew INT,
 @idPZOld INT,
 @idSS INT,
 @idVCS INT,
 @idVCP INT,
 @idVPrVC INT,
 @vc NVARCHAR(100),
 @NekontrolMnozOdvedFinal BIT=0,
 @mnozstvi NUMERIC(19,6)=0,
 @radaOdvNaSklad NVARCHAR(3)=N'273',
 @sklProOdvod NVARCHAR(30)=N'261',
 @sklProFinal NVARCHAR(30)=N'312',
 @sklProPolo NVARCHAR(30)=N'311',
 @radaVPr NVARCHAR(10),
 @idPrij INT,
 @idPrijOld INT,
 @uklidPomocTab BIT,
 @idPrijKopie INT,
 @sklTechnicky NVARCHAR(30),
 @dpz TINYINT,
 @cOrg INT,
 @dzDatum DATETIME,
 @dzMena NVARCHAR(3),
 @dzKurz NUMERIC(19,6),
 @dzKurzE NUMERIC(19,6),
 @vstC TINYINT,
 @jednM INT
DECLARE
 @idDZPomocPrijem INT,
 @idPZPomocPrijem INT,
 @idSSPomocPrijem INT,
 @mnozPrijem NUMERIC(19,6)

DECLARE @idPZsOld TABLE (ID INT NOT NULL)


SET @uklidPomocTab = 0

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', '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', '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%NEZH%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%'
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

SET @jeFinal=0
IF EXISTS (SELECT 1 FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen AND TypDilce=0)
 SET @jeFinal=1


-- 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 NULL)
  BEGIN
   SET @sklProOdvod = @sklProPolo
   IF (@jeFinal=1)
    SET @sklProOdvod = @sklProFinal
  END
 ELSE
  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

SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0)
DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp)

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
-- pozor, nelze predem zadat do jake prijemky polozky odvodu generovat, vzdy se generuje nova, o prevedeni polozek se postarame nize
    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', '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', 'U') IS NOT NULL
      DELETE FROM #TabGenPrijem
   END -- @IDPrikazVyssi IS NOT NULL
  END





-- ID polozek puvodnich dokladu
DELETE FROM @idPZsOld


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

  INSERT @idPZsOld (ID) SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrij

  SELECT @datPrijem=DatPorizeni FROM dbo.TabDokladyZbozi WHERE ID=@idPrij

  SET @idPrijOld = NULL

-- zjisti jestli na cilovem skladu mame nejakou otevrenou prijemku z dnesniho dne
  SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad
                        AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem))
                   , 0)
  IF (@cnt=0)  -- nemame, vygeneruj ji
   BEGIN
    SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabDokladyZbozi WHERE ID=@idPrij
    SET @datPrijem = @dzDatum
    EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijOld OUT, @Sklad=@sklProOdvod, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad,
                                 @Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@datPrijem
   END
  IF (@cnt=1)  -- ma jen jednu
   BEGIN
     SELECT TOP(1) @idPrijOld=ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad
       AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem)
   END
  IF (@cnt>1) -- mam jich vic, vezmi tu posledni (nejnovejsi)
   BEGIN
    SET @idPrijOld = (SELECT TOP(1) ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad
                        AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL
                        AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem)
                       ORDER BY DatPorizeni DESC)
   END
  IF (@idPrijOld IS NOT NULL) -- nakopiruj do ni polozky nove prijemky
   BEGIN
    IF (@aktualizujPolozkyExistPrij=0) AND (@idPrijOld IS NOT NULL) -- nechci existujici prijemku aktualizovat, novou polozku pridam
     BEGIN
      EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijOld, @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
      SET @idVPrVC = (SELECT IDVyrCis FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy)
      SET @vc = NULL
      IF (@idVPrVC IS NOT NULL)
       SET @vc = (SELECT VyrCislo FROM dbo.TabVyrCisPrikaz WHERE ID=@idVPrVC)
      SET @idPZNew = NULL
      SET @idVCP = (SELECT TOP(1) vcp.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad)
                      JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID)
                      JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis)
                     WHERE d.ID=@idPrij AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc)
      IF (@vc IS NOT NULL)
        SET @idPZNew = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad)
                          JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID) 
                          JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis)
                         WHERE p.IDDoklad=@idPrijOld AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc)
       ELSE
        SET @idPZNew = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad)
                         WHERE p.IDDoklad=@idPrijOld AND s.IDKmenZbozi=@IDKmen ORDER BY p.ID DESC)
      IF (@idPZNew IS NOT NULL)
       INSERT dbo.TabPrikazMzdyAZmetkyGenPZ (IDMzdy, TypGen, IDPohybu) SELECT @IDMzdy, 2, @idPZNew
     END


    IF (@aktualizujPolozkyExistPrij=1) AND (@idPrijOld IS NOT NULL) -- chci existujici prijemku aktualizovat (udaji nove polozky)
     BEGIN
      SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @cOrg=CisloOrg
        FROM dbo.TabDokladyZbozi WHERE ID=@idPrijOld

      DECLARE cPol CURSOR LOCAL FAST_FORWARD FOR
       SELECT ID, IDZboSklad FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrij
      OPEN cPol
      WHILE (1=1)
       BEGIN
        FETCH NEXT FROM cPol INTO @idPZNew, @idSS
        IF (@@FETCH_STATUS<>0) BREAK

        SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS), 0)
        IF (@cnt=0) -- nemam na starem dokladu polozku, zalozim
         BEGIN
          EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZOld OUT, @IDDoklad=@idPrijOld, @DruhPohybu=0, @CisloOrg=@cOrg, @IDZboSklad=@idSS,
                                      @Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL,
                                      @ZakazanoDPH=0, @VstupniCena=@vstC
          SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS), 0)
         END
        IF (@cnt=1) -- polozka dohledana, aktualizuju
         BEGIN
          SELECT @idPZOld=ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS 
          UPDATE o SET o.Mnozstvi=o.Mnozstvi + n.Mnozstvi
           FROM dbo.TabPohybyZbozi n, dbo.TabPohybyZbozi o WHERE n.ID=@idPZNew AND o.ID=@idPZOld
-- pokud mam VC, prepis je
          IF EXISTS (SELECT 1 FROM dbo.TabVyrCP WHERE IDPolozkaDokladu=@idPZNew)
           INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi, CCEvid, DatVstup, Autor, DatExpirace)
            SELECT @idPZOld, IDVyrCis, Nazev, Mnozstvi, CCEvid, DatVstup, Autor, DatExpirace FROM dbo.TabVyrCP WHERE ID=@idPZNew
         END

       END
      CLOSE cPol
      DEALLOCATE cPol
     END -- @idPrijOld IS NOT NULL

   END -- @cnt=1, mam existujici prijemku




-- kopie na technologicky sklad, aby se mohly delat provozni 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
-- vypnuto, polozky se davaji do jedne denni prijemky, vygenerovana bude zrusena o krok dal
--     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


-- smaz vygenerovanou prijemku, davame to na sbernou s ID = @idPrijOld, viz kopie polozek vyse pres hp_generuj_navazny_doklad nebo kurzor
  IF OBJECT_ID(N'tempdb..#TabPomSeznamDZProDel', 'U') IS NULL
   CREATE TABLE #TabPomSeznamDZProDel (ID INT NOT NULL)
  INSERT #TabPomSeznamDZProDel (ID) VALUES (@idPrij)
  EXEC dbo.hp_SmazSeznamDokZbozi    -- postara se i o smazani #TabPomSeznamDZProDel
  DELETE FROM dbo.TabPrikazMzdyAZmetkyGenPZ WHERE IDMzdy=@IDMzdy AND TypGen IN (2,3) AND IDPohybu IN (SELECT ID FROM @idPZsOld)

-- vycisti seed
  SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabDokladyZbozi), 0)
  DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @iTemp)
  SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabPohybyZbozi), 0)
  DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @iTemp)

 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
