• openERP笔记 自定义模块开发


    ##需求描述

    1. 输入和查询课程,把信息储存到课程对象里
    2. 课程包含以下信息:名称,价格,天数,开始日期,教师,学员
    3. 每个课程可以有多个学员,要记录学员的姓名、电话、电子邮件
    4. 课程可以添加教材和作业等文档附件
    5. 用户可以设置默认值以加速输入
    6. 可以按名称查询课程,也可以用其他信息查找课程,并保存常用查询条件
    7. 可以导出课程信息到excel文件,并支持导入
    8. 可以按日期查看课程,并调整课程时间
    9. 老师只能看到自己的课程

    ##编写课程模块

    ###PyCharm中创建工程

    PyCharm中创建一个工程my_training, 存放在OE addons目录下, 并在该工程中打开OE目录(见之前的文章).

    ###文件结构

    模块名命名为”my_training”, 目录下四个文件, 如下:

    |--my_training
         |--__init__.py
         |--__openerp__.py
         |--lesson.py
         |--lesson_view.xml
    

    ###__init__.py

    Python模块描述文件, 每个OE模块也是一个Python模块.

    # -*- coding: utf-8 -*-
    import lesson
    

    ###__openerp__.py

    # -*- coding: utf-8 -*-
    {
        "name": "My Training", #模块名
        "version": "1.0",        #模块版本
        "description": 'My Training Demo', #模块说明
        "author": "Jeff",    #作者
        "website": "http://www.jeffzhang.cn", #网址
        "depends": [],                      #依赖的模块
        "data": ["lesson_view.xml"],
        "demo": [],
        "installable": True,                #可否安装
        'auto_install': False,
     }
    

    ###lesson.py

    # -*- coding: utf-8 >-*-
    
    from openerp.osv import fields, osv
    
    class my_training_lesson(osv.osv):
        _name = 'my.training.lesson'
        _discription = u'培训课程示例'
        _columns = {
            'name': fields.char(u'课程名',size=64, select=True),
            'date_start': fields.date(u'开始日期', select=True),
            'total_day': fields.float(u'总天数', digits=(16,1)),
            'teacher': fields.many2one('res.users', u'授课老师'),
            'students': fields.many2many('res.partner', string=u'学生'),
            'price': fields.float(u'价格', digits=(16,2)),
        }
    
    my_training_lesson()
    

    ###lesson_view.xml

    <?xml version="1.0" encoding="utf-8"?>
    <openerp>
        <data>
        <!--定义表单视图-->
            <record model="ir.ui.view" id="my_training_lesson_form_view">
                <field name="name">课程表单</field>
                <field name="type">form</field>
                <field name="model">my.training.lesson</field>
                <field name="arch" type="xml">
                    <form string="课程表单">
                        <field name="name"/>
                        <field name="date_start"/>
                        <field name="total_day"/>
                        <field name="price"/>
                        <field name="teacher"/>
                        <field name="students" colspan="4"/>
                    </form>
                </field>
            </record>
            <!--定义列表视图-->
            <record model="ir.ui.view" id="my_training_lesson_tree_view">
                <field name="name">课程列表</field>
                <field name="type">tree</field>
                <field name="model">my.training.lesson</field>
                <field name="arch" type="xml">
                    <tree string="课程列表">
                        <field name="name"/>
                        <field name="date_start"/>
                        <field name="teacher"/>
                        <field name="price" sum="合计"/>
                    </tree>
                </field>
            </record>
    <!--定义视图动作-->
        <record model="ir.actions.act_window"  id="action_my_training_lesson">
            <field name="name">课程</field>    <!--这个字符串即课程对应列表或编辑界面的标题-->
            <field name="res_model">my.training.lesson</field>
            <field name="view_type">form</field>
            <field name="view_mode">form,tree</field>
            <field name="view_id" ref="my_training_lesson_tree_view"/>
        </record>
    <!--定义菜单-->
        <menuitem id="my_menu" name="培训示例"/>
        <menuitem id="my_training_menu" name="培训" parent="my_menu"/>
        <menuitem id="my_training_lesson_menu" name="培训课程" parent="my_training_menu" action="action_my_training_lesson"/>
    </data>
    </openerp>
    

    ##通过继承修改模块

    Custom Module Development第一部分中说明了怎么扩展一个系统模块, 这部分扩展刚才编写的课程模块.

    ###PyCharm中创建工程

    PyCharm中创建一个工程my_training_classroom, 存放在OE addons目录下, 并在该工程中打开OE目录(见之前的文章).

    ###文件结构

    模块名命名为”my_training_classroom”, 目录下六个文件, 如下:

    |--my_training_classroom
         |--__init__.py
         |--__openerp__.py
         |--lesson.py  #继承my.training.lesson对象的文件
         |--classroom.py
         |--lesson_view.xml
         |--classroom_view.xml
    

    ###__init__.py

    # -*- coding: utf-8 -*-
    import lesson
    import classroom
    

    ###__openerp__.py

    # -*- coding: utf-8 -*-
    {
        "name": "My Training Classroom", #模块名
        "version": "1.0",        #模块版本
        "description": 'My Training Demo -- ClassRoom', #模块说明
        "author": "Jeff",    #作者
        "website": "http://www.jeffzhang.cn", #网址
        "depends": ["my_training"],                      #依赖的模块
        "data": [
            "lesson_view.xml",      # 需要继承的视图
            "classroom_view.xml",],   # 模块更新时读入的文件
        "demo": [],
        "installable": True,                #可否安装
        'auto_install': False,
     }
    

    ###classroom.py

    from openerp.osv import fields, osv
    
    class my_training_classroom(osv.osv):
        _name = 'my.training.classroom'
        _discription = u'教室'
        _columns = {
            'number': fields.char(u'编号', size=64, select=True),
            'capacity': fields.integer(u'容纳人数', select=True),
            'location': fields.char(u'地点', size=125, select=True),
        }
    my_training_classroom()
    

    ###lesson.py

    from openerp.osv import fields, osv
    
    class my_training_lesson(osv.osv):
        _name = 'my.training.lesson'  #本对象的名称
        _inherit = 'my.training.lesson'  #要继承的对象的_name
        _columns = {
           'classroom_id': fields.many2one('my.training.classroom', u'教室'), #添加一个教室属性,为多对一对象。
        }
    
    my_training_lesson()
    

    ###lesson_view.xml

    <?xml versi>on="1.0" encoding="utf-8"?>
    <openerp>
        <data>
            <!--教室-->
                <record model="ir.ui.view" id="my_training_lesson_from_inherit_classroom_view">
                <field name="name">课程教室继承视图</field>
                <field name="type">form</field>
                <field name="model">my.training.lesson</field>
                <field name="inherit_id" ref="my_training.my_training_lesson_from_view"/>
                <field name="arch" type="xml">
                    <field name="name" position="after">
                        <field name="classroom_id"/>
                    </field>
                </field>
            </record>
        </data>
    </openerp>
    

    ###classroom_view.xml

    <?xml version="1.0" encoding="utf-8"?>
    <openerp>
        <data>
            <!--教室-->
                <record model="ir.ui.view" id="my_training_classroom_from_view">
                <field name="name">教室</field>
                <field name="type">form</field>
                <field name="model">my.training.classroom</field>
                <field name="arch" type="xml">
                    <form string="教室表单">
                        <field name="number"/>
                        <field name="capacity"/>
                        <field name="location" />
                    </form>
                </field>
            </record>
             <!--定义列表视图-->
            <record model="ir.ui.view" id="my_training_classroom_tree_view">
                <field name="name">教室列表</field>
                <field name="type">tree</field>
                <field name="model">my.training.classroom</field>
                <field name="arch" type="xml">
                    <tree string="教室列表">
                        <field name="number"/>
                        <field name="capacity" />
                        <field name="location" />
                    </tree>
                </field>
            </record>
    <!--定义视图动作-->
        <record model="ir.actions.act_window"  id="action_my_training_classroom">
            <field name="name">教室</field>
            <field name="res_model">my.training.classroom</field>
            <field name="view_type">form</field>
            <field name="view_mode">form,tree</field>
            <field name="view_id" ref="my_training_classroom_tree_view"/>
        </record>
    <!--定义菜单-->
            <menuitem id="my_training_classroom_menu" name="教室" parent="my_training.my_training_menu" action="action_my_training_classroom"/>
        </data>
    </openerp>
    

     

  • 相关阅读:
    Android TextView中实现点击文本超链接(无下划线)的封装类
    first day for new job
    配置Log4j(非常具体)
    验证数字的正则表达式集
    虚拟化知识点
    Java实现第十届蓝桥杯数的分解
    Java实现第十届蓝桥杯数的分解
    Java实现第十届蓝桥杯数的分解
    Java实现第十届蓝桥杯数列求值
    Java实现第十届蓝桥杯数列求值
  • 原文地址:https://www.cnblogs.com/zcy1103/p/9267948.html
Copyright © 2020-2023  润新知