/* Sistemas Integrados TECNISA

Nome: 0401_CDPTRPO_LOG_CDP_PARAMPRODMRP.SQL

Descrição:
   Trigger para gravar o log das alterações

Criação:
   29/12/2021 - Denisson Camargos
*/

/* Tabela PARAMPRODMRP.*/
/* Descrição: A trigger insere registros na tabela LOGOPERA a partir das alterações na tabela
              PARAMPRODMRP, para verifição de erros */
			  		  
  
CREATE OR REPLACE TRIGGER LOG_CDP_PARAMPRODMRP
AFTER DELETE OR INSERT OR UPDATE
ON PARAMPRODMRP FOR EACH ROW
DECLARE
  V_DSREMOTEADDR VARCHAR2(15);
  V_DSREMOTEHOST VARCHAR2(15);
  V_DSSERVERRDM  VARCHAR2(20);
  V_DSSERVMETHOD VARCHAR2(30);
  V_DSREMOTEOPER VARCHAR2(12);
  V_DESC         VARCHAR2(2000);
  V_ITPESQ       VARCHAR2(80);
  V_NMOPERADOR   VARCHAR2(40);
  V_IDTIPOOPER   VARCHAR2(1);
  V_CDFILLOGOPER VARCHAR2(4);
  V_TAM          INTEGER;

BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/

   V_DESC       := '';
   V_ITPESQ     := '';
   V_NMOPERADOR := '';
   V_IDTIPOOPER := '';
   V_CDFILLOGOPER := '';

   NMUSUARIO(V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   IF INSERTING THEN
   
      IF :NEW.CDFILIAL	 IS NOT NULL THEN
         V_DESC := V_DESC || 'CDFILIAL= ' || NVL(:NEW.CDFILIAL,'') || ' ' ;
      END IF;

      IF :NEW.CDPRODUTO IS NOT NULL THEN
         V_DESC := V_DESC || 'CDPRODUTO= ' || NVL(:NEW.CDPRODUTO,'') || ' ' ;
      END IF;

      IF :NEW.CDPERIPRODU IS NOT NULL THEN
         V_DESC := V_DESC || 'CDPERIPRODU= ' || NVL(:NEW.CDPERIPRODU,'') || ' ' ;
      END IF;

      IF :NEW.HRENTRPROD IS NOT NULL THEN
         V_DESC := V_DESC || 'HRENTRPROD= ' || NVL(:NEW.HRENTRPROD,'') || ' ' ;
      END IF;

      IF :NEW.QTHRSEGPROD IS NOT NULL THEN
         V_DESC := V_DESC || 'QTHRSEGPROD= ' || NVL(:NEW.QTHRSEGPROD,'') || ' ' ;
      END IF;

      IF :NEW.DTULTATUPAPM IS NOT NULL THEN
         V_DESC := V_DESC || 'DTULTATUPAPM= ' || NVL(:NEW.DTULTATUPAPM,'') || ' ' ;
      END IF;

      IF :NEW.IDGERAOPCONF IS NOT NULL THEN
         V_DESC := V_DESC || 'IDGERAOPCONF= ' || NVL(:NEW.IDGERAOPCONF,'') || ' ' ;
      END IF;

      IF :NEW.IDAPLICHRSEG IS NOT NULL THEN
         V_DESC := V_DESC || 'IDAPLICHRSEG= ' || NVL(:NEW.IDAPLICHRSEG,'') || ' ' ;
      END IF;

      V_ITPESQ := :NEW.CDFILIAL || :NEW.CDPRODUTO;	  	 

      V_IDTIPOOPER := '1';

   END IF;

   IF UPDATING THEN

      IF (:NEW.CDFILIAL <> :OLD.CDFILIAL) THEN
         V_DESC := V_DESC || 'CDFILIAL= ' || NVL(:NEW.CDFILIAL,'') || ' ' ;
      END IF;

      IF (:NEW.CDPRODUTO <> :OLD.CDPRODUTO) THEN
         V_DESC := V_DESC || 'CDPRODUTO= ' || NVL(:NEW.CDPRODUTO,'') || ' ' ;
      END IF;

      IF (:NEW.CDPERIPRODU <> :OLD.CDPERIPRODU) THEN
         V_DESC := V_DESC || 'CDPERIPRODU= ' || NVL(:NEW.CDPERIPRODU,'') || ' ' ;
      END IF;

      IF (:NEW.HRENTRPROD <> :OLD.HRENTRPROD) THEN
         V_DESC := V_DESC || 'HRENTRPROD= ' || NVL(:NEW.HRENTRPROD,'') || ' ' ;
      END IF;

      IF (:NEW.QTHRSEGPROD <> :OLD.QTHRSEGPROD) THEN
         V_DESC := V_DESC || 'QTHRSEGPROD= ' || NVL(:NEW.QTHRSEGPROD,'') || ' ' ;
      END IF;

      IF (:NEW.DTULTATUPAPM <> :OLD.DTULTATUPAPM) THEN
         V_DESC := V_DESC || 'DTULTATUPAPM= ' || NVL(:NEW.DTULTATUPAPM,'') || ' ' ;
      END IF;

      IF (:NEW.IDGERAOPCONF <> :OLD.IDGERAOPCONF) THEN
         V_DESC := V_DESC || 'IDGERAOPCONF= ' || NVL(:NEW.IDGERAOPCONF,'') || ' ' ;
      END IF;

      IF (:NEW.IDAPLICHRSEG <> :OLD.IDAPLICHRSEG) THEN
         V_DESC := V_DESC || 'IDAPLICHRSEG= ' || NVL(:NEW.IDAPLICHRSEG,'') || ' ' ;
      END IF;
      
	  V_ITPESQ := :NEW.CDFILIAL || :NEW.CDPRODUTO;	  	 	  

      V_IDTIPOOPER := '2';

   END IF;

   IF DELETING  THEN

      IF :OLD.CDFILIAL IS NOT NULL THEN
         V_DESC := V_DESC || 'CDFILIAL= ' || NVL(:OLD.CDFILIAL,'') || ' ' ;
      END IF;

      IF :OLD.CDPRODUTO IS NOT NULL THEN
         V_DESC := V_DESC || 'CDPRODUTO= ' || NVL(:OLD.CDPRODUTO,'') || ' ' ;
      END IF;

      IF :OLD.CDPERIPRODU IS NOT NULL THEN
         V_DESC := V_DESC || 'CDPERIPRODU= ' || NVL(:OLD.CDPERIPRODU,'') || ' ' ;
      END IF;

      IF :OLD.HRENTRPROD IS NOT NULL THEN
         V_DESC := V_DESC || 'HRENTRPROD= ' || NVL(:OLD.HRENTRPROD,'') || ' ' ;
      END IF;

      IF :OLD.QTHRSEGPROD IS NOT NULL THEN
         V_DESC := V_DESC || 'QTHRSEGPROD= ' || NVL(:OLD.QTHRSEGPROD,'') || ' ' ;
      END IF;

      IF :OLD.DTULTATUPAPM IS NOT NULL THEN
         V_DESC := V_DESC || 'DTULTATUPAPM= ' || NVL(:OLD.DTULTATUPAPM,'') || ' ' ;
      END IF;

      IF :OLD.IDGERAOPCONF IS NOT NULL THEN
         V_DESC := V_DESC || 'IDGERAOPCONF= ' || NVL(:OLD.IDGERAOPCONF,'') || ' ' ;
      END IF;

      IF :OLD.IDAPLICHRSEG IS NOT NULL THEN
         V_DESC := V_DESC || 'IDAPLICHRSEG= ' || NVL(:OLD.IDAPLICHRSEG,'') || ' ' ;
      END IF;

	  V_ITPESQ := :NEW.CDFILIAL || :NEW.CDPRODUTO;	  	 

      V_IDTIPOOPER := '3';

   END IF;

   IF NOT (V_DESC IS NULL) THEN
      V_TAM := LENGTH(V_DESC);
      WHILE (V_TAM >= 0) LOOP
         INSERT INTO LOGOPERA ( NMTABELA, DTOPERACAO, NMRESPOPER,
                                IDTIPOOPER,   DSOPERACAO, CDPESQITEM,
                                DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER,
                                DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
                      VALUES  ('PARAMPRODMRP', SYSDATE ,    NVL(V_NMOPERADOR,' '),
                                V_IDTIPOOPER,  SUBSTR(V_DESC,1,300), V_ITPESQ,
                                V_DSSERVERRDM, V_DSREMOTEADDR,  V_DSREMOTEHOST,
                                V_DSSERVMETHOD,   V_DSREMOTEOPER, V_CDFILLOGOPER);
         V_DESC := SUBSTR(V_DESC, 300, V_TAM);
         V_TAM := LENGTH(V_DESC);
      END LOOP;

   END IF;
END;

/
-- VERSAO --
BEGIN ATUVEROBJ('LOG_CDP_PARAMPRODMRP','6.45.001'); END;
/
