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

จาก Morange Wiki
(Build an Odoo Module (สร้างโมดูลของ Odoo))
(Build an Odoo Module (สร้างโมดูลของ Odoo))
แถว 1: แถว 1:
 
== 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>
  
[[Odoo9-1.png]]
+
<p>[[ไฟล์:Odoo9-1.png|800px|'''คำสั่งที่ใช้งาน สร้าง Folder''']]</p>
 +
 
 +
<p> 2.ต่อจากนี้ ตั้งค่า Path ให้ Odoo ค้นหา App ที่เราสร้างพบ</p>
 +
หมายเหตุ : ถ้าใช้คำสั่งไม่ได้ ให้ล๊อกอินในฐานะ Root
 +
<pre> sudo nano /etc/odoo/openerp-server.conf </pre>
 +
ตรง addons_path = ให้เพิ่ม path ของที่อยู่ไฟล์ addons (หากมีหลายที่ให้คั่นด้วยเครื่องหมาย"," (Comma))
 +
 
 +
<p> [[ไฟล์:Tutor-odoo-2.png|400px|'''คำสังเขียนไฟล์''']]</p>
 +
 
 +
<p> [[ไฟล์:Tutor-odoo-3.png|400px|'''คำสังเขียนไฟล์''']]</p>
 +
 
 +
เข้า http://localhost:8069/ เพื่อไปตั้งค่า Database ก่อน (ถ้าทำแล้วให้ผ่านขึ้นตอนนี้ไป)
 +
 
 +
<p> [[ไฟล์:Tutor-odoo-4.png|600px|'''ตั้งค่า Database'']]</p>
 +
 +
 
 +
== แก้ไขไฟล์ ต่างๆ  ==
 +
<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',
 +
        'templates.xml',
 +
    ],
 +
    # only loaded in demonstration mode
 +
    'demo': [
 +
        'demo.xml',
 +
    ],
 +
}
 +
</pre>
 +
 
 +
<h3>openacademy/__init__.py</h3> <br/>
 +
<pre>
 +
# -*- coding: utf-8 -*-
 +
from . import controllers
 +
from . import models
 +
openacademy/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
 +
#        })
 +
</pre>
 +
 
 +
<h3>openacademy/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.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/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>views/__inti__.py</h3><br/>
 +
<pre>
 +
import controllers
 +
import models
 +
</pre>
 +
 
 +
<h3>models/__init__.py</h3><br/>
 +
<pre>import models</pre>
 +
 
 +
<h3>controllers/__init__.py</h3><br/>
 +
<pre>import controllers</pre>
 +
 
 +
เมื่อเพิ่มเสร็จแล้วให้เข้า http://localhost:8069/app จะได้ผลลัพธ์ตามภาพ

รุ่นแก้ไขเมื่อ 10:54, 13 กรกฎาคม 2559

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 ก่อน (ถ้าทำแล้วให้ผ่านขึ้นตอนนี้ไป)

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


แก้ไขไฟล์ ต่างๆ

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',
        'templates.xml',
    ],
    # only loaded in demonstration mode
    'demo': [
        'demo.xml',
    ],
}

openacademy/__init__.py


# -*- coding: utf-8 -*-
from . import controllers
from . import models
openacademy/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/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.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/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>

views/__inti__.py


import controllers
import models

models/__init__.py


import models

controllers/__init__.py


import controllers

เมื่อเพิ่มเสร็จแล้วให้เข้า http://localhost:8069/app จะได้ผลลัพธ์ตามภาพ