quarta-feira, 26 de agosto de 2020

Aviso por e-mail de produto com estoque disponível abaixo do estoque mínimo

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