sistemas:frota:importacaoveiculos

ESTE PASSO DEVERÁ SER FEITO PELO SERVIDOR RESPONSÁVEL PELA COORDENAÇÃO DE TRANSPORTES DE CADA CAMPUS, JUNTAMENTE COM O COORDENADOR DE PATRIMÔNIO

Favor preencher o arquivo abaixo e enviar para suporte.suap@ifce.edu.br

modelo_planilha_preenchida_final_suap_frota.xls


a) Devem ser obedecidas a ordem das colunas da tabela (tombamento, descrição, quantidade = 1, valor, matrícula SIAPE do servidor, nome do servidor que possui a carga, cnpj do fornecedor, nome do fornecedor, número da nota fiscal, data da nota fiscal, estado do bem, categoria)

b) Para cada campus, criar no módulo de Protocolo um processo, que será associado ao processo de importação dos bens do Patrimônio,

c) Categoria deve ser 4490.52.52 (VEICULOS DE TRACAO MECÂNICA)

d) Devem ser consultados previamente os fornecedores como pessoas jurídicas no SUAP, clicando em ADMINISTRAÇÃO → Cadastros → Pessoa Jurídica, ou através do link:

http://suap.ifce.edu.br/admin/rh/pessoajuridica/

Caso o fornecedor não exista, ele deve ser cadastrado. É essencial que o nome e o CNPJ repassados na planilha sejam iguais aos nomes contidos no SUAP. Para maiores informações consultar o site:

http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/cnpjreva_solicitacao.asp

e) O servidor deve ser selecionado dentre as pessoas existentes na planilha. Muita atenção para informar a matrícula SIAPE do servidor corretamente. As matrículas podem ser consultados na aba “servidor” da planilha.

f) Não será possível a importação de bens cujo número de tombamento seja ilegível. É necessário o repasse correto desta numeração.

g) O estado do bem deve ser selecionado dentre as opções disponíveis na seleção (bom, ocioso, recuperavel, antieconomico e irrecuperável)

h) A data deve ser fornecida no formato dia/mes/ano (por exemplo: 01/01/2015)

i) A quantidade do bem deve ser sempre 1, pois eles serão importados individualmente.

OBSERVAÇÃO: os bens entrarão no sistema como DOAÇÂO, pois caso sejam lançado como compra o processo de importação será muito complexo e demorado por necessitar de dados adicionados e que talvez não sejam obtidos com a celeridade necessária.


ESTE PASSO DEVERÁ SER FEITO PELA DGTI. É A IMPORTAÇÃO DOS VEÍCULOS PARA O MÓDULO PATRIMÔNIO DO SUAP.

1) Criar o schema 'migracaopatrim'

CREATE SCHEMA migracaopatrim;

2) Criar tabela 'migracaopatrim.bens'

CREATE TABLE migracaopatrim.bens
( 
  tombamento character varying,
  descricao character varying,  
  quantidade character varying,
  valor character varying,
  siape character varying,  
  responsavel character varying,  
  cnpjfornecedor character varying,
  fornecedor character varying,
  notafiscal character varying,
  datanotafiscal character varying,
  estadobem character varying,
  categoria character varying
);

comment on column migracaopatrim.bens.tombamento is 'numero do tombamento do bem';
comment on column migracaopatrim.bens.descricao is 'descricao do bem';
comment on column migracaopatrim.bens.quantidade is 'quantidade do bem';
comment on column migracaopatrim.bens.valor is 'valor do bem';
comment on column migracaopatrim.bens.siape is 'matricula SIAPE de quem possui a carga do bem';
comment on column migracaopatrim.bens.responsavel is 'responsavel pela carga do bem';
comment on column migracaopatrim.bens.cnpjfornecedor is 'CNPJ do fornecedor';
comment on column migracaopatrim.bens.fornecedor is 'Fornecedor do bem';
comment on column migracaopatrim.bens.notafiscal is 'Numero da nota fiscal';
comment on column migracaopatrim.bens.datanotafiscal is 'Data da nota fiscal';
comment on column migracaopatrim.bens.estadobem is 'Estado do bem: bom,ocioso,recuperavel,antieconomico,irrecuperavel';
comment on column migracaopatrim.bens.categoria is 'Categoria do bem no formato 4490.XX.XX';

3) Remover cabeçalho da planilha que foi enviada.

4) Gerar CSV a partir da planilha (No LibreOffice: Arquivo - Salvar como).

5) Importar o CSV para a tabela 'migracaopatrim.bens' (no PgAdmin, clicar com o botão direito na tabela e clicar na opção Import. Na próxima tela escolha o arquivo e em format selecione a opção CSV).

