SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
Cómo hacer un módulo Odoo
compatible con todo
Jornadas Odoo 2016
@PedroMBaeza
pedro.baeza@tecnativa.com
●
Al instalar un módulo, una cosa deja de funcionar
●
Al desinstalar un módulo de “prueba”, las cosas no se quedan
como estaban.
●
Al hacer una actualización completa (--update=all), saltan
errores por todas partes. “Solución”: no actualizar
completamente nunca.
●
Al actualizar, se pierden cosas que se habían puesto.
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Situaciones comunes
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Problema
En el 99% de los casos, no se ha respetado
la herencia
●
Utilizar módulos de calidad contrastada (OCA). No todos
pueden garantizar 100% esa compatibilidad, pero la mayoría sí.
Si no la tiene, los módulos OCA lo indican en el README
●
Técnicas de programación
●
Evitar pruebas en BDs reales.
●
Técnicas de programación para desarrollos propios.
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
¿Cómo solucionarlo?
●
Utilizar las posibilidades de la nueva API:
– Declarar el campo de nuevo (nombre técnico y tipo), pero añadiendo sólo los
atributos que cambian:
field = fields.Type(readonly=True) # Hacer readonly
– selection_add para añadir valores a un campo selection:
selection_field = fields.Selection(selection_add=[('new_value', 'New value')])
– Campos compute entre comillas, y sólo habrá que redefinir el método (pero
llamando al super):
computed_field = fields.Float(compute=”_compute_computed_field”)
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Compatibilidad en modelos
●
Herencia en métodos:
– Nunca sobreescribir un método y no llamar al super.
– TÉCNICAS:
●
Rescatar datos del valor devuelto y reprocesar el/los registros.
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Compatibilidad en modelos (II)
SUPER
def method(self):
record = self.env[‘model’].create({…})
return record.id
SOBREESCRITURA
def method(self):
record_id = super(Class, self).method()
record = self.env[‘model’].browse(record_id)
record.field = “...”
return record_id
●
Herencia en métodos:
– TÉCNICAS:
●
Guardar "instantánea" antes y después de llamar al super.
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Compatibilidad en modelos (II)
SUPER
def method(self):
record1 = self.env[‘model’].create({…})
record2 = self.env[‘model’].create({…})
SOBREESCRITURA
def method(self):
old_records = self.env[‘model’].search([])
super(Class, self).method()
current_records = self.env[‘model’].search([])
new_records = current_records - old_records
# process new_records
●
Herencia en métodos:
– TÉCNICAS:
●
Técnicas creativas.
https://github.com/odoomrp/odoomrp-wip/blob/0b55ab14925322b3e167f
ef24e7aa9d5b38fddb5/procurement_purchase_no_grouping/models/procu
rement_order.py#L13
https://github.com/odoomrp/odoomrp-wip/blob/0b55ab14925322b3e167f
ef24e7aa9d5b38fddb5/procurement_purchase_no_grouping/models/purch
ase_order.py#L17
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Compatibilidad en modelos (III)
●
No hacer position=”replace”
– Si no se vuelve a añadir el campo
●
puede haber error porque otro elemento se posicione en base a él.
– Si se vuelve a añadir el campo en otro sitio:
●
Se pierden los atributos que se hayan modificado por herencia…
●
…y además se pierden los cambios que se puedan hacer en el campo original en
actualizaciones.
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Compatibilidad en vistas
●
No hacer position=”replace”
– ¿qué hacer entonces?
●
Si solo se quiere ocultar el campo, hacer position=”attributes”, y luego <attribute
name=”invisible”>1</attribute>
●
Si se quiere mover de sitio…
– No lo hagas.
– No, en serio, no lo hagas. Odoo no siempre tiene la mejor disposición según qué sectores,
pero tiene unos criterios razonables. Convencer al cliente es la mejor opción.
– Si no hay manera, la manera de hacerlo es: A) crear campo related al campo que quieres
hacer el replace; B) ocultar el campo original; C) Insertar el campo related. Aún así,
perderás las posibles propiedades heredadas.
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Compatibilidad en vistas (II)
●
De nuevo, no hacer position=”replace” (o bueno, no indiscriminadamente)
– Es común que otros módulos añadan datos a un informe estándar. Ejemplo:
https://github.com/OCA/bank-payment/blob/9dc92beb4c2f07dbf189487875f0405
385cb762e/account_payment_partner/views/report_invoice.xml#L5
– Si se tiene que cambiar mucho el formato, mejor hacer un replace de la plantilla
entera, que andar cambiando múltiples cosas. No se obtendrán los campos de los
módulos adicionales, pero por lo menos no dará error.
<template id="report_invoice_inherit" inherit_id="account.report_invoice">
<xpath expr="//t[@t-raw]" position="replace">
<t t-raw="translate_doc(…, 'custom.report_invoice_document_custom')"/>
</xpath>
</template>
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Compatibilidad en informes
●
Se puede aplicar lo mismo que para los informes.
●
Los elementos que añadamos nosotros deben llevar el atributo id para
facilitar la herencia desde nuestros elementos.
●
Los que están estándar, si están bien hechos (definidas plantillas por
separado y con IDs), nos pueden permitir cierto juego de cambio de sitio
jugando con la prioridad de las vistas.
www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo
Compatibilidad en website
www.tecnativa.com
Gracias por
su atención

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (12)

Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvil
 
No instales software pirata en tu empresa, usa software libre
 No instales software pirata en tu empresa, usa software libre No instales software pirata en tu empresa, usa software libre
No instales software pirata en tu empresa, usa software libre
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
 
WPO para Magento - Meet Magento 2017
WPO para Magento - Meet Magento 2017WPO para Magento - Meet Magento 2017
WPO para Magento - Meet Magento 2017
 
Introduccción a la programación en Joomla!
Introduccción a la programación en Joomla!Introduccción a la programación en Joomla!
Introduccción a la programación en Joomla!
 
No quiero vuestra basura en Android
No quiero vuestra basura en AndroidNo quiero vuestra basura en Android
No quiero vuestra basura en Android
 
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
 
Pangoscrum
PangoscrumPangoscrum
Pangoscrum
 
Gestiona tus dependencias con NuGet, VSTs y MyGet
Gestiona tus dependencias con NuGet, VSTs y MyGetGestiona tus dependencias con NuGet, VSTs y MyGet
Gestiona tus dependencias con NuGet, VSTs y MyGet
 
De 0 a 100 con Magento 2
De 0 a 100 con Magento 2De 0 a 100 con Magento 2
De 0 a 100 con Magento 2
 
Training de pareja
Training de pareja Training de pareja
Training de pareja
 
#MM17ES - Theming en Magento 2 usando un framework de front-end
#MM17ES - Theming en Magento 2 usando un framework de front-end#MM17ES - Theming en Magento 2 usando un framework de front-end
#MM17ES - Theming en Magento 2 usando un framework de front-end
 

Andere mochten auch

Licencias Odoo 2015 versión 9
Licencias Odoo 2015 versión 9Licencias Odoo 2015 versión 9
Licencias Odoo 2015 versión 9
Domatix
 
Resume for Angela Miller
Resume for  Angela MillerResume for  Angela Miller
Resume for Angela Miller
Angela Miller
 

Andere mochten auch (20)

Jornadas Odoo 2015 - Implantación de Odoo en una empresa de automatización in...
Jornadas Odoo 2015 - Implantación de Odoo en una empresa de automatización in...Jornadas Odoo 2015 - Implantación de Odoo en una empresa de automatización in...
Jornadas Odoo 2015 - Implantación de Odoo en una empresa de automatización in...
 
Licencias Odoo 2015 versión 9
Licencias Odoo 2015 versión 9Licencias Odoo 2015 versión 9
Licencias Odoo 2015 versión 9
 
