/*-- ================================================================== --
-- OBJETIVOS       : Calcula Custo                                    --
-- ================================================================== --
*/

IF EXISTS (SELECT * FROM SYSOBJECTS O, SYSUSERS U
                    WHERE
	        O.NAME = 'CUSTO_COMP_PROD_CONS' AND
	        TYPE = 'P'                    AND
	        U.UID = O.UID                 AND
	        U.NAME = USER)

DROP PROCEDURE CUSTO_COMP_PROD
GO


CREATE PROCEDURE CUSTO_COMP_PROD_CONS
  @P_CDPRODUTO     VARCHAR(10),
  @P_CDFILIAL      VARCHAR(04),
  @P_TIPOCUSTO     FLOAT,
  @P_QTPRODUTO     FLOAT,
  @P_VRCUSTO       NUMERIC OUTPUT,
  @P_DATA          DATETIME =  NULL

AS

  DECLARE @V_EXISTE_COMP_PADRAO  FLOAT;
  DECLARE @V_EXISTE_COMP_LOCAL   FLOAT;
  DECLARE @V_VRCUSTO             FLOAT;
  DECLARE @V_NRPRODUTOS           FLOAT;
  DECLARE @V_LOOP_PADRAO         VARCHAR(1);
  DECLARE @V_LOOP_LOCAL          VARCHAR(1);
  DECLARE @V_RESULT              VARCHAR(04);

  DECLARE @V_TOTAL               FLOAT;

  DECLARE @V_DATA           DATETIME;

  DECLARE @C_CDPRODUTO      VARCHAR(10);
  DECLARE @C_CDSUBPRODUTO   VARCHAR(10);
  DECLARE @C_QTSUBPRODROT   FLOAT;
  DECLARE @C_NRHRFABPROD    VARCHAR(6);
  DECLARE @C_NRSEQPROD      VARCHAR(4);
  DECLARE @C_IDIMPPRODROT   VARCHAR(1);
  DECLARE @C_NMPRODUTO      VARCHAR(50);
  DECLARE @C_SGUNIDADE      VARCHAR(2);

  DECLARE @C_CDFILIAL      VARCHAR(4);


  DECLARE @V_CURSORPAD     CURSOR;
  DECLARE @V_CURSORLOC     CURSOR;


