mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[WIP] review availability when created from channel reservation
This commit is contained in:
@@ -81,54 +81,6 @@ class ChannelHotelReservation(models.Model):
|
|||||||
exporter = work.component(usage='hotel.reservation.exporter')
|
exporter = work.component(usage='hotel.reservation.exporter')
|
||||||
return exporter.mark_booking(self)
|
return exporter.mark_booking(self)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def write(self, vals):
|
|
||||||
if self._context.get('connector_no_export', True) and \
|
|
||||||
(vals.get('checkin') or vals.get('checkout') or
|
|
||||||
vals.get('room_id') or vals.get('state')):
|
|
||||||
older_vals = []
|
|
||||||
new_vals = []
|
|
||||||
for record in self:
|
|
||||||
backend_id = self.env['channel.hotel.room.type'].search([
|
|
||||||
('odoo_id', '=', record.room_id.room_type_id.id)
|
|
||||||
]).backend_id.id
|
|
||||||
older_vals.append({
|
|
||||||
'checkin': record.checkin,
|
|
||||||
'checkout': record.checkout,
|
|
||||||
'backend_id': backend_id,
|
|
||||||
'room_id': record.room_id.id,
|
|
||||||
})
|
|
||||||
new_backend_id = self.env['channel.hotel.room.type'].search([
|
|
||||||
('odoo_id', '=', self.env['hotel.room'].
|
|
||||||
browse(vals.get('room_id', record.room_id.id)).
|
|
||||||
room_type_id.id)]).backend_id.id
|
|
||||||
new_vals.append({
|
|
||||||
'checkin': vals.get('checkin', record.checkin),
|
|
||||||
'checkout': vals.get('checkout', record.checkout),
|
|
||||||
'backend_id': new_backend_id,
|
|
||||||
'room_id': vals.get('room_id', record.room_id.id),
|
|
||||||
})
|
|
||||||
|
|
||||||
res = super(ChannelHotelReservation, self).write(vals)
|
|
||||||
|
|
||||||
channel_room_type_avail_obj = self.env['channel.hotel.room.type.availability']
|
|
||||||
for k_i, v_i in enumerate(older_vals):
|
|
||||||
# FIX: 3rd parameters is backend_id, use room_id=v_i['room_id'] instead
|
|
||||||
channel_room_type_avail_obj.refresh_availability(
|
|
||||||
checkin=v_i['checkin'],
|
|
||||||
checkout=v_i['checkout'],
|
|
||||||
backend_id=v_i['backend_id'],
|
|
||||||
room_id=v_i['room_id'])
|
|
||||||
# FIX: 3rd parameters is backend_id, use room_id=new_vals[k_i]['room_id'] instead
|
|
||||||
channel_room_type_avail_obj.refresh_availability(
|
|
||||||
checkin=new_vals[k_i]['checkin'],
|
|
||||||
checkout=new_vals[k_i]['checkout'],
|
|
||||||
backend_id=new_vals[k_i]['backend_id'],
|
|
||||||
room_id=new_vals[k_i]['room_id'])
|
|
||||||
else:
|
|
||||||
res = super(ChannelHotelReservation, self).write(vals)
|
|
||||||
return res
|
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def unlink(self):
|
def unlink(self):
|
||||||
vals = []
|
vals = []
|
||||||
@@ -213,7 +165,10 @@ class HotelReservation(models.Model):
|
|||||||
('odoo_id', '=', vals['room_type_id'])
|
('odoo_id', '=', vals['room_type_id'])
|
||||||
]).backend_id
|
]).backend_id
|
||||||
# WARNING: more than one backend_id is currently not expected
|
# WARNING: more than one backend_id is currently not expected
|
||||||
self.env['channel.hotel.room.type.availability'].refresh_availability(
|
self.env['channel.hotel.room.type.availability'].with_context(
|
||||||
|
# export the availability as it is created
|
||||||
|
{'connector_no_export': False}
|
||||||
|
).refresh_availability(
|
||||||
checkin=vals['real_checkin'],
|
checkin=vals['real_checkin'],
|
||||||
checkout=vals['real_checkout'],
|
checkout=vals['real_checkout'],
|
||||||
backend_id=backend_id.id,
|
backend_id=backend_id.id,
|
||||||
@@ -222,6 +177,58 @@ class HotelReservation(models.Model):
|
|||||||
|
|
||||||
return reservation_id
|
return reservation_id
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def write(self, vals):
|
||||||
|
if self._context.get('connector_no_export', True) and \
|
||||||
|
(vals.get('checkin') or vals.get('checkout') or
|
||||||
|
vals.get('room_id') or vals.get('state')):
|
||||||
|
old_vals = []
|
||||||
|
new_vals = []
|
||||||
|
for record in self:
|
||||||
|
backend_id = self.env['channel.hotel.room.type'].search([
|
||||||
|
('odoo_id', '=', record.room_id.room_type_id.id)
|
||||||
|
]).backend_id.id
|
||||||
|
old_vals.append({
|
||||||
|
'checkin': record.checkin,
|
||||||
|
'checkout': record.checkout,
|
||||||
|
'backend_id': backend_id,
|
||||||
|
'room_id': record.room_id.id,
|
||||||
|
})
|
||||||
|
# check if the reservation if moved into a new room type
|
||||||
|
new_room_type_id = self.env['channel.hotel.room.type'].search([
|
||||||
|
('room_ids', 'in', vals.get('room_id'))
|
||||||
|
])
|
||||||
|
new_backend_id = backend_id
|
||||||
|
if new_room_type_id.odoo_id != record.room_id.room_type_id:
|
||||||
|
new_backend_id = new_room_type_id.backend_id.id or None
|
||||||
|
new_vals.append({
|
||||||
|
'checkin': vals.get('checkin', record.checkin),
|
||||||
|
'checkout': vals.get('checkout', record.checkout),
|
||||||
|
'backend_id': new_backend_id,
|
||||||
|
'room_id': vals.get('room_id', record.room_id.id),
|
||||||
|
})
|
||||||
|
|
||||||
|
res = super().write(vals)
|
||||||
|
|
||||||
|
channel_room_type_avail_obj = self.env['channel.hotel.room.type.availability']
|
||||||
|
for k_i, v_i in enumerate(old_vals):
|
||||||
|
channel_room_type_avail_obj.refresh_availability(
|
||||||
|
checkin=v_i['checkin'],
|
||||||
|
checkout=v_i['checkout'],
|
||||||
|
backend_id=v_i['backend_id'],
|
||||||
|
room_id=v_i['room_id'])
|
||||||
|
# NOTE: A reservation can be moved into a room type not connected to any channel
|
||||||
|
if new_backend_id:
|
||||||
|
channel_room_type_avail_obj.refresh_availability(
|
||||||
|
checkin=new_vals[k_i]['checkin'],
|
||||||
|
checkout=new_vals[k_i]['checkout'],
|
||||||
|
backend_id=new_vals[k_i]['backend_id'],
|
||||||
|
room_id=new_vals[k_i]['room_id'])
|
||||||
|
else:
|
||||||
|
res = super().write(vals)
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def generate_copy_values(self, checkin=False, checkout=False):
|
def generate_copy_values(self, checkin=False, checkout=False):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class HotelRoomTypeAvailability(models.Model):
|
|||||||
quota = fields.Integer("Quota", default=_default_quota,
|
quota = fields.Integer("Quota", default=_default_quota,
|
||||||
help="Quota assigned to the channel.")
|
help="Quota assigned to the channel.")
|
||||||
max_avail = fields.Integer("Max. Availability", default=-1, readonly=True,
|
max_avail = fields.Integer("Max. Availability", default=-1, readonly=True,
|
||||||
help="Maximum simultaneous availability given no quota.")
|
help="Maximum simultaneous availability.")
|
||||||
|
|
||||||
no_ota = fields.Boolean('No OTA', default=False,
|
no_ota = fields.Boolean('No OTA', default=False,
|
||||||
help="Set zero availability to the connected OTAs "
|
help="Set zero availability to the connected OTAs "
|
||||||
@@ -178,15 +178,25 @@ class ChannelHotelRoomTypeAvailability(models.Model):
|
|||||||
if vals_avail:
|
if vals_avail:
|
||||||
room_type_avail_id.write(vals_avail)
|
room_type_avail_id.write(vals_avail)
|
||||||
else:
|
else:
|
||||||
|
# self.env['hotel.room.type.availability'].create({
|
||||||
|
# 'room_type_id': room_type_bind.odoo_id.id,
|
||||||
|
# 'date': ndate_str,
|
||||||
|
# 'channel_bind_ids': [(0, False, {
|
||||||
|
# 'channel_avail': avail,
|
||||||
|
# 'channel_pushed': False,
|
||||||
|
# 'backend_id': backend_id,
|
||||||
|
# 'quota': quota,
|
||||||
|
# })]
|
||||||
|
# })
|
||||||
self.env['hotel.room.type.availability'].create({
|
self.env['hotel.room.type.availability'].create({
|
||||||
'room_type_id': room_type_bind.odoo_id.id,
|
'room_type_id': room_type_bind.odoo_id.id,
|
||||||
'date': ndate_str,
|
'date': ndate_str,
|
||||||
|
'quota': quota,
|
||||||
'channel_bind_ids': [(0, False, {
|
'channel_bind_ids': [(0, False, {
|
||||||
'channel_avail': avail,
|
'channel_avail': avail,
|
||||||
'channel_pushed': False,
|
'channel_pushed': False,
|
||||||
'backend_id': backend_id,
|
'backend_id': backend_id,
|
||||||
'quota': quota,
|
})]
|
||||||
})]
|
|
||||||
})
|
})
|
||||||
|
|
||||||
@job(default_channel='root.channel')
|
@job(default_channel='root.channel')
|
||||||
@@ -287,6 +297,9 @@ class ChannelBindingHotelRoomTypeAvailabilityListener(Component):
|
|||||||
record.date,
|
record.date,
|
||||||
binding.backend_id.id,
|
binding.backend_id.id,
|
||||||
room_type_id=record.room_type_id.id)
|
room_type_id=record.room_type_id.id)
|
||||||
|
_logger.info("==[on_record_create] :: channel.hotel.room.type.availability==")
|
||||||
|
_logger.info(fields)
|
||||||
|
record.push_availability(record.backend_id)
|
||||||
|
|
||||||
@skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
|
@skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
|
||||||
def on_fix_channel_availability(self, record, fields=None):
|
def on_fix_channel_availability(self, record, fields=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user