mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP] Swap
This commit is contained in:
@@ -372,18 +372,6 @@ var PMSCalendarController = AbstractController.extend({
|
|||||||
res_id: ev.detail.reservationObj.id,
|
res_id: ev.detail.reservationObj.id,
|
||||||
views: [[false, 'form']]
|
views: [[false, 'form']]
|
||||||
});
|
});
|
||||||
// self._model.call('get_formview_id', [res_id, Session.user_context]).then(function(view_id){
|
|
||||||
// var pop = new ViewDialogs.FormViewDialog(self, {
|
|
||||||
// res_model: 'hotel.folio',
|
|
||||||
// res_id: res_id,
|
|
||||||
// title: _t("Open: ") + ev.detail.reservationObj.title,
|
|
||||||
// view_id: view_id
|
|
||||||
// //readonly: false
|
|
||||||
// }).open();
|
|
||||||
// pop.on('write_completed', self, function(){
|
|
||||||
// self.trigger('changed_value');
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
});
|
});
|
||||||
this._multi_calendar.on_calendar('hcalOnUnifyReservations', function(ev){
|
this._multi_calendar.on_calendar('hcalOnUnifyReservations', function(ev){
|
||||||
console.log("TO UNIFY");
|
console.log("TO UNIFY");
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ odoo.define('hotel_calendar.MultiCalendar', function(require) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (var calendar of this._calendars) {
|
for (var calendar of this._calendars) {
|
||||||
calendar.addReservations(this._dataset['reservations']);
|
calendar.addReservations(reservations);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -177,11 +177,15 @@ HotelCalendar.prototype = {
|
|||||||
this._divideDivs[1].remove();
|
this._divideDivs[1].remove();
|
||||||
this._divideDivs = false;
|
this._divideDivs = false;
|
||||||
}
|
}
|
||||||
|
this._reset_action_reservation();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._selectionMode === HotelCalendar.ACTION.UNIFY) {
|
if (this._selectionMode === HotelCalendar.ACTION.UNIFY) {
|
||||||
this.reservationAction.action = HotelCalendar.ACTION.UNIFY;
|
this.reservationAction.action = HotelCalendar.ACTION.UNIFY;
|
||||||
this.reservationAction.toUnify = [];
|
this.reservationAction.toUnify = [];
|
||||||
|
} else {
|
||||||
|
this._reset_action_reservation();
|
||||||
|
this._updateHighlightUnifyReservations();
|
||||||
}
|
}
|
||||||
|
|
||||||
this._dispatchEvent('hcalOnChangeSelectionMode', {
|
this._dispatchEvent('hcalOnChangeSelectionMode', {
|
||||||
@@ -1488,7 +1492,7 @@ HotelCalendar.prototype = {
|
|||||||
for (var elm of elms) { elm.classList.remove('hcal-reservation-unify-selected'); }
|
for (var elm of elms) { elm.classList.remove('hcal-reservation-unify-selected'); }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var dateLimits = this.getDateLimits(this.reservationAction.toUnify);
|
var dateLimits = this.getDateLimits(this.reservationAction.toUnify, false);
|
||||||
var refUnifyReservation = this.reservationAction.toUnify[0];
|
var refUnifyReservation = this.reservationAction.toUnify[0];
|
||||||
var uniRoom = refUnifyReservation?refUnifyReservation.room.id:false;
|
var uniRoom = refUnifyReservation?refUnifyReservation.room.id:false;
|
||||||
for (var nreserv of this._reservations) {
|
for (var nreserv of this._reservations) {
|
||||||
@@ -1519,7 +1523,7 @@ HotelCalendar.prototype = {
|
|||||||
for (var elm of elms) { elm.classList.remove('hcal-reservation-swap-out-selected'); }
|
for (var elm of elms) { elm.classList.remove('hcal-reservation-swap-out-selected'); }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var dateLimits = this.getDateLimits(this.reservationAction.inReservations);
|
var dateLimits = this.getDateLimits(this.reservationAction.inReservations, true);
|
||||||
var refInReservation = this.reservationAction.inReservations[0];
|
var refInReservation = this.reservationAction.inReservations[0];
|
||||||
var refOutReservation = this.reservationAction.outReservations[0];
|
var refOutReservation = this.reservationAction.outReservations[0];
|
||||||
var inCapacity = refInReservation?refInReservation.room.capacity:false;
|
var inCapacity = refInReservation?refInReservation.room.capacity:false;
|
||||||
@@ -1546,7 +1550,7 @@ HotelCalendar.prototype = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Invalid reservations out of dates
|
// Invalid reservations out of dates
|
||||||
else if (nreserv.startDate.isBefore(realDateLimits[0], 'day') || nreserv.endDate.isAfter(realDateLimits[1], 'day')) {
|
else if (nreserv.startDate.isBefore(realDateLimits[0], 'day') || nreserv.endDate.clone().subtract('1', 'd').isAfter(realDateLimits[1], 'day')) {
|
||||||
if (nreserv.room.id !== refInReservation.room.id) {
|
if (nreserv.room.id !== refInReservation.room.id) {
|
||||||
nreserv._html.classList.add('hcal-reservation-invalid-swap');
|
nreserv._html.classList.add('hcal-reservation-invalid-swap');
|
||||||
}
|
}
|
||||||
@@ -1781,9 +1785,9 @@ HotelCalendar.prototype = {
|
|||||||
console.warn("[HotelCalendar][swapReservations] Invalid Swap Operation!");
|
console.warn("[HotelCalendar][swapReservations] Invalid Swap Operation!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var fromDateLimits = this.getDateLimits(fromReservations);
|
var fromDateLimits = this.getDateLimits(fromReservations, true);
|
||||||
var fromRealDateLimits = this.getFreeDatesByRoom(fromDateLimits[0], fromDateLimits[1], fromReservations[0].room.id);
|
var fromRealDateLimits = this.getFreeDatesByRoom(fromDateLimits[0], fromDateLimits[1], fromReservations[0].room.id);
|
||||||
var toDateLimits = this.getDateLimits(toReservations);
|
var toDateLimits = this.getDateLimits(toReservations, true);
|
||||||
var toRealDateLimits = this.getFreeDatesByRoom(toDateLimits[0], toDateLimits[1], toReservations[0].room.id);
|
var toRealDateLimits = this.getFreeDatesByRoom(toDateLimits[0], toDateLimits[1], toReservations[0].room.id);
|
||||||
|
|
||||||
if (fromDateLimits[0].clone().local().isSameOrAfter(toRealDateLimits[0].clone().local(), 'd') && fromDateLimits[1].clone().local().isSameOrBefore(toRealDateLimits[1].clone().local(), 'd') &&
|
if (fromDateLimits[0].clone().local().isSameOrAfter(toRealDateLimits[0].clone().local(), 'd') && fromDateLimits[1].clone().local().isSameOrBefore(toRealDateLimits[1].clone().local(), 'd') &&
|
||||||
@@ -1839,12 +1843,12 @@ HotelCalendar.prototype = {
|
|||||||
nreserv.room = refFromRoom;
|
nreserv.room = refFromRoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.options.divideRoomsByCapacity) {
|
// if (this.options.divideRoomsByCapacity) {
|
||||||
var allReservs = toReservations.concat(fromReservations);
|
// var allReservs = toReservations.concat(fromReservations);
|
||||||
for (var nreserv of allReservs) { this._updateUnusedZones(nreserv); }
|
// for (var nreserv of allReservs) { this._updateUnusedZones(nreserv); }
|
||||||
}
|
// }
|
||||||
} else {
|
} else {
|
||||||
console.warn("[HotelCalendar][swapReservations] Invalid Swap Operation!");
|
console.warn("[HotelCalendar][swapReservations] Invalid Swap Operation!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1940,7 +1944,7 @@ HotelCalendar.prototype = {
|
|||||||
// MODE UNIFY RESERVATIONS
|
// MODE UNIFY RESERVATIONS
|
||||||
if ($this._selectionMode === HotelCalendar.ACTION.UNIFY) {
|
if ($this._selectionMode === HotelCalendar.ACTION.UNIFY) {
|
||||||
var reserv = $this.getReservation(this.dataset.hcalReservationObjId);
|
var reserv = $this.getReservation(this.dataset.hcalReservationObjId);
|
||||||
var dateLimits = $this.getDateLimits($this.reservationAction.toUnify);
|
var dateLimits = $this.getDateLimits($this.reservationAction.toUnify, false);
|
||||||
var refUnifyReserv = ($this.reservationAction.toUnify.length > 0)?$this.reservationAction.toUnify[0]:false;
|
var refUnifyReserv = ($this.reservationAction.toUnify.length > 0)?$this.reservationAction.toUnify[0]:false;
|
||||||
if ($this.reservationAction.toUnify.indexOf(reserv) != -1) {
|
if ($this.reservationAction.toUnify.indexOf(reserv) != -1) {
|
||||||
$this.reservationAction.toUnify = _.reject($this.reservationAction.toUnify, function(item){ return item === reserv});
|
$this.reservationAction.toUnify = _.reject($this.reservationAction.toUnify, function(item){ return item === reserv});
|
||||||
@@ -2066,21 +2070,6 @@ HotelCalendar.prototype = {
|
|||||||
return HotelCalendar.ACTION.MOVE_ALL;
|
return HotelCalendar.ACTION.MOVE_ALL;
|
||||||
},
|
},
|
||||||
|
|
||||||
// _getRerservationPositionAction: function(/*HTMLObject*/elm, /*Int*/posX, /*Int*/posY) {
|
|
||||||
// var bounds = elm.getBoundingClientRect();
|
|
||||||
// var mouseActMargin = 10*bounds.width*0.01;
|
|
||||||
// console.log("------- Esta aiki");
|
|
||||||
// console.log(posX);
|
|
||||||
// var ppOsX = posX - posX*(1.0-window.devicePixelRatio);
|
|
||||||
// posX -= ppOsX;
|
|
||||||
// console.log(posX);
|
|
||||||
// var mouseActMarginV = (10*bounds.width)/100;
|
|
||||||
// //debugger;
|
|
||||||
// if (posX <= mouseActMargin) { return HotelCalendar.ACTION.MOVE_LEFT; }
|
|
||||||
// else if (posX >= bounds.width-mouseActMargin) { return HotelCalendar.ACTION.MOVE_RIGHT; }
|
|
||||||
// return HotelCalendar.ACTION.MOVE_ALL;
|
|
||||||
// },
|
|
||||||
|
|
||||||
_cleanUnusedZones: function(/*HReservationObject*/reserv) {
|
_cleanUnusedZones: function(/*HReservationObject*/reserv) {
|
||||||
var reservs = _.filter(this._reservations, function(item){ return item.unusedZone && item.linkedId === reserv.id; });
|
var reservs = _.filter(this._reservations, function(item){ return item.unusedZone && item.linkedId === reserv.id; });
|
||||||
for (var creserv of reservs) { this.removeReservation(creserv); }
|
for (var creserv of reservs) { this.removeReservation(creserv); }
|
||||||
@@ -2267,17 +2256,21 @@ HotelCalendar.prototype = {
|
|||||||
return end_date.diff(start_date, 'days');
|
return end_date.diff(start_date, 'days');
|
||||||
},
|
},
|
||||||
|
|
||||||
getDateLimits: function(/*List HReservationObject*/reservs) {
|
getDateLimits: function(/*List HReservationObject*/reservs, /*Bool?*/noCheckouts) {
|
||||||
var start_date = false;
|
var start_date = false;
|
||||||
var end_date = false;
|
var end_date = false;
|
||||||
for (var creserv of reservs) {
|
for (var creserv of reservs) {
|
||||||
if (!start_date) { start_date = creserv.startDate; }
|
if (!start_date) { start_date = creserv.startDate.clone(); }
|
||||||
else if (creserv.startDate.isBefore(start_date, 'day')) {
|
else if (creserv.startDate.isBefore(start_date, 'day')) {
|
||||||
start_date = creserv.startDate;
|
start_date = creserv.startDate.clone();
|
||||||
}
|
}
|
||||||
if (!end_date) { end_date = creserv.endDate; }
|
if (!end_date) { end_date = creserv.endDate.clone(); }
|
||||||
else if (creserv.endDate.isAfter(end_date, 'day')) {
|
else if (creserv.endDate.isAfter(end_date, 'day')) {
|
||||||
end_date = creserv.endDate;
|
end_date = creserv.endDate.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (noCheckouts) {
|
||||||
|
end_date.subtract(1, 'd');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2289,17 +2282,19 @@ HotelCalendar.prototype = {
|
|||||||
var daysRight = this.getDateDiffDays(dateEnd, this._endDate);
|
var daysRight = this.getDateDiffDays(dateEnd, this._endDate);
|
||||||
var freeDates = [dateStart, dateEnd];
|
var freeDates = [dateStart, dateEnd];
|
||||||
|
|
||||||
|
var ndate = dateStart.clone();
|
||||||
for (var i=1; i<daysLeft; i++) {
|
for (var i=1; i<daysLeft; i++) {
|
||||||
var ndate = dateStart.clone().subtract(i, 'd');
|
ndate.subtract(1, 'd');
|
||||||
var reservs = this.getReservationsByDay(ndate, false, false, roomId);
|
var reservs = this.getReservationsByDay(ndate, true, false, roomId);
|
||||||
if (reservs.length != 0) { break; }
|
if (reservs.length != 0) { break; }
|
||||||
freeDates[0] = ndate;
|
freeDates[0] = ndate.clone();
|
||||||
}
|
}
|
||||||
|
ndate = dateEnd.clone();
|
||||||
for (var i=1; i<daysRight; i++) {
|
for (var i=1; i<daysRight; i++) {
|
||||||
var ndate = dateEnd.clone().add(i, 'd');
|
ndate.add(1, 'd');
|
||||||
var reservs = this.getReservationsByDay(ndate, false, false, roomId);
|
var reservs = this.getReservationsByDay(ndate, true, false, roomId);
|
||||||
if (reservs.length != 0) { break; }
|
if (reservs.length != 0) { break; }
|
||||||
freeDates[1] = ndate;
|
freeDates[1] = ndate.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
return freeDates;
|
return freeDates;
|
||||||
@@ -2415,6 +2410,9 @@ HotelCalendar.prototype = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (this.reservationAction.action !== HotelCalendar.ACTION.NONE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
else if (this._cellSelection.start &&
|
else if (this._cellSelection.start &&
|
||||||
this._cellSelection.start.dataset.hcalParentRow === ev.target.dataset.hcalParentRow) {
|
this._cellSelection.start.dataset.hcalParentRow === ev.target.dataset.hcalParentRow) {
|
||||||
this._cellSelection.end = ev.target;
|
this._cellSelection.end = ev.target;
|
||||||
@@ -2612,7 +2610,7 @@ HotelCalendar.prototype = {
|
|||||||
this._updateHighlightUnifyReservations();
|
this._updateHighlightUnifyReservations();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ev.keyCode === 27) {
|
if (ev.keyCode === 27 || ev.keyCode === 13) {
|
||||||
this.setSelectionMode(HotelCalendar.MODE.NONE);
|
this.setSelectionMode(HotelCalendar.MODE.NONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user