https://wiki.morange.co.th/api.php?action=feedcontributions&user=Bombay&feedformat=atom
Morange Wiki - เรื่องที่ผู้ใช้มีส่วนร่วม [th]
2024-03-28T18:12:10Z
เรื่องที่ผู้ใช้มีส่วนร่วม
MediaWiki 1.31.1
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=797
Tutorial Odoo 9.0
2016-07-19T17:42:59Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module Tutorial Odoo 9.0 Part 2 : การ Install Module]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_4_:_Basic_View Tutorial Odoo 9.0 Part 4 : Basic View]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_5_:_Relations_between_models Tutorial Odoo 9.0 Part 5 : Relations between models]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_6_:_Inheritance Tutorial Odoo 9.0 Part 6 : Inheritance]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_7_:_Computed_fields_and_default_values Tutorial Odoo 9.0 Part 7 : Computed fields & default values]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_8_:_Onchange_%26_Model_constraints Tutorial Odoo 9.0 Part 8 : Onchange & Model constraints]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_9_:_Advanced_Views Tutorial Odoo 9.0 Part 9 : Advanced Views]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_10_:_Workflows Tutorial Odoo 9.0 Part 10 : Workflows]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_11_:_Security Tutorial Odoo 9.0 Part 11 : Security]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_12_:_Wizards Tutorial Odoo 9.0 Part 12 : Wizards]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_13_:_Internationalization Tutorial Odoo 9.0 Part 13 : Internationalization ]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_14_:_Reporting Tutorial Odoo 9.0 Part 14 : Reporting]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_15_:_WebServices#.E0.B8.97.E0.B8.B3_WebService Tutorial Odoo 9.0 Part 15 : WebServices]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br/><br/><br />
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre>sudo nano /etc/odoo/openerp-server.conf </pre><br />
<br />
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br />
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br/><br />
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br/><br/><br/><br />
3. แก้ไขไฟล์ ต่างๆ ดังนี้<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br/><br/><br />
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_15_:_WebServices&diff=796
Tutorial Odoo 9.0 Part 15 : WebServices
2016-07-19T17:40:48Z
<p>Bombay: /* ทำ WebService */</p>
<hr />
<div>== ทำ WebService ==<br />
* จะเป็นรูปแบบมาตราฐานเป็นแบบนี้<br />
- XML-RPC <br/><br />
- JSON-RPC<br />
<br />
=== XML-RPC ===<br />
* สร้างไฟล์ python ขึ้นมา และใส่ Code ลงไปดังนี้ <br />
* แก้ DB, USER, PASS ตามที่ Setting <br />
<pre><br />
import functools<br />
import xmlrpclib<br />
HOST = 'localhost'<br />
PORT = 8069<br />
DB = 'openacademy'<br />
USER = 'admin'<br />
PASS = 'admin'<br />
ROOT = 'http://%s:%d/xmlrpc/' % (HOST,PORT)<br />
<br />
# 1. Login<br />
uid = xmlrpclib.ServerProxy(ROOT + 'common').login(DB,USER,PASS)<br />
print "Logged in as %s (uid:%d)" % (USER,uid)<br />
<br />
call = functools.partial(<br />
xmlrpclib.ServerProxy(ROOT + 'object').execute,<br />
DB, uid, PASS)<br />
<br />
# 2. Read the sessions<br />
sessions = call('openacademy.session','search_read', [], ['name','seats'])<br />
for session in sessions:<br />
print "Session %s (%s seats)" % (session['name'], session['seats'])<br />
# 3.create a new session<br />
session_id = call('openacademy.session', 'create', {<br />
'name' : 'My session',<br />
'course_id' : 2,<br />
})<br />
</pre><br />
<br />
* เมื่อเขียนเสร็จแล้ว ใช้คำสั่งรันบน command line<br />
<br />
<pre>python <ชื่อไฟล์></pre><br />
<br />
* จะได้ผลลัพธ์ดังนี้<br />
<br />
[[ไฟล์:DeepinScreenshot20160720003404.png | 800 px]]<br />
<br />
=== JSON-RPC ===<br />
<br />
* เขียนโปรแกรม python เหมือนตัวอย่างข้างบนใช้ Code ตามนี้<br />
<br />
<pre>import json<br />
import random<br />
import urllib2<br />
<br />
def json_rpc(url, method, params):<br />
data = {<br />
"jsonrpc": "2.0",<br />
"method": method,<br />
"params": params,<br />
"id": random.randint(0, 1000000000),<br />
}<br />
req = urllib2.Request(url=url, data=json.dumps(data), headers={<br />
"Content-Type":"application/json",<br />
})<br />
reply = json.load(urllib2.urlopen(req))<br />
if reply.get("error"):<br />
raise Exception(reply["error"])<br />
return reply["result"]<br />
<br />
def call(url, service, method, *args):<br />
return json_rpc(url, "call", {"service": service, "method": method, "args": args})<br />
<br />
# log in the given database<br />
url = "http://%s:%s/jsonrpc" % (HOST, PORT)<br />
uid = call(url, "common", "login", DB, USER, PASS)<br />
<br />
# create a new note<br />
args = {<br />
'color' : 8,<br />
'memo' : 'This is another note',<br />
'create_uid': uid,<br />
}<br />
note_id = call(url, "object", "execute", DB, uid, PASS, 'note.note', 'create', args)</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_15_:_WebServices&diff=795
Tutorial Odoo 9.0 Part 15 : WebServices
2016-07-19T17:40:31Z
<p>Bombay: หน้าที่ถูกสร้างด้วย '== ทำ WebService == * จะเป็นรูปแบบมาตราฐานเป็นแบบนี้ - XML-RPC - JSON-R...'</p>
<hr />
<div>== ทำ WebService ==<br />
* จะเป็นรูปแบบมาตราฐานเป็นแบบนี้<br />
- XML-RPC<br />
- JSON-RPC<br />
<br />
=== XML-RPC ===<br />
* สร้างไฟล์ python ขึ้นมา และใส่ Code ลงไปดังนี้ <br />
* แก้ DB, USER, PASS ตามที่ Setting <br />
<pre><br />
import functools<br />
import xmlrpclib<br />
HOST = 'localhost'<br />
PORT = 8069<br />
DB = 'openacademy'<br />
USER = 'admin'<br />
PASS = 'admin'<br />
ROOT = 'http://%s:%d/xmlrpc/' % (HOST,PORT)<br />
<br />
# 1. Login<br />
uid = xmlrpclib.ServerProxy(ROOT + 'common').login(DB,USER,PASS)<br />
print "Logged in as %s (uid:%d)" % (USER,uid)<br />
<br />
call = functools.partial(<br />
xmlrpclib.ServerProxy(ROOT + 'object').execute,<br />
DB, uid, PASS)<br />
<br />
# 2. Read the sessions<br />
sessions = call('openacademy.session','search_read', [], ['name','seats'])<br />
for session in sessions:<br />
print "Session %s (%s seats)" % (session['name'], session['seats'])<br />
# 3.create a new session<br />
session_id = call('openacademy.session', 'create', {<br />
'name' : 'My session',<br />
'course_id' : 2,<br />
})<br />
</pre><br />
<br />
* เมื่อเขียนเสร็จแล้ว ใช้คำสั่งรันบน command line<br />
<br />
<pre>python <ชื่อไฟล์></pre><br />
<br />
* จะได้ผลลัพธ์ดังนี้<br />
<br />
[[ไฟล์:DeepinScreenshot20160720003404.png | 800 px]]<br />
<br />
=== JSON-RPC ===<br />
<br />
* เขียนโปรแกรม python เหมือนตัวอย่างข้างบนใช้ Code ตามนี้<br />
<br />
<pre>import json<br />
import random<br />
import urllib2<br />
<br />
def json_rpc(url, method, params):<br />
data = {<br />
"jsonrpc": "2.0",<br />
"method": method,<br />
"params": params,<br />
"id": random.randint(0, 1000000000),<br />
}<br />
req = urllib2.Request(url=url, data=json.dumps(data), headers={<br />
"Content-Type":"application/json",<br />
})<br />
reply = json.load(urllib2.urlopen(req))<br />
if reply.get("error"):<br />
raise Exception(reply["error"])<br />
return reply["result"]<br />
<br />
def call(url, service, method, *args):<br />
return json_rpc(url, "call", {"service": service, "method": method, "args": args})<br />
<br />
# log in the given database<br />
url = "http://%s:%s/jsonrpc" % (HOST, PORT)<br />
uid = call(url, "common", "login", DB, USER, PASS)<br />
<br />
# create a new note<br />
args = {<br />
'color' : 8,<br />
'memo' : 'This is another note',<br />
'create_uid': uid,<br />
}<br />
note_id = call(url, "object", "execute", DB, uid, PASS, 'note.note', 'create', args)</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:DeepinScreenshot20160720003404.png&diff=794
ไฟล์:DeepinScreenshot20160720003404.png
2016-07-19T17:34:21Z
<p>Bombay: </p>
<hr />
<div></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=793
Tutorial Odoo 9.0
2016-07-19T15:58:31Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module Tutorial Odoo 9.0 Part 2 : การ Install Module]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_4_:_Basic_View Tutorial Odoo 9.0 Part 4 : Basic View]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_5_:_Relations_between_models Tutorial Odoo 9.0 Part 5 : Relations between models]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_6_:_Inheritance Tutorial Odoo 9.0 Part 6 : Inheritance]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_7_:_Computed_fields_and_default_values Tutorial Odoo 9.0 Part 7 : Computed fields & default values]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_8_:_Onchange_%26_Model_constraints Tutorial Odoo 9.0 Part 8 : Onchange & Model constraints]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_9_:_Advanced_Views Tutorial Odoo 9.0 Part 9 : Advanced Views]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_10_:_Workflows Tutorial Odoo 9.0 Part 10 : Workflows]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_11_:_Security Tutorial Odoo 9.0 Part 11 : Security]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_12_:_Wizards Tutorial Odoo 9.0 Part 12 : Wizards]<br />
* [[Tutorial Odoo 9.0 Part 13 : Internationalization]]<br />
* [[Tutorial Odoo 9.0 Part 14 : Reporting]]<br />
* [[Tutorial Odoo 9.0 Part 15 : Webservices]]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br/><br/><br />
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre>sudo nano /etc/odoo/openerp-server.conf </pre><br />
<br />
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br />
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br/><br />
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br/><br/><br/><br />
3. แก้ไขไฟล์ ต่างๆ ดังนี้<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br/><br/><br />
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_13_:_Internationalization&diff=789
Tutorial Odoo 9.0 Part 13 : Internationalization
2016-07-19T11:01:55Z
<p>Bombay: /* Internationalization เว็บหลายภาษา */</p>
<hr />
<div>== Internationalization เว็บหลายภาษา ==<br />
*ในส่วนนี้จะเป็นการ ดัดแปลงภาษาภายในเว็บ <br />
*สร้าง directory ชื่อ openacademy/i18n/<br />
*เปิดโหมดนักพัฒนา<br />
*โหลดภาษาที่เราต้องการใช้งาน ( Administration ‣ Translations ‣ Load an Official Translation)<br />
<br />
[[ไฟล์:Odoo13-1.png | 800px]]<br />
<br />
*ซึ้งคำศัพท์ให้เป็นล่าสุด (Administration ‣ Translations ‣ Application Terms ‣ Synchronize Translations)<br />
<br />
[[ไฟล์:Odoo13-2.png | 800px]]<br />
<br />
*สร้าง temple ตัวแปลภาษาโดย Export ออกมาจาก Odoo ( Administration ‣ Translations -> Import/Export ‣ Export Translation) เป็นไฟล์ po ลงใน openacademy/i18n/<br />
<br />
[[ไฟล์:Odoo13-3.png | 800px]]<br />
<br />
*ใน model.py ให้เพิ่ม _ เข้าไปใน import <br />
=== แก้ไข model.py ===<br />
<pre>openacademy/models.py<br />
# -*- coding: utf-8 -*-<br />
<br />
from datetime import timedelta<br />
from openerp import models, fields, api, exceptions, _<br />
<br />
class Course(models.Model):<br />
_name = 'openacademy.course'</pre><br />
<br />
<pre> default = dict(default or {})<br />
<br />
copied_count = self.search_count(<br />
[('name', '=like', _(u"Copy of {}%").format(self.name))])<br />
if not copied_count:<br />
new_name = _(u"Copy of {}").format(self.name)<br />
else:<br />
new_name = _(u"Copy of {} ({})").format(self.name, copied_count)<br />
<br />
default['name'] = new_name<br />
return super(Course, self).copy(default)</pre><br />
<br />
<pre> if self.seats < 0:<br />
return {<br />
'warning': {<br />
'title': _("Incorrect 'seats' value"),<br />
'message': _("The number of available seats may not be negative"),<br />
},<br />
}<br />
if self.seats < len(self.attendee_ids):<br />
return {<br />
'warning': {<br />
'title': _("Too many attendees"),<br />
'message': _("Increase seats or remove excess attendees"),<br />
},<br />
}</pre><br />
<br />
<pre>def _check_instructor_not_in_attendees(self):<br />
for r in self:<br />
if r.instructor_id and r.instructor_id in r.attendee_ids:<br />
raise exceptions.ValidationError(_("A session's instructor can't be an attendee"))</pre><br />
<br />
หัวข้อถัดไป [[ Tutorial Odoo 9.0 Part 14 : Reporting ]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_13_:_Internationalization&diff=787
Tutorial Odoo 9.0 Part 13 : Internationalization
2016-07-19T11:00:32Z
<p>Bombay: /* Internationalization เว็บหลายภาษา */</p>
<hr />
<div>== Internationalization เว็บหลายภาษา ==<br />
*ในส่วนนี้จะเป็นการ ดัดแปลงภาษาภายในเว็บ <br />
*สร้าง directory ชื่อ openacademy/i18n/<br />
*เปิดโหมดนักพัฒนา<br />
*โหลดภาษาที่เราต้องการใช้งาน ( Administration ‣ Translations ‣ Load an Official Translation)<br />
<br />
[[ไฟล์:Odoo13-1.png | 800px]]<br />
<br />
*ซึ้งคำศัพท์ให้เป็นล่าสุด (Administration ‣ Translations ‣ Application Terms ‣ Synchronize Translations)<br />
<br />
[[ไฟล์:Odoo13-2.png | 800px]]<br />
<br />
*สร้าง temple ตัวแปลภาษาโดย Export ออกมาจาก Odoo ( Administration ‣ Translations -> Import/Export ‣ Export Translation) เป็นไฟล์ po ลงใน openacademy/i18n/<br />
<br />
[[ไฟล์:Odoo13-3.png | 800px]]<br />
<br />
*ใน model.py ให้เพิ่ม _ เข้าไปใน import <br />
=== แก้ไข model.py ===<br />
<pre>openacademy/models.py<br />
# -*- coding: utf-8 -*-<br />
<br />
from datetime import timedelta<br />
from openerp import models, fields, api, exceptions, _<br />
<br />
class Course(models.Model):<br />
_name = 'openacademy.course'</pre><br />
<br />
<pre> default = dict(default or {})<br />
<br />
copied_count = self.search_count(<br />
[('name', '=like', _(u"Copy of {}%").format(self.name))])<br />
if not copied_count:<br />
new_name = _(u"Copy of {}").format(self.name)<br />
else:<br />
new_name = _(u"Copy of {} ({})").format(self.name, copied_count)<br />
<br />
default['name'] = new_name<br />
return super(Course, self).copy(default)</pre><br />
<br />
<pre> if self.seats < 0:<br />
return {<br />
'warning': {<br />
'title': _("Incorrect 'seats' value"),<br />
'message': _("The number of available seats may not be negative"),<br />
},<br />
}<br />
if self.seats < len(self.attendee_ids):<br />
return {<br />
'warning': {<br />
'title': _("Too many attendees"),<br />
'message': _("Increase seats or remove excess attendees"),<br />
},<br />
}</pre><br />
<br />
<pre>def _check_instructor_not_in_attendees(self):<br />
for r in self:<br />
if r.instructor_id and r.instructor_id in r.attendee_ids:<br />
raise exceptions.ValidationError(_("A session's instructor can't be an attendee"))</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Odoo13-3.png&diff=785
ไฟล์:Odoo13-3.png
2016-07-19T10:59:54Z
<p>Bombay: </p>
<hr />
<div></div>
Bombay
https://wiki.morange.co.th/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Odoo13-2.png&diff=783
ไฟล์:Odoo13-2.png
2016-07-19T10:56:02Z
<p>Bombay: </p>
<hr />
<div></div>
Bombay
https://wiki.morange.co.th/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Odoo13-1.png&diff=782
ไฟล์:Odoo13-1.png
2016-07-19T10:55:04Z
<p>Bombay: </p>
<hr />
<div></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_13_:_Internationalization&diff=780
Tutorial Odoo 9.0 Part 13 : Internationalization
2016-07-19T10:46:37Z
<p>Bombay: /* Internationalization เว็บหลายภาษา */</p>
<hr />
<div>== Internationalization เว็บหลายภาษา ==<br />
*ในส่วนนี้จะเป็นการ ดัดแปลงภาษาภายในเว็บ <br />
*สร้าง directory ชื่อ openacademy/i18n/<br />
*เปิดโหมดนักพัฒนา<br />
*โหลดภาษาที่เราต้องการใช้งาน ( Administration ‣ Translations ‣ Load an Official Translation)<br />
*ซึ้งคำศัพท์ให้เป็นล่าสุด (Administration ‣ Translations ‣ Application Terms ‣ Synchronize Translations)<br />
*สร้าง temple ตัวแปลภาษาโดย Export ออกมาจาก Odoo ( Administration ‣ Translations -> Import/Export ‣ Export Translation) เป็นไฟล์ po ลงใน openacademy/i18n/<br />
*ใน model.py ให้เพิ่ม _ เข้าไปใน import <br />
=== แก้ไข model.py ===<br />
<pre>openacademy/models.py<br />
# -*- coding: utf-8 -*-<br />
<br />
from datetime import timedelta<br />
from openerp import models, fields, api, exceptions, _<br />
<br />
class Course(models.Model):<br />
_name = 'openacademy.course'</pre><br />
<br />
<pre> default = dict(default or {})<br />
<br />
copied_count = self.search_count(<br />
[('name', '=like', _(u"Copy of {}%").format(self.name))])<br />
if not copied_count:<br />
new_name = _(u"Copy of {}").format(self.name)<br />
else:<br />
new_name = _(u"Copy of {} ({})").format(self.name, copied_count)<br />
<br />
default['name'] = new_name<br />
return super(Course, self).copy(default)</pre><br />
<br />
<pre> if self.seats < 0:<br />
return {<br />
'warning': {<br />
'title': _("Incorrect 'seats' value"),<br />
'message': _("The number of available seats may not be negative"),<br />
},<br />
}<br />
if self.seats < len(self.attendee_ids):<br />
return {<br />
'warning': {<br />
'title': _("Too many attendees"),<br />
'message': _("Increase seats or remove excess attendees"),<br />
},<br />
}</pre><br />
<br />
<pre>def _check_instructor_not_in_attendees(self):<br />
for r in self:<br />
if r.instructor_id and r.instructor_id in r.attendee_ids:<br />
raise exceptions.ValidationError(_("A session's instructor can't be an attendee"))</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_13_:_Internationalization&diff=779
Tutorial Odoo 9.0 Part 13 : Internationalization
2016-07-19T10:45:45Z
<p>Bombay: หน้าที่ถูกสร้างด้วย '== Internationalization เว็บหลายภาษา == ในส่วนนี้จะเป็นการ ดัดแป...'</p>
<hr />
<div>== Internationalization เว็บหลายภาษา ==<br />
ในส่วนนี้จะเป็นการ ดัดแปลงภาษาภายในเว็บ <br />
สร้าง directory ชื่อ openacademy/i18n/<br />
เปิดโหมดนักพัฒนา<br />
โหลดภาษาที่เราต้องการใช้งาน ( Administration ‣ Translations ‣ Load an Official Translation)<br />
ซึ้งคำศัพท์ให้เป็นล่าสุด (Administration ‣ Translations ‣ Application Terms ‣ Synchronize Translations)<br />
สร้าง temple ตัวแปลภาษาโดย Export ออกมาจาก Odoo ( Administration ‣ Translations -> Import/Export ‣ Export Translation) เป็นไฟล์ po ลงใน openacademy/i18n/<br />
ใน model.py ให้เพิ่ม _ เข้าไปใน import <br />
=== แก้ไข model.py ===<br />
<pre>openacademy/models.py<br />
# -*- coding: utf-8 -*-<br />
<br />
from datetime import timedelta<br />
from openerp import models, fields, api, exceptions, _<br />
<br />
class Course(models.Model):<br />
_name = 'openacademy.course'</pre><br />
<br />
<pre> default = dict(default or {})<br />
<br />
copied_count = self.search_count(<br />
[('name', '=like', _(u"Copy of {}%").format(self.name))])<br />
if not copied_count:<br />
new_name = _(u"Copy of {}").format(self.name)<br />
else:<br />
new_name = _(u"Copy of {} ({})").format(self.name, copied_count)<br />
<br />
default['name'] = new_name<br />
return super(Course, self).copy(default)</pre><br />
<br />
<pre> if self.seats < 0:<br />
return {<br />
'warning': {<br />
'title': _("Incorrect 'seats' value"),<br />
'message': _("The number of available seats may not be negative"),<br />
},<br />
}<br />
if self.seats < len(self.attendee_ids):<br />
return {<br />
'warning': {<br />
'title': _("Too many attendees"),<br />
'message': _("Increase seats or remove excess attendees"),<br />
},<br />
}</pre><br />
<br />
<pre>def _check_instructor_not_in_attendees(self):<br />
for r in self:<br />
if r.instructor_id and r.instructor_id in r.attendee_ids:<br />
raise exceptions.ValidationError(_("A session's instructor can't be an attendee"))</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=769
Tutorial Odoo 9.0
2016-07-19T10:09:25Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module Tutorial Odoo 9.0 Part 2 : การ Install Module]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_4_:_Basic_View Tutorial Odoo 9.0 Part 4 : Basic View]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_5_:_Relations_between_models Tutorial Odoo 9.0 Part 5 : Relations between models]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_6_:_Inheritance Tutorial Odoo 9.0 Part 6 : Inheritance]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_7_:_Computed_fields_and_default_values Tutorial Odoo 9.0 Part 7 : Computed fields & default values]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_8_:_Onchange_%26_Model_constraints Tutorial Odoo 9.0 Part 8 : Onchange & Model constraints]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_9_:_Advanced_Views Tutorial Odoo 9.0 Part 9 : Advanced Views]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_10_:_Workflows Tutorial Odoo 9.0 Part 10 : Workflows]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_11_:_Security Tutorial Odoo 9.0 Part 11 : Security]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_12_:_Wizards Tutorial Odoo 9.0 Part 12 : Wizards]<br />
* [[Tutorial Odoo 9.0 Part 13 : Internationalization]]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br/><br/><br />
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre>sudo nano /etc/odoo/openerp-server.conf </pre><br />
<br />
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br />
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br/><br />
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br/><br/><br/><br />
3. แก้ไขไฟล์ ต่างๆ ดังนี้<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br/><br/><br />
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=768
Tutorial Odoo 9.0
2016-07-19T10:09:09Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module Tutorial Odoo 9.0 Part 2 : การ Install Module]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_4_:_Basic_View Tutorial Odoo 9.0 Part 4 : Basic View]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_5_:_Relations_between_models Tutorial Odoo 9.0 Part 5 : Relations between models]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_6_:_Inheritance Tutorial Odoo 9.0 Part 6 : Inheritance]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_7_:_Computed_fields_and_default_values Tutorial Odoo 9.0 Part 7 : Computed fields & default values]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_8_:_Onchange_%26_Model_constraints Tutorial Odoo 9.0 Part 8 : Onchange & Model constraints]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_9_:_Advanced_Views Tutorial Odoo 9.0 Part 9 : Advanced Views]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_10_:_Workflows Tutorial Odoo 9.0 Part 10 : Workflows]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_11_:_Security Tutorial Odoo 9.0 Part 11 : Security]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_12_:_Wizards Tutorial Odoo 9.0 Part 12 : Wizards]<br />
[[Tutorial Odoo 9.0 Part 13 : Internationalization]]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br/><br/><br />
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre>sudo nano /etc/odoo/openerp-server.conf </pre><br />
<br />
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br />
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br/><br />
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br/><br/><br/><br />
3. แก้ไขไฟล์ ต่างๆ ดังนี้<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br/><br/><br />
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_11_:_Security&diff=766
Tutorial Odoo 9.0 Part 11 : Security
2016-07-19T09:04:34Z
<p>Bombay: /* Security ความปลอดภัย */</p>
<hr />
<div>== Security ความปลอดภัย ==<br />
* เปิดโหมดนักพัฒนา<br />
* สร้างใหม่ชื่อ Tan Smith ผ่าน Settings ‣ Users ‣ Users<br />
* สร้างกลุ่มใหม่ชื่อ session_read ผ่าน Settings ‣ Users ‣ Groups มันจะอ่านค่าจาก model seesion<br />
* แก้ Tan Smith และทำให้เขาอยู่ในกลุ่ม session_read<br />
<br />
[[ไฟล์:Odoo11-1.png]]<br />
<br />
=== การกำหนดสิทธิ์เข้าใช้งาน ===<br />
* ลักษณะไฟล์จะมองเป็นแบบ CSV ขั้นด้วย จุลภาค ตัวอย่าง <br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_idea_idea,idea.idea,model_idea_idea,base.group_user,1,1,1,0<br />
access_idea_vote,idea.vote,model_idea_vote,base.group_user,1,1,1,0<br />
</pre><br />
<br />
==== แก้ openacademy/__openerp__.py ====<br />
<pre> # always loaded<br />
'data': [<br />
'security/security.xml',<br />
'security/ir.model.access.csv',<br />
'templates.xml',<br />
'views/openacademy.xml',<br />
'views/partner.xml',</pre><br />
<br />
==== แก้ openacademy/security/ir.model.access.csv ====<br />
<pre>id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
course_manager,course manager,model_openacademy_course,group_manager,1,1,1,1<br />
session_manager,session manager,model_openacademy_session,group_manager,1,1,1,1<br />
course_read_all,course all,model_openacademy_course,,1,0,0,0<br />
session_read_all,session all,model_openacademy_session,,1,0,0,0</pre><br />
<br />
==== แก้ openacademy/security/security.xml ====<br />
<pre><openerp><br />
<data><br />
<record id="group_manager" model="res.groups"><br />
<field name="name">OpenAcademy / Manager</field><br />
</record><br />
</data><br />
</openerp></pre><br />
<br />
*เสร็จแล้วเราจะสามารถสร้างสิทธิ์การใช้งาน ได้แล้ว<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 12 : Wizards]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Odoo11-1.png&diff=765
ไฟล์:Odoo11-1.png
2016-07-19T09:04:16Z
<p>Bombay: </p>
<hr />
<div></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_11_:_Security&diff=764
Tutorial Odoo 9.0 Part 11 : Security
2016-07-19T09:02:43Z
<p>Bombay: /* แก้ openacademy/security/security.xml */</p>
<hr />
<div>== Security ความปลอดภัย ==<br />
* เปิดโหมดนักพัฒนา<br />
* สร้างใหม่ชื่อ Tan Smith ผ่าน Settings ‣ Users ‣ Users<br />
* สร้างกลุ่มใหม่ชื่อ session_read ผ่าน Settings ‣ Users ‣ Groups มันจะอ่านค่าจาก model seesion<br />
* แก้ Tan Smith และทำให้เขาอยู่ในกลุ่ม session_read<br />
<br />
[[ไฟล์:ตัวอย่าง.jpg]]<br />
<br />
=== การกำหนดสิทธิ์เข้าใช้งาน ===<br />
* ลักษณะไฟล์จะมองเป็นแบบ CSV ขั้นด้วย จุลภาค ตัวอย่าง <br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_idea_idea,idea.idea,model_idea_idea,base.group_user,1,1,1,0<br />
access_idea_vote,idea.vote,model_idea_vote,base.group_user,1,1,1,0<br />
</pre><br />
<br />
==== แก้ openacademy/__openerp__.py ====<br />
<pre> # always loaded<br />
'data': [<br />
'security/security.xml',<br />
'security/ir.model.access.csv',<br />
'templates.xml',<br />
'views/openacademy.xml',<br />
'views/partner.xml',</pre><br />
<br />
==== แก้ openacademy/security/ir.model.access.csv ====<br />
<pre>id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
course_manager,course manager,model_openacademy_course,group_manager,1,1,1,1<br />
session_manager,session manager,model_openacademy_session,group_manager,1,1,1,1<br />
course_read_all,course all,model_openacademy_course,,1,0,0,0<br />
session_read_all,session all,model_openacademy_session,,1,0,0,0</pre><br />
<br />
==== แก้ openacademy/security/security.xml ====<br />
<pre><openerp><br />
<data><br />
<record id="group_manager" model="res.groups"><br />
<field name="name">OpenAcademy / Manager</field><br />
</record><br />
</data><br />
</openerp></pre><br />
<br />
*เสร็จแล้วเราจะสามารถสร้างสิทธิ์การใช้งาน ได้แล้ว<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 12 : Wizards]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_11_:_Security&diff=763
Tutorial Odoo 9.0 Part 11 : Security
2016-07-19T08:59:31Z
<p>Bombay: /* Security ความปลอดภัย */</p>
<hr />
<div>== Security ความปลอดภัย ==<br />
* เปิดโหมดนักพัฒนา<br />
* สร้างใหม่ชื่อ Tan Smith ผ่าน Settings ‣ Users ‣ Users<br />
* สร้างกลุ่มใหม่ชื่อ session_read ผ่าน Settings ‣ Users ‣ Groups มันจะอ่านค่าจาก model seesion<br />
* แก้ Tan Smith และทำให้เขาอยู่ในกลุ่ม session_read<br />
<br />
[[ไฟล์:ตัวอย่าง.jpg]]<br />
<br />
=== การกำหนดสิทธิ์เข้าใช้งาน ===<br />
* ลักษณะไฟล์จะมองเป็นแบบ CSV ขั้นด้วย จุลภาค ตัวอย่าง <br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_idea_idea,idea.idea,model_idea_idea,base.group_user,1,1,1,0<br />
access_idea_vote,idea.vote,model_idea_vote,base.group_user,1,1,1,0<br />
</pre><br />
<br />
==== แก้ openacademy/__openerp__.py ====<br />
<pre> # always loaded<br />
'data': [<br />
'security/security.xml',<br />
'security/ir.model.access.csv',<br />
'templates.xml',<br />
'views/openacademy.xml',<br />
'views/partner.xml',</pre><br />
<br />
==== แก้ openacademy/security/ir.model.access.csv ====<br />
<pre>id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
course_manager,course manager,model_openacademy_course,group_manager,1,1,1,1<br />
session_manager,session manager,model_openacademy_session,group_manager,1,1,1,1<br />
course_read_all,course all,model_openacademy_course,,1,0,0,0<br />
session_read_all,session all,model_openacademy_session,,1,0,0,0</pre><br />
<br />
==== แก้ openacademy/security/security.xml ====<br />
<pre><openerp><br />
<data><br />
<record id="group_manager" model="res.groups"><br />
<field name="name">OpenAcademy / Manager</field><br />
</record><br />
</data><br />
</openerp></pre><br />
<br />
*เสร็จแล้วเราจะสามารถสร้างสิทธิ์การใช้งาน ได้แล้ว<br />
<br />
หัวข้อถัดไป</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_11_:_Security&diff=760
Tutorial Odoo 9.0 Part 11 : Security
2016-07-19T08:01:57Z
<p>Bombay: หน้าที่ถูกสร้างด้วย '== Security ความปลอดภัย =='</p>
<hr />
<div>== Security ความปลอดภัย ==</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_10_:_Workflows&diff=759
Tutorial Odoo 9.0 Part 10 : Workflows
2016-07-19T08:01:39Z
<p>Bombay: /* Workflow */</p>
<hr />
<div>== Workflow ==<br />
เป็นการเขียนให้ แสดงรูปแบบลำดับการทำงานของขั้นตอน <br />
<br />
=== แก้ไข openacademy/models.py ===<br />
<pre><br />
attendees_count = fields.Integer(<br />
string="Attendees count", compute='_get_attendees_count', store=True)<br />
<br />
state = fields.Selection([<br />
('draft', "Draft"),<br />
('confirmed', "Confirmed"),<br />
('done', "Done"),<br />
], default='draft')<br />
<br />
@api.multi<br />
def action_draft(self):<br />
self.state = 'draft'<br />
<br />
@api.multi<br />
def action_confirm(self):<br />
self.state = 'confirmed'<br />
<br />
@api.multi<br />
def action_done(self):<br />
self.state = 'done'<br />
<br />
@api.depends('seats', 'attendee_ids')<br />
def _taken_seats(self):<br />
for r in self:<br />
</pre><br />
<br />
=== แก้ไข openacademy/openacademy.py ===<br />
<pre><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<form string="Session Form"><br />
<header><br />
<button name="action_draft" type="object"<br />
string="Reset to draft"<br />
states="confirmed,done"/><br />
<button name="action_confirm" type="object"<br />
string="Confirm" states="draft"<br />
class="oe_highlight"/><br />
<button name="action_done" type="object"<br />
string="Mark as done" states="confirmed"<br />
class="oe_highlight"/><br />
<field name="state" widget="statusbar"/><br />
</header><br />
<br />
<sheet><br />
<group><br />
<group string="General"><br />
</pre><br />
<br />
*จะได้ผลลัพธ์ เป็นดังนี้ คือจะแสดงระบบการทำงานให้เห็นว่าจะไปพบกับอะไรบ้าง <br />
<br />
[[ไฟล์:Odoo10-1.png|800 px]]<br />
<br />
=== แก้ openacademy/__openerp__.py ===<br />
<pre>'templates.xml',<br />
'views/openacademy.xml',<br />
'views/partner.xml',<br />
'views/session_workflow.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [</pre><br />
=== แก้ openacademy/models.py ===<br />
<pre> ('draft', "Draft"),<br />
('confirmed', "Confirmed"),<br />
('done', "Done"),<br />
])<br />
<br />
@api.multi<br />
def action_draft(self):</pre><br />
=== แก้ openacademy/views/openacademy.xml ===<br />
<pre><field name="arch" type="xml"><br />
<form string="Session Form"><br />
<header><br />
<button name="draft" type="workflow"<br />
string="Reset to draft"<br />
states="confirmed,done"/><br />
<button name="confirm" type="workflow"<br />
string="Confirm" states="draft"<br />
class="oe_highlight"/><br />
<button name="done" type="workflow"<br />
string="Mark as done" states="confirmed"<br />
class="oe_highlight"/><br />
<field name="state" widget="statusbar"/></pre><br />
=== สร้าง openacademy/views/session_workflow.xml ===<br />
<pre><openerp><br />
<data><br />
<record model="workflow" id="wkf_session"><br />
<field name="name">OpenAcademy sessions workflow</field><br />
<field name="osv">openacademy.session</field><br />
<field name="on_create">True</field><br />
</record><br />
<br />
<record model="workflow.activity" id="draft"><br />
<field name="name">Draft</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="flow_start" eval="True"/><br />
<field name="kind">function</field><br />
<field name="action">action_draft()</field><br />
</record><br />
<record model="workflow.activity" id="confirmed"><br />
<field name="name">Confirmed</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="kind">function</field><br />
<field name="action">action_confirm()</field><br />
</record><br />
<record model="workflow.activity" id="done"><br />
<field name="name">Done</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="kind">function</field><br />
<field name="action">action_done()</field><br />
</record><br />
<br />
<record model="workflow.transition" id="session_draft_to_confirmed"><br />
<field name="act_from" ref="draft"/><br />
<field name="act_to" ref="confirmed"/><br />
<field name="signal">confirm</field><br />
</record><br />
<record model="workflow.transition" id="session_confirmed_to_draft"><br />
<field name="act_from" ref="confirmed"/><br />
<field name="act_to" ref="draft"/><br />
<field name="signal">draft</field><br />
</record><br />
<record model="workflow.transition" id="session_done_to_draft"><br />
<field name="act_from" ref="done"/><br />
<field name="act_to" ref="draft"/><br />
<field name="signal">draft</field><br />
</record><br />
<record model="workflow.transition" id="session_confirmed_to_done"><br />
<field name="act_from" ref="confirmed"/><br />
<field name="act_to" ref="done"/><br />
<field name="signal">done</field><br />
</record><br />
</data><br />
</openerp></pre><br />
=== แก้ openacademy/views/session_workflow.xml ===<br />
<pre><field name="act_to" ref="done"/><br />
<field name="signal">done</field><br />
</record><br />
<br />
<record model="workflow.transition" id="session_auto_confirm_half_filled"><br />
<field name="act_from" ref="draft"/><br />
<field name="act_to" ref="confirmed"/><br />
<field name="condition">taken_seats &gt; 50</field><br />
</record><br />
</data><br />
</openerp></pre><br />
=== แก้ openacademy/views/session_workflow.xml ===<br />
<pre><field name="on_create">True</field><br />
</record><br />
<br />
<record model="ir.actions.server" id="set_session_to_draft"><br />
<field name="name">Set session to Draft</field><br />
<field name="model_id" ref="model_openacademy_session"/><br />
<field name="code"><br />
model.search([('id', 'in', context['active_ids'])]).action_draft()<br />
</field><br />
</record><br />
<record model="workflow.activity" id="draft"><br />
<field name="name">Draft</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="flow_start" eval="True"/><br />
<field name="kind">dummy</field><br />
<field name="action"></field><br />
<field name="action_id" ref="set_session_to_draft"/><br />
</record><br />
<br />
<record model="ir.actions.server" id="set_session_to_confirmed"><br />
<field name="name">Set session to Confirmed</field><br />
<field name="model_id" ref="model_openacademy_session"/><br />
<field name="code"><br />
model.search([('id', 'in', context['active_ids'])]).action_confirm()<br />
</field><br />
</record><br />
<record model="workflow.activity" id="confirmed"><br />
<field name="name">Confirmed</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="kind">dummy</field><br />
<field name="action"></field><br />
<field name="action_id" ref="set_session_to_confirmed"/><br />
</record><br />
<br />
<record model="ir.actions.server" id="set_session_to_done"><br />
<field name="name">Set session to Done</field><br />
<field name="model_id" ref="model_openacademy_session"/><br />
<field name="code"><br />
model.search([('id', 'in', context['active_ids'])]).action_done()<br />
</field><br />
</record><br />
<record model="workflow.activity" id="done"><br />
<field name="name">Done</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="kind">dummy</field><br />
<field name="action"></field><br />
<field name="action_id" ref="set_session_to_done"/><br />
</record><br />
<br />
<record model="workflow.transition" id="session_draft_to_confirmed"></pre><br />
<br />
*จะได้หน้าของ workflow<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 11 : Security]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_10_:_Workflows&diff=758
Tutorial Odoo 9.0 Part 10 : Workflows
2016-07-19T07:56:10Z
<p>Bombay: /* Workflow */</p>
<hr />
<div>== Workflow ==<br />
เป็นการเขียนให้ แสดงรูปแบบลำดับการทำงานของขั้นตอน <br />
<br />
=== แก้ไข openacademy/models.py ===<br />
<pre><br />
attendees_count = fields.Integer(<br />
string="Attendees count", compute='_get_attendees_count', store=True)<br />
<br />
state = fields.Selection([<br />
('draft', "Draft"),<br />
('confirmed', "Confirmed"),<br />
('done', "Done"),<br />
], default='draft')<br />
<br />
@api.multi<br />
def action_draft(self):<br />
self.state = 'draft'<br />
<br />
@api.multi<br />
def action_confirm(self):<br />
self.state = 'confirmed'<br />
<br />
@api.multi<br />
def action_done(self):<br />
self.state = 'done'<br />
<br />
@api.depends('seats', 'attendee_ids')<br />
def _taken_seats(self):<br />
for r in self:<br />
</pre><br />
<br />
=== แก้ไข openacademy/openacademy.py ===<br />
<pre><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<form string="Session Form"><br />
<header><br />
<button name="action_draft" type="object"<br />
string="Reset to draft"<br />
states="confirmed,done"/><br />
<button name="action_confirm" type="object"<br />
string="Confirm" states="draft"<br />
class="oe_highlight"/><br />
<button name="action_done" type="object"<br />
string="Mark as done" states="confirmed"<br />
class="oe_highlight"/><br />
<field name="state" widget="statusbar"/><br />
</header><br />
<br />
<sheet><br />
<group><br />
<group string="General"><br />
</pre><br />
<br />
*จะได้ผลลัพธ์ เป็นดังนี้ คือจะแสดงระบบการทำงานให้เห็นว่าจะไปพบกับอะไรบ้าง <br />
<br />
[[ไฟล์:Odoo10-1.png|800 px]]<br />
<br />
=== แก้ openacademy/__openerp__.py ===<br />
<pre>'templates.xml',<br />
'views/openacademy.xml',<br />
'views/partner.xml',<br />
'views/session_workflow.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [</pre><br />
=== แก้ openacademy/models.py ===<br />
<pre> ('draft', "Draft"),<br />
('confirmed', "Confirmed"),<br />
('done', "Done"),<br />
])<br />
<br />
@api.multi<br />
def action_draft(self):</pre><br />
=== แก้ openacademy/views/openacademy.xml ===<br />
<pre><field name="arch" type="xml"><br />
<form string="Session Form"><br />
<header><br />
<button name="draft" type="workflow"<br />
string="Reset to draft"<br />
states="confirmed,done"/><br />
<button name="confirm" type="workflow"<br />
string="Confirm" states="draft"<br />
class="oe_highlight"/><br />
<button name="done" type="workflow"<br />
string="Mark as done" states="confirmed"<br />
class="oe_highlight"/><br />
<field name="state" widget="statusbar"/></pre><br />
=== สร้าง openacademy/views/session_workflow.xml ===<br />
<pre><openerp><br />
<data><br />
<record model="workflow" id="wkf_session"><br />
<field name="name">OpenAcademy sessions workflow</field><br />
<field name="osv">openacademy.session</field><br />
<field name="on_create">True</field><br />
</record><br />
<br />
<record model="workflow.activity" id="draft"><br />
<field name="name">Draft</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="flow_start" eval="True"/><br />
<field name="kind">function</field><br />
<field name="action">action_draft()</field><br />
</record><br />
<record model="workflow.activity" id="confirmed"><br />
<field name="name">Confirmed</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="kind">function</field><br />
<field name="action">action_confirm()</field><br />
</record><br />
<record model="workflow.activity" id="done"><br />
<field name="name">Done</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="kind">function</field><br />
<field name="action">action_done()</field><br />
</record><br />
<br />
<record model="workflow.transition" id="session_draft_to_confirmed"><br />
<field name="act_from" ref="draft"/><br />
<field name="act_to" ref="confirmed"/><br />
<field name="signal">confirm</field><br />
</record><br />
<record model="workflow.transition" id="session_confirmed_to_draft"><br />
<field name="act_from" ref="confirmed"/><br />
<field name="act_to" ref="draft"/><br />
<field name="signal">draft</field><br />
</record><br />
<record model="workflow.transition" id="session_done_to_draft"><br />
<field name="act_from" ref="done"/><br />
<field name="act_to" ref="draft"/><br />
<field name="signal">draft</field><br />
</record><br />
<record model="workflow.transition" id="session_confirmed_to_done"><br />
<field name="act_from" ref="confirmed"/><br />
<field name="act_to" ref="done"/><br />
<field name="signal">done</field><br />
</record><br />
</data><br />
</openerp></pre><br />
=== แก้ openacademy/views/session_workflow.xml ===<br />
<pre><field name="act_to" ref="done"/><br />
<field name="signal">done</field><br />
</record><br />
<br />
<record model="workflow.transition" id="session_auto_confirm_half_filled"><br />
<field name="act_from" ref="draft"/><br />
<field name="act_to" ref="confirmed"/><br />
<field name="condition">taken_seats &gt; 50</field><br />
</record><br />
</data><br />
</openerp></pre><br />
=== แก้ openacademy/views/session_workflow.xml ===<br />
<pre><field name="on_create">True</field><br />
</record><br />
<br />
<record model="ir.actions.server" id="set_session_to_draft"><br />
<field name="name">Set session to Draft</field><br />
<field name="model_id" ref="model_openacademy_session"/><br />
<field name="code"><br />
model.search([('id', 'in', context['active_ids'])]).action_draft()<br />
</field><br />
</record><br />
<record model="workflow.activity" id="draft"><br />
<field name="name">Draft</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="flow_start" eval="True"/><br />
<field name="kind">dummy</field><br />
<field name="action"></field><br />
<field name="action_id" ref="set_session_to_draft"/><br />
</record><br />
<br />
<record model="ir.actions.server" id="set_session_to_confirmed"><br />
<field name="name">Set session to Confirmed</field><br />
<field name="model_id" ref="model_openacademy_session"/><br />
<field name="code"><br />
model.search([('id', 'in', context['active_ids'])]).action_confirm()<br />
</field><br />
</record><br />
<record model="workflow.activity" id="confirmed"><br />
<field name="name">Confirmed</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="kind">dummy</field><br />
<field name="action"></field><br />
<field name="action_id" ref="set_session_to_confirmed"/><br />
</record><br />
<br />
<record model="ir.actions.server" id="set_session_to_done"><br />
<field name="name">Set session to Done</field><br />
<field name="model_id" ref="model_openacademy_session"/><br />
<field name="code"><br />
model.search([('id', 'in', context['active_ids'])]).action_done()<br />
</field><br />
</record><br />
<record model="workflow.activity" id="done"><br />
<field name="name">Done</field><br />
<field name="wkf_id" ref="wkf_session"/><br />
<field name="kind">dummy</field><br />
<field name="action"></field><br />
<field name="action_id" ref="set_session_to_done"/><br />
</record><br />
<br />
<record model="workflow.transition" id="session_draft_to_confirmed"></pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Odoo10-1.png&diff=757
ไฟล์:Odoo10-1.png
2016-07-19T07:28:25Z
<p>Bombay: </p>
<hr />
<div></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_10_:_Workflows&diff=755
Tutorial Odoo 9.0 Part 10 : Workflows
2016-07-19T05:54:45Z
<p>Bombay: หน้าที่ถูกสร้างด้วย '== Workflow =='</p>
<hr />
<div>== Workflow ==</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=753
Tutorial Odoo 9.0
2016-07-19T05:52:27Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module Tutorial Odoo 9.0 Part 2 : การ Install Module]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_4_:_Basic_View Tutorial Odoo 9.0 Part 4 : Basic View]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_5_:_Relations_between_models Tutorial Odoo 9.0 Part 5 : Relations between models]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_6_:_Inheritance Tutorial Odoo 9.0 Part 6 : Inheritance]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_7_:_Computed_fields_and_default_values Tutorial Odoo 9.0 Part 7 : Computed fields & default values]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_8_:_Onchange_%26_Model_constraints Tutorial Odoo 9.0 Part 8 : Onchange & Model constraints]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_9_:_Advanced_Views Tutorial Odoo 9.0 Part 9 : Advanced Views]<br />
*[[Tutorial Odoo 9.0 Part 10 : Workflows]]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br/><br/><br />
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre>sudo nano /etc/odoo/openerp-server.conf </pre><br />
<br />
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br />
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br/><br />
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br/><br/><br/><br />
3. แก้ไขไฟล์ ต่างๆ ดังนี้<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br/><br/><br />
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_5_:_Relations_between_models&diff=721
Tutorial Odoo 9.0 Part 5 : Relations between models
2016-07-15T08:30:12Z
<p>Bombay: </p>
<hr />
<div><h3>Relations between models</h3><br />
ความสัมพันธ์ของ Model กับ Model โดยใน Part นี้จะสอนวิธีการเขียนโปรแกรมให้ Model เชื่อมต่อกัน <br />
<br />
* แก้ไขไฟล์ดังนี้<br />
<br />
<h3>openacademy/models.py</h3><br />
<pre><br />
<!-- เพิ่มไฟล์ต่อจาก Class ล่าสุด --><br />
class Session(models.Model):<br />
_name = 'openacademy.session'<br />
<br />
name = fields.Char(required=True)<br />
start_date = fields.Date()<br />
duration = fields.Float(digits=(6, 2), help="Duration in days")<br />
seats = fields.Integer(string="Number of seats")<br />
</pre><br />
<br />
<h3>openacademy/views/openacademy.xml</h3><br />
<pre><br />
<!-- เพิ่มข้อความลงไป --><br />
<br />
<!-- session form view --><br />
<record model="ir.ui.view" id="session_form_view"><br />
<field name="name">session.form</field><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<form string="Session Form"><br />
<sheet><br />
<group><br />
<field name="name"/><br />
<field name="start_date"/><br />
<field name="duration"/><br />
<field name="seats"/><br />
</group><br />
</sheet><br />
</form><br />
</field><br />
</record><br />
<br />
<record model="ir.actions.act_window" id="session_list_action"><br />
<field name="name">Sessions</field><br />
<field name="res_model">openacademy.session</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
</record><br />
<br />
<menuitem id="session_menu" name="Sessions"<br />
parent="openacademy_menu"<br />
action="session_list_action"/><br />
</data><br />
</openerp><br />
</pre><br />
<br />
* ทำการ Update เพื่อทำการแสดงผลลัพท์<br />
<br />
[[ไฟล์:Odoo5-1.png | 600 px]]<br />
<br />
<br />
* จะได้ผลที่เกิดตามภาพคือ จะมีแถบ Session ตรงข้างขวา<br />
<br />
== Many2one Relations ==<br />
<br />
* ขั้นตอนต่อจากนี้จะเป็นการ เขียน Model ให้มีความสัมพันธ์กันแบบ Many to one <br/><br />
<br />
=== แก้ไข openacademy/models.py ===<br />
<pre><br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
<br />
<!-- เพิ่มข้อความตรงนี้ --><br />
responsible_id = fields.Many2one('res.users',<br />
ondelete='set null', string="Responsible", index=True)<br />
<-- จบ --><br />
<br />
class Session(models.Model):<br />
_name = 'openacademy.session'<br />
</pre><br />
<br />
<pre><br />
start_date = fields.Date()<br />
duration = fields.Float(digits=(6, 2), help="Duration in days")<br />
seats = fields.Integer(string="Number of seats")<br />
<br />
<!-- เพิ่มข้อความตรงนี้ --><br />
instructor_id = fields.Many2one('res.partner', string="Instructor")<br />
course_id = fields.Many2one('openacademy.course',<br />
ondelete='cascade', string="Course", required=True)<br />
<-- จบ --><br />
</pre><br />
<br />
=== openacademy/views/openacademy.xml ===<br />
<br />
<pre><br />
<sheet><br />
<group><br />
<field name="name"/><br />
<!-- เพิ่มข้อความ --><br />
<field name="responsible_id"/><br />
<-- จบ --><br />
</group><br />
<notebook><br />
<page string="Description"><br />
</pre><br />
<br />
<pre><br />
</field><br />
</record><br />
<br />
<!-- เพิ่มข้อความตรงนี้ --><br />
<!-- override the automatically generated list view for courses --><br />
<record model="ir.ui.view" id="course_tree_view"><br />
<field name="name">course.tree</field><br />
<field name="model">openacademy.course</field><br />
<field name="arch" type="xml"><br />
<tree string="Course Tree"><br />
<field name="name"/><br />
<field name="responsible_id"/><br />
</tree><br />
</field><br />
</record><br />
<!-- จบ--><br />
<!-- window action --><br />
<!--<br />
The following tag is an action definition for a "window action",<br />
</pre><br />
<br />
<pre><br />
<form string="Session Form"><br />
<sheet><br />
<group><br />
<!-- เพิ่มข้อความตรงนี้ --><br />
<group string="General"><br />
<field name="course_id"/><br />
<field name="name"/><br />
<field name="instructor_id"/><br />
</group><br />
<group string="Schedule"><br />
<field name="start_date"/><br />
<field name="duration"/><br />
<field name="seats"/><br />
</group><br />
<!-- จบ --><br />
</group><br />
</sheet><br />
</form><br />
</field><br />
</record><br />
<!-- เพิ่มข้อความตรงนี้ --><br />
<!-- session tree/list view --><br />
<record model="ir.ui.view" id="session_tree_view"><br />
<field name="name">session.tree</field><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<tree string="Session Tree"><br />
<field name="name"/><br />
<field name="course_id"/><br />
</tree><br />
</field><br />
</record><br />
<!-- จบ --><br />
</pre><br />
<br />
* จะได้พบกับความสัมพันธ์แบบ Many2one<br />
<br />
== Many2Many ==<br />
<br />
<br />
=== openacademy/models.py=== <br/><br />
<br />
<pre><br />
instructor_id = fields.Many2one('res.partner', string="Instructor")<br />
course_id = fields.Many2one('openacademy.course',<br />
ondelete='cascade', string="Course", required=True)<br />
attendee_ids = fields.Many2many('res.partner', string="Attendees")<br />
</pre><br />
<br />
=== openacademy/views/openacademy.xml === <br/><br />
<pre><br />
<field name="seats"/><br />
</group><br />
</group><br />
<!-- เพิ่มข้อความตรงนี้ --><br />
<label for="attendee_ids"/><br />
<field name="attendee_ids"/><br />
<!-- จบ --><br />
</sheet><br />
</form><br />
</field><br />
</pre><br />
<br />
สังเกตผลลัพท์ที่ได้ ดังรูปนี้ <br />
<br />
[[ไฟล์:Odoo5-2.png|800px]]<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 6 : Inheritance]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Odoo5-2.png&diff=719
ไฟล์:Odoo5-2.png
2016-07-15T08:29:25Z
<p>Bombay: </p>
<hr />
<div></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_5_:_Relations_between_models&diff=687
Tutorial Odoo 9.0 Part 5 : Relations between models
2016-07-14T11:47:29Z
<p>Bombay: /* Many2one Relations */</p>
<hr />
<div><h3>Relations between models</h3><br />
ความสัมพันธ์ของ Model กับ Model โดยใน Part นี้จะสอนวิธีการเขียนโปรแกรมให้ Model เชื่อมต่อกัน <br />
<br />
* แก้ไขไฟล์ดังนี้<br />
<br />
<h3>openacademy/models.py</h3><br />
<pre><br />
<!-- เพิ่มไฟล์ต่อจาก Class ล่าสุด --><br />
class Session(models.Model):<br />
_name = 'openacademy.session'<br />
<br />
name = fields.Char(required=True)<br />
start_date = fields.Date()<br />
duration = fields.Float(digits=(6, 2), help="Duration in days")<br />
seats = fields.Integer(string="Number of seats")<br />
</pre><br />
<br />
<h3>openacademy/views/openacademy.xml</h3><br />
<pre><br />
<!-- เพิ่มข้อความลงไป --><br />
<br />
<!-- session form view --><br />
<record model="ir.ui.view" id="session_form_view"><br />
<field name="name">session.form</field><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<form string="Session Form"><br />
<sheet><br />
<group><br />
<field name="name"/><br />
<field name="start_date"/><br />
<field name="duration"/><br />
<field name="seats"/><br />
</group><br />
</sheet><br />
</form><br />
</field><br />
</record><br />
<br />
<record model="ir.actions.act_window" id="session_list_action"><br />
<field name="name">Sessions</field><br />
<field name="res_model">openacademy.session</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
</record><br />
<br />
<menuitem id="session_menu" name="Sessions"<br />
parent="openacademy_menu"<br />
action="session_list_action"/><br />
</data><br />
</openerp><br />
</pre><br />
<br />
* ทำการ Update เพื่อทำการแสดงผลลัพท์<br />
<br />
[[ไฟล์:Odoo5-1.png | 600 px]]<br />
<br />
<br />
* จะได้ผลที่เกิดตามภาพคือ จะมีแถบ Session ตรงข้างขวา<br />
<br />
== Many2one Relations ==<br />
<br />
* ขั้นตอนต่อจากนี้จะเป็นการ เขียน Model ให้มีความสัมพันธ์กันแบบ Many to one <br/><br />
<br />
=== แก้ไข openacademy/models.py ===<br />
<pre><br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
<br />
<!-- เพิ่มข้อความตรงนี้ --><br />
responsible_id = fields.Many2one('res.users',<br />
ondelete='set null', string="Responsible", index=True)<br />
<-- จบ --><br />
<br />
class Session(models.Model):<br />
_name = 'openacademy.session'<br />
</pre><br />
<br />
<pre><br />
start_date = fields.Date()<br />
duration = fields.Float(digits=(6, 2), help="Duration in days")<br />
seats = fields.Integer(string="Number of seats")<br />
<br />
<!-- เพิ่มข้อความตรงนี้ --><br />
instructor_id = fields.Many2one('res.partner', string="Instructor")<br />
course_id = fields.Many2one('openacademy.course',<br />
ondelete='cascade', string="Course", required=True)<br />
<-- จบ --><br />
</pre><br />
<br />
=== openacademy/views/openacademy.xml ===<br />
<br />
<pre><br />
<sheet><br />
<group><br />
<field name="name"/><br />
<!-- เพิ่มข้อความ --><br />
<field name="responsible_id"/><br />
<-- จบ --><br />
</group><br />
<notebook><br />
<page string="Description"><br />
</pre><br />
<br />
<pre><br />
</field><br />
</record><br />
<br />
<!-- เพิ่มข้อความตรงนี้ --><br />
<!-- override the automatically generated list view for courses --><br />
<record model="ir.ui.view" id="course_tree_view"><br />
<field name="name">course.tree</field><br />
<field name="model">openacademy.course</field><br />
<field name="arch" type="xml"><br />
<tree string="Course Tree"><br />
<field name="name"/><br />
<field name="responsible_id"/><br />
</tree><br />
</field><br />
</record><br />
<!-- จบ--><br />
<!-- window action --><br />
<!--<br />
The following tag is an action definition for a "window action",<br />
</pre><br />
<br />
<pre><br />
<form string="Session Form"><br />
<sheet><br />
<group><br />
<!-- เพิ่มข้อความตรงนี้ --><br />
<group string="General"><br />
<field name="course_id"/><br />
<field name="name"/><br />
<field name="instructor_id"/><br />
</group><br />
<group string="Schedule"><br />
<field name="start_date"/><br />
<field name="duration"/><br />
<field name="seats"/><br />
</group><br />
<!-- จบ --><br />
</group><br />
</sheet><br />
</form><br />
</field><br />
</record><br />
<!-- เพิ่มข้อความตรงนี้ --><br />
<!-- session tree/list view --><br />
<record model="ir.ui.view" id="session_tree_view"><br />
<field name="name">session.tree</field><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<tree string="Session Tree"><br />
<field name="name"/><br />
<field name="course_id"/><br />
</tree><br />
</field><br />
</record><br />
<!-- จบ --><br />
</pre><br />
<br />
* จะได้พบกับความสัมพันธ์แบบ Many2one</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_5_:_Relations_between_models&diff=684
Tutorial Odoo 9.0 Part 5 : Relations between models
2016-07-14T11:30:36Z
<p>Bombay: </p>
<hr />
<div><h3>Relations between models</h3><br />
ความสัมพันธ์ของ Model กับ Model โดยใน Part นี้จะสอนวิธีการเขียนโปรแกรมให้ Model เชื่อมต่อกัน <br />
<br />
* แก้ไขไฟล์ดังนี้<br />
<br />
<h3>openacademy/models.py</h3><br />
<pre><br />
<!-- เพิ่มไฟล์ต่อจาก Class ล่าสุด --><br />
class Session(models.Model):<br />
_name = 'openacademy.session'<br />
<br />
name = fields.Char(required=True)<br />
start_date = fields.Date()<br />
duration = fields.Float(digits=(6, 2), help="Duration in days")<br />
seats = fields.Integer(string="Number of seats")<br />
</pre><br />
<br />
<h3>openacademy/views/openacademy.xml</h3><br />
<pre><br />
<!-- เพิ่มข้อความลงไป --><br />
<br />
<!-- session form view --><br />
<record model="ir.ui.view" id="session_form_view"><br />
<field name="name">session.form</field><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<form string="Session Form"><br />
<sheet><br />
<group><br />
<field name="name"/><br />
<field name="start_date"/><br />
<field name="duration"/><br />
<field name="seats"/><br />
</group><br />
</sheet><br />
</form><br />
</field><br />
</record><br />
<br />
<record model="ir.actions.act_window" id="session_list_action"><br />
<field name="name">Sessions</field><br />
<field name="res_model">openacademy.session</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
</record><br />
<br />
<menuitem id="session_menu" name="Sessions"<br />
parent="openacademy_menu"<br />
action="session_list_action"/><br />
</data><br />
</openerp><br />
</pre><br />
<br />
* ทำการ Update เพื่อทำการแสดงผลลัพท์<br />
<br />
[[ไฟล์:Odoo5-1.png | 600 px]]<br />
<br />
<br />
* จะได้ผลที่เกิดตามภาพคือ จะมีแถบ Session ตรงข้างขวา<br />
<br />
== Many2one Relations ==<br />
<br />
* ขั้นตอนต่อจากนี้จะเป็นการ เขียน Model ให้มีความสัมพันธ์กันแบบ Many to one <br />
<br />
<pre><br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
<br />
<-- เพิ่มข้อความตรงนี้ --><br />
responsible_id = fields.Many2one('res.users',<br />
ondelete='set null', string="Responsible", index=True)<br />
<-- จบ --><br />
class Session(models.Model):<br />
_name = 'openacademy.session'<br />
</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_5_:_Relations_between_models&diff=683
Tutorial Odoo 9.0 Part 5 : Relations between models
2016-07-14T11:13:01Z
<p>Bombay: </p>
<hr />
<div><h3>Relations between models</h3><br />
ความสัมพันธ์ของ Model กับ Model โดยใน Part นี้จะสอนวิธีการเขียนโปรแกรมให้ Model เชื่อมต่อกัน <br />
<br />
* แก้ไขไฟล์ดังนี้<br />
<br />
<h3>openacademy/models.py</h3><br />
<pre><br />
<!-- เพิ่มไฟล์ต่อจาก Class ล่าสุด --><br />
class Session(models.Model):<br />
_name = 'openacademy.session'<br />
<br />
name = fields.Char(required=True)<br />
start_date = fields.Date()<br />
duration = fields.Float(digits=(6, 2), help="Duration in days")<br />
seats = fields.Integer(string="Number of seats")<br />
</pre><br />
<br />
<h3>openacademy/views/openacademy.xml</h3><br />
<pre><br />
<!-- เพิ่มข้อความลงไป --><br />
<br />
<!-- session form view --><br />
<record model="ir.ui.view" id="session_form_view"><br />
<field name="name">session.form</field><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<form string="Session Form"><br />
<sheet><br />
<group><br />
<field name="name"/><br />
<field name="start_date"/><br />
<field name="duration"/><br />
<field name="seats"/><br />
</group><br />
</sheet><br />
</form><br />
</field><br />
</record><br />
<br />
<record model="ir.actions.act_window" id="session_list_action"><br />
<field name="name">Sessions</field><br />
<field name="res_model">openacademy.session</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
</record><br />
<br />
<menuitem id="session_menu" name="Sessions"<br />
parent="openacademy_menu"<br />
action="session_list_action"/><br />
</data><br />
</openerp><br />
</pre><br />
<br />
ทำการ Update เพื่อทำการแสดงผลลัพท์<br />
<br />
[[ไฟล์:Odoo5-1.png | 600 px]]<br />
<br />
* จะได้ผลที่เกิดตามภาพคือ จะมีแถบ Session ตรงข้างขวา</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_5_:_Relations_between_models&diff=682
Tutorial Odoo 9.0 Part 5 : Relations between models
2016-07-14T11:12:15Z
<p>Bombay: </p>
<hr />
<div><h3>Relations between models</h3><br />
ความสัมพันธ์ของ Model กับ Model โดยใน Part นี้จะสอนวิธีการเขียนโปรแกรมให้ Model เชื่อมต่อกัน <br />
<br />
* แก้ไขไฟล์ดังนี้<br />
<br />
<h3>openacademy/models.py</h3><br />
<pre><br />
<!-- เพิ่มไฟล์ต่อจาก Class ล่าสุด --><br />
class Session(models.Model):<br />
_name = 'openacademy.session'<br />
<br />
name = fields.Char(required=True)<br />
start_date = fields.Date()<br />
duration = fields.Float(digits=(6, 2), help="Duration in days")<br />
seats = fields.Integer(string="Number of seats")<br />
</pre><br />
<br />
<h3>openacademy/views/openacademy.xml</h3><br />
<pre><br />
<!-- เพิ่มข้อความลงไป --><br />
<br />
<!-- session form view --><br />
<record model="ir.ui.view" id="session_form_view"><br />
<field name="name">session.form</field><br />
<field name="model">openacademy.session</field><br />
<field name="arch" type="xml"><br />
<form string="Session Form"><br />
<sheet><br />
<group><br />
<field name="name"/><br />
<field name="start_date"/><br />
<field name="duration"/><br />
<field name="seats"/><br />
</group><br />
</sheet><br />
</form><br />
</field><br />
</record><br />
<br />
<record model="ir.actions.act_window" id="session_list_action"><br />
<field name="name">Sessions</field><br />
<field name="res_model">openacademy.session</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
</record><br />
<br />
<menuitem id="session_menu" name="Sessions"<br />
parent="openacademy_menu"<br />
action="session_list_action"/><br />
</data><br />
</openerp><br />
</pre><br />
<br />
[[ไฟล์:Odoo5-1.png | 600 px]]<br />
<br />
* จะได้ผลที่เกิดตามภาพคือ จะมีแถบ Session ตรงข้างขวา</div>
Bombay
https://wiki.morange.co.th/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Odoo5-1.png&diff=681
ไฟล์:Odoo5-1.png
2016-07-14T11:12:06Z
<p>Bombay: </p>
<hr />
<div></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=664
Tutorial Odoo 9.0
2016-07-14T08:37:31Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module Tutorial Odoo 9.0 Part 2 : การ Install Module]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]<br />
* [[Tutorial Odoo 9.0 Part 4 : Basic View]]<br />
* [[Tutorial Odoo 9.0 Part 5 : Relations between models]]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br/><br/><br />
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre>sudo nano /etc/odoo/openerp-server.conf </pre><br />
<br />
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br />
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br/><br />
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br/><br/><br/><br />
3. แก้ไขไฟล์ ต่างๆ ดังนี้<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br/><br/><br />
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=663
Tutorial Odoo 9.0
2016-07-14T08:36:47Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module Tutorial Odoo 9.0 Part 2 : การ Install Module]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]<br />
* [[Tutorial Odoo 9.0 Part 4 : Basic View]]<br />
* [[Tutorial Odoo 9.0 Part 5 : Relations between models]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br/><br/><br />
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre>sudo nano /etc/odoo/openerp-server.conf </pre><br />
<br />
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br />
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br/><br />
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br/><br/><br/><br />
3. แก้ไขไฟล์ ต่างๆ ดังนี้<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br/><br/><br />
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=662
Tutorial Odoo 9.0
2016-07-14T07:44:05Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module Tutorial Odoo 9.0 Part 2 : การ Install Module]<br />
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]<br />
* [[Tutorial Odoo 9.0 Part 4 : Basic View]]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br/><br/><br />
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre>sudo nano /etc/odoo/openerp-server.conf </pre><br />
<br />
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br />
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br/><br/><br />
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)<br />
<br />
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br/><br/><br/><br />
3. แก้ไขไฟล์ ต่างๆ ดังนี้<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br/><br/><br />
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo&diff=661
Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo
2016-07-14T07:36:44Z
<p>Bombay: /* Update การเปลี่ยนแปลง */</p>
<hr />
<div>== Define Model ==<br />
<br />
* แก้ไขไฟล์ Model ตามข้อความดังนี้ <br />
<br />
<h3>แก้ไข openacademy/models.py </h3> <br/><br />
<pre><br />
class Course(models.Model):<br />
_name = 'openacademy.course'<br />
<br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
</pre><br />
<br />
ผลที่ได้ <br />
*สร้างคลาสที่ชื่อว่า Course<br />
*กำหนดในคลาสว่ามีอะไรบ้าง ในส่วนนี้จะกำหนด name, description และตั้งชื่อที่ใช้เรียก Model นี้คือ openacademy.course<br />
<br />
<br />
<hr><br />
<h3> แก้ไข openacademy/demo.xml </h3> <br/> <br />
<pre><br />
<openerp><br />
<data><br />
<record model="openacademy.course" id="course0"><br />
<field name="name">Course 0</field><br />
<field name="description">Course 0's description<br />
<br />
Can have multiple lines<br />
</field><br />
</record><br />
<record model="openacademy.course" id="course1"><br />
<field name="name">Course 1</field><br />
<!-- no description for this one --><br />
</record><br />
<record model="openacademy.course" id="course2"><br />
<field name="name">Course 2</field><br />
<field name="description">Course 2's description</field><br />
</record><br />
</data><br />
</openerp><br />
</pre><br />
<br />
ผลที่ได้<br />
*เราจะกำหนดข้อมูลให้กับ Model ตาม record<br />
<br />
== Actions and Menus ==<br />
<h3>เพิ่มข้อความ openacademy/__openerp__.py</h3> <br/><br />
<pre><br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
'views/openacademy.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
</pre><br />
<br />
<h3>เพิ่มไฟล์ openacademy/views/openacademy.xml </h3> <br/><br />
<pre><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<openerp><br />
<data><br />
<!-- window action --><br />
<!--<br />
The following tag is an action definition for a "window action",<br />
that is an action opening a view or a set of views<br />
--><br />
<record model="ir.actions.act_window" id="course_list_action"><br />
<field name="name">Courses</field><br />
<field name="res_model">openacademy.course</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
<field name="help" type="html"><br />
<p class="oe_view_nocontent_create">Create the first course<br />
</p><br />
</field><br />
</record><br />
<br />
<!-- top level menu: no parent --><br />
<menuitem id="main_openacademy_menu" name="Open Academy"/><br />
<!-- A first level in the left side menu is needed<br />
before using action= attribute --><br />
<menuitem id="openacademy_menu" name="Open Academy"<br />
parent="main_openacademy_menu"/><br />
<!-- the following menuitem should appear *after*<br />
its parent openacademy_menu and *after* its<br />
action course_list_action --><br />
<menuitem id="courses_menu" name="Courses" parent="openacademy_menu"<br />
action="course_list_action"/><br />
<!-- Full id location:<br />
action="openacademy.course_list_action"<br />
It is not required when it is the same module --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
== Update การเปลี่ยนแปลง ==<br />
* ให้ค้นหา Module ของเราที่ติดตั้งไปแล้ว กด Upgrade<br />
[[ไฟล์:Tutor-odoo-11.png |400 px ]]<br />
<br />
* หลังจากนั้นให้ restart Odoo ใหม่ <br />
<pre> # sudo service odoo restart </pre><br />
<br />
* จะได้ผลลัพธ์ตามภาพ<br />
[[ไฟล์:Tutor-odoo-3-1.png |400 px ]]<br />
<br />
หัวข้อถัดไป บล</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo&diff=654
Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo
2016-07-14T05:06:46Z
<p>Bombay: /* Actions and Menus */</p>
<hr />
<div>== Define Model ==<br />
<br />
* แก้ไขไฟล์ Model ตามข้อความดังนี้ <br />
<br />
<h3>แก้ไข openacademy/models.py </h3> <br/><br />
<pre><br />
class Course(models.Model):<br />
_name = 'openacademy.course'<br />
<br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
</pre><br />
<br />
ผลที่ได้ <br />
*สร้างคลาสที่ชื่อว่า Course<br />
*กำหนดในคลาสว่ามีอะไรบ้าง ในส่วนนี้จะกำหนด name, description และตั้งชื่อที่ใช้เรียก Model นี้คือ openacademy.course<br />
<br />
<br />
<hr><br />
<h3> แก้ไข openacademy/demo.xml </h3> <br/> <br />
<pre><br />
<openerp><br />
<data><br />
<record model="openacademy.course" id="course0"><br />
<field name="name">Course 0</field><br />
<field name="description">Course 0's description<br />
<br />
Can have multiple lines<br />
</field><br />
</record><br />
<record model="openacademy.course" id="course1"><br />
<field name="name">Course 1</field><br />
<!-- no description for this one --><br />
</record><br />
<record model="openacademy.course" id="course2"><br />
<field name="name">Course 2</field><br />
<field name="description">Course 2's description</field><br />
</record><br />
</data><br />
</openerp><br />
</pre><br />
<br />
ผลที่ได้<br />
*เราจะกำหนดข้อมูลให้กับ Model ตาม record<br />
<br />
== Actions and Menus ==<br />
<h3>เพิ่มข้อความ openacademy/__openerp__.py</h3> <br/><br />
<pre><br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
'views/openacademy.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
</pre><br />
<br />
<h3>เพิ่มไฟล์ openacademy/views/openacademy.xml </h3> <br/><br />
<pre><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<openerp><br />
<data><br />
<!-- window action --><br />
<!--<br />
The following tag is an action definition for a "window action",<br />
that is an action opening a view or a set of views<br />
--><br />
<record model="ir.actions.act_window" id="course_list_action"><br />
<field name="name">Courses</field><br />
<field name="res_model">openacademy.course</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
<field name="help" type="html"><br />
<p class="oe_view_nocontent_create">Create the first course<br />
</p><br />
</field><br />
</record><br />
<br />
<!-- top level menu: no parent --><br />
<menuitem id="main_openacademy_menu" name="Open Academy"/><br />
<!-- A first level in the left side menu is needed<br />
before using action= attribute --><br />
<menuitem id="openacademy_menu" name="Open Academy"<br />
parent="main_openacademy_menu"/><br />
<!-- the following menuitem should appear *after*<br />
its parent openacademy_menu and *after* its<br />
action course_list_action --><br />
<menuitem id="courses_menu" name="Courses" parent="openacademy_menu"<br />
action="course_list_action"/><br />
<!-- Full id location:<br />
action="openacademy.course_list_action"<br />
It is not required when it is the same module --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
== Update การเปลี่ยนแปลง ==<br />
* ให้ค้นหา Module ของเราที่ติดตั้งไปแล้ว กด Upgrade<br />
[[ไฟล์:Tutor-odoo-11.png |400 px ]]<br />
<br />
* หลังจากนั้นให้ restart Odoo ใหม่ <br />
<pre> # sudo service odoo restart </pre><br />
<br />
* จะได้ผลลัพธ์ตามภาพ<br />
[[ไฟล์:Tutor-odoo-3-1.png |400 px ]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo&diff=652
Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo
2016-07-14T04:37:54Z
<p>Bombay: /* Actions and Menus */</p>
<hr />
<div>== Define Model ==<br />
<br />
* แก้ไขไฟล์ Model ตามข้อความดังนี้ <br />
<br />
<h3>แก้ไข openacademy/models.py </h3> <br/><br />
<pre><br />
class Course(models.Model):<br />
_name = 'openacademy.course'<br />
<br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
</pre><br />
<br />
ผลที่ได้ <br />
*สร้างคลาสที่ชื่อว่า Course<br />
*กำหนดในคลาสว่ามีอะไรบ้าง ในส่วนนี้จะกำหนด name, description และตั้งชื่อที่ใช้เรียก Model นี้คือ openacademy.course<br />
<br />
<br />
<hr><br />
<h3> แก้ไข openacademy/demo.xml </h3> <br/> <br />
<pre><br />
<openerp><br />
<data><br />
<record model="openacademy.course" id="course0"><br />
<field name="name">Course 0</field><br />
<field name="description">Course 0's description<br />
<br />
Can have multiple lines<br />
</field><br />
</record><br />
<record model="openacademy.course" id="course1"><br />
<field name="name">Course 1</field><br />
<!-- no description for this one --><br />
</record><br />
<record model="openacademy.course" id="course2"><br />
<field name="name">Course 2</field><br />
<field name="description">Course 2's description</field><br />
</record><br />
</data><br />
</openerp><br />
</pre><br />
<br />
ผลที่ได้<br />
*เราจะกำหนดข้อมูลให้กับ Model ตาม record<br />
<br />
== Actions and Menus ==<br />
<h3>เพิ่มข้อความ openacademy/__openerp__.py</h3> <br/><br />
<pre><br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
'views/openacademy.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
</pre><br />
<br />
<h3>เพิ่มไฟล์ openacademy/views/openacademy.xml </h3> <br/><br />
<pre><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<openerp><br />
<data><br />
<!-- window action --><br />
<!--<br />
The following tag is an action definition for a "window action",<br />
that is an action opening a view or a set of views<br />
--><br />
<record model="ir.actions.act_window" id="course_list_action"><br />
<field name="name">Courses</field><br />
<field name="res_model">openacademy.course</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
<field name="help" type="html"><br />
<p class="oe_view_nocontent_create">Create the first course<br />
</p><br />
</field><br />
</record><br />
<br />
<!-- top level menu: no parent --><br />
<menuitem id="main_openacademy_menu" name="Open Academy"/><br />
<!-- A first level in the left side menu is needed<br />
before using action= attribute --><br />
<menuitem id="openacademy_menu" name="Open Academy"<br />
parent="main_openacademy_menu"/><br />
<!-- the following menuitem should appear *after*<br />
its parent openacademy_menu and *after* its<br />
action course_list_action --><br />
<menuitem id="courses_menu" name="Courses" parent="openacademy_menu"<br />
action="course_list_action"/><br />
<!-- Full id location:<br />
action="openacademy.course_list_action"<br />
It is not required when it is the same module --><br />
</data><br />
</openerp><br />
</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo&diff=651
Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo
2016-07-14T04:37:17Z
<p>Bombay: /* Actions and Menus */</p>
<hr />
<div>== Define Model ==<br />
<br />
* แก้ไขไฟล์ Model ตามข้อความดังนี้ <br />
<br />
<h3>แก้ไข openacademy/models.py </h3> <br/><br />
<pre><br />
class Course(models.Model):<br />
_name = 'openacademy.course'<br />
<br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
</pre><br />
<br />
ผลที่ได้ <br />
*สร้างคลาสที่ชื่อว่า Course<br />
*กำหนดในคลาสว่ามีอะไรบ้าง ในส่วนนี้จะกำหนด name, description และตั้งชื่อที่ใช้เรียก Model นี้คือ openacademy.course<br />
<br />
<br />
<hr><br />
<h3> แก้ไข openacademy/demo.xml </h3> <br/> <br />
<pre><br />
<openerp><br />
<data><br />
<record model="openacademy.course" id="course0"><br />
<field name="name">Course 0</field><br />
<field name="description">Course 0's description<br />
<br />
Can have multiple lines<br />
</field><br />
</record><br />
<record model="openacademy.course" id="course1"><br />
<field name="name">Course 1</field><br />
<!-- no description for this one --><br />
</record><br />
<record model="openacademy.course" id="course2"><br />
<field name="name">Course 2</field><br />
<field name="description">Course 2's description</field><br />
</record><br />
</data><br />
</openerp><br />
</pre><br />
<br />
ผลที่ได้<br />
*เราจะกำหนดข้อมูลให้กับ Model ตาม record<br />
<br />
== Actions and Menus ==<br />
<h3>เพิ่มข้อความ openacademy/__openerp__.py</h3> <br/><br />
<pre><br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'templates.xml',<br />
'views/openacademy.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
</pre><br />
<br />
<h3>เพิ่มไฟล์ openacademy/views/openacademy.xml </h3> <br/><br />
<pre><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<openerp><br />
<data><br />
<!-- window action --><br />
<!--<br />
The following tag is an action definition for a "window action",<br />
that is an action opening a view or a set of views<br />
--><br />
<record model="ir.actions.act_window" id="course_list_action"><br />
<field name="name">Courses</field><br />
<field name="res_model">openacademy.course</field><br />
<field name="view_type">form</field><br />
<field name="view_mode">tree,form</field><br />
<field name="help" type="html"><br />
<p class="oe_view_nocontent_create">Create the first course<br />
</p><br />
</field><br />
</record><br />
<br />
<!-- top level menu: no parent --><br />
<menuitem id="main_openacademy_menu" name="Open Academy"/><br />
<!-- A first level in the left side menu is needed<br />
before using action= attribute --><br />
<menuitem id="openacademy_menu" name="Open Academy"<br />
parent="main_openacademy_menu"/><br />
<!-- the following menuitem should appear *after*<br />
its parent openacademy_menu and *after* its<br />
action course_list_action --><br />
<menuitem id="courses_menu" name="Courses" parent="openacademy_menu"<br />
action="course_list_action"/><br />
<!-- Full id location:<br />
action="openacademy.course_list_action"<br />
It is not required when it is the same module --><br />
</data><br />
</openerp><br />
</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=648
Tutorial Odoo 9.0
2016-07-14T04:30:07Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
* [[Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo ]]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre>odoo.py scaffold openacademy addons</pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br />
<p> 2. ต่อจากนี้ ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre> sudo nano /etc/odoo/openerp-server.conf </pre><br />
ตรง addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons (หากมีหลายที่ให้คั่นด้วยเครื่องหมาย"," (Comma))<br />
<br />
<p> [[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
<p> [[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
เข้า http://localhost:8069/ เพื่อไปตั้งค่า Database ก่อน (ถ้าทำแล้วให้ผ่านขึ้นตอนนี้ไป)<br />
<br />
<p> [[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br />
== แก้ไขไฟล์ ต่างๆ ==<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br />
เมื่อเพิ่มเสร็จแล้วให้เข้า http://localhost:8069/ App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
<br />
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo&diff=646
Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo
2016-07-14T04:29:46Z
<p>Bombay: Bombay ย้ายหน้า Tutorial Odoo 9.0 Part 3 : กำหนด Modal & Demo ไปยัง Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo</p>
<hr />
<div>== Define Model ==<br />
<br />
* แก้ไขไฟล์ Model ตามข้อความดังนี้ <br />
<br />
<h3>แก้ไข openacademy/models.py </h3> <br/><br />
<pre><br />
class Course(models.Model):<br />
_name = 'openacademy.course'<br />
<br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
</pre><br />
<br />
ผลที่ได้ <br />
*สร้างคลาสที่ชื่อว่า Course<br />
*กำหนดในคลาสว่ามีอะไรบ้าง ในส่วนนี้จะกำหนด name, description และตั้งชื่อที่ใช้เรียก Model นี้คือ openacademy.course<br />
<br />
<br />
<hr><br />
<h3> แก้ไข openacademy/demo.xml </h3> <br/> <br />
<pre><br />
<openerp><br />
<data><br />
<record model="openacademy.course" id="course0"><br />
<field name="name">Course 0</field><br />
<field name="description">Course 0's description<br />
<br />
Can have multiple lines<br />
</field><br />
</record><br />
<record model="openacademy.course" id="course1"><br />
<field name="name">Course 1</field><br />
<!-- no description for this one --><br />
</record><br />
<record model="openacademy.course" id="course2"><br />
<field name="name">Course 2</field><br />
<field name="description">Course 2's description</field><br />
</record><br />
</data><br />
</openerp><br />
</pre><br />
<br />
ผลที่ได้<br />
*เราจะกำหนดข้อมูลให้กับ Model ตาม record<br />
<br />
== Actions and Menus ==</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Modal_%26_Demo&diff=647
Tutorial Odoo 9.0 Part 3 : กำหนด Modal & Demo
2016-07-14T04:29:46Z
<p>Bombay: Bombay ย้ายหน้า Tutorial Odoo 9.0 Part 3 : กำหนด Modal & Demo ไปยัง Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo</p>
<hr />
<div>#เปลี่ยนทาง [[Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo&diff=645
Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo
2016-07-14T04:28:47Z
<p>Bombay: </p>
<hr />
<div>== Define Model ==<br />
<br />
* แก้ไขไฟล์ Model ตามข้อความดังนี้ <br />
<br />
<h3>แก้ไข openacademy/models.py </h3> <br/><br />
<pre><br />
class Course(models.Model):<br />
_name = 'openacademy.course'<br />
<br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
</pre><br />
<br />
ผลที่ได้ <br />
*สร้างคลาสที่ชื่อว่า Course<br />
*กำหนดในคลาสว่ามีอะไรบ้าง ในส่วนนี้จะกำหนด name, description และตั้งชื่อที่ใช้เรียก Model นี้คือ openacademy.course<br />
<br />
<br />
<hr><br />
<h3> แก้ไข openacademy/demo.xml </h3> <br/> <br />
<pre><br />
<openerp><br />
<data><br />
<record model="openacademy.course" id="course0"><br />
<field name="name">Course 0</field><br />
<field name="description">Course 0's description<br />
<br />
Can have multiple lines<br />
</field><br />
</record><br />
<record model="openacademy.course" id="course1"><br />
<field name="name">Course 1</field><br />
<!-- no description for this one --><br />
</record><br />
<record model="openacademy.course" id="course2"><br />
<field name="name">Course 2</field><br />
<field name="description">Course 2's description</field><br />
</record><br />
</data><br />
</openerp><br />
</pre><br />
<br />
ผลที่ได้<br />
*เราจะกำหนดข้อมูลให้กับ Model ตาม record<br />
<br />
== Actions and Menus ==</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_3_:_%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94_Model_%26_Demo&diff=642
Tutorial Odoo 9.0 Part 3 : กำหนด Model & Demo
2016-07-14T04:11:12Z
<p>Bombay: หน้าที่ถูกสร้างด้วย '== Define Model == * แก้ไขไฟล์ Model ตามข้อความดังนี้ <h3>แก้ไข openacad...'</p>
<hr />
<div>== Define Model ==<br />
<br />
* แก้ไขไฟล์ Model ตามข้อความดังนี้ <br />
<br />
<h3>แก้ไข openacademy/models.py </h3> <br/><br />
<pre><br />
class Course(models.Model):<br />
_name = 'openacademy.course'<br />
<br />
name = fields.Char(string="Title", required=True)<br />
description = fields.Text() <br />
</pre><br />
<br />
<hr><br />
<h3> แก้ไข openacademy/demo.xml </h3> <br/> \<br />
<br />
<pre><br />
<openerp><br />
<data><br />
<record model="openacademy.course" id="course0"><br />
<field name="name">Course 0</field><br />
<field name="description">Course 0's description<br />
<br />
Can have multiple lines<br />
</field><br />
</record><br />
<record model="openacademy.course" id="course1"><br />
<field name="name">Course 1</field><br />
<!-- no description for this one --><br />
</record><br />
<record model="openacademy.course" id="course2"><br />
<field name="name">Course 2</field><br />
<field name="description">Course 2's description</field><br />
</record><br />
</data><br />
</openerp><br />
</pre></div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module&diff=641
Tutorial Odoo 9.0 Part 2 : การ Install Module
2016-07-14T04:10:56Z
<p>Bombay: /* Install Module */</p>
<hr />
<div>== Install Module ==<br />
<br />
* โหลด Debug Mode ของ Odoo ตามภาพ -> กด About<br />
<br/><br />
[[ไฟล์:Tutor-odoo-7.png | 300px]]<br />
<br />
* กด ปุ่ม Activate Developer Mode <br />
<br />
[[ไฟล์:Tutor-odoo-8.png| 300px]]<br />
<br />
*จากนั้นให้เข้าหน้า App กดปุ่ม Update List app เพื่อให้ Refresh หน้า App ทั้งหมด<br />
<br />
[[ไฟล์:Tutor-odoo-9.png | 300px]]<br />
<br />
หลังจากนั้น พิมพ์ Search ค้นหาความว่า openacademy จะพบกับ Module ของเรานั้นเอง แล้วทำการ install <br />
<br />
[[ไฟล์:Tutor-odoo-6.png | 400px]]<br />
<br />
<br />
<h3>Next Part</h3><br />
[[Tutorial Odoo 9.0 Part 3 : กำหนด Modal & Demo]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=637
Tutorial Odoo 9.0
2016-07-14T03:48:07Z
<p>Bombay: /* หัวข้อ Tutorial */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
* [[Tutorial Odoo 9.0 Part 3 : กำหนด Modal & Demo ]]<br />
<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1.สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre> odoo.py scaffold openacademy addons </pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br />
<p> 2.ต่อจากนี้ ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre> sudo nano /etc/odoo/openerp-server.conf </pre><br />
ตรง addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons (หากมีหลายที่ให้คั่นด้วยเครื่องหมาย"," (Comma))<br />
<br />
<p> [[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
<p> [[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
เข้า http://localhost:8069/ เพื่อไปตั้งค่า Database ก่อน (ถ้าทำแล้วให้ผ่านขึ้นตอนนี้ไป)<br />
<br />
<p> [[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br />
== แก้ไขไฟล์ ต่างๆ ==<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br />
เมื่อเพิ่มเสร็จแล้วให้เข้า http://localhost:8069/ App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=631
Tutorial Odoo 9.0
2016-07-14T03:13:19Z
<p>Bombay: </p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1.สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre> odoo.py scaffold openacademy addons </pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br />
<p> 2.ต่อจากนี้ ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre> sudo nano /etc/odoo/openerp-server.conf </pre><br />
ตรง addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons (หากมีหลายที่ให้คั่นด้วยเครื่องหมาย"," (Comma))<br />
<br />
<p> [[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
<p> [[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
เข้า http://localhost:8069/ เพื่อไปตั้งค่า Database ก่อน (ถ้าทำแล้วให้ผ่านขึ้นตอนนี้ไป)<br />
<br />
<p> [[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br />
== แก้ไขไฟล์ ต่างๆ ==<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br />
เมื่อเพิ่มเสร็จแล้วให้เข้า http://localhost:8069/ App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]<br />
<br />
<br />
==อ้างอิง==<br />
* https://www.odoo.com/documentation/9.0/howtos/backend.html</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=630
Tutorial Odoo 9.0
2016-07-14T03:12:05Z
<p>Bombay: /* แก้ไขไฟล์ ต่างๆ */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1.สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre> odoo.py scaffold openacademy addons </pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br />
<p> 2.ต่อจากนี้ ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre> sudo nano /etc/odoo/openerp-server.conf </pre><br />
ตรง addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons (หากมีหลายที่ให้คั่นด้วยเครื่องหมาย"," (Comma))<br />
<br />
<p> [[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
<p> [[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
เข้า http://localhost:8069/ เพื่อไปตั้งค่า Database ก่อน (ถ้าทำแล้วให้ผ่านขึ้นตอนนี้ไป)<br />
<br />
<p> [[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br />
== แก้ไขไฟล์ ต่างๆ ==<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/controllers.py</h3><br/><br />
<pre># -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br />
เมื่อเพิ่มเสร็จแล้วให้เข้า http://localhost:8069/ App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0_Part_2_:_%E0%B8%81%E0%B8%B2%E0%B8%A3_Install_Module&diff=626
Tutorial Odoo 9.0 Part 2 : การ Install Module
2016-07-13T11:48:13Z
<p>Bombay: หน้าที่ถูกสร้างด้วย '== Install Module == * โหลด Debug Mode ของ Odoo ตามภาพ -> กด Preferences <br/> ไฟล์:Tutor-odoo...'</p>
<hr />
<div>== Install Module ==<br />
<br />
* โหลด Debug Mode ของ Odoo ตามภาพ -> กด Preferences<br />
<br/><br />
[[ไฟล์:Tutor-odoo-7.png | 300px]]<br />
<br />
* กด ปุ่ม Activate Developer Mode <br />
<br />
[[ไฟล์:Tutor-odoo-8.png| 300px]]<br />
<br />
*จากนั้นให้เข้าหน้า App กดปุ่ม Update List app เพื่อให้ Refresh หน้า App ทั้งหมด<br />
<br />
[[ไฟล์:Tutor-odoo-9.png | 300px]]<br />
<br />
หลังจากนั้น พิมพ์ Search ค้นหาความว่า openacademy จะพบกับ Module ของเรานั้นเอง แล้วทำการ install <br />
<br />
[[ไฟล์:Tutor-odoo-6.png | 400px]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=625
Tutorial Odoo 9.0
2016-07-13T11:38:57Z
<p>Bombay: /* Build an Odoo Module (สร้างโมดูลของ Odoo) */</p>
<hr />
<div>== หัวข้อ Tutorial ==<br />
* [[Tutorial Odoo 9.0]]<br />
* [[Tutorial Odoo 9.0 Part 2 : การ Install Module ]]<br />
== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1.สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre> odoo.py scaffold openacademy addons </pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br />
<p> 2.ต่อจากนี้ ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre> sudo nano /etc/odoo/openerp-server.conf </pre><br />
ตรง addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons (หากมีหลายที่ให้คั่นด้วยเครื่องหมาย"," (Comma))<br />
<br />
<p> [[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
<p> [[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
เข้า http://localhost:8069/ เพื่อไปตั้งค่า Database ก่อน (ถ้าทำแล้วให้ผ่านขึ้นตอนนี้ไป)<br />
<br />
<p> [[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br />
== แก้ไขไฟล์ ต่างๆ ==<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
from . import controllers<br />
from . import models<br />
openacademy/controllers.py<br />
# -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br />
เมื่อเพิ่มเสร็จแล้วให้เข้า http://localhost:8069/ App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]</div>
Bombay
https://wiki.morange.co.th/index.php?title=Tutorial_Odoo_9.0&diff=624
Tutorial Odoo 9.0
2016-07-13T11:16:51Z
<p>Bombay: /* แก้ไขไฟล์ ต่างๆ */</p>
<hr />
<div>== Build an Odoo Module (สร้างโมดูลของ Odoo) == <br />
<br />
<p>1.สร้างโมดูล ด้วยคำสั่งดังนี้ </p><br />
<pre> odoo.py scaffold openacademy addons </pre><br />
<br />
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p><br />
<br />
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p><br />
<br />
<p> 2.ต่อจากนี้ ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p><br />
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root<br />
<pre> sudo nano /etc/odoo/openerp-server.conf </pre><br />
ตรง addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons (หากมีหลายที่ให้คั่นด้วยเครื่องหมาย"," (Comma))<br />
<br />
<p> [[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
<p> [[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p><br />
<br />
เข้า http://localhost:8069/ เพื่อไปตั้งค่า Database ก่อน (ถ้าทำแล้วให้ผ่านขึ้นตอนนี้ไป)<br />
<br />
<p> [[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p><br />
<br />
<br />
== แก้ไขไฟล์ ต่างๆ ==<br />
<h3>openacademy/__openerp__.py</h3><br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
{<br />
'name': "Open Academy",<br />
<br />
'summary': """Manage trainings""",<br />
<br />
'description': """<br />
Open Academy module for managing trainings:<br />
- training courses<br />
- training sessions<br />
- attendees registration<br />
""",<br />
<br />
'author': "My Company",<br />
'website': "http://www.yourcompany.com",<br />
<br />
# Categories can be used to filter modules in modules listing<br />
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml<br />
# for the full list<br />
'category': 'Test',<br />
'version': '0.1',<br />
<br />
# any module necessary for this one to work correctly<br />
'depends': ['base'],<br />
<br />
# always loaded<br />
'data': [<br />
# 'security/ir.model.access.csv',<br />
'views/templates.xml',<br />
],<br />
# only loaded in demonstration mode<br />
'demo': [<br />
'demo/demo.xml',<br />
],<br />
}<br />
</pre><br />
<br />
<h3>openacademy/__init__.py</h3> <br/><br />
<pre><br />
# -*- coding: utf-8 -*-<br />
from . import controllers<br />
from . import models<br />
openacademy/controllers.py<br />
# -*- coding: utf-8 -*-<br />
from openerp import http<br />
<br />
# class Openacademy(http.Controller):<br />
# @http.route('/openacademy/openacademy/', auth='public')<br />
# def index(self, **kw):<br />
# return "Hello, world"<br />
<br />
# @http.route('/openacademy/openacademy/objects/', auth='public')<br />
# def list(self, **kw):<br />
# return http.request.render('openacademy.listing', {<br />
# 'root': '/openacademy/openacademy',<br />
# 'objects': http.request.env['openacademy.openacademy'].search([]),<br />
# })<br />
<br />
# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')<br />
# def object(self, obj, **kw):<br />
# return http.request.render('openacademy.object', {<br />
# 'object': obj<br />
# })<br />
</pre><br />
<br />
<h3>openacademy/demo.xml</h3> <br/><br />
<pre><br />
<openerp><br />
<data><br />
<!-- --><br />
<!-- <record id="object0" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 0</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object1" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 1</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object2" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 2</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object3" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 3</field> --><br />
<!-- </record> --><br />
<!-- --><br />
<!-- <record id="object4" model="openacademy.openacademy"> --><br />
<!-- <field name="name">Object 4</field> --><br />
<!-- </record> --><br />
<!-- --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>openacademy/models.py</h3> <br/><br />
<br />
<br />
<pre><br />
# -*- coding: utf-8 -*-<br />
<br />
from openerp import models, fields, api<br />
<br />
# class openacademy(models.Model):<br />
# _name = 'openacademy.openacademy'<br />
<br />
# name = fields.Char()<br />
</pre><br />
<br />
<h3>openacademy/security/ir.model.access.csv</h3> <br/><br />
<pre><br />
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink<br />
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0<br />
</pre><br />
<h3>openacademy/templates.xml</h3> <br/><br />
<br />
<pre><br />
<openerp><br />
<data><br />
<!-- <template id="listing"> --><br />
<!-- <ul> --><br />
<!-- <li t-foreach="objects" t-as="object"> --><br />
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> --><br />
<!-- <t t-esc="object.display_name"/> --><br />
<!-- </a> --><br />
<!-- </li> --><br />
<!-- </ul> --><br />
<!-- </template> --><br />
<!-- <template id="object"> --><br />
<!-- <h1><t t-esc="object.display_name"/></h1> --><br />
<!-- <dl> --><br />
<!-- <t t-foreach="object._fields" t-as="field"> --><br />
<!-- <dt><t t-esc="field"/></dt> --><br />
<!-- <dd><t t-esc="object[field]"/></dd> --><br />
<!-- </t> --><br />
<!-- </dl> --><br />
<!-- </template> --><br />
</data><br />
</openerp><br />
</pre><br />
<br />
<h3>views/__inti__.py</h3><br/><br />
<pre><br />
import controllers<br />
import models<br />
</pre><br />
<br />
<h3>models/__init__.py</h3><br/><br />
<pre>import models</pre><br />
<br />
<h3>controllers/__init__.py</h3><br/><br />
<pre>import controllers</pre><br />
<br />
เมื่อเพิ่มเสร็จแล้วให้เข้า http://localhost:8069/ App จะได้ผลลัพธ์ตามภาพ<br />
<br />
[[ไฟล์:Tutor-odoo-5.png |600px]]</div>
Bombay