diff --git a/hotel_node_master/models/hotel_node.py b/hotel_node_master/models/hotel_node.py index 284bac917..e473a3b5c 100644 --- a/hotel_node_master/models/hotel_node.py +++ b/hotel_node_master/models/hotel_node.py @@ -47,6 +47,8 @@ class HotelNode(models.Model): room_type_ids = fields.One2many('hotel.node.room.type', 'node_id', 'Rooms Type in this hotel') + room_ids = fields.One2many('hotel.node.room', 'node_id', + 'Rooms in this hotel') @api.constrains('group_ids') def _check_group_version(self): @@ -126,6 +128,7 @@ class HotelNode(models.Model): except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err: raise ValidationError(err) + # TODO logout from node in any case. Take into account each try / except block try: vals = {} @@ -163,4 +166,55 @@ class HotelNode(models.Model): except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err: raise ValidationError(err) + try: + vals = {} + # import remote rooms + fields = ['name', 'active', 'sequence', 'capacity', 'room_type_id'] + remote_rooms = noderpc.env['hotel.room'].search_read([], fields) + + master_rooms = self.env["hotel.node.room"].search_read( + [('node_id', '=', self.id)], ['remote_room_id']) + + master_ids = [r['id'] for r in master_rooms] + remote_ids = [r['remote_room_id'] for r in master_rooms] + + room_ids = [] + for room in remote_rooms: + room_type_id = self.env["hotel.node.room.type"].search( + [('node_id', '=', self.id), + ('remote_room_type_id', '=', room['room_type_id'][0])]) or None + + if room_type_id is None: + msg = _("Something was completely wrong for Remote Room ID: [%s]") % room['id'] + _logger.critical(msg) + raise ValidationError(msg) + + if room['id'] in remote_ids: + idx = remote_ids.index(room['id']) + room_ids.append((1, master_ids[idx], { + 'name': room['name'], + 'active': room['active'], + 'sequence': room['sequence'], + 'capacity': room['capacity'], + 'room_type_id': room_type_id.id, + 'remote_room_id': room['id'], + })) + else: + room_ids.append((0, 0, { + 'name': room['name'], + 'active': room['active'], + 'sequence': room['sequence'], + 'capacity': room['capacity'], + 'room_type_id': room_type_id.id, + 'remote_room_id': room['id'], + })) + vals.update({'room_ids': room_ids}) + + self.write(vals) + + except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err: + raise ValidationError(err) + + noderpc.logout() + return True diff --git a/hotel_node_master/models/hotel_node_room.py b/hotel_node_master/models/hotel_node_room.py index 55dcb5a39..270283f49 100644 --- a/hotel_node_master/models/hotel_node_room.py +++ b/hotel_node_master/models/hotel_node_room.py @@ -13,13 +13,6 @@ class HotelNodeRoom(models.Model): _name = "hotel.node.room" _description = "Rooms" - 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, readonly=True, @@ -27,5 +20,16 @@ class HotelNodeRoom(models.Model): room_type_id = fields.Many2one('hotel.node.room.type', 'Hotel Room Type', required=True) - node_id = fields.Many2one('project.project', 'Hotel', required=True, readonly=True, - default=_get_default_node_id) + node_id = fields.Many2one('project.project', 'Hotel', required=True, readonly=True) + + capacity = fields.Integer('Capacity') + + active = fields.Boolean(default=True) + sequence = fields.Integer(default=0) + + _sql_constraints = [ + ('db_remote_room_id_uniq', 'unique (remote_room_id, node_id)', + 'The Room must be unique within the Node!'), + ] + + # TODO Changing a room between nodes. Do not allow change the node at create / write