mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP] Calendar Performance
This commit is contained in:
@@ -89,6 +89,17 @@ function HotelCalendar(/*String*/querySelector, /*Dictionary*/options, /*List*/p
|
|||||||
this._domains = {}; // Store domains for filter rooms & reservations
|
this._domains = {}; // Store domains for filter rooms & reservations
|
||||||
this._divideDivs = false;
|
this._divideDivs = false;
|
||||||
|
|
||||||
|
// Calculate Capacities
|
||||||
|
this._roomCapacityTotal = 0;
|
||||||
|
this._roomCapacities = {};
|
||||||
|
this._roomsMap = _.groupBy(this.options.rooms, 'type');
|
||||||
|
var room_types = this.getRoomTypes();
|
||||||
|
for (var rt of room_types) {
|
||||||
|
this._roomsMap[rt] = _.filter(this._roomsMap[rt], {overbooking: false, cancelled: false});
|
||||||
|
this._roomCapacities[rt] = _.reduce(this._roomsMap[rt], function(memo, tr){ return memo + (tr.shared?tr.capacity:1); }, 0);
|
||||||
|
this._roomCapacityTotal += this._roomCapacities[rt];
|
||||||
|
}
|
||||||
|
|
||||||
/***/
|
/***/
|
||||||
this._reset_action_reservation();
|
this._reset_action_reservation();
|
||||||
if (!this._create()) {
|
if (!this._create()) {
|
||||||
@@ -396,14 +407,14 @@ HotelCalendar.prototype = {
|
|||||||
return day.isBetween(item.startDate, item.endDate, 'day', inclusivity) &&
|
return day.isBetween(item.startDate, item.endDate, 'day', inclusivity) &&
|
||||||
(typeof nbed === 'undefined' || item._beds.includes(nbed)) &&
|
(typeof nbed === 'undefined' || item._beds.includes(nbed)) &&
|
||||||
((includeUnusedZones && item.unusedZone) || !item.unusedZone) &&
|
((includeUnusedZones && item.unusedZone) || !item.unusedZone) &&
|
||||||
item !== ignoreThis;
|
item !== ignoreThis && !item.overbooking && !item.cancelled;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return _.filter(this._reservations, function(item){
|
return _.filter(this._reservations, function(item){
|
||||||
return day.isBetween(item.startDate, item.endDate, 'day', inclusivity) &&
|
return day.isBetween(item.startDate, item.endDate, 'day', inclusivity) &&
|
||||||
(typeof nbed === 'undefined' || item._beds.includes(nbed)) &&
|
(typeof nbed === 'undefined' || item._beds.includes(nbed)) &&
|
||||||
((includeUnusedZones && item.unusedZone) || !item.unusedZone) &&
|
((includeUnusedZones && item.unusedZone) || !item.unusedZone) &&
|
||||||
item !== ignoreThis;
|
item !== ignoreThis && !item.overbooking && !item.cancelled;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -583,34 +594,11 @@ HotelCalendar.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
getDayRoomTypeReservations: function(/*String,MomentObject*/day, /*String*/room_type) {
|
getDayRoomTypeReservations: function(/*String,MomentObject*/day, /*String*/room_type) {
|
||||||
var reservs = this.getReservationsByDay(day, true);
|
return _.filter(this.getReservationsByDay(day, true), function(item){ return item.room && item.room.type === room_type && !item.unusedZone; });
|
||||||
return _.filter(reservs, function(item){ return item.room && item.room.type === room_type && !item.unusedZone; });
|
|
||||||
},
|
|
||||||
|
|
||||||
getRoomsByType: function(/*String*/type) {
|
|
||||||
return _.filter(this.options.rooms, function(item){ return item.type === type && !item.overbooking && !item.cancelled; });
|
|
||||||
},
|
|
||||||
|
|
||||||
getRoomsCapacityByType: function(/*String*/type) {
|
|
||||||
var trooms = this.getRoomsByType(type);
|
|
||||||
var num_rooms = 0;
|
|
||||||
for (var tr of trooms) {
|
|
||||||
num_rooms += tr.shared?tr.capacity:1;
|
|
||||||
}
|
|
||||||
return num_rooms;
|
|
||||||
},
|
|
||||||
|
|
||||||
getRoomsCapacityTotal: function() {
|
|
||||||
var num_rooms = 0;
|
|
||||||
var rooms = _.filter(this.options.rooms, function(item){ return !item.overbooking && !item.cancelled; });
|
|
||||||
for (var tr of rooms) {
|
|
||||||
num_rooms += tr.shared?tr.capacity:1;
|
|
||||||
}
|
|
||||||
return num_rooms;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getRoomTypes: function() {
|
getRoomTypes: function() {
|
||||||
return _.uniq(_.pluck(this.options.rooms, 'type'));
|
return _.keys(this._roomsMap);
|
||||||
},
|
},
|
||||||
|
|
||||||
getRoom: function(/*String,Int*/id, /*Boolean?*/isExtra, /*Int?*/reservId) {
|
getRoom: function(/*String,Int*/id, /*Boolean?*/isExtra, /*Int?*/reservId) {
|
||||||
@@ -862,37 +850,19 @@ HotelCalendar.prototype = {
|
|||||||
//==== DETAIL CALCS
|
//==== DETAIL CALCS
|
||||||
calcDayRoomTypeReservations: function(/*String,MomentObject*/day, /*String*/room_type) {
|
calcDayRoomTypeReservations: function(/*String,MomentObject*/day, /*String*/room_type) {
|
||||||
var day = HotelCalendar.toMoment(day);
|
var day = HotelCalendar.toMoment(day);
|
||||||
if (!day) {
|
if (!day) { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var reservs = this.getDayRoomTypeReservations(day, room_type);
|
|
||||||
var num_rooms = this.getRoomsCapacityByType(room_type);
|
|
||||||
for (var r of reservs) {
|
|
||||||
if (r.unusedZone || r.overbooking || r.cancelled) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
num_rooms -= (r.room && r.room.shared)?r.getTotalPersons(false):1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
var num_rooms = this._roomCapacities[room_type];
|
||||||
|
num_rooms -= _.reduce(this.getDayRoomTypeReservations(day, room_type), function(memo, r){ return memo + (r.room && r.room.shared)?r.getTotalPersons(false):1; }, 0);
|
||||||
return num_rooms;
|
return num_rooms;
|
||||||
},
|
},
|
||||||
|
|
||||||
calcDayRoomTotalReservations: function(/*String,MomentObject*/day) {
|
calcDayRoomTotalReservations: function(/*String,MomentObject*/day) {
|
||||||
var day = HotelCalendar.toMoment(day);
|
var day = HotelCalendar.toMoment(day);
|
||||||
if (!day) {
|
if (!day) { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var reservs = this.getReservationsByDay(day, true);
|
|
||||||
var num_rooms = this.getRoomsCapacityTotal();
|
|
||||||
for (var r of reservs) {
|
|
||||||
if (r.unusedZone || r.overbooking || r.cancelled) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
num_rooms -= (r.room && r.room.shared)?r.getTotalPersons(false):1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
var num_rooms = this._roomCapacityTotal;
|
||||||
|
num_rooms -= _.reduce(this.getReservationsByDay(day, true), function(memo, r){ return memo + (r.room && r.room.shared)?r.getTotalPersons(false):1; }, 0);
|
||||||
return num_rooms;
|
return num_rooms;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -2184,21 +2154,19 @@ HotelCalendar.prototype = {
|
|||||||
this.edtable.querySelectorAll('td.hcal-cell-detail-room-perc-occup-group-item-day')
|
this.edtable.querySelectorAll('td.hcal-cell-detail-room-perc-occup-group-item-day')
|
||||||
];
|
];
|
||||||
|
|
||||||
var cell;
|
for (var cell of cells[0]) {
|
||||||
for (var i=0; i<=cells[0].length; ++i) {
|
|
||||||
// Occupation by Type
|
// Occupation by Type
|
||||||
cell = cells[0][i];
|
|
||||||
if (cell) {
|
if (cell) {
|
||||||
var parentRow = this.$base.querySelector(`#${cell.dataset.hcalParentRow}`);
|
|
||||||
var cell_date = cell.dataset.hcalDate;
|
var cell_date = cell.dataset.hcalDate;
|
||||||
var num_rooms = this.getRoomsCapacityByType(parentRow.dataset.hcalRoomType);
|
var num_rooms_type = this._roomCapacities[cell.parentNode.dataset.hcalRoomType];
|
||||||
var num_free = this.calcDayRoomTypeReservations(cell_date, parentRow.dataset.hcalRoomType);
|
var num_free = this.calcDayRoomTypeReservations(cell_date, cell.parentNode.dataset.hcalRoomType);
|
||||||
cell.innerText = num_free;
|
cell.innerText = num_free;
|
||||||
cell.style.backgroundColor = this._generateColor(num_free, num_rooms, 0.35, true, true);
|
cell.style.backgroundColor = this._generateColor(num_free, num_rooms_type, 0.35, true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var num_rooms = this.getRoomsCapacityTotal();
|
var cell;
|
||||||
|
var num_rooms = this._roomCapacityTotal;
|
||||||
for (var i=0; i<=this.options.days; ++i) {
|
for (var i=0; i<=this.options.days; ++i) {
|
||||||
// Occupation Total
|
// Occupation Total
|
||||||
cell = cells[1][i];
|
cell = cells[1][i];
|
||||||
|
|||||||
Reference in New Issue
Block a user