-- dbo.ep_P01_HDCDZApi1
CREATE PROCEDURE dbo.ep_P01_HDCDZApi1
   @IDDoklad INT
AS

-- HD Consulting Strakonice, T. Buzin
-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !!
-- vola se na konci procesu realizace prijemky (po uskutecneni prijmu ale pred konecnym COMMIT TRAN)
-- nastaveni skladu lze ovlivnit pres #TabDefiniceProP01 (HlavniSkladMat NVARCHAR(30), TechnologickySklad NVARCHAR(30),
--                                                        TechnologickySkladPolo NVARCHAR(30), SkladVyrobaPekarna NVARCHAR(30) )


SET NOCOUNT ON


DECLARE
 @tranPred INT,
 @cnt INT,
 @errMsg NVARCHAR(500),
 @bChyba BIT,
 @iChyba INT

DECLARE
 @sklHlavni NVARCHAR(30),
 @sklTechnolog NVARCHAR(30),
 @sklTechnologPolo NVARCHAR(30),
 @sklPekarna NVARCHAR(30),
 @sklPrijem NVARCHAR(30)

DECLARE
 @sklDokl NVARCHAR(30),
 @radaDokl NVARCHAR(3),
 @cOrg INT,
 @idDZDst INT,
 @dpz TINYINT,
 @dzMena NVARCHAR(3),
 @dzDatum DATETIME,
 @datReal DATETIME,
 @vyrCis NVARCHAR(100),
 @nazevVyrCis NVARCHAR(100),
 @poslVyrCis NVARCHAR(100),
 @idVCK INT,
 @idVCS INT,
 @idVCP INT,
 @idPZ INT,
 @idZboSklad INT,
 @idKZ INT




SELECT @radaDokl=RadaDokladu, @cOrg=CisloOrg, @sklDokl=IDSklad, @dpz=DruhPohybuZbo, @dzMena=Mena, @dzDatum=DatPorizeni
 FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad



-- zapis posledni prevedene sarze
IF (@radaDokl=N'281') AND (@sklDokl=@sklPekarna) // prijemka/prevodka na pekarnu
 BEGIN
  DECLARE p CURSOR LOCAL FOR
   SELECT p.ID, p.IDZboSklad
    FROM dbo.TabPohybyZbozi p
     INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad)
     INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi)
    WHERE p.IDDoklad=@IDDoklad
      AND k.Sluzba=0
    ORDER BY p.Poradi
  OPEN p
  WHILE (1=1)
   BEGIN
    FETCH NEXT FROM p INTO @idPZ, @idZboSklad
    IF (@@FETCH_STATUS<>0) BREAK

    SET @poslVyrCis = N''
    DECLARE v CURSOR LOCAL FOR
     SELECT ID, Nazev
      FROM dbo.TabVyrCP
      WHERE IDPolozkaDokladu=@idPZ
        AND TRIM(ISNULL(Nazev,N''))<>N''
      ORDER BY ID
    OPEN v
    WHILE (1=1)
     BEGIN
      FETCH NEXT FROM v INTO @idVCP, @vyrCis
      IF (@@FETCH_STATUS<>0) BREAK
      SET @poslVyrCis = @vyrCis
     END
    CLOSE v
    DEALLOCATE v

    IF (@poslVyrCis<>N'')
     BEGIN
      IF NOT EXISTS(SELECT 1 FROM dbo.TabStavSkladu_EXT WHERE ID=@idZboSklad)
       INSERT dbo.TabStavSkladu_EXT (ID) VALUES (@idZboSklad)
      UPDATE dbo.TabStavSkladu_EXT SET _Prevod_PosledniSarze=@poslVyrCis WHERE ID=@idZboSklad
     END

   END
  CLOSE p
  DEALLOCATE p
 END -- @radaDokl 281




-- kopie prevodkove prijemky ze skladu materialu na sklad Vyroba/Pekarna
-- na "zrcadlovy" technologicky sklad (neni uctovany), ktery slouzi jen pro vydejky z Vyrobnich prikazu
-- z tech se denne generuje sumacni na hlavnim sklade
IF OBJECT_ID(N'tempdb..#TabDefiniceProP01', N'U') IS NOT NULL
 SELECT TOP(1) @sklHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad, @sklTechnologPolo=TechnologickySkladPolo
  FROM #TabDefiniceProP01
IF (@sklHlavni IS NULL)
 SELECT @sklHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' AND CisloStr LIKE N'3%'
IF (@sklTechnolog IS NULL)
 SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%'
IF (@sklTechnolog IS NULL)
 SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technologický sklad%výdej%' AND CisloStr LIKE N'2%'
IF (@sklTechnologPolo IS NULL)
 SELECT @sklTechnologPolo=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%pol%' AND CisloStr LIKE N'2%'
IF (@sklPekarna IS NULL)
 SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%'


-- jen prijemka/prevodka na sklad Pekarna (211)
-- vypnuto - prijemka pro odpis z prikazu se dela pred vydejkou (viz dbo.ep_Vyroba_GenVydejZeMzdy:prijemka materialu pro vydejku )
IF (1=0) AND (@dpz=0) AND (@radaDokl IN (N'281')) AND (@sklDokl=@sklPekarna) AND (@sklTechnolog IS NOT NULL)
 BEGIN
  EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZDst OUT, @Sklad=@sklTechnolog, @DruhPohybu=@dpz, @RadaDokladu=@radaDokl,
                               @Mena=@dzMena, @CisloOrg=@cOrg, @DatumPorizeni=@dzDatum
  IF (@idDZDst IS NOT NULL)
   BEGIN
    SELECT @datReal=DatRealizace FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad
    EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idDZDst, @IDDokladSrc=@IDDoklad, @CisloOrgCil=@cOrg, @MUCil=NULL, @MenaCil=@dzMena,
                                       @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=1
    IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZDst)
     EXEC dbo.hp_Realizuj_Prijem @ID=@idDZDst, @DatumRealizace=@datReal, @Uzivatel=0, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1
   END

 END -- prijmka radaDokl 281, prijemkovy sklad Vyroba pekarna ci podobny, technologicky sklad vyplneny
