[FIX][WIP] browse channel room type

This commit is contained in:
Pablo
2019-02-18 07:32:57 +01:00
committed by Dario Lodeiros
parent aa19120e30
commit 0ec32182fe
4 changed files with 31 additions and 15 deletions

View File

@@ -1,6 +1,7 @@
# Copyright 2018-2019 Alexandre Díaz <dev@redneboa.es>
# 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

View File

@@ -54,10 +54,14 @@
<!-- Action of reservation restriction -->
<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="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Availability" id="availability_menu"
action="hotel_room_type_availability_action" sequence="21"
parent="hotel.configuration_others" />
</odoo>

View File

@@ -22,4 +22,8 @@
</field>
</record>
<menuitem name="Pricelist" id="pricelist_menu"
action="product.product_pricelist_action2" sequence="22"
parent="hotel.configuration_others" />
</odoo>

View File

@@ -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,
})