Upload
mario-j-inga-cahuana
View
693
Download
2
Tags:
Embed Size (px)
Citation preview
Development Odoo Basic
by @mario21ic
Agenda ● Introducción ● Configuración de módulos ● Creación de un módulo ● Definición de menu, action, vista ● Fundamentos básicos de objetos ● Vistas bussiness document
¿Qué es? ● ERP + CMS ● MVC ● OpenObject ● Python ● PostgreSQL ● Flexible ● OpenSource
Arquitectura
Modelo MVC • Model: todo_model.py • View: todo_view.xml • Controller: ORM y métodos
● Debian/Ubuntu derivados: Descargar de: http://nightly.odoo.com/8.0/nightly/deb/odoo_8.0.latest_all.deb $ sudo dpkg –i odoo*.deb $ sudo apt-get install -f
● RedHat/CentOS/Fedora derivados: Descargar de: http://nightly.odoo.com/8.0/nightly/rpm/odoo_8.0.latest.noarch.rpm $ sudo rpm –Uvh odoo*.rpm
Instalación - Paquetería
Instalación - Docker ● PostgreSQL:
$ docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo --name db postgres
● Odoo: $ docker run -p 127.0.0.1:8069:8069 --name odoo --link db:db -
t odoo ● Acciones:
$ docker stop|start|restart odoo
Instalación - Docker-compose web: image: odoo:8 volumes: - ./todo_app:/mnt/extra-addons/todo_app links: - db ports: - "8069:8069" db: image: postgres:latest environment: POSTGRES_USER: odoo POSTGRES_PASSWORD: odoo
Luego ejecutar: $ docker-compose up
Crear archivo: docker-compose.yml
Creating database
Quick tour
Technical features
Technical features
Estructura de un módulo nombre_modulo/ security/ ir.model.access.csv i18n/ es_PE.po submodulo/ __init__.py submodulo.py modulo_view.xml modulo.py __init__.py __openerp__.py
__openerp__.py { 'name': 'To-Do Application', 'description': 'Maneja tus tareas personales', 'author': 'taller', 'depends': [’mail'], 'application': True, }
https://www.odoo.com/documentation/8.0/reference/module.html
Actualizando lista de módulos
Instalando module
Modelo: todo_model.py # -*- coding: utf-8 -*- from openerp import models, fields class TodoTask(models.Model): _name = 'todo.task' name = fields.Char('Description', required=True) is_done = fields.Boolean('Done?') active = fields.Boolean('Active?', default=True)
Importando model • Archivo __init__.py:
from . import todo_model
Actualizando module
Campos predefinidos • id • create_date • create_uid • write_date • write_uid
View - Structure • Archivo todo_view.xml: <?xml version="1.0"?> <openerp> <data>
<!-- Data --> </data> </openerp>
View - Action • Agregamos action: <!-- Action to open To-do Task list --> <act_window id="action_todo_task" name="To-do Task" res_model="todo.task" view_mode="tree,form" />
View - Menu • Agregamos menu: <!-- Menu item to open To-do Task list --> <menuitem id="menu_todo_task" name="To-Do Tasks" parent="mail.mail_feeds" sequence="20" action="action_todo_task" />
Activando todo_view.xml • Agregar en __openerp__.py ‘data': ['todo_view.xml'],
Vista - Tree
Vista - Form
Vista - Form personalizada • Agregar el siguiente record: <record id="view_form_todo_task" model="ir.ui.view”> <field name="name">To-do Task Form</field> <field name="model">todo.task</field> <field name="arch" type="xml"> <form string="To-do Task”> <field name="name"/> <field name="is_done"/> <field name="active" readonly="1"/> </form> </field> </record>
Vista - Form personalizada • Actualizar module y crear:
Vista - Bussines document <form> <header> <!-- Buttons go here --> </header> <sheet> <!-- Content goes here --> <field name="name"/> <field name="is_done"/> </sheet> </form>
Vista - Buttons • Agregar: <header> <button name="do_toggle_done" type="object" string="Toggle Done" class="oe_highlight" /> <button name="do_clear_done" type="object" string="Clear All Done" /> </header>
Vista - Grupos <sheet> <group name="group_top”> <group name="group_left”> <field name="name"/> </group> <group name="group_right”> <field name="is_done"/> <field name="active" readonly="1"/> </group> </group> </sheet>
Vista - Bussines document • Actualizar module y crear:
Vista - List <record id="view_tree_todo_task" model="ir.ui.view”> <field name="name">To-do Task Tree</field> <field name="model">todo.task</field> <field name="arch" type="xml”> <tree colors="gray:is_done==True”> <field name="name"/> <field name="is_done"/> </tree> </field> </record>
Vista - List • Actualizar y ver:
Vista - Search <record id="view_filter_todo_task" model="ir.ui.view”> <field name="name">To-do Task Filter</field> <field name="model">todo.task</field> <field name="arch" type="xml”> <search> <field name="name"/> <filter string="Not Done" domain="[('is_done','=',False)]"/> <filter string="Done" domain="[('is_done','!=',False)]"/> </search> </field> </record>
Vista - Search • Actualizar y buscar:
Agregando lógicade negocio • Agregar al inicio de todo_model.py from openerp import models, fields, api • Y como método: @api.one def do_toggle_done(self): self.is_done = not self.is_done return True
Agregando lógica de negocio @api.multi def do_clear_done(self): done_recs = self.search([('is_done', '=', True)]) done_recs.write({'active': False}) return True
Field - Tipos básicos • Char • Boolean • Integer • Float • Text • Selection • Date / Datetime • * Computed Mas info:
https://www.odoo.com/documentation/8.0/reference/orm.html#fields
Field - Agregando un Selection • En todo_model.py agregar: level = fields.Selection(( ('0', 'Urgente'), ('1','Alto'), ('2', 'Normal')), 'Prioridad') • En todo_view.xml agregar en form y tree: <field name="level"/>
Field - Selection Actualizar module, listar y crear:
Ejercicios • Agregarle un campo de tipo fecha. • Al módulo crearle un acceso desde el menú
principal • Agregarle un campo tipo selection que sea
generado dinamicamente.