Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Development Odoo Basic

6,281 views

Published on

Development Odoo Basic

Published in: Engineering
  • Login to see the comments

Development Odoo Basic

  1. 1. Development Odoo Basic by @mario21ic
  2. 2. 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
  3. 3. ¿Qué es? ●  ERP + CMS ●  MVC ●  OpenObject ●  Python ●  PostgreSQL ●  Flexible ●  OpenSource
  4. 4. Arquitectura
  5. 5. Modelo MVC •  Model: todo_model.py •  View: todo_view.xml •  Controller: ORM y métodos
  6. 6. ●  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
  7. 7. 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
  8. 8. 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
  9. 9. Creating database
  10. 10. Quick tour
  11. 11. Technical features
  12. 12. Technical features
  13. 13. 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
  14. 14. __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
  15. 15. Actualizando lista de módulos
  16. 16. Instalando module
  17. 17. 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)
  18. 18. Importando model •  Archivo __init__.py: from . import todo_model
  19. 19. Actualizando module
  20. 20. Campos predefinidos •  id •  create_date •  create_uid •  write_date •  write_uid
  21. 21. View - Structure •  Archivo todo_view.xml: <?xml version="1.0"?> <openerp> <data> <!-- Data --> </data> </openerp>
  22. 22. 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" />
  23. 23. 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" />
  24. 24. Activando todo_view.xml •  Agregar en __openerp__.py ‘data': ['todo_view.xml'],
  25. 25. Vista - Tree
  26. 26. Vista - Form
  27. 27. 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>
  28. 28. Vista - Form personalizada •  Actualizar module y crear:
  29. 29. Vista - Bussines document <form> <header> <!-- Buttons go here --> </header> <sheet> <!-- Content goes here --> <field name="name"/> <field name="is_done"/> </sheet> </form>
  30. 30. 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>
  31. 31. 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>
  32. 32. Vista - Bussines document •  Actualizar module y crear:
  33. 33. 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>
  34. 34. Vista - List •  Actualizar y ver:
  35. 35. 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>
  36. 36. Vista - Search •  Actualizar y buscar:
  37. 37. 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
  38. 38. 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
  39. 39. 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
  40. 40. 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"/>
  41. 41. Field - Selection Actualizar module, listar y crear:
  42. 42. 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.

×