Projeto

Geral

Perfil

Nova Funcionalidade #182 » AlteraStatusTabelas.txt

Rebson Moraes, 18/12/2025 10:15

 
1
CREATE OR REPLACE PROCEDURE altera_status_tabelas
2
-- *****************************************************************************
3
-- Analista......: REBSON YUKO
4
-- Programador...: REBSON YUKO
5
-- Data..........: 18/12/2025
6
-- Objetivo......: Procedure para altarar tabelas do fronteira
7
-- Versao 01
8
-- *****************************************************************************
9
(
10
    pa_gr_usuario  IN VARCHAR2,
11
    pa_co_programa IN VARCHAR2 DEFAULT 'PROCEDUR',
12
    pa_do_commit   IN VARCHAR2 DEFAULT 'Y',  
13
    pa_mens_erro   OUT VARCHAR2
14
) AS
15
    -- Datas referência (formato texto YYYYMMDD / HH24MISS como nos arquivos Natural)
16
    v_hoje_char    VARCHAR2(8) := to_char(sysdate, 'YYYYMMDD');
17
    v_hora_char    VARCHAR2(6) := to_char(sysdate, 'HH24MISS');
18

    
19
--------------------------------------------------------------------------------
20
    -- Faixas de datas (texto) conforme a lógica Natural
21
    v_off_ini      VARCHAR2(8);
22
    v_off_fim      VARCHAR2(8);
23
    v_cmd_ini      VARCHAR2(8);
24
    v_cmd_fim      VARCHAR2(8);
25
    v_pro_ini      VARCHAR2(8);
26
    v_pro_fim      VARCHAR2(8); 
27

    
28
    -- Contadores (opcional, para diagnóstico)
29
    v_rows_offline PLS_INTEGER := 0;
30
    v_rows_comando PLS_INTEGER := 0;
31
    v_rows_proc_c  PLS_INTEGER := 0; -- processos virados para 'C'
32
    v_rows_proc_i  PLS_INTEGER := 0; -- processos virados para 'I'
33

    
34
    -- Utilitário para converter data DATE -> CHAR(8) YYYYMMDD
35
    FUNCTION d2c (
36
        p_date DATE
37
    ) RETURN VARCHAR2 IS
38
    BEGIN
39
        RETURN to_char(p_date, 'YYYYMMDD');
40
    END;
41

    
42
BEGIN
43
    pa_mens_erro := NULL;
44

    
45
--------------------------------------------------------------------------------
46
    -------------------------------------------------------------------------
47
    -- 1) CHAVE OFFLINE: de D-30 até D-1 e status = 'T'  ? limpar status
48
    -------------------------------------------------------------------------
49
    v_off_ini := d2c(trunc(sysdate) - 30);
50
    v_off_fim := d2c(trunc(sysdate) - 1);
51
    UPDATE sitafe.sitafe_chave_offline
52
    SET
53
        it_in_status = ' ',
54
        it_co_programa = pa_co_programa
55
    WHERE
56
            it_in_status = 'T'
57
        AND it_da_transacao BETWEEN v_off_ini AND v_off_fim;
58

    
59
    v_rows_offline := SQL%rowcount;
60
    
61
    -------------------------------------------------------------------------
62
    -- 2) COMANDO BKG: desde D-60 (sem limite superior, como no Natural atual)
63
    --    Filtros: programa origem B40015M7, comando_status <> '0', status <> 'C',
64
    --    módulo processamento = 'B'  ? setar IT_IN_COMANDO_STATUS = '1'
65
    -------------------------------------------------------------------------
66
    v_cmd_ini := d2c(trunc(sysdate) - 60);
67
    v_cmd_fim := d2c(trunc(sysdate) - 3);
68
    UPDATE sitafe.sitafe_comando
69
    SET
70
        it_in_comando_status = '1',
71
        it_co_programa = pa_co_programa
72
    WHERE
73
            it_co_programa = 'B40015M7'
74
        AND it_da_transacao BETWEEN v_cmd_ini AND v_cmd_fim
75
        AND nvl(it_in_comando_status, ' ') <> '0'
76
        AND nvl(it_in_status, ' ') <> 'C'
77
        AND it_in_modulo_processamento = 'B';
78

    
79
    v_rows_comando := SQL%rowcount;
80

    
81
--------------------------------------------------------------------------------
82
    -- 3) PROCESSO ADM (CO_SERVICO = '072') pendente:
83
    --    Abertura entre D-30 e D-1; IT_IN_STATUS = 'P'
84
    --    - Se NÿO existe em SITAFE_NF_FISCAL_AUX: status 'C'
