-- ================================================================================
--   Database name :  COMISSARIA
--   Created on    :  18/11/1998  11:09
--   Programador   :  Leonardo Monteiro
--   @C:\WIN_V4\SQL\END_CONV\ORACLE\1800_COCSTPO.SQL
-- ================================================================================

CREATE OR REPLACE PROCEDURE IMP_COMP_SERVMANU(
P_CDFILIAL1  IN MANUALCIA.CDFILIAL%TYPE,    -- Filial origem.
P_CDCIA1     IN COMPANHIA.CDCIA%TYPE,       -- Companhia origem.
P_CDMANCIA1  IN MANUALCIA.CDMANCIA%TYPE,    -- Manual origem.
P_CDSERVICO1 IN SERVICOCIA.CDSERVICO%TYPE,  -- Servi�o origem.
P_CDCLASSE1  IN SERVMANUAL.CDCLASSE%TYPE,   -- Classe origem.
P_CDCICLO1   IN SERVMANUAL.CDCICLO%TYPE,    -- Ciclo origem.
P_CDSUBGRU   IN VARCHAR2 DEFAULT 'T',       -- Lista dos SubGrupos do servico. Se 'T' traz todos os subgrupos do servico informado
P_CDFILIAL2  IN MANUALCIA.CDFILIAL%TYPE,    -- Filial destino.
P_CDCIA2     IN COMPANHIA.CDCIA%TYPE,       -- Companhia destino.
P_CDMANCIA2  IN MANUALCIA.CDMANCIA%TYPE,    -- Manual destino.
P_CDSERVICO2 IN SERVICOCIA.CDSERVICO%TYPE,  -- Servi�o destino.
P_CDCLASSE2  IN SERVMANUAL.CDCLASSE%TYPE,   -- Classe destino.
P_CDCICLO2   IN SERVMANUAL.CDCICLO%TYPE,    -- Ciclo destino.
P_IDIMPCOMP  IN NUMERIC)                    -- 0 - Acrescentar / 1 - Sobrepor.
--P_DTINIVG    IN DATE,                     -- Data inicial de vig�ncia da composi��o.
--P_DTFIMVG    IN DATE)                     -- Data final de vig�ncia da composi��o.

AS 
V_CDESPEPROD2 ESPEPROD.CDESPEPROD%TYPE;

BEGIN