VAT: Manage your risk and maximise your cashflow
VAT: Manage your risk and maximise your cashflowVAT: Manage your risk and maximise your cashflow
VAT: Manage your risk and maximise your cashflow
 
Jornadas Odoo 2015 - Charla con Odoo S. A.
Jornadas Odoo 2015 - Charla con Odoo S. A.Jornadas Odoo 2015 - Charla con Odoo S. A.
Jornadas Odoo 2015 - Charla con Odoo S. A.
 
Jornadas Odoo 2016 - La comunidad mundial de Odoo (OCA) y su ecosistema - Ped...
Jornadas Odoo 2016 - La comunidad mundial de Odoo (OCA) y su ecosistema - Ped...Jornadas Odoo 2016 - La comunidad mundial de Odoo (OCA) y su ecosistema - Ped...
Jornadas Odoo 2016 - La comunidad mundial de Odoo (OCA) y su ecosistema - Ped...
 
Jornadas Odoo 2016 - ¿Qué esperar de una nueva implantación de un ERP (Odoo)?...
Jornadas Odoo 2016 - ¿Qué esperar de una nueva implantación de un ERP (Odoo)?...Jornadas Odoo 2016 - ¿Qué esperar de una nueva implantación de un ERP (Odoo)?...
Jornadas Odoo 2016 - ¿Qué esperar de una nueva implantación de un ERP (Odoo)?...
 
Odoo a simple vista
Odoo a simple vistaOdoo a simple vista
Odoo a simple vista
 
Sobrevivir a un proyecto de Odoo
Sobrevivir a un proyecto de OdooSobrevivir a un proyecto de Odoo
Sobrevivir a un proyecto de Odoo
 
API REST para conectar Odoo
 API REST para conectar Odoo  API REST para conectar Odoo
API REST para conectar Odoo
 
Conoce a Richard - La Experiencia Odoo
Conoce a Richard - La Experiencia OdooConoce a Richard - La Experiencia Odoo
Conoce a Richard - La Experiencia Odoo
 
Contabilidad práctica odoo prorrata, 340, libro de iva,, intrastat, criterio ...
Contabilidad práctica odoo prorrata, 340, libro de iva,, intrastat, criterio ...Contabilidad práctica odoo prorrata, 340, libro de iva,, intrastat, criterio ...
Contabilidad práctica odoo prorrata, 340, libro de iva,, intrastat, criterio ...
 
Acadamic_report
Acadamic_reportAcadamic_report
Acadamic_report
 
Resume for Angela Miller
Resume for  Angela MillerResume for  Angela Miller
Resume for Angela Miller
 
Módulo de Gestión de Expedientes integrado con openERP Odoo
Módulo de Gestión de Expedientes integrado con openERP OdooMódulo de Gestión de Expedientes integrado con openERP Odoo
Módulo de Gestión de Expedientes integrado con openERP Odoo
 
DocOpenERP - Manual openerp.230209
DocOpenERP - Manual openerp.230209DocOpenERP - Manual openerp.230209
DocOpenERP - Manual openerp.230209
 
DocUbuntu - Instalacion Estandar
DocUbuntu - Instalacion EstandarDocUbuntu - Instalacion Estandar
DocUbuntu - Instalacion Estandar
 
Open erp tutorial_basico
Open erp tutorial_basicoOpen erp tutorial_basico
Open erp tutorial_basico
 
BaseTIS - caso de éxito gestión personal con Odoo
BaseTIS - caso de éxito gestión personal con OdooBaseTIS - caso de éxito gestión personal con Odoo
BaseTIS - caso de éxito gestión personal con Odoo
 
Unidad4
Unidad4Unidad4
Unidad4
 
Gestión empresarial con Software Libre
Gestión empresarial con Software LibreGestión empresarial con Software Libre
Gestión empresarial con Software Libre
 

Ähnlich wie Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pedro M. Baeza

Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
betabeers
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelos
dokeosla
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
deivit86
 

