viernes, 28 de octubre de 2016

Colores y sus significados en una construcción

paredcolor


La elección del mejor color para nuestro hogar.
Observa las paredes de tu casa atentamente y analiza tus emociones: ¿te gusta el color y la textura? ¿Te sientes a gusto?, etc. El carácter de un espacio viene en gran parte determinado por el color y la estructura de sus paredes, reflejando a su vez la personalidad y los sentimientos de aquellos que habitan el lugar. En este sentido, los colores influencian enormemente el bienestar de la persona tanto a nivel psíquico como físico, por ese motivo, a la hora de decidir el color que va a decorar las paredes de nuestras viviendas deberíamos considerar los siguientes aspectos:
  • De que manera nos va a condicionar el color.
  • Finalidad del espacio a pintar.
  • Distribución de la luz artificial o natural.
  • Con qué elementos decorativos hay que contar.
  • Qué tipo de soporte tenemos.
  • Toxicidad de las pinturas que vamos a utilizar.
A nivel técnico, la pintura decorativa está formada principalmente de pigmentos y del ligante apropiado para que esos queden fijados en el soporte, si queremos mantener nuestra salud en forma, sin duda alguna los vamos a escoger naturales. La base fundamental radica en la materia prima que vamos a usar: la calidad del soporte que vamos a pintar y la de la pintura que vamos a aplicar. A ser posible, el revoque adecuado para obtener un clima ideal debería ser de cal, barro, yeso natural, o cualquier otro tipo que no contenga plastificantes. Por otra parte, pintar con pigmentos naturales no es lo mismo que hacerlo con sintéticos, la calidad y el efecto del color pueden variar de una forma increíble, el pigmento natural contiene en sí varias tonalidades mientras que el elaborado químicamente se compone de una tonalidad única siendo por lo tanto más monótono. Sólo a modo de ejemplo, se ha comprobado que una pared de adobe pintada con pintura a base de arcilla y pigmentos naturales, reduce la contaminación electromagnética, absorbe sustancias tóxicas y regula la humedad, creando consecuentemente un ambiente perfecto para la salud.
A partir de este punto es cuando debemos empezar a dejar volar la imaginación y a escuchar nuestros sentimientos. Quizás antes de decidir, unas notas orientativas de cuales son las connotaciones de cada color, claro está no personalizadas y basadas en varios estudios:
Amarillocolor ligero, intelectual, alegre, tranquilizante, cálido, luminoso
Naranjacálido, vital, alegre, estimulante, positivo
Rojoestimulante, activo, vital, fuerte, inquietante
Verdetranquilizante esperanzador, natural, seguro, pasivo, equilibrado por ser el resultado de la unión de dos polos azul y amarillo, por ese motivo es también un color ideal para tomar decisiones
Azulfrío, serio, tranquilo, amplio, relajante, espiritual, reservado, pacífico
Púrpurariguroso, noble, soberbio, digno, impone poder
Violetapesado, soledad, melancolía, incertidumbre, volubilidad. No es aconsejable su uso en espacios grandes por sus posibles efectos negativos
Blancoluz, claridad, apertura, limpieza, higiene, también se considera fatigoso y poco confortable
Negrosin lugar a dudas símbolo de tristeza, también indica aislamiento, carácter reservado, opresión y negación
Grises el color de la monotonía, desesperanza, desgana, aburrimiento, melancolía yGris amenazador
Marrón:color considerado como maternal, estabilizador, cálido, sólido, enérgico

