diff --git a/hotel_channel_connector/models/hotel_reservation/common.py b/hotel_channel_connector/models/hotel_reservation/common.py index ad8ca9e2d..05aa58d47 100644 --- a/hotel_channel_connector/models/hotel_reservation/common.py +++ b/hotel_channel_connector/models/hotel_reservation/common.py @@ -97,10 +97,12 @@ class ChannelHotelReservation(models.Model): 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( v_i['checkin'], v_i['checkout'], 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( new_vals[k_i]['checkin'], new_vals[k_i]['checkout'], @@ -124,6 +126,7 @@ class ChannelHotelReservation(models.Model): if self._context.get('connector_no_export', True): channel_room_type_avail_obj = self.env['channel.hotel.room.type.availability'] for record in vals: + # FIX: 3rd parameters is backend_id, use room_id=record['room_id'] instead channel_room_type_avail_obj.refresh_availability( record['checkin'], record['checkout'], @@ -180,7 +183,20 @@ class HotelReservation(models.Model): user = self.env['res.users'].browse(self.env.uid) if user.has_group('hotel.group_hotel_call'): vals.update({'to_read': True}) - return super(HotelReservation, self).create(vals) + + reservation_id = super(HotelReservation, self).create(vals) + # restar quota si en viene de wubook y es mayor que cero + backend_id = self.env['channel.hotel.room.type'].search([ + ('odoo_id', '=', vals['room_type_id']) + ]).backend_id + # WARNING: more than one backend_id is currently not expected + self.env['channel.hotel.room.type.availability'].refresh_availability( + vals['real_checkin'], + vals['real_checkout'], + backend_id.id, + room_id=vals['room_type_id']) + + return reservation_id @api.multi def generate_copy_values(self, checkin=False, checkout=False): diff --git a/hotel_channel_connector/models/hotel_room_type/common.py b/hotel_channel_connector/models/hotel_room_type/common.py index 21c996855..85f91467d 100644 --- a/hotel_channel_connector/models/hotel_room_type/common.py +++ b/hotel_channel_connector/models/hotel_room_type/common.py @@ -16,6 +16,14 @@ class ChannelHotelRoomType(models.Model): _inherits = {'hotel.room.type': 'odoo_id'} _description = 'Channel Hotel Room' + @api.model + def _default_availability(self): + room_type_id = self._context.get('room_type_id') + if room_type_id: + room_type_id = self.env['hotel.room_type'].browse(room_type_id) + return room_type_id.default_quota if room_type_id else -1 + return -1 + odoo_id = fields.Many2one(comodel_name='hotel.room.type', string='Room Type', required=True, @@ -23,8 +31,14 @@ class ChannelHotelRoomType(models.Model): channel_short_code = fields.Char("Channel Short Code", old_name='wscode') ota_capacity = fields.Integer("OTA's Capacity", default=1, old_name='wcapacity', help="The capacity of the room for OTAs.") - default_availability = fields.Integer(default=0, + + default_quota = fields.Integer("Default Quota", default=-1, + help="Quota assigned to the channel given no availability rules.") + default_max_avail = fields.Integer("Max. Availability", default=-1, + help="Maximum simultaneous availability given no quota.") + default_availability = fields.Integer(readonly=True, default=_default_availability, help="Default availability for OTAs.") + min_price = fields.Float('Min. Price', default=5.0, digits=dp.get_precision('Product Price'), help="Setup the min price to prevent incidents while editing your prices.") max_price = fields.Float('Max. Price', default=200.0, digits=dp.get_precision('Product Price'), @@ -94,7 +108,6 @@ class HotelRoomType(models.Model): inverse_name='odoo_id', string='Hotel Channel Connector Bindings') - default_quota = fields.Integer("Default Quota", compute="_compute_capacity") capacity = fields.Integer("Capacity", compute="_compute_capacity") @api.multi 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 a9339ccac..3d9dad20d 100644 --- a/hotel_channel_connector/models/hotel_room_type_availability/common.py +++ b/hotel_channel_connector/models/hotel_room_type_availability/common.py @@ -135,7 +135,6 @@ class ChannelHotelRoomTypeAvailability(models.Model): domain = [('backend_id', '=', backend_id)] if room_id: domain.append(('room_ids', 'in', [room_id])) - # WARNING: more than one binding is currently not expected room_type_bind = channel_room_type_obj.search(domain, limit=1) if room_type_bind and room_type_bind.external_id: _logger.info("==[ODOO->CHANNEL]==== REFRESH AVAILABILITY ==") @@ -166,7 +165,6 @@ class ChannelHotelRoomTypeAvailability(models.Model): else: # default availability for OTAs if not record given # This should happens only when refreshing availability from hotel.reservation - import wdb; wdb.set_trace() to_eval.append(room_type_bind.default_availability) avail = max(min(to_eval), 0) @@ -187,11 +185,12 @@ class ChannelHotelRoomTypeAvailability(models.Model): room_type_avail_id.write({'channel_avail': avail}) else: # This should happens only when refreshing availability from hotel.reservation - import wdb; wdb.set_trace() channel_room_type_avail_obj.create({ - 'room_type_id': room_type_bind.odoo_id.id, + 'odoo_id': room_type_bind.odoo_id.id, + 'backend_id': backend_id, 'date': ndate_str, 'channel_avail': avail, + 'channel_pushed': False, }) @job(default_channel='root.channel') @@ -276,7 +275,9 @@ class ChannelBindingHotelRoomTypeAvailabilityListener(Component): _logger.info(fields) if any(fields_checked): + # self.env['channel.backend'].cron_push_changes() record.channel_pushed = False + record.push_availability(record.backend_id) @skip_if(lambda self, record, **kwargs: self.no_connector_export(record)) def on_fix_channel_availability(self, record, fields=None): diff --git a/hotel_channel_connector/views/channel_hotel_room_type_availability_views.xml b/hotel_channel_connector/views/channel_hotel_room_type_availability_views.xml index 86fe8c357..1ded8cfed 100644 --- a/hotel_channel_connector/views/channel_hotel_room_type_availability_views.xml +++ b/hotel_channel_connector/views/channel_hotel_room_type_availability_views.xml @@ -12,6 +12,7 @@ + @@ -28,6 +29,7 @@ +