CREATE OR REPLACE FUNCTION ARQUIVO_DPI_IPM(
   P_CDIMPOSTO    IN IMPOSTO.CDIMPOSTO%TYPE,
   P_CDEMPRESA    IN EMPRESA.CDEMPRESA%TYPE,
   P_DTINICIAL    IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_DTFINAL      IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_GRUPPROD     IN VARCHAR,
   P_LIVROMAG     IN VARCHAR,
   P_CDINSCESTA   IN NOTAFISCAL.CDINSCESTA%TYPE,
   P_CONTADOR     IN NUMBER,
   P_SEQMAGNET    IN VARCHAR)
RETURN NUMBER
AS
   V_CONTADOR    NUMBER;
   V_QUADRO      NUMBER;
   V_CDMUN       VARCHAR2(30);
   V_DATAINICIAL DATE;
   V_DATAFIM     DATE;
BEGIN
   V_CONTADOR := NVL(P_CONTADOR,0);
   V_CDMUN    := ' ';
   V_QUADRO   := 0;


   V_DATAINICIAL := TO_DATE('01/01/'|| SUBSTR(P_DTINICIAL,7,10));
   V_DATAFIM     := TO_DATE('31/12/'|| SUBSTR(P_DTFINAL,7,10));


   FOR C_REGISTRO_09 IN(
      SELECT T.CDEXPMUNILMAG||'~' AS CDEXPMUNILMAG,
             SUBSTR(P.CDSUBGRPROD,9,10) AS CDSUBGRPROD,
             SUM(NVL(T.VRCONTABILNF,0))||'~'AS VRCONTABILNF
        FROM PRSUBGRPROD P,
             (SELECT U.CDEXPMUNILMAG AS CDEXPMUNILMAG,
                     IP.CDPRODUTO AS CDPRODUTO,
                     SUM(I.VRCONTABILNF) AS VRCONTABILNF
               FROM ITEMPRODUTO IP, PRODUTO P, NOTAFISCAL N, IMPOSTONF I, MAPAAPURAC M,
                    FORNECEDOR F,ENDEFORN E, CODEXPMUNILMAG U, IMPOSTO IM
               WHERE M.CDEMPRESA     = P_CDEMPRESA
                 AND M.CDIMPOSTO     = P_CDIMPOSTO
                 AND M.CDINSCESTA    = P_CDINSCESTA
                 AND M.DTINIPERIODO >= V_DATAINICIAL
                 AND M.DTFIMPERIODO <= V_DATAFIM
                 AND M.NRSEQUMAPAPU  = I.NRSEQUMAPAPU
                 AND SUBSTR(I.CDFISCOPERNF,1,1) = '1'
                 AND M.CDIMPOSTO     = IM.CDIMPOSTONFE
                 AND IM.CDIMPOSTO    = I.CDIMPOSTO
                 AND I.CDFILIAL      = N.CDFILIAL
                 AND I.NRLANCTONF    = N.NRLANCTONF
                 AND N.CDFILIAL      = IP.CDFILIAL
                 AND N.NRLANCTONF    = IP.NRLANCTONF
                 AND IP.CDPRODUTO    = P.CDPRODUTO
                 AND N.IDENTRSAIDOP  = 'E'
                 AND N.IDORIGDESTNF  = 'F'
                 AND N.CDFORNECED    = F.CDFORNECED
                 AND F.CDFORNECED    = E.CDFORNECED
                 AND E.CDPAIS        = U.CDPAIS
                 AND E.SGESTADO      = U.SGESTADO
                 AND E.CDMUNICIPIO   = U.CDMUNICIPIO
                 AND U.CDLIVROMAG    = P_LIVROMAG
                 AND E.SGESTADO      = 'GO'
                 AND E.IDTPENDEFORN  = 'P'
              GROUP BY U.CDEXPMUNILMAG,IP.CDPRODUTO
             UNION ALL
             SELECT U.CDEXPMUNILMAG AS CDEXPMUNILMAG,
                    IP.CDPRODUTO AS CDPRODUTO,
                    SUM(I.VRCONTABILNF) AS VRCONTABILNF
               FROM ITEMPRODUTO IP, PRODUTO P, NOTAFISCAL N, IMPOSTONF I, MAPAAPURAC M,
                    CLIENTE C,ENDECLIE E, CODEXPMUNILMAG U, IMPOSTO IM
               WHERE M.CDEMPRESA     = P_CDEMPRESA
                 AND M.CDIMPOSTO     = P_CDIMPOSTO
                 AND M.CDINSCESTA    = P_CDINSCESTA
                 AND M.DTINIPERIODO >= V_DATAINICIAL
                 AND M.DTFIMPERIODO <= V_DATAFIM
                 AND M.NRSEQUMAPAPU  = I.NRSEQUMAPAPU
                 AND SUBSTR(I.CDFISCOPERNF,1,1) = '1'
                 AND M.CDIMPOSTO     = IM.CDIMPOSTONFE
                 AND IM.CDIMPOSTO    = I.CDIMPOSTO
                 AND I.CDFILIAL      = N.CDFILIAL
                 AND I.NRLANCTONF    = N.NRLANCTONF
                 AND N.CDFILIAL      = IP.CDFILIAL
                 AND N.NRLANCTONF    = IP.NRLANCTONF
                 AND IP.CDPRODUTO    = P.CDPRODUTO
                 AND N.IDENTRSAIDOP  = 'E'
                 AND N.IDORIGDESTNF  = 'C'
                 AND N.CDCLIENTE     = C.CDCLIENTE
                 AND C.CDCLIENTE     = E.CDCLIENTE
                 AND E.CDPAIS        = U.CDPAIS
                 AND E.SGESTADO      = U.SGESTADO
                 AND E.CDMUNICIPIO   = U.CDMUNICIPIO
                 AND U.CDLIVROMAG    = P_LIVROMAG
                 AND E.SGESTADO      = 'GO'
                 AND E.IDTPENDECLIE  = 'P'
             GROUP BY U.CDEXPMUNILMAG,IP.CDPRODUTO
             UNION ALL
             SELECT U.CDEXPMUNILMAG AS CDEXPMUNILMAG,
                    IP.CDPRODUTO AS CDPRODUTO,
                    SUM(I.VRCONTABILNF) AS VRCONTABILNF
               FROM ITEMPRODUTO IP, PRODUTO P, NOTAFISCAL N, IMPOSTONF I, MAPAAPURAC M,
                    FILIAL F,ENDEFILI E, CODEXPMUNILMAG U, IMPOSTO IM
               WHERE M.CDEMPRESA     = P_CDEMPRESA
                 AND M.CDIMPOSTO     = P_CDIMPOSTO
                 AND M.CDINSCESTA    = P_CDINSCESTA
                 AND M.DTINIPERIODO >= V_DATAINICIAL
                 AND M.DTFIMPERIODO <= V_DATAFIM
                 AND M.NRSEQUMAPAPU  = I.NRSEQUMAPAPU
                 AND SUBSTR(I.CDFISCOPERNF,1,1) = '1'
                 AND M.CDIMPOSTO     = IM.CDIMPOSTONFE
                 AND IM.CDIMPOSTO    = I.CDIMPOSTO
                 AND I.CDFILIAL      = N.CDFILIAL
                 AND I.NRLANCTONF    = N.NRLANCTONF
                 AND N.CDFILIAL      = IP.CDFILIAL
                 AND N.NRLANCTONF    = IP.NRLANCTONF
                 AND IP.CDPRODUTO    = P.CDPRODUTO
                 AND N.IDENTRSAIDOP  = 'E'
                 AND N.IDORIGDESTNF  = 'L'
                 AND N.CDFILIRECE    = F.CDFILIAL
                 AND F.CDFILIAL      = E.CDFILIAL
                 AND E.CDPAIS        = U.CDPAIS
                 AND E.SGESTADO      = U.SGESTADO
                 AND E.CDMUNICIPIO   = U.CDMUNICIPIO
                 AND U.CDLIVROMAG    = P_LIVROMAG
                 AND E.SGESTADO      = 'GO'
                 AND E.IDTPENDEFILI  = 'P'
             GROUP BY U.CDEXPMUNILMAG,IP.CDPRODUTO)T
        WHERE P.CDGRUPPROD = P_GRUPPROD
          AND P.CDPRODUTO = T.CDPRODUTO
        GROUP BY T.CDEXPMUNILMAG,P.CDSUBGRPROD
        ORDER BY 1,2)LOOP

      IF V_CDMUN <> C_REGISTRO_09.CDEXPMUNILMAG THEN
         V_CDMUN  := C_REGISTRO_09.CDEXPMUNILMAG;
         V_QUADRO := V_QUADRO + 1;

      V_CONTADOR := NVL(V_CONTADOR,0)+1;
      INSERT INTO ARQMAGNETICO
         (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
         VALUES
         ('9'||LPAD(V_CONTADOR, 9, '0'),'00'||V_QUADRO||'~'||C_REGISTRO_09.CDEXPMUNILMAG,P_SEQMAGNET);
      END IF;

      V_CONTADOR := NVL(V_CONTADOR,0)+1;
      INSERT INTO ARQMAGNETICO
         (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
         VALUES
         ('9'||LPAD(V_CONTADOR, 9, '0'),C_REGISTRO_09.CDSUBGRPROD||V_QUADRO||'~'||C_REGISTRO_09.VRCONTABILNF,P_SEQMAGNET);

    END LOOP;
   RETURN (LPAD(V_CONTADOR, 10, 0));
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('ARQUIVO_DPI_IPM','5.30.000'); END;
/

