ผลต่างระหว่างรุ่นของ "Tutorial Odoo 9.0"

จาก Morange Wiki
(Build an Odoo Module (สร้างโมดูลของ Odoo))
 
(ไม่แสดง 36 รุ่นระหว่างกลางโดยผู้ใช้ 3 คน)
แถว 1: แถว 1:
 +
== หัวข้อ Tutorial ==
 +
* [[Tutorial Odoo 9.0]]
 +
* [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]
 +
* [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]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_4_:_Basic_View Tutorial Odoo 9.0 Part 4 : Basic View]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_5_:_Relations_between_models Tutorial Odoo 9.0 Part 5 : Relations between models]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_6_:_Inheritance Tutorial Odoo 9.0 Part 6 : Inheritance]
 +
* [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]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_8_:_Onchange_%26_Model_constraints Tutorial Odoo 9.0 Part 8 : Onchange & Model constraints]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_9_:_Advanced_Views Tutorial Odoo 9.0 Part 9 : Advanced Views]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_10_:_Workflows Tutorial Odoo 9.0 Part 10 : Workflows]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_11_:_Security Tutorial Odoo 9.0 Part 11 : Security]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_12_:_Wizards Tutorial Odoo 9.0 Part 12 : Wizards]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_13_:_Internationalization Tutorial Odoo 9.0 Part 13 : Internationalization ]
 +