BEGIN

   IF @P_DATA IS NULL BEGIN
      SET @P_DATA = GETDATE();
   END;

   SET @V_LOOP_PADRAO = 'N';
   SET @V_LOOP_LOCAL  = 'N';
   SET @V_VRCUSTO     = 0;

   /* VERIFICA COMPOSICAO LOCAL */
   SELECT @V_NRPRODUTOS = COUNT(*)
   FROM   ROTFABLOCAL
   WHERE (CDFILIAL  = @P_CDFILIAL ) AND
         (CDPRODUTO = @P_CDPRODUTO);

   IF @V_NRPRODUTOS > 0 BEGIN
      SET @V_RESULT = @P_CDFILIAL;
   END ELSE BEGIN
      SET @V_RESULT = 'P';
   END;
   SET @V_RESULT = 'P';
   IF @V_RESULT = 'P' BEGIN

      EXEC CURSOR_PADRAO @P_CDPRODUTO, @P_CURSOR_PAD = @V_CURSORPAD OUTPUT;
      FETCH NEXT FROM @V_CURSORPAD INTO @C_CDPRODUTO,@C_CDSUBPRODUTO,@C_QTSUBPRODROT,
                                        @C_NRHRFABPROD,@C_NRSEQPROD,@C_IDIMPPRODROT,
                                        @C_NMPRODUTO,  @C_SGUNIDADE;

      WHILE (@@FETCH_STATUS = 0) BEGIN
          SELECT @V_EXISTE_COMP_PADRAO = COUNT(*)
          FROM   ROTFABRICA
          WHERE (CDPRODUTO = @C_CDSUBPRODUTO);

          IF @V_EXISTE_COMP_PADRAO > 0 BEGIN
             SET @V_TOTAL = @C_QTSUBPRODROT * @P_QTPRODUTO;
             EXEC CUSTO_COMP_PROD_CONS @C_CDSUBPRODUTO,@P_CDFILIAL,@P_TIPOCUSTO,
                                  @V_TOTAL, @P_VRCUSTO = @P_VRCUSTO OUTPUT, @P_DATA = @P_DATA;
             SET @V_VRCUSTO = @V_VRCUSTO + @P_VRCUSTO;
             SET @P_VRCUSTO = @V_VRCUSTO;
          END ELSE BEGIN

             SET @V_TOTAL = 0;
             SET @V_DATA = GETDATE();
             SELECT @V_TOTAL = TEKNISA.CUSTO_PRODUTO(@P_CDFILIAL, @C_CDSUBPRODUTO, @P_TIPOCUSTO, @P_DATA, @P_DATA)
             FROM PARAMGERAL;
             SET @V_TOTAL = @V_TOTAL * @C_QTSUBPRODROT * @P_QTPRODUTO;

             SET @V_VRCUSTO = @V_VRCUSTO + ROUND(@V_TOTAL,2);
             SET @P_VRCUSTO = @V_VRCUSTO;
          END;

          SET @V_LOOP_PADRAO = 'S';

         FETCH NEXT FROM @V_CURSORPAD INTO @C_CDPRODUTO,@C_CDSUBPRODUTO,@C_QTSUBPRODROT,
                                           @C_NRHRFABPROD,@C_NRSEQPROD,@C_IDIMPPRODROT,
                                           @C_NMPRODUTO,  @C_SGUNIDADE;

      END;

      IF @V_LOOP_PADRAO <> 'S' BEGIN
         SET @V_TOTAL = 0;
         SET @V_DATA = GETDATE();


         SELECT @V_TOTAL = TEKNISA.CUSTO_PRODUTO (@P_CDFILIAL, @C_CDSUBPRODUTO, @P_TIPOCUSTO, @P_DATA, @P_DATA)
         FROM PARAMGERAL;

         SET @V_TOTAL = @V_TOTAL * @C_QTSUBPRODROT * @P_QTPRODUTO;

         SET @V_VRCUSTO = @V_VRCUSTO + ROUND(@V_TOTAL,2);
         SET @P_VRCUSTO = @V_VRCUSTO;
      END;

      CLOSE      @V_CURSORPAD;
      DEALLOCATE @V_CURSORPAD;

   END ELSE BEGIN

      EXEC CURSOR_LOCAL @P_CDPRODUTO, @P_CDFILIAL, @P_CURSOR_LOC = @V_CURSORLOC OUTPUT;
      FETCH NEXT FROM @V_CURSORLOC INTO @C_CDFILIAL, @C_CDPRODUTO, @C_CDSUBPRODUTO,
                                        @C_QTSUBPRODROT, @C_NRHRFABPROD, @C_IDIMPPRODROT,
                                        @C_NRSEQPROD,@C_NMPRODUTO, @C_SGUNIDADE;

      WHILE (@@FETCH_STATUS = 0) BEGIN

         SELECT @V_EXISTE_COMP_LOCAL = COUNT(*)
         FROM   ROTFABLOCAL
         WHERE (CDFILIAL  = @P_CDFILIAL       ) AND
               (CDPRODUTO = @C_CDPRODUTO);

         IF @V_EXISTE_COMP_LOCAL > 0 BEGIN
            SET @V_TOTAL = @C_QTSUBPRODROT * @P_QTPRODUTO;
            EXEC CUSTO_COMP_PROD_CONS @C_CDSUBPRODUTO,@P_CDFILIAL,@P_TIPOCUSTO,
                                      @V_TOTAL,@P_VRCUSTO = @P_VRCUSTO OUTPUT, @P_DATA = @P_DATA;
            SET @V_VRCUSTO = @V_VRCUSTO + @P_VRCUSTO;
            SET @P_VRCUSTO = @V_VRCUSTO;
         END ELSE BEGIN
            SET @V_TOTAL = 0;
            SET @V_DATA = GETDATE();

            SELECT @V_TOTAL = TEKNISA.CUSTO_PRODUTO (@P_CDFILIAL, @C_CDSUBPRODUTO, @P_TIPOCUSTO, @P_DATA, @P_DATA)
            FROM PARAMGERAL;
            SET @V_TOTAL = @V_TOTAL * @C_QTSUBPRODROT * @P_QTPRODUTO;

            SET @V_VRCUSTO = @V_VRCUSTO + ROUND(@V_TOTAL,2);
            SET @P_VRCUSTO = @V_VRCUSTO;
         END;

         SET @V_LOOP_LOCAL = 'S';

         FETCH NEXT FROM @V_CURSORLOC INTO @C_CDFILIAL, @C_CDPRODUTO, @C_CDSUBPRODUTO,
                                           @C_QTSUBPRODROT, @C_NRHRFABPROD, @C_IDIMPPRODROT,
                                           @C_NRSEQPROD,@C_NMPRODUTO, @C_SGUNIDADE;

      END;

      IF @V_LOOP_LOCAL <> 'S' BEGIN
         SET @V_TOTAL = 0;
         SET @V_DATA = GETDATE();
         SELECT @V_TOTAL = TEKNISA.CUSTO_PRODUTO (@P_CDFILIAL, @C_CDSUBPRODUTO, @P_TIPOCUSTO, @P_DATA, @P_DATA)
         FROM PARAMGERAL;
         SET @V_TOTAL = @V_TOTAL * @C_QTSUBPRODROT * @P_QTPRODUTO;

         SET @V_VRCUSTO = @V_VRCUSTO + ROUND(@V_TOTAL,2);
         SET @P_VRCUSTO = @V_VRCUSTO;
      END;

      CLOSE @V_CURSORLOC;
      DEALLOCATE @V_CURSORLOC;

   END;
END;
GO

-- VERSAO --
EXEC ATUVEROBJ 'CUSTO_COMP_PROD_CONS','6.05.xxx';
GO

