diff --git a/hotel_channel_connector/models/hotel_room_type_availability/common.py b/hotel_channel_connector/models/hotel_room_type_availability/common.py index 97eadf753..c66ddcfa0 100644 --- a/hotel_channel_connector/models/hotel_room_type_availability/common.py +++ b/hotel_channel_connector/models/hotel_room_type_availability/common.py @@ -1,6 +1,7 @@ # Copyright 2018-2019 Alexandre Díaz # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import logging from datetime import timedelta from odoo import api, models, fields, _ 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.component.core import Component from odoo.addons.component_event import skip_if +_logger = logging.getLogger(__name__) class HotelRoomTypeAvailability(models.Model): @@ -111,7 +113,8 @@ class ChannelHotelRoomTypeAvailability(models.Model): channel_room_type_avail_obj = self.env['hotel.room.type.availability'] 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: domain = [('backend_id', '=', backend_id)] if room_id: @@ -125,28 +128,32 @@ class ChannelHotelRoomTypeAvailability(models.Model): cavail = len(channel_room_type_obj.odoo_id.check_availability_room_type( 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(room_type_bind.total_rooms_count) 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) 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( - room_type_avail_id.channel_max_avail) + room_type_avail_id.channel_bind_ids.max_avail) if room_type_avail_id.quota >= 0: to_eval.append(room_type_avail_id.quota) if room_type_avail_id.max_avail >= 0: to_eval.append(room_type_avail_id.max_avail) avail = max(min(to_eval), 0) - - if room_type_avail_id \ - and avail != room_type_avail_id.avail: - room_type_avail_id.write({'avail': avail}) + import wdb; + wdb.set_trace() + _logger.info("==[ODOO->CHANNEL]==== REFRESH AVAILABILITY ==") + # 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: + # create a new hotel.room.type.availability otherwhise 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, 'avail': avail, }) @@ -169,13 +176,13 @@ class ChannelHotelRoomTypeAvailability(models.Model): class BindingHotelRoomTypeAvailabilityListener(Component): - _name = 'binding.hotel.room.type.listener' + _name = 'binding.hotel.room.type.availability.listener' _inherit = 'base.connector.listener' _apply_on = ['hotel.room.type.availability'] @skip_if(lambda self, record, **kwargs: self.no_connector_export(record)) 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] if any(fields_checked) and any(record.channel_bind_ids): for binding in record.channel_bind_ids: @@ -206,6 +213,7 @@ class BindingHotelRoomTypeAvailabilityListener(Component): record.date, record.date, backend.id, + # room_type_id=record.room_type_id.channel_bind_ids.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)) 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] if any(fields_checked): record.channel_pushed = False diff --git a/hotel_channel_connector/views/hotel_room_type_availability_views.xml b/hotel_channel_connector/views/hotel_room_type_availability_views.xml index 54a76deab..05d8f3648 100644 --- a/hotel_channel_connector/views/hotel_room_type_availability_views.xml +++ b/hotel_channel_connector/views/hotel_room_type_availability_views.xml @@ -54,10 +54,14 @@ - Virtual Room Availability + Room Type Availability hotel.room.type.availability form tree,form + + diff --git a/hotel_channel_connector/views/inherited_product_pricelist_item_views.xml b/hotel_channel_connector/views/inherited_product_pricelist_item_views.xml index 9f93bdc2b..ad97582b0 100644 --- a/hotel_channel_connector/views/inherited_product_pricelist_item_views.xml +++ b/hotel_channel_connector/views/inherited_product_pricelist_item_views.xml @@ -22,4 +22,8 @@ + + diff --git a/hotel_channel_connector_wubook/models/hotel_room_type_availability/exporter.py b/hotel_channel_connector_wubook/models/hotel_room_type_availability/exporter.py index 822fbd83e..9207d1394 100644 --- a/hotel_channel_connector_wubook/models/hotel_room_type_availability/exporter.py +++ b/hotel_channel_connector_wubook/models/hotel_room_type_availability/exporter.py @@ -31,7 +31,7 @@ class HotelRoomTypeAvailabilityExporter(Component): date_dt = fields.Date.from_string(channel_room_type_avail.date) days.append({ '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, # 'booked': room_type_avail.booked and 1 or 0, })