1. 程式人生 > >odoo11建立自定義模組原始碼

odoo11建立自定義模組原始碼

 ODOO 官方建議模組骨架 ,

  • 在addons/<my_module_name>/下結構如下:

資料夾許可權755  檔案許可權644         __openerp__.py 相關屬性:     # name  模組名字     # summary 簡短介紹     # description 詳細描述     # author 作者     # website 模組網站     # category 模組分類     # version 模組版本號     # license 模組版本資訊 預設是 AGPL-3     # depends 模組依賴     # data 模組必須載入的資料檔案     # demo 示例資料     # installabel 預設為True 可安裝     # auto_install 預設是False 如果設為True 就根據依賴模組,依賴裝了,這個模組就安裝     # application 預設是 False 如果設為True 就成為應用模組          安裝自定義模組         服務啟動配置檔案 addons-path 加入自己的定義容器目錄 如 myaddons         addons-path=addons,myaddons         更新模組服務列表,然後找到去安裝              模組資料夾管理          # data  放 demo 和 data xml      # models 放模型定義      # controllers http 路徑控制      # views  放網頁檢視和模板      # static 放網頁的資源,裡面還有css, js ,img, lib 等      #   

  • 自動定的模組tech_demo

我們在ODOO資料夾下,新增addons_demo資料夾,如addons_demo/tech_demo下結構如下:

* __init__.py 內容如下(把模型匯入到應用)

from . import models

* __manifest__.py 內容如下(erp本身的配置)

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

{
    'name': 'tech_demo',
    'version': '1.0',
    'category': 'test',
    'sequence': 8,
    'summary': '',
    'description': "",
    'website': '',
    'depends': [ ],
    'data': [
        'views/tech_student_views.xml',
        'views/tech_teacher_views.xml'
    ],
    'demo': [],
    'css': [],
    'installable': True,
    'application': True,
    'auto_install': False,
}
  • 在models資料夾下,新建tech_demo.py

*tech_demo.py 內容如下(模型)

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, tools, models
from odoo.tools.translate import _
class tech_student(models.Model):
    _name="tech.student"
    _description=""
    def _selection(self):
        team = self.env['crm.team'].sudo()._get_default_team_id(user_id=self.env.uid)
        return self._stage_find(team_id=team.id, domain=[('fold', '=', False)]).id



    @api.multi
    def _compute_attachment_number(self):
        """附件上傳"""
        attachment_data = self.env['ir.attachment'].read_group([('res_model', '=', 'tech.student'), ('res_id', ' in ', self.ids)], ['res_id'], ['res_id'])
        if len(attachment_data)>0:
            attachment = dict((data['res_id'], data['res_id_count']) for data in attachment_data)
            for expense in self:
                expense.attachment_number = attachment.get(expense.id, 0)

    @api.multi
    def action_get_attachment_view(self):
        """附件上傳動作檢視"""
        self.ensure_one()
        res = self.env['ir.actions.act_window'].for_xml_id('base', 'action_attachment')
        if res:
            res['domain'] = [('res_model', '=', 'tech.student'), ('res_id', ' in ', self.ids)]
            res['context'] = {'default_res_model': 'tech.student', 'default_res_id': self.id}
        return res

    # 增加附件上傳功能
    attachment_number = fields.Integer(compute='_compute_attachment_number', string ='附件數量')
    name = fields.Char(u'名字')
    age = fields.Integer(u'年齡')
    sex = fields.Selection([('1',u'男'),('2',u'女')], string=u'性別')
    address = fields.Char(u'住址')
    phone = fields.Char(u'電話')
    email = fields.Char(u'電子郵箱')
    desc = fields.Text(u'描述')
    document = fields.Html(u'文件')
    sequence = fields.Integer(default=0,string=u'序號')
    perc_complete = fields.Float(u'% 萬年收入', (3, 2))
    # Date fields:
    date_effective = fields.Date(u'出生日期')
    date_changed = fields.Datetime(u'修改日期')
    # Other fields:
    fold = fields.Boolean(default=True, help=u"是否轉正")
    image = fields.Binary(u'個人照片')
  • 在views資料夾下,新建tech_student_views.xml

<?xml version="1.0"?>
<odoo>
        <!--  tech.student views -->
        <record id="tech_student_form" model="ir.ui.view">
            <field name="name">tech.student.form</field>
            <field name="model">tech.student</field>
            <field name="arch" type="xml">
                <form string="學生資訊">
                    <sheel>
                        <label for="name"></label>
                        <div class="oe_button_box" name="button_box">
                            <button name="action_get_attachment_view" class="oe_stat_button" icon="fa-book" type="object">
                                <field name="attachment_number" widget="statinfo" string="附件上傳"/>
                            </button>
                        </div>
                        <group>
                                <group string="基本資訊">
                                    <field name="name"/>
                                    <field name="age"/>
                                    <field name="sex"/>
                                    <field name="address"/>
                                    <field name="phone"/>
                                    <field name="email"/>
                                </group>
                                <group string="聯絡資訊">
                                    <field name="sequence"/>
                                    <field name="perc_complete"/>
                                    <field name="date_effective"/>
                                    <field name="date_changed"/>
                                    <field name="fold"/>
                                    <field name="image"/>
                                </group>

                        </group>
                        <group  string="備註資訊">
                                <field name="document"/>
                                <field name="desc" />
                            </group>
                    </sheel>
                </form>
            </field>
        </record>

        <record id="tech_student_tree" model="ir.ui.view">
            <field name="name">tech.student.tree</field>
            <field name="model">tech.student</field>
            <field name="arch" type="xml">
                <tree string="Tech Student">
                    <field name="sequence"/>
                    <field name="phone"/>
                    <field name="name"/>
                    <field name="age"/>
                    <field name="sex"/>
                    <field name="address"/>
                    <field name="email"/>
                </tree>
            </field>
        </record>

        <record id="tech_student_action" model="ir.actions.act_window">
            <field name="name">學生</field>
            <field name="res_model">tech.student</field>
            <field name="view_mode">tree,form</field>
        </record>

        <menuitem id="menu_tech" name="學校管理" />
        <menuitem id="menu_tech_stu" name="師生管理" parent="menu_tech"/>
        <menuitem id="menu_tech_student" name="學生列表" parent="menu_tech_stu" action="tech_student_action"/>
</odoo>

然後重新啟動ODOO11的服務,可以檢視結果