Ähnlich wie Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pedro M. Baeza (20)

Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Buenasprcticas
BuenasprcticasBuenasprcticas
Buenasprcticas
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Magento Best Practices
Magento Best PracticesMagento Best Practices
Magento Best Practices
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
Automatización de pruebas funcionales
Automatización de pruebas funcionalesAutomatización de pruebas funcionales
Automatización de pruebas funcionales
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con Drupal
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
 
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelos
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2
 
Dce2 ejercicios asp.net
Dce2 ejercicios asp.netDce2 ejercicios asp.net
Dce2 ejercicios asp.net
 
Modelar ensamblar Piezas con Solidworks TUTORIAL.pdf
Modelar  ensamblar   Piezas con   Solidworks TUTORIAL.pdfModelar  ensamblar   Piezas con   Solidworks TUTORIAL.pdf
Modelar ensamblar Piezas con Solidworks TUTORIAL.pdf
 

Mehr von Pedro Manuel Baeza Romero

Jornadas Odoo 2015 - Caso de éxito Wonkandy S. L.
Jornadas Odoo 2015 - Caso de éxito Wonkandy S. L.Jornadas Odoo 2015 - Caso de éxito Wonkandy S. L.
Jornadas Odoo 2015 - Caso de éxito Wonkandy S. L.
Pedro Manuel Baeza Romero
 

Mehr von Pedro Manuel Baeza Romero (14)

Jornadas Odoo 2016 - Localización española de Odoo - Pedro M. Baeza
Jornadas Odoo 2016 - Localización española de Odoo - Pedro M. BaezaJornadas Odoo 2016 - Localización española de Odoo - Pedro M. Baeza
Jornadas Odoo 2016 - Localización española de Odoo - Pedro M. Baeza
 
Jornadas Odoo 2016 - Cómo crear temas multi-website con Odoo v8 - Antonio Esp...
Jornadas Odoo 2016 - Cómo crear temas multi-website con Odoo v8 - Antonio Esp...Jornadas Odoo 2016 - Cómo crear temas multi-website con Odoo v8 - Antonio Esp...
Jornadas Odoo 2016 - Cómo crear temas multi-website con Odoo v8 - Antonio Esp...
 
Jornadas Odoo 2016 - Proyectos y tareas: Tan sencillo como potente - Antonio ...
Jornadas Odoo 2016 - Proyectos y tareas: Tan sencillo como potente - Antonio ...Jornadas Odoo 2016 - Proyectos y tareas: Tan sencillo como potente - Antonio ...
Jornadas Odoo 2016 - Proyectos y tareas: Tan sencillo como potente - Antonio ...
 
Jornadas Odoo 2015 - Odoo: Mucho más que un ERP
Jornadas Odoo 2015 - Odoo: Mucho más que un ERPJornadas Odoo 2015 - Odoo: Mucho más que un ERP
Jornadas Odoo 2015 - Odoo: Mucho más que un ERP
 
Jornadas Odoo 2015 - Próximo cambio de licencia de Odoo y cómo nos afecta
Jornadas Odoo 2015 - Próximo cambio de licencia de Odoo y cómo nos afectaJornadas Odoo 2015 - Próximo cambio de licencia de Odoo y cómo nos afecta
Jornadas Odoo 2015 - Próximo cambio de licencia de Odoo y cómo nos afecta
 
Jornadas Odoo 2015 - Odoo para empresas de fabricación: OdooMRP
Jornadas Odoo 2015 - Odoo para empresas de fabricación: OdooMRPJornadas Odoo 2015 - Odoo para empresas de fabricación: OdooMRP
Jornadas Odoo 2015 - Odoo para empresas de fabricación: OdooMRP
 
