mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[WIP] Add channel virtual pricelists
This commit is contained in:
@@ -53,6 +53,9 @@ class HotelChannelInterfaceAdapter(AbstractComponent):
|
||||
def create_plan(self, name, daily=1):
|
||||
raise NotImplementedError
|
||||
|
||||
def create_vplan(self, name, pid, dtype, value):
|
||||
raise NotImplementedError
|
||||
|
||||
def delete_plan(self, channel_plan_id):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@@ -28,6 +28,15 @@ class ChannelProductPricelist(models.Model):
|
||||
exporter = work.component(usage='product.pricelist.exporter')
|
||||
exporter.create_plan(self)
|
||||
|
||||
@job(default_channel='root.channel')
|
||||
@api.multi
|
||||
def create_vplan(self):
|
||||
self.ensure_one()
|
||||
if not self.external_id:
|
||||
with self.backend_id.work_on(self._name) as work:
|
||||
exporter = work.component(usage='product.pricelist.exporter')
|
||||
exporter.create_vplan(self)
|
||||
|
||||
@job(default_channel='root.channel')
|
||||
@api.multi
|
||||
def update_plan_name(self):
|
||||
@@ -62,7 +71,7 @@ class ProductPricelist(models.Model):
|
||||
inverse_name='odoo_id',
|
||||
string='Hotel Channel Connector Bindings')
|
||||
|
||||
is_virtual_plan = fields.Boolean("Is a Virtual Pricing Plan", compute='_compute_virtual_plan', readonly="True",
|
||||
is_virtual_plan = fields.Boolean("Is a Virtual Pricing Plan", compute='_compute_virtual_plan',
|
||||
help="A virtual plan is based on another Pricelist "
|
||||
"with a fixed or percentage variation.")
|
||||
|
||||
@@ -149,7 +158,10 @@ class ChannelBindingProductPricelistListener(Component):
|
||||
|
||||
@skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
|
||||
def on_record_create(self, record, fields=None):
|
||||
record.create_plan()
|
||||
if record.is_virtual_plan:
|
||||
record.create_vplan()
|
||||
else:
|
||||
record.create_plan()
|
||||
|
||||
@skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
|
||||
def on_record_unlink(self, record, fields=None):
|
||||
|
||||
@@ -18,3 +18,7 @@ class ProductPricelistExporter(Component):
|
||||
@api.model
|
||||
def create_plan(self, binding):
|
||||
raise NotImplementedError
|
||||
|
||||
@api.model
|
||||
def create_vplan(self, binding):
|
||||
raise NotImplementedError
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<group>
|
||||
<field name="external_id" />
|
||||
<field name="is_daily_plan" />
|
||||
<field name="is_virtual_plan" />
|
||||
<field name="is_virtual_plan"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -322,6 +322,21 @@ class WuBookAdapter(AbstractComponent):
|
||||
})
|
||||
return results
|
||||
|
||||
def create_vplan(self, name, pid, dtype, value):
|
||||
rcode, results = self._server.add_vplan(
|
||||
self._session_info[0],
|
||||
self._session_info[1],
|
||||
name,
|
||||
pid,
|
||||
dtype,
|
||||
value,
|
||||
)
|
||||
if rcode != 0:
|
||||
raise ChannelConnectorError(_("Can't add virtual pricing plan to wubook"), {
|
||||
'message': results,
|
||||
})
|
||||
return results
|
||||
|
||||
def delete_plan(self, channel_plan_id):
|
||||
rcode, results = self._server.del_plan(
|
||||
self._session_info[0],
|
||||
|
||||
@@ -15,6 +15,9 @@ class ProductPricelistAdapter(Component):
|
||||
def create_plan(self, name):
|
||||
return super(ProductPricelistAdapter, self).create_plan(name)
|
||||
|
||||
def create_vplan(self, name, pid, dtype, value):
|
||||
return super(ProductPricelistAdapter, self).create_vplan(name, pid, dtype, value)
|
||||
|
||||
def delete_plan(self, external_id):
|
||||
return super(ProductPricelistAdapter, self).delete_plan(external_id)
|
||||
|
||||
|
||||
@@ -36,3 +36,22 @@ class ProductPricelistExporter(Component):
|
||||
else:
|
||||
binding.external_id = external_id
|
||||
self.binder.bind(external_id, binding)
|
||||
|
||||
@api.model
|
||||
def create_vplan(self, binding):
|
||||
try:
|
||||
import wdb; wdb.set_trace()
|
||||
external_id = self.backend_adapter.create_vplan(
|
||||
binding.name,
|
||||
binding.pid,
|
||||
binding.dtype,
|
||||
binding.value,
|
||||
)
|
||||
except ChannelConnectorError as err:
|
||||
self.create_issue(
|
||||
section='pricelist',
|
||||
internal_message=str(err),
|
||||
channel_message=err.data['message'])
|
||||
else:
|
||||
binding.external_id = external_id
|
||||
self.binder.bind(external_id, binding)
|
||||
Reference in New Issue
Block a user