CREATE OR REPLACE PROCEDURE CONFERE_DIF_APUR_ICMS_ST (
   P_NRSEQUMAPAPU  IN MAPAAPURAC.NRSEQUMAPAPU%TYPE,
   P_CDEMPRESA     IN MAPAAPURAC.CDEMPRESA%TYPE,
   P_CDINSCESTA    IN MAPAAPURAC.CDINSCESTA%TYPE,
   P_DTINICIAL     IN MAPAAPURAC.DTINIPERIODO%TYPE,
   P_DTFINAL       IN MAPAAPURAC.DTFIMPERIODO%TYPE,
   V_ALIQINTERNA   IN MAPAAPURAC.VRTOTAIMPOS%TYPE)
IS 
   V_NRSEQUENCIAL VARCHAR2(20);
   V_TEMENTR VARCHAR2(01);
   V_CDPRODUTO VARCHAR2(20);
BEGIN
   DELETE FROM CONF_AJUSTE_ST_RS
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;

   FOR C_REG1923S IN (SELECT FI.CDFILIAL AS CDFILIAL,
                             '01'              AS MODELO,
                             '2D'              AS SERIE,
                             LPAD(LTRIM(NVL(VE.NRCUPOMFIS,'0'),'0'), 9, '0') AS NRCUPOM,
                             VE.DTENTRVENDA AS DATAVENDA,
                             NVL(PE.CDARVPROD, PR.CDARVPROD) AS CDARVPROD,
                             NVL(PE.NMPRODUTO, PR.NMPRODUTO) AS NMPRODUTO,
                             PE.CDPRODUTO AS CDPRODESTO,
                             PR.CDPRODUTO AS CDPRODUTO,
                             CASE WHEN ROUND(SUM(TRUNC(IT.QTPRODVEND*(IT.VRUNITVEND+NVL(IT.VRUNITVENDCL,0))-NVL(IT.VRDESITVEND,0)+NVL(IT.VRACRITVEND,0),2)) * V_ALIQINTERNA/100,2) <= 0
                                  THEN 0.01
                                  ELSE ROUND(SUM(TRUNC(IT.QTPRODVEND*(IT.VRUNITVEND+NVL(IT.VRUNITVENDCL,0))-NVL(IT.VRDESITVEND,0)+NVL(IT.VRACRITVEND,0),2)) * V_ALIQINTERNA/100,2) END AS VRSAIDA,
                             '' AS CHAVEACESSO,
                             NVL(VE.IDTPEMISVEND,'E') AS TIPO,
                             SUM(ROUND(IT.QTPRODVEND*NVL(PR.VRFATOCONV,1),3)) AS QTDE
                        FROM ITVENDAIMPOS II, ITEMVENDA IT, VENDA VE, FILIAL FI, PRODUTO PR, PRODUTO PE
                       WHERE II.CDFILIAL     = IT.CDFILIAL
                         AND II.CDCAIXA      = IT.CDCAIXA
                         AND II.NRSEQVENDA   = IT.NRSEQVENDA
                         AND II.NRSEQUITVEND = IT.NRSEQUITVEND
                         AND II.CDFILIAL     = VE.CDFILIAL
                         AND II.CDCAIXA      = VE.CDCAIXA
                         AND II.NRSEQVENDA   = VE.NRSEQVENDA
                         AND VE.NRCUPOMFIS   IS NOT NULL
                         AND VE.IDSITUVENDA  = 'O'
                         AND FI.CDEMPRESA    = P_CDEMPRESA
                         AND FI.CDINSCESTA   = P_CDINSCESTA
                         AND VE.CDFILIAL     = FI.CDFILIAL
                         AND VE.DTENTRVENDA  BETWEEN P_DTINICIAL AND P_DTFINAL
                         AND II.CDCFOPPROD   = '5405'
                         AND NVL(VE.IDTPEMISVEND,'E') = 'E'
                         AND IT.CDPRODUTO    = PR.CDPRODUTO
                         AND PR.CDPRODESTO   = PE.CDPRODUTO(+)
                       GROUP BY FI.CDFILIAL, LPAD(LTRIM(NVL(VE.NRCUPOMFIS,'0'),'0'), 9, '0'),
                             VE.DTENTRVENDA, NVL(PE.CDARVPROD, PR.CDARVPROD),
                             NVL(PE.NMPRODUTO, PR.NMPRODUTO), PE.CDPRODUTO, PR.CDPRODUTO,
                             NVL(VE.IDTPEMISVEND,'E')
                       UNION ALL
                      SELECT FI.CDFILIAL  AS CDFILIAL,
                             '65'             AS MODELO,
                             VE.CDSERIENFCE  AS SERIE,
                             LPAD(LTRIM(NVL(VE.NRNOTAFISCALCE,'0'),'0'), 9, '0') AS NRCUPOM,
                             TRUNC(VE.DTEMISSAONFCE) AS DATAVENDA,
                             NVL(PE.CDARVPROD, PR.CDARVPROD)  AS CDARVPROD,
                             NVL(PE.NMPRODUTO, PR.NMPRODUTO) AS NMPRODUTO,
                             PE.CDPRODUTO AS CDPRODESTO,
                             PR.CDPRODUTO AS CDPRODUTO,
                             CASE WHEN ROUND(SUM(TRUNC(IT.QTPRODVEND*(NVL(IT.VRUNITVEND,0)+NVL(IT.VRUNITVENDCL,0))-NVL(IT.VRDESITVEND,0)+NVL(IT.VRACRITVEND,0),2)) * V_ALIQINTERNA/100,2) <= 0
                                  THEN 0.01
                                  ELSE ROUND(SUM(TRUNC(IT.QTPRODVEND*(NVL(IT.VRUNITVEND,0)+NVL(IT.VRUNITVENDCL,0))-NVL(IT.VRDESITVEND,0)+NVL(IT.VRACRITVEND,0),2)) * V_ALIQINTERNA/100,2) END AS VRSAIDA,
                             VE.NRACESSONFCE AS CHAVEACESSO,
                             VE.IDTPEMISVEND AS TIPO,
                             SUM(ROUND(IT.QTPRODVEND*NVL(PR.VRFATOCONV,1),3)) AS QTDE
                        FROM ITVENDAIMPOS II, ITEMVENDA IT,  VENDA VE, FILIAL FI, PRODUTO PR, PRODUTO PE
                       WHERE FI.CDEMPRESA       = P_CDEMPRESA
                         AND FI.CDINSCESTA      = P_CDINSCESTA
                         AND FI.CDEMPRESA       = VE.CDEMPRESA
                         AND FI.CDFILIAL        = VE.CDFILIAL
                         AND TRUNC(VE.DTEMISSAONFCE) BETWEEN P_DTINICIAL AND P_DTFINAL
                         AND VE.IDSITUVENDA     = 'O'
                         AND VE.IDTPAMBNFCE     = '1'
                         AND VE.IDSTATUSNFCE    = 'A'
                         AND VE.CDFILIAL        = IT.CDFILIAL
                         AND VE.NRSEQVENDA      = IT.NRSEQVENDA
                         AND VE.CDCAIXA         = IT.CDCAIXA
                         AND IT.CDFILIAL        = II.CDFILIAL
                         AND IT.CDCAIXA         = II.CDCAIXA
                         AND IT.NRSEQUITVEND    = II.NRSEQUITVEND
                         AND IT.NRSEQVENDA      = II.NRSEQVENDA
                         AND II.CDCFOPPROD      = '5405'
                         AND VE.IDAPROVACAONFCE = 'A'
                         AND VE.IDTPEMISVEND    = 'N'
                         AND IT.CDPRODUTO       = PR.CDPRODUTO
                         AND PR.CDPRODESTO      = PE.CDPRODUTO(+)
                       GROUP BY FI.CDFILIAL , VE.CDSERIENFCE , LPAD(LTRIM(NVL(VE.NRNOTAFISCALCE,'0'),'0'), 9, '0'),
                             TRUNC(VE.DTEMISSAONFCE), NVL(PE.CDARVPROD, PR.CDARVPROD),
                             VE.NRACESSONFCE, VE.IDTPEMISVEND, PE.CDPRODUTO, PR.CDPRODUTO,
                             NVL(PE.NMPRODUTO, PR.NMPRODUTO), TRUNC(VE.DTEMISSAONFCE)) LOOP

      V_TEMENTR := 'N';
      FOR C_REG1923E IN (SELECT N.CDFILIRECE  AS FILIENTR,
                                N.CDMODDOCFISC AS MODELO,
                                N.CDSERIEENTR  AS SERIE,
                                LPAD(LTRIM(NVL(N.NRNOTAFISC,'0'),'0'), 9, '0') AS NRNOTA,
                                N.DTENTRSAID AS DTENTRSAID,
                                N.CDARVPROD AS CDARVPROD,
                                ROUND(N.VRST * (C_REG1923S.QTDE*NVL(N.VRFATCONV,1)) / N.QTITEMPROD,2) AS VALORENTR,
                                N.NRACESSONFE AS CHAVEACESSO,
                                N.VRST,
                                N.QTITEMPROD
                           FROM ENTRADAREF N
                          WHERE N.CDPRODUTO  = C_REG1923S.CDPRODUTO
                            AND N.CDFILIRECE = C_REG1923S.CDFILIAL
                            AND N.DTVENDA    = C_REG1923S.DATAVENDA) LOOP

			V_TEMENTR := 'S';
         NOVO_CODIGO_NT('CONF_AJUSTE_ST_RS', V_NRSEQUENCIAL);
         V_NRSEQUENCIAL := SUBSTR(V_NRSEQUENCIAL,11,10);
         INSERT INTO CONF_AJUSTE_ST_RS
            (NRSEQUENCIAL, NRSEQUMAPAPU, CDFILIALSAID, CDMODELOSAID, CDSERIESAID, NRCUPOM,
             DTVENDA, CDARVPRODSAID, NMPRODUTOSAID, CDPRODUTOSAID, VRSAIDA, NRACESSOSAID,
             CDTIPOSAID, NRQTDESAID, CDFILIALENTR, CDMODELOENTR, CDSERIEENTR, NRNOTAFISC, DTENTRSAID,
             CDARVPRODENTR, VRSTNFENTR, NRACESSOENTR, VRSTENTR, QTITEMPRODENTR)
         VALUES
            (V_NRSEQUENCIAL, P_NRSEQUMAPAPU, C_REG1923S.CDFILIAL, C_REG1923S.MODELO, C_REG1923S.SERIE, C_REG1923S.NRCUPOM,
             C_REG1923S.DATAVENDA, C_REG1923S.CDARVPROD, C_REG1923S.NMPRODUTO, C_REG1923S.CDPRODESTO, C_REG1923S.VRSAIDA, C_REG1923S.CHAVEACESSO,
             C_REG1923S.TIPO, C_REG1923S.QTDE, C_REG1923E.FILIENTR, C_REG1923E.MODELO, C_REG1923E.SERIE, C_REG1923E.NRNOTA, C_REG1923E.DTENTRSAID,
             C_REG1923E.CDARVPROD, C_REG1923E.VALORENTR, C_REG1923E.CHAVEACESSO, C_REG1923E.VRST, C_REG1923E.QTITEMPROD);
      END LOOP;

	   IF V_TEMENTR = 'N' THEN
         NOVO_CODIGO_NT('CONF_AJUSTE_ST_RS', V_NRSEQUENCIAL);
         V_NRSEQUENCIAL := SUBSTR(V_NRSEQUENCIAL,11,10);
         INSERT INTO CONF_AJUSTE_ST_RS
            (NRSEQUENCIAL, NRSEQUMAPAPU, CDFILIALSAID, CDMODELOSAID, CDSERIESAID, NRCUPOM,
             DTVENDA, CDARVPRODSAID, NMPRODUTOSAID, CDPRODUTOSAID, VRSAIDA, NRACESSOSAID,
             CDTIPOSAID, NRQTDESAID, CDFILIALENTR, CDMODELOENTR, CDSERIEENTR, NRNOTAFISC, DTENTRSAID,
             CDARVPRODENTR, VRSTNFENTR, NRACESSOENTR, VRSTENTR, QTITEMPRODENTR)
         VALUES
            (V_NRSEQUENCIAL, P_NRSEQUMAPAPU, C_REG1923S.CDFILIAL, C_REG1923S.MODELO, C_REG1923S.SERIE, C_REG1923S.NRCUPOM,
             C_REG1923S.DATAVENDA, C_REG1923S.CDARVPROD, C_REG1923S.NMPRODUTO, C_REG1923S.CDPRODESTO, C_REG1923S.VRSAIDA, C_REG1923S.CHAVEACESSO,
             C_REG1923S.TIPO, C_REG1923S.QTDE, '', '', '', '', NULL,
             '', NULL, '', NULL, NULL);
      END IF;
   END LOOP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('CONFERE_DIF_APUR_ICMS_ST','0.00.000'); END;
/