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>
|
||||
# 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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -22,4 +22,8 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Pricelist" id="pricelist_menu"
|
||||
action="product.product_pricelist_action2" sequence="22"
|
||||
parent="hotel.configuration_others" />
|
||||
|
||||
</odoo>
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user