Teniendo en cuenta esas características, por ejemplo para pintar una habitación infantil, escogeríamos tonos cálidos: rojizos, amarillos, naranjas, etc. colores alegres y estimulantes; también serían adecuados para un comedor o cocina. Sin embargo, para salas de reuniones, dormitorios u otros sitios con una finalidad parecida, son aconsejables los tonos fríos como los azules.
Como ya se apuntaba al principio, la luz juega un papel muy importante. Un espacio con ventanas pequeñas, con orientación al norte, con poca luz pide tonalidades cálidas. Los colores fríos mejor reservarlos para habitaciones grandes, orientadas al sur y con mucha luz .
Tampoco debemos olvidar la armonía, proporciones del espacio y color: en habitaciones con techos muy altos, el techo se puede pintar con tonalidades oscuras a fin de dar una sensación de más calidez y proximidad. Si se quiere obtener el efecto contrario, o sea engrandecer el espacio, se puede optar por un suelo oscuro y el resto en colores claros, teniendo siempre en cuenta los aspectos mencionados sobre la iluminación.
Los contrastes de colores pueden ser muy interesantes, no obstante hay que evitar que las combinaciones no sean superiores a tres colores ya que el ambiente podría resultar “pesado”.
Existe una gran variedad de técnicas decorativas que van variando según modas y tendencias, consecuencia de la situación social de cada momento. Actualmente, estamos viviendo un resurgir del color y de las formas como necesidad de abandonar la monotonía que dominó durante las últimas décadas, en las que la sociedad se concentró más en la materia que en la mente. De las paredes lisas, blancas, “limpias y prácticas” hemos pasado al renacimiento de técnicas tales como el estuco, la veladura, aguada, acuarelas, etc. todas ellas basada en la combinación de colores o tonalidades aplicadas de forma distinta (llana veneciana, esponja, brocha, trapo, etc.). Concretamente la técnica de la acuarela, muy utilizada por los seguidores de Steiner, tiene un sentido mucho más profundo debido a que la propia estructura estimula la vista constantemente y consigue una vitalidad interior muy positiva. La experiencia ha demostrado que en empresas dónde se ha utilizado ese método, ha mejorado la calidad y el ambiente de trabajo.
Para finalizar, quisiera que no se olvidara que todos lo que gira en torno a la vivienda es la proyección de nuestro propio ser, por lo que no dejemos de escucharnos.

Fuente:
http://www.ecohabitar.org/el-placer-de-pintar/

Pintar una pared naturalmente

Pigmentos Naturales
Pigmentos Naturales
Un principal beneficio de construir una casa con adobe es la porosidad de este material, porque se contrae y expande, lo cual le da una mejor térmica al ambiente. De esta manera, se libera la humedad de la casa y las paredes, al mismo tiempo que se mantiene fresco los días de calor y viceversa.
Por eso, es importante que las pinturas exteriores también sean porosas, en lugar de sintéticas, para evitar impermeabilizar la pared y desperdiciar este atributo. Para lograr esto, la pintura tiene que ser lo más natural posible.
Sin embargo, no deben dejar de repeler el agua, de manera que puedan ser un factor más de protección a la casa. Por eso, los materiales y el método de preparación son iguales al revoque con la diferencia de que, en el caso de la pintura, los elementos son más refinados.

Dale tu color

A muchos les gusta dejar el color de la misma tierra, sin embargo, podés darle el que vos quieras, al agregarle pigmentos. Tené en cuenta que los que son minerales no se destiñen con el paso del tiempo, lo que sí puede suceder con los pigmentos vegetales.
Cualquiera sea que elijas, ambos son biodegradables, por lo cual se pueden reintegrar al medio ambiente sin contaminarlo.
Estos primero se diluyen en agua y después se agregan a la mezcla de la pintura. En caso de que te decidas por los pigmentos minerales, la disolución se debe dar de a poco, dado el caso que sus tonalidades son muy imponentes y es mejor ir regulando los resultados.
Desde ya, el color de la arcilla determina el de la pintura. Podés usar una bien clara en tu mezcla para que tome mejor el color que le quieras dar.
Es recomendable dejar un excedente porque, en caso de que sea necesario usar más, dispongas del mismo color para replicarlo. Para guardarlo, se puede pintar un plástico, secarlo al sol y dejarlo en una caja. Para reutilizarlo, se moja y obtiene de vuelta la pintura.
Aplicala con rodillos, pinceles o las manos. ¡Y asegurate antes de que la pared esté bien seca! Fijate acá cómo protegerlas de la lluvia o las temperaturas extremas.

Fuente:
https://espiralista.wordpress.com/tag/construccion-con-barro/

Pintar una pared naturalmente

Pigmentos Naturales
Pigmentos Naturales
Un principal beneficio de construir una casa con adobe es la porosidad de este material, porque se contrae y expande, lo cual le da una mejor térmica al ambiente. De esta manera, se libera la humedad de la casa y las paredes, al mismo tiempo que se mantiene fresco los días de calor y viceversa.
Por eso, es importante que las pinturas exteriores también sean porosas, en lugar de sintéticas, para evitar impermeabilizar la pared y desperdiciar este atributo. Para lograr esto, la pintura tiene que ser lo más natural posible.
Sin embargo, no deben dejar de repeler el agua, de manera que puedan ser un factor más de protección a la casa. Por eso, los materiales y el método de preparación son iguales al revoque con la diferencia de que, en el caso de la pintura, los elementos son más refinados.

