odoo-addon-sale-commission-product-criteria-domain 16.0.1.0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. odoo/addons/sale_commission_product_criteria_domain/README.rst +124 -0
  2. odoo/addons/sale_commission_product_criteria_domain/__init__.py +1 -0
  3. odoo/addons/sale_commission_product_criteria_domain/__manifest__.py +26 -0
  4. odoo/addons/sale_commission_product_criteria_domain/demo/demo_data.xml +137 -0
  5. odoo/addons/sale_commission_product_criteria_domain/i18n/it.po +272 -0
  6. odoo/addons/sale_commission_product_criteria_domain/i18n/sale_commission_product_criteria_domain.pot +246 -0
  7. odoo/addons/sale_commission_product_criteria_domain/models/__init__.py +6 -0
  8. odoo/addons/sale_commission_product_criteria_domain/models/account_invoice_line_agent.py +30 -0
  9. odoo/addons/sale_commission_product_criteria_domain/models/commission.py +90 -0
  10. odoo/addons/sale_commission_product_criteria_domain/models/commission_group.py +72 -0
  11. odoo/addons/sale_commission_product_criteria_domain/models/partner.py +75 -0
  12. odoo/addons/sale_commission_product_criteria_domain/models/sale_commission_line_mixin.py +66 -0
  13. odoo/addons/sale_commission_product_criteria_domain/models/sale_order_line_agent.py +29 -0
  14. odoo/addons/sale_commission_product_criteria_domain/readme/CONTRIBUTORS.rst +6 -0
  15. odoo/addons/sale_commission_product_criteria_domain/readme/DESCRIPTION.rst +9 -0
  16. odoo/addons/sale_commission_product_criteria_domain/readme/USAGE.rst +22 -0
  17. odoo/addons/sale_commission_product_criteria_domain/security/ir.model.access.csv +5 -0
  18. odoo/addons/sale_commission_product_criteria_domain/static/description/icon.png +0 -0
  19. odoo/addons/sale_commission_product_criteria_domain/static/description/index.html +453 -0
  20. odoo/addons/sale_commission_product_criteria_domain/tests/__init__.py +1 -0
  21. odoo/addons/sale_commission_product_criteria_domain/tests/test_sale_commission_product_criteria_domain.py +334 -0
  22. odoo/addons/sale_commission_product_criteria_domain/views/views.xml +222 -0
  23. odoo_addon_sale_commission_product_criteria_domain-16.0.1.0.0.3.dist-info/METADATA +143 -0
  24. odoo_addon_sale_commission_product_criteria_domain-16.0.1.0.0.3.dist-info/RECORD +26 -0
  25. odoo_addon_sale_commission_product_criteria_domain-16.0.1.0.0.3.dist-info/WHEEL +5 -0
  26. odoo_addon_sale_commission_product_criteria_domain-16.0.1.0.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,334 @@
