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:
@@ -57,9 +57,8 @@ class HotelNode(models.Model):
|
|||||||
"""
|
"""
|
||||||
for node in self:
|
for node in self:
|
||||||
domain = [('id', 'in', node.group_ids.ids), ('odoo_version', '!=', node.odoo_version)]
|
domain = [('id', 'in', node.group_ids.ids), ('odoo_version', '!=', node.odoo_version)]
|
||||||
# TODO Use search_count
|
invalid_groups = self.env["hotel.node.group"].search_count(domain)
|
||||||
invalid_groups = self.env["hotel.node.group"].search(domain)
|
if invalid_groups > 0:
|
||||||
if len(invalid_groups) > 0:
|
|
||||||
msg = _("At least one group is not within the node version.") + " " + \
|
msg = _("At least one group is not within the node version.") + " " + \
|
||||||
_("Odoo version of the node: %s") % node.odoo_version
|
_("Odoo version of the node: %s") % node.odoo_version
|
||||||
_logger.warning(msg)
|
_logger.warning(msg)
|
||||||
@@ -98,13 +97,14 @@ class HotelNode(models.Model):
|
|||||||
noderpc.login(self.odoo_db, self.odoo_user, self.odoo_password)
|
noderpc.login(self.odoo_db, self.odoo_user, self.odoo_password)
|
||||||
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 synchronize only if write_date in remote node is newer ¿?
|
# TODO synchronize only if write_date in remote node is newer ¿?
|
||||||
try:
|
try:
|
||||||
vals = {}
|
vals = {}
|
||||||
# import remote groups
|
# import remote groups
|
||||||
domain = [('model', '=', 'res.groups')]
|
remote_groups = noderpc.env['ir.model.data'].search_read(
|
||||||
fields = ['complete_name', 'display_name']
|
[('model', '=', 'res.groups')],
|
||||||
remote_groups = noderpc.env['ir.model.data'].search_read(domain, fields)
|
['complete_name', 'display_name'])
|
||||||
|
|
||||||
master_groups = self.env["hotel.node.group"].search_read(
|
master_groups = self.env["hotel.node.group"].search_read(
|
||||||
[('odoo_version', '=', self.odoo_version)], ['xml_id'])
|
[('odoo_version', '=', self.odoo_version)], ['xml_id'])
|
||||||
@@ -129,15 +129,14 @@ 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 = {}
|
||||||
# import remote users
|
# import remote users
|
||||||
# TODO Restrict users to hootel users
|
# TODO Restrict users to hootel users
|
||||||
domain = [('login', '!=', 'admin')]
|
remote_users = noderpc.env['res.users'].search_read(
|
||||||
fields = ['name', 'login', 'email', 'is_company', 'partner_id', 'groups_id', 'active']
|
[('login', '!=', 'admin')],
|
||||||
remote_users = noderpc.env['res.users'].search_read(domain, fields)
|
['name', 'login', 'email', 'is_company', 'partner_id', 'groups_id', 'active'])
|
||||||
|
|
||||||
master_users = self.env["hotel.node.user"].search_read(
|
master_users = self.env["hotel.node.user"].search_read(
|
||||||
[('node_id', '=', self.id)], ['remote_user_id'])
|
[('node_id', '=', self.id)], ['remote_user_id'])
|
||||||
@@ -157,12 +156,21 @@ class HotelNode(models.Model):
|
|||||||
'remote_user_id': user['id'],
|
'remote_user_id': user['id'],
|
||||||
}))
|
}))
|
||||||
else:
|
else:
|
||||||
|
partner = self.env['res.partner'].search([('email', '=', user['email'])])
|
||||||
|
if not partner:
|
||||||
|
partner = self.env['res.partner'].create({
|
||||||
|
'name': user['name'],
|
||||||
|
'is_company': False,
|
||||||
|
'email': user['email'],
|
||||||
|
})
|
||||||
|
|
||||||
user_ids.append((0, 0, {
|
user_ids.append((0, 0, {
|
||||||
'name': user['name'],
|
'name': user['name'],
|
||||||
'login': user['login'],
|
'login': user['login'],
|
||||||
'email': user['email'],
|
'email': user['email'],
|
||||||
'active': user['active'],
|
'active': user['active'],
|
||||||
'remote_user_id': user['id'],
|
'remote_user_id': user['id'],
|
||||||
|
'partner_id': partner.id,
|
||||||
}))
|
}))
|
||||||
vals.update({'user_ids': user_ids})
|
vals.update({'user_ids': user_ids})
|
||||||
|
|
||||||
@@ -170,7 +178,6 @@ class HotelNode(models.Model):
|
|||||||
'is_synchronizing': True,
|
'is_synchronizing': True,
|
||||||
}).write(vals)
|
}).write(vals)
|
||||||
|
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
@@ -185,8 +192,8 @@ class HotelNode(models.Model):
|
|||||||
vals = {}
|
vals = {}
|
||||||
# import remote room types
|
# import remote room types
|
||||||
# TODO Actually only work for hootel v2
|
# TODO Actually only work for hootel v2
|
||||||
fields = ['name', 'active', 'sequence', 'room_ids']
|
remote_room_types = noderpc.env['hotel.room.type'].search_read(
|
||||||
remote_room_types = noderpc.env['hotel.room.type'].search_read([], fields)
|
[], ['name', 'active', 'sequence', 'room_ids'])
|
||||||
|
|
||||||
master_room_types = self.env["hotel.node.room.type"].search_read(
|
master_room_types = self.env["hotel.node.room.type"].search_read(
|
||||||
[('node_id', '=', self.id)], ['remote_room_type_id'])
|
[('node_id', '=', self.id)], ['remote_room_type_id'])
|
||||||
@@ -222,8 +229,9 @@ class HotelNode(models.Model):
|
|||||||
vals = {}
|
vals = {}
|
||||||
# import remote rooms
|
# import remote rooms
|
||||||
# TODO Actually only work for hootel v2
|
# TODO Actually only work for hootel v2
|
||||||
fields = ['name', 'active', 'sequence', 'capacity', 'room_type_id']
|
remote_rooms = noderpc.env['hotel.room'].search_read(
|
||||||
remote_rooms = noderpc.env['hotel.room'].search_read([], fields)
|
[],
|
||||||
|
['name', 'active', 'sequence', 'capacity', 'room_type_id'])
|
||||||
|
|
||||||
master_rooms = self.env["hotel.node.room"].search_read(
|
master_rooms = self.env["hotel.node.room"].search_read(
|
||||||
[('node_id', '=', self.id)], ['remote_room_id'])
|
[('node_id', '=', self.id)], ['remote_room_id'])
|
||||||
@@ -268,6 +276,5 @@ 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)
|
||||||
|
|
||||||
|
|
||||||
noderpc.logout()
|
noderpc.logout()
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -29,10 +29,10 @@ class HotelNodeUser(models.Model):
|
|||||||
node_id = fields.Many2one('project.project', 'Hotel', required=True)
|
node_id = fields.Many2one('project.project', 'Hotel', required=True)
|
||||||
# remote users are managed as partners into the central node
|
# remote users are managed as partners into the central node
|
||||||
partner_id = fields.Many2one('res.partner', required=True)
|
partner_id = fields.Many2one('res.partner', required=True)
|
||||||
name = fields.Char(related='partner_id.name', readonly=True)
|
name = fields.Char(related='partner_id.name')
|
||||||
email = fields.Char(related='partner_id.email', readonly=True)
|
email = fields.Char(related='partner_id.email', readonly=True)
|
||||||
|
|
||||||
login = fields.Char(require=True,
|
login = fields.Char(related='partner_id.email', require=True,
|
||||||
help="Used to log into the hotel")
|
help="Used to log into the hotel")
|
||||||
password = fields.Char(default='', invisible=True, copy=False,
|
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.")
|
help="Keep empty if you don't want the user to be able to connect on the hotel.")
|
||||||
@@ -48,9 +48,8 @@ class HotelNodeUser(models.Model):
|
|||||||
def _check_group_ids(self):
|
def _check_group_ids(self):
|
||||||
# TODO ensure all group_ids are within the node version
|
# TODO ensure all group_ids are within the node version
|
||||||
domain = [('id', 'in', self.group_ids.ids), ('odoo_version', '!=', self.node_id.odoo_version)]
|
domain = [('id', 'in', self.group_ids.ids), ('odoo_version', '!=', self.node_id.odoo_version)]
|
||||||
# TODO Use search_count
|
invalid_groups = self.env["hotel.node.group"].search_count(domain)
|
||||||
invalid_groups = self.env["hotel.node.group"].search(domain)
|
if invalid_groups > 0:
|
||||||
if len(invalid_groups) > 0:
|
|
||||||
msg = _("At least one group is not within the node version.") + " " + \
|
msg = _("At least one group is not within the node version.") + " " + \
|
||||||
_("Odoo version of the node: %s") % self.node_id.odoo_version
|
_("Odoo version of the node: %s") % self.node_id.odoo_version
|
||||||
_logger.warning(msg)
|
_logger.warning(msg)
|
||||||
@@ -76,9 +75,8 @@ class HotelNodeUser(models.Model):
|
|||||||
|
|
||||||
if 'group_ids' in vals:
|
if 'group_ids' in vals:
|
||||||
domain = [('id', 'in', vals['group_ids'][0][2]), ('odoo_version', '!=', node.odoo_version)]
|
domain = [('id', 'in', vals['group_ids'][0][2]), ('odoo_version', '!=', node.odoo_version)]
|
||||||
invalid_groups = self.env["hotel.node.group"].search(domain)
|
invalid_groups = self.env["hotel.node.group"].search_count(domain)
|
||||||
# TODO Use search_count
|
if invalid_groups > 0:
|
||||||
if len(invalid_groups) > 0:
|
|
||||||
msg = _("At least one group is not within the node version.") + " " + \
|
msg = _("At least one group is not within the node version.") + " " + \
|
||||||
_("Odoo version in node: %s") % node.odoo_version
|
_("Odoo version in node: %s") % node.odoo_version
|
||||||
_logger.error(msg)
|
_logger.error(msg)
|
||||||
@@ -86,16 +84,6 @@ class HotelNodeUser(models.Model):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
if 'is_synchronizing' not in self._context:
|
if 'is_synchronizing' not in self._context:
|
||||||
partner = self.env["res.partner"].search([('email', '=', vals['login'])])
|
|
||||||
if partner.id:
|
|
||||||
vals['partner_id'] = partner.id
|
|
||||||
else:
|
|
||||||
partner = partner.create({
|
|
||||||
'name': vals['name'],
|
|
||||||
'email': vals['login'],
|
|
||||||
})
|
|
||||||
vals['partner_id'] = partner.id
|
|
||||||
else:
|
|
||||||
noderpc = odoorpc.ODOO(node.odoo_host, node.odoo_protocol, node.odoo_port)
|
noderpc = odoorpc.ODOO(node.odoo_host, node.odoo_protocol, node.odoo_port)
|
||||||
noderpc.login(node.odoo_db, node.odoo_user, node.odoo_password)
|
noderpc.login(node.odoo_db, node.odoo_user, node.odoo_password)
|
||||||
|
|
||||||
@@ -141,14 +129,13 @@ class HotelNodeUser(models.Model):
|
|||||||
|
|
||||||
if 'group_ids' in vals:
|
if 'group_ids' in vals:
|
||||||
domain = [('id', 'in', vals['group_ids'][0][2]), ('odoo_version', '!=', node.odoo_version)]
|
domain = [('id', 'in', vals['group_ids'][0][2]), ('odoo_version', '!=', node.odoo_version)]
|
||||||
invalid_groups = self.env["hotel.node.group"].search(domain)
|
invalid_groups = self.env["hotel.node.group"].search_count(domain)
|
||||||
# TODO Use search_count
|
if invalid_groups > 0:
|
||||||
if len(invalid_groups) > 0:
|
|
||||||
msg = _("At least one group is not within the node version.") + " " + \
|
msg = _("At least one group is not within the node version.") + " " + \
|
||||||
_("Odoo version in node: %s") % node.odoo_version
|
_("Odoo version in node: %s") % node.odoo_version
|
||||||
_logger.error(msg)
|
_logger.error(msg)
|
||||||
raise ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if 'is_synchronizing' not in self._context:
|
if 'is_synchronizing' not in self._context:
|
||||||
noderpc = odoorpc.ODOO(node.odoo_host, node.odoo_protocol, node.odoo_port)
|
noderpc = odoorpc.ODOO(node.odoo_host, node.odoo_protocol, node.odoo_port)
|
||||||
@@ -203,6 +190,8 @@ class HotelNodeUser(models.Model):
|
|||||||
self._context.get('uid'), rec.remote_user_id)
|
self._context.get('uid'), rec.remote_user_id)
|
||||||
noderpc.logout()
|
noderpc.logout()
|
||||||
|
|
||||||
|
# TODO How to manage the relationship with the partner? Also deleted?
|
||||||
|
|
||||||
except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err:
|
except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err:
|
||||||
_logger.error(err)
|
_logger.error(err)
|
||||||
raise ValidationError(err)
|
raise ValidationError(err)
|
||||||
|
|||||||
Reference in New Issue
Block a user