Dale tu color

A muchos les gusta dejar el color de la misma tierra, sin embargo, podés darle el que vos quieras, al agregarle pigmentos. Tené en cuenta que los que son minerales no se destiñen con el paso del tiempo, lo que sí puede suceder con los pigmentos vegetales.
Cualquiera sea que elijas, ambos son biodegradables, por lo cual se pueden reintegrar al medio ambiente sin contaminarlo.
Estos primero se diluyen en agua y después se agregan a la mezcla de la pintura. En caso de que te decidas por los pigmentos minerales, la disolución se debe dar de a poco, dado el caso que sus tonalidades son muy imponentes y es mejor ir regulando los resultados.
Desde ya, el color de la arcilla determina el de la pintura. Podés usar una bien clara en tu mezcla para que tome mejor el color que le quieras dar.
Es recomendable dejar un excedente porque, en caso de que sea necesario usar más, dispongas del mismo color para replicarlo. Para guardarlo, se puede pintar un plástico, secarlo al sol y dejarlo en una caja. Para reutilizarlo, se moja y obtiene de vuelta la pintura.
Aplicala con rodillos, pinceles o las manos. ¡Y asegurate antes de que la pared esté bien seca! Fijate acá cómo protegerlas de la lluvia o las temperaturas extremas.

Fuente:
https://espiralista.wordpress.com/tag/construccion-con-barro/

Pintar una pared naturalmente

Pigmentos Naturales
Pigmentos Naturales
Un principal beneficio de construir una casa con adobe es la porosidad de este material, porque se contrae y expande, lo cual le da una mejor térmica al ambiente. De esta manera, se libera la humedad de la casa y las paredes, al mismo tiempo que se mantiene fresco los días de calor y viceversa.
Por eso, es importante que las pinturas exteriores también sean porosas, en lugar de sintéticas, para evitar impermeabilizar la pared y desperdiciar este atributo. Para lograr esto, la pintura tiene que ser lo más natural posible.
Sin embargo, no deben dejar de repeler el agua, de manera que puedan ser un factor más de protección a la casa. Por eso, los materiales y el método de preparación son iguales al revoque con la diferencia de que, en el caso de la pintura, los elementos son más refinados.

Dale tu color

A muchos les gusta dejar el color de la misma tierra, sin embargo, podés darle el que vos quieras, al agregarle pigmentos. Tené en cuenta que los que son minerales no se destiñen con el paso del tiempo, lo que sí puede suceder con los pigmentos vegetales.
Cualquiera sea que elijas, ambos son biodegradables, por lo cual se pueden reintegrar al medio ambiente sin contaminarlo.
Estos primero se diluyen en agua y después se agregan a la mezcla de la pintura. En caso de que te decidas por los pigmentos minerales, la disolución se debe dar de a poco, dado el caso que sus tonalidades son muy imponentes y es mejor ir regulando los resultados.
Desde ya, el color de la arcilla determina el de la pintura. Podés usar una bien clara en tu mezcla para que tome mejor el color que le quieras dar.
Es recomendable dejar un excedente porque, en caso de que sea necesario usar más, dispongas del mismo color para replicarlo. Para guardarlo, se puede pintar un plástico, secarlo al sol y dejarlo en una caja. Para reutilizarlo, se moja y obtiene de vuelta la pintura.
Aplicala con rodillos, pinceles o las manos. ¡Y asegurate antes de que la pared esté bien seca! Fijate acá cómo protegerlas de la lluvia o las temperaturas extremas.

Fuente:
https://espiralista.wordpress.com/tag/construccion-con-barro/

lunes, 17 de octubre de 2016

Devolver nombre en odoo

Es muy común que tengamos un objeto persona, trabajador, etc, relacionado a un ser humano, el cual tiene (normalmente) dos nombres y dos apellidos. En alguno casos, definimos solo un campo nombres y otro apellidos, nunca se recomienda un solo campo para almacenar todo eso.
En odoo, al recuperar el un registro de un objeto, por ejemplo, al crear un proyecto asignarle un(os) activista(s), el campo Many2one nos traería por defecto el valor del campo 'name', y en caso de no tener ese campo usamos el atributo _rec_name para definir otro campo, por ejemplo: 'nombres'.
Pero esto trae un inconveniente, que al mostrar en la lista desplegable, no nos basta con los nombres solamente; necesitamos los nombres y los apellidos. Para solucionar eso, definimos el método name_get
Ej:
class Activista(models.Model):
    """Registro de Activista de Bachaco-ve"""
    _name = 'activista'
    _rec_name = 'nombres'
    nombres = fields.Char(size=30,required=True, help='Nombre del Activista')
    apellidos = fields.Char(size=30,required=True, help='Apellidos del Activista')
    cedula = fields.Char('Cédula',size=8,required=True, help='Cédula del Activista')
    #...