Jornadas Odoo 2015 - De oca en OCA... beneficios de trabajar en la comunidad
Jornadas Odoo 2015 - De oca en OCA... beneficios de trabajar en la comunidadJornadas Odoo 2015 - De oca en OCA... beneficios de trabajar en la comunidad
Jornadas Odoo 2015 - De oca en OCA... beneficios de trabajar en la comunidad
 
Jornadas Odoo 2015 - Gestión de almacén personalizada para venta Flash. Caso ...
Jornadas Odoo 2015 - Gestión de almacén personalizada para venta Flash. Caso ...Jornadas Odoo 2015 - Gestión de almacén personalizada para venta Flash. Caso ...
Jornadas Odoo 2015 - Gestión de almacén personalizada para venta Flash. Caso ...
 
Jornadas Odoo 2015 - Gánate a tu director financiero con la contabilidad de Odoo
Jornadas Odoo 2015 - Gánate a tu director financiero con la contabilidad de OdooJornadas Odoo 2015 - Gánate a tu director financiero con la contabilidad de Odoo
Jornadas Odoo 2015 - Gánate a tu director financiero con la contabilidad de Odoo
 
Jornadas Odoo 2015 - Caso de éxito Wonkandy S. L.
Jornadas Odoo 2015 - Caso de éxito Wonkandy S. L.Jornadas Odoo 2015 - Caso de éxito Wonkandy S. L.
Jornadas Odoo 2015 - Caso de éxito Wonkandy S. L.
 
Jornadas Odoo 2015 - Nuevos módulos e-commerce para Odoo
Jornadas Odoo 2015 - Nuevos módulos e-commerce para OdooJornadas Odoo 2015 - Nuevos módulos e-commerce para Odoo
Jornadas Odoo 2015 - Nuevos módulos e-commerce para Odoo
 
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para Odoo
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para OdooJornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para Odoo
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para Odoo
 
Jornadas Odoo 2015 - Cómo migrar un módulo OpenERP a la nueva API de Odoo
Jornadas Odoo 2015 - Cómo migrar un módulo OpenERP a la nueva API de OdooJornadas Odoo 2015 - Cómo migrar un módulo OpenERP a la nueva API de Odoo
Jornadas Odoo 2015 - Cómo migrar un módulo OpenERP a la nueva API de Odoo
 
Jornadas odoo 2015 - Proyectos de I+D en Eficent
Jornadas odoo 2015 - Proyectos de I+D en EficentJornadas odoo 2015 - Proyectos de I+D en Eficent
Jornadas odoo 2015 - Proyectos de I+D en Eficent
 