6) Criar os campos abaixo para mapear para o SUAP

alter table migracaopatrim.bens add column id serial;
alter table migracaopatrim.bens add column funcionario_ptr_id integer;
alter table migracaopatrim.bens add column categoria_id character varying;
alter table migracaopatrim.bens add column fornecedor_id integer;
alter table migracaopatrim.bens add column entrada_id integer;
alter table migracaopatrim.bens add column entradapermanente_id integer;
alter table migracaopatrim.bens add column inventario_id integer;

7) Atualize o campo 'funcionario_ptr_id' por meio do script abaixo:

update migracaopatrim.bens 
set funcionario_ptr_id = (
    select serv.funcionario_ptr_id 
    from servidor serv
    where serv.matricula = siape
);

8) Conferir se as matrículas SIAPE foram cadastradas sem erros. Comparar com o nome da planilha original e o próprio SUAP

select distinct siape 
from 
    migracaopatrim.bens 
where 
    siape is not null and funcionario_ptr_id is null;

9) Retire os espaços em branco

update migracaopatrim.bens set categoria =  replace(categoria,' ','')

10) Atualizar categoria: categoria_id

update migracaopatrim.bens 
set categoria_id = (
    select id 
    from categoriamaterialpermanente catperm
    where catperm.codigo = categoria
);

11) A consulta a seguir não deve retornar nenhum item sem categoria. Verificar possíveis erros no arquivo e devolver para correção.

select * from migracaopatrim.bens where categoria_id is null;

12) Atualizar fornecedor pelo CNPJ

update migracaopatrim.bens set fornecedor_id = (
    select pessoa_ptr_id
    from pessoa_juridica 
    where cnpj = trim(cnpjfornecedor)
);

13) Checar se há fornecedores com dados pendentes. Caso haja, eles devem ser incluídos no SUAP. Depois repita o passo 12.

select distinct cnpjfornecedor, fornecedor 
from 
    migracaopatrim.bens 
where
    fornecedor_id is null and cnpjfornecedor is not null and cnpjfornecedor <> ' ';

14) Formatar o campo valor, retirando os pontos finais e trocando a vírgula por ponto.

update migracaopatrim.bens set valor=replace(valor,'.','');
update migracaopatrim.bens set valor=replace(valor,',','.');

15) Rodar script para criar a função para gerar as entradas

CREATE OR REPLACE FUNCTION migracao_bens_patrimonio(integer) 
RETURNS VOID as
$BODY$
DECLARE
  c_notafiscal text;
  c_datanotafiscal date;
  c_fornecedor_id INTEGER;
  c_entrada_id INTEGER;
  c_categoria_id INTEGER;
  c_descricao TEXT;
  c_quantidade FLOAT;
  c_valor FLOAT;
  c_entradapermanente_id INTEGER;
  c_tombo INTEGER;
  c_busca TEXT;
  c_funcionario INTEGER;
  c_inventario_id INTEGER;
  c_estadobem text;
 
  --cursor entradas
  cursor_entradas CURSOR FOR select distinct 
                                 notafiscal,
                                 to_date(datanotafiscal,'dd/mm/yyyy') as datanotafiscal,
                                 fornecedor_id
			     from migracaopatrim.bens
                             where fornecedor_id is not null 
                             and entrada_id is null;
 
  --cursor entradas permanente
  cursor_entrada_permanente CURSOR FOR select entrada_id, 
                                              categoria_id, 
                                              descricao, 
                                              CAST(quantidade AS integer) as quantidade, 
                                              cast(valor as float) as valor
				       from migracaopatrim.bens
                                       where entrada_id is not null 
                                       and categoria_id is not null 
                                       and entradapermanente_id is null;
 --cursor inventario
  cursor_inventario CURSOR FOR select tombamento, 
                                      entradapermanente_id,
                                      tombamento||' '||descricao as busca,
                                      funcionario_ptr_id,
                                      estadobem
                               from migracaopatrim.bens
                               where entrada_id is not null 
                               and categoria_id is not null 
                               and entradapermanente_id is not null 
                               and inventario_id is null;

 --cursor movimento
  cursor_movimento CURSOR FOR select inventario_id, 
                                     funcionario_ptr_id,
                                     entradapermanente_id
                               from migracaopatrim.bens
                               where inventario_id is not null;