def name_get(self, cr, uid, ids, context=None):
    res = []
    activistas = self.browse(cr, uid, ids, context)
    for activista in activistas:
        res.append((activista.id, activista.nombres + ' ' + activista.apellidos))
    return res
En este ejemplo observamos cómo definimos el método name_get con los argumentos necesarios. Luego declaramos una lista vacía, el cual retornará un par de valores (id, valor). Seguidamente instanciamos un objeto 'activistas' el cual contiene todos los registros. Luego iteramos sobre este objeto en un nuevo elemento llamado 'activista'. La acción a ejecutar será añadir a las lista 'res' dos elementos: el id del activista y la concatenación del campo nombres con apellidos incorporando un espacio en blanco entre ambos valores. Finalmente se retorna la lista res.
Entonces veremos que al usar este objeto en una relación Many2one obtendremos el nombre completo. Lo que hemos hecho es montarnos sobre el atributo _rec_name. Todas las propiedas aplicables a ese atributo, ahora son reemplazadas por nuestra función. Nota: fíjense cómo al revisar un elemento en la vista formulario, nos muestra el nombre completo.
Ejemplo de código AQUI
Nota: es importante destacar que el campo definido en en el atributo _rec_name seguirá siendo utilizado para las búsquedas tanto en el search de la vista tree como con los campos Many2one dentro de una vista form

Fuente:
https://gist.github.com/vijoin/b370e68a06d89af5b354

Devolver nombre en odoo

Es muy común que tengamos un objeto persona, trabajador, etc, relacionado a un ser humano, el cual tiene (normalmente) dos nombres y dos apellidos. En alguno casos, definimos solo un campo nombres y otro apellidos, nunca se recomienda un solo campo para almacenar todo eso.
En odoo, al recuperar el un registro de un objeto, por ejemplo, al crear un proyecto asignarle un(os) activista(s), el campo Many2one nos traería por defecto el valor del campo 'name', y en caso de no tener ese campo usamos el atributo _rec_name para definir otro campo, por ejemplo: 'nombres'.
Pero esto trae un inconveniente, que al mostrar en la lista desplegable, no nos basta con los nombres solamente; necesitamos los nombres y los apellidos. Para solucionar eso, definimos el método name_get
Ej:
class Activista(models.Model):
    """Registro de Activista de Bachaco-ve"""
    _name = 'activista'
    _rec_name = 'nombres'
    nombres = fields.Char(size=30,required=True, help='Nombre del Activista')
    apellidos = fields.Char(size=30,required=True, help='Apellidos del Activista')
    cedula = fields.Char('Cédula',size=8,required=True, help='Cédula del Activista')
    #...

def name_get(self, cr, uid, ids, context=None):
    res = []
    activistas = self.browse(cr, uid, ids, context)
    for activista in activistas:
        res.append((activista.id, activista.nombres + ' ' + activista.apellidos))
    return res
En este ejemplo observamos cómo definimos el método name_get con los argumentos necesarios. Luego declaramos una lista vacía, el cual retornará un par de valores (id, valor). Seguidamente instanciamos un objeto 'activistas' el cual contiene todos los registros. Luego iteramos sobre este objeto en un nuevo elemento llamado 'activista'. La acción a ejecutar será añadir a las lista 'res' dos elementos: el id del activista y la concatenación del campo nombres con apellidos incorporando un espacio en blanco entre ambos valores. Finalmente se retorna la lista res.
Entonces veremos que al usar este objeto en una relación Many2one obtendremos el nombre completo. Lo que hemos hecho es montarnos sobre el atributo _rec_name. Todas las propiedas aplicables a ese atributo, ahora son reemplazadas por nuestra función. Nota: fíjense cómo al revisar un elemento en la vista formulario, nos muestra el nombre completo.
Ejemplo de código AQUI
Nota: es importante destacar que el campo definido en en el atributo _rec_name seguirá siendo utilizado para las búsquedas tanto en el search de la vista tree como con los campos Many2one dentro de una vista form

