diff --git a/hotel_node_master/models/hotel_node.py b/hotel_node_master/models/hotel_node.py index 0e9888315..284bac917 100644 --- a/hotel_node_master/models/hotel_node.py +++ b/hotel_node_master/models/hotel_node.py @@ -80,25 +80,31 @@ 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 Types - 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 + node_id = super().create(vals) + noderpc.logout() + return node_id + + @api.multi + def action_sync_from_node(self): + self.ensure_one() + try: + noderpc = odoorpc.ODOO(self.odoo_host, self.odoo_protocol, self.odoo_port) + noderpc.login(self.odoo_db, self.odoo_user, self.odoo_password) + except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err: + raise ValidationError(err) + # TODO synchronize only if write_date in remote node is newer ¿? + try: + vals = {} + # import remote groups + domain = [('model', '=', 'res.groups')] + fields = ['complete_name', 'display_name'] + remote_groups = noderpc.env['ir.model.data'].search_read(domain, fields) + master_groups = self.env["hotel.node.group"].search_read( - [('odoo_version', '=', vals['odoo_version'])], ['xml_id']) + [('odoo_version', '=', self.odoo_version)], ['xml_id']) gui_ids = [r['id'] for r in master_groups] xml_ids = [r['xml_id'] for r in master_groups] @@ -112,21 +118,49 @@ class HotelNode(models.Model): group_ids.append((0, 0, { 'name': group['display_name'], 'xml_id': group['complete_name'], - 'odoo_version': vals['odoo_version'], + 'odoo_version': self.odoo_version, })) vals.update({'group_ids': group_ids}) - # Process Room Type + self.write(vals) + + except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err: + raise ValidationError(err) + + try: + vals = {} + # import remote room types + fields = ['name', 'active', 'sequence', 'room_ids'] + remote_room_types = noderpc.env['hotel.room.type'].search_read([], fields) + + master_room_types = self.env["hotel.node.room.type"].search_read( + [('node_id', '=', self.id)], ['remote_room_type_id']) + + master_ids = [r['id'] for r in master_room_types] + remote_ids = [r['remote_room_type_id'] for r in master_room_types] + 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'], - })) + if room_type['id'] in remote_ids: + idx = remote_ids.index(room_type['id']) + room_type_ids.append((1, master_ids[idx], { + 'name': room_type['name'], + 'active': room_type['active'], + 'sequence': room_type['sequence'], + 'remote_room_type_id': room_type['id'], + })) + else: + 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) + self.write(vals) - return node_id + except (odoorpc.error.RPCError, odoorpc.error.InternalError, urllib.error.URLError) as err: + raise ValidationError(err) + + noderpc.logout() diff --git a/hotel_node_master/views/hotel_node.xml b/hotel_node_master/views/hotel_node.xml index 590d465db..23eb01416 100644 --- a/hotel_node_master/views/hotel_node.xml +++ b/hotel_node_master/views/hotel_node.xml @@ -12,6 +12,11 @@ name="" icon="fa-tasks"> +