mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[WIP][MIG][11.0] Odoo Connector
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
from openerp import models, fields, api, _
|
|
||||||
from . import controllers
|
from . import controllers
|
||||||
from . import models
|
from . import models
|
||||||
from . import wizard
|
from . import wizard
|
||||||
|
|||||||
@@ -23,9 +23,8 @@
|
|||||||
'wizard/wubook_import_plan_restrictions.xml',
|
'wizard/wubook_import_plan_restrictions.xml',
|
||||||
'wizard/wubook_import_availability.xml',
|
'wizard/wubook_import_availability.xml',
|
||||||
'views/general.xml',
|
'views/general.xml',
|
||||||
'views/res_config_views.xml',
|
|
||||||
'views/inherited_hotel_reservation_views.xml',
|
'views/inherited_hotel_reservation_views.xml',
|
||||||
'views/inherited_hotel_virtual_room_views.xml',
|
'views/inherited_hotel_room_type_views.xml',
|
||||||
'views/inherited_hotel_virtual_room_availability_views.xml',
|
'views/inherited_hotel_virtual_room_availability_views.xml',
|
||||||
'views/inherited_hotel_folio_views.xml',
|
'views/inherited_hotel_folio_views.xml',
|
||||||
'views/inherited_product_pricelist_views.xml',
|
'views/inherited_product_pricelist_views.xml',
|
||||||
@@ -35,6 +34,11 @@
|
|||||||
'views/inherited_res_partner_views.xml',
|
'views/inherited_res_partner_views.xml',
|
||||||
'views/wubook_channel_info_views.xml',
|
'views/wubook_channel_info_views.xml',
|
||||||
'views/wubook_issue_views.xml',
|
'views/wubook_issue_views.xml',
|
||||||
|
'views/channel_hotel_reservation_views.xml',
|
||||||
|
'views/channel_hotel_room_type_views.xml',
|
||||||
|
'views/channel_hotel_virtual_room_availability_views.xml',
|
||||||
|
'views/channel_hotel_virtual_room_restriction_views.xml',
|
||||||
|
'views/channel_product_pricelist_views.xml',
|
||||||
'data/menus.xml',
|
'data/menus.xml',
|
||||||
'data/sequences.xml',
|
'data/sequences.xml',
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import backend_adapter
|
from . import backend_adapter
|
||||||
from . import binder
|
from . import binder
|
||||||
from . import core
|
from . import core
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# 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
|
from odoo.addons.component.core import AbstractComponent
|
||||||
from odoo.addons.queue_job.exception import RetryableJobError
|
from odoo.addons.queue_job.exception import RetryableJobError
|
||||||
from odoo.tools import (
|
from odoo.tools import (
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo.addons.component.core import Component
|
from odoo.addons.component.core import Component
|
||||||
|
|
||||||
class HotelConnectorModelBinder(Component):
|
class HotelConnectorModelBinder(Component):
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# 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
|
from odoo.addons.component.core import AbstractComponent
|
||||||
from odoo import api
|
from odoo import api
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from odoo.addons.component.core import AbstractComponent
|
from odoo.addons.component.core import AbstractComponent
|
||||||
from odoo.tools import (
|
from odoo.tools import (
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from odoo.addons.component.core import AbstractComponent
|
from odoo.addons.component.core import AbstractComponent
|
||||||
from odoo.tools import (
|
from odoo.tools import (
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from openerp import http, _
|
from openerp import http, _
|
||||||
from openerp.http import request
|
from openerp.http import request
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from . import channel_backend
|
||||||
|
from . import channel_binding
|
||||||
from . import res_config
|
from . import res_config
|
||||||
from . import hotel_virtual_room
|
from . import hotel_room_type
|
||||||
from . import product_pricelist
|
from . import product_pricelist
|
||||||
from . import inherited_product_pricelist_item
|
from . import inherited_product_pricelist_item
|
||||||
from . import hotel_virtual_room_restriction
|
from . import hotel_virtual_room_restriction
|
||||||
@@ -10,5 +13,5 @@ from . import hotel_virtual_room_availability
|
|||||||
from . import hotel_reservation
|
from . import hotel_reservation
|
||||||
from . import inherited_hotel_folio
|
from . import inherited_hotel_folio
|
||||||
from . import inherited_res_partner
|
from . import inherited_res_partner
|
||||||
from . import wubook_channel_info
|
from . import hotel_channel_connector_ota_info
|
||||||
from . import hotel_channel_connector_issue
|
from . import hotel_channel_connector_issue
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
|
|||||||
@@ -1,11 +1,22 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from contextlib import contextmanager
|
||||||
|
from odoo import models, api, fields
|
||||||
|
from ...components.backend_adapter import WuBookLogin, WuBookAdapter
|
||||||
|
|
||||||
class ChannelBackend(models.Model):
|
class ChannelBackend(models.Model):
|
||||||
_name = 'channel.backend'
|
_name = 'channel.backend'
|
||||||
_description = 'Hotel Channel Backend'
|
_description = 'Hotel Channel Backend'
|
||||||
_inherit = 'connector.backend'
|
_inherit = 'connector.backend'
|
||||||
|
|
||||||
|
username = fields.Char('Channel Service Username')
|
||||||
|
passwd = fields.Char('Channel Service Password')
|
||||||
|
lcode = fields.Char('Channel Service lcode')
|
||||||
|
server = fields.Char('Channel Service Server',
|
||||||
|
default='https://wired.wubook.net/xrws/')
|
||||||
|
pkey = fields.Char('Channel Service PKey')
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
@api.multi
|
@api.multi
|
||||||
def work_on(self, model_name, **kwargs):
|
def work_on(self, model_name, **kwargs):
|
||||||
@@ -13,23 +24,12 @@ class ChannelBackend(models.Model):
|
|||||||
lang = self.default_lang_id
|
lang = self.default_lang_id
|
||||||
if lang.code != self.env.context.get('lang'):
|
if lang.code != self.env.context.get('lang'):
|
||||||
self = self.with_context(lang=lang.code)
|
self = self.with_context(lang=lang.code)
|
||||||
user = self.env['ir.default'].sudo().get(
|
|
||||||
'res.config.settings', 'hotel_connector_user')
|
|
||||||
passwd = self.env['ir.default'].sudo().get(
|
|
||||||
'res.config.settings', 'hotel_connector_passwd')
|
|
||||||
lcode = self.env['ir.default'].sudo().get(
|
|
||||||
'res.config.settings', 'hotel_connector_lcode')
|
|
||||||
pkey = self.env['ir.default'].sudo().get(
|
|
||||||
'res.config.settings', 'hotel_connector_pkey')
|
|
||||||
server_addr = self.env['ir.default'].sudo().get(
|
|
||||||
'res.config.settings', 'hotel_connector_server')
|
|
||||||
wubook_login = WuBookLogin(
|
wubook_login = WuBookLogin(
|
||||||
server_addr,
|
self.server,
|
||||||
user,
|
self.username,
|
||||||
passwd,
|
self.passwd,
|
||||||
lcode,
|
self.lcode,
|
||||||
pkey
|
self.pkey)
|
||||||
)
|
|
||||||
with WuBookAdapter(wubook_login) as channel_api:
|
with WuBookAdapter(wubook_login) as channel_api:
|
||||||
_super = super(ChannelBackend, self)
|
_super = super(ChannelBackend, self)
|
||||||
# from the components we'll be able to do: self.work.magento_api
|
# from the components we'll be able to do: self.work.magento_api
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import api, models, fields
|
from odoo import models, fields
|
||||||
from odoo.addons.queue_job.job import job, related_action
|
|
||||||
|
|
||||||
|
|
||||||
class ChannelBinding(models.AbstractModel):
|
class ChannelBinding(models.AbstractModel):
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from openerp import models, fields, api, _
|
from openerp import models, fields, api, _
|
||||||
from openerp.exceptions import ValidationError
|
from openerp.exceptions import ValidationError
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
from openerp import models, fields, api
|
|
||||||
|
|
||||||
|
from openerp import models, fields, api
|
||||||
|
from odoo.addons.queue_job.job import job
|
||||||
|
|
||||||
class HotelChannelConnectorOTAInfo(models.Model):
|
class HotelChannelConnectorOTAInfo(models.Model):
|
||||||
_name = 'hote.channel.connector.ota.info'
|
_name = 'hote.channel.connector.ota.info'
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
|
|||||||
@@ -3,6 +3,15 @@
|
|||||||
|
|
||||||
from odoo import api, models, fields
|
from odoo import api, models, fields
|
||||||
from odoo.addons.queue_job.job import job, related_action
|
from odoo.addons.queue_job.job import job, related_action
|
||||||
|
from odoo.addons.component.core import Component
|
||||||
|
from odoo.addons.component_event import skip_if
|
||||||
|
from odoo.addons.hotel_channel_connector.components.backend_adapter import (
|
||||||
|
WUBOOK_STATUS_CONFIRMED,
|
||||||
|
WUBOOK_STATUS_WAITING,
|
||||||
|
WUBOOK_STATUS_REFUSED,
|
||||||
|
WUBOOK_STATUS_ACCEPTED,
|
||||||
|
WUBOOK_STATUS_CANCELLED,
|
||||||
|
WUBOOK_STATUS_CANCELLED_PENALTY)
|
||||||
|
|
||||||
class ChannelHotelReservation(models.Model):
|
class ChannelHotelReservation(models.Model):
|
||||||
_name = 'channel.hotel.reservation'
|
_name = 'channel.hotel.reservation'
|
||||||
@@ -10,11 +19,6 @@ class ChannelHotelReservation(models.Model):
|
|||||||
_inherits = {'hotel.reservation': 'odoo_id'}
|
_inherits = {'hotel.reservation': 'odoo_id'}
|
||||||
_description = 'Channel Hotel Reservation'
|
_description = 'Channel Hotel Reservation'
|
||||||
|
|
||||||
@api.depends('channel_reservation_id', 'ota_id')
|
|
||||||
def _is_from_ota(self):
|
|
||||||
for record in self:
|
|
||||||
record.is_from_ota = (record.channel_reservation_id and record.ota_id)
|
|
||||||
|
|
||||||
odoo_id = fields.Many2one(comodel_names='hotel.reservation',
|
odoo_id = fields.Many2one(comodel_names='hotel.reservation',
|
||||||
string='Reservation',
|
string='Reservation',
|
||||||
required=True,
|
required=True,
|
||||||
@@ -27,25 +31,18 @@ class ChannelHotelReservation(models.Model):
|
|||||||
ota_reservation_id = fields.Char("Channel OTA Reservation Code",
|
ota_reservation_id = fields.Char("Channel OTA Reservation Code",
|
||||||
readonly=True,
|
readonly=True,
|
||||||
old_name='wchannel_reservation_code')
|
old_name='wchannel_reservation_code')
|
||||||
is_from_ota = fields.Boolean('Is From OTA',
|
|
||||||
compute=_is_from_ota, store=False,
|
|
||||||
readonly=True,
|
|
||||||
old_name='wis_from_channel')
|
|
||||||
to_read = fields.Boolean('To Read', default=False)
|
|
||||||
able_to_modify_channel = fields.Boolean(compute=set_access_for_wubook_fields,
|
|
||||||
string='Is user able to modify wubook fields?',
|
|
||||||
old_name='able_to_modify_wubook')
|
|
||||||
channel_raw_data = fields.Text(readonly=True, old_name='wbook_json')
|
channel_raw_data = fields.Text(readonly=True, old_name='wbook_json')
|
||||||
|
|
||||||
wstatus = fields.Selection([
|
wstatus = fields.Selection([
|
||||||
('0', 'No WuBook'),
|
('0', 'No Channel'),
|
||||||
(str(WUBOOK_STATUS_CONFIRMED), 'Confirmed'),
|
(str(WUBOOK_STATUS_CONFIRMED), 'Confirmed'),
|
||||||
(str(WUBOOK_STATUS_WAITING), 'Waiting'),
|
(str(WUBOOK_STATUS_WAITING), 'Waiting'),
|
||||||
(str(WUBOOK_STATUS_REFUSED), 'Refused'),
|
(str(WUBOOK_STATUS_REFUSED), 'Refused'),
|
||||||
(str(WUBOOK_STATUS_ACCEPTED), 'Accepted'),
|
(str(WUBOOK_STATUS_ACCEPTED), 'Accepted'),
|
||||||
(str(WUBOOK_STATUS_CANCELLED), 'Cancelled'),
|
(str(WUBOOK_STATUS_CANCELLED), 'Cancelled'),
|
||||||
(str(WUBOOK_STATUS_CANCELLED_PENALTY), 'Cancelled with penalty')],
|
(str(WUBOOK_STATUS_CANCELLED_PENALTY), 'Cancelled with penalty')],
|
||||||
string='WuBook Status', default='0',
|
string='WuBook Status',
|
||||||
|
default='0',
|
||||||
readonly=True)
|
readonly=True)
|
||||||
wstatus_reason = fields.Char("WuBook Status Reason", readonly=True)
|
wstatus_reason = fields.Char("WuBook Status Reason", readonly=True)
|
||||||
customer_notes = fields.Text(related='folio_id.customer_notes',
|
customer_notes = fields.Text(related='folio_id.customer_notes',
|
||||||
@@ -68,23 +65,39 @@ class ChannelHotelReservation(models.Model):
|
|||||||
def cancel_reservation(self):
|
def cancel_reservation(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
if self._context.get('channel_action', True):
|
if self._context.get('channel_action', True):
|
||||||
|
user = self.env['res.user'].browse(self.env.uid)
|
||||||
with self.backend_id.work_on(self._name) as work:
|
with self.backend_id.work_on(self._name) as work:
|
||||||
adapter = work.component(usage='backend.adapter')
|
adapter = work.component(usage='backend.adapter')
|
||||||
wres = adapter.cancel_reservation(
|
wres = adapter.cancel_reservation(
|
||||||
self.channel_reservation_id,
|
self.channel_reservation_id,
|
||||||
_('Cancelled by %s') % partner_id.name)
|
_('Cancelled by %s') % user.partner_id.name)
|
||||||
if not wres:
|
if not wres:
|
||||||
raise ValidationError(_("Can't cancel reservation on WuBook"))
|
raise ValidationError(_("Can't cancel reservation on WuBook"))
|
||||||
|
|
||||||
class HotelReservation(models.Model):
|
class HotelReservation(models.Model):
|
||||||
_inherit = 'hotel.reservation'
|
_inherit = 'hotel.reservation'
|
||||||
|
|
||||||
|
@api.depends('channel_bind_ids.channel_reservation_id', 'channel_bind_ids.ota_id')
|
||||||
|
def _is_from_ota(self):
|
||||||
|
for record in self:
|
||||||
|
record.is_from_ota = (record.channel_bind_ids.channel_reservation_id and \
|
||||||
|
record.channel_bind_ids.ota_id)
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def set_access_for_wubook_fields(self):
|
def _set_access_for_wubook_fields(self):
|
||||||
for rec in self:
|
for rec in self:
|
||||||
user = self.env['res.users'].browse(self.env.uid)
|
user = self.env['res.users'].browse(self.env.uid)
|
||||||
rec.able_to_modify_channel = user.has_group('base.group_system')
|
rec.able_to_modify_channel = user.has_group('base.group_system')
|
||||||
|
|
||||||
|
is_from_ota = fields.Boolean('Is From OTA',
|
||||||
|
compute=_is_from_ota, store=False,
|
||||||
|
readonly=True,
|
||||||
|
old_name='wis_from_channel')
|
||||||
|
able_to_modify_channel = fields.Boolean(compute=_set_access_for_wubook_fields,
|
||||||
|
string='Is user able to modify wubook fields?',
|
||||||
|
old_name='able_to_modify_wubook')
|
||||||
|
to_read = fields.Boolean('To Read', default=False)
|
||||||
|
|
||||||
@api.depends('channel_type', 'ota_id')
|
@api.depends('channel_type', 'ota_id')
|
||||||
def _get_origin_sale(self):
|
def _get_origin_sale(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
@@ -211,30 +224,27 @@ class HotelReservation(models.Model):
|
|||||||
raise ValidationError(_("Can't confirm OTA's cancelled reservations"))
|
raise ValidationError(_("Can't confirm OTA's cancelled reservations"))
|
||||||
return super(HotelReservation, self).confirm()
|
return super(HotelReservation, self).confirm()
|
||||||
|
|
||||||
@api.multi
|
# @api.multi
|
||||||
def generate_copy_values(self, checkin=False, checkout=False):
|
# def generate_copy_values(self, checkin=False, checkout=False):
|
||||||
self.ensure_one()
|
# self.ensure_one()
|
||||||
res = super().generate_copy_values(checkin=checkin, checkout=checkout)
|
# res = super().generate_copy_values(checkin=checkin, checkout=checkout)
|
||||||
res.update({
|
# res.update({
|
||||||
'channel_reservation_id': self.channel_reservation_id,
|
# 'channel_reservation_id': self.channel_reservation_id,
|
||||||
'ota_id': self.ota_id and self.ota_id.id or False,
|
# 'ota_id': self.ota_id and self.ota_id.id or False,
|
||||||
'ota_reservation_code': self.ota_reservation_code,
|
# 'ota_reservation_code': self.ota_reservation_code,
|
||||||
'is_from_ota': self.is_from_ota,
|
# 'is_from_ota': self.is_from_ota,
|
||||||
'to_read': self.to_read,
|
# 'to_read': self.to_read,
|
||||||
'wstatus': self.wstatus,
|
# 'wstatus': self.wstatus,
|
||||||
'wstatus_reason': self.wstatus_reason,
|
# 'wstatus_reason': self.wstatus_reason,
|
||||||
'customer_notes': self.customer_notes,
|
# 'customer_notes': self.customer_notes,
|
||||||
})
|
# })
|
||||||
return res
|
# return res
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def action_reservation_checkout(self):
|
def action_reservation_checkout(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
if record.state == 'cancelled':
|
if record.state != 'cancelled':
|
||||||
return
|
return super(HotelReservation, record).action_reservation_checkout()
|
||||||
else:
|
|
||||||
return super(HotelReservation, record).\
|
|
||||||
action_reservation_checkout()
|
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _hcalendar_reservation_data(self, reservations):
|
def _hcalendar_reservation_data(self, reservations):
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
@@ -3,12 +3,14 @@
|
|||||||
|
|
||||||
from odoo import api, models, fields
|
from odoo import api, models, fields
|
||||||
from odoo.addons.queue_job.job import job, related_action
|
from odoo.addons.queue_job.job import job, related_action
|
||||||
|
from odoo.addons.component.core import Component
|
||||||
|
from odoo.addons.component_event import skip_if
|
||||||
|
|
||||||
class ChannelHotelVirtualRoom(models.Model):
|
class ChannelHotelRoomType(models.Model):
|
||||||
_name = 'channel.hotel.virtual.room'
|
_name = 'channel.hotel.room.type'
|
||||||
_inherit = 'channel.binding'
|
_inherit = 'channel.binding'
|
||||||
_inherits = {'hotel.virtual.room': 'odoo_id'}
|
_inherits = {'hotel.room.type': 'odoo_id'}
|
||||||
_description = 'Channel Hotel Virtual Room'
|
_description = 'Channel Hotel Room'
|
||||||
|
|
||||||
@api.depends('ota_capacity')
|
@api.depends('ota_capacity')
|
||||||
@api.onchange('room_ids', 'room_type_ids')
|
@api.onchange('room_ids', 'room_type_ids')
|
||||||
@@ -16,8 +18,8 @@ class ChannelHotelVirtualRoom(models.Model):
|
|||||||
for rec in self:
|
for rec in self:
|
||||||
rec.ota_capacity = rec.get_capacity()
|
rec.ota_capacity = rec.get_capacity()
|
||||||
|
|
||||||
odoo_id = fields.Many2one(comodel_names='hotel.virtual.room',
|
odoo_id = fields.Many2one(comodel_names='hotel.room.type',
|
||||||
string='Reservation',
|
string='Room Type',
|
||||||
required=True,
|
required=True,
|
||||||
ondelete='cascade')
|
ondelete='cascade')
|
||||||
channel_room_id = fields.Char("Channel Room ID", readonly=True, old_name='wrid')
|
channel_room_id = fields.Char("Channel Room ID", readonly=True, old_name='wrid')
|
||||||
@@ -102,11 +104,11 @@ class ChannelHotelVirtualRoom(models.Model):
|
|||||||
importer = work.component(usage='channel.importer')
|
importer = work.component(usage='channel.importer')
|
||||||
return importer.import_rooms()
|
return importer.import_rooms()
|
||||||
|
|
||||||
class HotelVirtualRoom(models.Model):
|
class HotelRoomType(models.Model):
|
||||||
_inherit = 'hotel.virtual.room'
|
_inherit = 'hotel.room.type'
|
||||||
|
|
||||||
channel_bind_ids = fields.One2many(
|
channel_bind_ids = fields.One2many(
|
||||||
comodel_name='channel.hotel.virtual.room',
|
comodel_name='channel.hotel.room.type',
|
||||||
inverse_name='odoo_id',
|
inverse_name='odoo_id',
|
||||||
string='Hotel Channel Connector Bindings')
|
string='Hotel Channel Connector Bindings')
|
||||||
|
|
||||||
@@ -124,10 +126,10 @@ class HotelVirtualRoom(models.Model):
|
|||||||
], limit=1)
|
], limit=1)
|
||||||
return restriction
|
return restriction
|
||||||
|
|
||||||
class ChannelBindingVirtualRoomListener(Component):
|
class ChannelBindingRoomTypeListener(Component):
|
||||||
_name = 'channel.binding.virtual.room.listener'
|
_name = 'channel.binding.room.type.listener'
|
||||||
_inherit = 'base.connector.listener'
|
_inherit = 'base.connector.listener'
|
||||||
_apply_on = ['channel.virtual.room']
|
_apply_on = ['channel.room.type']
|
||||||
|
|
||||||
@skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
|
@skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
|
||||||
def on_record_write(self, record, fields=None):
|
def on_record_write(self, record, fields=None):
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
from odoo import api, models, fields
|
from odoo import api, models, fields
|
||||||
from odoo.addons.queue_job.job import job, related_action
|
from odoo.addons.queue_job.job import job, related_action
|
||||||
|
from odoo.addons.component.core import Component
|
||||||
|
from odoo.addons.component_event import skip_if
|
||||||
|
|
||||||
class ChannelHotelVirtualRoomAvailability(models.Model):
|
class ChannelHotelVirtualRoomAvailability(models.Model):
|
||||||
_name = 'channel.hotel.virtual.room.availability'
|
_name = 'channel.hotel.virtual.room.availability'
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
from odoo import api, models, fields
|
from odoo import api, models, fields
|
||||||
from odoo.addons.queue_job.job import job, related_action
|
from odoo.addons.queue_job.job import job, related_action
|
||||||
|
from odoo.addons.component.core import Component
|
||||||
|
from odoo.addons.component_event import skip_if
|
||||||
|
|
||||||
class ChannelHotelVirtualRoomRestriction(models.Model):
|
class ChannelHotelVirtualRoomRestriction(models.Model):
|
||||||
_name = 'channel.hotel.virtual.room.restriction'
|
_name = 'channel.hotel.virtual.room.restriction'
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from openerp import models, fields, api
|
from openerp import models, fields, api
|
||||||
|
from odoo.addons.queue_job.job import job
|
||||||
|
|
||||||
|
|
||||||
class HotelFolio(models.Model):
|
class HotelFolio(models.Model):
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from openerp import models, fields, api
|
from openerp import models, fields, api
|
||||||
from openerp.exceptions import ValidationError
|
from openerp.exceptions import ValidationError
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from openerp import models, fields, api
|
from openerp import models, fields, api
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from openerp import models, fields, api
|
from openerp import models, fields, api
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
from odoo import api, models, fields
|
from odoo import api, models, fields
|
||||||
from odoo.addons.queue_job.job import job, related_action
|
from odoo.addons.queue_job.job import job, related_action
|
||||||
|
from odoo.addons.component.core import Component
|
||||||
|
from odoo.addons.component_event import skip_if
|
||||||
|
|
||||||
class ChannelProductPricelist(models.Model):
|
class ChannelProductPricelist(models.Model):
|
||||||
_name = 'channel.product.pricelist'
|
_name = 'channel.product.pricelist'
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018 Alexandre Díaz <dev@redneboa.es>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import binascii
|
import binascii
|
||||||
import logging
|
import logging
|
||||||
@@ -10,49 +11,30 @@ from odoo.addons.hotel import date_utils
|
|||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class WubookConfiguration(models.TransientModel):
|
class HotelChannelConnectorConfiguration(models.TransientModel):
|
||||||
_name = 'wubook.config.settings'
|
|
||||||
_inherit = 'res.config.settings'
|
_inherit = 'res.config.settings'
|
||||||
|
|
||||||
wubook_user = fields.Char('WuBook User')
|
channel_push_security_token = fields.Char('WuBook Push Notification Security Token')
|
||||||
wubook_passwd = fields.Char('WuBook Password')
|
|
||||||
wubook_lcode = fields.Char('WuBook lcode')
|
|
||||||
wubook_server = fields.Char('WuBook Server',
|
|
||||||
default='https://wired.wubook.net/xrws/')
|
|
||||||
wubook_pkey = fields.Char('WuBook PKey')
|
|
||||||
wubook_push_security_token = fields.Char('WuBook Push Notification \
|
|
||||||
Security Token')
|
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def set_wubook_user(self):
|
def set_values(self):
|
||||||
return self.env['ir.default'].sudo().set(
|
super(HotelChannelConnectorConfiguration, self).set_values()
|
||||||
'wubook.config.settings', 'wubook_user', self.wubook_user)
|
|
||||||
|
|
||||||
@api.multi
|
self.env['ir.default'].sudo().set(
|
||||||
def set_wubook_passwd(self):
|
'res.config.settings', 'channel_push_security_token',
|
||||||
return self.env['ir.default'].sudo().set(
|
self.channel_push_security_token)
|
||||||
'wubook.config.settings', 'wubook_passwd', self.wubook_passwd)
|
|
||||||
|
|
||||||
@api.multi
|
@api.model
|
||||||
def set_wubook_lcode(self):
|
def get_values(self):
|
||||||
return self.env['ir.default'].sudo().set(
|
res = super(HotelChannelConnectorConfiguration, self).get_values()
|
||||||
'wubook.config.settings', 'wubook_lcode', self.wubook_lcode)
|
|
||||||
|
|
||||||
@api.multi
|
# ONLY FOR v11. DO NOT FORWARD-PORT
|
||||||
def set_wubook_server(self):
|
channel_push_security_token = self.env['ir.default'].sudo().get(
|
||||||
return self.env['ir.default'].sudo().set(
|
'res.config.settings', 'channel_push_security_token')
|
||||||
'wubook.config.settings', 'wubook_server', self.wubook_server)
|
res.update(
|
||||||
|
channel_push_security_token=channel_push_security_token,
|
||||||
@api.multi
|
)
|
||||||
def set_wubook_pkey(self):
|
return res
|
||||||
return self.env['ir.default'].sudo().set(
|
|
||||||
'wubook.config.settings', 'wubook_pkey', self.wubook_pkey)
|
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def set_wubook_push_security_token(self):
|
|
||||||
return self.env['ir.default'].sudo().set(
|
|
||||||
'wubook.config.settings',
|
|
||||||
'wubook_push_security_token', self.wubook_push_security_token)
|
|
||||||
|
|
||||||
# Dangerus method: Usefull for cloned instances with new wubook account
|
# Dangerus method: Usefull for cloned instances with new wubook account
|
||||||
@api.multi
|
@api.multi
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_reservation_form" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.reservation.form</field>
|
||||||
|
<field name="model">channel.hotel.reservation</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Hotel Channel Reservation">
|
||||||
|
<group>
|
||||||
|
<field name="channel_reservation_id" />
|
||||||
|
<field name="ota_reservation_code" />
|
||||||
|
<field name="wstatus" />
|
||||||
|
<field name="wstatus_reason" />
|
||||||
|
<field name="to_read" />
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_reservation_tree" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.reservation.tree</field>
|
||||||
|
<field name="model">channel.hotel.reservation</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Hotel Channel Reservation">
|
||||||
|
<field name="backend_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_virtual_room_form" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.virtual.room.form</field>
|
||||||
|
<field name="model">channel.hotel.virtual.room</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Hotel Channel Virtual Room">
|
||||||
|
<group>
|
||||||
|
<field name="channel_room_id" />
|
||||||
|
<field name="channel_short_code" />
|
||||||
|
<field name="ota_capacity" />
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_virtual_room_tree" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.virtual.room.tree</field>
|
||||||
|
<field name="model">channel.hotel.virtual.room</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Hotel Channel Virtual Room">
|
||||||
|
<field name="backend_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_virtual_room_availability_form" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.virtual.room.availability.form</field>
|
||||||
|
<field name="model">channel.hotel.virtual.room.availability</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Hotel Channel Room Availability">
|
||||||
|
<group>
|
||||||
|
<field name="channel_max_avail" />
|
||||||
|
<field name="channel_pushed" />
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_virtual_room_availability_tree" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.virtual.room.availability.tree</field>
|
||||||
|
<field name="model">channel.hotel.virtual.availability.room</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Hotel Channel Room Availability">
|
||||||
|
<field name="backend_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_virtual_room_restriction_form" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.virtual.room.restriction.form</field>
|
||||||
|
<field name="model">channel.hotel.virtual.room.restriction</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Hotel Channel Room Restriction">
|
||||||
|
<group>
|
||||||
|
<field name="channel_plan_id" />
|
||||||
|
<field name="is_daily_plan" />
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_virtual_room_restriction_tree" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.virtual.room.restriction.tree</field>
|
||||||
|
<field name="model">channel.hotel.virtual.restriction.room</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Hotel Channel Room Restriction">
|
||||||
|
<field name="backend_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_channel_product_pricelist_form" model="ir.ui.view">
|
||||||
|
<field name="name">channel.product.pricelist.form</field>
|
||||||
|
<field name="model">channel.product.pricelist</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Hotel Channel Product Pricelist">
|
||||||
|
<group>
|
||||||
|
<field name="channel_plan_id" />
|
||||||
|
<field name="is_daily_plan" />
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_channel_hotel_virtual_room_restriction_tree" model="ir.ui.view">
|
||||||
|
<field name="name">channel.hotel.product.pricelist.tree</field>
|
||||||
|
<field name="model">channel.hotel.product.pricelist.room</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Hotel Channel Product Pricelist">
|
||||||
|
<field name="backend_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- Backend stuff -->
|
<!-- Backend stuff -->
|
||||||
<template id="assets_backend" inherit_id="web.assets_backend">
|
<template id="assets_backend" inherit_id="web.assets_backend">
|
||||||
<xpath expr="." position="inside">
|
<xpath expr="." position="inside">
|
||||||
<script type="text/javascript" src="/hotel_channel_connector/static/src/js/wubook_listview_import_buttons.js"></script>
|
<script type="text/javascript" src="/hotel_channel_connector/static/src/js/wubook_listview_import_buttons.js"></script>
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -1,71 +1,72 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- FORM issue -->
|
<!-- FORM issue -->
|
||||||
<record id="hotel_channel_connector_issue_view_form" model="ir.ui.view">
|
<record id="hotel_channel_connector_issue_view_form" model="ir.ui.view">
|
||||||
<field name="name">hotel.channel.coonector.issue.form</field>
|
<field name="name">hotel.channel.coonector.issue.form</field>
|
||||||
<field name="model">hotel.channel.coonector.issue</field>
|
<field name="model">hotel.channel.coonector.issue</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Channel Connector Issue">
|
<form string="Channel Connector Issue">
|
||||||
<sheet>
|
<sheet>
|
||||||
<div class="oe_button_box" name="button_box">
|
<div class="oe_button_box" name="button_box">
|
||||||
<button name="toggle_to_read" type="object" class="oe_stat_button" icon="fa-eye">
|
<button name="toggle_to_read" type="object" class="oe_stat_button" icon="fa-eye">
|
||||||
<field name="to_read" widget="boolean_button" options='{"terminology": "see"}'/>
|
<field name="to_read" widget="boolean_button" options='{"terminology": "see"}'/>
|
||||||
</button>
|
</button>
|
||||||
<button name="mark_as_read" type="object"
|
<button name="mark_as_read" type="object"
|
||||||
string="Mark as Readed"
|
string="Mark as Readed"
|
||||||
groups="hotel.group_hotel_manager"
|
groups="hotel.group_hotel_manager"
|
||||||
class="oe_stat_button" icon="fa-warning"
|
class="oe_stat_button" icon="fa-warning"
|
||||||
attrs="{'invisible':['|', ['section', '!=', 'reservation'], ['wid', '=', False]]}"/>
|
attrs="{'invisible':['|', ['section', '!=', 'reservation'], ['wid', '=', False]]}"/>
|
||||||
</div>
|
</div>
|
||||||
<group>
|
<group>
|
||||||
<field name="section"/>
|
<field name="section"/>
|
||||||
<field name="internal_message"/>
|
<field name="internal_message"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="date_start"/>
|
<field name="date_start"/>
|
||||||
<field name="date_end"/>
|
<field name="date_end"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="channel_object_id"/>
|
<field name="channel_object_id"/>
|
||||||
<field name="channel_message"/>
|
<field name="channel_message"/>
|
||||||
</group>
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- TREE issue -->
|
<!-- TREE issue -->
|
||||||
<record id="hotel_channel_connector_issue_view_tree" model="ir.ui.view">
|
<record id="hotel_channel_connector_issue_view_tree" model="ir.ui.view">
|
||||||
<field name="name">hotel.channel.coonector.issue.tree</field>
|
<field name="name">hotel.channel.coonector.issue.tree</field>
|
||||||
<field name="model">hotel.channel.coonector.issue</field>
|
<field name="model">hotel.channel.coonector.issue</field>
|
||||||
<field name="type">tree</field>
|
<field name="type">tree</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Channel Connector Issues">
|
<tree string="Channel Connector Issues">
|
||||||
<field name="create_date"/>
|
<field name="create_date"/>
|
||||||
<field name="section"/>
|
<field name="section"/>
|
||||||
<field name="internal_message"/>
|
<field name="internal_message"/>
|
||||||
<field name="date_start"/>
|
<field name="date_start"/>
|
||||||
<field name="date_end"/>
|
<field name="date_end"/>
|
||||||
<field name="channel_object_id"/>
|
<field name="channel_object_id"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- SEARCH issue -->
|
<!-- SEARCH issue -->
|
||||||
<record id="view_hotel_channel_connector_issue_form_search" model="ir.ui.view">
|
<record id="view_hotel_channel_connector_issue_form_search" model="ir.ui.view">
|
||||||
<field name="name">hotel.channel.coonector.issue.search</field>
|
<field name="name">hotel.channel.coonector.issue.search</field>
|
||||||
<field name="model">hotel.channel.coonector.issue</field>
|
<field name="model">hotel.channel.coonector.issue</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<search string="Issues">
|
<search string="Issues">
|
||||||
<field name="create_date"/>
|
<field name="create_date"/>
|
||||||
<field name="section"/>
|
<field name="section"/>
|
||||||
<field name="internal_message"/>
|
<field name="internal_message"/>
|
||||||
<field name="date_start"/>
|
<field name="date_start"/>
|
||||||
<field name="date_end"/>
|
<field name="date_end"/>
|
||||||
<field name="channel_object_id"/>
|
<field name="channel_object_id"/>
|
||||||
<field name="to_read"/>
|
<field name="to_read"/>
|
||||||
</search>
|
</search>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
|
||||||
|
</odoo>
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
<field name="inherit_id" ref="hotel.view_hotel_folio1_form" />
|
<field name="inherit_id" ref="hotel.view_hotel_folio1_form" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='partner_internal_comment']" position="before">
|
<xpath expr="//field[@name='partner_internal_comment']" position="before">
|
||||||
<field name="whas_wubook_reservations" invisible="True" />
|
<field name="has_channel_reservations" invisible="True" />
|
||||||
<field name="wcustomer_notes" readonly="True" attrs="{'invisible':[('whas_wubook_reservations', '=', False)]}"/>
|
<field name="customer_notes" readonly="True" attrs="{'invisible':[('has_channel_reservations', '=', False)]}"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<field name="inherit_id" ref="hotel.view_hotel_reservation_form" />
|
<field name="inherit_id" ref="hotel.view_hotel_reservation_form" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='channel_type']" position="after">
|
<xpath expr="//field[@name='channel_type']" position="after">
|
||||||
<field name="wchannel_id" attrs='{"readonly": [("able_to_modify_wubook","=",False)], "invisible":[("channel_type","!=", "web")]}' string="OTA"/>
|
<field name="channel_reservation_id" attrs='{"readonly": [("able_to_modify_channel","=",False)], "invisible":[("channel_type","!=", "web")]}' string="OTA"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='cardex_pending']" position="before">
|
<xpath expr="//field[@name='cardex_pending']" position="before">
|
||||||
<group colspan="6" col="6">
|
<group colspan="6" col="6">
|
||||||
@@ -15,44 +15,43 @@
|
|||||||
</xpath>
|
</xpath>
|
||||||
|
|
||||||
<xpath expr="//field[@name='partner_internal_comment']" position="after">
|
<xpath expr="//field[@name='partner_internal_comment']" position="after">
|
||||||
<field name="able_to_modify_wubook" invisible="True"/>
|
<field name="able_to_modify_channel" invisible="True"/>
|
||||||
<field name="customer_notes" readonly="1"
|
<!-- <field name="customer_notes" readonly="1"
|
||||||
attrs="{'invisible': [('wrid','=',False)]}"
|
attrs="{'invisible': [('channel_reservation_id','=',False)]}"
|
||||||
nolabel="1" colspan="2"
|
nolabel="1" colspan="2"
|
||||||
/>
|
/> -->
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
||||||
<xpath expr="//page[@name='days']" position="after">
|
<xpath expr="//page[@name='days']" position="after">
|
||||||
<page name="wubook" string="Wubook">
|
<page name="connector">
|
||||||
<group colspan="4" col="4">
|
<group string="Hotel Channel Bindings">
|
||||||
<field name="channel_reservation_id" attrs='{"readonly": [("able_to_modify_wubook","=",False)]}'/>
|
<field name="channel_bind_ids" nolabel="1">
|
||||||
<field name="ota_reservation_code" attrs='{"readonly": [("able_to_modify_wubook","=",False)]}'/>
|
<tree>
|
||||||
<field name="wstatus" attrs='{"readonly": [("able_to_modify_wubook","=",False)]}'/>
|
<field name="backend_id"/>
|
||||||
<field name="wstatus_reason" attrs='{"readonly": [("able_to_modify_wubook","=",False)]}'/>
|
</tree>
|
||||||
<field name="to_read" invisible="0"/>
|
</field>
|
||||||
<field name="to_assign" invisible="0" />
|
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
||||||
<!-- ALLOW ONLY-READ -->
|
<!-- ALLOW ONLY-READ -->
|
||||||
<xpath expr="//field[@name='adults']" position="attributes">
|
<xpath expr="//field[@name='adults']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_wubook','=',False)]}</attribute>
|
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_channel','=',False)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='virtual_room_id']" position="attributes">
|
<xpath expr="//field[@name='room_type_id']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly': [('channel_reservation_id','!=',False),('able_to_modify_wubook','=',False)]}</attribute>
|
<attribute name="attrs">{'readonly': [('channel_reservation_id','!=',False),('able_to_modify_channel','=',False)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='children']" position="attributes">
|
<xpath expr="//field[@name='children']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_wubook','=',False)]}</attribute>
|
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_channel','=',False)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='checkin']" position="attributes">
|
<xpath expr="//field[@name='checkin']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_wubook','=',False)]}</attribute>
|
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_channel','=',False)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='checkout']" position="attributes">
|
<xpath expr="//field[@name='checkout']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_wubook','=',False)]}</attribute>
|
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_channel','=',False)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='reservation_line_ids']" position="attributes">
|
<xpath expr="//field[@name='reservation_line_ids']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_wubook','=',False)]}</attribute>
|
<attribute name="attrs">{'readonly': [('is_from_ota','=',True),('able_to_modify_channel','=',False)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="virtual_room_view_form" model="ir.ui.view">
|
||||||
|
<field name="model">hotel.room.type</field>
|
||||||
|
<field name="inherit_id" ref="hotel.view_hotel_room_type_form" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//sheet" position="inside">
|
||||||
|
<notebook>
|
||||||
|
<page name="connector">
|
||||||
|
<group string="Hotel Channel Bindings">
|
||||||
|
<field name="channel_bind_ids" nolabel="1">
|
||||||
|
<tree>
|
||||||
|
<field name="backend_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
</notebook>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -6,9 +6,19 @@
|
|||||||
<field name="model">hotel.virtual.room.availability</field>
|
<field name="model">hotel.virtual.room.availability</field>
|
||||||
<field name="inherit_id" ref="hotel.virtual_room_availability_view_form" />
|
<field name="inherit_id" ref="hotel.virtual_room_availability_view_form" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='avail']" position="after">
|
<xpath expr="//sheet" position="inside">
|
||||||
<field name="channel_max_avail" />
|
<notebook>
|
||||||
</xpath>
|
<page name="connector">
|
||||||
|
<group string="Hotel Channel Bindings">
|
||||||
|
<field name="channel_bind_ids" nolabel="1">
|
||||||
|
<tree>
|
||||||
|
<field name="backend_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
</notebook>
|
||||||
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
@@ -18,9 +28,9 @@
|
|||||||
<field name="inherit_id" ref="hotel.virtual_room_availability_view_tree" />
|
<field name="inherit_id" ref="hotel.virtual_room_availability_view_tree" />
|
||||||
<field name="type">tree</field>
|
<field name="type">tree</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='avail']" position="after">
|
<!-- <xpath expr="//field[@name='avail']" position="after">
|
||||||
<field name="channel_max_avail" />
|
<field name="channel_max_avail" />
|
||||||
</xpath>
|
</xpath> -->
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<record id="virtual_room_view_form" model="ir.ui.view">
|
|
||||||
<field name="model">hotel.room.type</field>
|
|
||||||
<field name="inherit_id" ref="hotel.virtual_room_view_form" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//field[@name='name']" position="after">
|
|
||||||
<field name="channel_short_code" maxlength="4" readonly="True" />
|
|
||||||
<field name="channel_reservation_id" readonly="True" />
|
|
||||||
<field name="ota_capacity" />
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
@@ -2,18 +2,17 @@
|
|||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<record id="product_pricelist_item_form_view" model="ir.ui.view">
|
<record id="product_pricelist_item_form_view" model="ir.ui.view">
|
||||||
<field name="model">product.pricelist.item</field>
|
<field name="model">product.pricelist.item</field>
|
||||||
<field name="inherit_id" ref="product.product_pricelist_item_form_view" />
|
<field name="inherit_id" ref="product.product_pricelist_item_form_view" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='name']" position="after">
|
<xpath expr="//field[@name='name']" position="after">
|
||||||
<field name="channel_pushed" readonly="True" />
|
<field name="channel_pushed" readonly="True" />
|
||||||
<field name="is_daily_plan" invisible="1" />
|
<field name="is_daily_plan" invisible="1" />
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='date_end']" position="attributes">
|
<xpath expr="//field[@name='date_end']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly': [('is_daily_plan', '=', True)]}</attribute>
|
<attribute name="attrs">{'readonly': [('is_daily_plan', '=', True)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -1,30 +1,18 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<record id="product_pricelist_view" model="ir.ui.view">
|
<record id="product_pricelist_view" model="ir.ui.view">
|
||||||
<field name="model">product.pricelist</field>
|
<field name="model">product.pricelist</field>
|
||||||
<field name="inherit_id" ref="product.product_pricelist_view" />
|
<field name="inherit_id" ref="product.product_pricelist_view" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//form[1]//sheet" position="before">
|
<xpath expr="//form[1]//sheet" position="before">
|
||||||
<header>
|
<header>
|
||||||
<button name="%(action_channel_import_plan_prices)d" string="Import Prices From Channel" type="action" class="oe_highlight" />
|
<button name="%(action_channel_import_plan_prices)d" string="Import Prices From Channel" type="action" class="oe_highlight" />
|
||||||
</header>
|
</header>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='company_id']" position="after">
|
<xpath expr="//field[@name='company_id']" position="after">
|
||||||
<field name="id" invisible="1"/>
|
<field name="id" invisible="1"/>
|
||||||
<field name="channel_plan_id" />
|
</xpath>
|
||||||
<field name="is_daily_plan" widget="checkbox" attrs="{'readonly':[('id', '>', 0)]}" />
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="product_pricelist_view_tree" model="ir.ui.view">
|
|
||||||
<field name="model">product.pricelist</field>
|
|
||||||
<field name="inherit_id" ref="product.product_pricelist_view_tree" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//field[@name='name']" position="after">
|
|
||||||
<field name="is_daily_plan" widget="checkbox" readonly="True" />
|
|
||||||
</xpath>
|
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<openerp>
|
<odoo>
|
||||||
<data>
|
|
||||||
|
|
||||||
<record id="view_partner_form" model="ir.ui.view">
|
<record id="view_partner_form" model="ir.ui.view">
|
||||||
<field name="model">res.partner</field>
|
<field name="model">res.partner</field>
|
||||||
<field name="inherit_id" ref="base.view_partner_form" />
|
<field name="inherit_id" ref="base.view_partner_form" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='parent_id']" position="after">
|
<xpath expr="//field[@name='parent_id']" position="after">
|
||||||
<group>
|
<group>
|
||||||
<field name="unconfirmed" invisible="1"/>
|
<field name="unconfirmed" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</odoo>
|
||||||
</openerp>
|
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<record id="reservation_restriction_item_form_view" model="ir.ui.view">
|
<record id="reservation_restriction_item_form_view" model="ir.ui.view">
|
||||||
<field name="model">hotel.virtual.room.restriction.item</field>
|
<field name="model">hotel.virtual.room.restriction.item</field>
|
||||||
<field name="inherit_id" ref="hotel.reservation_restriction_item_view_form" />
|
<field name="inherit_id" ref="hotel.reservation_restriction_item_view_form" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='date_end']" position="attributes">
|
<xpath expr="//field[@name='date_end']" position="attributes">
|
||||||
<attribute name="readonly">True</attribute>
|
<attribute name="readonly">True</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -1,19 +1,15 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<record id="reservation_restriction_view" model="ir.ui.view">
|
<record id="reservation_restriction_view" model="ir.ui.view">
|
||||||
<field name="model">hotel.virtual.room.restriction</field>
|
<field name="model">hotel.virtual.room.restriction</field>
|
||||||
<field name="inherit_id" ref="hotel.reservation_restriction_view_form" />
|
<field name="inherit_id" ref="hotel.reservation_restriction_view_form" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//form[1]//sheet" position="before">
|
<xpath expr="//form[1]//sheet" position="before">
|
||||||
<header>
|
<header>
|
||||||
<button name="%(action_channel_import_plan_restrictions)d" string="Import Restrictions From Channel" type="action" class="oe_highlight" />
|
<button name="%(action_channel_import_plan_restrictions)d" string="Import Restrictions From Channel" type="action" class="oe_highlight" />
|
||||||
</header>
|
</header>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='active']" position="after">
|
|
||||||
<field name="channel_plan_id" />
|
|
||||||
<field name="is_daily_plan" />
|
|
||||||
</xpath>
|
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|||||||
@@ -1,118 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<!-- Hotel Channel Connector Settings -->
|
|
||||||
<record id="view_hotel_config_settings" model="ir.ui.view">
|
|
||||||
<field name="name">res.config.settings.view.form.inherit.hotel.channel.connector</field>
|
|
||||||
<field name="model">res.config.settings</field>
|
|
||||||
<field name="priority" eval="80"/>
|
|
||||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//div[hasclass('settings')]" position="inside">
|
|
||||||
<div class="app_settings_block" data-string="Hotel" string="Hotel" data-key="hotel" groups="hotel.group_hotel_manager">
|
|
||||||
<h2>Hotel Parity</h2>
|
|
||||||
<div class="row mt16 o_settings_container">
|
|
||||||
<div class="col-xs-12 col-md-6 o_setting_box">
|
|
||||||
<label for="parity_pricelist_id"/>
|
|
||||||
<div class="text-muted">
|
|
||||||
Set pricelist parity
|
|
||||||
</div>
|
|
||||||
<div class="content-group">
|
|
||||||
<div class="mt16">
|
|
||||||
<field name="parity_pricelist_id" required="True" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-md-6 o_setting_box">
|
|
||||||
<label for="parity_restrictions_id"/>
|
|
||||||
<div class="text-muted">
|
|
||||||
Set restrictions parity
|
|
||||||
</div>
|
|
||||||
<div class="content-group">
|
|
||||||
<div class="mt16">
|
|
||||||
<field name="parity_restrictions_id" required="True" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<h2>Hotel Default Hours</h2>
|
|
||||||
<div class="row mt16 o_settings_container">
|
|
||||||
<div class="col-xs-12 col-md-12 o_setting_box">
|
|
||||||
<label for="tz_hotel"/>
|
|
||||||
<div class="text-muted">
|
|
||||||
Set time-zone
|
|
||||||
</div>
|
|
||||||
<div class="content-group">
|
|
||||||
<div class="mt16">
|
|
||||||
<field name="tz_hotel"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-md-6 o_setting_box">
|
|
||||||
<label for="default_arrival_hour"/>
|
|
||||||
<div class="text-muted">
|
|
||||||
Set default arrival hour
|
|
||||||
</div>
|
|
||||||
<div class="content-group">
|
|
||||||
<div class="mt16">
|
|
||||||
<field name="default_arrival_hour" required="True" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-md-6 o_setting_box">
|
|
||||||
<label for="default_departure_hour"/>
|
|
||||||
<div class="text-muted">
|
|
||||||
Set default departure hour
|
|
||||||
</div>
|
|
||||||
<div class="content-group">
|
|
||||||
<div class="mt16">
|
|
||||||
<field name="default_departure_hour" required="True" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- WuBook config wizard -->
|
|
||||||
<record id="view_wubook_config_settings" model="ir.ui.view">
|
|
||||||
<field name="name">Channel Settings</field>
|
|
||||||
<field name="model">res.config.settings</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Configure Channel" class="oe_form_configuration">
|
|
||||||
<header>
|
|
||||||
<button string="Apply" type="object" name="execute" class="oe_highlight"/>
|
|
||||||
<button string="Cancel" type="object" name="cancel" class="oe_link"/>
|
|
||||||
</header>
|
|
||||||
<sheet>
|
|
||||||
<div class=" oe_button_box">
|
|
||||||
<button type="object" class="oe_stat_button"
|
|
||||||
icon="fa-recycle"
|
|
||||||
name="resync"
|
|
||||||
context="">
|
|
||||||
<div class="o_form_field o_stat_info">
|
|
||||||
<span class="o_stat_text">ReSync</span>
|
|
||||||
</div>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div id="main">
|
|
||||||
<group name="wubook_details" string="WuBook Details">
|
|
||||||
<group>
|
|
||||||
<field name="wubook_server" />
|
|
||||||
<field name="wubook_pkey" />
|
|
||||||
<field name="wubook_lcode" />
|
|
||||||
</group>
|
|
||||||
<group>
|
|
||||||
<field name="wubook_user" />
|
|
||||||
<field name="wubook_passwd" password="True" />
|
|
||||||
</group>
|
|
||||||
</group>
|
|
||||||
</div>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
Reference in New Issue
Block a user