sistemas:suap:almoxarifado:migracao

1) Criar schema [nome_esquema], que no caso deixei neila e tabela materiasgestao:

CREATE TABLE neila.materiaisgestao
(
  descricao character varying,
  codigo_contabil character varying,
  unidade character varying,
  quantidade numeric(12,2),
  valor numeric(12,2)  
)
WITH (
  OIDS=FALSE
);
ALTER TABLE neila.materiaisgestao
  OWNER TO postgres;

2) Ajustar planilha enviada deixando colunas na ordem: DESCRICAO, COD_CONTABIL, UNIDADE, QUANTIDADE, VALOR * Limpar formatação coluna VALOR, caso esta venha com símbolo moeda R$ * Formatar colunas quantidade e valor para Número→ Geral → Idioma Inglês(EUA) (para trocar o decimal , por .) * Remover cabeçalhos deixar só as colunas * Salvar planilha como CSV

3) No Postgres, vá no schema e em cima do nome da tabela criada clicar com botão direito →Importar→ Indicar o filename e o formato mudar para CSV, clicar em done

4) Incluir as colunas

alter table neila.materiaisgestao add column id serial;
alter table neila.materiaisgestao add column categoria_id character varying;
alter table neila.materiaisgestao add column unidade_id integer;
alter table neila.materiaisgestao add column material_id integer;

4) Atualizar campo categoria_id na tabela materiaisgestao: * Rodar script abaixo:

update neila.materiaisgestao set categoria_id = (select id from categoriamaterialconsumo where codigo_contabil = codigo )
where codigo_contabil like '3390.30%';

select * from neila.materiaisgestao where categoria_id is null;

Essa consulta não deve retornar nenhum item sem categoria, verificar possíveis erros no arquivo.

5) Atualizar campo unidade_id na tabela materiaisgestao:

5.1)

update neila.materiaisgestao set unidade_id = (select id from unidademedida where nome = unidade );

5.2)

select distinct unidade from neila.materiaisgestao where unidade_id is null;

Verificar se esse último select retorna alguma coisa, caso sim, é porque o arquivo tem alguma unidade com descrição diferente das unidades de medida do SUAP. Atualizar a tabela neila.materiaisgestao para a unidade de medida correspondente, no caso mudar de UND para UN, conforme abaixo:

5.3)

update neila.materiaisgestao set unidade = 'UN' where unidade = 'UND';

Rodar os scripts 5.1 e 5.2

6) Verificar materiais

update neila.materiaisgestao set material_id = (select id from materialconsumo
                                                where nome = descricao);

Rodar script p/ criar função migracao_materiais :

Create or Replace FUNCTION migracao_materiais() RETURNS VOID as
$BODY$
DECLARE
  c_id INTEGER;
  c_categoria_id INTEGER;
  c_material_id INTEGER;
  c_unidade_id INTEGER;
  c_descricao TEXT;
  
  --cursor
  cursor_materiais CURSOR FOR select id,categoria_id, unidade_id, descricao from neila.materiaisgestao
                               where material_id is null
                               and codigo_contabil like '3390.30%';

Begin
   
   OPEN cursor_materiais;
      --
      LOOP
        FETCH cursor_materiais INTO c_id, c_categoria_id, c_unidade_id,c_descricao;
        EXIT WHEN NOT FOUND;

          SELECT id into c_material_id
          FROM materialconsumo
          WHERE nome = c_descricao;

          IF c_material_id IS NULL THEN        
        
	    insert into materialconsumo(categoria_id, unidade_id, nome, codigo)
	    VALUES (c_categoria_id, c_unidade_id, c_descricao, 'IMPORT');

            SELECT MAX(id)
            INTO c_material_id
            FROM materialconsumo;

            UPDATE materialconsumo SET codigo = lpad(cast(c_material_id as text),6,'0'),
                                               search = lpad(cast(c_material_id as text),6,'0')||' '||c_descricao
            WHERE id = c_material_id;
  
            
          END IF;
          
          UPDATE neila.materiaisgestao SET material_id = c_material_id
          WHERE id = c_id;
          
      END LOOP;
      --
      CLOSE cursor_materiais;
End; $BODY$
language 'plpgsql';

Rodar script no Postgres:

6.2)

select migracao_materiais();

7) No SUAP criar processo (Requerimento), informando que será o processo de Migração, finalizar o mesmo.

8) Com usuário de Acaraú, incluir uma Entrada de Doação no Almoxarifado, Fornecedor: IFCE - Reitoria, Processo: número do processo criado.

Guardar o id da entrada. (75) Pegar o id da uo e fazer as substituições: (1)

8.1)

update neila.materiaisgestao set valor = 0 where valor is null;

8.2)

insert into movimentoalmoxentrada(tipo_id, data, entrada_id, qtd, estoque, valor, uo_id, material_id)
select 1 as tipo_id, '2014-03-17', <id entrada> as entrada_id, quantidade, quantidade, valor, <id da uo>, m.id
from neila.materiaisgestao n, materialconsumo m
where n.material_id = cast(m.codigo as integer)
  • sistemas/suap/almoxarifado/migracao.txt
  • Última modificação: 2021/08/25 10:33
  • (edição externa)