--------------------------------------------------------------------------------
--              Acrescenta a composi��o no servico.
--------------------------------------------------------------------------------
	IF P_IDIMPCOMP = 0 THEN

   	SELECT CDESPEPROD
   	INTO V_CDESPEPROD2
      FROM SERVMANUAL
      WHERE (CDFILIAL  = P_CDFILIAL2 ) AND
            (CDCIA     = P_CDCIA2    ) AND
            (CDMANCIA  = P_CDMANCIA2 ) AND
            (CDSERVICO = P_CDSERVICO2) AND
            (CDCLASSE  = P_CDCLASSE2 ) AND
            (CDCICLO   = P_CDCICLO2  );

      INSERT INTO COMPPROD
      (CDPRODUTO,CDESPEPROD,CDPRODINSUMO,CDTIPOCOMP,QTINSUMO,IDUTAPROVREQ,
       VRLOADCOMP,NRORDCOMP,TXCOMITCOMP)
      SELECT P_CDSERVICO2,V_CDESPEPROD2,SG.CDSUBGRU,SG.CDTIPOCOMP,'1','N',
             SG.VRPELOADSUMA,SG.NRORDSUMA,SG.TXCOMSUMA
      FROM SUBGRUSEMA SG
      WHERE (SG.CDFILIAL  = P_CDFILIAL1 ) AND
            (SG.CDCIA     = P_CDCIA1    ) AND
            (SG.CDMANCIA  = P_CDMANCIA1 ) AND
            (SG.CDSERVICO = P_CDSERVICO1) AND
            (SG.CDCLASSE  = P_CDCLASSE1 ) AND
            (SG.CDCICLO   = P_CDCICLO1  ) AND
            ((INSTR(P_CDSUBGRU, '_'||SG.CDSUBGRU||'_') <> 0) OR (P_CDSUBGRU = 'T')) AND
            (NOT EXISTS (SELECT SB.CDSUBGRU
                         FROM SUBGRUSEMA SB
                         WHERE (SB.CDFILIAL  = P_CDFILIAL2 ) AND
                               (SB.CDCIA     = P_CDCIA2    ) AND
                               (SB.CDMANCIA  = P_CDMANCIA2 ) AND
                               (SB.CDSERVICO = P_CDSERVICO2) AND
                               (SB.CDCLASSE  = P_CDCLASSE2 ) AND
                               (SB.CDCICLO   = P_CDCICLO2  ) AND
                               (SB.CDSUBGRU  = SG.CDSUBGRU )));

      INSERT INTO COMPPROD
      (CDFILIAL,CDPRODUTO,CDESPEPROD,CDPRODINSUMO,
       CDPRODUTOAUX,CDESPPRODAUX,CDTIPOCOMP,QTINSUMO,
       IDUTAPROVREQ,VRLOADCOMP,NRORDCOMP,IDIMPCOMPDEL,
       SGUNIDADE,TXCOMITCOMP)
       SELECT P_CDFILIAL2,CDSUBGR[U,CDESPEPROD,CDRECEITA,P_CDSERVICO2,CDESPEPROD,
              CDTIPOCOMP,QTRECSUMA,'N',VRLOADRSUMA,NRORDRSUMA,IDIMPRECDEL,
              SGUNIDADE,TXCOMRECSUMA
       FROM RECSUBSEMA
       WHERE (CDFILIAL  = P_CDFILIAL1 ) AND
             (CDCIA     = P_CDCIA1    ) AND
             (CDMANCIA  = P_CDMANCIA1 ) AND
             (CDSERVICO = P_CDSERVICO1) AND
             (CDCLASSE  = P_CDCLASSE1 ) AND
             (CDCICLO   = P_CDCICLO1  ) AND
             ((INSTR(P_CDSUBGRU, '_'||CDSUBGRU||'_') <> 0) OR (P_CDSUBGRU = 'T')) AND
             (CDSUBGRU, CDRECEITA) NOT IN (SELECT CDSUBGRU, CDRECEITA
                                           FROM RECSUBSEMA
                                           WHERE (CDFILIAL  = P_CDFILIAL2 ) AND
                                                 (CDCIA     = P_CDCIA2    ) AND
                                                 (CDMANCIA  = P_CDMANCIA2 ) AND
                                                 (CDSERVICO = P_CDSERVICO2) AND
                                                 (CDCLASSE  = P_CDCLASSE2 ) AND
                                                 (CDCICLO   = P_CDCICLO2  ));

      INSERT INTO COMPPROD
      (CDFILIAL,CDPRODUTO,CDESPEPROD,CDPRODINSUMO,
       CDPRODUTOAUX,CDESPPRODAUX,CDTIPOCOMP,QTINSUMO,
       IDUTAPROVREQ,SGUNIDADE,NRORDCOMP,VRLOADCOMP,
       TXCOMITCOMP,IDIMPCOMPDEL)
      SELECT P_CDFILIAL2,CDSUBGRU,CDESPEPROD,CDPRODUTO,P_CDSERVICO2,CDESPEPROD,
             CDTIPOCOMP,QTPRODSUMA,'N',SGUNIDADE,NRORDPSUMA,VRLOADPSUMA,
             TXCOPRODSUMA,IDIMPPRODEL
      FROM PRODSUBSEMA
      WHERE (CDFILIAL  = P_CDFILIAL1 ) AND
            (CDCIA     = P_CDCIA1    ) AND
            (CDMANCIA  = P_CDMANCIA1 ) AND
            (CDSERVICO = P_CDSERVICO1) AND
            (CDCLASSE  = P_CDCLASSE1 ) AND
            (CDCICLO   = P_CDCICLO1  ) AND
            ((INSTR(P_CDSUBGRU, '_'||CDSUBGRU||'_') <> 0) OR (P_CDSUBGRU = 'T')) AND
            (CDSUBGRU, CDPRODUTO) NOT IN (SELECT CDSUBGRU, CDPRODUTO
                                          FROM PRODSUBSEMA
                                          WHERE (CDFILIAL  = P_CDFILIAL2 ) AND
                                                (CDCIA     = P_CDCIA2    ) AND
                                                (CDMANCIA  = P_CDMANCIA2 ) AND
                                                (CDSERVICO = P_CDSERVICO2) AND
                                                (CDCLASSE  = P_CDCLASSE2 ) AND
                                                (CDCICLO   = P_CDCICLO2  ));



--------------------------------------------------------------------------------
--              Sobrepor a composi��o no servico.
--------------------------------------------------------------------------------
	ELSIF P_IDIMPCOMP = 1 THEN

      FOR C_PRDS IN(SELECT CDPRODINSUMO,CDESPEPRODSG,CDTIPOCOMP,CDESPEPROD,
                           CDPRODUTO
                    FROM SUBGRUSEMA
                    WHERE (CDFILIAL  = P_CDFILIAL2 ) AND
                          (CDCIA     = P_CDCIA2    ) AND
                          (CDMANCIA  = P_CDMANCIA2 ) AND
                          (CDSERVICO = P_CDSERVICO2) AND
                          (CDCLASSE  = P_CDCLASSE2 ) AND
                          (CDCICLO   = P_CDCICLO2  ))LOOP

         DELETE TCOMPPRO
         WHERE (CDPRODUTO  = C_PRDS.CDPRODUTO ) AND
               (CDESPEPROD = C_PRDS.CDESPEPROD) AND
               (CDTIPOCOMP = C_PRDS.CDTIPOCOMP);

         DELETE COMPPROD
         WHERE (CDPRODUTO    = C_PRDS.CDPRODUTO   ) AND
               (CDESPEPROD   = C_PRDS.CDESPEPROD  ) AND
               (CDTIPOCOMP   = C_PRDS.CDTIPOCOMP  ) AND
               (CDPRODINSUMO = C_PRDS.CDPRODINSUMO);

         DELETE ESPEPROD
         WHERE (CDPRODUTO  = C_PRDS.CDPRODUTO ) AND
               (CDESPEPROD = C_PRDS.CDESPEPROD);
      END LOOP;

      INSERT INTO COMPPROD
      (CDPRODUTO,CDESPEPROD,CDPRODINSUMO,CDTIPOCOMP,QTINSUMO,IDUTAPROVREQ,
       VRLOADCOMP,NRORDCOMP,TXCOMITCOMP)
      SELECT P_CDSERVICO2,CDESPEPROD,CDSUBGRU,CDTIPOCOMP,'1','N',
             VRPELOADSUMA,NRORDSUMA,TXCOMSUMA
      FROM SUBGRUSEMA
      WHERE (CDFILIAL  = P_CDFILIAL1 ) AND
            (CDCIA     = P_CDCIA1    ) AND
            (CDMANCIA  = P_CDMANCIA1 ) AND
            (CDSERVICO = P_CDSERVICO1) AND
            (CDCLASSE  = P_CDCLASSE1 ) AND
            (CDCICLO   = P_CDCICLO1  ) AND
            ((INSTR(P_CDSUBGRU, '_'||CDSUBGRU||'_') <> 0) OR (P_CDSUBGRU = 'T'));

      INSERT INTO COMPPROD
      (CDFILIAL,CDPRODUTO,CDESPEPROD,CDPRODINSUMO,CDPRODUTOAUX,CDESPPRODAUX,
       CDTIPOCOMP,QTINSUMO,IDUTAPROVREQ,VRLOADCOMP,NRORDCOMP,IDIMPCOMPDEL,
       SGUNIDADE,TXCOMITCOMP)
      SELECT P_CDFILIAL2,CDSUBGRU,CDESPEPROD,CDRECEITA,P_CDSERVICO2,CDESPEPROD,
             CDTIPOCOMP,QTRECSUMA,'N',VRLOADRSUMA,NRORDRSUMA,IDIMPRECDEL,
             SGUNIDADE,TXCOMRECSUMA
      FROM RECSUBSEMA
      WHERE (CDFILIAL  = P_CDFILIAL1 ) AND
            (CDCIA     = P_CDCIA1    ) AND
            (CDMANCIA  = P_CDMANCIA1 ) AND
            (CDSERVICO = P_CDSERVICO1) AND
            (CDCLASSE  = P_CDCLASSE1 ) AND
            (CDCICLO   = P_CDCICLO1  ) AND
            ((INSTR(P_CDSUBGRU, '_'||CDSUBGRU||'_') <> 0) OR (P_CDSUBGRU = 'T'));

      INSERT INTO COMPPROD
      (CDFILIAL,CDPRODUTO,CDESPEPROD,CDPRODINSUMO,CDPRODUTOAUX,CDESPPRODAUX,
       CDTIPOCOMP,QTINSUMO,IDUTAPROVREQ,SGUNIDADE,NRORDCOMP,VRLOADCOMP,
       TXCOMITCOMP,IDIMPCOMPDEL)
      SELECT P_CDFILIAL2,CDSUBGRU,CDESPEPROD,CDPRODUTO,P_CDSERVICO2,CDESPEPROD,
             CDTIPOCOMP,QTPRODSUMA,'N',SGUNIDADE,NRORDPSUMA,VRLOADPSUMA,
             TXCOPRODSUMA,IDIMPPRODEL
      FROM PRODSUBSEMA
      WHERE (CDFILIAL  = P_CDFILIAL1 ) AND
            (CDCIA     = P_CDCIA1    ) AND
            (CDMANCIA  = P_CDMANCIA1 ) AND
            (CDSERVICO = P_CDSERVICO1) AND
            (CDCLASSE  = P_CDCLASSE1 ) AND
            (CDCICLO   = P_CDCICLO1  ) AND
            ((INSTR(P_CDSUBGRU, '_'||CDSUBGRU||'_') <> 0) OR (P_CDSUBGRU = 'T'));
	END IF;
END;
/