85
    --    - Se existe com IT_IN_SITUACAO = '1': status 'I'
86
    --    Atualiza também CO_PROGRAMA, DA_TRANSACAO, HO_TRANSACAO
87
    -------------------------------------------------------------------------
88
    v_pro_ini := d2c(trunc(sysdate) - 30);
89
    v_pro_fim := d2c(trunc(sysdate) - 1);
90

    
91
    /* Estratégia com duas atualizações específicas (sem cursor),
92
       usando EXISTS/NOT EXISTS como no Natural */
93

    
94
    DELETE FROM internamento_notas.capa_internamentos i
95
    WHERE
96
        i.processo IN (
97
            SELECT
98
                pa.it_nu_processo
99
            FROM
100
                sitafe.sitafe_processo_administrativo pa
101
            WHERE
102
                    pa.it_nu_processo = i.processo
103
                AND pa.it_co_servico = '072'
104
                AND pa.it_in_status = 'P'
105
                AND pa.IT_TP_PROCESSO = 'I'
106
                AND pa.it_da_abertura BETWEEN v_pro_ini AND v_pro_fim
107
        );
108

    
109
    DELETE FROM internamento_notas.nota_internadas n
110
    WHERE
111
        n.capa_internamento_processo IN (
112
            SELECT
113
                pa.it_nu_processo
114
            FROM
115
                sitafe.sitafe_processo_administrativo pa
116
            WHERE
117
                    pa.it_nu_processo = n.capa_internamento_processo
118
                AND pa.it_co_servico = '072'
119
                AND pa.it_in_status = 'P'
120
                AND pa.IT_TP_PROCESSO = 'I'
121
                AND pa.it_da_abertura BETWEEN v_pro_ini AND v_pro_fim
122
        );
123

    
124
--------------------------------------------------------------------------------
125

    
126
    -- a) SEM notas vinculadas ? 'C'
127
    UPDATE sitafe.sitafe_processo_administrativo pa
128
    SET
129
        pa.it_in_status = 'C',
130
        pa.it_co_programa = pa_co_programa,
131
        pa.it_da_transacao = v_hoje_char,
132
        pa.it_ho_transacao = v_hora_char
133
    WHERE
134
            pa.it_co_servico = '072'
135
        AND pa.it_in_status = 'P'
136
        AND pa.it_da_abertura BETWEEN v_pro_ini AND v_pro_fim
137
        AND NOT EXISTS (
138
            SELECT
139
                1
140
            FROM
141
                sitafe_nf_fiscal_aux fa
142
            WHERE
143
                fa.it_nu_processo = pa.it_nu_processo
144
        );
145

    
146
    v_rows_proc_c := SQL%rowcount;
147
    
148
--------------------------------------------------------------------------------
149
    -- b) COM notas e situacao = '1' ? 'I'
150
    UPDATE sitafe.sitafe_processo_administrativo pa
151
    SET
152
        pa.it_in_status = 'I',
153
        pa.it_co_programa = pa_co_programa,
154
        pa.it_da_transacao = v_hoje_char,
155
        pa.it_ho_transacao = v_hora_char
156
    WHERE
157
            pa.it_co_servico = '072'
158
        AND pa.it_in_status = 'P'
159
        AND pa.it_da_abertura BETWEEN v_pro_ini AND v_pro_fim
160
        AND EXISTS (
161
            SELECT
162
                1
163
            FROM
164
                sitafe_nf_fiscal_aux fa
165
            WHERE
166
                    fa.it_nu_processo = pa.it_nu_processo
167
                AND fa.it_in_situacao = '1'
168
        );
169

    
170
    v_rows_proc_i := SQL%rowcount;
171
    -------------------------------------------------------------------------
172
    -- Commit / Retorno
173
    -------------------------------------------------------------------------
174
    IF pa_do_commit = 'Y' THEN
175
        COMMIT;
176
    END IF;
177
    pa_mens_erro := 'OK';
178

    
179
--------------------------------------------------------------------------------
180

    
181
    -- (Opcional) Se quiser logar quantidades afetadas, crie um log aqui
182
    -- INSERT INTO SUA_TABELA_LOG(...) VALUES (SYSDATE, v_rows_offline, v_rows_comando, v_rows_proc_c, v_rows_proc_i, p_gr_usuario, p_co_programa, ...);
183

    
184
EXCEPTION
185
    WHEN OTHERS THEN
186
        pa_mens_erro := 'ERRO: ' || sqlerrm;
187
        -- Se preferir reverter sempre:
188
        ROLLBACK;
189
        RAISE;
190
END altera_status_tabelas;
    (1-1/1)