[ADD] extend the demo module to showcase more possibilities

pull/1373/head
Holger Brunn 2019-09-15 06:12:55 +02:00
parent a5e6acc3a6
commit 09dd190780
No known key found for this signature in database
GPG Key ID: 5306CE414AFC231E
4 changed files with 70 additions and 6 deletions

View File

@ -10,8 +10,11 @@ class X2MDemo(models.Model):
line_ids = fields.One2many('x2m.demo.line', 'demo_id') line_ids = fields.One2many('x2m.demo.line', 'demo_id')
@api.multi @api.multi
def open_x2m_matrix(self): def _open_x2m_matrix(self, view_xmlid):
wiz = self.env['x2m.matrix.demo.wiz'].create({}) wiz = self.env['x2m.matrix.demo.wiz'].create({})
view_id = self.env.ref(
'web_widget_x2many_2d_matrix_example.%s' % view_xmlid,
).id
return { return {
'name': 'Try x2many 2D matrix widget', 'name': 'Try x2many 2D matrix widget',
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
@ -20,9 +23,22 @@ class X2MDemo(models.Model):
'res_model': 'x2m.matrix.demo.wiz', 'res_model': 'x2m.matrix.demo.wiz',
'target': 'new', 'target': 'new',
'res_id': wiz.id, 'res_id': wiz.id,
'view_id': view_id,
'context': self.env.context, 'context': self.env.context,
} }
@api.multi
def open_x2m_matrix(self):
return self._open_x2m_matrix('x2many_2d_matrix_demo')
@api.multi
def open_x2m_matrix_selection(self):
return self._open_x2m_matrix('x2many_2d_matrix_demo_selection')
@api.multi
def open_x2m_matrix_many2one(self):
return self._open_x2m_matrix('x2many_2d_matrix_demo_many2one')
class X2MDemoLine(models.Model): class X2MDemoLine(models.Model):
_name = 'x2m.demo.line' _name = 'x2m.demo.line'
@ -32,3 +48,7 @@ class X2MDemoLine(models.Model):
demo_id = fields.Many2one('x2m.demo') demo_id = fields.Many2one('x2m.demo')
user_id = fields.Many2one('res.users') user_id = fields.Many2one('res.users')
value = fields.Integer() value = fields.Integer()
value_selection = fields.Selection(
[('val1', 'Value 1'), ('val2', 'Value 2')],
)
value_many2one = fields.Many2one('res.groups')

View File

@ -13,6 +13,8 @@
<tree> <tree>
<field name="name"/> <field name="name"/>
<field name="value"/> <field name="value"/>
<field name="value_selection"/>
<field name="value_many2one"/>
<field name="user_id"/> <field name="user_id"/>
</tree> </tree>
</field> </field>
@ -20,7 +22,13 @@
<footer> <footer>
<button name="open_x2m_matrix" type="object" <button name="open_x2m_matrix" type="object"
string="Try x2m 2d matrix" string="Try x2m 2d matrix"
class="oe_stat_button" icon="fa-edit"/> class="oe_link" icon="fa-edit"/>
<button name="open_x2m_matrix_selection" type="object"
string="Try x2m 2d matrix (selection)"
class="oe_link" icon="fa-edit"/>
<button name="open_x2m_matrix_many2one" type="object"
string="Try x2m 2d matrix (many2one)"
class="oe_link" icon="fa-edit"/>
</footer> </footer>
</sheet> </sheet>
</form> </form>

View File

@ -10,19 +10,19 @@ class X2mMatrixDemoWiz(models.TransientModel):
'x2m.demo.line', default=lambda self: self._default_line_ids()) 'x2m.demo.line', default=lambda self: self._default_line_ids())
def _default_line_ids(self): def _default_line_ids(self):
"""take care that the widget gets records passed for every combination
of x2m.demo and res.users involved"""
recs = self.env['x2m.demo'].search([]) recs = self.env['x2m.demo'].search([])
# same with users
users = self.env['x2m.demo.line'].search([]).mapped('user_id') users = self.env['x2m.demo.line'].search([]).mapped('user_id')
return [ return [
(0, 0, { (0, 0, {
'name': "{}'s task on {}".format(usr.name, rec.name), 'name': "{}'s task on {}".format(usr.name, rec.name),
'demo_id': rec.id, 'demo_id': rec.id,
'user_id': usr.id, 'user_id': usr.id,
'value': 0,
}) })
# if the project doesn't have a task for the user, create a new one # if there isn't a demo line record for the user, create a new one
if not rec.line_ids.filtered(lambda x: x.user_id == usr) else if not rec.line_ids.filtered(lambda x: x.user_id == usr) else
# otherwise, return the task # otherwise, return the line
(4, rec.line_ids.filtered(lambda x: x.user_id == usr)[0].id) (4, rec.line_ids.filtered(lambda x: x.user_id == usr)[0].id)
for rec in recs for rec in recs
for usr in users for usr in users

View File

@ -19,4 +19,40 @@
</field> </field>
</record> </record>
<record id="x2many_2d_matrix_demo_selection" model="ir.ui.view">
<field name="name">x2m.matrix.demo.wiz</field>
<field name="model">x2m.matrix.demo.wiz</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form>
<field name="line_ids" widget="x2many_2d_matrix"
field_x_axis="demo_id" field_y_axis="user_id" field_value="value_selection">
<tree>
<field name="demo_id"/>
<field name="user_id"/>
<field name="value_selection"/>
</tree>
</field>
</form>
</field>
</record>
<record id="x2many_2d_matrix_demo_many2one" model="ir.ui.view">
<field name="name">x2m.matrix.demo.wiz</field>
<field name="model">x2m.matrix.demo.wiz</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form>
<field name="line_ids" widget="x2many_2d_matrix"
field_x_axis="demo_id" field_y_axis="user_id" field_value="value_many2one">
<tree>
<field name="demo_id"/>
<field name="user_id"/>
<field name="value_many2one" domain="[('users', '=', user_id)]"/>
</tree>
</field>
</form>
</field>
</record>
</odoo> </odoo>