mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[FIX][WIP] browse channel room type
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
# Copyright 2018-2019 Alexandre Díaz <dev@redneboa.es>
|
# Copyright 2018-2019 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
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from odoo import api, models, fields, _
|
from odoo import api, models, fields, _
|
||||||
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
|
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
|
||||||
@@ -8,6 +9,7 @@ from odoo.exceptions import ValidationError
|
|||||||
from odoo.addons.queue_job.job import job
|
from odoo.addons.queue_job.job import job
|
||||||
from odoo.addons.component.core import Component
|
from odoo.addons.component.core import Component
|
||||||
from odoo.addons.component_event import skip_if
|
from odoo.addons.component_event import skip_if
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class HotelRoomTypeAvailability(models.Model):
|
class HotelRoomTypeAvailability(models.Model):
|
||||||
@@ -111,7 +113,8 @@ class ChannelHotelRoomTypeAvailability(models.Model):
|
|||||||
channel_room_type_avail_obj = self.env['hotel.room.type.availability']
|
channel_room_type_avail_obj = self.env['hotel.room.type.availability']
|
||||||
|
|
||||||
if room_type_id:
|
if room_type_id:
|
||||||
room_type_bind = channel_room_type_obj.browse(room_type_id)
|
# room_type_bind = channel_room_type_obj.browse(room_type_id)
|
||||||
|
room_type_bind = channel_room_type_obj.search([('odoo_id', '=', room_type_id)])
|
||||||
else:
|
else:
|
||||||
domain = [('backend_id', '=', backend_id)]
|
domain = [('backend_id', '=', backend_id)]
|
||||||
if room_id:
|
if room_id:
|
||||||
@@ -125,28 +128,32 @@ class ChannelHotelRoomTypeAvailability(models.Model):
|
|||||||
cavail = len(channel_room_type_obj.odoo_id.check_availability_room_type(
|
cavail = len(channel_room_type_obj.odoo_id.check_availability_room_type(
|
||||||
ndate_str,
|
ndate_str,
|
||||||
ndate_str,
|
ndate_str,
|
||||||
room_type_id=room_type_bind.odoo.id))
|
room_type_id=room_type_bind.odoo_id.id))
|
||||||
to_eval.append(cavail)
|
to_eval.append(cavail)
|
||||||
to_eval.append(room_type_bind.total_rooms_count)
|
to_eval.append(room_type_bind.total_rooms_count)
|
||||||
room_type_avail_id = channel_room_type_avail_obj.search([
|
room_type_avail_id = channel_room_type_avail_obj.search([
|
||||||
('room_type_id', '=', room_type_bind.odoo.id),
|
('room_type_id', '=', room_type_bind.odoo_id.id),
|
||||||
('date', '=', ndate_str)], limit=1)
|
('date', '=', ndate_str)], limit=1)
|
||||||
if room_type_avail_id:
|
if room_type_avail_id:
|
||||||
if room_type_avail_id.channel_max_avail >= 0:
|
# BUG: Crashes with more than one channel_bind_ids
|
||||||
|
if room_type_avail_id.channel_bind_ids.max_avail >= 0:
|
||||||
to_eval.append(
|
to_eval.append(
|
||||||
room_type_avail_id.channel_max_avail)
|
room_type_avail_id.channel_bind_ids.max_avail)
|
||||||
if room_type_avail_id.quota >= 0:
|
if room_type_avail_id.quota >= 0:
|
||||||
to_eval.append(room_type_avail_id.quota)
|
to_eval.append(room_type_avail_id.quota)
|
||||||
if room_type_avail_id.max_avail >= 0:
|
if room_type_avail_id.max_avail >= 0:
|
||||||
to_eval.append(room_type_avail_id.max_avail)
|
to_eval.append(room_type_avail_id.max_avail)
|
||||||
avail = max(min(to_eval), 0)
|
avail = max(min(to_eval), 0)
|
||||||
|
import wdb;
|
||||||
if room_type_avail_id \
|
wdb.set_trace()
|
||||||
and avail != room_type_avail_id.avail:
|
_logger.info("==[ODOO->CHANNEL]==== REFRESH AVAILABILITY ==")
|
||||||
room_type_avail_id.write({'avail': avail})
|
# CAVEAT: update hotel.room.type.availability in any change
|
||||||
|
if room_type_avail_id and avail != room_type_avail_id.max_avail:
|
||||||
|
room_type_avail_id.write({'max_avail': avail})
|
||||||
else:
|
else:
|
||||||
|
# create a new hotel.room.type.availability otherwhise
|
||||||
channel_room_type_avail_obj.create({
|
channel_room_type_avail_obj.create({
|
||||||
'room_type_id': room_type_bind.odoo.id,
|
'room_type_id': room_type_bind.odoo_id.id,
|
||||||
'date': ndate_str,
|
'date': ndate_str,
|
||||||
'avail': avail,
|
'avail': avail,
|
||||||
})
|
})
|
||||||
@@ -169,13 +176,13 @@ class ChannelHotelRoomTypeAvailability(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class BindingHotelRoomTypeAvailabilityListener(Component):
|
class BindingHotelRoomTypeAvailabilityListener(Component):
|
||||||
_name = 'binding.hotel.room.type.listener'
|
_name = 'binding.hotel.room.type.availability.listener'
|
||||||
_inherit = 'base.connector.listener'
|
_inherit = 'base.connector.listener'
|
||||||
_apply_on = ['hotel.room.type.availability']
|
_apply_on = ['hotel.room.type.availability']
|
||||||
|
|
||||||
@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):
|
||||||
fields_to_check = ('quota', 'max_avail')
|
fields_to_check = ('max_avail', 'quota', 'no_ota')
|
||||||
fields_checked = [elm for elm in fields_to_check if elm in fields]
|
fields_checked = [elm for elm in fields_to_check if elm in fields]
|
||||||
if any(fields_checked) and any(record.channel_bind_ids):
|
if any(fields_checked) and any(record.channel_bind_ids):
|
||||||
for binding in record.channel_bind_ids:
|
for binding in record.channel_bind_ids:
|
||||||
@@ -206,6 +213,7 @@ class BindingHotelRoomTypeAvailabilityListener(Component):
|
|||||||
record.date,
|
record.date,
|
||||||
record.date,
|
record.date,
|
||||||
backend.id,
|
backend.id,
|
||||||
|
# room_type_id=record.room_type_id.channel_bind_ids.id,
|
||||||
room_type_id=record.room_type_id.id)
|
room_type_id=record.room_type_id.id)
|
||||||
|
|
||||||
|
|
||||||
@@ -216,7 +224,7 @@ class ChannelBindingHotelRoomTypeAvailabilityListener(Component):
|
|||||||
|
|
||||||
@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):
|
||||||
fields_to_check = ('max_avail', 'date')
|
fields_to_check = ('date', 'max_avail', 'quota', 'no_ota')
|
||||||
fields_checked = [elm for elm in fields_to_check if elm in fields]
|
fields_checked = [elm for elm in fields_to_check if elm in fields]
|
||||||
if any(fields_checked):
|
if any(fields_checked):
|
||||||
record.channel_pushed = False
|
record.channel_pushed = False
|
||||||
|
|||||||
@@ -54,10 +54,14 @@
|
|||||||
|
|
||||||
<!-- Action of reservation restriction -->
|
<!-- Action of reservation restriction -->
|
||||||
<record model="ir.actions.act_window" id="hotel_room_type_availability_action">
|
<record model="ir.actions.act_window" id="hotel_room_type_availability_action">
|
||||||
<field name="name">Virtual Room Availability</field>
|
<field name="name">Room Type Availability</field>
|
||||||
<field name="res_model">hotel.room.type.availability</field>
|
<field name="res_model">hotel.room.type.availability</field>
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<menuitem name="Availability" id="availability_menu"
|
||||||
|
action="hotel_room_type_availability_action" sequence="21"
|
||||||
|
parent="hotel.configuration_others" />
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -22,4 +22,8 @@
|
|||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<menuitem name="Pricelist" id="pricelist_menu"
|
||||||
|
action="product.product_pricelist_action2" sequence="22"
|
||||||
|
parent="hotel.configuration_others" />
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class HotelRoomTypeAvailabilityExporter(Component):
|
|||||||
date_dt = fields.Date.from_string(channel_room_type_avail.date)
|
date_dt = fields.Date.from_string(channel_room_type_avail.date)
|
||||||
days.append({
|
days.append({
|
||||||
'date': date_dt.strftime(DEFAULT_WUBOOK_DATE_FORMAT),
|
'date': date_dt.strftime(DEFAULT_WUBOOK_DATE_FORMAT),
|
||||||
'avail': channel_room_type_avail.max_avail, # TODO max_avail __or__ quota ¿?
|
'avail': channel_room_type_avail.quota, # FIXME max_avail __or__ quota ¿?
|
||||||
'no_ota': channel_room_type_avail.no_ota and 1 or 0,
|
'no_ota': channel_room_type_avail.no_ota and 1 or 0,
|
||||||
# 'booked': room_type_avail.booked and 1 or 0,
|
# 'booked': room_type_avail.booked and 1 or 0,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user