1
+ # Copyright 2023 - ooops404
2
+ # Copyright 2023 Simone Rubino - Aion Tech
3
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
4
+ import odoo.exceptions
5
+ from odoo.tests.common import TransactionCase
6
+
7
+
8
+ class TestSaleCommissionDomain(TransactionCase):
9
+ @classmethod
10
+ def setUpClass(cls):
11
+ super(TestSaleCommissionDomain, cls).setUpClass()
12
+ cls.commission_model = cls.env["commission"]
13
+ cls.company = cls.env.ref("base.main_company")
14
+ cls.res_partner_model = cls.env["res.partner"]
15
+ cls.azure = cls.env.ref("base.res_partner_12") # Azure
16
+ cls.deco = cls.env.ref(
17
+ "sale_commission_product_criteria_domain.res_partner_2"
18
+ ) # Deco
19
+ cls.partner2 = cls.env.ref("base.res_partner_10") # The Jackson Group
20
+ cls.sale_order_model = cls.env["sale.order"]
21
+ cls.advance_inv_model = cls.env["sale.advance.payment.inv"]
22
+ cls.settle_model = cls.env["commission.settlement"]
23
+ cls.make_settle_model = cls.env["commission.make.settle"]
24
+ cls.make_inv_model = cls.env["commission.make.invoice"]
25
+ cls.product_1 = cls.env.ref("product.product_product_1")
26
+ cls.product_4 = cls.env.ref("product.product_product_4")
27
+ cls.product_5 = cls.env.ref("product.product_product_5")
28
+ cls.product_6 = cls.env.ref("product.product_product_6")
29
+ # Acoustic Bloc Screens
30
+ cls.product_product_25 = cls.env.ref("product.product_product_25")
31
+ cls.product_1.write({"invoice_policy": "order"})
32
+ cls.product_4.write({"invoice_policy": "order"})
33
+ cls.product_5.write({"invoice_policy": "order"})
34
+ cls.product_product_25.write({"invoice_policy": "order"})
35
+ cls.product_6.write({"commission_free": True, "invoice_policy": "order"})
36
+ cls.product_template_4 = cls.env.ref(
37
+ "product.product_product_4_product_template"
38
+ ) # Customizable Desk
39
+ cls.product_template_4.write({"invoice_policy": "order"})
40
+ cls.pt_11 = cls.env.ref("product.product_product_11_product_template")
41
+ cls.journal = cls.env["account.journal"].search(
42
+ [("type", "=", "purchase")], limit=1
43
+ )
44
+ cls.rules_commission_id = cls.env.ref(
45
+ "sale_commission_product_criteria.demo_commission_rules"
46
+ )
47
+ cls.com_item_1 = cls.env.ref(
48
+ "sale_commission_product_criteria.demo_commission_rules_item_1"
49
+ )
50
+ cls.com_item_2 = cls.env.ref(
51
+ "sale_commission_product_criteria.demo_commission_rules_item_2"
52
+ )
53
+ cls.com_item_3 = cls.env.ref(
54
+ "sale_commission_product_criteria.demo_commission_rules_item_3"
55
+ )
56
+ cls.com_item_4 = cls.env.ref(
57
+ "sale_commission_product_criteria.demo_commission_rules_item_4"
58
+ )
59
+ cls.demo_crr_item_1 = cls.env.ref(
60
+ "sale_commission_product_criteria_domain.demo_crr_item_1"
61
+ )
62
+ cls.demo_cig_spain = cls.env.ref(
63
+ "sale_commission_product_criteria_domain.demo_cig_spain"
64
+ )
65
+ cls.demo_cig_italy = cls.env.ref(
66
+ "sale_commission_product_criteria_domain.demo_cig_italy"
67
+ )
68
+ cls.demo_agent_rules_restricted_italy = cls.env.ref(
69
+ "sale_commission_product_criteria_domain.demo_agent_rules_restricted_italy"
70
+ )
71
+ cls.demo_agent_rules_restricted_spain = cls.env.ref(
72
+ "sale_commission_product_criteria_domain.demo_agent_rules_restricted_spain"
73
+ )
74
+ cls.demo_commission_rules_restrict = cls.env.ref(
75
+ "sale_commission_product_criteria_domain.demo_commission_rules_restrict"
76
+ )
77
+ cls.demo_commission_rules = cls.env.ref(
78
+ "sale_commission_product_criteria.demo_commission_rules"
79
+ )
80
+ cls.demo_commission = cls.env.ref("commission.demo_commission")
81
+ cls.conf_chair_config_id = cls.env.ref(
82
+ "product.product_product_11_product_template"
83
+ )
84
+ cls.cia_azure = cls.env.ref("sale_commission_product_criteria_domain.cia_azure")
85
+ cls.res_partner_tiny_sale_agent = cls.env.ref(
86
+ "commission.res_partner_tiny_sale_agent"
87
+ )
88
+
89
+ def test_commission_domain_demo_cases(self):
90
+ # Azure Spain Office furn. - Category
91
+ so = self._create_sale_order(self.product_5, self.azure)
92
+ so.recompute_lines_agents()
93
+ so.action_confirm()
94
+ invoice = self._invoice_sale_order(so)
95
+ invoice.recompute_lines_agents()
96
+ so.order_line.agent_ids._compute_amount()
97
+ invoice.line_ids.agent_ids._compute_amount()
98
+ self.assertEqual(so.order_line.agent_ids.fixed_amount, 20)
99
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 20)
100
+
101
+ # Azure Spain Customizable Desk (CONFIG) - Product Template
102
+ so = self._create_sale_order(
103
+ self.product_template_4.product_variant_id, self.azure
104
+ )
105
+ so.recompute_lines_agents()
106
+ so.action_confirm()
107
+ invoice = self._invoice_sale_order(so)
108
+ invoice.recompute_lines_agents()
109
+ so.order_line.agent_ids._compute_amount()
110
+ invoice.line_ids.agent_ids._compute_amount()
111
+ self.assertEqual(so.order_line.agent_ids.percent_amount, 5)
112
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 50)
113
+
114
+ # Azure Spain Variant: Customizable Desk (CONFIG) (Steel, White) - Variant
115
+ so = self._create_sale_order(self.product_4, self.azure)
116
+ so.recompute_lines_agents()
117
+ so.action_confirm()
118
+ invoice = self._invoice_sale_order(so)
119
+ invoice.recompute_lines_agents()
120
+ so.order_line.agent_ids._compute_amount()
121
+ invoice.line_ids.agent_ids._compute_amount()
122
+ self.assertEqual(so.order_line.agent_ids.percent_amount, 15)
123
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 150)
124
+
125
+ # Deco Italy - All products
126
+ so = self._create_sale_order(self.product_product_25, self.deco)
127
+ so.recompute_lines_agents()
128
+ so.action_confirm()
129
+ invoice = self._invoice_sale_order(so)
130
+ invoice.recompute_lines_agents()
131
+ so.order_line.agent_ids._compute_amount()
132
+ invoice.line_ids.agent_ids._compute_amount()
133
+ self.assertEqual(so.order_line.agent_ids.fixed_amount, 10)
134
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 10)
135
+
136
+ def test_commission_domain(self):
137
+ # group must have commission of CI
138
+ self.demo_crr_item_1.group_id.commission_ids = False
139
+ self.demo_crr_item_1.write({"sequence": 2})
140
+ self.assertTrue(self.demo_crr_item_1.group_id.commission_ids)
141
+
142
+ # count related agents
143
+ self.demo_cig_italy._compute_agents_count()
144
+ # self.assertEqual(demo_cig_italy.agents_count, 1)
145
+
146
+ # if commission is not type of restricted then CI must have no group
147
+ self.demo_crr_item_1.commission_id = self.demo_commission_rules
148
+ self.demo_crr_item_1.write({"sequence": 3})
149
+ self.assertFalse(self.demo_crr_item_1.group_id)
150
+
151
+ # commission.item.agent: check agent_group_ids computed properly
152
+ self.cia_azure._compute_agent_group_ids()
153
+ self.assertTrue(self.cia_azure.agent_group_ids)
154
+
155
+ # commission.item.agent: check agent_group_ids is False when agent got no rules
156
+ self.cia_azure.agent_id = self.res_partner_tiny_sale_agent
157
+ self.cia_azure._compute_agent_group_ids()
158
+ self.assertFalse(self.cia_azure.agent_group_ids)
159
+
160
+ # false, when commission is not product_restricted
161
+ self.res_partner_tiny_sale_agent.write(
162
+ {
163
+ "allowed_commission_group_ids": [(6, 0, self.demo_cig_spain.ids)],
164
+ }
165
+ )
166
+ self.assertFalse(self.res_partner_tiny_sale_agent.allowed_commission_group_ids)
167
+
168
+ # check some partners compute methods
169
+ self.azure._onchange_agent_ids()
170
+ self.azure._compute_allowed_commission_group_ids_domain()
171
+ self.assertFalse(self.azure.allowed_commission_group_ids_domain)
172
+ self.demo_agent_rules_restricted_italy._compute_allowed_commission_group_ids_domain()
173
+ self.assertTrue(
174
+ self.demo_agent_rules_restricted_italy.allowed_commission_group_ids_domain
175
+ )
176
+
177
+ # trigger window action
178
+ action = self.demo_cig_spain.action_open_related_agents()
179
+ self.assertEqual(type(action), dict)
180
+
181
+ # you cant delete it having related CIs
182
+ with self.assertRaises(exception=odoo.exceptions.ValidationError):
183
+ self.demo_cig_spain.unlink()
184
+
185
+ #
186
+ self.env["commission.items.group"].create({"name": "Delete Me"}).unlink()
187
+
188
+ # computes was modified to consider new commission type: product_restricted
189
+ so = self._create_sale_order(self.product_4, self.azure)
190
+ so.recompute_lines_agents()
191
+ so.action_confirm()
192
+ invoice = self._invoice_sale_order(so)
193
+ invoice.recompute_lines_agents()
194
+ so.order_line.agent_ids._compute_amount()
195
+ invoice.line_ids.agent_ids._compute_amount()
196
+ self.assertEqual(so.order_line.agent_ids.amount, 150)
197
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 150)
198
+
199
+ #
200
+ tst_partner = so.partner_id.copy({})
201
+ tst_partner.commission_item_agent_ids.group_ids = [
202
+ (6, 0, self.demo_cig_italy.ids)
203
+ ]
204
+ so.partner_id = tst_partner
205
+ so.order_line.agent_ids.agent_id = self.demo_agent_rules_restricted_italy
206
+ res = so.order_line.agent_ids._get_single_commission_amount(
207
+ self.demo_commission_rules_restrict,
208
+ 1,
209
+ self.conf_chair_config_id.product_variant_id,
210
+ 1,
211
+ )
212
+ self.assertEqual(res, 20)
213
+
214
+ # computes was modified to consider new commission type: product_restricted
215
+ self.demo_agent_rules_restricted_italy.commission_id = (
216
+ self.demo_commission_rules_restrict
217
+ )
218
+ so = self._create_sale_order(self.product_5, self.azure)
219
+ so.recompute_lines_agents()
220
+ so.action_confirm()
221
+ invoice = self._invoice_sale_order(so)
222
+ invoice.recompute_lines_agents()
223
+ so.order_line.agent_ids._compute_amount()
224
+ invoice.line_ids.agent_ids._compute_amount()
225
+ self.assertEqual(so.order_line.agent_ids.amount, 20)
226
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 20)
227
+
228
+ # computes was modified to consider new commission type: product_restricted
229
+ self.product_5.commission_free = True
230
+ so = self._create_sale_order(self.product_5, self.azure)
231
+ so.recompute_lines_agents()
232
+ so.action_confirm()
233
+ invoice = self._invoice_sale_order(so)
234
+ invoice.recompute_lines_agents()
235
+ so.order_line.agent_ids._compute_amount()
236
+ invoice.line_ids.agent_ids._compute_amount()
237
+ self.assertEqual(so.order_line.agent_ids.amount, 0)
238
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 0)
239
+
240
+ # computes was modified to consider new commission type: product_restricted
241
+ self.azure.agent_ids.commission_id = self.demo_commission_rules
242
+ so = self._create_sale_order(self.product_6, self.azure)
243
+ so.recompute_lines_agents()
244
+ so.action_confirm()
245
+ invoice = self._invoice_sale_order(so)
246
+ invoice.recompute_lines_agents()
247
+ so.order_line.agent_ids._compute_amount()
248
+ invoice.line_ids.agent_ids._compute_amount()
249
+ self.assertEqual(so.order_line.agent_ids.amount, 0)
250
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 0)
251
+
252
+ # computes was modified to consider new commission type: product_restricted
253
+ so = self._create_sale_order(self.product_1, self.azure)
254
+ so.recompute_lines_agents()
255
+ so.action_confirm()
256
+ invoice = self._invoice_sale_order(so)
257
+ invoice.recompute_lines_agents()
258
+ so.order_line.agent_ids._compute_amount()
259
+ invoice.line_ids.agent_ids._compute_amount()
260
+ self.assertEqual(so.order_line.agent_ids.amount, 15)
261
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 15)
262
+
263
+ # discount net_amount percentage
264
+ self.demo_agent_rules_restricted_spain.commission_id = (
265
+ self.demo_commission_rules_restrict
266
+ )
267
+ self.azure.commission_item_agent_ids.group_ids = [
268
+ (6, 0, self.demo_cig_spain.ids)
269
+ ]
270
+ so = self._create_sale_order(self.pt_11.product_variant_id, self.azure)
271
+ so.order_line.discount = 20
272
+ so.recompute_lines_agents()
273
+ so.action_confirm()
274
+ so.order_line.agent_ids.commission_id.item_ids.commission_type = "percentage"
275
+ so.order_line.agent_ids._compute_amount()
276
+ invoice.line_ids.agent_ids.commission_id = self.demo_commission_rules_restrict
277
+ invoice.line_ids.agent_ids.commission_id.amount_base_type = "net_amount"
278
+ invoice.line_ids.agent_ids.commission_id.item_ids.commission_type = "percentage"
279
+ invoice.line_ids.agent_ids._compute_amount()
280
+ self.assertEqual(so.order_line.agent_ids.amount, 0)
281
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 0)
282
+
283
+ # no commission items
284
+ self.demo_commission_rules_restrict.item_ids.unlink()
285
+ so = self._create_sale_order(self.pt_11.product_variant_id, self.azure)
286
+ so.recompute_lines_agents()
287
+ so.action_confirm()
288
+ so.order_line.agent_ids._compute_amount()
289
+ invoice.line_ids.agent_ids._compute_amount()
290
+ self.assertEqual(so.order_line.agent_ids.amount, 0)
291
+ self.assertEqual(invoice.line_ids.agent_ids.amount, 0)
292
+
293
+ # check constraint: group_ids must be set
294
+ with self.assertRaises(odoo.exceptions.ValidationError):
295
+ self.env["commission.item.agent"].create(
296
+ {
297
+ "group_ids": False,
298
+ "agent_id": 1,
299
+ "partner_id": 1,
300
+ }
301
+ )
302
+
303
+ def _create_sale_order(self, product, partner):
304
+ return self.sale_order_model.create(
305
+ {
306
+ "partner_id": partner.id,
307
+ "order_line": [
308
+ (
309
+ 0,
310
+ 0,
311
+ {
312
+ "name": product.name,
313
+ "product_id": product.id,
314
+ "product_uom_qty": 1.0,
315
+ "product_uom": product.uom_id.id,
316
+ "price_unit": 1000,
317
+ },
318
+ )
319
+ ],
320
+ }
321
+ )
322
+
323
+ def _invoice_sale_order(self, sale_order, date=None):
324
+ old_invoices = sale_order.invoice_ids
325
+ wizard = self.advance_inv_model.with_context(
326
+ **{
327
+ "active_model": "sale.order",
328
+ "active_ids": [sale_order.id],
329
+ "active_id": sale_order.id,
330
+ }
331
+ ).create({"advance_payment_method": "delivered"})
332
+ wizard.create_invoices()
333
+ invoice = sale_order.invoice_ids - old_invoices
334
+ return invoice
@@ -0,0 +1,222 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <odoo>
3
+
4
+ <record id="view_partner_form_agent_inherit" model="ir.ui.view">
5
+ <field name="name">res.partner.form.agent.inherit</field>
6
+ <field name="model">res.partner</field>
7
+ <field name="inherit_id" ref="commission.view_partner_form_agent" />
8
+ <field name="arch" type="xml">
9
+ <field name="agent_ids" position="after">
10
+ <field name="apply_commission_restrictions" invisible="1" />
11
+ <field name="commission_item_agent_ids">
12
+ <tree create="0" delete="0">
13
+ <field name="agent_id" />
14
+ <field
15
+ name="group_ids"
16
+ widget="many2many_tags"
17
+ options="{'no_create': True}"
18
+ />
19
+ <field name="agent_group_ids" invisible="1" />
20
+ <field name="partner_agent_ids" invisible="1" />
21
+ <field name="partner_id" invisible="1" />
22
+ </tree>
23
+ </field>
24
+ </field>
25
+ <field name="settlement" position="after">
26
+ <field name="commission_type" invisible="1" />
27
+ <field name="allowed_commission_group_ids_domain" invisible="1" />
28
+ <field
29
+ name="allowed_commission_group_ids"
30
+ domain="allowed_commission_group_ids_domain"
31
+ widget="many2many_tags"
32
+ options="{'no_create': True}"
33
+ attrs="{
34
+ 'invisible': [('commission_type', '!=', 'product_restricted')],
35
+ 'required': [('commission_type', '=', 'product_restricted')]
36
+ }"
37
+ />
38
+ </field>
39
+ </field>
40
+ </record>
41
+
42
+ <record id="commission_item_agent_form" model="ir.ui.view">
43
+ <field name="name">commission.item.agent.form</field>
44
+ <field name="model">commission.item.agent</field>
45
+ <field name="priority" eval="1" />
46
+ <field name="arch" type="xml">
47
+ <form>
48
+ <sheet>
49
+ <group>
50
+ <group>
51
+ <field name="agent_id" />
52
+ <field
53
+ name="group_ids"
54
+ widget="many2many_tags"
55
+ required="1"
56
+ />
57
+ <field name="agent_group_ids" invisible="1" />
58
+ <field name="partner_agent_ids" invisible="1" />
59
+ <field name="partner_id" invisible="1" />
60
+ </group>
61
+ </group>
62
+ </sheet>
63
+ </form>
64
+ </field>
65
+ </record>
66
+
67
+ <record id="commission_item_agent_tree" model="ir.ui.view">
68
+ <field name="name">commission.item.agent.tree</field>
69
+ <field name="model">commission.item.agent</field>
70
+ <field name="priority" eval="1" />
71
+ <field name="arch" type="xml">
72
+ <tree>
73
+ <field name="agent_id" />
74
+ <field name="group_ids" widget="many2many_tags" required="1" />
75
+ <field name="agent_group_ids" invisible="1" />
76
+ <field name="partner_agent_ids" invisible="1" />
77
+ <field name="partner_id" invisible="1" />
78
+ </tree>
79
+ </field>
80
+ </record>
81
+
82
+ <record id="commission_item_tree_view_inherit" model="ir.ui.view">
83
+ <field name="name">commission.item.tree.inherit</field>
84
+ <field name="model">commission.item</field>
85
+ <field
86
+ name="inherit_id"
87
+ ref="sale_commission_product_criteria.commission_item_tree_view"
88
+ />
89
+ <field name="arch" type="xml">
90
+ <field name="based_on" position="after">
91
+ <field name="sale_commission_type" invisible="1" />
92
+ <field
93
+ name="group_id"
94
+ attrs="{'invisible': [('sale_commission_type', '!=', 'product_restricted')]}"
95
+ />
96
+ </field>
97
+ </field>
98
+ </record>
99
+
100
+ <record id="commission_item_form_view_inherit" model="ir.ui.view">
101
+ <field name="name">commission.item.form.inherit</field>
102
+ <field name="model">commission.item</field>
103
+ <field
104
+ name="inherit_id"
105
+ ref="sale_commission_product_criteria.commission_item_form_view"
106
+ />
107
+ <field name="arch" type="xml">
108
+ <field name="commission_id" position="after">
109
+ <field name="sale_commission_type" invisible="1" />
110
+ <field
111
+ name="group_id"
112
+ attrs="{'invisible': [('sale_commission_type', '!=', 'product_restricted')],
113
+ 'required': [('sale_commission_type', '=', 'product_restricted')]
114
+ }"
115
+ />
116
+ </field>
117
+ </field>
118
+ </record>
119
+
120
+ <record id="commission_items_group_form" model="ir.ui.view">
121
+ <field name="name">commission.items.group.form</field>
122
+ <field name="model">commission.items.group</field>
123
+ <field name="arch" type="xml">
124
+ <form>
125
+ <sheet>
126
+ <div class="oe_button_box" name="button_box">
127
+ <button
128
+ name="action_open_related_agents"
129
+ type="object"
130
+ icon="fa-list"
131
+ class="oe_stat_button"
132
+ >
133
+ <field
134
+ string="Agents"
135
+ name="agents_count"
136
+ widget="statinfo"
137
+ />
138
+ </button>
139
+ </div>
140
+ <group>
141
+ <group>
142
+ <field name="name" />
143
+ <field
144
+ name="commission_ids"
145
+ options="{'no_create': True}"
146
+ widget="many2many_tags"
147
+ />
148
+ </group>
149
+ </group>
150
+ <field name="item_ids" />
151
+ </sheet>
152
+ </form>
153
+ </field>
154
+ </record>
155
+
156
+ <record id="commission_items_group_tree" model="ir.ui.view">
157
+ <field name="name">commission.items.group.tree</field>
158
+ <field name="model">commission.items.group</field>
159
+ <field name="arch" type="xml">
160
+ <tree>
161
+ <field name="name" />
162
+ <field name="commission_ids" widget="many2many_tags" />
163
+ </tree>
164
+ </field>
165
+ </record>
166
+
167
+ <record id="commission_items_group_tree_action" model="ir.actions.act_window">
168
+ <field name="name">Commission Type Items Groups</field>
169
+ <field name="type">ir.actions.act_window</field>
170
+ <field name="res_model">commission.items.group</field>
171
+ <field name="view_mode">tree,form</field>
172
+ <field name="view_id" ref="commission_items_group_tree" />
173
+ </record>
174
+
175
+ <record model="ir.ui.view" id="sale_commission_form_lines_mod_inherit">
176
+ <field name="name">commission.form.view.mod.inherit</field>
177
+ <field name="model">commission</field>
178
+ <field
179
+ name="inherit_id"
180
+ ref="sale_commission_product_criteria.sale_commission_form_lines_mod"
181
+ />
182
+ <field name="arch" type="xml">
183
+ <group name="rules_group" position="attributes">
184
+ <attribute name="attrs">
185
+ {'invisible': [('commission_type', 'not in', ['product','product_restricted'])]}
186
+ </attribute>
187
+ </group>
188
+ <xpath
189
+ expr="//field[@name='item_ids']//tree//field[@name='based_on']"
190
+ position="after"
191
+ >
192
+ <field
193
+ name="group_id"
194
+ attrs="{'column_invisible': [('parent.commission_type', '!=', 'product_restricted')]}"
195
+ />
196
+ </xpath>
197
+ </field>
198
+ </record>
199
+
200
+ <record model="ir.ui.view" id="sale_commission_form_lines_mod_inherit_inherit">
201
+ <field name="name">commission.form.view.inherit</field>
202
+ <field name="model">commission</field>
203
+ <field name="inherit_id" ref="commission.commission_form" />
204
+ <field name="arch" type="xml">
205
+ <xpath expr="//field[@name='section_ids']/.." position="attributes">
206
+ <attribute name="attrs">
207
+ {'invisible': [('commission_type', 'in', ['product','product_restricted'])]}
208
+ </attribute>
209
+ </xpath>
210
+ </field>
211
+ </record>
212
+
213
+ <menuitem
214
+ name="Commission Type Items Groups"
215
+ id="menu_commission_items_group"
216
+ action="commission_items_group_tree_action"
217
+ parent="commission.menu_commission_management"
218
+ groups="sales_team.group_sale_manager"
219
+ sequence="10"
220
+ />
221
+
222
+ </odoo>