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', as entrada_id, quantidade, quantidade, valor, , m.id
from neila.materiaisgestao n, materialconsumo m
where n.material_id = cast(m.codigo as integer)