From 225ea78f4c4bacceaf2fd8545f04e29579a86cbb Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Wed, 7 Mar 2018 09:36:06 +0100 Subject: [PATCH] [IMP]GOLEM Activity Queue : usage of constrains instead of write, and few enhancements in onchange logic --- golem_activity_queue/__manifest__.py | 2 +- golem_activity_queue/models/golem_activity.py | 28 +++++++++---------- .../tests/test_golem_activity_queue.py | 1 + .../views/golem_activity_views.xml | 6 ++-- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/golem_activity_queue/__manifest__.py b/golem_activity_queue/__manifest__.py index 2c6703b..dad6fec 100644 --- a/golem_activity_queue/__manifest__.py +++ b/golem_activity_queue/__manifest__.py @@ -20,7 +20,7 @@ 'name': 'GOLEM activity queues', 'summary': 'GOLEM activity queues', 'description': ''' GOLEM activity queue management ''', - 'version': '10.0.1.1.4', + 'version': '10.0.1.1.5', 'category': 'GOLEM', 'author': 'Youssef El Ouahby, Fabien Bourgeois', 'license': 'AGPL-3', diff --git a/golem_activity_queue/models/golem_activity.py b/golem_activity_queue/models/golem_activity.py index d250932..aa811a7 100644 --- a/golem_activity_queue/models/golem_activity.py +++ b/golem_activity_queue/models/golem_activity.py @@ -39,7 +39,8 @@ class GolemActivity(models.Model): @api.multi def write(self, vals): - """ Override method write to delete record from queue if they register in activity""" + """ Override method write to delete record from queue if they register + in activity (only for manual queue processing) """ res = super(GolemActivity, self).write(vals) registration_vals = vals.get('activity_registration_ids') if registration_vals: @@ -52,10 +53,7 @@ class GolemActivity(models.Model): ('member_id', '=', mem_id)] queue = self.env['golem.activity.queue'].search(domain) if queue: - # remove registration queue.unlink() - # self.activity_queue_ids = [(2, queue.id, False)] - self.automated_register_from_queue() return res @api.multi @@ -93,14 +91,16 @@ class GolemActivity(models.Model): self.env['golem.activity.registration'].create(values) queue.unlink() - @api.multi + @api.constrains('activity_queue_ids', 'activity_registration_ids', + 'places_remain', 'queue_allowed', 'queue_activity_number', + 'auto_registration_from_queue') def automated_register_from_queue(self): """automated registration from queue""" - for record in self: - if (record.places_remain and record.queue_allowed and - record.queue_activity_number > 0 and - record.auto_registration_from_queue): - record.register_from_queue() + for activity in self: + if (activity.places_remain and activity.queue_allowed and + activity.queue_activity_number > 0 and + activity.auto_registration_from_queue): + activity.register_from_queue() @api.depends('activity_queue_ids') def _compute_queue_activity_number(self): @@ -108,12 +108,12 @@ class GolemActivity(models.Model): for activity in self: activity.queue_activity_number = len(activity.activity_queue_ids) - @api.multi @api.onchange('activity_registration_ids') def _check_registration_number(self): for activity in self: - places_remain = activity.places - activity.places_used - if places_remain == 0 and activity.queue_allowed: + # Needed to ensure that we are negative in places + activity._compute_places_remain() + if activity.places_remain < 0 and activity.queue_allowed: message = _('No remaining place for the activity : {}, please' ' discard changes and register in the queue.') return { @@ -122,7 +122,7 @@ class GolemActivity(models.Model): 'message': message.format(activity.name), } } - elif places_remain > 0 and activity.queue_activity_number > 0: + elif activity.places_remain > 0 and activity.queue_activity_number > 0: if activity.auto_registration_from_queue: warning_message = _('There is a free place for the activity' ' : {}, once you save it will be filled' diff --git a/golem_activity_queue/tests/test_golem_activity_queue.py b/golem_activity_queue/tests/test_golem_activity_queue.py index f1ccf36..2708f03 100644 --- a/golem_activity_queue/tests/test_golem_activity_queue.py +++ b/golem_activity_queue/tests/test_golem_activity_queue.py @@ -55,6 +55,7 @@ class TestGolemActivityQueue(TransactionCase): """ Test activity queue bases """ member1 = self.member1.create(self.data_member_1) activity = self.activity.create(self.data_activity) + activity.auto_registration_from_queue = False activity_queue = self.activity_queue.create({'activity_id': activity.id, 'member_id': member1.id}) self.assertEqual(activity.activity_queue_ids[0], activity_queue) diff --git a/golem_activity_queue/views/golem_activity_views.xml b/golem_activity_queue/views/golem_activity_views.xml index 0e423f5..4ef83f9 100644 --- a/golem_activity_queue/views/golem_activity_views.xml +++ b/golem_activity_queue/views/golem_activity_views.xml @@ -22,7 +22,7 @@ along with this program. If not, see . + model="ir.ui.view"> Add the queue registration items to activity form golem.activity @@ -66,11 +66,11 @@ along with this program. If not, see . attrs="{'invisible': [('queue_allowed', '=', False)]}" confirm="Are you sure you want to remove queue from this activity ? This will delete all elements currently registred in"/>