mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[ADD] Hotel Management using Odoo Connector
This commit is contained in:
105
hotel_node_master/components/backend_adapter.py
Normal file
105
hotel_node_master/components/backend_adapter.py
Normal 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']
|
||||
)
|
||||
Reference in New Issue
Block a user