From 230bb2a84d44abcf132a6b2dbe50898f6cbef417 Mon Sep 17 00:00:00 2001 From: Andrea Ulliana Date: Mon, 24 Jun 2019 13:10:27 +0000 Subject: [PATCH] [IMP] w_event, event_sale, event: check registrable events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this task, an event out of date was still registrable for a customer. Now, an event is registrable only if the end date is not out of date. task-1973957 closes odoo/odoo#33389 Signed-off-by: Jérémy Kersten (jke) --- addons/event/models/event.py | 2 +- addons/event_sale/models/event.py | 10 +++--- addons/event_sale/tests/test_event_sale.py | 34 +++++++++++++++++++ .../website_event/views/event_templates.xml | 2 +- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/addons/event/models/event.py b/addons/event/models/event.py index 1c1f24a099b..7f2f6b0d325 100644 --- a/addons/event/models/event.py +++ b/addons/event/models/event.py @@ -340,7 +340,7 @@ class EventEvent(models.Model): @api.multi def _is_event_registrable(self): - return True + return self.date_end > fields.Datetime.now() @api.multi def _get_ics_file(self): diff --git a/addons/event_sale/models/event.py b/addons/event_sale/models/event.py index 3d3e9095a43..052a0594ab9 100644 --- a/addons/event_sale/models/event.py +++ b/addons/event_sale/models/event.py @@ -56,10 +56,12 @@ class Event(models.Model): @api.multi def _is_event_registrable(self): - self.ensure_one() - if not self.event_ticket_ids: - return True - return all(self.event_ticket_ids.with_context(active_test=False).mapped(lambda t: t.product_id.active)) + if super(Event, self)._is_event_registrable(): + self.ensure_one() + return all(self.event_ticket_ids.with_context(active_test=False).mapped(lambda t: t.product_id.active)) + else: + return False + class EventTicket(models.Model): _name = 'event.event.ticket' diff --git a/addons/event_sale/tests/test_event_sale.py b/addons/event_sale/tests/test_event_sale.py index 8f17f322780..92ca4246a04 100644 --- a/addons/event_sale/tests/test_event_sale.py +++ b/addons/event_sale/tests/test_event_sale.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- +import datetime from odoo.tests import common +from odoo.fields import Datetime +from unittest.mock import patch class EventSaleTest(common.TransactionCase): @@ -66,3 +69,34 @@ class EventSaleTest(common.TransactionCase): # I check if a registration is created registrations = self.EventRegistration.search([('origin', '=', self.sale_order.name)]) self.assertTrue(registrations, "The registration is not created.") + + def test_event_is_registrable(self): + self.patcher = patch('odoo.addons.event.models.event.fields.Datetime', wraps=Datetime) + self.mock_datetime = self.patcher.start() + + test_event = self.env['event.event'].create({ + 'name': 'TestEvent', + 'date_begin': datetime.datetime(2019, 6, 8, 12, 0), + 'date_end': datetime.datetime(2019, 6, 12, 12, 0), + }) + + self.mock_datetime.now.return_value = datetime.datetime(2019, 6, 9, 12, 0) + self.assertEqual(test_event._is_event_registrable(), True) + + self.mock_datetime.now.return_value = datetime.datetime(2019, 6, 13, 12, 0) + self.assertEqual(test_event._is_event_registrable(), False) + + self.mock_datetime.now.return_value = datetime.datetime(2019, 6, 10, 12, 0) + test_event.write({'event_ticket_ids': [(6, 0, [])]}) + self.assertEqual(test_event._is_event_registrable(), True) + + test_event_ticket = self.env['event.event.ticket'].create({ + 'name': 'TestTicket', + 'event_id': test_event.id, + 'product_id': 1, + }) + test_event_ticket.copy() + test_event_ticket.product_id.active = False + self.assertEqual(test_event._is_event_registrable(), False) + + self.patcher.stop() diff --git a/addons/website_event/views/event_templates.xml b/addons/website_event/views/event_templates.xml index 287e1a35b76..ca06a76b345 100644 --- a/addons/website_event/views/event_templates.xml +++ b/addons/website_event/views/event_templates.xml @@ -314,7 +314,7 @@