mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[WIP] Synchronize manually from a remote node
This commit is contained in:
@@ -47,6 +47,8 @@ class HotelNode(models.Model):
|
|||||||
|
|
||||||
room_type_ids = fields.One2many('hotel.node.room.type', 'node_id',
|
room_type_ids = fields.One2many('hotel.node.room.type', 'node_id',
|
||||||
'Rooms Type in this hotel')
|
'Rooms Type in this hotel')
|
||||||
|
room_ids = fields.One2many('hotel.node.room', 'node_id',
|
||||||
|
'Rooms in this hotel')
|
||||||
|
|
||||||
@api.constrains('group_ids')
|
@api.constrains('group_ids')
|
||||||
def _check_group_version(self):
|
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:
|
except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err:
|
||||||
raise ValidationError(err)
|
raise ValidationError(err)
|
||||||
|
# TODO logout from node in any case. Take into account each try / except block
|
||||||
|
|
||||||
try:
|
try:
|
||||||
vals = {}
|
vals = {}
|
||||||
@@ -163,4 +166,55 @@ class HotelNode(models.Model):
|
|||||||
except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err:
|
except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err:
|
||||||
raise ValidationError(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()
|
noderpc.logout()
|
||||||
|
return True
|
||||||
|
|||||||
@@ -13,13 +13,6 @@ class HotelNodeRoom(models.Model):
|
|||||||
_name = "hotel.node.room"
|
_name = "hotel.node.room"
|
||||||
_description = "Rooms"
|
_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)
|
name = fields.Char(required=True, translate=True)
|
||||||
|
|
||||||
remote_room_id = fields.Integer(require=True, invisible=True, copy=False, readonly=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)
|
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,
|
node_id = fields.Many2one('project.project', 'Hotel', required=True, readonly=True)
|
||||||
default=_get_default_node_id)
|
|
||||||
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user