TRADUCCIONES DE ODOO
página
Introducción
Ahora que tenemos un entorno de desarrollo y sabemos como administrar instancias y bases de datos
del servidor Odoo, puedes aprender como crear Módulos adicionales de Odoo.
Creando e instalando un nuevo Módulo Adicional
Vamos a crear un nuevo módulo, hazlo disponible en nuestra instancia de Odoo e instalalo.
Preparandose
Necesitaremos una instancia de Odoo lista para usar. En el capitulo 1 Instalando el
entorno de Desarrollo de Odoo, deberia de estar disponible en ~/odoo-dev/odoo. Para
fines explicativos asumiremos esta localización para Odoo, Aunque cualquier otra
localización de tu preferencia puede ser usada.
También necesitaremos una localizacion para nuestro Modulo Odoo para esto usaremos
un directorio local-addons junto al directorio odoo en ~/odoo-dev/odoo
Buscaremos la dirección de nuestros addons
/opt/odoo/odoo/addons
Como Hacerlo
Los siguientes pasos crearan e instalaran un nuevo módulo adicional:
1. Cambiar el directorio de trabajo en el cual trabajaremos y crear el directorio
adicional donde nuestro módulo personalizado será colocado
sudo /opt/odoo/odoo/odoo-bin –addons-path=/opt/odoo/odoo/local-addons/
Nota: Esto se logro agregando en el archivo de configuracion la siguiente ruta
/prueba/addons esta ruta se agregó al archivo que se encuentra en la siguiente dirección
/etc/odoo/[Link] y despues solo se reinicio el sistema con sudo service odoo restart
Como Funciona
Un modulo Odoo es un directorio que contiene archivos de código y otros
activos.
El archivo __manifest__.py es el archivo manifiesto del modulo, contiene un
diccionario Python con información sobre el modulo, los modulos de los que
depende y los archivos de datos que cargara.
Como Funciona
El contenido restante es un diccionario regular de Python, con claves y
valores. El manifest de ejemplo que utilizamos contiene las claves más
relevantes.
Preparándose
Se espera que tengamos un directorio con un modulo adicional con solo los archivos __init__.py y
__manifest__.py, esto lo tenemos en el siguiente directorio prueba/addons/modulo
Como hacerlo
1.- Para crear el esqueleto basico para el modulo adicional, realiza los siguientes pasos:
cd prueba/addons
mkdir models
touch models/__init__.py
mkdir controllers
touch controllers/__init__.py
mkdir views
mkdir security
mkdir data
mkdir demo
mkdir i18n
mkdir -p static/description
2.-Edite el archivo superior __init__.py del módulo para que se cargue el código en los subdirectorios:
from . Import models
from . Import controllers
Como funciona
Para proporcionar algo de contexto, un modulo complemento de Odoo puede tener tres tipor de
archivos
El codigo Python es cargado por el archivo __init__.py
Agregando Opciones de Menú y Vistas (Pag. 106)
Como Funciona (Pag. 108)
En el nivel bajo, la interfaz de usuario se define mediante registros almacenados en modelos especiales
Los primeros dos pasos crean un archivo XML vacio para definir los registros que se cargarán y luego
agregarlos a la lista de archivos de datos del módulo que se instalarán
Agregando Accesos de Seguridad (Pag. 110)
Definiendo El Modelo Representación y Orden (Pag. 116)
Como Hacerlo
Editaremos para agregar un nuevo atributo de nivel de clase después de _name
1.- para agregar un título amigable al modelo, agregue lo siguiente
_description = 'Library Book'
2.- Para usar el campo short_name como el registro que representara al modelo, agregue lo siguiente:
_rec_name = 'short_name'
short_name = [Link]('Short Title', required=True)
a implementación predeterminada de name_get () usa el atributo _rec_name para encontrar qué campo
contiene los datos; que se debe utilizar para generar el nombre para mostrar. Para representaciones más
sofisticadas, podemos anular su lógica. El método debe devolver una lista de tuplas con dos elementos:
el ID del registro y la representación de la cadena Unicode para el registro.
Los registros modelo tienen una representación utilizada cuando se hace referencia a ellos desde otros
registros. Por ejemplo, un campo user_id con el valor 1 representa al usuario administrador. Cuando se
muestra en una vista de formulario, Odoo mostrará el nombre de usuario en lugar de la ID de la base de
datos. Por defecto, se usa el campo de nombre. De hecho, ese es el valor predeterminado para el
atributo _rec_name, y es por eso que es conveniente tener un campo de nombre en nuestros modelos.
Como Funciona (Pag. 117)
El primer paso agregamos una descripción más amigable al titulo del modelo. Esto no es obligatorio,
pero puede ser usado por algunos addons es usado por la función de seguimiento en el modulo
adicional mail por la notificacacion de texto cuando un campo nuevo es creado
Agregando datos a los campos de un modelo (Pag. 118)
Los modelos estan diseñados para almacenar datos y estos datos se estructuran en campos. Aquí
aprenderemos sobre los diversos tipos de datos que pueden ser almacenados en campos, y como
agregarlos a un modelo
2.- Todos estos campos soportan algunos atributos comunes. Como ejemplo podemos editar el campo
anterior pages agregandole:
Aquí hay una explicación de los atributos de campo utilizados.
string es el titulo del campo, utilizado en la vista del usuario, es opcional; si no se establece una
etiqueta, se derivara del nombre del campo agregandolo como el titulo y reemplazando los guiones
bajos por espacios.
Size solo aplica para los campos Char y es el número maximo de caracteres permitido. En general se
aconseja no usarlo.
translate cuando se establece en True, hace el campo traducible puede contener un valor diferente
dependiendo del lenguaje de la interfaz de usuario.
default es el valor por default puede también ser una función que es usada para calcular el valor. Por
ejemplo, default=_compute_default donde _compute_default es un método definido en el modelo
antes de la definición del campo.
help Es un texto de explicación que se muestra como un tooltips en la interfaz de usuario.
groups hace al campo disponible solo para algunos grupos de seguridad.
states permite que la interfaz de usuario establezca dinamicamente el valor de los atributos readonly,
required e invisible dependiendo del valor del campo state por lo tanto requiere que exista un campo
state y se use en la vista de formulario (incluso si es invisible) el nombre del atributo state está
codificado en odoo y no se puede cambiar.
Página 132
Agregando Herencia a un Modelo.
Las Herencias se representan utilizando las relaciones del modelo consigo mismo, cada registro tiene
un registro padre en el mismo modelo y también tienen muchos registros hijos. Esto se puede lograr
simplemente usando relaciones de muchos-a-uno many-to-one entre el modelo y el mismo
Como Hacerlo
Agregaremos un uevo archivo Python, models/library_book_categ.py, como se muestra a
continuación.
1. Para tener el nuevo archivo Python cargado, agregaremos esta linea a models/__init__.py
from . Import library_book_categ
2. Para crear el modelo Categoria de Libro con la relación padre e hijo, crea el archivo
models/library_book_categ.py con lo siguiente.
From odoo import
Añadiendo Validaciones de Restricciones a un Modelo (Pag. 135)
Los Modelos pueden tener validaciones que les impida entrar en condiciones no deseadas.
Dos diferentes tipos de restricciones puden ser usadas.
Las que comprueban a nivel de base de datos
Las que comprueban a nivel de servidor
Las restricciones a nivel de base de datos estan limitadas a las restricciones soportadas por PostgreSQL.
La mas comunmente usadas son las restricciones UNIQUE, pero las restricciones de verificación y
exclusion pueden ser usadas. Si estas no son suficientes para nuestras necesidades, podemos usar
restricciones a nivel del servidor de Odoo escritas en codigo Python.
Reusarremos el modulo adicional modulo del capitulo 4, Creación de un modulo adicional en Odoo
Esperemos que contenga al menos lo siguiente.
Editaremos la clase LibraryBook en el archivo de Python que se encuentra en
model/library_book_categ.py
1. Para crear una restriccion en la base de datos, agregaremos un atributo al modelo.
_sql_constraints = [('name_uniq', 'UNIQUE (name)', 'El Titulo del libro debe ser unico’)]
2. Para crear la restriccion en el código de Python, agregaremos un metodo al modelo.
Despues de realizat estos cambios en el archivo del codigo, actualizar el modulo y reiniciar el servidor
es necesario.
El primer paso tiene una restriccion de base de datos creada en la tabla del modelo. Se aplica a nivel de
base de datos. El atributo del modelo _sql_constraints acepta una lista de restricciones para crear. Cada
restriccion esta definida por una tupla de tres elementos; que se enlistan a continuación
Un sufijo para usar como identificador de la restriccion. En nuestro ejemplo usamos
name_uniq, y el nombre de la restriccion resultante es library_book_name_uniq
El SQL que se usara en la instrucción PostgreSQL para alterar o crear la tabla de base de datos.
(UNIQUE)
Un mensaje para reportar al usuario cuando la restriccion es violada.
Como se menciono anteriormente se pueden usar otras restricciones de la tabla de la base de datos.
Tenga en cuenta que las restricciones de la coumna tales como NOT NULL , no se pueden agregar de
esta manera.
En el segundon paso agregamos un metodo para realizar la validacion en el codigo Python. Esta
decorado con @[Link] s
Agregando Campos Computados a un Modelo
A veces, necesitamos tener un campo que tenga un valor calculado o derivado de otros campos en el
mismo registro o en registros relacionados. Un ejemplo típico es la cantidad total que se calcula
multiplicando un precio unitario por una cantidad, En los modelos Odoo, esto se puede lograr usando
compos computados.
Para mostrar como funcionan los campos calculados, agregaremos uno al modelo Library Book para
calcular los días desde la fecha de lanzamiento del libro.
También es posible hacer que los campos computados se puedan editar u buscar. También
implementaremos esto en nuestro ejemplo.
Preparandonos
Reusaremos el modulo adicional mi_modulo del capitulo 4 Creando un Modulo Adicional en Odoo.
Como Hacerlo
Editaremos el código del archivo models/library_book.py para agregar un nuevo campo y el método
que apoya su lógica.
1.- Comience agregando el nuevo campo a el modelo Library Books: