[FIX] Quota and Avail

This commit is contained in:
Dario Lodeiros
2019-03-14 12:58:15 +01:00
parent 58d1eba117
commit d1c9c19b15
2 changed files with 44 additions and 67 deletions

View File

@@ -92,30 +92,6 @@ class ChannelHotelRoomTypeAvailability(models.Model):
channel_pushed = fields.Boolean("Channel Pushed", readonly=True,
default=False)
@api.constrains('max_avail')
def _check_avail(self):
room_type_obj = self.env['hotel.room.type']
issue_obj = self.env['hotel.channel.connector.issue']
for record in self:
cavail = len(room_type_obj.check_availability_room_type(
record.date,
record.date,
room_type_id=record.room_type_id.id))
max_avail = min(cavail, record.room_type_id.total_rooms_count)
if record.avail > max_avail:
issue_obj.sudo().create({
'section': 'avail',
'internal_message': _(r"The new availability can't be \
greater than the max. availability \
(%s) [Input: %d\Max: %d]") % (record.room_type_id.name,
record.avail,
max_avail),
'date_start': record.date,
'date_end': record.date,
})
# Auto-Fix channel availability
self._event('on_fix_channel_availability').notify(record)
@api.model
def refresh_availability(self, checkin, checkout, backend_id, room_id=False,
room_type_id=False, from_channel=False):
@@ -180,17 +156,17 @@ class ChannelHotelRoomTypeAvailability(models.Model):
room_type_avail_id.write(vals_avail)
# Auto-Fix channel quota and max availability
vals_avail = {}
# TODO: reduce quota by one instead of adjust to current channel availability
if room_type_avail_id.quota > avail:
vals_avail.update({'quota': avail})
_logger.info(vals_avail)
if room_type_avail_id.max_avail > avail:
vals_avail.update({'max_avail': avail})
if vals_avail:
room_type_avail_id.with_context(
{'connector_no_export': True}
).write(vals_avail)
# vals_avail = {}
# # TODO: reduce quota by one instead of adjust to current channel availability
# if room_type_avail_id.quota > avail:
# vals_avail.update({'quota': avail})
# _logger.info(vals_avail)
# if room_type_avail_id.max_avail > avail:
# vals_avail.update({'max_avail': avail})
# if vals_avail:
# room_type_avail_id.with_context(
# {'connector_no_export': True}
# ).write(vals_avail)
else:
self.env['hotel.room.type.availability'].with_context(
{'connector_no_export': True}
@@ -246,36 +222,36 @@ class BindingHotelRoomTypeAvailabilityListener(Component):
binding.backend_id.id,
room_type_id=record.room_type_id.id)
# @skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
# def on_record_create(self, record, fields=None):
# if not any(record.channel_bind_ids):
# channel_room_type_avail_obj = self.env[
# 'channel.hotel.room.type.availability']
# backends = self.env['channel.backend'].search([])
# for backend in backends:
# # REVIEW :: If you create directly channel_binding, this search
# # return empty
# avail_bind = channel_room_type_avail_obj.search([
# ('odoo_id', '=', record.id),
# ('backend_id', '=', backend.id),
# ])
# if not avail_bind:
# # REVIEW :: WARNING :: This create triggers on_record_write above
# avail_bind = channel_room_type_avail_obj.create({
# 'odoo_id': record.id,
# 'channel_pushed': False,
# 'backend_id': backend.id,
# })
# _logger.info("==[on_record_create] :: hotel.room.type.availability==")
# _logger.info(avail_bind)
# else:
# avail_bind.refresh_availability(
# record.date,
# (datetime.strptime(record.date, DEFAULT_SERVER_DATE_FORMAT).date() +
# timedelta(days=1)).strftime(DEFAULT_SERVER_DATE_FORMAT),
# backend.id,
# # room_type_id=record.room_type_id.channel_bind_ids.id,
# room_type_id=record.room_type_id.id)
@skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
def on_record_create(self, record, fields=None):
if not any(record.channel_bind_ids):
channel_room_type_avail_obj = self.env[
'channel.hotel.room.type.availability']
backends = self.env['channel.backend'].search([])
for backend in backends:
# REVIEW :: If you create directly channel_binding, this search
# return empty
avail_bind = channel_room_type_avail_obj.search([
('odoo_id', '=', record.id),
('backend_id', '=', backend.id),
])
if not avail_bind:
# REVIEW :: WARNING :: This create triggers on_record_write above
avail_bind = channel_room_type_avail_obj.create({
'odoo_id': record.id,
'channel_pushed': False,
'backend_id': backend.id,
})
_logger.info("==[on_record_create] :: hotel.room.type.availability==")
_logger.info(avail_bind)
else:
avail_bind.refresh_availability(
record.date,
(datetime.strptime(record.date, DEFAULT_SERVER_DATE_FORMAT).date() +
timedelta(days=1)).strftime(DEFAULT_SERVER_DATE_FORMAT),
backend.id,
# room_type_id=record.room_type_id.channel_bind_ids.id,
room_type_id=record.room_type_id.id)
class ChannelBindingHotelRoomTypeAvailabilityListener(Component):

View File

@@ -84,12 +84,13 @@ class BindingHotelReservationListener(Component):
fields_to_check = ('state', )
fields_checked = [elm for elm in fields_to_check if elm in fields]
if any(fields_checked):
for record in self:
if any(record.channel_bind_ids):
# Only can cancel reservations created directly in wubook
for binding in record.channel_bind_ids:
if binding.external_id and not binding.ota_id and \
int(binding.channel_status) in WUBOOK_STATUS_GOOD:
binding.sudo().cancel_reservation()
if record.state in ('cancelled'):
binding.sudo().cancel_reservation()
# self.env['channel.hotel.reservation']._event('on_record_cancel').notify(binding)