BEGIN
   OPEN cursor_entradas;
      --
      LOOP
        FETCH cursor_entradas INTO c_notafiscal, c_datanotafiscal, c_fornecedor_id;
        EXIT WHEN NOT FOUND;
           insert into entrada
           (data, uo_id, tipoentrada_id, tipomaterial_id, numeronotafiscal, datanotafiscal, pessoa_id)
	   values
	   (now(), $1, 2, 2, c_notafiscal, c_datanotafiscal, c_fornecedor_id);

           SELECT MAX(id) 
           INTO c_entrada_id
           FROM entrada;

           UPDATE migracaopatrim.bens 
           SET entrada_id = c_entrada_id
           WHERE notafiscal = c_notafiscal
           AND fornecedor_id = c_fornecedor_id;          
      END LOOP;
      --
  CLOSE cursor_entradas;

  OPEN cursor_entrada_permanente;
      --
      LOOP
        FETCH cursor_entrada_permanente INTO c_entrada_id, c_categoria_id, c_descricao, c_quantidade, c_valor;
        EXIT WHEN NOT FOUND;
           insert into entradapermanente
           (entrada_id, categoria_id, descricao, qtd, valor)
	   values
	   (c_entrada_id, c_categoria_id, c_descricao, c_quantidade, c_valor);

           SELECT MAX(id)
           INTO c_entradapermanente_id
           FROM entradapermanente;

           UPDATE migracaopatrim.bens SET entradapermanente_id = c_entradapermanente_id
           WHERE entrada_id = c_entrada_id;
      END LOOP;
      --
  CLOSE cursor_entrada_permanente;

  OPEN cursor_inventario;
      --
      LOOP
        FETCH cursor_inventario INTO c_tombo, c_entradapermanente_id, c_busca, c_funcionario, c_estadobem;
        EXIT WHEN NOT FOUND;
         BEGIN
	   insert into inventario
	   (numero, status_id, numeroserie, entradapermanente_id, campo_busca, responsavel_id, estado_conservacao, sala_id)
  	   values 
  	   (c_tombo, 2,'', c_entradapermanente_id, c_busca, c_funcionario, c_estadobem, null);

  	 EXCEPTION WHEN unique_violation THEN
            -- Do nothing, and loop to try the UPDATE again.
         END;            
      END LOOP;
      --
  CLOSE cursor_inventario;
  
  update migracaopatrim.bens 
  SET inventario_id = (
      select id 
      from inventario 
      where numero = cast(tombamento as integer)
  );
  
  OPEN cursor_movimento;
      --
      LOOP
        FETCH cursor_movimento INTO c_inventario_id, c_funcionario, c_entradapermanente_id;
        EXIT WHEN NOT FOUND;
	  insert into movimentopatrim
	  (usuario_id, inventario_id, tipo_id, pessoa_id, entradapermanente_id, data)
          values
          (66, c_inventario_id, 2, c_funcionario, c_entradapermanente_id, now());
      END LOOP;
            
  CLOSE cursor_movimento;
End; $BODY$
language 'plpgsql';

16) Execute a função, digitando o seguinte comando:

select migracao_bens_patrimonio(4);

OBS: Em que 4 corresponde ao campus ao qual o veículo pertence, obtido através da tabela: unidadeorganizacional (ver tabela abaixo)

idnome
1CAMPUS ACARAU
4CAMPUS CANINDE
6CAMPUS CRATEUS
8CAMPUS FORTALEZA
9REITORIA
10CAMPUS IGUATU
12CAMPUS LIMOEIRO DO NORTE
14CAMPUS QUIXADA
15CAMPUS SOBRAL
26CAMPUS CEDRO
28CAMPUS MARACANAÚ
30CAMPUS JUAZEIRO DO NORTE
32CAMPUS CRATO
33CAMPUS ARACATI
35CAMPUS BATURITE
37CAMPUS CAMOCIM
39CAMPUS CAUCAIA
41CAMPUS JAGUARIBE
42CAMPUS MORADA NOVA
44CAMPUS TABULEIRO
46CAMPUS TAUA
48CAMPUS TIANGUA
50CAMPUS UBAJARA

Checar se os inventários foram importados corretamente usando a url

/patrimonio/inventario/<numero_tombo>/

Ex:

suap.ifce.edu.br/patrimonio/inventario/203075/

IMPORTANTE: Após o fim do procedimento de importação, apagar a tabela bens do schema migracaopatrim para que os passos possam ser repetidos com outros campi.


Após o lançamento dos dados patrimomiais dos veículos e de posse do número de tombamento, faz-se necessário registrar os veículos no módulo de Frota.

Os dados necessários são:

Patrimônio:
Modelo:
Cor:
Ano:
Placa:
Lotação: Capacidade máxima de ocupantes incluindo o motorista
Odômetro: Km rodados
Chassi:
Renavan:
Potência: Potência em hp
Cilindrada: Cilindrada em cc
Combustiveis: Gasolina, Gás Natural, Diesel, Álcool
Tanque: Capacidade (l)

