diff --git a/addons/event_sale/__manifest__.py b/addons/event_sale/__manifest__.py
index 3c10cd21b4d..2b08fa36c0a 100644
--- a/addons/event_sale/__manifest__.py
+++ b/addons/event_sale/__manifest__.py
@@ -23,7 +23,6 @@ this event.
'views/event_ticket_views.xml',
'views/event_registration_views.xml',
'views/event_views.xml',
- 'views/product_views.xml',
'views/sale_order_views.xml',
'data/event_sale_data.xml',
'data/mail_data.xml',
diff --git a/addons/event_sale/data/event_sale_data.xml b/addons/event_sale/data/event_sale_data.xml
index 2fedfd9b289..20efe656cb9 100644
--- a/addons/event_sale/data/event_sale_data.xml
+++ b/addons/event_sale/data/event_sale_data.xml
@@ -8,7 +8,6 @@
30.0
-
10.0
@@ -16,10 +15,7 @@
order
- service
+ event
-
-
-
diff --git a/addons/event_sale/models/event_ticket.py b/addons/event_sale/models/event_ticket.py
index da142f973c9..278cd105cca 100644
--- a/addons/event_sale/models/event_ticket.py
+++ b/addons/event_sale/models/event_ticket.py
@@ -18,7 +18,7 @@ class EventTemplateTicket(models.Model):
# product
product_id = fields.Many2one(
'product.product', string='Product', required=True,
- domain=[("event_ok", "=", True)], default=_default_product_id)
+ domain=[("detailed_type", "=", "event")], default=_default_product_id)
price = fields.Float(
string='Price', compute='_compute_price',
digits='Product Price', readonly=False, store=True)
diff --git a/addons/event_sale/models/product.py b/addons/event_sale/models/product.py
index da6b544c5ea..7574c088747 100644
--- a/addons/event_sale/models/product.py
+++ b/addons/event_sale/models/product.py
@@ -6,29 +6,22 @@ from odoo import api, fields, models
class ProductTemplate(models.Model):
_inherit = 'product.template'
- event_ok = fields.Boolean(string='Is an Event Ticket', help="If checked this product automatically "
- "creates an event registration at the sales order confirmation.")
+ detailed_type = fields.Selection(selection_add=[
+ ('event', 'Event Ticket'),
+ ], ondelete={'event': 'set default'})
- @api.onchange('event_ok')
- def _onchange_event_ok(self):
- if self.event_ok:
- self.type = 'service'
+ @api.onchange('detailed_type')
+ def _onchange_type_event(self):
+ if self.detailed_type == 'event':
self.invoice_policy = 'order'
- def _compute_show_service_fields(self):
- super()._compute_show_service_fields()
- for record in self:
- record.show_service_fields |= record.type == 'event'
+ def _detailed_type_mapping(self):
+ type_mapping = super()._detailed_type_mapping()
+ type_mapping['event'] = 'service'
+ return type_mapping
class Product(models.Model):
_inherit = 'product.product'
event_ticket_ids = fields.One2many('event.event.ticket', 'product_id', string='Event Tickets')
-
- @api.onchange('event_ok')
- def _onchange_event_ok(self):
- """ Redirection, inheritance mechanism hides the method on the model """
- if self.event_ok:
- self.type = 'service'
- self.invoice_policy = 'order'
diff --git a/addons/event_sale/models/sale_order.py b/addons/event_sale/models/sale_order.py
index 60b84a2eaf0..7e12b878747 100644
--- a/addons/event_sale/models/sale_order.py
+++ b/addons/event_sale/models/sale_order.py
@@ -66,7 +66,12 @@ class SaleOrderLine(models.Model):
event_ticket_id = fields.Many2one(
'event.event.ticket', string='Event Ticket',
help="Choose an event ticket and it will automatically create a registration for this event ticket.")
- event_ok = fields.Boolean(related='product_id.event_ok', readonly=True)
+ event_ok = fields.Boolean(compute='_compute_event_ok')
+
+ @api.depends('product_id.detailed_type')
+ def _compute_event_ok(self):
+ for record in self:
+ record.event_ok = record.product_id.detailed_type == 'event'
@api.depends('state', 'event_id')
def _compute_product_uom_readonly(self):
diff --git a/addons/event_sale/static/src/js/event_configurator_controller.js b/addons/event_sale/static/src/js/event_configurator_controller.js
index 3ae81387b78..884a7067224 100644
--- a/addons/event_sale/static/src/js/event_configurator_controller.js
+++ b/addons/event_sale/static/src/js/event_configurator_controller.js
@@ -5,7 +5,7 @@ var FormController = require('web.FormController');
/**
* This controller is overridden to allow configuring sale_order_lines through a popup
- * window when a product with 'event_ok' is selected.
+ * window when a product with 'detailed_type' == 'event' is selected.
*
* This allows keeping an editable list view for sales order and remove the noise of
* those 2 fields ('event_id' + 'event_ticket_id')
diff --git a/addons/event_sale/static/src/js/event_configurator_widget.js b/addons/event_sale/static/src/js/event_configurator_widget.js
index eff0edd3a99..7d2f130c66a 100644
--- a/addons/event_sale/static/src/js/event_configurator_widget.js
+++ b/addons/event_sale/static/src/js/event_configurator_widget.js
@@ -54,9 +54,9 @@ ProductConfiguratorWidget.include({
return this._rpc({
model: 'product.product',
method: 'read',
- args: [productId, ['event_ok']],
+ args: [productId, ['detailed_type']],
}).then(function (result) {
- if (Array.isArray(result) && result.length && result[0].event_ok) {
+ if (Array.isArray(result) && result.length && result[0].detailed_type === 'event') {
self._openEventConfigurator({
default_product_id: productId
},
diff --git a/addons/event_sale/static/tests/event_configurator.test.js b/addons/event_sale/static/tests/event_configurator.test.js
index 9ed0c98c9ff..e919db12e89 100644
--- a/addons/event_sale/static/tests/event_configurator.test.js
+++ b/addons/event_sale/static/tests/event_configurator.test.js
@@ -27,18 +27,18 @@ odoo.define('event.configurator.tests', function (require) {
'product.product': {
fields: {
id: {type: 'integer'},
- event_ok: {type: 'boolean'},
+ detailed_type: {type: 'selection'},
rent_ok: {type: 'boolean'}//sale_rental purposes
},
records: [{
id: 1,
display_name: "Customizable Event",
- event_ok: true,
+ detailed_type: 'event',
rent_ok: false//sale_rental purposes
}, {
id: 2,
display_name: "Desk",
- event_ok: false,
+ detailed_type: 'service',
rent_ok: false//sale_rental purposes
}]
},
@@ -85,9 +85,9 @@ odoo.define('event.configurator.tests', function (require) {
data: this.data,
arch: getArch(),
mockRPC: function (route, params) {
- if (params.method === 'read' && params.args[1][0] === 'event_ok') {
+ if (params.method === 'read' && params.args[1][0] === 'detailed_type') {
assert.ok(true);
- return Promise.resolve([{event_ok: false}]);
+ return Promise.resolve([{detailed_type: 'service'}]);
}
return this._super.apply(this, arguments);
},
@@ -114,9 +114,9 @@ odoo.define('event.configurator.tests', function (require) {
data: this.data,
arch: getArch(),
mockRPC: function (route, params) {
- if (params.method === 'read' && params.args[1][0] === 'event_ok') {
+ if (params.method === 'read' && params.args[1][0] === 'detailed_type') {
assert.ok(true);
- return Promise.resolve([{event_ok: true}]);
+ return Promise.resolve([{detailed_type: 'event'}]);
}
return this._super.apply(this, arguments);
},
diff --git a/addons/event_sale/tests/common.py b/addons/event_sale/tests/common.py
index bc4be1d8f20..cf75273e000 100644
--- a/addons/event_sale/tests/common.py
+++ b/addons/event_sale/tests/common.py
@@ -15,7 +15,6 @@ class TestEventSaleCommon(TestEventCommon, TestSalesCommon):
'name': 'Test Registration Product',
'description_sale': 'Mighty Description',
'list_price': 10,
- 'event_ok': True,
'standard_price': 30.0,
- 'type': 'service',
+ 'detailed_type': 'event',
})
diff --git a/addons/event_sale/tests/test_event_sale.py b/addons/event_sale/tests/test_event_sale.py
index b4d5bd9e23e..68346f72eb4 100644
--- a/addons/event_sale/tests/test_event_sale.py
+++ b/addons/event_sale/tests/test_event_sale.py
@@ -17,8 +17,7 @@ class TestEventSale(TestEventSaleCommon):
product = cls.env['product.product'].create({
'name': 'Event',
- 'type': 'service',
- 'event_ok': True,
+ 'detailed_type': 'event',
})
cls.user_salesperson = mail_new_test_user(cls.env, login='user_salesman', groups='sales_team.group_sale_salesman')
diff --git a/addons/event_sale/views/event_ticket_views.xml b/addons/event_sale/views/event_ticket_views.xml
index 8f94a01f61b..da52876287c 100644
--- a/addons/event_sale/views/event_ticket_views.xml
+++ b/addons/event_sale/views/event_ticket_views.xml
@@ -43,7 +43,7 @@
Sales End
-
+
@@ -57,7 +57,7 @@
-
+
@@ -98,4 +98,3 @@
-
diff --git a/addons/event_sale/views/product_views.xml b/addons/event_sale/views/product_views.xml
deleted file mode 100644
index bae39fba451..00000000000
--- a/addons/event_sale/views/product_views.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
- product.template.event.form.inherit
- product.template
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/test_event_full/tests/common.py b/addons/test_event_full/tests/common.py
index c93396d8255..0f5b152364b 100644
--- a/addons/test_event_full/tests/common.py
+++ b/addons/test_event_full/tests/common.py
@@ -24,9 +24,8 @@ class TestEventFullCommon(TestEventCrmCommon, TestSalesCommon, EventDtPatcher, M
'name': 'Test Registration Product',
'description_sale': 'Mighty Description',
'list_price': 10,
- 'event_ok': True,
'standard_price': 30.0,
- 'type': 'service',
+ 'detailed_type': 'event',
})
cls.website = cls.env['website'].search([
@@ -138,9 +137,8 @@ class TestWEventCommon(HttpCaseWithUserDemo, HttpCaseWithUserPortal, EventDtPatc
'default_code': 'EVENT_REG',
'description_sale': 'Mighty Description',
'list_price': 10,
- 'event_ok': True,
'standard_price': 30.0,
- 'type': 'service',
+ 'detailed_type': 'event',
})
self.event_tag_category_1 = self.env['event.tag.category'].create({
diff --git a/addons/website_event_sale/models/product_pricelist.py b/addons/website_event_sale/models/product_pricelist.py
index 5b0d4465759..b6fcbb48fdc 100644
--- a/addons/website_event_sale/models/product_pricelist.py
+++ b/addons/website_event_sale/models/product_pricelist.py
@@ -11,8 +11,8 @@ class PricelistItem(models.Model):
msg = ''
if self.applied_on == '3_global' or self.applied_on == '2_product_category':
msg = _("A pricelist item with a positive min. quantity will not be applied to the event tickets products.")
- elif ((self.applied_on == '1_product' and self.product_tmpl_id.event_ok) or
- (self.applied_on == '0_product_variant' and self.product_id.event_ok)):
+ elif ((self.applied_on == '1_product' and self.product_tmpl_id.type == 'event') or
+ (self.applied_on == '0_product_variant' and self.product_id.type == 'event')):
msg = _("A pricelist item with a positive min. quantity cannot be applied to this event tickets product.")
if msg:
return {'warning':
diff --git a/addons/website_event_sale/models/website.py b/addons/website_event_sale/models/website.py
index d1bf0a4f449..5250d6d0ed3 100644
--- a/addons/website_event_sale/models/website.py
+++ b/addons/website_event_sale/models/website.py
@@ -8,4 +8,4 @@ class Website(models.Model):
def sale_product_domain(self):
# remove product event from the website content grid and list view (not removed in detail view)
- return ['&'] + super(Website, self).sale_product_domain() + [('event_ok', '=', False)]
+ return ['&'] + super(Website, self).sale_product_domain() + [('type', '!=', 'event')]