From c777ee97e9339a7a3d1df04c3d4e668687a6096b Mon Sep 17 00:00:00 2001 From: Pablo Quesada Barriuso Date: Fri, 21 Sep 2018 13:53:19 +0200 Subject: [PATCH] [WIP] Added Room Type and Rooms Master Node keeps minimal information of Hotel rooms for managing reservation through the reservation wizard. --- hotel_node_master/__manifest__.py | 1 + hotel_node_master/models/__init__.py | 2 + hotel_node_master/models/hotel_node.py | 22 +++++++ hotel_node_master/models/hotel_node_room.py | 26 +++++++++ .../models/hotel_node_room_type.py | 26 +++++++++ hotel_node_master/models/hotel_node_user.py | 13 ++--- hotel_node_master/views/hotel_node.xml | 21 ++++++- .../views/hotel_node_room_type.xml | 57 +++++++++++++++++++ hotel_node_master/views/hotel_node_user.xml | 19 ++++--- 9 files changed, 170 insertions(+), 17 deletions(-) create mode 100644 hotel_node_master/models/hotel_node_room.py create mode 100644 hotel_node_master/models/hotel_node_room_type.py create mode 100644 hotel_node_master/views/hotel_node_room_type.xml diff --git a/hotel_node_master/__manifest__.py b/hotel_node_master/__manifest__.py index 48bde0927..59ea26b09 100644 --- a/hotel_node_master/__manifest__.py +++ b/hotel_node_master/__manifest__.py @@ -17,6 +17,7 @@ 'views/hotel_node.xml', 'views/hotel_node_user.xml', 'views/hotel_node_group.xml', + 'views/hotel_node_room_type.xml', 'security/hotel_node_security.xml', 'security/ir.model.access.csv' ], diff --git a/hotel_node_master/models/__init__.py b/hotel_node_master/models/__init__.py index 58c8f42c1..2555cdee7 100644 --- a/hotel_node_master/models/__init__.py +++ b/hotel_node_master/models/__init__.py @@ -3,3 +3,5 @@ from . import hotel_node from . import hotel_node_user from . import hotel_node_group +from . import hotel_node_room +from . import hotel_node_room_type diff --git a/hotel_node_master/models/hotel_node.py b/hotel_node_master/models/hotel_node.py index f4410364e..0c6a943aa 100644 --- a/hotel_node_master/models/hotel_node.py +++ b/hotel_node_master/models/hotel_node.py @@ -45,6 +45,9 @@ class HotelNode(models.Model): group_ids = fields.Many2many('hotel.node.group', 'hotel_node_group_rel', 'node_id', 'group_id', string='Access Groups') + room_type_ids = fields.One2many('hotel.node.room.type', 'node_id', + 'Rooms Type in this hotel') + @api.constrains('group_ids') def _check_group_version(self): """ @@ -77,15 +80,23 @@ class HotelNode(models.Model): vals.update({'odoo_version': noderpc.version}) + # Read remote Groups remote_domain = [('model', '=', 'res.groups')] remote_fields = ['complete_name', 'display_name'] remote_groups = noderpc.env['ir.model.data'].search_read(remote_domain, remote_fields) + # Read remote Room Type + remote_fields = ['name', 'active', 'sequence'] + remote_room_types = noderpc.env['hotel.room.type'].search_read([], remote_fields) + + wdb.set_trace() + noderpc.logout() except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err: raise ValidationError(err) else: + # Process Groups master_groups = self.env["hotel.node.group"].search_read( [('odoo_version', '=', vals['odoo_version'])], ['xml_id']) @@ -105,6 +116,17 @@ class HotelNode(models.Model): })) vals.update({'group_ids': group_ids}) + # Process Room Type + room_type_ids = [] + for room_type in remote_room_types: + room_type_ids.append((0, 0, { + 'name': room_type['name'], + 'active': room_type['active'], + 'sequence': room_type['sequence'], + 'remote_room_type_id': room_type['id'], + })) + vals.update({'room_type_ids': room_type_ids}) + node_id = super().create(vals) return node_id diff --git a/hotel_node_master/models/hotel_node_room.py b/hotel_node_master/models/hotel_node_room.py new file mode 100644 index 000000000..5ed56424b --- /dev/null +++ b/hotel_node_master/models/hotel_node_room.py @@ -0,0 +1,26 @@ +# Copyright 2018 Pablo Q. Barriuso +# Copyright 2018 Alexandre Díaz +# Copyright 2018 Dario Lodeiros +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging +from odoo import models, fields, api, _ + +_logger = logging.getLogger(__name__) + + +class HotelNodeRoom(models.Model): + _name = "hotel.node.room" + _description = "Rooms" + + active = fields.Boolean(default=True) + sequence = fields.Integer(default=0) + + name = fields.Char(required=True, translate=True) + + remote_room_id = fields.Integer(require=True, invisible=True, copy=False, + help="ID of the target record in the remote database") + + room_type_id = fields.Many2one('hotel.node.room.type', 'Hotel Room Type') + + node_id = fields.Many2one('project.project', 'Hotel', required=True) diff --git a/hotel_node_master/models/hotel_node_room_type.py b/hotel_node_master/models/hotel_node_room_type.py new file mode 100644 index 000000000..0d07204cd --- /dev/null +++ b/hotel_node_master/models/hotel_node_room_type.py @@ -0,0 +1,26 @@ +# Copyright 2018 Pablo Q. Barriuso +# Copyright 2018 Alexandre Díaz +# Copyright 2018 Dario Lodeiros +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging +from odoo import models, fields, api, _ + +_logger = logging.getLogger(__name__) + + +class HotelNodeRoomType(models.Model): + _name = "hotel.node.room.type" + _description = "Room Type" + + active = fields.Boolean(default=True) + sequence = fields.Integer(default=0) + + 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") + + room_ids = fields.One2many('hotel.node.room', 'room_type_id', 'Rooms') + + node_id = fields.Many2one('project.project', 'Hotel', required=True) diff --git a/hotel_node_master/models/hotel_node_user.py b/hotel_node_master/models/hotel_node_user.py index 59beaf3a4..64d7b9c9c 100644 --- a/hotel_node_master/models/hotel_node_user.py +++ b/hotel_node_master/models/hotel_node_user.py @@ -75,8 +75,7 @@ class HotelNodeUser(models.Model): if self.node_id: # TODO clean group_ids # self.group_ids = [] - node = self.env["project.project"].search([('id', '=', self.node_id.id)]) - return {'domain': {'group_ids': [('odoo_version', '=', node.odoo_version)]}} + return {'domain': {'group_ids': [('odoo_version', '=', self.node_id.odoo_version)]}} return {'domain': {'group_ids': []}} @@ -87,7 +86,6 @@ class HotelNodeUser(models.Model): :return: new hotel user record created. :raise: ValidationError """ - wdb.set_trace() node = self.env["project.project"].browse(vals['node_id']) if 'group_ids' in vals: @@ -109,10 +107,11 @@ class HotelNodeUser(models.Model): 'login': vals['login'], } - groups = self.env["hotel.node.group"].browse(vals['group_ids'][0][2]) - # TODO Improve one rpc call per remote group for better performance - remote_groups = [noderpc.env.ref(r.xml_id).id for r in groups] - remote_vals.update({'groups_id': [[6, False, remote_groups]]}) + if 'group_ids' in vals: + groups = self.env["hotel.node.group"].browse(vals['group_ids'][0][2]) + # TODO Improve one rpc call per remote group for better performance + remote_groups = [noderpc.env.ref(r.xml_id).id for r in groups] + remote_vals.update({'groups_id': [[6, False, remote_groups]]}) # create user and delegate in remote node the default values for the user remote_user_id = noderpc.env['res.users'].create(remote_vals) diff --git a/hotel_node_master/views/hotel_node.xml b/hotel_node_master/views/hotel_node.xml index 78f9b14fe..590d465db 100644 --- a/hotel_node_master/views/hotel_node.xml +++ b/hotel_node_master/views/hotel_node.xml @@ -48,12 +48,18 @@ + - + + + + + + @@ -104,6 +110,12 @@ res_model="project.project" view_mode="tree,form" /> + + + + + + + hotel.node.room.type.view.form + hotel.node.room.type + +
+ +
+ +
+
+

+ +

+
+ + + + + +
+
+
+
+ + + + + + + +
+
+
+
+ + + hotel.node.room.type.tree + hotel.node.room.type + + + + + + + + +
diff --git a/hotel_node_master/views/hotel_node_user.xml b/hotel_node_master/views/hotel_node_user.xml index 32c42a56f..7824a1f33 100644 --- a/hotel_node_master/views/hotel_node_user.xml +++ b/hotel_node_master/views/hotel_node_user.xml @@ -14,23 +14,25 @@
-
+ + + + + + - - - - - - + + @@ -46,7 +48,6 @@ -