mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[WIP] Added Room Type and Rooms
Master Node keeps minimal information of Hotel rooms for managing reservation through the reservation wizard.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
26
hotel_node_master/models/hotel_node_room.py
Normal file
26
hotel_node_master/models/hotel_node_room.py
Normal file
@@ -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)
|
||||
26
hotel_node_master/models/hotel_node_room_type.py
Normal file
26
hotel_node_master/models/hotel_node_room_type.py
Normal file
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user