Fuente:
https://gist.github.com/vijoin/b370e68a06d89af5b354

sábado, 15 de octubre de 2016

Crear un modulo en odoo

Hola amigo en esta publicación les explicaré como crear módulos en Odoo v8, si bien ya he hecho una publicación al respecto: CREACION DE MODULOS EN ODOO ERP V8 – PARTE I, lo cierto es que en esta anterior publicación explico de forma rápida la creación de módulos, quizás para usuarios que vienen de la v7 de Odoo les sea mas fácil entender, pero para aquellos que recién se inician en Odoo a partir de la v8, encontrarán ciertas dificultades, es por eso que hago esta nueva publicación.
En ésta publicación les explicaré como desarrollar un módulo en Odoo v8 usando su propio framework OPENOBJECT.
Suponemos que tiene instalado Odoo v8 en Ubuntu Server o Desktop recomiendo la Version 14 o alguna otra distribución de GNU/Linux.
Vamos a crear un modulo llamado bibliotecaque nos permitirá registrar el titulo del libro, fecha  de registro y una descripción, tal como muestra la figura siguiente:
mod_bibliot

1. Nos dirigimos a la siguiente ruta.
1
cd /opt/odoo/server/addons/
2. Creamos  una carpeta que para nuestro caso será biblioteca e ingresamos en dicha carpeta
1
2
mkdir biblioteca
cd biblioteca
Si no tenemos permiso para crear dicha carpeta en addons lo debemos de hacer con el usuario root y darle los permisos adecuados.
3. Creamos los archivo __init__.py, __openerp__.pybiblioteca.py y biblioteca_view.xml
1
2
3
4
touch __init__.py
touch __openerp__.py
touch biblioteca.py
touch biblioteca_view.xml
__init__.py: Aqui importaremos todos los archivos y directorios que contienen codigo python, éste archivo hace que Odoo reconozca al directorio o capeta biblioteca como un módulo.
__openerp__.py: Contiene un diccionario en Python para agregar las descripciones del módulo, como autor, versión, etc.
biblioteca.py: Aquí escribiremos el código Python que permitirá agregar o modificar las funcionalidades de Odoo, este archivo será importado en __init__.py, como veremos mas abajo.
biblioteca_view.xml: Aquí vamos agregar los codigos XML que permitirá construir la vista del módulo en Odoo, el nombre debe de terminar en _view.xml por convención.
4. Con tu editor favorito editamos el archivo __init__.py para este ejemplo usaré el editor vim o podemos usar Sublime Text.
1
vim __init__.py
Agregamos lo siguiente y guardamos los cambios
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (c) 2015 SC. (http://salazarcarlos.com).
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import biblioteca
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
La primera linea se recomienda agregar, para que python trabaje en utf-8, se agrega a todo archivo.py
Ojo las demás lineas que inician con # son comentarios para nuestro caso, desde la linea 2 hasta la 27 expresan los términos de la licencia de software libre: GNU AFFERO GENERAL PUBLIC LICENSE
La linea 29: Aqui importamos el archivo  biblioteca.py  sin la extension .py, este archivo contiene la lógica de nuestro modulo hecho en python.
5. Editamos el archivo __openerp__.py
1
vim __openerp__.py
Agregamos los siguiente y guardamos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- coding: utf-8 -*-
##############################################################################
#
#    OpenERP, Open Source Management Solution
#    Copyright (C) 2015 S&C (<http://salazarcarlos.com>).
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
    'name' : 'Biblioteca',
    'version' : '1.0',
    'author' : 'Ing. Salazar C. J.',
    'summary' : 'Modulo de odoo para demo',
    'description' : 'modulo varios demo',
    'depends' : [
            'base',
            ],
    'data' : [             
            'biblioteca_view.xml',
                ],
    'installable' : True,
    'aplication' : True,   
}
Este archivo (__openerp__.py)  como habíamos dicho contiene un diccionario en Python para agregar las descripciones del módulo, como autor, versión, etc.
Linea 29:  depends,  es una lista donde se agrega los módulos que debería estar instalados (Módulos dependencia) para que nuestro modulo pueda ser instalado en Odoo.
 Linea 32: data, es una lista donde agregaremos todas las vistas de nuestro módulo, es decir los archivos.xml y archivos.csv.
 Linea 35 y 35: Estos siempre toman estos valores.
