Browsed by
Mês: julho 2015

Criando um novo módulo para o Odoo

Criando um novo módulo para o Odoo

Este vai ser um simples tutorial de como criar um módulo simples.
Problema:

  • Com o advento da NF-e 3.10 tem se a necessidade de adicionar um campo a mais na NF-e que é o campo “ind_final” , que indica se a transação está sendo efetuada com um consumidor final ou não.
  • Necessita-se criar no Odoo na tela de cotações um campo a mais que o usuário possa escolher se é consumidor final ou não.
  • É necessário criar este campo no banco de dados para salvar a informação cadastrada pelo usuário.

 Pré-requisitos para este tutorial:

  • Estar com o Odoo instalado e rodando via eclipse, caso não tenha configurado veja esta série de videos: Tutorial de instalação

 Termos utilizados:

  • View – qualquer tela, formulário, que aparece no sistema, ela é responsável pela organização dos campos.
  • Models – classe python que define novos campos, e contém métodos que podem ser executados.

Primeiro passo criar uma pasta que irá guardar nossos módulos, e depois criar uma pasta para o nosso novo módulo:

A pasta trust-exemplos poderá conter vários módulos, a pasta simple_module será efetivamente o módulo que iremos criar. O próximo passo é adicionar a pasta trust-exemplos ao nosso addons_path no arquivo de configuração para que o Odoo encontre nosso módulo.

Cada pasta deve ser separada por vírgula, pode ser tanto o caminho completo como relativo ao local do arquivo de configuração.
Próximo passo é criar a estrutura básica de um módulo:

Para este módulo você precisa criar apenas as pastas views e models, as outras servem para diferentes propósitos e serão explicadas em outros tutorias. Na pasta models iremos criar nossos modelos python, e as views conterão o xml que modifica a view de cotação.

Agora vamos começar pelo arquivo __openerp__.py, nele criamos as informações básicas sobre nosso módulo, o arquivo deve ficar como  a seguir:

As tags mais importantes são ‘depends’, onde dizemos quais módulos nosso módulo depende, e a tag ‘data’ onde adicionamos os arquivos xml utilizados por nosso módulo.

Agora vamos iniciar nossa aplicação para ver se o módulo vai aparecer. Acessamos o sistema e vamos para o menu “Configurações -> Atualizar lista de módulos” , se o mesmo não estiver aparecendo lembre-se de editar o usuário e habilitar “Procedimentos técnicos” para o mesmo, e após atualize a página.
Agora podemos pesquisar o mesmo em “Módulos locais”:

Já podemos instalar o mesmo, porém toda vez que efetuarmos uma modificação em algum arquivo xml de nosso módulo, para que o mesmo tenha as alterações aplicadas devemos acessar o módulo e clicar em atualizar:

Vamos agora escrever nosso modelo, mais informações sobre como escrever os módulos aqui: Odoo

sale_order.py

__init__.py

models/__init__.py

O arquivo sale_order.py deve estar com o código acima, nele criamos uma nova classe que herda de models.Model (python inheritance) e também adicionar a variável ‘_inherit’ (odoo inheritance) para dizer que queremos extender a classe sale.order.  Criamos então o campo ind_final do tipo selection com duas opções, mas informações sobre os tipos de campos no link acima.
Reiniciamos a aplicação e podemos atualizar novamente o módulo, após a atualização o campo já foi criado no banco de dados.

Por último devemos atualizar a view de cotações para adicionar o campo recém criado, mas antes disso necessitamos de algumas informações para modificar a view corretamente, basicamente necessitamos descobrir qual a view correta que devemos modificar, e o local onde o novo campo vai ser posicionado.

  • Habilitar o modo debug na aplicação -clique sobre o usuário no canto superior direito e “Sobre o Odoo” e habilite.
  • Vá para a tela de cotações e clique na opção “Editar form visão”
  •  Nela temos a informação do Id desta view que vamos precisar, e também informações sobre todas as views que herdam, bem como o xml associado a view. Vamos guardar este id: sale.view_order_form
  • Após voltamos a tela anterior e vamos tentar posicionar nosso novo campo após o campo cliente, para isso vamos inspecionar o nome do mesmo posicionando o mouse sobre o mesmo:

  • O campo possui o nome de partner_id, então vamos utilizar este id para posicionar nosso campo após este.

 Vamos a edição do xml:

views/sale_order.xml

Partes importantes do xml acima:

  • inherit_id: é o id da view que estamos herdando para modificar o comportamento da mesma, achamos esse id anteriormente inspecionando a view.
  • partner_id: é o campo que vamos usar como referencia para adicionar o nosso conteudo após ele: “position=’after'”
  • model: esse é o modelo, deve ser o mesmo modelo da classe criada no arquivo .py

Atualizamos novamente nosso módulo e ualáá, temos o nosso campo.

O código desde tutorial está em: https://github.com/Trust-Code/trust-exemplos