-- dbo.ep_Vyroba_GenDenniVydejka
CREATE PROCEDURE dbo.ep_Vyroba_GenDenniVydejka
   @proDen DATETIME=NULL
AS


DECLARE
 @errMsg NVARCHAR(500),
 @cnt INT

DECLARE
 @sklPekarna NVARCHAR(30),
 @sklTechnolog NVARCHAR(30),
 @sklTechnologHV NVARCHAR(30),
 @radaDoklVydej NVARCHAR(3),
 @radaStorno NVARCHAR(3),
 @idDZVydej INT,
 @idPZOld INT,
 @idZboSkladOld INT,
 @idZboSkladNew INT,
 @idKmen INT,
 @idPZNew INT,
 @idVCK INT,
 @idVCS INT,
 @paletList NVARCHAR(50),
 @sarze NVARCHAR(50),
 @mnoz NUMERIC(19,6)
DECLARE
 @dzMena NVARCHAR(3),
 @dzKurz NUMERIC(19,6),
 @dzKurzE NUMERIC(19,6),
 @vstC TINYINT,
 @jednM INT



IF (@sklPekarna IS NULL)
 SELECT TOP(1) @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%'
IF (@sklTechnolog IS NULL)
 SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev NOT LIKE N'%polotov%' AND Nazev NOT LIKE N'%HV%' AND CisloStr LIKE N'2%'
IF (@sklTechnolog IS NULL)
 SET @sklTechnolog = N'261'
IF (@sklTechnologHV IS NULL)
 SELECT @sklTechnologHV=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev LIKE N'%HV%' AND CisloStr LIKE N'2%'
IF (@sklTechnologHV IS NULL)
 SET @sklTechnologHV = N'262'


SET @radaDoklVydej=N'223'
SET @radaStorno = N'229'


IF (@proDen IS NULL)
 SET @proDen=GETDATE()
SET @proDen = dbo.hf_TruncDate(@proDen)
SET @proDen = DATEADD(second, -1, @proDen)


-- ma vubec smysl to delat ?
IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad)
                 WHERE d.IDSklad IN (@sklTechnolog) AND d.RadaDokladu IN (@radaDoklVydej, @radaStorno) AND d.Realizovano=1
                  AND dbo.hf_TruncDate(d.DatPorizeni)=dbo.hf_TruncDate(@proDen) AND d.CisloOrg=0
              )
 RETURN




SET @cnt=ISNULL( (SELECT COUNT(ID) FROM dbo.TabDokladyZbozi WHERE IDSklad=@sklPekarna AND RadaDokladu=@radaDoklVydej AND DruhPohybuZbo=4
                   AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@proDen) AND CisloOrg=0 AND Realizovano=0), 0)
IF (@cnt=0)
  EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZVydej OUT, @Sklad=@sklPekarna, @DruhPohybu=4, @RadaDokladu=@radaDoklVydej, @CisloOrg=0, @DatumPorizeni=@proDen
 ELSE
  IF (@cnt=1)
    SET @idDZVydej=(SELECT ID FROM dbo.TabDokladyZbozi WHERE IDSklad=@sklPekarna AND RadaDokladu=@radaDoklVydej AND DruhPohybuZbo=4
                     AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@proDen) AND CisloOrg=0 AND Realizovano=0)
   ELSE
    SET @idDZVydej=(SELECT TOP(1) ID FROM dbo.TabDokladyZbozi WHERE IDSklad=@sklPekarna AND RadaDokladu=@radaDoklVydej AND DruhPohybuZbo=4
                     AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@proDen) AND CisloOrg=0 AND Realizovano=0 ORDER BY DatPorizeni DESC)


IF (@idDZVydej IS NOT NULL)
 BEGIN
  SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena FROM dbo.TabDokladyZbozi WHERE ID=@idDZVydej


-- begin: polozky materialu, tj. ze skladu 261
  DECLARE p CURSOR LOCAL FOR
   SELECT -1.0*SUM(p.MnozstviDruhove), p.IDZboSklad
    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.TabKmenZbozi k WITH(NOLOCK) ON (k.ID=s.IDKmenZbozi)
    WHERE d.IDSklad=@sklTechnolog
      AND d.RadaDokladu IN (@radaDoklVydej, @radaStorno)
      AND d.DruhPohybuZbo IN (3,4)
      AND d.Realizovano=1
      AND p.Mnozstvi>0
      AND k.Sluzba=0
      AND dbo.hf_TruncDate(d.DatPorizeni)=dbo.hf_TruncDate(@proDen)
     GROUP BY p.IDZboSklad, k.Nazev1
     ORDER BY k.Nazev1
  OPEN p
  WHILE (1=1)
   BEGIN
    FETCH NEXT FROM p INTO @mnoz, @idZboSkladOld
    IF (@@FETCH_STATUS<>0) BREAK

    SELECT @idKmen=IDKmenZbozi FROM dbo.TabStavSkladu WHERE ID=@idZboSkladOld
    SELECT @idZboSkladNew=ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKmen AND IDSklad=@sklPekarna

    SET @idPZNew=(SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZVydej AND IDZboSklad=@idZboSkladNew)
    IF (@idPZNew IS NULL)
     EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZNew OUT, @IDDoklad=@idDZVydej, @DruhPohybu=4, @CisloOrg=0, @IDZboSklad=@idZboSkladNew, @Mena=@dzMena,
                                 @Kurz=@dzKurz, @KurzEuro=@dzKurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0,
                                 @VstupniCena=@vstC, @PovolitDuplicitu=0, @PovolitBlokovane=1, @Mnozstvi=@mnoz
    IF (@idPZNew IS NOT NULL)
     INSERT dbo._TabVyroba_VydejMatSarze (IDPohybZbozi, IDPohybZboziNew, PaletovyList, Sarze, IDKmenZbozi, Mnozstvi)
      SELECT p.ID, @idPZNew, ISNULL(pe._Vyroba_PaletList, N''), ISNULL(_Vyroba_Sarze, N''), s.IDKmenZbozi, -1.0*p.Mnozstvi
       FROM dbo.TabPohybyZbozi p WITH(NOLOCK)
        LEFT JOIN dbo.TabPohybyZbozi_EXT pe WITH(NOLOCK) ON (pe.ID=p.ID)
        JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad)
        JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad)
        JOIN dbo.TabKmenZbozi k WITH(NOLOCK) ON (k.ID=s.IDKmenZbozi)
       WHERE d.IDSklad=@sklTechnolog
         AND d.RadaDokladu IN (@radaDoklVydej, @radaStorno)
         AND d.DruhPohybuZbo IN (3,4)
         AND d.Realizovano=1
         AND p.Mnozstvi>0
         AND k.Sluzba=0
         AND p.IDZboSklad=@idZboSkladOld
         AND dbo.hf_TruncDate(d.DatPorizeni)=dbo.hf_TruncDate(@proDen)
       ORDER BY k.Nazev1
   END
  CLOSE p
  DEALLOCATE p
-- end: polozky materialu, tj. ze skladu 261


 END
