CREACION DE MODULOS EN ODOO ERP V8 – PARTE I Publicada en 12/ 12/02/2 02/2015 015 de Javier Salazar Carlos Publicado Carlos Publicado en: Odoo ERP v8 10 Comentarios
Hola amigos hoy quieo !om"a#i !o$ us#e%es !omo !ea m&%ulos e$ O%oo ERP V8' !omo ya ha()$ le*%o ha$ ha(i%o !ie#os !am(ios e$ la +oma %e %esaolla los m&%ulos es"e!#o a O%oo ERP ,- . E$ O%oo ,8 hay u$a $ue,a +oma )"i%a %e !ea m&%ulos' es %e!i que e/e!u#amos u$os !oma$%os y ,eemos !omo se !ea$ l a es#u!#ua ge$eal %e u$ mo%ulo' "aa es#e #u#oial hemos segui%o los li$eamie$#os ge$eales %e la %o!ume$#a!i&$ e0"ues#o e$ O%oo Vamos a su"o$e que #e$emos i$s#ala%o O%oo ,8 e$ U(u$#u 12.
1. I$gesamos a la u#a siguie$#e /opt/odoo/server e$ e$ %o$%e es#)$ los a!hi,os %e O%oo' luego e/e!u#amos el !oma$%o que $os "emi#i) !ea la es#u!#ua ge$eal %e u$ m&%ulo. 1 2
$ cd /opt/odoo/server $ python odoo.py scaffold openacademy /opt/odoo/modulos/
Do$%e3
scaffold3 !oma$%o "aa !ea u$ la es#u!#ua ge$4i!a %e u$ mo%ulo e$ o%oo. openacademy3 Nom(e %el m&%ulo /opt/odoo/modulos/3 Ru#a e$ %o$%e se !ea) la es#u!#ua %el m&%ulo Luego ,eemos !omo es que se ha !ea%o la es#u!#ua ge$eal %el m&%ulo.
De los a!hi,os !ea%os "aa $ues#o e/em"lo so$ im"o#a$#es los siguie$#es3 __init__.py __openerp__.py ' __openerp__.py' models.py y templates.xml so$ las que usaemos "aa es#e e/em"lo.
2. Imgesamos al a!hi,o openacademy/__init__.py y ,emos !omo se im"o#a los a!hi,os."y %el mo%ulo.
__init__.py3 Aqu* se im"o#a #o%os los a!hi,os y %ie!#oios que !o$#ie$e$ !o%igo "y#ho$' 4s#e a!hi,o ha!e que O%oo e!o$o5!a al %ie!#oio o !a"e#a openacademy !omo u$ m&%ulo' "aa $ues#o e/em"lo $os i$#eesa el a!hi,o models.py sea im"o#a%o.
3. I$gesamos al a!hi,o openacademy/__openerp__.py y mo%i+i!amos la %es!i"!i&$' au#o' ,esi&$' e#!. %el mo%ulo.
__openerp__.py: Es u$ %i!!io$aio e$ Py#ho$ "aa agega las %es!i"!io$es %el m&%ulo' !omo au#o' ,esi&$' e#!.
4. E$ el a!hi,o openacademy/models.py es %o$%e %e+i$iemos el mo%elo. Paa $ues#o e/em"lo ,amos a !ea u$a !lase Curso %e$#o %el mo%ulo openacademy, !o$ los a#i(u#os titulo y descripcion 1 2
# -*- coding: utf-8 -*from openerp import models, fields, api
! 5 " # 8
class openacademy_curso(models.odel!: _name " openacademy.curso name " fields.har(string"%&itle%, re'uired"&rue! description " fields.&et(!
Do$%e3
_name3 Nom(e %el mo%elo' es#e $om(e #am(i4$ es el $om(e %e la #a(la que se !ea) e$ la (ase %e %a#os "os#gesql "aa $ues#o !aso se) openacademy_curso, solo que el "u$#o6.7 es eem"la5a%o "o guio$ (a/o 67.
name3 "ime a#i(u#o %el mo%elo' se e!omie$%a que #o%o mo%elo #e$ga u$ a#i(u#o $ame' "aa es#e !aso es %e #i"o Cha.
description3 Segu$%o a#i(u#o %el mo%elo %e #i"o Te0# Po%emos agega mas !am"os a $ues#o mo%elo' "o e/em"lo !am"os %e #i"o +e!ha' +loa#' sele!#' (oolea$' ma$y9o$e' e#!. mas %e#alles aqu*.
5. Cea$%o A!!io$es y Me$us Las a!!io$es y los me$us so$ egis#os e$ la (ase %e %a#os que se %e!laa$ e$ u$ a!hi,o 0ml' las a!!io$es "ue%e$ se a!#i,a%os %e las +omas siguie$#es3 •
Ha!ie$%o !li! e$ los i#ems %el me$:
•
Ha!ie$%o !li! e$ (o#o$es %e+i$i%os e$ la ,is#a %el mo%elo.
Paa $ues#o e/em"lo usaemos la "imea o"!i&$ me$!io$a%a ai(a "aa eso %e+i$imos u$ me$: que "emi#a a!!e%e a lis#a%o %e !usos. Paa eso e%i#amos el a!hi,o openacademy/templates.xml y agegamos lo siguie$#e3 1 2 ! 5
)ml version"%+.% encoding"%&-8% )openerp )data )0-- 1efinimos la accion --
" #
)record model"%ir.actions.act_2indo2% id"%course_list_action% )field name"%name%ursos)/field )field name"%res_model%openacademy.curso)/field )field name"%vie2_type%form)/field )field name"%vie2_mode%tree,form)/field )field name"%help% type"%html% )p class"%oe_vie2_nocontent_create%ree el primer curso)/p )/field )/record
8 $ 10 11 12 1 1! 15
)0-- menu superior o principal: no hereda de otro menu -- )menuitem id"%main_openacademy_menu% name"%ursos%/
1" 1# 18
)0-- 1efinimos un menu de solo vista, este menu tiene como menu padre a )menuitem id"%openacademy_menu% name"%ursos academicos% parent"%main_ope )0-- 1efinimos otro menu 'ue tiene como menu padre a urso academicos.-)menuitem id"%courses_menu% name"%ursos% parent"%openacademy_menu% action
1$ 20 21 22 2 2!
)/data )/openerp
25
U$a a!!i&$ e$ O%oo se %e+i$e me%ia$#e las e#ique#as
model 3 Pemi#e ge$ea u$a hee$!ia %el mo%elo i.a!#io$s.a!#;i$%o; id3 I%e$#i+i!a%o :$i!o "aa !a%a a!!i&$
id3 i%e$#i+i!a%o :$i!o "aa !a%a me$u name3 Nom(e %el me$u6la(el7 parent3 I$%i!a si u$ me$: es hi/o %e o#o me$: action3 Pemi#e aso!ia u$ me$: a u$a a!!i&$.
>i$alme$#e luego %e i$s#ala $ues#o m&%ulo3
Es #o%o amigos' es"eo que le sea %e ayu%a' es#a4 "u(li!a$%o o#o #u#oial "aa ,e !omo "eso$ali5a la ,is#a #ee y +om %el $ues#o m&%ulo.
CREANDO MODULOS ?E@ EN ODOO ERP V8 – PARTE I Publicada en 2/02/2015 de Javier Salazar Carlos Publicado en: Odoo ERP v8
Hola amigos e$ es#a "u(li!a!i&$ ,eemos los "asos ()si!os "aa "o%e !ea u$ m&%ulo ;e( e$ O%oo E" ,8' o/o u$a !osa es !ea #$%&'$ ()* y o#a es !ea u$ ()*+-) con $doo' es#e :l#imo lo ,eemos e$ o#a "u(li!a!i&$. Es im"o#a$#e sa(e !omo +u$!io$a u$ modulo e en $doo' y que al e$#e$%elo "o%emos mo%i+i!a el TPV %e O%oo V8. Paa es#e #u#oial es#amos #oma$%o !omo e+ee$!ia el #u#oial "u(li!a%o e$ la %o!ume$#a!i&$ o+i!ial %eo%oo. Asumimos que #ie$e i$s#ala%o O%oo ,8 e$ U(u$#u 12.2.
Nos u(i!amos e$ la !a"e#a addons %e $ues#a i$s#ala!i&$ %e O%oo.
1.
Ceamos u$ !a"e#a llama%a tienda_mascota e i$gesamos %e$#o %e ella. 1 2
m3dir tienda_mascota cd tienda_mascota
Paa que O%oo "ue%a e!o$o!e al %ie!#oio tienda_mascota !omo mo%ulo
9.
%e(emos %e !ea a!hi,o __init__.py, __openerp__.py y 1 2
touch __init__.py touch __openerp__.py
El a!hi,o __init__.py ,a!io "o el mome$#o' "emi#e que el
B.
%ie!#oio tienda_mascota sea e!o$o!i%o "o O%oo !omo u$ m&%ulo. A%em)s !eamos o#o a!hi,o que $os "emi#i) !o$s#ui "a#e %e la ,is#a %e $ues#o mo%ulo. 1
touch tienda_mascota.ml
De$#o %e la !a"e#a tienda_modulo !eamos u$a !a"e#a static' es#a
2.
!a"e#a es im"o#a$#e ya que %e$#o %e ella se !ea)$ los a!hi,os que "emi#i)$ ha!e %e es#e mo%ulo u$ modulo e de $doo 1 2 ! 5 " # 8
m3dir static cd static m3dir src cd src m3dir css 4s ml touch css/tienda_mascota.css touch 4s/tienda_mascota.4s touch ml/tienda_mascota.ml
.
>i$alme$#e #e$%*amos la siguie$#e es#u!#ua %e $ues#o m&%ulo3
.
#ie$%amas!o#as#a#i!!ss#ie$%amas!o#a.!ss Aqu* !olo!aemos #o%os los es#ilos que %eseamos a"li!a a $ues#o mo%ulo #ie$%amas!o#as#a#i!0ml#ie$%amas!o#a.0ml Es#e a!hi,o !o$#ie$e la "la$#illa %e $ues#o m&%ulo he!ho me%ia$#e q;e(.
tienda_mascota/static/0s/tienda_mascota.0s La "a#e m)s im"o#a$#e' !o$#ie$e la l&gi!a %e la a"li!a!i&$ e$ /a,as!i"#. Co$s#uimos la l&gi!a %el modulo e de $doo' e%i#amos el
-.
a!hi,o #ie$%amas!o#as#a#i!/s#ie$%amas!o#a./s y agegamos lo siguie$#e3 1 2 ! 5 " # 8 $ 10 11 12 1 1! 15 1"
//1efinimos el modulo 2e5 de 6doo como una funcion de openerp //7l nom5re de la funcion de5e ser el mismo 'ue la del modulo(tienda_mascota! openerp.tienda_mascota " function(instance, local! //&raduccion var _t " instance.2e5._t, _lt " instance.2e5._lt9 //2e5 var ;e5 " instance.2e5.'2e59 //onstruimos un 2idget 5asico de nom5re
omeome
1# 18 1$ 20 21
8.
//@egistra nuestro 2idget 5Asico como una acciBn cliente 'ue sera llamado desde la accion creado en tienda_mascota/tienda_mascota.ml instance.2e5.client_actions.add(tienda_mascota.paginainicio, instance.tienda_mascota.
'inea 3 3 Los m&%ulos ;e( e$ O%oo se %e!laa$ !omo +u$!io$es es#a(le!i%as e$ la ,aia(le glo(al %e openerp. El $om(e %e la +u$!i&$ %e(e se el mismo que el mo%ulo 6e$ es#e !aso tienda_mascota7 "aa que "ue%a au#om)#i!ame$#e se i$i!iali5a%o. Es#a +u$!i&$ es le*%a au#om)#i!ame$#e !ua$%o el mo%ulo es i$,o!a%o' la +u$!i&$ #oma 9 "aame#os3 F. G El "ime "a)me#o es la i$s#a$!ia a!#ual %el !lie$#e ;e( %e O%oo' %a a!!eso a %i,esas +u$!io$ali%a%es %e+i$i%as "o O%oo 6#a%u!!io$es' se,i!ios %e e%7' as* !omo los o(/e#os %e+i$i%os "o el $:!leo o "o o#os m&%ulos. G El segu$%o "a)me#o es su "o"io es"a!io %e $om(es lo!al !ea%a au#om)#i!ame$#e "o el !lie$#e ;e(. O(/e#os y ,aia(les que %e(e$ se a!!esi(les %es%e +uea %e su m&%ulo 6ya sea "oque el !lie$#e ;e( %e O%oo #ie$e que llama a ellos o "oque o#os "ue%e$ quee "eso$ali5alos7 %e(e es#a(le!ese %e$#o %e ese es"a!io %e $om(es.
'inea : Al igual que o#as i$#e+a!es %e usuaio oie$#a%as a o(/e#os 6"o
1.
e/em"lo' #' !a!ao o TJ7' O%oo ?e( +a(i!a !om"o$e$#es es"e!*+i!os es"o$sa(les %e las se!!io$es %e u$a ")gi$a. E$ O%oo ;e(' la (ase %e #ales !om"o$e$#es es la !lase ?i%ge#67' u$ !om"o$e$#e es"e!iali5a%o e$ el ma$e/o %e u$a se!!i&$ %e la ")gi$a y mos#a la i$+oma!i&$ "aa el usuaio.
'inea 1: Los ?i%ge# #ie$e$ u$a seie %e me#o%os y !aa#eis#i!as3 Co$+igua ;i%ge#' Da +oma#o a los %a#os %el ;i%ge# y mos#a el ;i%ge#. El ;i%ge# %e ainarincipal ya #ie$e u$ m4#o%o start6' Ese m4#o%o es "a#e #o%o ;i%ge# y es llama%o au#om)#i!ame$#e u$a ,e5 que se i$se#a el ;i%ge# e$ la ")gi$a. Po%emos u#ili5alo "aa mos#a algu$os !o$#e$i%os.
'inea 12: To%os los ;i%ge#s #ie$e$ u$ 7el que e"ese$#a la se!!i&$ %e la ")gi$a 6!omo u$ o(/e#o e$ /uey7. El !o$#e$i%o %el ?i%ge# %e(e i$se#ase all*. Po %e+e!#o' el 7el es u$ eleme$#o <%i,= ,a!*o. 11.
Co$s#uye$%o la "la$#illa %e $ues#o mo%ulo ;e(' "aa eso ,amos a usa 8e que es el mo#o %e "la$#illas "aa O%oo ?e(. Vamos a !o$s#ui la "la$#illa ;e( e$ tienda_mascota/static/src/xml/tienda_mascota.xml. 1 2 ! 5 " # 8 $ 10 11
19.
)ml version"%+.% encoding"%&-8% )0-- 7s necesario definir este archivo-- )templates ml:space"%preserve% )0-- t-name: definimos el nom5re del template(>omeome
Ahoa ,amos a ,e la si$#a0is %e las "o"ias "la$#illas. U$a "la$#illa ?E@ se !om"o$e %e KML $omal me5!la%o !o$ %ie!#i,as ?E@. U$a %ie!#i,a ?E@ se %e!laa !o$ a#i(u#os KML !ome$5a$%o !o$ t9 La %ie!#i,a m)s ()si!a es t9name' u#ili5a%o "aa %e!laa $ue,as "la$#illas e$ el a!hi,o %e "la$#illa3
1B.
Vamos a !o$s#ui e$ me$: que $os "emi#i) i$#ea!#ua !o$ $ues#o m&%ulo. E%i#amos el a!hi,o tienda_mascota/tienda_mascota.xml y ageamos lo siguie$#e3 1 2 ! 5
)ml version"%+.% encoding"%&-8% )openerp )data )0-- importando los .css y 4s del mudulo 2e5 -- )template id"%assets_5ac3end% name"%tienda_mascota_assets% inherit_id"%2 )path epr"%.% position"%inside%
" #
)lin3 rel"%stylesheet% href"%/tienda_mascota/static/src/css/tie )script type"%tet/4avascript% src"%/tienda_mascota/static/src/4 )/path )/template
8 $ 10 11
)0-- reando lo menus -- )menuitem id"%main_root_tienda_menu% name"%&ienda% /
12 1 1!
)menuitem id"%tienda_menu% name"%&ienda de ascotas% parent"%main_root_t
15 1" 1#
)0-- reando la accion 'ue sera llamado en /tienda_mascota/static/src/ -- )record id"%action_home_page% model"%ir.actions.client% )field name"%name%&ienda de ascota)/field )field name"%tag%tienda_mascota.paginainicio)/field )/record
18 1$ 20 21 22
)menuitem id"%home_page_tienda_menu% name"%ascotas% parent"%tienda_menu )/data 2 )/openerp 2! 25 1
E%i#amos el a!hi,o __openerp__.py y agegamos el %i!!io$aio %e %a#os !o$
12.
i$+oma!i&$ %e $ues#o m&%ulo. 1 2 ! 5 " # 8 $
name : odulo &ienda de ascotas, version: +., summary: Eenta de mascotas, category: &ools, description: %%% 6doo odulo ;e5 - &ienda de ascotas """"""""""""""""""""""""""""""""""""
10 11 12 1 1! 15 1" 1# 18
Fienvenido a'ui encontrara variedad para elegir su mascota %%%, data: G %tienda_mascota.ml%, H, depends : Gsale_stoc3H, '2e5: Gstatic/src/ml/*.mlH, application: &rue, ?
1$
1.
E0"li!a$%o algu$os "u$#os %e es#e a!hi,o3
data3 Im"o#amos aqui los a!hi,os 0ml' es#os a!hi,os "emi#e$ !o$s#ui "a#e %e la ,is#a %el mo%ulo
depends 3 "emi#e agega los $om(es %e los m&%ulos %e las !uales %e"e$%e $ues#o mo%ulo a!#ual.
e3 Im"o#amos #o%os los a!hi,os 0ml' es#os a!hi,os 0ml !o$#ie$e$ la ,is#a %el m&%ulo eali5a%a usa$%o q;e( 1.
>i$alme$#e luego %e i$s#ala el mo%ulo
Es #o%o amigos' es"eo que le haya si%o %e u#ili%a%' ga!ias.