/* Sistemas Integrados TEKNISA

Nome: @c:\web_520\sql\end_conv\oracle\3500_COTSTPO_FATURA_SERVICO_ACEITE.SQL;

Descrição:
Procedimento para Faturamento de Serviços no Aceite da Proposta.

Criação:
17/03/2011 - Diego Gonçalves

*/

CREATE OR REPLACE 
PROCEDURE FATURA_SERVICO_ACEITE
   (P_CDCLIENTE IN VENCSERVCLIE.CDCLIENTE%TYPE,
    P_CDOPERAPUR IN OPERADOR.CDOPERADOR%TYPE,
    P_COMMIT IN VARCHAR2 := '1')
AS
   V_PRXAPURACAO VARCHAR2(20);
   V_DSBOLETCLIE VARCHAR2(2000);
   V_DSFATURCLIE VARCHAR2(2000);
   V_CDPRODUTO VARCHAR2(10);
   V_CDEMPRESA VARCHAR2(2);
   V_CDFILIAL VARCHAR2(4);
   V_DATA DATE;
   V_MES DATE;
   V_VERIFMES BOOLEAN;
BEGIN
   SELECT TRUNC(SYSDATE)
     INTO V_DATA
     FROM DUAL;

   V_VERIFMES := TRUE;

   /* EXECUTAR O FOR PARA PEGAR AS PARCELAS DO VENCIMENTO ANTES DE GERAR A APURAÇÃO */
   FOR CUR_VENC IN (SELECT V.CDCLIENTE, V.DTVENCSERVCLIE, V.VRVENCSERVCLIE, NVL(E.CDPAIS, '0055') CDPAIS, V.NRPROPOSFAS, V.NRVERPROPFAS
                      FROM VENCSERVCLIE V, ENDECLIE E
                     WHERE V.CDCLIENTE = P_CDCLIENTE
                       AND ((V.VRVENCSERVCLIE > 0) OR (V.VRVENCSERVCLIE IS NULL))
                       AND V.NRAPURFATFAS IS NULL
                       AND E.IDTPENDECLIE = 'P'
                       AND E.CDCLIENTE = P_CDCLIENTE
                     ORDER BY V.DTVENCSERVCLIE) LOOP

      IF V_VERIFMES THEN
         V_MES := ADD_MONTHS(LAST_DAY(TRUNC(CUR_VENC.DTVENCSERVCLIE)), -1) + 1;
         V_VERIFMES := FALSE;
      END IF;

      BEGIN
         SELECT MAX(CDPRODFATU)
           INTO V_CDPRODUTO
           FROM TIPOSERV;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            NULL;
      END;

	  BEGIN
         SELECT MAX(P.DSBOLETCLIE), MAX(P.DSFATURCLIE), NVL(MAX(P.CDEMPRESA), '01'), NVL(MAX(F.CDFILIAL), '9999') -- ver se pode retornar mais de uma filial
           INTO V_DSBOLETCLIE, V_DSFATURCLIE, V_CDEMPRESA, V_CDFILIAL
           FROM PARCLIEFAS P, FILIAL F
          WHERE P.IDTPFATUCLIE = '5' -- MÃƒO DE OBRA
            AND P.CDCLIENTE = CUR_VENC.CDCLIENTE
            AND P.CDEMPRESA = F.CDEMPRESA
            AND ROWNUM = 1;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            NULL;
      END;

      NOVO_CODIGO('APURFATUFAS', V_PRXAPURACAO);

      INSERT INTO APURFATUFAS (CDFILIAL, CDCLIENTE, NRAPURFATFAS, DTAPURFATFAS,
         VRTOTAFATFAS, DSEMISSPRONF, CDOPERAPUR, CDEMPRESA,
         CDPRODUTO, IDAPURFATFAS, IDSTAPFATFAS, IDCOMIFATFAS,
         DSBOLEFATFAS, DTMESAPURFAS, CDGRUPONFAPUR, NRPROPOSFAS, NRVERPROPFAS)
      VALUES (V_CDFILIAL, CUR_VENC.CDCLIENTE, SUBSTR(V_PRXAPURACAO, 11, 10), V_DATA,
              CUR_VENC.VRVENCSERVCLIE, V_DSFATURCLIE, P_CDOPERAPUR, V_CDEMPRESA,
              V_CDPRODUTO, '1', 'P', 'N', V_DSBOLETCLIE, V_MES, '01', CUR_VENC.NRPROPOSFAS, CUR_VENC.NRVERPROPFAS);

      UPDATE VENCSERVCLIE
         SET NRAPURFATFAS = SUBSTR(V_PRXAPURACAO, 11, 10)
       WHERE CDCLIENTE = CUR_VENC.CDCLIENTE
         AND DTVENCSERVCLIE = CUR_VENC.DTVENCSERVCLIE;

      V_MES := ADD_MONTHS(V_MES, 1);
   END LOOP;
   
   IF P_COMMIT = '1' THEN
      COMMIT;
   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('FATURA_SERVICO_ACEITE','5.20.000'); END;
/