[ADD] Hotel Management using Odoo Connector

This commit is contained in:
Pablo
2018-11-07 20:34:37 +01:00
parent 2747846c1b
commit ca3db68e7a
20 changed files with 520 additions and 3 deletions

View File

@@ -0,0 +1,9 @@
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import core
from . import backend_adapter
from . import binder
from . import importer
from . import exporter
from . import mapper

View File

@@ -0,0 +1,105 @@
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import odoorpc
import logging
from odoo.addons.component.core import AbstractComponent
from odoo.addons.queue_job.exception import RetryableJobError
_logger = logging.getLogger(__name__)
class NodeLogin(object):
def __init__(self, address, protocol, port, db, user, passwd):
self.address = address
self.protocol = protocol
self.port = port
self.db = db
self.user = user
self.passwd = passwd
class NodeServer(object):
def __init__(self, login_data):
self._server = None
self._login_data = login_data
def __enter__(self):
# we do nothing, api is lazy
return self
def __exit__(self, type, value, traceback):
if self._server is not None:
self.close()
@property
def server(self):
if self._server is None:
try:
self._server = odoorpc.ODOO(self._login_data.address,
self._login_data.protocol,
self._login_data.port)
self._server.login(self._login_data.db,
self._login_data.user,
self._login_data.passwd)
except Exception:
self._server = None
raise RetryableJobError("Can't connect with channel!")
return self._server
def close(self):
self._server.logout()
self._server = None
class HotelNodeInterfaceAdapter(AbstractComponent):
_name = 'hotel.node.interface.adapter'
_inherit = ['base.backend.adapter', 'base.node.connector']
_usage = 'backend.adapter'
def create_room_type(self, name, room_ids):
raise NotImplementedError
def modify_room_type(self, room_type_id, name, room_ids):
raise NotImplementedError
def delete_room_type(self, room_type_id):
raise NotImplementedError
def fetch_room_types(self):
raise NotImplementedError
@property
def _server(self):
try:
node_server = getattr(self.work, 'node_api')
except AttributeError:
raise AttributeError(
'You must provide a node_api attribute with a '
'WuBookServer instance to be able to use the '
'Backend Adapter.'
)
return node_server.server
class HotelNodeAdapter(AbstractComponent):
_name = 'hotel.node.adapter'
_inherit = 'hotel.node.interface.adapter'
# === ROOMS
def create_room_type(self, name, room_ids):
return self._server.env['hotel.room.type'].create({
'name': name
})
def modify_room_type(self, room_type_id, name, rooms_id):
return self._server.env['hotel.room.type'].write(
room_type_id,
{
'name': name
})
def delete_room_type(self, room_type_id):
return self._server.env['hotel.room.type'].unlink(room_type_id)
def fetch_room_types(self):
return self._server.env['hotel.room.type'].search_read(
[],
['name']
)

View File

@@ -0,0 +1,11 @@
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import Component
class NodeConnectorModelBinder(Component):
_name = 'node.connector.binder'
_inherit = ['base.binder', 'base.node.connector']
_apply_on = [
'node.room.type',
]

View File

@@ -0,0 +1,9 @@
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import AbstractComponent
class BaseHotelChannelConnectorComponent(AbstractComponent):
_name = 'base.node.connector'
_inherit = 'base.connector'
_collection = 'node.backend'

View File

@@ -0,0 +1,12 @@
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
from odoo.addons.component.core import AbstractComponent
_logger = logging.getLogger(__name__)
class NodeExporter(AbstractComponent):
_name = 'node.exporter'
_inherit = ['base.exporter', 'base.node.connector']
_usage = 'node.exporter'

View File

@@ -0,0 +1,11 @@
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
from odoo.addons.component.core import AbstractComponent, Component
_logger = logging.getLogger(__name__)
class NodeImporter(AbstractComponent):
_name = 'node.importer'
_inherit = ['base.importer', 'base.node.connector']
_usage = 'node.importer'

View File

@@ -0,0 +1,16 @@
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import AbstractComponent
class NodeImportMapper(AbstractComponent):
_name = 'node.import.mapper'
_inherit = ['base.node.connector', 'base.import.mapper']
_usage = 'import.mapper'
class NodeExportMapper(AbstractComponent):
_name = 'node.export.mapper'
_inherit = ['base.node.connector', 'base.export.mapper']
_usage = 'export.mapper'