Kürzlich hochgeladen

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Kürzlich hochgeladen (11)

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pedro M. Baeza

  • 1. Cómo hacer un módulo Odoo compatible con todo Jornadas Odoo 2016 @PedroMBaeza pedro.baeza@tecnativa.com
  • 2. ● Al instalar un módulo, una cosa deja de funcionar ● Al desinstalar un módulo de “prueba”, las cosas no se quedan como estaban. ● Al hacer una actualización completa (--update=all), saltan errores por todas partes. “Solución”: no actualizar completamente nunca. ● Al actualizar, se pierden cosas que se habían puesto. www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Situaciones comunes
  • 3. www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Problema En el 99% de los casos, no se ha respetado la herencia
  • 4. ● Utilizar módulos de calidad contrastada (OCA). No todos pueden garantizar 100% esa compatibilidad, pero la mayoría sí. Si no la tiene, los módulos OCA lo indican en el README ● Técnicas de programación ● Evitar pruebas en BDs reales. ● Técnicas de programación para desarrollos propios. www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo ¿Cómo solucionarlo?
  • 5. ● Utilizar las posibilidades de la nueva API: – Declarar el campo de nuevo (nombre técnico y tipo), pero añadiendo sólo los atributos que cambian: field = fields.Type(readonly=True) # Hacer readonly – selection_add para añadir valores a un campo selection: selection_field = fields.Selection(selection_add=[('new_value', 'New value')]) – Campos compute entre comillas, y sólo habrá que redefinir el método (pero llamando al super): computed_field = fields.Float(compute=”_compute_computed_field”) www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Compatibilidad en modelos
  • 6. ● Herencia en métodos: – Nunca sobreescribir un método y no llamar al super. – TÉCNICAS: ● Rescatar datos del valor devuelto y reprocesar el/los registros. www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Compatibilidad en modelos (II) SUPER def method(self): record = self.env[‘model’].create({…}) return record.id SOBREESCRITURA def method(self): record_id = super(Class, self).method() record = self.env[‘model’].browse(record_id) record.field = “...” return record_id
  • 7. ● Herencia en métodos: – TÉCNICAS: ● Guardar "instantánea" antes y después de llamar al super. www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Compatibilidad en modelos (II) SUPER def method(self): record1 = self.env[‘model’].create({…}) record2 = self.env[‘model’].create({…}) SOBREESCRITURA def method(self): old_records = self.env[‘model’].search([]) super(Class, self).method() current_records = self.env[‘model’].search([]) new_records = current_records - old_records # process new_records
  • 8. ● Herencia en métodos: – TÉCNICAS: ● Técnicas creativas. https://github.com/odoomrp/odoomrp-wip/blob/0b55ab14925322b3e167f ef24e7aa9d5b38fddb5/procurement_purchase_no_grouping/models/procu rement_order.py#L13 https://github.com/odoomrp/odoomrp-wip/blob/0b55ab14925322b3e167f ef24e7aa9d5b38fddb5/procurement_purchase_no_grouping/models/purch ase_order.py#L17 www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Compatibilidad en modelos (III)
  • 9. ● No hacer position=”replace” – Si no se vuelve a añadir el campo ● puede haber error porque otro elemento se posicione en base a él. – Si se vuelve a añadir el campo en otro sitio: ● Se pierden los atributos que se hayan modificado por herencia… ● …y además se pierden los cambios que se puedan hacer en el campo original en actualizaciones. www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Compatibilidad en vistas
  • 10. ● No hacer position=”replace” – ¿qué hacer entonces? ● Si solo se quiere ocultar el campo, hacer position=”attributes”, y luego <attribute name=”invisible”>1</attribute> ● Si se quiere mover de sitio… – No lo hagas. – No, en serio, no lo hagas. Odoo no siempre tiene la mejor disposición según qué sectores, pero tiene unos criterios razonables. Convencer al cliente es la mejor opción. – Si no hay manera, la manera de hacerlo es: A) crear campo related al campo que quieres hacer el replace; B) ocultar el campo original; C) Insertar el campo related. Aún así, perderás las posibles propiedades heredadas. www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Compatibilidad en vistas (II)
  • 11. ● De nuevo, no hacer position=”replace” (o bueno, no indiscriminadamente) – Es común que otros módulos añadan datos a un informe estándar. Ejemplo: https://github.com/OCA/bank-payment/blob/9dc92beb4c2f07dbf189487875f0405 385cb762e/account_payment_partner/views/report_invoice.xml#L5 – Si se tiene que cambiar mucho el formato, mejor hacer un replace de la plantilla entera, que andar cambiando múltiples cosas. No se obtendrán los campos de los módulos adicionales, pero por lo menos no dará error. <template id="report_invoice_inherit" inherit_id="account.report_invoice"> <xpath expr="//t[@t-raw]" position="replace"> <t t-raw="translate_doc(…, 'custom.report_invoice_document_custom')"/> </xpath> </template> www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Compatibilidad en informes
  • 12. ● Se puede aplicar lo mismo que para los informes. ● Los elementos que añadamos nosotros deben llevar el atributo id para facilitar la herencia desde nuestros elementos. ● Los que están estándar, si están bien hechos (definidas plantillas por separado y con IDs), nos pueden permitir cierto juego de cambio de sitio jugando con la prioridad de las vistas. www.tecnativa.comCómo hacer un módulo de Odoo compatible con todo Compatibilidad en website