CREATE OR REPLACE PROCEDURE CAD_AUT_TIPOOPEROPL (P_CDFILIOPELOG    IN VARCHAR2, /*OL Filtrado*/
                                                 P_CDFILDEST       IN VARCHAR2, /*Lista de Filiais Atendidas Pelo OL ou T*/
                                                 P_CDTIPOOPERSAID  IN VARCHAR2, /*Tipo de Operação de Saída*/
                                                 P_CDTIPOOPERENTR  IN VARCHAR2, /*Tipo de Operação de Entrada*/
                                                 P_OPERACAO        IN VARCHAR2, /*E = Exclusão e I = Inclusão*/
                                                 P_CDOPERADOR      IN VARCHAR2, /*Operador do Sistema*/
                                                 P_ERROS           OUT VARCHAR2, /*T = Não há dados e N = Concluido com Sucesso*/
                                                 P_CDCLIENTE       IN VARCHAR2 DEFAULT NULL, /*A princípio não precisa ser Informado*/
                                                 P_VRFATODESONERA  IN FLOAT    DEFAULT NULL, /*A princípio não precisa ser Informado*/
                                                 P_CDSERIE         IN VARCHAR2 DEFAULT NULL, /*A princípio não precisa ser Informado*/
                                                 P_CDTPOPSACAIXA   IN VARCHAR2 DEFAULT NULL, /*A princípio não precisa ser Informado*/
                                                 P_CDTPOPENCAIXA   IN VARCHAR2 DEFAULT NULL) /*A princípio não precisa ser Informado*/
IS
   V_IDTIPOOPERSAID  TIPOOPEROPL.IDTIPOOPERSAID%TYPE := NULL;
   V_IDTIPOOPERENTR  TIPOOPEROPL.IDTIPOOPERENTR%TYPE := NULL;
   V_IDTPOPSACAIXA   TIPOOPEROPL.IDTPOPSACAIXA%TYPE  := NULL; 
   V_IDTPOPENCAIXA   TIPOOPEROPL.IDTPOPENCAIXA%TYPE  := NULL;
BEGIN
   P_ERROS := 'T';
   IF P_CDTIPOOPERSAID IS NOT NULL THEN
      V_IDTIPOOPERSAID := 'S';
   END IF;
   IF P_CDTIPOOPERENTR IS NOT NULL THEN
      V_IDTIPOOPERENTR := 'E';
   END IF;
   IF P_CDTPOPSACAIXA IS NOT NULL THEN
      V_IDTPOPSACAIXA := 'S';
   END IF;
   IF P_CDTPOPENCAIXA IS NOT NULL THEN
      V_IDTPOPENCAIXA := 'E';
   END IF;
   FOR C_FILIAL IN (SELECT FILIAL.CDFILIAL
                     FROM FILIAL, PARAMGERAL
                    WHERE ((INSTR(P_CDFILDEST, '_'||FILIAL.CDFILIAL||'_') <> 0) OR (P_CDFILDEST = 'T'))
                      AND NVL(FILIAL.IDFUNCAOFILI, 'T') <> 'O'
                      AND NVL(FILIAL.IDCNTRRESC, 'N') <> 'S'
                      AND FILIAL.CDFILIAL <> P_CDFILIOPELOG
                      AND (((PARAMGERAL.IDRESTRFILIOPER = 'N')) OR
                                                  EXISTS (SELECT 1
                                                            FROM FILIOPER
                                                           WHERE FILIOPER.CDOPERADOR = P_CDOPERADOR
                                                             AND FILIOPER.CDFILIAL   = FILIAL.CDFILIAL))

                    ORDER BY FILIAL.CDFILIAL)
   LOOP
      P_ERROS := 'N';
      IF P_OPERACAO = 'E' THEN
         DELETE 
           FROM TIPOOPEROPL
          WHERE CDFILIOPELOG = P_CDFILIOPELOG
            AND CDFILDEST    = C_FILIAL.CDFILIAL;
      ELSE
         UPDATE TIPOOPEROPL
            SET IDTIPOOPERSAID   = V_IDTIPOOPERSAID,
                IDTIPOOPERENTR   = V_IDTIPOOPERENTR,
                CDTIPOOPERSAID   = P_CDTIPOOPERSAID,
                CDTIPOOPERENTR   = P_CDTIPOOPERENTR,
                CDCLIENTE        = P_CDCLIENTE,
                VRFATODESONERA   = P_VRFATODESONERA,
                CDSERIE          = P_CDSERIE,
                IDTPOPSACAIXA    = V_IDTPOPSACAIXA,
                IDTPOPENCAIXA    = V_IDTPOPENCAIXA,
                CDTPOPSACAIXA    = P_CDTPOPSACAIXA,
                CDTPOPENCAIXA    = P_CDTPOPENCAIXA
          WHERE CDFILIOPELOG     = P_CDFILIOPELOG
            AND CDFILDEST        = C_FILIAL.CDFILIAL;
         IF SQL%NOTFOUND THEN
            INSERT
              INTO TIPOOPEROPL (CDFILIOPELOG, CDFILDEST, IDTIPOOPERSAID, IDTIPOOPERENTR, CDTIPOOPERSAID, CDTIPOOPERENTR,
                                CDCLIENTE, VRFATODESONERA, CDSERIE, IDTPOPSACAIXA, IDTPOPENCAIXA, CDTPOPSACAIXA, CDTPOPENCAIXA)
            VALUES (P_CDFILIOPELOG, C_FILIAL.CDFILIAL, V_IDTIPOOPERSAID, V_IDTIPOOPERENTR, P_CDTIPOOPERSAID, P_CDTIPOOPERENTR,
                    P_CDCLIENTE, P_VRFATODESONERA, P_CDSERIE, V_IDTPOPSACAIXA, V_IDTPOPENCAIXA, P_CDTPOPSACAIXA, P_CDTPOPENCAIXA);
         END IF;
      END IF;
   END LOOP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('CAD_AUT_TIPOOPEROPL','6.39.016'); END;
/