mirror of https://github.com/OCA/web.git
[ADD] extend the demo module to showcase more possibilities
parent
a5e6acc3a6
commit
09dd190780
|
@ -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')
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue