Skip to content

Commit a1c5ad2

Browse files
committed
edi_oca: add edi.configuration.trigger
Ease configuration by filtering triggers by model. In the long run we'll have tons of triggers for specific scopes (sale, purchase, etc). This change will make sure the selection of the trigger won't be cluttered. It also adds the possibility to describe triggers as users prefer.
1 parent 5d22c1b commit a1c5ad2

8 files changed

+114
-38
lines changed

edi_oca/__manifest__.py

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"views/edi_exchange_type_views.xml",
4040
"views/edi_exchange_type_rule_views.xml",
4141
"views/edi_configuration_views.xml",
42+
"views/edi_configuration_trigger_views.xml",
4243
"views/res_partner.xml",
4344
"views/menuitems.xml",
4445
"templates/exchange_chatter_msg.xml",

edi_oca/data/edi_configuration.xml

+31-12
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,39 @@
44
Examlple:
55
<field name="snippet_do">record._edi_send_via_email(ir_action)</field>
66
-->
7-
<record id="edi_conf_send_via_email" model="edi.configuration">
8-
<field name="name">Send Via Email</field>
9-
<field name="active">False</field>
10-
<field name="code">on_send_via_email</field>
11-
<field name="trigger">on_send_via_email</field>
12-
<field name="snippet_do">record._edi_send_via_email()</field>
7+
8+
<record id="edi_conf_trigger_record_create" model="edi.configuration.trigger">
9+
<field name="name">On record create</field>
10+
<field name="code">on_record_create</field>
11+
<field name="description">Trigger when a record is created</field>
12+
</record>
13+
<record id="edi_conf_trigger_record_write" model="edi.configuration.trigger">
14+
<field name="name">On record write</field>
15+
<field name="code">on_record_write</field>
16+
<field name="description">Trigger when a record is updated</field>
17+
</record>
18+
<!-- TODO: these 2 have to be triggered somehow -->
19+
<record id="edi_conf_trigger_send_via_email" model="edi.configuration.trigger">
20+
<field name="name">Send via email</field>
21+
<field name="code">on_send_via_email</field>
22+
<field name="description">Send record via email TBD</field>
23+
</record>
24+
<record id="edi_conf_trigger_send_via_edi" model="edi.configuration.trigger">
25+
<field name="name">Send via EDI</field>
26+
<field name="code">on_send_via_edi</field>
27+
<field name="description">Send record via EDI TBD</field>
1328
</record>
1429

15-
<!-- Add type_id to use Send Via EDI -->
30+
<record id="edi_conf_send_via_email" model="edi.configuration">
31+
<field name="name">Send Via Email</field>
32+
<field name="active">False</field>
33+
<field name="trigger_id" ref="edi_conf_trigger_send_via_email" />
34+
<field name="snippet_do">record._edi_send_via_email()</field>
35+
</record>
1636
<record id="edi_conf_send_via_edi" model="edi.configuration">
17-
<field name="name">Send Via EDI</field>
18-
<field name="active">False</field>
19-
<field name="code">on_send_via_edi</field>
20-
<field name="trigger">on_send_via_edi</field>
21-
<field name="snippet_do">record._edi_send_via_edi(conf.type_id)</field>
37+
<field name="name">Send Via EDI</field>
38+
<field name="active">False</field>
39+
<field name="trigger_id" ref="edi_conf_trigger_send_via_edi" />
40+
<field name="snippet_do">record._edi_send_via_edi(conf.type_id)</field>
2241
</record>
2342
</odoo>

edi_oca/models/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
from . import edi_exchange_type
66
from . import edi_exchange_type_rule
77
from . import edi_id_mixin
8+
from . import edi_configuration_trigger
89
from . import edi_configuration

edi_oca/models/edi_configuration.py

+5-16
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ class EdiConfiguration(models.Model):
3333