6. Editamos el archivo biblioteca.py y agregamos el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# -*- coding: utf-8 -*-
##############################################################################
#
#    OpenERP, Open Source Management Solution
#    Copyright (C) 2015 S&C (<http://salazarcarlos.com>).
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import models, fields, api, _
class biblioteca_libro(models.Model):
    _name = 'biblioteca.libro'
    name = fields.Char(string='Titulo', required=True,)
    description = fields.Text('Observacion')
    date = fields.Date(string='Fecha de registro')
 Linea 23: Importamos las clases propias de Odoo.
 Linea 25: Definimos nuestro modelo o clase biblioteca_libro que hereda de la clase models.Model, toda clase en Odoo finalmente representa un tabla en la base de datos POSTGRESQL, que lo veremos luego de instalar el módulo.
 Linea 26: Toda clase definida en el framework de odoo, debe tener un atributo _name este atributo por lo general es el mismo nombre de la clase o modelo pero se reemplaza el (_) por (.), con este nombre se creará una tabla en POSTGRESQL.
 Linea 28-30: Se agregan las columnas (campos) que tendrá nuestra tabla o modelo (biblioteca_libro), a cada campo o fields se le define el tipo de dato que almacenará, mas información aquí.
7. Editamos el archivo libro_view.xml que permitirá construir la vista formulario y vista lista o árbol de las clase biblioteca_libro, agregando lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <menuitem id="menu_root_biblioteca"  name="Biblioteca" sequence="30" />
        <menuitem id="menu_root_biblioteca_libro_view"  name="Libros" parent="menu_root_biblioteca"/>
        <record model="ir.actions.act_window" id="listar_libro_action">
            <field name="name">Biblioteca</field>
            <field name="res_model">biblioteca.libro</field>
            <field name="view_mode">tree,form</field>
        </record>
        <menuitem id="menu_root_biblioteca_listar_libro"  name="Listar libros" parent="menu_root_biblioteca_libro_view" action="listar_libro_action" />
        <record model="ir.ui.view" id="view_biblioteca_libro_tree">
            <field name="name">view.biblioteca.libro.tree</field>
            <field name="model">biblioteca.libro</field>
            <field name="arch" type="xml">
                <tree string="Idea list">
                    <field name="name"/>
                    <field name="date"/>
                </tree>
            </field>
        </record>
        <record model="ir.ui.view" id="view_biblioteca_libro_form">
            <field name='name'>view.biblioteca.libro.form</field>
            <field name="model">biblioteca.libro</field>
            <field name="arch" type="xml">
                <form string="libro form" version="7.0">
                    <sheet>
                        <group colspan="2" col="2">
                            <group>                              
                                <field name="name"/>
                            </group>
                            <group>
                                <field name="date"/>
                            </group>
                        </group>
                        <notebook colspan="4">
                            <page string="Description">
                                <field name="description"/>
                            </page>
                        </notebook>
                    </sheet>
                </form>
            </field>
        </record>
    </data>
</openerp>

Explicando un poco el contenido del XML, en ODOO existe varios tipos de vista: Vista lista(tree), Vista formulario(form), etc. para nuestro caso hemos construido solo las dos tipos de vista form y tree.
Linea 2 y 3: Explicarles que todo el contenido de la vista en Odoo siempre van a ir delimitados por la etiqueta <openerp> <data> en ese orden respectivamente.
Linea 5: Definimos el nombre del menu padre o root para el modulo biblioteca, este ira en la parte superior de Odoo, para nuestro caso es el menu Biblioteca,  los menús en Odoo se definen con la etiqueta <menuitem>, esta etiqueta tiene atributos como por ejemplo:
id: Es único para cada menú,
name: Es el label o nombre que veremos en el menu.
parent: Este atributo permite colocar un menu dentro de otro, con solo colocar el id de menu padre.
action: Este atributo me indica la acción a realizar si hago clic en dicho menu, que por lo general es mostrar la vista form o tree de nuestro clase definida en nuestro módulo.
menuroot
Linea 7: Aquí definimos otro menu que es un submenu del menu definido en la linea 5, para nuestro caso es el menu Libros.
menus
Linea 15: Definimos otro menu que es un submenu del menu definido en la linea 7, este menu tiene el atributo action cuyo valor es el id de la acción definida en la linea 9, para nuestro caso es el menuListar libros.
menus
Las etiquetas record son registros que se insertan en la base de datos.
Linea 9: Aquí definimos una acción que nos mostrará el listado de libros al hacer click en el menu Listar libros, toda acción se define con la etiqueta <record model=”ir.actions.act_window” id=”listar_libro_action”>, ésta etiqueta tiene varios atributos:
 id: Es un identicador único para acción definida
model: Indica que vamos a insertar este registro en la tabla ir.actions.act_window con los valores de los campos: id, name, res_model y view_mode
Para insertar los valores de los campos (linea 10-12) de dicho registro se usa la etiqueta <field>tenemos los atributos para field:
name: Es un nombre que se le asigna a cada acción.
res_model: Indica a que modelo o clase pertenece esta acción.
view_mode: Indica que tipo de vista mostrará si se llama esta acción, para nuestro caso llama primero a la vista tree, que la definiremos a continuación.
Vista tree:

TREE
Fila 18-27: Aquí definimos nuestra vista tree, la vista tree o árbol, también se define con la etiqueta  <record model=”ir.ui.view” id=”view_biblioteca_libro_tree”>  y estos son sus atributos:
id: Es un identificador único para cada vista tree,  debe de empezar siempre en view y terminar en tree por convencion.
model: Indica que vamos a insertar este registro en la tabla ir.ui.view con los valores de los campos (etiqueta <field>): id, name, model y arch.
Para insertar los valores de los campos (linea 19-21) de dicho registro se usa la etiqueta <field>, tenemos los atributos para field:
name: Es un nombre que se le asigna a la vista tree.
model: Indica a que modelo o clase esta asociada esta vista tree (valor de _name: biblioteca.libro en la clase biblioteca_libro)
arch: Linea 21-26, indica que es un archivo de tipo xml y que tiene como contenido todo lo que está dentro de la etiqueta <tree>, dentro de la etiqueta <tree> vamos a definir usando la etiqueta <field> los campos que deseamos que se muestre en la vista lista o tree de nuestro modelo, por ejemplo la etiqueta <field name=”date”/> tiene un atributo name que toma como valor el nombre del campo difinido en el modelo o clase de nuestro modulo.
Vista form
form

Fila 30-52: Aquí definimos nuestra vista form, la vista formulario, también se define con la etiqueta  <record model=”ir.ui.view” id=”view_biblioteca_libro_form”>  y estos son sus atributos:
id: Es un identificador único para cada vista form,  debe de empezar siempre en view y terminar en form por convencion.
model: Indica que vamos a insertar este registro en la tabla ir.ui.view con los valores de los campos (etiqueta <field>): id, name, model y arch.
Para insertar los valores de los campos (linea 31-33) de dicho registro se usa la etiqueta <field>, tenemos los atributos para field:
name: Es un nombre que se le asigna a la vista formulario.
model: Indica a que modelo o clase esta asociada esta vista formulario (valor de _name: biblioteca.libro en la clase biblioteca_libro)
arch: Linea 33-51, indica que es un archivo de tipo xml y que tiene como contenido todo lo que está dentro de la etiqueta <form>, dentro de la etiqueta <form> vamos a definir usando la etiqueta <field> los campos que deseamos que se muestre en la vista formulario de nuestro modelo, por ejemplo la etiqueta <field name=”date”/> (linea 41) tiene un atributo name que toma como valor el nombre del campo difinido en el modelo o clase de nuestro modulo.
La etiqueta <sheet> hace que nuestro formulario se muestre mas elegante, ver gráfico a continuación.
form_sheet
8. Damos los permisos a nuestro modulo biblioteca y reinciamos nuestro servicio de Odoo.
1
2
chown -R odoo: /opt/odoo/server/addons/biblioteca
/etc/init.d/odoo-server restart
9. Ingresamos a nuestro ODOO por medio de un navegador web: http://ip_mi_server:8060 iniciamos sesión con usuario administrador y ademas debemos de tener activado Características técnicaspara el usuario administrador y nos dirigimos a la pestaña Configuración/Actualizar lista de módulos y damos actualizar.
actua
10. Nos dirigimos a Configuración/módulos locales y en la parte derecha en el área de búsquedacolocamos el nombre del modulo biblioteca y presionamos enter, nos debería mostrar el modulo Biblioteca, presionamos en el botón Instalar.
install

11. Si todo hemos hecho correctamente nos debería mostrar el menu de Biblioteca .
inic