Tutorial Odoo 9.0 Part 12 : Wizards

จาก Morange Wiki
รุ่นแก้ไขเมื่อ 05:28, 25 กรกฎาคม 2559 โดย Sirawich (คุย | มีส่วนร่วม)
(ต่าง) ←รุ่นแก้ไขก่อนหน้า | รุ่นแก้ไขล่าสุด (ต่าง) | รุ่นแก้ไขถัดไป→ (ต่าง)

Wizards

แก้ไขไฟล์ดังนี้

openacademy/__init__.py

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


openacademy/wizard/wizard.py

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

from openerp import models, fields, api

class Wizard(models.TransientModel):
    _name = 'openacademy.wizard'

    session_id = fields.Many2one('openacademy.session',
        string="Session", required=True)
    attendee_ids = fields.Many2many('res.partner', string="Attendees")


  • Launching wizards

แก้ไขไฟล์ดังนี้

openacademy/wizard/wizard.py

class Wizard(models.TransientModel):
    _name = 'openacademy.wizard'

    def _default_session(self):
        return self.env['openacademy.session'].browse(self._context.get('active_id'))

    session_id = fields.Many2one('openacademy.session',
        string="Session", required=True, default=_default_session)
    attendee_ids = fields.Many2many('res.partner', string="Attendees")


openacademy/views/openacademy.xml

                  parent="openacademy_menu"
                  action="session_list_action"/>

        <record model="ir.ui.view" id="wizard_form_view">
            <field name="name">wizard.form</field>
            <field name="model">openacademy.wizard</field>
            <field name="arch" type="xml">
                <form string="Add Attendees">
                    <group>
                        <field name="session_id"/>
                        <field name="attendee_ids"/>
                    </group>
                </form>
            </field>
        </record>

        <act_window id="launch_session_wizard"
                    name="Add Attendees"
                    src_model="openacademy.session"
                    res_model="openacademy.wizard"
                    view_mode="form"
                    target="new"
                    key2="client_action_multi"/>
    </data>
</openerp>


จากการแก้ไขโค้ดข้างต้น จะได้ผลลัพธ์ดังภาพ Odoo12-1.png
และเมื่อคลิกที่ Add attendees จะปรากฏหน้าต่างดังภาพ

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



  • Continue Launching wizards

แก้ไขไฟล์ดังนี้

openacademy/views/openacademy.xml

                        <field name="attendee_ids"/>
                    </group>
                    <footer>
                        <button name="subscribe" type="object"
                                string="Subscribe" class="oe_highlight"/>
                        or
                        <button special="cancel" string="Cancel"/>
                    </footer>
                </form>
            </field>
        </record>


openacademy/wizard.py

    session_id = fields.Many2one('openacademy.session',
        string="Session", required=True, default=_default_session)
    attendee_ids = fields.Many2many('res.partner', string="Attendees")

    @api.multi
    def subscribe(self):
        self.session_id.attendee_ids |= self.attendee_ids
        return {}


จากโค้ดข้างต้น เป็นการเพิ่ม footer และเพิ่มการ subscribe session (ต้องเป็น session อื่นที่ไม่เป็น session ที่กำลังแก้ไขอยู่)

ดังภาพ

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



  • Continue Launching wizards

แก้ไขไฟล์ดังนี้

openacademy/views/openacademy.xml

                <form string="Add Attendees">
                    <group>
                        <field name="session_ids"/>
                        <field name="attendee_ids"/>
                    </group>
                    <footer>
                        <button name="subscribe" type="object"


openacademy/wizard.py

class Wizard(models.TransientModel):
    _name = 'openacademy.wizard'

    def _default_sessions(self):
        return self.env['openacademy.session'].browse(self._context.get('active_ids'))

    session_ids = fields.Many2many('openacademy.session',
        string="Sessions", required=True, default=_default_sessions)
    attendee_ids = fields.Many2many('res.partner', string="Attendees")

    @api.multi
    def subscribe(self):
        for session in self.session_ids:
            session.attendee_ids |= self.attendee_ids
        return {}


จากโค้ดข้างต้น จะได้ผลลัพธ์ดังภาพ

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



หัวข้อถัดไป Tutorial Odoo 9.0 Part 13 : Internationalization