From b855e1436e5acf2bd8f298edf0f580af84f4a016 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Mon, 16 Apr 2018 19:16:53 +0200 Subject: [PATCH] [WIP][REF]GOLEM Resource Pack : 1rst pass of refactoring on models and views --- golem_resource_pack/__manifest__.py | 2 +- golem_resource_pack/models/__init__.py | 3 +- .../models/golem_resource_pack.py | 79 ++++++++----------- .../models/golem_resource_reservation.py | 3 +- .../security/ir.model.access.csv | 2 +- .../views/golem_resource_pack_views.xml | 9 ++- .../wizard/golem_pack_rejection.py | 9 +-- .../wizard/golem_pack_rejection_views.xml | 10 ++- golem_resource_pack_account/__manifest__.py | 6 +- .../models/golem_resource_pack.py | 24 +++--- .../views/golem_resource_pack_views.xml | 7 +- 11 files changed, 72 insertions(+), 82 deletions(-) diff --git a/golem_resource_pack/__manifest__.py b/golem_resource_pack/__manifest__.py index 7bfea4b..e88a8df 100644 --- a/golem_resource_pack/__manifest__.py +++ b/golem_resource_pack/__manifest__.py @@ -24,7 +24,7 @@ 'category': 'GOLEM', 'author': 'Youssef El Ouahby, Fabien Bourgeois', 'license': 'AGPL-3', - 'application': True, + 'application': False, 'installable': True, 'depends': ['golem_resource'], 'data': ['views/golem_resource_pack_views.xml', diff --git a/golem_resource_pack/models/__init__.py b/golem_resource_pack/models/__init__.py index ea2f68b..3463d14 100644 --- a/golem_resource_pack/models/__init__.py +++ b/golem_resource_pack/models/__init__.py @@ -16,5 +16,4 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from . import golem_resource_pack, \ - golem_resource_reservation +from . import golem_resource_pack, golem_resource_reservation diff --git a/golem_resource_pack/models/golem_resource_pack.py b/golem_resource_pack/models/golem_resource_pack.py index ad51f7e..5fba353 100644 --- a/golem_resource_pack/models/golem_resource_pack.py +++ b/golem_resource_pack/models/golem_resource_pack.py @@ -28,47 +28,54 @@ class GolemResourcePack(models.Model): _description = 'GOLEM Resource Pack Model' _inherit = 'mail.thread' - name = fields.Char(compute='_compute_name', store=True) + name = fields.Char(required=True) reservation_ids = fields.One2many('golem.resource.reservation', 'pack_id', - readonly=True, track_visibility='onchange', - states={'draft': [('readonly', False)], - False : [('readonly', False)]}) + readonly=True, string='Reservations', + states={'draft': [('readonly', False)]}) note = fields.Text(help='Notes, optional subject for the reservation, reason', track_visibility='onchange', readonly=True, - states={'draft': [('readonly', False)], - False : [('readonly', False)]}) + states={'draft': [('readonly', False)]}) user_id = fields.Many2one('res.users', required=True, index=True, readonly=True, string='User', default=lambda self: self.env.user) partner_id = fields.Many2one('res.partner', string='On behalf of', required=True, index=True, track_visibility='onchange', readonly=True, - states={'draft': [('readonly', False)], - False : [('readonly', False)]}) + states={'draft': [('readonly', False)]}) state = fields.Selection([('canceled', 'Canceled'), ('draft', 'Draft'), ('confirmed', 'Confirmed'), ('validated', 'Validated'), ('rejected', 'Rejected')], - default='draft', compute="_compute_pack_state", + default='draft', compute='_compute_pack_state', track_visibility='onchange') - reservation_count = fields.Integer(compute="_compute_reservation_count", - string="Reservation count") + reservation_count = fields.Integer(compute='_compute_reservation_count') rejection_reason = fields.Text(readonly=True, track_visibility='onchange') - @api.multi - @api.constrains('partner_id') - def set_reservation_partner(self): - """ Set reservation partner """ - for pack in self: - pack.reservation_ids.write({'partner_id': pack.partner_id.id}) - - @api.multi @api.depends('reservation_ids') def _compute_reservation_count(self): for pack in self: pack.reservation_count = len(pack.reservation_ids) + @api.depends('reservation_ids', 'reservation_ids.state') + def _compute_pack_state(self): + """ get pack state """ + for pack in self: + if not pack.reservation_ids: + pack.state = 'draft' + else: + reservation_states = pack.mapped('reservation_ids.state') + if 'rejected' in reservation_states: + pack.state = 'rejected' + elif 'canceled' in reservation_states: + pack.state = 'canceled' + elif 'draft' in reservation_states: + pack.state = 'draft' + elif 'confirmed' in reservation_states: + pack.state = 'confirmed' + elif 'validated' in reservation_states: + pack.state = 'validated' + @api.multi def state_confirm(self): """ pack confirm """ @@ -105,34 +112,16 @@ class GolemResourcePack(models.Model): 'view_mode': 'form', 'target': 'new'} - - @api.depends('partner_id') - def _compute_name(self): - """ Compute pack name """ + @api.constrains('partner_id') + def set_reservation_partner(self): + """ Set reservation partner """ for pack in self: - pack.name = u'{}/{}'.format(pack.partner_id.name, - pack.create_date) - @api.multi + pack.reservation_ids.write({'partner_id': pack.partner_id.id}) + @api.constrains('reservation_ids') def check_reservation_partner(self): """ Check reservation partner """ for pack in self: - if len(filter(lambda x: x.partner_id == pack.partner_id, pack.reservation_ids)) < len(pack.reservation_ids): - raise ValidationError(_('Pack client should be the same for all reservations')) - - @api.multi - @api.depends('reservation_ids') - def _compute_pack_state(self): - """ get pack state """ - for pack in self: - reservation_states = list(map(lambda x: x.state, pack.reservation_ids)) - if "rejected" in reservation_states: - pack.state = 'rejected' - elif "canceled" in reservation_states: - pack.state = 'canceled' - elif "draft" in reservation_states: - pack.state = 'draft' - elif "confirmed" in reservation_states: - pack.state = 'confirmed' - elif "validated" in reservation_states: - pack.state = 'validated' + if len(pack.reservation_ids.mapped('partner_id')) > 1: + raise ValidationError(_('Pack partner should be the same for ' + 'all reservations')) diff --git a/golem_resource_pack/models/golem_resource_reservation.py b/golem_resource_pack/models/golem_resource_reservation.py index 2644175..6303889 100644 --- a/golem_resource_pack/models/golem_resource_reservation.py +++ b/golem_resource_pack/models/golem_resource_reservation.py @@ -25,4 +25,5 @@ class GolemResourceReservation(models.Model): """ GOLEM Resource Reservation Model """ _inherit = 'golem.resource.reservation' - pack_id = fields.Many2one('golem_resource_reservation', 'Reservation Pack') + pack_id = fields.Many2one('golem.resource.pack', 'Reservation Pack', + index=True) diff --git a/golem_resource_pack/security/ir.model.access.csv b/golem_resource_pack/security/ir.model.access.csv index 796d31b..c5e0b69 100644 --- a/golem_resource_pack/security/ir.model.access.csv +++ b/golem_resource_pack/security/ir.model.access.csv @@ -1,3 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_golem_resource_pack_user,Access GOLEM Resource Pack User,model_golem_resource_pack,golem_base.group_golem_user,1,0,0,0 +access_golem_resource_pack_user,Access GOLEM Resource Pack User,model_golem_resource_pack,golem_base.group_golem_user,1,1,1,0 access_golem_resource_pack_manager,Access GOLEM Resource Pack Manager,model_golem_resource_pack,golem_base.group_golem_manager,1,1,1,1 diff --git a/golem_resource_pack/views/golem_resource_pack_views.xml b/golem_resource_pack/views/golem_resource_pack_views.xml index 37d929d..f7a5e9b 100644 --- a/golem_resource_pack/views/golem_resource_pack_views.xml +++ b/golem_resource_pack/views/golem_resource_pack_views.xml @@ -23,7 +23,7 @@ along with this program. If not, see . GOLEM Resource Pack Tree golem.resource.pack - + @@ -55,7 +55,7 @@ along with this program. If not, see . - + @@ -63,8 +63,11 @@ along with this program. If not, see . + + + -
diff --git a/golem_resource_pack/wizard/golem_pack_rejection.py b/golem_resource_pack/wizard/golem_pack_rejection.py index 2dcb6d8..9845e5f 100644 --- a/golem_resource_pack/wizard/golem_pack_rejection.py +++ b/golem_resource_pack/wizard/golem_pack_rejection.py @@ -31,8 +31,7 @@ class GolemReservationRejectionWizard(models.TransientModel): def reject(self): """ Sets pack status to rejected and add reason """ self.ensure_one() - rejection = self[0] - for reservation in rejection.pack_id.reservation_ids: - if reservation.state == "confirmed": - reservation.write({'state' :'rejected'}) - rejection.pack_id.write({'rejection_reason': rejection.reason}) + rdata = {'state': 'rejected', + 'rejection_reason': self[0].reason} + self[0].pack_id.reservation_ids.filtered(lambda r: r.state == 'confirmed').write(rdata) + self[0].pack_id.rejection_reason = self[0].reason diff --git a/golem_resource_pack/wizard/golem_pack_rejection_views.xml b/golem_resource_pack/wizard/golem_pack_rejection_views.xml index b0b01ec..34347bc 100644 --- a/golem_resource_pack/wizard/golem_pack_rejection_views.xml +++ b/golem_resource_pack/wizard/golem_pack_rejection_views.xml @@ -25,10 +25,12 @@ along with this program. If not, see . golem.pack.rejection.wizard
- - - - + + + + + +