CRIAR CAMPO ADICIONAL NO PRODUTO (marcar os produtos que enviarão aviso de estoque mÃnimo. Se forem para todos, desconsiderar essa regra na trigger)
TRIGGER (chamada na confirmação de qualquer documento que atualizar estoque)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | CREATE OR REPLACE TRIGGER TRG_TGFCAB_ESTMIN_NOMECLIENTE BEFORE UPDATE OF STATUSNOTA ON TGFCAB FOR EACH ROW DECLARE ERROR EXCEPTION; ERRMSG VARCHAR2(4000); P_ESTMIN FLOAT; P_DESCRPROD VARCHAR2(50); P_DISPONIVEL FLOAT; P_REPOSICAO FLOAT; P_CODFILA INT := 0; P_AVISAESTMIN CHAR(1); BEGIN BEGIN FOR Cur_Ped IN (SELECT I.NUNOTA,I.CODEMP,I.CODLOCALORIG,I.SEQUENCIA,I.CODPROD,I.QTDNEG,I.CONTROLE,I.RESERVA FROM TGFITE I WHERE I.NUNOTA = :NEW.NUNOTA) LOOP --SABER O ESTOQUE E ESTOQUE MINIMO DO PRODUTO SELECT DISTINCT PRO.DESCRPROD, PRO.AD_AVISAESTMIN, NVL(PRO.ESTMIN,0), NVL(SUM(EST.ESTOQUE - RESERVADO)OVER(PARTITION BY EST.CODPROD),0) INTO P_DESCRPROD, P_AVISAESTMIN, P_ESTMIN, P_DISPONIVEL FROM TGFPRO PRO LEFT OUTER JOIN TGFEST EST ON PRO.CODPROD = EST.CODPROD WHERE PRO.CODPROD = Cur_Ped.CODPROD; SELECT MAX(CODFILA) + 1 INTO P_CODFILA FROM TMDFMG; IF P_CODFILA IS NULL THEN P_CODFILA := 1; END IF; P_REPOSICAO := P_ESTMIN - P_DISPONIVEL; IF P_DISPONIVEL <= P_ESTMIN AND NVL(P_AVISAESTMIN,'N') = 'S' THEN INSERT INTO TMDFMG ( CODFILA, ASSUNTO, CODMSG, DTENTRADA, STATUS, CODCON, TENTENVIO, MENSAGEM, TIPOENVIO, MAXTENTENVIO, EMAIL, NUANEXO, MIMETYPE ) VALUES ( P_CODFILA, 'Produto ' || Cur_Ped.CODPROD || '-' || P_DESCRPROD || ' atingiu o estoque mÃnimo!', --ASSUNTO NULL, --CODMSG SYSDATE, --DTENTRADA 'Pendente', --STATUS 0, --CODCON 0, --TENTENVIO '<strong>Produto:</strong>'|| Cur_Ped.CODPROD || '-' || P_DESCRPROD ||' <strong>Estoque DisponÃvel:</strong>'|| P_DISPONIVEL ||' <strong>Estoque MÃnimo:</strong>'|| P_ESTMIN ||' <strong>Necessidade de Reposição.:</strong>'|| P_REPOSICAO ||'' , --MENSAGEM 'E', --TIPOENVIO 3, --MAXTENTENVIO ‘COLOCAREMAILAQUI@gmail.com', --EMAIL NULL, --NUANEXO NULL ); --MIMETYPE END IF; END LOOP; END; --FIM BEGIN CURSOR EXCEPTION WHEN ERROR THEN RAISE_APPLICATION_ERROR(-20101, ERRMSG); RETURN; END; |
E-mail (será enviado email para cada produto no ato da confirmação)
Nenhum comentário:
Postar um comentário