* [https://wiki.morange.co.th/Tutorial_Odoo_9.0_Part_14_:_Reporting Tutorial Odoo 9.0 Part 14 : Reporting]
 +
* [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]
 +
 
== Build an Odoo Module (สร้างโมดูลของ Odoo) ==  
 
== Build an Odoo Module (สร้างโมดูลของ Odoo) ==  
  
สร้างโมดูล ด้วยคำสั่งดังนี้
+
<p>1. สร้างโมดูล ด้วยคำสั่งดังนี้ </p>
<pre> odoo.py scaffold openacademy addons </pre>
+
<pre>odoo.py scaffold openacademy addons</pre>
 +
 
 +
<p>หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้ </p>
 +
 
 +
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p>
 +
<br/><br/>
 +
<p> 2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p>
 +
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root
 +
<pre>sudo nano /etc/odoo/openerp-server.conf </pre>
 +
 
 +
<p>[[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p>
 +
<br/>
 +
แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)
 +
 
 +
<p>[[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p>
 +
<br/><br/>
 +
ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)
 +
 
 +
<p>[[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p>
 +
<br/><br/><br/>
 +
3. แก้ไขไฟล์ ต่างๆ ดังนี้
 +
<h3>openacademy/__openerp__.py</h3><br/>
 +
<pre>
 +
# -*- coding: utf-8 -*-
 +
{
 +
    'name': "Open Academy",
 +
 
 +
    'summary': """Manage trainings""",
 +
 
 +
    'description': """
 +
        Open Academy module for managing trainings:
 +
            - training courses
 +
            - training sessions
 +
            - attendees registration
 +
    """,
 +
 
 +
    'author': "My Company",
 +
    'website': "http://www.yourcompany.com",
 +
 
 +
    # Categories can be used to filter modules in modules listing
 +
    # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
 +
    # for the full list
 +
    'category': 'Test',
 +
    'version': '0.1',
 +
 
 +
    # any module necessary for this one to work correctly
 +
    'depends': ['base'],
 +
 
 +
    # always loaded
 +
    'data': [
 +
        # 'security/ir.model.access.csv',
 +
        'views/templates.xml',
 +
    ],
 +
    # only loaded in demonstration mode
 +
    'demo': [
 +
        'demo/demo.xml',
 +
    ],
 +
}
 +
</pre>
 +
 
 +
<h3>openacademy/__init__.py</h3> <br/>
 +
<pre>
 +
# -*- coding: utf-8 -*-
 +
import controllers
 +
import models
 +
</pre>
 +
 
 +
<h3>openacademy/demo/demo.xml</h3> <br/>
 +
<pre>
 +
<openerp>
 +
    <data>
 +
        <!--  -->
 +
        <!--  <record id="object0" model="openacademy.openacademy"> -->
 +
        <!--    <field name="name">Object 0</field> -->
 +
        <!--  </record> -->
 +
        <!--  -->
 +
        <!--  <record id="object1" model="openacademy.openacademy"> -->
 +
        <!--    <field name="name">Object 1</field> -->
 +
        <!--  </record> -->
 +
        <!--  -->
 +
        <!--  <record id="object2" model="openacademy.openacademy"> -->
 +
        <!--    <field name="name">Object 2</field> -->
 +
        <!--  </record> -->
 +
        <!--  -->
 +
        <!--  <record id="object3" model="openacademy.openacademy"> -->
 +
        <!--    <field name="name">Object 3</field> -->
 +
        <!--  </record> -->
 +
        <!--  -->
 +
        <!--  <record id="object4" model="openacademy.openacademy"> -->
 +
        <!--    <field name="name">Object 4</field> -->
 +
        <!--  </record> -->
 +
        <!--  -->
 +
    </data>
 +
</openerp>
 +
</pre>
 +
 
 +
<h3>openacademy/models/models.py</h3> <br/>
 +
 
 +
<pre>
 +
# -*- coding: utf-8 -*-
 +
 
 +
from openerp import models, fields, api
 +
 
 +
# class openacademy(models.Model):
 +
#    _name = 'openacademy.openacademy'
 +
 
 +
#    name = fields.Char()
 +
</pre>
 +
 
 +
<h3>openacademy/security/ir.model.access.csv</h3> <br/>
 +
<pre>
 +
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
 +
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0
 +
</pre>
 +
<h3>openacademy/views/templates.xml</h3> <br/>
 +
 
 +
<pre>
 +
<openerp>
 +
    <data>
 +
        <!-- <template id="listing"> -->
 +
        <!--  <ul> -->
 +
        <!--    <li t-foreach="objects" t-as="object"> -->
 +
        <!--      <a t-attf-href="{{ root }}/objects/{{ object.id }}"> -->
 +
        <!--        <t t-esc="object.display_name"/> -->
 +
        <!--      </a> -->
 +
        <!--    </li> -->
 +
        <!--  </ul> -->
 +
        <!-- </template> -->
 +
        <!-- <template id="object"> -->
 +
        <!--  <h1><t t-esc="object.display_name"/></h1> -->
 +
        <!--  <dl> -->
 +
        <!--    <t t-foreach="object._fields" t-as="field"> -->
 +
        <!--      <dt><t t-esc="field"/></dt> -->
 +
        <!--      <dd><t t-esc="object[field]"/></dd> -->
 +
        <!--    </t> -->
 +
        <!--  </dl> -->
 +
        <!-- </template> -->
 +
    </data>
 +
</openerp>
 +
</pre>
 +
 
 +
<h3>openacademy/controllers/controllers.py</h3><br/>
 +
<pre># -*- coding: utf-8 -*-
 +
from openerp import http
 +
 
 +
# class Openacademy(http.Controller):
 +
#    @http.route('/openacademy/openacademy/', auth='public')
 +
#    def index(self, **kw):
 +
#        return "Hello, world"
 +
 
 +
#    @http.route('/openacademy/openacademy/objects/', auth='public')
 +
#    def list(self, **kw):
 +
#        return http.request.render('openacademy.listing', {
 +
#            'root': '/openacademy/openacademy',
 +
#            'objects': http.request.env['openacademy.openacademy'].search([]),
 +
#        })
 +
 
 +
#    @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')
 +
#    def object(self, obj, **kw):
 +
#        return http.request.render('openacademy.object', {
 +
#            'object': obj
 +
#        })</pre>
 +
 
 +
<h3>openacademy/__inti__.py</h3><br/>
 +
<pre>
 +
import controllers
 +
import models
 +
</pre>
 +
 
 +
<h3>openacademy/models/__init__.py</h3><br/>
 +
<pre>import models</pre>
 +
 
 +
<h3>openacademy/controllers/__init__.py</h3><br/>
 +
<pre>import controllers</pre>
 +
<br/><br/>
 +
เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ
 +
 
 +
[[ไฟล์:Tutor-odoo-5.png |600px]]
 +
 
 +
 
 +
 
 +
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 2 : การ Install Module  ]]
  
หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้
+
==อ้างอิง==
addons/openacedemy/
+
* https://www.odoo.com/documentation/9.0/howtos/backend.html
|-- __init__.py
 
|-- __openerp__.py
 
|-- controllers/
 
|  |-- __init__.py
 
|  `-- controllers.py
 
|-- models/
 
|  |-- __init__.py
 
|  `-- model.py
 
|-- security/
 
|  |-- ir.model.access.csv
 
|-- demo/
 
|  |-- demo.xml
 
|-- views/
 
|  |-- templates.xml
 
|  `-- views.xml
 

รุ่นแก้ไขปัจจุบันเมื่อ 11:06, 24 ตุลาคม 2559

หัวข้อ Tutorial

Build an Odoo Module (สร้างโมดูลของ Odoo)

1. สร้างโมดูล ด้วยคำสั่งดังนี้

odoo.py scaffold openacademy addons

หลังจากนั้นจะได้ไฟล์มีโครงสร้างเป็นดังนี้

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย



2. ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ

หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root

sudo nano /etc/odoo/openerp-server.conf 

คำสังเขียนไฟล์


แก้ไข addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons ต่อท้ายจากที่อยู่ที่ระบบได้สร้างไว้ โดยคั่นด้วยเครื่องหมาย "," (Comma)

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย



ไปที่ http://localhost:8069/ เพื่อไปตั้งค่า Database (หากทำแล้วให้ผ่านขั้นตอนนี้ไป)

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย




3. แก้ไขไฟล์ ต่างๆ ดังนี้

openacademy/__openerp__.py


# -*- coding: utf-8 -*-
{
    'name': "Open Academy",

    'summary': """Manage trainings""",

    'description': """
        Open Academy module for managing trainings:
            - training courses
            - training sessions
            - attendees registration
    """,

    'author': "My Company",
    'website': "http://www.yourcompany.com",

    # Categories can be used to filter modules in modules listing
    # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
    # for the full list
    'category': 'Test',
    'version': '0.1',

    # any module necessary for this one to work correctly
    'depends': ['base'],

    # always loaded
    'data': [
        # 'security/ir.model.access.csv',
        'views/templates.xml',
    ],
    # only loaded in demonstration mode
    'demo': [
        'demo/demo.xml',
    ],
}

openacademy/__init__.py


# -*- coding: utf-8 -*-
import controllers
import models

openacademy/demo/demo.xml


<openerp>
    <data>
        <!--  -->
        <!--   <record id="object0" model="openacademy.openacademy"> -->
        <!--     <field name="name">Object 0</field> -->
        <!--   </record> -->
        <!--  -->
        <!--   <record id="object1" model="openacademy.openacademy"> -->
        <!--     <field name="name">Object 1</field> -->
        <!--   </record> -->
        <!--  -->
        <!--   <record id="object2" model="openacademy.openacademy"> -->
        <!--     <field name="name">Object 2</field> -->
        <!--   </record> -->
        <!--  -->
        <!--   <record id="object3" model="openacademy.openacademy"> -->
        <!--     <field name="name">Object 3</field> -->
        <!--   </record> -->
        <!--  -->
        <!--   <record id="object4" model="openacademy.openacademy"> -->
        <!--     <field name="name">Object 4</field> -->
        <!--   </record> -->
        <!--  -->
    </data>
</openerp>

openacademy/models/models.py


# -*- coding: utf-8 -*-

from openerp import models, fields, api

# class openacademy(models.Model):
#     _name = 'openacademy.openacademy'

#     name = fields.Char()

openacademy/security/ir.model.access.csv


id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0

openacademy/views/templates.xml


<openerp>
    <data>
        <!-- <template id="listing"> -->
        <!--   <ul> -->
        <!--     <li t-foreach="objects" t-as="object"> -->
        <!--       <a t-attf-href="{{ root }}/objects/{{ object.id }}"> -->
        <!--         <t t-esc="object.display_name"/> -->
        <!--       </a> -->
        <!--     </li> -->
        <!--   </ul> -->
        <!-- </template> -->
        <!-- <template id="object"> -->
        <!--   <h1><t t-esc="object.display_name"/></h1> -->
        <!--   <dl> -->
        <!--     <t t-foreach="object._fields" t-as="field"> -->
        <!--       <dt><t t-esc="field"/></dt> -->
        <!--       <dd><t t-esc="object[field]"/></dd> -->
        <!--     </t> -->
        <!--   </dl> -->
        <!-- </template> -->
    </data>
</openerp>

openacademy/controllers/controllers.py


# -*- coding: utf-8 -*-
from openerp import http

# class Openacademy(http.Controller):
#     @http.route('/openacademy/openacademy/', auth='public')
#     def index(self, **kw):
#         return "Hello, world"

#     @http.route('/openacademy/openacademy/objects/', auth='public')
#     def list(self, **kw):
#         return http.request.render('openacademy.listing', {
#             'root': '/openacademy/openacademy',
#             'objects': http.request.env['openacademy.openacademy'].search([]),
#         })

#     @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')
#     def object(self, obj, **kw):
#         return http.request.render('openacademy.object', {
#             'object': obj
#         })

openacademy/__inti__.py


import controllers
import models

openacademy/models/__init__.py


import models

openacademy/controllers/__init__.py


import controllers



เมื่อทำการแก้ไขเสร็จเรียบร้อย ให้ไปที่ http://localhost:8069/ และคลิกเมนู App จะได้ผลลัพธ์ตามภาพ

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย


หัวข้อถัดไป Tutorial Odoo 9.0 Part 2 : การ Install Module

อ้างอิง