3434
name = fields.Char(string="Name", required=True)
3535
active = fields.Boolean(default=True)
36-
code = fields.Char(required=True, copy=False, index=True, unique=True)
3736
description = fields.Char(help="Describe what the conf is for")
3837
backend_id = fields.Many2one(string="Backend", comodel_name="edi.backend")
3938
# Field `type_id` is not a mandatory field because we will create 2 common confs
@@ -52,23 +51,13 @@ class EdiConfiguration(models.Model):
5251
help="Model the conf applies to. Leave blank to apply for all models",
5352
)
5453
model_name = fields.Char(related="model_id.model", store=True)
55-
trigger = fields.Selection(
56-
# The selections below are intended to assist with basic operations
57-
# and are used to setup common configuration.
58-
[
59-
("on_record_write", "Update Record"),
60-
("on_record_create", "Create Record"),
61-
("on_send_via_email", "Send Via Email"),
62-
("on_send_via_edi", "Send Via EDI"),
63-
("disabled", "Disabled"),
64-
],
54+
trigger_id = fields.Many2one(
6555
string="Trigger",
66-
# The default selection will be disabled.
67-
# which would allow to keep the conf visible but disabled.
68-
required=True,
69-
default="disabled",
70-
ondelete="on default",
56+
comodel_name="edi.configuration.trigger",
57+
help="Trigger that activates this configuration",
58+
domain="['|', ('model_id', '=', model_id), ('model_id', '=', False)]",
7159
)
60+
trigger = fields.Char(related="trigger_id.code")
7261
snippet_before_do = fields.Text(
7362
string="Snippet Before Do",
7463
help="Snippet to validate the state and collect records to do",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Copyright 2024 Camptocamp SA
2+
# @author Simone Orsi <simahawk@gmail.com>
3+
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
4+
5+
from odoo import fields, models
6+
7+
8+
class EdiConfigurationTrigger(models.Model):
9+
_name = "edi.configuration.trigger"
10+
_description = """
11+
Describe what triggers a specific action for a configuration.
12+
"""
13+
14+
name = fields.Char(string="Name", required=True)
15+
code = fields.Char(required=True, copy=False)
16+
active = fields.Boolean(default=True)
17+
description = fields.Char(help="Describe what the conf is for")
18+
model_id = fields.Many2one(
19+
"ir.model",
20+
string="Model",
21+
help="Model the conf applies to. Leave blank to apply for all models",
22+
)
23+
24+
_sql_constraints = [("code_uniq", "unique(code)", "Code must be unique")]

edi_oca/tests/test_edi_configuration.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,9 @@ def _setup_records(cls):
6565
{
6666
"name": "Create Config",
6767
"active": True,
68-
"code": "create_config",
6968
"backend_id": cls.backend.id,
7069
"type_id": cls.exchange_type_out.id,
71-
"trigger": "on_record_create",
70+
"trigger_id": cls.env.ref("edi_oca.edi_conf_trigger_record_create").id,
7271
"model_id": cls.env["ir.model"]._get_id("edi.exchange.consumer.test"),
7372
"snippet_do": "record._edi_send_via_edi(conf.type_id)",
7473
}
@@ -77,10 +76,9 @@ def _setup_records(cls):
7776
{
7877
"name": "Write Config 1",
7978
"active": True,
80-
"code": "write_config",
8179
"backend_id": cls.backend.id,
8280
"type_id": cls.exchange_type_out.id,
83-
"trigger": "on_record_write",
81+
"trigger_id": cls.env.ref("edi_oca.edi_conf_trigger_record_write").id,
8482
"model_id": cls.env["ir.model"]._get_id("edi.exchange.consumer.test"),
8583
"snippet_do": "record._edi_send_via_edi(conf.type_id)",
8684
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<odoo>
3+
<record id="edi_configuration_trigger_view_tree" model="ir.ui.view">
4+
<field name="model">edi.configuration.trigger</field>
5+
<field name="arch" type="xml">
6+
<tree>
7+
<field name="name" />
8+
<field name="description" />
9+
<field name="code" />
10+
<field name="model_id" />
11+
<field name="active" />
12+
</tree>
13+
</field>
14+
</record>
15+
<record id="edi_configuration_trigger_view_form" model="ir.ui.view">
16+
<field name="model">edi.configuration.trigger</field>
17+
<field name="arch" type="xml">
18+
<form>
19+
<sheet>
20+
<field name="active" invisible="1" />
21+
<widget
22+
name="web_ribbon"
23+
title="Archived"
24+
bg_color="bg-danger"
25+
attrs="{'invisible': [('active', '=', True)]}"
26+
/>
27+
<group>
28+
<group>
29+
<field name="name" />
30+
<field name="code" />
31+
<field name="description" />
32+
</group>
33+
<group>
34+
<field
35+
name="model_id"
36+
options="{'no_create': True, 'no_create_edit': True}"
37+
/>
38+
</group>
39+
</group>
40+
</sheet>
41+
</form>
42+
</field>
43+
</record>
44+
</odoo>

edi_oca/views/edi_configuration_views.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<field name="model_id" />
99
<field name="active" />
1010
<field name="type_id" />
11-
<field name="trigger" />
11+
<field name="trigger_id" />
1212
<filter
1313
name="active"
1414
string="Active"
@@ -28,9 +28,8 @@
2828
<field name="arch" type="xml">
2929
<tree>
3030
<field name="name" />
31-
<field name="code" />
3231
<field name="model_id" />
33-
<field name="trigger" />
32+
<field name="trigger_id" />
3433
<field name="backend_id" />
3534
<field name="type_id" />
3635
<field name="description" />
@@ -53,14 +52,15 @@
5352
<group>
5453
<group>
5554
<field name="name" />
56-
<field name="active" />
5755
<field name="description" />
5856
<field name="backend_id" />
5957
<field name="type_id" />
60-
<field name="code" />
6158
</group>
6259
<group>
63-
<field name="trigger" />
60+
<field
61+
name="trigger_id"
62+
options="{'no_create': True, 'no_create_edit': True}"
63+
/>
6464
<field
6565
name="model_id"
6666
options="{'no_create': True, 'no_create_edit': True}"

0 commit comments

Comments
 (0)