CREATE OR REPLACE PROCEDURE GERA_PARCELAS_EAM(
    P_CDEMPRESA       IN IMPOSTOBEM.CDEMPRESA%TYPE,       -- Empresa
    P_CDBEMATIVO      IN IMPOSTOBEM.CDBEMATIVO%TYPE,      -- Codigo do Ativo
    P_CDIMPOSTO       IN IMPOSTOBEM.CDIMPOSTO%TYPE,       -- Codigo do Imposto
    P_VRAQUIBEMATIVO  IN FLOAT,                           -- Valor de Aquisicao do Ativo
    P_DTAQUIBEMATIVO  IN DATE,                            -- Data de Aquisicao do Ativo
    P_IDNRPARCPISCOF  IN BEMATIVO.IDNRPARCPISCOF%TYPE,    -- Numero de Parcelas
    P_VRIMPOSTO       IN IMPOSTOBEM.VRIMPOSTPAGOBEM%TYPE, -- Valor do Imposto
    P_NRORG           IN NUMBER,                          -- Organizacao
    P_CDOPERADOR      IN VARCHAR2,                        -- Operador
    P_IDTPAPROPPISCOF IN BEMATIVO.IDTPAPROPPISCOF%TYPE)   -- Tipo de Apropriacao
AS
  V_VRPARCELA FLOAT;            -- Valor da Parcela
  V_DTPARCELA     DATE;         -- Data da Parcela
  V_CONT          NUMBER;       -- Contador usado nas repeticoes
  V_NRPARCELACIAP VARCHAR2(10); -- Mes/Ano da parcela
  V_QTDPARCELAS   NUMBER;       -- Quantidade de Parcelas
BEGIN
  V_DTPARCELA    := P_DTAQUIBEMATIVO;
  IF ((P_CDIMPOSTO <> '60') AND (P_CDIMPOSTO <> '50')) THEN -- Imposto diferente de PIS e COFINS
    V_QTDPARCELAS  := 48;
    V_VRPARCELA    := P_VRIMPOSTO / V_QTDPARCELAS;
    IF V_VRPARCELA <> 0 THEN
      V_CONT       := 0;
      WHILE V_CONT < V_QTDPARCELAS
      LOOP
        --V_DTPARCELA     := ADD_MONTHS(V_DTPARCELA,1);
        V_NRPARCELACIAP := LPAD(TO_CHAR(V_CONT + 1),2,0) || '/' || V_QTDPARCELAS;
        INSERT
        INTO PARCELACIAPBEM
          (
            CDEMPRESA,
            CDBEMATIVO,
            CDIMPOSTO,
            NRPARCELACIAP,
            VRPARCELACIAP,
            NRORG,
            DTINCLUSAO,
            CDOPERINCLUSAO,
            NRORGINCLUSAO,
            DTCOMPPARCCIAP,
            IDATIVO
          )
          VALUES
          (
            P_CDEMPRESA,
            P_CDBEMATIVO,
            P_CDIMPOSTO,
            V_NRPARCELACIAP,
            V_VRPARCELA,
            P_NRORG,
            SYSDATE,
            P_CDOPERADOR,
            P_NRORG,
            V_DTPARCELA,
            'S'
          );
		V_DTPARCELA := ADD_MONTHS(V_DTPARCELA,1);
        V_CONT := V_CONT + 1;
      END LOOP;
    END IF;
  ELSE  -- Imposto igual a PIS ou COFINS
    IF (P_IDTPAPROPPISCOF  = '10') THEN -- Tipo de Apropriacao = Credito aplicado sobre o valor de aquisicao
      IF (P_IDNRPARCPISCOF = '01') THEN -- Parcelas = Integral
        V_QTDPARCELAS     := 1;
      ELSE
        IF (P_IDNRPARCPISCOF = '02') THEN -- Parcelas = 12
          V_QTDPARCELAS     := 12;
        ELSE
          IF (P_IDNRPARCPISCOF = '03') THEN -- Parcelas = 24
            V_QTDPARCELAS     := 24;
          ELSE -- Parcelas = 48
            V_QTDPARCELAS := 48;
          END IF;
        END IF;
      END IF;
      V_VRPARCELA   := P_VRAQUIBEMATIVO / V_QTDPARCELAS;
      IF P_CDIMPOSTO = '50' THEN
        V_VRPARCELA := (V_VRPARCELA * 1.65) / 100;
      ELSE
        IF P_CDIMPOSTO = '60' THEN
          V_VRPARCELA := (V_VRPARCELA * 7.6) / 100;
        END IF;
      END IF;
      IF V_VRPARCELA <> 0 THEN
        V_CONT       := 0;
        WHILE V_CONT < V_QTDPARCELAS
        LOOP
          --V_DTPARCELA     := ADD_MONTHS(V_DTPARCELA,1);
          V_NRPARCELACIAP := LPAD(TO_CHAR(V_CONT + 1),2,0) || '/' || V_QTDPARCELAS;
          INSERT
          INTO PARCELACIAPBEM
            (
              CDEMPRESA,
              CDBEMATIVO,
              CDIMPOSTO,
              NRPARCELACIAP,
              VRPARCELACIAP,
              NRORG,
              DTINCLUSAO,
              CDOPERINCLUSAO,
              NRORGINCLUSAO,
              DTCOMPPARCCIAP,
              IDATIVO
            )
            VALUES
            (
              P_CDEMPRESA,
              P_CDBEMATIVO,
              P_CDIMPOSTO,
              V_NRPARCELACIAP,
              V_VRPARCELA,
              P_NRORG,
              SYSDATE,
              P_CDOPERADOR,
              P_NRORG,
              V_DTPARCELA,
              'S'
            );
		  V_DTPARCELA := ADD_MONTHS(V_DTPARCELA,1);
          V_CONT := V_CONT + 1;
        END LOOP;
      END IF;
    END IF;
  END IF;
END;
/