O procedimento para cadastramento dos veículos está descrito em:

http://docs.dgti.ifce.edu.br/doku.php?id=sistemas:frota:manual:viatura

OS PASSOS ABAIXO NÃO NECESSÁRIOS NO MOMENTO, DEIXEI SÓ PRA DOCUMENTAÇÃO.

update migracaopatrim.bens set fornecedor_id = (select id from pessoa
                                                where upper(nome) = upper(fornecedor));


10.2) Incluir os fornecedores que não foram encontrados.

<code>
Create or Replace FUNCTION migracao_incluir_fornecedores() RETURNS VOID as
$BODY$  
DECLARE
  c_fornecedor_id integer;
  c_cnpjfornecedor text;
  c_nomefornecedor text;
  --cursor fornecedores
  cursor_fornecedores CURSOR FOR select distinct cnpjfornecedor from migracao.bens where fornecedor_id is null and cnpjfornecedor is not null and cnpjfornecedor <> ' ';
 
Begin

     OPEN cursor_fornecedores;
      --
      LOOP
        FETCH cursor_fornecedores INTO c_cnpjfornecedor, c_nomefornecedor, c_fornecedor_id;
        EXIT WHEN NOT FOUND;            

           select fornecedor
           into c_nomefornecedor
	   from migracao.bens
           where cnpjfornecedor = c_cnpjfornecedor
           LIMIT 1;

           BEGIN 

		   insert into pessoa(nome,  email, email_secundario, website, excluido, nome_usual, natureza_juridica, sistema_origem)
		   values(c_nomefornecedor, ' ',' ', ' ', 'False',' ',' ',' ');

		   SELECT MAX(id) 
		   INTO c_fornecedor_id
		   FROM pessoa;
	
		   insert into pessoa_juridica(pessoa_ptr_id, cnpj)
		   values(c_fornecedor_id, c_cnpjfornecedor);
          
           EXCEPTION WHEN unique_violation THEN
            -- Do nothing, and loop to try the UPDATE again.
           END;

      END LOOP;
      --
  CLOSE cursor_fornecedores;

  update migracao.bens set fornecedor_id = (select pessoa_ptr_id from pessoa_juridica 
                                                where cnpj = trim(cnpjfornecedor));


End; $BODY$
language 'plpgsql';

Roda o script:

select migracao_incluir_fornecedores();

Verifica se ainda ficou algum em branco:

select distinct cnpjfornecedor, fornecedor from migracao.bens where fornecedor_id is null and cnpjfornecedor is not null and cnpjfornecedor <> ' ';

6) Incluir predio (Orientar que coloque campus na planilha) Buscar UO do campus

Create or Replace FUNCTION migracao_incluir_predios(uo_id integer) RETURNS VOID as
$BODY$  
DECLARE
  c_predio_id integer;
  c_sala_id integer;
  c_desc_predio text;
  c_desc_sala text;
  --cursor predios
  cursor_predios CURSOR FOR select distinct predio from migracao.bens where b_predio_id is null and predio <> ' ';

  --cursor salas
  cursor_salas CURSOR FOR select distinct b_predio_id, sala from migracao.bens where b_sala_id is null and sala <> ' ' and b_predio_id is not null order by 1;
 
Begin

     OPEN cursor_predios;
      --
      LOOP
        FETCH cursor_predios INTO c_desc_predio;
        EXIT WHEN NOT FOUND;            

           INSERT INTO comum_predio(nome, uo_id, ativo ) VALUES (c_desc_predio, uo_id, True);
        
      END LOOP;
      --
    CLOSE cursor_predios;

    update migracao.bens set b_predio_id = (select id from comum_predio
                                                where nome = predio);

    OPEN cursor_salas;
      --
      LOOP
        FETCH cursor_salas INTO c_predio_id, c_desc_sala;
        EXIT WHEN NOT FOUND;            

           INSERT INTO comum_sala(nome, ativa, predio_id, agendavel) 
           VALUES (c_desc_sala, True, c_predio_id, True);
        
      END LOOP;
      --
    CLOSE cursor_salas;

  
    update migracao.bens set b_sala_id = (select id from comum_sala
                                                where  b_predio_id = predio_id and nome = sala);

End; $BODY$
language 'plpgsql';

Essa consulta deve retornar vazia. Se sim, prossiga com o tutorial.

select * from migracaopatrim.bens where b_predio_id is null or b_sala_id is null;

Voltar à página Principal do módulo de Frota

  • sistemas/frota/importacaoveiculos.txt
  • Última modificação: 2021/08/25 10:33
  • (edição externa)