From 88aa81080ecb37769be183d7dad92451898c001d Mon Sep 17 00:00:00 2001 From: Pablo Quesada Barriuso Date: Fri, 21 Sep 2018 22:21:18 +0200 Subject: [PATCH] [WIP] Room Type Management Added room type and room restriction for management in central node. --- hotel_node_master/models/hotel_node.py | 2 +- hotel_node_master/models/hotel_node_room.py | 11 +++-- .../models/hotel_node_room_type.py | 44 ++++++++++++++++++- hotel_node_master/models/hotel_node_user.py | 4 +- .../views/hotel_node_room_type.xml | 2 +- 5 files changed, 54 insertions(+), 9 deletions(-) diff --git a/hotel_node_master/models/hotel_node.py b/hotel_node_master/models/hotel_node.py index 0c6a943aa..0e9888315 100644 --- a/hotel_node_master/models/hotel_node.py +++ b/hotel_node_master/models/hotel_node.py @@ -85,7 +85,7 @@ class HotelNode(models.Model): remote_fields = ['complete_name', 'display_name'] remote_groups = noderpc.env['ir.model.data'].search_read(remote_domain, remote_fields) - # Read remote Room Type + # Read remote Room Types remote_fields = ['name', 'active', 'sequence'] remote_room_types = noderpc.env['hotel.room.type'].search_read([], remote_fields) diff --git a/hotel_node_master/models/hotel_node_room.py b/hotel_node_master/models/hotel_node_room.py index 5ed56424b..55dcb5a39 100644 --- a/hotel_node_master/models/hotel_node_room.py +++ b/hotel_node_master/models/hotel_node_room.py @@ -16,11 +16,16 @@ class HotelNodeRoom(models.Model): active = fields.Boolean(default=True) sequence = fields.Integer(default=0) + @api.model + def _get_default_node_id(self): + return self.room_type_id.node_id + name = fields.Char(required=True, translate=True) - remote_room_id = fields.Integer(require=True, invisible=True, copy=False, + remote_room_id = fields.Integer(require=True, invisible=True, copy=False, readonly=True, help="ID of the target record in the remote database") - room_type_id = fields.Many2one('hotel.node.room.type', 'Hotel Room Type') + room_type_id = fields.Many2one('hotel.node.room.type', 'Hotel Room Type', required=True) - node_id = fields.Many2one('project.project', 'Hotel', required=True) + node_id = fields.Many2one('project.project', 'Hotel', required=True, readonly=True, + default=_get_default_node_id) diff --git a/hotel_node_master/models/hotel_node_room_type.py b/hotel_node_master/models/hotel_node_room_type.py index 0d07204cd..6f5e69d7b 100644 --- a/hotel_node_master/models/hotel_node_room_type.py +++ b/hotel_node_master/models/hotel_node_room_type.py @@ -3,8 +3,10 @@ # Copyright 2018 Dario Lodeiros # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import wdb import logging from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError _logger = logging.getLogger(__name__) @@ -18,9 +20,47 @@ class HotelNodeRoomType(models.Model): name = fields.Char(required=True, translate=True) - remote_room_type_id = fields.Integer(require=True, invisible=True, copy=False, - help="ID of the target record in the remote database") + remote_room_type_id = fields.Integer(require=True, invisible=True, copy=False, readonly=True, + help="ID of the target record in the remote database") room_ids = fields.One2many('hotel.node.room', 'room_type_id', 'Rooms') node_id = fields.Many2one('project.project', 'Hotel', required=True) + + @api.onchange('node_id') + def _onchange_node_id(self): + if self.node_id: + return {'domain': {'room_ids': [('room_ids', 'in', self.room_ids.ids)]}} + + return {'domain': {'room_ids': []}} + + @api.model + def create(self, vals): + """ + :param dict vals: the model's fields as a dictionary + :return: new hotel room type record created. + :raise: ValidationError + """ + _logger.warning("This fuction is not yet implemented.") + wdb.set_trace() + + @api.multi + def write(self, vals): + """ + :param dict vals: a dictionary of fields to update and the value to set on them. + :raise: ValidationError + """ + for rec in self: + if 'node_id' in vals and vals['node_id'] != rec.node_id.id: + msg = _("Changing a room type between nodes is not allowed. Please create a new room type instead.") + _logger.error(msg) + raise ValidationError(msg) + + _logger.warning("This fuction is not yet implemented.") + + @api.multi + def unlink(self): + """ + :raise: ValidationError + """ + _logger.warning("This fuction is not yet implemented.") diff --git a/hotel_node_master/models/hotel_node_user.py b/hotel_node_master/models/hotel_node_user.py index 64d7b9c9c..8c4c20ad2 100644 --- a/hotel_node_master/models/hotel_node_user.py +++ b/hotel_node_master/models/hotel_node_user.py @@ -36,7 +36,7 @@ class HotelNodeUser(models.Model): password = fields.Char(default='', invisible=True, copy=False, help="Keep empty if you don't want the user to be able to connect on the hotel.") # Remote user id for client-server understanding - remote_user_id = fields.Integer(require=True, invisible=True, copy=False, + remote_user_id = fields.Integer(require=True, invisible=True, copy=False, readonly=True, help="ID of the target record in the remote database") # The same user can not be assigned to the same hotel @@ -135,7 +135,7 @@ class HotelNodeUser(models.Model): """ for rec in self: if 'node_id' in vals and vals['node_id'] != rec.node_id.id: - msg = _("Changing a node user is not allowed. Please create a new user instead.") + msg = _("Changing a user between nodes is not allowed. Please create a new user instead.") _logger.error(msg) raise ValidationError(msg) diff --git a/hotel_node_master/views/hotel_node_room_type.xml b/hotel_node_master/views/hotel_node_room_type.xml index 1f6a87cf9..eb4e376c4 100644 --- a/hotel_node_master/views/hotel_node_room_type.xml +++ b/hotel_node_master/views/hotel_node_room_type.xml @@ -33,7 +33,7 @@ -