[WIP][MIG][11.0] hotel_calendar

This commit is contained in:
QS5ELkMu
2018-09-14 01:41:53 +02:00
parent 8d85e743ea
commit 784cd06b1f
10 changed files with 114 additions and 110 deletions

View File

@@ -156,12 +156,12 @@ class TestHotel(TestMail):
}) })
VRooms = cls.env['hotel.virtual.room'] VRooms = cls.env['hotel.virtual.room']
cls.hotel_vroom_budget = VRooms.create({ cls.hotel_room_type_budget = VRooms.create({
'name': 'Budget Room', 'name': 'Budget Room',
'virtual_code': '001', 'virtual_code': '001',
'list_price': 50, 'list_price': 50,
}) })
cls.hotel_vroom_special = VRooms.create({ cls.hotel_room_type_special = VRooms.create({
'name': 'Special Room', 'name': 'Special Room',
'virtual_code': '002', 'virtual_code': '002',
'list_price': 150, 'list_price': 150,
@@ -170,69 +170,69 @@ class TestHotel(TestMail):
Rooms = cls.env['hotel.room'] Rooms = cls.env['hotel.room']
cls.hotel_room_simple_100 = Rooms.create({ cls.hotel_room_simple_100 = Rooms.create({
'name': '100', 'name': '100',
'sale_price_type': 'vroom', 'sale_price_type': 'room_type',
'price_room_type': cls.hotel_vroom_budget.id, 'price_room_type': cls.hotel_room_type_budget.id,
'categ_id': cls.hotel_room_type_simple.cat_id.id, 'categ_id': cls.hotel_room_type_simple.cat_id.id,
'capacity': 1, 'capacity': 1,
}) })
cls.hotel_room_simple_101 = Rooms.create({ cls.hotel_room_simple_101 = Rooms.create({
'name': '101', 'name': '101',
'sale_price_type': 'vroom', 'sale_price_type': 'room_type',
'price_room_type': cls.hotel_vroom_budget.id, 'price_room_type': cls.hotel_room_type_budget.id,
'categ_id': cls.hotel_room_type_simple.cat_id.id, 'categ_id': cls.hotel_room_type_simple.cat_id.id,
'capacity': 1, 'capacity': 1,
'sequence': 1, 'sequence': 1,
}) })
cls.hotel_room_double_200 = Rooms.create({ cls.hotel_room_double_200 = Rooms.create({
'name': '200', 'name': '200',
'sale_price_type': 'vroom', 'sale_price_type': 'room_type',
'price_room_type': cls.hotel_vroom_special.id, 'price_room_type': cls.hotel_room_type_special.id,
'categ_id': cls.hotel_room_type_double.cat_id.id, 'categ_id': cls.hotel_room_type_double.cat_id.id,
'capacity': 2, 'capacity': 2,
}) })
cls.hotel_vroom_budget.write({ cls.hotel_room_type_budget.write({
'room_ids': [(6, False, [cls.hotel_room_simple_100.id, 'room_ids': [(6, False, [cls.hotel_room_simple_100.id,
cls.hotel_room_simple_101.id])], cls.hotel_room_simple_101.id])],
}) })
cls.hotel_vroom_special.write({ cls.hotel_room_type_special.write({
'room_ids': [(6, False, [cls.hotel_room_double_200.id])], 'room_ids': [(6, False, [cls.hotel_room_double_200.id])],
}) })
# Create a week of fresh data # Create a week of fresh data
now_utc_dt = date_utils.now() now_utc_dt = date_utils.now()
cls.avails_tmp = { cls.avails_tmp = {
cls.hotel_vroom_budget.id: (1, 2, 2, 1, 1, 2, 2), cls.hotel_room_type_budget.id: (1, 2, 2, 1, 1, 2, 2),
cls.hotel_vroom_special.id: (1, 1, 1, 1, 1, 1, 1), cls.hotel_room_type_special.id: (1, 1, 1, 1, 1, 1, 1),
} }
cls.prices_tmp = { cls.prices_tmp = {
cls.hotel_vroom_budget.id: (10.0, 80.0, 80.0, 95.0, 90.0, 80.0, cls.hotel_room_type_budget.id: (10.0, 80.0, 80.0, 95.0, 90.0, 80.0,
20.0), 20.0),
cls.hotel_vroom_special.id: (5.0, 15.0, 15.0, 35.0, 35.0, 10.0, cls.hotel_room_type_special.id: (5.0, 15.0, 15.0, 35.0, 35.0, 10.0,
10.0), 10.0),
} }
cls.restrictions_min_stay_tmp = { cls.restrictions_min_stay_tmp = {
cls.hotel_vroom_budget.id: (0, 1, 2, 1, 1, 0, 0), cls.hotel_room_type_budget.id: (0, 1, 2, 1, 1, 0, 0),
cls.hotel_vroom_special.id: (3, 1, 0, 2, 0, 1, 4), cls.hotel_room_type_special.id: (3, 1, 0, 2, 0, 1, 4),
} }
budget_product_id = cls.hotel_vroom_budget.product_id budget_product_id = cls.hotel_room_type_budget.product_id
special_product_id = cls.hotel_vroom_special.product_id special_product_id = cls.hotel_room_type_special.product_id
product_tmpl_ids = { product_tmpl_ids = {
cls.hotel_vroom_budget.id: budget_product_id.product_tmpl_id.id, cls.hotel_room_type_budget.id: budget_product_id.product_tmpl_id.id,
cls.hotel_vroom_special.id: special_product_id.product_tmpl_id.id, cls.hotel_room_type_special.id: special_product_id.product_tmpl_id.id,
} }
vroom_avail_obj = cls.env['hotel.room.type.availability'] room_type_avail_obj = cls.env['hotel.room.type.availability']
vroom_rest_item_obj = cls.env['hotel.room.type.restriction.item'] room_type_rest_item_obj = cls.env['hotel.room.type.restriction.item']
pricelist_item_obj = cls.env['product.pricelist.item'] pricelist_item_obj = cls.env['product.pricelist.item']
for k_vr, v_vr in cls.avails_tmp.iteritems(): for k_vr, v_vr in cls.avails_tmp.iteritems():
for i in range(0, len(v_vr)): for i in range(0, len(v_vr)):
ndate = now_utc_dt + timedelta(days=i) ndate = now_utc_dt + timedelta(days=i)
vroom_avail_obj.create({ room_type_avail_obj.create({
'room_type_id': k_vr, 'room_type_id': k_vr,
'avail': v_vr[i], 'avail': v_vr[i],
'date': ndate.strftime(DEFAULT_SERVER_DATE_FORMAT) 'date': ndate.strftime(DEFAULT_SERVER_DATE_FORMAT)
}) })
vroom_rest_item_obj.create({ room_type_rest_item_obj.create({
'room_type_id': k_vr, 'room_type_id': k_vr,
'restriction_id': cls.parity_restrictions_id, 'restriction_id': cls.parity_restrictions_id,
'date_start': ndate.strftime(DEFAULT_SERVER_DATE_FORMAT), 'date_start': ndate.strftime(DEFAULT_SERVER_DATE_FORMAT),

View File

@@ -232,7 +232,7 @@ class TestHotelReservations(TestHotel):
# 5.0, 15.0, 15.0, 35.0, 35.0, 10.0, 10.0 # 5.0, 15.0, 15.0, 35.0, 35.0, 10.0, 10.0
vroom_prices = self.prices_tmp[self.hotel_room_double_200.price_room_type.id] room_type_prices = self.prices_tmp[self.hotel_room_double_200.price_room_type.id]
org_reserv_start_utc_dt = now_utc_dt + timedelta(days=1) org_reserv_start_utc_dt = now_utc_dt + timedelta(days=1)
org_reserv_end_utc_dt = org_reserv_start_utc_dt + timedelta(days=2) org_reserv_end_utc_dt = org_reserv_start_utc_dt + timedelta(days=2)
folio = self.create_folio(self.user_hotel_manager, self.partner_2) folio = self.create_folio(self.user_hotel_manager, self.partner_2)
@@ -246,7 +246,7 @@ class TestHotelReservations(TestHotel):
ndate = org_reserv_start_utc_dt ndate = org_reserv_start_utc_dt
for r_k, r_v in enumerate(reservation.reservation_lines): for r_k, r_v in enumerate(reservation.reservation_lines):
self.assertEqual(r_v.date, ndate.strftime(DEFAULT_SERVER_DATE_FORMAT)) self.assertEqual(r_v.date, ndate.strftime(DEFAULT_SERVER_DATE_FORMAT))
self.assertEqual(r_v.price, vroom_prices[r_k+1]) self.assertEqual(r_v.price, room_type_prices[r_k+1])
ndate = ndate + timedelta(days=1) ndate = ndate + timedelta(days=1)
self.assertEqual(reservation.amount_room, 30.0) self.assertEqual(reservation.amount_room, 30.0)
ndate = org_reserv_start_utc_dt + timedelta(days=1) ndate = org_reserv_start_utc_dt + timedelta(days=1)

View File

@@ -39,7 +39,7 @@ class HotelRoomTypeAvailability(models.Model):
for record in self: for record in self:
unlink_vals.append({ unlink_vals.append({
'date': record.date, 'date': record.date,
'avail': record.room_type_id.max_real_rooms, 'avail': record.room_type_id.total_rooms_count,
'room_type_id': record.room_type_id.id, 'room_type_id': record.room_type_id.id,
'no_ota': False, 'no_ota': False,
'id': record.id, 'id': record.id,

View File

@@ -17,6 +17,7 @@ var MPMSCalendarController = AbstractController.extend({
onSaveChanges: '_onSaveChanges', onSaveChanges: '_onSaveChanges',
onLoadCalendar: '_onLoadCalendar', onLoadCalendar: '_onLoadCalendar',
onLoadCalendarSettings: '_onLoadCalendarSettings', onLoadCalendarSettings: '_onLoadCalendarSettings',
onLoadNewContentCalendar: '_onLoadNewContentCalendar',
}), }),
/** /**
* @override * @override
@@ -62,6 +63,21 @@ var MPMSCalendarController = AbstractController.extend({
}); });
}, },
_onLoadNewContentCalendar: function (ev) {
var self = this;
var params = this.renderer.generate_params();
var oparams = [params['dates'][0], params['dates'][1], params['prices'], params['restrictions'], false];
this.model.get_hcalendar_data(oparams).then(function(results){
self.renderer._days_tooltips = results['events'];
self.renderer._hcalendar.setData(results['prices'], results['restrictions'], results['availability'], results['count_reservations']);
self.renderer._assign_extra_info();
});
this.renderer._last_dates = params['dates'];
this.renderer.$CalendarHeaderDays = this.renderer.$el.find("div.table-room_type-data-header");
this.renderer._on_scroll(); // FIXME: Workaround for update sticky header
},
_onLoadCalendar: function (ev) { _onLoadCalendar: function (ev) {
var self = this; var self = this;

View File

@@ -240,7 +240,7 @@ var HotelCalendarManagementView = AbstractRenderer.extend({
/** VIEW CONTROLS INITIALIZATION **/ /** VIEW CONTROLS INITIALIZATION **/
// DATE TIME PICKERS // DATE TIME PICKERS
var l10nn = _t.database.parameters console.log("asdads");
var DTPickerOptions = { var DTPickerOptions = {
viewMode: 'months', viewMode: 'months',
icons : { icons : {
@@ -249,8 +249,9 @@ var HotelCalendarManagementView = AbstractRenderer.extend({
up: 'fa fa-chevron-up', up: 'fa fa-chevron-up',
down: 'fa fa-chevron-down' down: 'fa fa-chevron-down'
}, },
locale : moment.locale(),
format : HotelConstants.L10N_DATE_MOMENT_FORMAT, format : HotelConstants.L10N_DATE_MOMENT_FORMAT,
disabledHours: [0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23] //disabledHours: [0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23]
}; };
var $dateTimePickerBegin = this.$el.find('#mpms-search #date_begin'); var $dateTimePickerBegin = this.$el.find('#mpms-search #date_begin');
var $dateTimePickerEnd = this.$el.find('#mpms-search #date_end'); var $dateTimePickerEnd = this.$el.find('#mpms-search #date_end');
@@ -263,8 +264,8 @@ var HotelCalendarManagementView = AbstractRenderer.extend({
self.on_change_filter_date(e, true); self.on_change_filter_date(e, true);
}); });
$dateTimePickerEnd.on("dp.change", function (e) { $dateTimePickerEnd.on("dp.change", function (e) {
self.on_change_filter_date(e, false);
$dateTimePickerEnd.data("DateTimePicker").hide(); // TODO: Odoo uses old datetimepicker version $dateTimePickerEnd.data("DateTimePicker").hide(); // TODO: Odoo uses old datetimepicker version
self.on_change_filter_date(e, false);
}); });
// var date_begin = moment().startOf('day'); // var date_begin = moment().startOf('day');
@@ -404,17 +405,7 @@ var HotelCalendarManagementView = AbstractRenderer.extend({
}, },
reload_hcalendar_management: function() { reload_hcalendar_management: function() {
var self = this; this.trigger_up('onLoadNewContentCalendar');
var params = this.generate_params();
var oparams = [params['dates'][0], params['dates'][1], params['prices'], params['restrictions'], false];
this._model.call('get_hcalendar_all_data', oparams).then(function(results){
self._days_tooltips = results['events'];
self._hcalendar.setData(results['prices'], results['restrictions'], results['availability'], results['count_reservations']);
self._assign_extra_info();
});
this._last_dates = params['dates'];
this.$CalendarHeaderDays = this.$el.find("div.table-room_type-data-header");
this._on_scroll(); // FIXME: Workaround for update sticky header
}, },
generate_params: function() { generate_params: function() {

View File

@@ -39,7 +39,7 @@
<td> <td>
FROM<br/> FROM<br/>
<div class="input-group date" id="date_begin"> <div class="input-group date" id="date_begin">
<input type="text" class="form-control" name="date_begin" required="required" readonly="1"/> <input type="text" class="o_datepicker_input form-control" name="date_begin" required="required" />
<span class="input-group-addon"> <span class="input-group-addon">
<span class="fa fa-calendar"></span> <span class="fa fa-calendar"></span>
</span> </span>
@@ -48,7 +48,7 @@
<td> <td>
TO<br/> TO<br/>
<div class="input-group date" id="date_end"> <div class="input-group date" id="date_end">
<input type="text" class="form-control" name="date_end" required="required" readonly="1"/> <input type="text" class="o_datepicker_input form-control" name="date_end" required="required" />
<span class="input-group-addon"> <span class="input-group-addon">
<span class="fa fa-calendar"></span> <span class="fa fa-calendar"></span>
</span> </span>

View File

@@ -37,7 +37,7 @@ class TestManagementCalendar(TestHotelCalendar):
now_utc_dt = date_utils.now() now_utc_dt = date_utils.now()
adv_utc_dt = now_utc_dt + timedelta(days=15) adv_utc_dt = now_utc_dt + timedelta(days=15)
vrooms = (self.hotel_vroom_budget, self.hotel_vroom_special) room_types = (self.hotel_room_type_budget, self.hotel_room_type_special)
hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo( hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo(
self.user_hotel_manager) self.user_hotel_manager)
@@ -48,14 +48,14 @@ class TestManagementCalendar(TestHotelCalendar):
self.parity_pricelist_id, self.parity_pricelist_id,
self.parity_restrictions_id, self.parity_restrictions_id,
True) True)
for vroom in vrooms: for room_type in room_types:
for k_pr, v_pr in hcal_data['prices'].iteritems(): for k_pr, v_pr in hcal_data['prices'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
if k_info >= len(self.prices_tmp[vroom.id]): if k_info >= len(self.prices_tmp[room_type.id]):
break break
self.assertEqual(v_info['price'], self.assertEqual(v_info['price'],
self.prices_tmp[vroom.id][k_info], self.prices_tmp[room_type.id][k_info],
"Hotel Calendar Management Prices \ "Hotel Calendar Management Prices \
doesn't match!") doesn't match!")
@@ -63,8 +63,8 @@ class TestManagementCalendar(TestHotelCalendar):
prices_obj = self.env['product.pricelist.item'].sudo( prices_obj = self.env['product.pricelist.item'].sudo(
self.user_hotel_manager) self.user_hotel_manager)
prod_tmpl_ids = ( prod_tmpl_ids = (
self.hotel_vroom_budget.product_id.product_tmpl_id.id, self.hotel_room_type_budget.product_id.product_tmpl_id.id,
self.hotel_vroom_special.product_id.product_tmpl_id.id self.hotel_room_type_special.product_id.product_tmpl_id.id
) )
pr_ids = prices_obj.search([ pr_ids = prices_obj.search([
('pricelist_id', '=', self.parity_pricelist_id), ('pricelist_id', '=', self.parity_pricelist_id),
@@ -84,7 +84,7 @@ class TestManagementCalendar(TestHotelCalendar):
def test_calendar_restrictions(self): def test_calendar_restrictions(self):
now_utc_dt = date_utils.now() now_utc_dt = date_utils.now()
adv_utc_dt = now_utc_dt + timedelta(days=15) adv_utc_dt = now_utc_dt + timedelta(days=15)
vrooms = (self.hotel_vroom_budget, self.hotel_vroom_special) room_types = (self.hotel_room_type_budget, self.hotel_room_type_special)
hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo( hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo(
self.user_hotel_manager) self.user_hotel_manager)
@@ -95,16 +95,16 @@ class TestManagementCalendar(TestHotelCalendar):
self.parity_pricelist_id, self.parity_pricelist_id,
self.parity_restrictions_id, self.parity_restrictions_id,
True) True)
for vroom in vrooms: for room_type in room_types:
for k_pr, v_pr in hcal_data['restrictions'].iteritems(): for k_pr, v_pr in hcal_data['restrictions'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
rest_items = self.restrictions_min_stay_tmp[vroom.id] rest_items = self.restrictions_min_stay_tmp[room_type.id]
if k_info >= len(rest_items): if k_info >= len(rest_items):
break break
self.assertEqual( self.assertEqual(
v_info['min_stay'], v_info['min_stay'],
self.restrictions_min_stay_tmp[vroom.id][k_info], self.restrictions_min_stay_tmp[room_type.id][k_info],
"Hotel Calendar Management Restrictions \ "Hotel Calendar Management Restrictions \
doesn't match!") doesn't match!")
@@ -114,8 +114,8 @@ class TestManagementCalendar(TestHotelCalendar):
rest_ids = rest_it_obj.search([ rest_ids = rest_it_obj.search([
('applied_on', '=', '0_room_type'), ('applied_on', '=', '0_room_type'),
('restriction_id', '=', self.parity_restrictions_id), ('restriction_id', '=', self.parity_restrictions_id),
('room_type_id', 'in', (self.hotel_vroom_budget.id, ('room_type_id', 'in', (self.hotel_room_type_budget.id,
self.hotel_vroom_special.id)), self.hotel_room_type_special.id)),
]) ])
rest_ids.sudo(self.user_hotel_manager).unlink() rest_ids.sudo(self.user_hotel_manager).unlink()
@@ -133,11 +133,11 @@ class TestManagementCalendar(TestHotelCalendar):
def test_calendar_availability(self): def test_calendar_availability(self):
now_utc_dt = date_utils.now() now_utc_dt = date_utils.now()
adv_utc_dt = now_utc_dt + timedelta(days=6) adv_utc_dt = now_utc_dt + timedelta(days=6)
vrooms = (self.hotel_vroom_budget, self.hotel_vroom_special) room_types = (self.hotel_room_type_budget, self.hotel_room_type_special)
hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo( hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo(
self.user_hotel_manager) self.user_hotel_manager)
vroom_avail_obj = self.env['hotel.room.type.availability'].sudo( room_type_avail_obj = self.env['hotel.room.type.availability'].sudo(
self.user_hotel_manager) self.user_hotel_manager)
hcal_data = hotel_cal_mngt_obj.get_hcalendar_all_data( hcal_data = hotel_cal_mngt_obj.get_hcalendar_all_data(
@@ -146,22 +146,22 @@ class TestManagementCalendar(TestHotelCalendar):
self.parity_pricelist_id, self.parity_pricelist_id,
self.parity_restrictions_id, self.parity_restrictions_id,
True) True)
for vroom in vrooms: for room_type in room_types:
for k_pr, v_pr in hcal_data['availability'].iteritems(): for k_pr, v_pr in hcal_data['availability'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
if k_info >= len(self.avails_tmp[vroom.id]): if k_info >= len(self.avails_tmp[room_type.id]):
break break
self.assertEqual( self.assertEqual(
v_info['avail'], v_info['avail'],
self.avails_tmp[vroom.id][k_info], self.avails_tmp[room_type.id][k_info],
"Hotel Calendar Management Availability \ "Hotel Calendar Management Availability \
doesn't match!") doesn't match!")
# CHANGE AVAIL # CHANGE AVAIL
avail_ids = vroom_avail_obj.search([ avail_ids = room_type_avail_obj.search([
('room_type_id', 'in', (self.hotel_vroom_budget.id, ('room_type_id', 'in', (self.hotel_room_type_budget.id,
self.hotel_vroom_special.id)), self.hotel_room_type_special.id)),
]) ])
for avail_id in avail_ids: for avail_id in avail_ids:
avail_id.sudo(self.user_hotel_manager).write({'avail': 1}) avail_id.sudo(self.user_hotel_manager).write({'avail': 1})
@@ -171,9 +171,9 @@ class TestManagementCalendar(TestHotelCalendar):
self.parity_pricelist_id, self.parity_pricelist_id,
self.parity_restrictions_id, self.parity_restrictions_id,
True) True)
for vroom in vrooms: for room_type in room_types:
for k_pr, v_pr in hcal_data['availability'].iteritems(): for k_pr, v_pr in hcal_data['availability'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
self.assertEqual( self.assertEqual(
v_info['avail'], v_info['avail'],
@@ -182,9 +182,9 @@ class TestManagementCalendar(TestHotelCalendar):
doesn't match!") doesn't match!")
# REMOVE AVAIL # REMOVE AVAIL
avail_ids = vroom_avail_obj.search([ avail_ids = room_type_avail_obj.search([
('room_type_id', 'in', (self.hotel_vroom_budget.id, ('room_type_id', 'in', (self.hotel_room_type_budget.id,
self.hotel_vroom_special.id)), self.hotel_room_type_special.id)),
]) ])
avail_ids.sudo(self.user_hotel_manager).unlink() avail_ids.sudo(self.user_hotel_manager).unlink()
@@ -194,20 +194,20 @@ class TestManagementCalendar(TestHotelCalendar):
self.parity_pricelist_id, self.parity_pricelist_id,
self.parity_restrictions_id, self.parity_restrictions_id,
True) True)
for vroom in vrooms: for room_type in room_types:
for k_pr, v_pr in hcal_data['availability'].iteritems(): for k_pr, v_pr in hcal_data['availability'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
self.assertEqual( self.assertEqual(
v_info['avail'], v_info['avail'],
vroom.max_real_rooms, room_type.max_real_rooms,
"Hotel Calendar Management Availability \ "Hotel Calendar Management Availability \
doesn't match!") doesn't match!")
def test_save_changes(self): def test_save_changes(self):
now_utc_dt = date_utils.now() now_utc_dt = date_utils.now()
adv_utc_dt = now_utc_dt + timedelta(days=3) adv_utc_dt = now_utc_dt + timedelta(days=3)
vrooms = (self.hotel_vroom_budget,) room_types = (self.hotel_room_type_budget,)
hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo( hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo(
self.user_hotel_manager) self.user_hotel_manager)
@@ -217,7 +217,7 @@ class TestManagementCalendar(TestHotelCalendar):
cprices = {} cprices = {}
for k_item, v_item in enumerate(prices): for k_item, v_item in enumerate(prices):
ndate_utc_dt = now_utc_dt + timedelta(days=k_item) ndate_utc_dt = now_utc_dt + timedelta(days=k_item)
cprices.setdefault(self.hotel_vroom_budget.id, []).append({ cprices.setdefault(self.hotel_room_type_budget.id, []).append({
'date': ndate_utc_dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT), 'date': ndate_utc_dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
'price': v_item 'price': v_item
}) })
@@ -235,7 +235,7 @@ class TestManagementCalendar(TestHotelCalendar):
crestrictions = {} crestrictions = {}
for i in range(0, 4): for i in range(0, 4):
ndate_utc_dt = now_utc_dt + timedelta(days=i) ndate_utc_dt = now_utc_dt + timedelta(days=i)
crestrictions.setdefault(self.hotel_vroom_budget.id, []).append({ crestrictions.setdefault(self.hotel_room_type_budget.id, []).append({
'date': ndate_utc_dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT), 'date': ndate_utc_dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
'closed_arrival': restrictions['closed_arrival'][i], 'closed_arrival': restrictions['closed_arrival'][i],
'max_stay': restrictions['max_stay'][i], 'max_stay': restrictions['max_stay'][i],
@@ -252,7 +252,7 @@ class TestManagementCalendar(TestHotelCalendar):
for k_item, v_item in enumerate(avails): for k_item, v_item in enumerate(avails):
ndate_utc_dt = now_utc_dt + timedelta(days=k_item) ndate_utc_dt = now_utc_dt + timedelta(days=k_item)
ndate_dt = date_utils.dt_as_timezone(ndate_utc_dt, self.tz_hotel) ndate_dt = date_utils.dt_as_timezone(ndate_utc_dt, self.tz_hotel)
cavails.setdefault(self.hotel_vroom_budget.id, []).append({ cavails.setdefault(self.hotel_room_type_budget.id, []).append({
'date': ndate_dt.strftime(DEFAULT_SERVER_DATE_FORMAT), 'date': ndate_dt.strftime(DEFAULT_SERVER_DATE_FORMAT),
'avail': v_item, 'avail': v_item,
'no_ota': False, 'no_ota': False,
@@ -274,16 +274,16 @@ class TestManagementCalendar(TestHotelCalendar):
self.parity_restrictions_id, self.parity_restrictions_id,
True) True)
for vroom in vrooms: for room_type in room_types:
for k_pr, v_pr in hcal_data['availability'].iteritems(): for k_pr, v_pr in hcal_data['availability'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
self.assertEqual(v_info['avail'], self.assertEqual(v_info['avail'],
avails[k_info], avails[k_info],
"Hotel Calendar Management \ "Hotel Calendar Management \
Availability doesn't match!") Availability doesn't match!")
for k_pr, v_pr in hcal_data['restrictions'].iteritems(): for k_pr, v_pr in hcal_data['restrictions'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
self.assertEqual(v_info['min_stay'], self.assertEqual(v_info['min_stay'],
restrictions['min_stay'][k_info], restrictions['min_stay'][k_info],
@@ -319,7 +319,7 @@ class TestManagementCalendar(TestHotelCalendar):
"Hotel Calendar Management Restrictions \ "Hotel Calendar Management Restrictions \
doesn't match!") doesn't match!")
for k_pr, v_pr in hcal_data['prices'].iteritems(): for k_pr, v_pr in hcal_data['prices'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
self.assertEqual(v_info['price'], self.assertEqual(v_info['price'],
prices[k_info], "Hotel Calendar \ prices[k_info], "Hotel Calendar \
@@ -328,7 +328,7 @@ class TestManagementCalendar(TestHotelCalendar):
def test_calendar_reservations(self): def test_calendar_reservations(self):
now_utc_dt = date_utils.now() now_utc_dt = date_utils.now()
adv_utc_dt = now_utc_dt + timedelta(days=15) adv_utc_dt = now_utc_dt + timedelta(days=15)
vrooms = (self.hotel_vroom_budget,) room_types = (self.hotel_room_type_budget,)
hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo( hotel_cal_mngt_obj = self.env['hotel.calendar.management'].sudo(
self.user_hotel_manager) self.user_hotel_manager)
@@ -352,9 +352,9 @@ class TestManagementCalendar(TestHotelCalendar):
True) True)
avail_end_utc_dt = reserv_end_utc_dt - timedelta(days=1) avail_end_utc_dt = reserv_end_utc_dt - timedelta(days=1)
for vroom in vrooms: for room_type in room_types:
for k_pr, v_pr in hcal_data['count_reservations'].iteritems(): for k_pr, v_pr in hcal_data['count_reservations'].iteritems():
if k_pr == vroom.id: # Only Check Test Cases if k_pr == room_type.id: # Only Check Test Cases
for k_info, v_info in enumerate(v_pr): for k_info, v_info in enumerate(v_pr):
ndate = date_utils.get_datetime(v_info['date']) ndate = date_utils.get_datetime(v_info['date'])
if date_utils.date_in(ndate, if date_utils.date_in(ndate,

View File

@@ -30,12 +30,12 @@ class TestProductPricelist(TestHotelCalendar):
now_utc_dt = date_utils.now() now_utc_dt = date_utils.now()
now_utc_str = now_utc_dt.strftime(DEFAULT_SERVER_DATE_FORMAT) now_utc_str = now_utc_dt.strftime(DEFAULT_SERVER_DATE_FORMAT)
vroom_tmpl_id = self.hotel_vroom_special.product_id.product_tmpl_id room_type_tmpl_id = self.hotel_room_type_special.product_id.product_tmpl_id
pritem_obj = self.env['product.pricelist.item'] pritem_obj = self.env['product.pricelist.item']
plitem = pritem_obj.search([ plitem = pritem_obj.search([
('pricelist_id', '=', self.parity_pricelist_id), ('pricelist_id', '=', self.parity_pricelist_id),
('product_tmpl_id', '=', vroom_tmpl_id.id), ('product_tmpl_id', '=', room_type_tmpl_id.id),
('date_start', '=', now_utc_str), ('date_start', '=', now_utc_str),
('date_end', '=', now_utc_str), ('date_end', '=', now_utc_str),
('applied_on', '=', '1_product'), ('applied_on', '=', '1_product'),
@@ -44,13 +44,13 @@ class TestProductPricelist(TestHotelCalendar):
old_price = plitem.fixed_price old_price = plitem.fixed_price
self.pricelist_1.update_price( self.pricelist_1.update_price(
self.hotel_vroom_special.id, self.hotel_room_type_special.id,
now_utc_str, now_utc_str,
999.9) 999.9)
plitem = pritem_obj.search([ plitem = pritem_obj.search([
('pricelist_id', '=', self.parity_pricelist_id), ('pricelist_id', '=', self.parity_pricelist_id),
('product_tmpl_id', '=', vroom_tmpl_id.id), ('product_tmpl_id', '=', room_type_tmpl_id.id),
('date_start', '=', now_utc_str), ('date_start', '=', now_utc_str),
('date_end', '=', now_utc_str), ('date_end', '=', now_utc_str),
('applied_on', '=', '1_product'), ('applied_on', '=', '1_product'),

View File

@@ -46,11 +46,11 @@ class TestReservationsCalendar(TestHotelCalendar):
# Check Pricelist Integrity # Check Pricelist Integrity
for k_pr, v_pr in hcal_data['pricelist'].iteritems(): for k_pr, v_pr in hcal_data['pricelist'].iteritems():
for vroom_pr in v_pr: for room_type_pr in v_pr:
# Only Check Test Cases # Only Check Test Cases
if vroom_pr['room'] in self.prices_tmp.keys(): if room_type_pr['room'] in self.prices_tmp.keys():
sorted_dates = sorted( sorted_dates = sorted(
vroom_pr['days'].keys(), room_type_pr['days'].keys(),
key=lambda x: datetime.datetime.strptime(x, '%d/%m/%Y') key=lambda x: datetime.datetime.strptime(x, '%d/%m/%Y')
) )
init_date_dt = datetime.datetime.strptime( init_date_dt = datetime.datetime.strptime(
@@ -67,11 +67,11 @@ class TestReservationsCalendar(TestHotelCalendar):
"Hotel Calendar don't end in \ "Hotel Calendar don't end in \
the correct date!") the correct date!")
vroom_prices = self.prices_tmp[vroom_pr['room']] room_type_prices = self.prices_tmp[room_type_pr['room']]
for k_price, v_price in enumerate(vroom_prices): for k_price, v_price in enumerate(room_type_prices):
self.assertEqual( self.assertEqual(
v_price, v_price,
vroom_pr['days'][sorted_dates[k_price+1]], room_type_pr['days'][sorted_dates[k_price+1]],
"Hotel Calendar Pricelist doesn't match!") "Hotel Calendar Pricelist doesn't match!")
# Check Pricelist Integrity after unlink # Check Pricelist Integrity after unlink
@@ -80,8 +80,8 @@ class TestReservationsCalendar(TestHotelCalendar):
pr_ids = pricelist_item_obj.search([ pr_ids = pricelist_item_obj.search([
('pricelist_id', '=', self.parity_pricelist_id), ('pricelist_id', '=', self.parity_pricelist_id),
('product_tmpl_id', 'in', ( ('product_tmpl_id', 'in', (
self.hotel_vroom_budget.product_id.product_tmpl_id.id, self.hotel_room_type_budget.product_id.product_tmpl_id.id,
self.hotel_vroom_special.product_id.product_tmpl_id.id)), self.hotel_room_type_special.product_id.product_tmpl_id.id)),
]) ])
pr_ids.sudo(self.user_hotel_manager).unlink() pr_ids.sudo(self.user_hotel_manager).unlink()
reserv_obj = self.env['hotel.reservation'].sudo( reserv_obj = self.env['hotel.reservation'].sudo(
@@ -89,14 +89,14 @@ class TestReservationsCalendar(TestHotelCalendar):
hcal_data = reserv_obj.get_hcalendar_all_data( hcal_data = reserv_obj.get_hcalendar_all_data(
now_utc_dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT), now_utc_dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
adv_utc_dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT)) adv_utc_dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT))
vrooms = (self.hotel_vroom_budget, self.hotel_vroom_special) room_types = (self.hotel_room_type_budget, self.hotel_room_type_special)
for vroom in vrooms: for room_type in room_types:
for k_pr, v_pr in hcal_data['pricelist'].iteritems(): for k_pr, v_pr in hcal_data['pricelist'].iteritems():
for vroom_pr in v_pr: for room_type_pr in v_pr:
if vroom_pr['room'] == vroom.id: # Only Check Test Cases if room_type_pr['room'] == room_type.id: # Only Check Test Cases
self.assertEqual( self.assertEqual(
vroom.list_price, room_type.list_price,
vroom_pr['days'][sorted_dates[k_price+1]], room_type_pr['days'][sorted_dates[k_price+1]],
"Hotel Calendar Pricelist doesn't \ "Hotel Calendar Pricelist doesn't \
match after remove!") match after remove!")

View File

@@ -306,14 +306,11 @@ class HotelRoomTypeWizards(models.TransientModel):
can_confirm = fields.Boolean(compute="_can_confirm") can_confirm = fields.Boolean(compute="_can_confirm")
def _can_confirm(self): def _can_confirm(self):
for vroom in self: for room_type in self:
date_start = date_utils.get_datetime(vroom.checkin) date_start = date_utils.get_datetime(room_type.checkin)
date_end = date_utils.get_datetime(vroom.checkout) date_end = date_utils.get_datetime(room_type.checkout)
date_diff = date_utils.date_diff(date_start, date_end, hours=False) date_diff = date_utils.date_diff(date_start, date_end, hours=False)
if vroom.max_rooms > 0 and vroom.min_stay <= date_diff: room_type.can_confirm = room_type.max_rooms > 0 and room_type.min_stay <= date_diff
vroom.can_confirm = True
else:
vroom.can_confirm = False
def _compute_max(self): def _compute_max(self):
for res in self: for res in self: