| 1 |
<?php |
| 2 |
/** |
| 3 |
* @package VikBooking |
| 4 |
* @subpackage com_vikbooking |
| 5 |
* @author Alessio Gaggii - e4j - Extensionsforjoomla.com |
| 6 |
* @copyright Copyright (C) 2018 e4j - Extensionsforjoomla.com. All rights reserved. |
| 7 |
* @license GNU General Public License version 2 or later; see LICENSE |
| 8 |
* @link https://vikwp.com |
| 9 |
*/ |
| 10 |
|
| 11 |
defined('ABSPATH') or die('No script kiddies please!'); |
| 12 |
|
| 13 |
$ordersrooms = $this->ordersrooms; |
| 14 |
$ord = $this->ord; |
| 15 |
$all_rooms = $this->all_rooms; |
| 16 |
$customer = $this->customer; |
| 17 |
|
| 18 |
$dbo = JFactory::getDbo(); |
| 19 |
$vbo_app = VikBooking::getVboApplication(); |
| 20 |
$vbo_app->loadSelect2(); |
| 21 |
$vbo_app->loadDatePicker(); |
| 22 |
|
| 23 |
// availability helper |
| 24 |
$av_helper = VikBooking::getAvailabilityInstance(); |
| 25 |
|
| 26 |
// room stay dates in case of split stay (or modified room nights) |
| 27 |
$room_stay_dates = []; |
| 28 |
$js_cal_def_vals = []; |
| 29 |
$room_stay_records = []; |
| 30 |
if ($ord['split_stay']) { |
| 31 |
if ($ord['status'] == 'confirmed') { |
| 32 |
$room_stay_dates = $av_helper->loadSplitStayBusyRecords($ord['id']); |
| 33 |
} else { |
| 34 |
$room_stay_dates = VBOFactory::getConfig()->getArray('split_stay_' . $ord['id'], []); |
| 35 |
} |
| 36 |
// immediately count the number of nights of stay for each split room |
| 37 |
foreach ($room_stay_dates as $sps_r_k => $sps_r_v) { |
| 38 |
if (!empty($sps_r_v['checkin_ts']) && !empty($sps_r_v['checkout_ts'])) { |
| 39 |
// overwrite values for compatibility with non-confirmed bookings |
| 40 |
$sps_r_v['checkin'] = $sps_r_v['checkin_ts']; |
| 41 |
$sps_r_v['checkout'] = $sps_r_v['checkout_ts']; |
| 42 |
} |
| 43 |
$sps_r_v['nights'] = $av_helper->countNightsOfStay($sps_r_v['checkin'], $sps_r_v['checkout']); |
| 44 |
// overwrite the whole array |
| 45 |
$room_stay_dates[$sps_r_k] = $sps_r_v; |
| 46 |
} |
| 47 |
} elseif (!$ord['split_stay'] && !$ord['closure'] && $ord['roomsnum'] > 1 && $ord['days'] > 1 && $ord['status'] == 'confirmed') { |
| 48 |
// load the occupied stay dates for each room in case they were modified |
| 49 |
$room_stay_records = $av_helper->loadSplitStayBusyRecords($ord['id']); |
| 50 |
} |
| 51 |
|
| 52 |
$pgoto = VikRequest::getString('goto', '', 'request'); |
| 53 |
$currencysymb = VikBooking::getCurrencySymb(true); |
| 54 |
$nowdf = VikBooking::getDateFormat(true); |
| 55 |
if ($nowdf == "%d/%m/%Y") { |
| 56 |
$rit = date('d/m/Y', $ord['checkin']); |
| 57 |
$con = date('d/m/Y', $ord['checkout']); |
| 58 |
$df = 'd/m/Y'; |
| 59 |
$juidf = 'dd/mm/yy'; |
| 60 |
} elseif ($nowdf == "%m/%d/%Y") { |
| 61 |
$rit = date('m/d/Y', $ord['checkin']); |
| 62 |
$con = date('m/d/Y', $ord['checkout']); |
| 63 |
$df = 'm/d/Y'; |
| 64 |
$juidf = 'mm/dd/yy'; |
| 65 |
} else { |
| 66 |
$rit = date('Y/m/d', $ord['checkin']); |
| 67 |
$con = date('Y/m/d', $ord['checkout']); |
| 68 |
$df = 'Y/m/d'; |
| 69 |
$juidf = 'yy/mm/dd'; |
| 70 |
} |
| 71 |
$datesep = VikBooking::getDateSeparator(true); |
| 72 |
|
| 73 |
// stay dates details |
| 74 |
$checkin_info = getdate($ord['checkin']); |
| 75 |
$checkout_info = getdate($ord['checkout']); |
| 76 |
|
| 77 |
$ritho = ''; |
| 78 |
$conho = ''; |
| 79 |
$ritmi = ''; |
| 80 |
$conmi = ''; |
| 81 |
for ($i = 0; $i < 24; $i++) { |
| 82 |
$ritho .= "<option value=\"".$i."\"".($checkin_info['hours']==$i ? " selected=\"selected\"" : "").">".($i < 10 ? "0".$i : $i)."</option>\n"; |
| 83 |
$conho .= "<option value=\"".$i."\"".($checkout_info['hours']==$i ? " selected=\"selected\"" : "").">".($i < 10 ? "0".$i : $i)."</option>\n"; |
| 84 |
} |
| 85 |
for ($i = 0; $i < 60; $i++) { |
| 86 |
$ritmi .= "<option value=\"".$i."\"".($checkin_info['minutes']==$i ? " selected=\"selected\"" : "").">".($i < 10 ? "0".$i : $i)."</option>\n"; |
| 87 |
$conmi .= "<option value=\"".$i."\"".($checkout_info['minutes']==$i ? " selected=\"selected\"" : "").">".($i < 10 ? "0".$i : $i)."</option>\n"; |
| 88 |
} |
| 89 |
if ($ord) { |
| 90 |
$pcheckin = $ord['checkin']; |
| 91 |
$pcheckout = $ord['checkout']; |
| 92 |
$secdiff = $pcheckout - $pcheckin; |
| 93 |
$daysdiff = $secdiff / 86400; |
| 94 |
if (is_int($daysdiff)) { |
| 95 |
if ($daysdiff < 1) { |
| 96 |
$daysdiff = 1; |
| 97 |
} |
| 98 |
} else { |
| 99 |
if ($daysdiff < 1) { |
| 100 |
$daysdiff = 1; |
| 101 |
} else { |
| 102 |
$sum = floor($daysdiff) * 86400; |
| 103 |
$newdiff = $secdiff - $sum; |
| 104 |
$maxhmore = VikBooking::getHoursMoreRb() * 3600; |
| 105 |
if ($maxhmore >= $newdiff) { |
| 106 |
$daysdiff = floor($daysdiff); |
| 107 |
} else { |
| 108 |
$daysdiff = ceil($daysdiff); |
| 109 |
} |
| 110 |
} |
| 111 |
} |
| 112 |
} |
| 113 |
$otachannel = ''; |
| 114 |
$otachannel_name = ''; |
| 115 |
$otachannel_bid = ''; |
| 116 |
$otacurrency = ''; |
| 117 |
if (!empty($ord['channel'])) { |
| 118 |
$channelparts = explode('_', $ord['channel']); |
| 119 |
$otachannel = array_key_exists(1, $channelparts) && strlen($channelparts[1]) > 0 ? $channelparts[1] : ucwords($channelparts[0]); |
| 120 |
$otachannel_name = $otachannel; |
| 121 |
$otachannel_bid = $otachannel.(!empty($ord['idorderota']) ? ' - Booking ID: '.$ord['idorderota'] : ''); |
| 122 |
if (strstr($otachannel, '.') !== false) { |
| 123 |
$otaccparts = explode('.', $otachannel); |
| 124 |
$otachannel = $otaccparts[0]; |
| 125 |
} |
| 126 |
$otacurrency = !empty($ord['chcurrency']) ? $ord['chcurrency'] : ''; |
| 127 |
} |
| 128 |
|
| 129 |
$status_type = ''; |
| 130 |
if (!empty($ord['type'])) { |
| 131 |
$status_type = JText::translate('VBO_BTYPE_' . strtoupper($ord['type'])); |
| 132 |
if (!strcasecmp($ord['type'], 'overbooking')) { |
| 133 |
$status_type = '<span class="label label-error vbo-label-nested vbo-label-overbooking">' . $status_type . '</span>'; |
| 134 |
} |
| 135 |
$status_type .= ' / '; |
| 136 |
} |
| 137 |
if ($ord['status'] == "confirmed") { |
| 138 |
$saystaus = '<span class="label label-success">' . $status_type . JText::translate('VBCONFIRMED') . '</span>'; |
| 139 |
} elseif ($ord['status']=="standby") { |
| 140 |
$saystaus = '<span class="label label-warning">' . $status_type . JText::translate('VBSTANDBY') . '</span>'; |
| 141 |
} else { |
| 142 |
$saystaus = '<span class="label label-error">' . $status_type . JText::translate('VBCANCELLED') . '</span>'; |
| 143 |
} |
| 144 |
|
| 145 |
//Package or custom rate |
| 146 |
$is_package = !empty($ord['pkg']) ? true : false; |
| 147 |
$is_cust_cost = false; |
| 148 |
foreach ($ordersrooms as $kor => $or) { |
| 149 |
if ($is_package !== true && !empty($or['cust_cost']) && $or['cust_cost'] > 0.00) { |
| 150 |
$is_cust_cost = true; |
| 151 |
break; |
| 152 |
} |
| 153 |
} |
| 154 |
$ivas = array(); |
| 155 |
$wiva = ""; |
| 156 |
$jstaxopts = '<option value=\"\">'.JText::translate('VBNEWOPTFOUR').'</option>'; |
| 157 |
$q = "SELECT * FROM `#__vikbooking_iva`;"; |
| 158 |
$dbo->setQuery($q); |
| 159 |
$dbo->execute(); |
| 160 |
if ($dbo->getNumRows() > 0) { |
| 161 |
$ivas = $dbo->loadAssocList(); |
| 162 |
$wiva = "<select name=\"aliq%s\"><option value=\"\">".JText::translate('VBNEWOPTFOUR')."</option>\n"; |
| 163 |
foreach ($ivas as $kiva => $iv) { |
| 164 |
$wiva .= "<option value=\"".$iv['id']."\" data-aliqid=\"".$iv['id']."\"" . ($kiva == 0 ? ' selected="selected"' : '') . ">".(empty($iv['name']) ? $iv['aliq']."%" : $iv['name']." - ".$iv['aliq']."%")."</option>\n"; |
| 165 |
$jstaxopts .= '<option value=\"'.$iv['id'].'\">'.(empty($iv['name']) ? $iv['aliq']."%" : addslashes($iv['name'])." - ".$iv['aliq']."%").'</option>'; |
| 166 |
} |
| 167 |
$wiva .= "</select>\n"; |
| 168 |
} |
| 169 |
|
| 170 |
// room switching |
| 171 |
$switching = false; |
| 172 |
$switcher = ''; |
| 173 |
if ($ord && count($all_rooms) > 1 && (!empty($ordersrooms[0]['idtar']) || $is_package || $is_cust_cost)) { |
| 174 |
$switching = true; |
| 175 |
$occ_rooms = array(); |
| 176 |
foreach ($all_rooms as $r) { |
| 177 |
$rkey = $r['fromadult'] < $r['toadult'] ? $r['fromadult'].' - '.$r['toadult'] : $r['toadult']; |
| 178 |
$occ_rooms[$rkey][] = $r; |
| 179 |
} |
| 180 |
$switcher = '<select class="vbo-rswitcher-select" name="%s" id="vbswr%d" onchange="vbIsSwitchable(this.value, %d, %d);"><option></option>'."\n"; |
| 181 |
foreach ($occ_rooms as $occ => $rr) { |
| 182 |
$switcher .= '<optgroup label="'.JText::sprintf('VBSWROOMOCC', $occ).'">'."\n"; |
| 183 |
foreach ($rr as $r) { |
| 184 |
$switcher .= '<option value="'.$r['id'].'">'.str_replace('%', '%%', $r['name']).'</option>'."\n"; |
| 185 |
} |
| 186 |
$switcher .= '</optgroup>'."\n"; |
| 187 |
} |
| 188 |
$switcher .= '</select>'."\n"; |
| 189 |
} |
| 190 |
|
| 191 |
$canDo = JFactory::getUser(); |
| 192 |
|
| 193 |
JText::script('VBPEDITBUSYEXTRACOSTS'); |
| 194 |
JText::script('VBDASHBOOKINGID'); |
| 195 |
JText::script('VBPVIEWORDERSONE'); |
| 196 |
JText::script('VBEDITORDERTHREE'); |
| 197 |
JText::script('VBDAYS'); |
| 198 |
JText::script('VBEDITORDERADULTS'); |
| 199 |
JText::script('VBEDITORDERCHILDREN'); |
| 200 |
JText::script('VBPEDITBUSYADDEXTRAC'); |
| 201 |
JText::script('VBO_CONF_RM_OVERBOOKING_FLAG'); |
| 202 |
|
| 203 |
?> |
| 204 |
<script type="text/javascript"> |
| 205 |
|
| 206 |
Joomla.submitbutton = function(task) { |
| 207 |
if ( task == 'removebusy' ) { |
| 208 |
if (confirm('<?php echo htmlspecialchars(JText::translate('VBDELCONFIRM'), ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401); ?>')) { |
| 209 |
Joomla.submitform(task, document.adminForm); |
| 210 |
} else { |
| 211 |
return false; |
| 212 |
} |
| 213 |
} else { |
| 214 |
Joomla.submitform(task, document.adminForm); |
| 215 |
} |
| 216 |
} |
| 217 |
|
| 218 |
function vbIsSwitchable(toid, fromid, orid) { |
| 219 |
if (parseInt(toid) == parseInt(fromid)) { |
| 220 |
document.getElementById('vbswr'+orid).value = ''; |
| 221 |
return false; |
| 222 |
} |
| 223 |
return true; |
| 224 |
} |
| 225 |
|
| 226 |
var vboMessages = { |
| 227 |
jscurrency: "<?php echo $currencysymb; ?>", |
| 228 |
extracnameph: "<?php echo htmlspecialchars(JText::translate('VBPEDITBUSYEXTRACNAME')); ?>", |
| 229 |
taxoptions : "<?php echo $jstaxopts; ?>", |
| 230 |
cantaddroom: "<?php echo htmlspecialchars(JText::translate('VBOBOOKCANTADDROOM')); ?>" |
| 231 |
}; |
| 232 |
|
| 233 |
var vbo_overlay_on = false, |
| 234 |
vbo_can_add_room = false; |
| 235 |
|
| 236 |
jQuery(function() { |
| 237 |
|
| 238 |
// remove overbooking flag |
| 239 |
jQuery('.vbo-label-overbooking').on('click', function() { |
| 240 |
if (confirm(Joomla.JText._('VBO_CONF_RM_OVERBOOKING_FLAG'))) { |
| 241 |
VBOCore.doAjax( |
| 242 |
"<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=bookings.delete_type_flag'); ?>", |
| 243 |
{ |
| 244 |
bid: '<?php echo $ord['id']; ?>', |
| 245 |
flag: 'overbooking', |
| 246 |
}, |
| 247 |
(success) => { |
| 248 |
// remove "overbooking" label |
| 249 |
let parent_label = jQuery('.vbo-bookdet-container').find('.vbo-label-overbooking').parent('.label'); |
| 250 |
jQuery('.vbo-bookdet-container').find('.vbo-label-overbooking').remove(); |
| 251 |
parent_label.text(parent_label.text().replace(' / ', '')); |
| 252 |
}, |
| 253 |
(error) => { |
| 254 |
alert(error.responseText); |
| 255 |
} |
| 256 |
); |
| 257 |
} |
| 258 |
}); |
| 259 |
|
| 260 |
jQuery('#vbo-add-room').click(function() { |
| 261 |
jQuery(".vbo-info-overlay-block").fadeToggle(400, function() { |
| 262 |
if (jQuery(".vbo-info-overlay-block").is(":visible")) { |
| 263 |
vbo_overlay_on = true; |
| 264 |
} else { |
| 265 |
vbo_overlay_on = false; |
| 266 |
} |
| 267 |
}); |
| 268 |
}); |
| 269 |
|
| 270 |
jQuery(document).mouseup(function(e) { |
| 271 |
if (!vbo_overlay_on) { |
| 272 |
return false; |
| 273 |
} |
| 274 |
var vbo_overlay_cont = jQuery(".vbo-info-overlay-content"); |
| 275 |
if (!vbo_overlay_cont.is(e.target) && vbo_overlay_cont.has(e.target).length === 0) { |
| 276 |
vboAddRoomCloseModal(); |
| 277 |
} |
| 278 |
}); |
| 279 |
|
| 280 |
jQuery(document).keyup(function(e) { |
| 281 |
if (e.keyCode == 27 && vbo_overlay_on) { |
| 282 |
vboAddRoomCloseModal(); |
| 283 |
} |
| 284 |
}); |
| 285 |
|
| 286 |
jQuery(".vbo-rswitcher-select").select2({placeholder: '<?php echo addslashes(JText::translate('VBSWITCHRWITH')); ?>'}); |
| 287 |
|
| 288 |
jQuery('.vb-cal-img, .vbo-caltrigger').click(function() { |
| 289 |
var jdp = jQuery(this).prev('input.hasDatepicker'); |
| 290 |
if (jdp.length) { |
| 291 |
jdp.focus(); |
| 292 |
} |
| 293 |
}); |
| 294 |
}); |
| 295 |
|
| 296 |
function vboAddRoomId(rid) { |
| 297 |
document.getElementById('add_room_id').value = rid; |
| 298 |
var fdate = document.getElementById('checkindate').value; |
| 299 |
var tdate = document.getElementById('checkoutdate').value; |
| 300 |
if (rid.length && fdate.length && tdate.length) { |
| 301 |
var jqxhr = jQuery.ajax({ |
| 302 |
type: "POST", |
| 303 |
url: "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=isroombookable'); ?>", |
| 304 |
data: { |
| 305 |
tmpl: "component", |
| 306 |
rid: rid, |
| 307 |
fdate: fdate, |
| 308 |
tdate: tdate |
| 309 |
} |
| 310 |
}).done(function(res) { |
| 311 |
var obj_res = JSON.parse(res); |
| 312 |
if (obj_res['status'] != 1) { |
| 313 |
vbo_can_add_room = false; |
| 314 |
alert(obj_res['err']); |
| 315 |
document.getElementById('add-room-status').style.color = 'red'; |
| 316 |
} else { |
| 317 |
vbo_can_add_room = true; |
| 318 |
document.getElementById('add-room-status').style.color = 'green'; |
| 319 |
} |
| 320 |
}).fail(function() { |
| 321 |
console.log("isroombookable Request Failed"); |
| 322 |
alert('Generic Error'); |
| 323 |
}); |
| 324 |
} else { |
| 325 |
vbo_can_add_room = false; |
| 326 |
document.getElementById('add-room-status').style.color = '#333333'; |
| 327 |
} |
| 328 |
} |
| 329 |
|
| 330 |
function vboAddRoomSubmit() { |
| 331 |
if (vbo_can_add_room && document.getElementById('add_room_id').value.length) { |
| 332 |
document.adminForm.task.value = 'updatebusy'; |
| 333 |
document.adminForm.submit(); |
| 334 |
} else { |
| 335 |
alert(vboMessages.cantaddroom); |
| 336 |
} |
| 337 |
} |
| 338 |
|
| 339 |
function vboAddRoomCloseModal() { |
| 340 |
document.getElementById('add_room_id').value = ''; |
| 341 |
vbo_can_add_room = false; |
| 342 |
jQuery(".vbo-info-overlay-block").fadeOut(); |
| 343 |
vbo_overlay_on = false; |
| 344 |
} |
| 345 |
|
| 346 |
function vboConfirmRmRoom(roid) { |
| 347 |
document.getElementById('rm_room_oid').value = ''; |
| 348 |
if (!roid.length) { |
| 349 |
return false; |
| 350 |
} |
| 351 |
if (confirm('<?php echo addslashes(JText::translate('VBOBOOKRMROOMCONFIRM')); ?>')) { |
| 352 |
document.getElementById('rm_room_oid').value = roid; |
| 353 |
document.adminForm.task.value = 'updatebusy'; |
| 354 |
document.adminForm.submit(); |
| 355 |
} |
| 356 |
} |
| 357 |
|
| 358 |
function vboEditbusyModifyRoomDates(enabled, room_ind) { |
| 359 |
var elem = jQuery('.vbo-editbooking-room-nights-modify-details[data-roomind="' + room_ind + '"]'); |
| 360 |
if (!elem || !elem.length) { |
| 361 |
return false; |
| 362 |
} |
| 363 |
// get calendar fields for this room |
| 364 |
var checkin_field = elem.find('input.vbo-editbusy-room-modify-dates-checkin'); |
| 365 |
var checkout_field = elem.find('input.vbo-editbusy-room-modify-dates-checkout'); |
| 366 |
if (!enabled) { |
| 367 |
// hide wrapper element |
| 368 |
elem.hide(); |
| 369 |
// make sure the calendars are empty |
| 370 |
checkin_field.val(''); |
| 371 |
checkout_field.val(''); |
| 372 |
return true; |
| 373 |
} |
| 374 |
// set up calendars |
| 375 |
jQuery.datepicker.setDefaults( jQuery.datepicker.regional[ '' ] ); |
| 376 |
<?php |
| 377 |
// calculate min/max dates for check-in and check-out to constrain the values |
| 378 |
$prev_day_checkout_ts = mktime(0, 0, 0, $checkout_info['mon'], ($checkout_info['mday'] - 1), $checkout_info['year']); |
| 379 |
$next_day_checkin_ts = mktime(0, 0, 0, $checkin_info['mon'], ($checkin_info['mday'] + 1), $checkin_info['year']); |
| 380 |
?> |
| 381 |
var min_checkin_date_obj = new Date('<?php echo date('Y-m-d', $ord['checkin']); ?> 00:00:00'); |
| 382 |
var max_checkin_date_obj = new Date('<?php echo date('Y-m-d H:i:s', $prev_day_checkout_ts); ?>'); |
| 383 |
var min_checkout_date_obj = new Date('<?php echo date('Y-m-d H:i:s', $next_day_checkin_ts); ?>'); |
| 384 |
var max_checkout_date_obj = new Date('<?php echo date('Y-m-d', $ord['checkout']); ?> 00:00:00'); |
| 385 |
checkin_field.datepicker({ |
| 386 |
showOn: 'focus', |
| 387 |
numberOfMonths: 1, |
| 388 |
}); |
| 389 |
checkin_field.datepicker('option', 'dateFormat', '<?php echo $juidf; ?>'); |
| 390 |
checkin_field.datepicker('option', 'minDate', min_checkin_date_obj); |
| 391 |
checkin_field.datepicker('option', 'maxDate', max_checkin_date_obj); |
| 392 |
checkin_field.datepicker('setDate', checkin_field.attr('data-current-value')); |
| 393 |
checkout_field.datepicker({ |
| 394 |
showOn: 'focus', |
| 395 |
numberOfMonths: 1, |
| 396 |
}); |
| 397 |
checkout_field.datepicker('option', 'dateFormat', '<?php echo $juidf; ?>'); |
| 398 |
checkout_field.datepicker('option', 'minDate', min_checkout_date_obj); |
| 399 |
checkout_field.datepicker('option', 'maxDate', max_checkout_date_obj); |
| 400 |
checkout_field.datepicker('setDate', checkout_field.attr('data-current-value')); |
| 401 |
// show wrapper element |
| 402 |
elem.show(); |
| 403 |
} |
| 404 |
|
| 405 |
</script> |
| 406 |
|
| 407 |
<script type="text/javascript"> |
| 408 |
/* custom extra services for each room */ |
| 409 |
function vboAddExtraCost(rnum) { |
| 410 |
var telem = jQuery("#vbo-ebusy-extracosts-"+rnum); |
| 411 |
if (telem.length > 0) { |
| 412 |
var extracostcont = "<div class=\"vbo-editbooking-room-extracost\">"+"\n"+ |
| 413 |
"<div class=\"vbo-ebusy-extracosts-cellname\">"+"\n"+ |
| 414 |
" <input type=\"text\" name=\"extracn["+rnum+"][]\" value=\"\" autocomplete=\"off\" placeholder=\""+vboMessages.extracnameph+"\" size=\"25\" />"+"\n"+ |
| 415 |
" <span class=\"vbo-ebusy-extracosts-search\" onclick=\"vboSearchExtraCost(this);\"><i class=\"<?php echo VikBookingIcons::i('search') ?>\"></i></span>"+"\n"+ |
| 416 |
"</div>"+"\n"+ |
| 417 |
"<div class=\"vbo-ebusy-extracosts-cellcost\"><span class=\"vbo-ebusy-extracosts-currency\">"+vboMessages.jscurrency+"</span> <input type=\"number\" step=\"any\" name=\"extracc["+rnum+"][]\" value=\"0.00\" size=\"5\" /></div>"+"\n"+ |
| 418 |
"<div class=\"vbo-ebusy-extracosts-celltax\"><select name=\"extractx["+rnum+"][]\">"+vboMessages.taxoptions+"</select></div>"+"\n"+ |
| 419 |
"<div class=\"vbo-ebusy-extracosts-cellrm\"><button class=\"btn btn-danger\" type=\"button\" onclick=\"vboRemoveExtraCost(this);\">×</button></div>"+"\n"+ |
| 420 |
"</div>"; |
| 421 |
telem.find(".vbo-editbooking-room-extracosts-wrap").append(extracostcont); |
| 422 |
} |
| 423 |
} |
| 424 |
|
| 425 |
function vboRemoveExtraCost(elem) { |
| 426 |
var parel = jQuery(elem).closest('.vbo-editbooking-room-extracost'); |
| 427 |
if (parel.length > 0) { |
| 428 |
parel.remove(); |
| 429 |
} |
| 430 |
} |
| 431 |
|
| 432 |
// active service element for search |
| 433 |
var search_service_element = null; |
| 434 |
|
| 435 |
function vboSearchExtraCost(elem) { |
| 436 |
parel = jQuery(elem).closest('.vbo-editbooking-room-extracost'); |
| 437 |
if (!parel || !parel.length) { |
| 438 |
return; |
| 439 |
} |
| 440 |
|
| 441 |
// set active service element for search |
| 442 |
search_service_element = parel; |
| 443 |
|
| 444 |
// current search value |
| 445 |
var search_txt = parel.find('.vbo-ebusy-extracosts-cellname').find('input[type="text"]').val(); |
| 446 |
|
| 447 |
// build modal content |
| 448 |
var servsearch_modal = jQuery('<div></div>').addClass('vbo-modal-overlay-block vbo-modal-overlay-servsearch').css('display', 'block'); |
| 449 |
var servsearch_dismiss = jQuery('<a></a>').addClass('vbo-modal-overlay-close'); |
| 450 |
servsearch_dismiss.on('click', function() { |
| 451 |
jQuery('.vbo-modal-overlay-servsearch').fadeOut(); |
| 452 |
}); |
| 453 |
servsearch_modal.append(servsearch_dismiss); |
| 454 |
var servsearch_content = jQuery('<div></div>').addClass('vbo-modal-overlay-content vbo-modal-overlay-content-servsearch'); |
| 455 |
var servsearch_head = jQuery('<div></div>').addClass('vbo-modal-overlay-content-head'); |
| 456 |
var servsearch_head_title = jQuery('<span></span>').text(Joomla.JText._('VBPEDITBUSYEXTRACOSTS')); |
| 457 |
var servsearch_head_close = jQuery('<span></span>').addClass('vbo-modal-overlay-close-times').html('×'); |
| 458 |
servsearch_head_close.on('click', function() { |
| 459 |
jQuery('.vbo-modal-overlay-servsearch').fadeOut(); |
| 460 |
}); |
| 461 |
servsearch_head.append(servsearch_head_title).append(servsearch_head_close); |
| 462 |
var servsearch_body = jQuery('<div></div>').addClass('vbo-modal-overlay-content-body vbo-modal-overlay-content-body-scroll'); |
| 463 |
var servsearch_form = jQuery('<div></div>').addClass('vbo-modal-servsearch-wrap'); |
| 464 |
var servsearch_sample = jQuery('.vbo-modal-sample-servsearch').html(); |
| 465 |
servsearch_form.append(servsearch_sample); |
| 466 |
servsearch_form.find('input.vbo-servsearch-inp').val(search_txt); |
| 467 |
// attach click listener event for search |
| 468 |
servsearch_form.find('button.vbo-config-btn').on('click', function() { |
| 469 |
var btn_trigger = jQuery(this); |
| 470 |
var form_wrap = btn_trigger.closest('.vbo-modal-servsearch-form-wrap'); |
| 471 |
var search_term = form_wrap.find('input.vbo-servsearch-inp').val(); |
| 472 |
var search_results = form_wrap.find('.vbo-modal-servsearch-results'); |
| 473 |
|
| 474 |
// empty the search results and add the loading class |
| 475 |
search_results.html(''); |
| 476 |
btn_trigger.find('i').attr('class', '<?php echo VikBookingIcons::i('circle-notch', 'fa-spin fa-fw'); ?>'); |
| 477 |
|
| 478 |
// make the request |
| 479 |
VBOCore.doAjax( |
| 480 |
"<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=bookings.search_service'); ?>", |
| 481 |
{ |
| 482 |
service_name: search_term, |
| 483 |
tmpl: "component" |
| 484 |
}, |
| 485 |
function(response) { |
| 486 |
btn_trigger.find('i').attr('class', '<?php echo VikBookingIcons::i('search'); ?>'); |
| 487 |
var book_base_nav_uri = jQuery('.vbo-booking-basenavuri').attr('href'); |
| 488 |
try { |
| 489 |
var obj_res = typeof response === 'string' ? JSON.parse(response) : response; |
| 490 |
if (!obj_res) { |
| 491 |
console.error('Unexpected JSON response', obj_res); |
| 492 |
return false; |
| 493 |
} |
| 494 |
|
| 495 |
for (var i = 0; i < obj_res.length; i++) { |
| 496 |
// build result structure |
| 497 |
var result_wrap = jQuery('<div></div>').addClass('vbo-modal-servsearch-result'); |
| 498 |
var result_service = jQuery('<div></div>').addClass('vbo-modal-servsearch-result-service'); |
| 499 |
var result_booking = jQuery('<div></div>').addClass('vbo-modal-servsearch-result-booking'); |
| 500 |
|
| 501 |
// service details |
| 502 |
result_service.append('<span class="vbo-modal-servsearch-result-service-name">' + obj_res[i]['service']['name'] + '</span>'); |
| 503 |
result_service.append('<span class="vbo-modal-servsearch-result-service-cost">' + obj_res[i]['service']['format_cost'] + '</span>'); |
| 504 |
result_service.append('<span class="vbo-modal-servsearch-result-service-add"><button type="button" class="btn btn-success" data-servicecost="' + obj_res[i]['service']['cost'] + '" data-serviceidtax="' + obj_res[i]['service']['idtax'] + '"><?php VikBookingIcons::e('plus-circle'); ?> ' + Joomla.JText._('VBPEDITBUSYADDEXTRAC') + '</button></span>'); |
| 505 |
|
| 506 |
// booking details |
| 507 |
var serv_booking = ''; |
| 508 |
serv_booking += '<div>' + "\n"; |
| 509 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-lbl">' + Joomla.JText._('VBDASHBOOKINGID') + '</span>' + "\n"; |
| 510 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-val"><a href="' + book_base_nav_uri.replace('%d', obj_res[i]['idorder']) + '" target="_blank">' + obj_res[i]['idorder'] + '</a></span>' + "\n"; |
| 511 |
serv_booking += '</div>' + "\n"; |
| 512 |
serv_booking += '<div>' + "\n"; |
| 513 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-lbl">' + Joomla.JText._('VBPVIEWORDERSONE') + '</span>' + "\n"; |
| 514 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-val">' + obj_res[i]['format_dt'] + '</span>' + "\n"; |
| 515 |
serv_booking += '</div>' + "\n"; |
| 516 |
serv_booking += '<div>' + "\n"; |
| 517 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-lbl">' + Joomla.JText._('VBEDITORDERTHREE') + '</span>' + "\n"; |
| 518 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-val">' + obj_res[i]['room_name'] + '</span>' + "\n"; |
| 519 |
serv_booking += '</div>' + "\n"; |
| 520 |
serv_booking += '<div>' + "\n"; |
| 521 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-lbl">' + Joomla.JText._('VBDAYS') + '</span>' + "\n"; |
| 522 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-val">' + obj_res[i]['nights'] + '</span>' + "\n"; |
| 523 |
serv_booking += '</div>' + "\n"; |
| 524 |
serv_booking += '<div>' + "\n"; |
| 525 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-lbl">' + Joomla.JText._('VBEDITORDERADULTS') + '</span>' + "\n"; |
| 526 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-val">' + obj_res[i]['adults'] + '</span>' + "\n"; |
| 527 |
serv_booking += '</div>' + "\n"; |
| 528 |
if (obj_res[i]['children'] > 0) { |
| 529 |
serv_booking += '<div>' + "\n"; |
| 530 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-lbl">' + Joomla.JText._('VBEDITORDERCHILDREN') + '</span>' + "\n"; |
| 531 |
serv_booking += ' <span class="vbo-modal-servsearch-result-booking-val">' + obj_res[i]['children'] + '</span>' + "\n"; |
| 532 |
serv_booking += '</div>' + "\n"; |
| 533 |
} |
| 534 |
result_booking.append(serv_booking); |
| 535 |
|
| 536 |
result_wrap.append(result_service); |
| 537 |
result_wrap.append(result_booking); |
| 538 |
|
| 539 |
// delegate click event on button to add the selected service |
| 540 |
result_wrap.find('.vbo-modal-servsearch-result-service-add button').on('click', function() { |
| 541 |
var service_name = jQuery(this).closest('.vbo-modal-servsearch-result-service').find('.vbo-modal-servsearch-result-service-name').text(); |
| 542 |
var service_cost = jQuery(this).attr('data-servicecost'); |
| 543 |
var service_idtax = jQuery(this).attr('data-serviceidtax'); |
| 544 |
if (!search_service_element) { |
| 545 |
return; |
| 546 |
} |
| 547 |
// populate fields from where the search was started |
| 548 |
search_service_element.find('.vbo-ebusy-extracosts-cellname').find('input[type="text"]').val(service_name); |
| 549 |
search_service_element.find('.vbo-ebusy-extracosts-cellcost').find('input[type="number"]').val(service_cost); |
| 550 |
search_service_element.find('.vbo-ebusy-extracosts-celltax').find('select').val(service_idtax); |
| 551 |
// trigger the event to dismiss the modal |
| 552 |
jQuery('.vbo-modal-overlay-close-times').trigger('click'); |
| 553 |
}); |
| 554 |
|
| 555 |
// append result |
| 556 |
search_results.append(result_wrap); |
| 557 |
} |
| 558 |
} catch(err) { |
| 559 |
console.error('could not parse JSON response', err, response); |
| 560 |
} |
| 561 |
}, |
| 562 |
function(error) { |
| 563 |
btn_trigger.find('i').attr('class', '<?php echo VikBookingIcons::i('search'); ?>'); |
| 564 |
console.error(error); |
| 565 |
} |
| 566 |
); |
| 567 |
}); |
| 568 |
servsearch_body.append(servsearch_form); |
| 569 |
servsearch_content.append(servsearch_head).append(servsearch_body); |
| 570 |
servsearch_modal.append(servsearch_content); |
| 571 |
// append modal to body |
| 572 |
if (jQuery('.vbo-modal-overlay-servsearch').length) { |
| 573 |
jQuery('.vbo-modal-overlay-servsearch').remove(); |
| 574 |
} |
| 575 |
jQuery('body').append(servsearch_modal); |
| 576 |
// give the focus to the input search button |
| 577 |
servsearch_form.find('input.vbo-servsearch-inp').focus(); |
| 578 |
// trigger the search function immediately |
| 579 |
servsearch_form.find('button.vbo-config-btn').trigger('click'); |
| 580 |
} |
| 581 |
</script> |
| 582 |
|
| 583 |
<a class="vbo-booking-basenavuri" href="<?php echo VBOFactory::getPlatform()->getUri()->admin('index.php?option=com_vikbooking&task=editorder&cid[]=%d', $xhtml = false); ?>" style="display: none;"></a> |
| 584 |
|
| 585 |
<div class="vbo-modal-sample-servsearch" style="display: none;"> |
| 586 |
<div class="vbo-modal-servsearch-form-wrap"> |
| 587 |
<div class="vbo-modal-servsearch-input"> |
| 588 |
<div class="input-append"> |
| 589 |
<input type="text" value="" class="vbo-servsearch-inp" /> |
| 590 |
<button type="button" class="btn vbo-config-btn"><?php VikBookingIcons::e('search'); ?> <?php echo JText::translate('VBODASHSEARCHKEYS'); ?></button> |
| 591 |
</div> |
| 592 |
</div> |
| 593 |
<div class="vbo-modal-servsearch-results"></div> |
| 594 |
</div> |
| 595 |
</div> |
| 596 |
|
| 597 |
<div class="vbo-bookingdet-topcontainer vbo-editbooking-topcontainer"> |
| 598 |
<form name="adminForm" id="adminForm" action="index.php" method="post"> |
| 599 |
|
| 600 |
<div class="vbo-info-overlay-block"> |
| 601 |
<a class="vbo-info-overlay-close" href="javascript: void(0);"></a> |
| 602 |
<div class="vbo-info-overlay-content"> |
| 603 |
<h3><?php echo JText::translate('VBOBOOKADDROOM'); ?></h3> |
| 604 |
<div class="vbo-add-room-overlay"> |
| 605 |
<div class="vbo-add-room-entry"> |
| 606 |
<label for="add-room-id"><?php echo JText::translate('VBDASHROOMNAME'); ?> <span id="add-room-status" style="color: #333333;"><i class="vboicn-checkmark"></i></span></label> |
| 607 |
<select id="add-room-id" onchange="vboAddRoomId(this.value);"> |
| 608 |
<option value=""></option> |
| 609 |
<?php |
| 610 |
$some_disabled = isset($all_rooms[(count($all_rooms) - 1)]['avail']) && !$all_rooms[(count($all_rooms) - 1)]['avail']; |
| 611 |
$optgr_enabled = false; |
| 612 |
foreach ($all_rooms as $ar) { |
| 613 |
if ($some_disabled && !$optgr_enabled && $ar['avail']) { |
| 614 |
$optgr_enabled = true; |
| 615 |
?> |
| 616 |
<optgroup label="<?php echo addslashes(JText::translate('VBPVIEWROOMSIX')); ?>"> |
| 617 |
<?php |
| 618 |
} elseif ($some_disabled && $optgr_enabled && !$ar['avail']) { |
| 619 |
$optgr_enabled = false; |
| 620 |
?> |
| 621 |
</optgroup> |
| 622 |
<?php |
| 623 |
} |
| 624 |
?> |
| 625 |
<option value="<?php echo $ar['id']; ?>"><?php echo $ar['name']; ?></option> |
| 626 |
<?php |
| 627 |
} |
| 628 |
?> |
| 629 |
</select> |
| 630 |
<input type="hidden" name="add_room_id" id="add_room_id" value="" /> |
| 631 |
</div> |
| 632 |
<div class="vbo-add-room-entry"> |
| 633 |
<div class="vbo-add-room-entry-inline"> |
| 634 |
<label for="add_room_adults"><?php echo JText::translate('VBEDITORDERADULTS'); ?></label> |
| 635 |
<input type="number" min="0" name="add_room_adults" id="add_room_adults" value="1" /> |
| 636 |
</div> |
| 637 |
<div class="vbo-add-room-entry-inline"> |
| 638 |
<label for="add_room_children"><?php echo JText::translate('VBEDITORDERCHILDREN'); ?></label> |
| 639 |
<input type="number" min="0" name="add_room_children" id="add_room_children" value="0" /> |
| 640 |
</div> |
| 641 |
</div> |
| 642 |
<div class="vbo-add-room-entry"> |
| 643 |
<div class="vbo-add-room-entry-inline"> |
| 644 |
<label for="add_room_fname"><?php echo JText::translate('VBTRAVELERNAME'); ?></label> |
| 645 |
<input type="text" name="add_room_fname" id="add_room_fname" value="<?php echo isset($ordersrooms[0]) && isset($ordersrooms[0]['t_first_name']) ? $this->escape($ordersrooms[0]['t_first_name']) : ''; ?>" size="12" /> |
| 646 |
</div> |
| 647 |
<div class="vbo-add-room-entry-inline"> |
| 648 |
<label for="add_room_lname"><?php echo JText::translate('VBTRAVELERLNAME'); ?></label> |
| 649 |
<input type="text" name="add_room_lname" id="add_room_lname" value="<?php echo isset($ordersrooms[0]) && isset($ordersrooms[0]['t_last_name']) ? $this->escape($ordersrooms[0]['t_last_name']) : ''; ?>" size="12" /> |
| 650 |
</div> |
| 651 |
</div> |
| 652 |
<div class="vbo-add-room-entry"> |
| 653 |
<div class="vbo-add-room-entry-inline"> |
| 654 |
<label for="add_room_price"><?php echo JText::translate('VBOROOMCUSTRATEPLAN'); ?> (<?php echo $currencysymb; ?>)</label> |
| 655 |
<input type="number" step="any" min="0" name="add_room_price" id="add_room_price" value="" /> |
| 656 |
</div> |
| 657 |
<?php |
| 658 |
if (!empty($wiva)) : |
| 659 |
?> |
| 660 |
<div class="vbo-add-room-entry-inline"> |
| 661 |
<label> </label> |
| 662 |
<?php echo str_replace('%s', '_add_room', $wiva); ?> |
| 663 |
</div> |
| 664 |
<?php |
| 665 |
endif; |
| 666 |
?> |
| 667 |
</div> |
| 668 |
<div class="vbo-center"> |
| 669 |
<br /> |
| 670 |
<button type="button" class="btn btn-large btn-success" onclick="vboAddRoomSubmit();"><i class="vboicn-checkmark"></i> <?php echo JText::translate('VBOBOOKADDROOM'); ?></button> |
| 671 |
</div> |
| 672 |
</div> |
| 673 |
</div> |
| 674 |
</div> |
| 675 |
|
| 676 |
<div class="vbo-bookdet-container"> |
| 677 |
<div class="vbo-bookdet-wrap"> |
| 678 |
<div class="vbo-bookdet-head"> |
| 679 |
<span>ID</span> |
| 680 |
</div> |
| 681 |
<div class="vbo-bookdet-foot"> |
| 682 |
<span><?php echo $ord['id']; ?></span> |
| 683 |
</div> |
| 684 |
</div> |
| 685 |
<div class="vbo-bookdet-wrap"> |
| 686 |
<div class="vbo-bookdet-head"> |
| 687 |
<span><?php echo JText::translate('VBEDITORDERONE'); ?></span> |
| 688 |
</div> |
| 689 |
<div class="vbo-bookdet-foot"> |
| 690 |
<span><?php echo date(str_replace("/", $datesep, $df).' H:i', $ord['ts']); ?></span> |
| 691 |
</div> |
| 692 |
</div> |
| 693 |
<?php |
| 694 |
if (count($customer)) { |
| 695 |
?> |
| 696 |
<div class="vbo-bookdet-wrap"> |
| 697 |
<div class="vbo-bookdet-head"> |
| 698 |
<span><?php echo JText::translate('VBCUSTOMERNOMINATIVE'); ?></span> |
| 699 |
</div> |
| 700 |
<div class="vbo-bookdet-foot"> |
| 701 |
<div class="vbo-customer-info-box"> |
| 702 |
<div class="vbo-customer-info-box-name"> |
| 703 |
<?php echo (isset($customer['country_img']) ? $customer['country_img'] . ' ' : ''); ?> |
| 704 |
|
| 705 |
<?php if ($canDo->authorise('core.edit', 'com_vikbooking') && $canDo->authorise('core.vbo.management', 'com_vikbooking')): ?> |
| 706 |
<a href="index.php?option=com_vikbooking&task=editcustomer&cid[]=<?php echo $customer['id']; ?>" target="_blank"><?php echo ltrim($customer['first_name'] . ' ' . $customer['last_name']); ?></a> |
| 707 |
<?php else: ?> |
| 708 |
<?php echo ltrim($customer['first_name'] . ' ' . $customer['last_name']); ?> |
| 709 |
<?php endif; ?> |
| 710 |
</div> |
| 711 |
</div> |
| 712 |
</div> |
| 713 |
</div> |
| 714 |
<?php |
| 715 |
} |
| 716 |
?> |
| 717 |
<div class="vbo-bookdet-wrap"> |
| 718 |
<div class="vbo-bookdet-head"> |
| 719 |
<span><?php echo JText::translate('VBEDITORDERROOMSNUM'); ?></span> |
| 720 |
</div> |
| 721 |
<div class="vbo-bookdet-foot"> |
| 722 |
<?php echo $ord['roomsnum']; ?> |
| 723 |
</div> |
| 724 |
</div> |
| 725 |
<div class="vbo-bookdet-wrap"> |
| 726 |
<div class="vbo-bookdet-head"> |
| 727 |
<span><?php echo JText::translate('VBEDITORDERFOUR'); ?></span> |
| 728 |
</div> |
| 729 |
<div class="vbo-bookdet-foot"> |
| 730 |
<span><?php echo $ord['days']; ?></span> |
| 731 |
<?php |
| 732 |
if ($ord['split_stay']) { |
| 733 |
?> |
| 734 |
<span class="hasTooltip" title="<?php echo JHtml::fetch('esc_attr', JText::translate('VBO_SPLIT_STAY')); ?>"><?php VikBookingIcons::e('random'); ?></span> |
| 735 |
<?php |
| 736 |
} |
| 737 |
?> |
| 738 |
</div> |
| 739 |
</div> |
| 740 |
<div class="vbo-bookdet-wrap"> |
| 741 |
<div class="vbo-bookdet-head"> |
| 742 |
<span><?php echo JText::translate('VBEDITORDERFIVE'); ?></span> |
| 743 |
</div> |
| 744 |
<div class="vbo-bookdet-foot"> |
| 745 |
<?php |
| 746 |
$short_wday = JText::translate('VB'.strtoupper(substr($checkin_info['weekday'], 0, 3))); |
| 747 |
?> |
| 748 |
<?php echo $short_wday.', '.date(str_replace("/", $datesep, $df).' H:i', $ord['checkin']); ?> |
| 749 |
</div> |
| 750 |
</div> |
| 751 |
<div class="vbo-bookdet-wrap"> |
| 752 |
<div class="vbo-bookdet-head"> |
| 753 |
<span><?php echo JText::translate('VBEDITORDERSIX'); ?></span> |
| 754 |
</div> |
| 755 |
<div class="vbo-bookdet-foot"> |
| 756 |
<?php |
| 757 |
$short_wday = JText::translate('VB'.strtoupper(substr($checkout_info['weekday'], 0, 3))); |
| 758 |
?> |
| 759 |
<?php echo $short_wday.', '.date(str_replace("/", $datesep, $df).' H:i', $ord['checkout']); ?> |
| 760 |
</div> |
| 761 |
</div> |
| 762 |
<?php |
| 763 |
if (!empty($ord['channel'])) { |
| 764 |
$ota_logo_img = VikBooking::getVcmChannelsLogo($ord['channel']); |
| 765 |
if ($ota_logo_img === false) { |
| 766 |
$ota_logo_img = $otachannel_name; |
| 767 |
} else { |
| 768 |
$ota_logo_img = '<img src="'.$ota_logo_img.'" class="vbo-channelimg-medium"/>'; |
| 769 |
} |
| 770 |
?> |
| 771 |
<div class="vbo-bookdet-wrap"> |
| 772 |
<div class="vbo-bookdet-head"> |
| 773 |
<span><?php echo JText::translate('VBPVIEWORDERCHANNEL'); ?></span> |
| 774 |
</div> |
| 775 |
<div class="vbo-bookdet-foot"> |
| 776 |
<span><?php echo $ota_logo_img; ?></span> |
| 777 |
</div> |
| 778 |
</div> |
| 779 |
<?php |
| 780 |
} |
| 781 |
?> |
| 782 |
<div class="vbo-bookdet-wrap"> |
| 783 |
<div class="vbo-bookdet-head"> |
| 784 |
<span><?php echo JText::translate('VBSTATUS'); ?></span> |
| 785 |
</div> |
| 786 |
<div class="vbo-bookdet-foot"> |
| 787 |
<span><?php echo $saystaus; ?></span> |
| 788 |
</div> |
| 789 |
</div> |
| 790 |
</div> |
| 791 |
|
| 792 |
<?php |
| 793 |
if (!empty($ord['channel']) && !empty($ord['idorderota'])) { |
| 794 |
?> |
| 795 |
<p class="warn"><?php echo JText::translate('VBO_WARN_CM_RES_MOD'); ?></p> |
| 796 |
<?php |
| 797 |
} |
| 798 |
?> |
| 799 |
|
| 800 |
<div class="vbo-bookingdet-innertop"> |
| 801 |
<div class="vbo-bookingdet-commands"> |
| 802 |
<div class="vbo-bookingdet-command"> |
| 803 |
<button type="button" class="btn btn-danger" onclick="if (confirm('<?php echo addslashes(JText::translate('VBDELCONFIRM')); ?>')){document.location.href='index.php?option=com_vikbooking&task=removeorders&goto=<?php echo $ord['id']; ?>&cid[]=<?php echo $ord['id']; ?>';}"><?php VikBookingIcons::e('trash'); ?> <?php echo $ord['status'] == 'cancelled' ? JText::translate('VBO_PURGERM_RESERVATION') : JText::translate('VBMAINEBUSYDEL'); ?></button> |
| 804 |
</div> |
| 805 |
</div> |
| 806 |
<div class="vbo-bookingdet-tabs"> |
| 807 |
<div class="vbo-bookingdet-tab vbo-bookingdet-tab-active" data-vbotab="vbo-tab-details"><?php echo JText::translate('VBMODRES'); ?></div> |
| 808 |
</div> |
| 809 |
</div> |
| 810 |
|
| 811 |
<div class="vbo-bookingdet-tab-cont" id="vbo-tab-details" style="display: block;"> |
| 812 |
<div class="vbo-bookingdet-innercontainer"> |
| 813 |
<div class="vbo-bookingdet-customer"> |
| 814 |
<div class="vbo-bookingdet-detcont<?php echo $ord['closure'] > 0 ? ' vbo-bookingdet-closure' : ''; ?>"> |
| 815 |
<div class="vbo-editbooking-custarea-lbl"> |
| 816 |
<?php echo JText::translate('VBEDITORDERTWO'); ?> |
| 817 |
</div> |
| 818 |
<div class="vbo-editbooking-custarea"> |
| 819 |
<textarea name="custdata"><?php echo htmlspecialchars($ord['custdata']); ?></textarea> |
| 820 |
</div> |
| 821 |
</div> |
| 822 |
<div class="vbo-bookingdet-detcont"> |
| 823 |
<?php |
| 824 |
$canforce = VikRequest::getInt('canforce', 0, 'request'); |
| 825 |
if ($canforce) { |
| 826 |
?> |
| 827 |
<div class="vbo-bookingdet-checkdt"> |
| 828 |
<label for="forcebooking-on"> |
| 829 |
<?php echo $vbo_app->createPopover(array('title' => JText::translate('VBO_FORCE_BOOKDATES'), 'content' => JText::translate('VBO_FORCE_BOOKDATES_HELP'))); ?> |
| 830 |
<?php echo JText::translate('VBO_FORCE_BOOKDATES'); ?> |
| 831 |
</label> |
| 832 |
<div> |
| 833 |
<?php echo $vbo_app->printYesNoButtons('forcebooking', JText::translate('VBYES'), JText::translate('VBNO'), 0, 1, 0); ?> |
| 834 |
</div> |
| 835 |
</div> |
| 836 |
<?php |
| 837 |
} |
| 838 |
?> |
| 839 |
<div class="vbo-bookingdet-checkdt"> |
| 840 |
<label for="checkindate"><?php echo JText::translate('VBPEDITBUSYFOUR'); ?></label> |
| 841 |
<?php echo $vbo_app->getCalendar($rit, 'checkindate', 'checkindate', $nowdf, array('class'=>'', 'size'=>'10', 'maxlength'=>'19', 'todayBtn' => 'true')); ?> |
| 842 |
<span class="vbo-time-selects"> |
| 843 |
<select name="checkinh"><?php echo $ritho; ?></select> |
| 844 |
<span class="vbo-time-selects-divider">:</span> |
| 845 |
<select name="checkinm"><?php echo $ritmi; ?></select> |
| 846 |
</span> |
| 847 |
</div> |
| 848 |
<div class="vbo-bookingdet-checkdt"> |
| 849 |
<label for="checkoutdate"><?php echo JText::translate('VBPEDITBUSYSIX'); ?></label> |
| 850 |
<?php echo $vbo_app->getCalendar($con, 'checkoutdate', 'checkoutdate', $nowdf, array('class'=>'', 'size'=>'10', 'maxlength'=>'19', 'todayBtn' => 'true')); ?> |
| 851 |
<span class="vbo-time-selects"> |
| 852 |
<select name="checkouth"><?php echo $conho; ?></select> |
| 853 |
<span class="vbo-time-selects-divider">:</span> |
| 854 |
<select name="checkoutm"><?php echo $conmi; ?></select> |
| 855 |
</span> |
| 856 |
</div> |
| 857 |
<?php |
| 858 |
/** |
| 859 |
* Check if the booking allows to report a stay change to the OTA (for all rooms booked). |
| 860 |
* |
| 861 |
* @since 1.16.8 (J) - 1.6.8 (WP) |
| 862 |
* |
| 863 |
* @requires VCM >= 1.8.24 |
| 864 |
*/ |
| 865 |
if (!empty($otachannel_name) && class_exists('VCMOtaReporting') && VCMOtaReporting::getInstance($ord)->stayChangeAllowed()) { |
| 866 |
?> |
| 867 |
<div class="vbo-bookingdet-checkdt vbo-editbook-report-stay-change-ota"> |
| 868 |
<label for="ota_stay_change_all-on"><?php echo JText::sprintf('VBO_REPORT_STAY_CHANGE_OTA', $otachannel_name); ?></label> |
| 869 |
<div> |
| 870 |
<?php echo $vbo_app->printYesNoButtons('ota_stay_change_all', JText::translate('VBYES'), JText::translate('VBNO'), 0, 1, 0, "jQuery('#vbo-report-stay-change-ota-allr').toggle();"); ?> |
| 871 |
</div> |
| 872 |
<p id="vbo-report-stay-change-ota-allr" class="info" style="display: none;"><?php echo JText::sprintf('VBO_REPORT_STAY_CHANGE_OTA_ALLR_HELP', $otachannel_name); ?></p> |
| 873 |
</div> |
| 874 |
<?php |
| 875 |
} |
| 876 |
?> |
| 877 |
</div> |
| 878 |
</div> |
| 879 |
<div class="vbo-editbooking-summary"> |
| 880 |
<?php |
| 881 |
if ($ord && (!empty($ordersrooms[0]['idtar']) || $is_package || $is_cust_cost)) { |
| 882 |
// order from front end or correctly saved - start |
| 883 |
$proceedtars = true; |
| 884 |
$rooms = array(); |
| 885 |
$tars = array(); |
| 886 |
$arrpeople = array(); |
| 887 |
foreach ($ordersrooms as $kor => $or) { |
| 888 |
$num = $kor + 1; |
| 889 |
$rooms[$num] = $or; |
| 890 |
$arrpeople[$num]['adults'] = $or['adults']; |
| 891 |
$arrpeople[$num]['children'] = $or['children']; |
| 892 |
|
| 893 |
if ($is_package) { |
| 894 |
continue; |
| 895 |
} |
| 896 |
|
| 897 |
// default values to be considered |
| 898 |
$room_nights = (int)$ord['days']; |
| 899 |
$room_checkin = $ord['checkin']; |
| 900 |
$room_checkout = $ord['checkout']; |
| 901 |
if ($ord['split_stay'] && count($room_stay_dates) && isset($room_stay_dates[$kor]) && $room_stay_dates[$kor]['idroom'] == $or['idroom']) { |
| 902 |
// use appropriate values for split stays |
| 903 |
$room_nights = $room_stay_dates[$kor]['nights']; |
| 904 |
$room_checkin = $room_stay_dates[$kor]['checkin']; |
| 905 |
$room_checkout = $room_stay_dates[$kor]['checkout']; |
| 906 |
} |
| 907 |
|
| 908 |
// seek for rates |
| 909 |
$q = "SELECT * FROM `#__vikbooking_dispcost` WHERE `days`=" . $room_nights . " AND `idroom`=" . (int)$or['idroom'] . " ORDER BY `#__vikbooking_dispcost`.`cost` ASC;"; |
| 910 |
$dbo->setQuery($q); |
| 911 |
$tar = $dbo->loadAssocList(); |
| 912 |
if (!$tar) { |
| 913 |
$proceedtars = false; |
| 914 |
break; |
| 915 |
} |
| 916 |
$tar = VikBooking::applySeasonsRoom($tar, $room_checkin, $room_checkout); |
| 917 |
|
| 918 |
// apply OBP rules |
| 919 |
$tar = VBORoomHelper::getInstance()->applyOBPRules($tar, $or, $or['adults']); |
| 920 |
|
| 921 |
// push tariffs for this room |
| 922 |
$tars[$num] = $tar; |
| 923 |
} |
| 924 |
if ($proceedtars) { |
| 925 |
?> |
| 926 |
<input type="hidden" name="areprices" value="yes"/> |
| 927 |
<input type="hidden" name="rm_room_oid" id="rm_room_oid" value="" /> |
| 928 |
<div class="vbo-editbooking-tbl"> |
| 929 |
<?php |
| 930 |
// rooms loop start |
| 931 |
foreach ($ordersrooms as $kor => $or) { |
| 932 |
$num = $kor + 1; |
| 933 |
|
| 934 |
// default values to be considered |
| 935 |
$room_nights = (int)$ord['days']; |
| 936 |
$room_checkin = $ord['checkin']; |
| 937 |
$room_checkout = $ord['checkout']; |
| 938 |
if ($ord['split_stay'] && count($room_stay_dates) && isset($room_stay_dates[$kor]) && $room_stay_dates[$kor]['idroom'] == $or['idroom']) { |
| 939 |
// use appropriate values for split stays |
| 940 |
$room_nights = $room_stay_dates[$kor]['nights']; |
| 941 |
$room_checkin = $room_stay_dates[$kor]['checkin']; |
| 942 |
$room_checkout = $room_stay_dates[$kor]['checkout']; |
| 943 |
} |
| 944 |
?> |
| 945 |
<div class="vbo-bookingdet-summary-room vbo-editbooking-summary-room"> |
| 946 |
<div class="vbo-editbooking-summary-room-head"> |
| 947 |
<div class="vbo-bookingdet-summary-roomnum"><?php VikBookingIcons::e('bed'); ?> <?php echo $or['name']; ?></div> |
| 948 |
<?php |
| 949 |
if ($ord['roomsnum'] > 1) { |
| 950 |
?> |
| 951 |
<div class="vbo-editbooking-room-remove pro-feature"> |
| 952 |
<button type="button" class="btn btn-danger" onclick="vboConfirmRmRoom('<?php echo $or['id']; ?>');"><?php VikBookingIcons::e('times-circle'); ?> <?php echo JText::translate('VBOREMOVEROOM'); ?></button> |
| 953 |
</div> |
| 954 |
<?php |
| 955 |
} |
| 956 |
$switch_code = ''; |
| 957 |
if ($switching) { |
| 958 |
$switch_code = sprintf($switcher, 'switch_'.$or['id'], $or['id'], $or['idroom'], $or['id']); |
| 959 |
?> |
| 960 |
<div class="vbo-editbooking-room-switch pro-feature"> |
| 961 |
<?php echo $switch_code; ?> |
| 962 |
</div> |
| 963 |
<?php |
| 964 |
} |
| 965 |
?> |
| 966 |
<div class="vbo-bookingdet-summary-roomguests"> |
| 967 |
<?php VikBookingIcons::e('male'); ?> |
| 968 |
<div class="vbo-bookingdet-summary-roomadults"> |
| 969 |
<span><?php echo JText::translate('VBEDITORDERADULTS'); ?>:</span> <?php echo $arrpeople[$num]['adults']; ?> |
| 970 |
</div> |
| 971 |
<?php |
| 972 |
if ($arrpeople[$num]['children'] > 0) { |
| 973 |
?> |
| 974 |
<div class="vbo-bookingdet-summary-roomchildren"> |
| 975 |
<span><?php echo JText::translate('VBEDITORDERCHILDREN'); ?>:</span> <?php echo $arrpeople[$num]['children']; ?> |
| 976 |
</div> |
| 977 |
<?php |
| 978 |
} |
| 979 |
?> |
| 980 |
</div> |
| 981 |
<?php |
| 982 |
if (!empty($arrpeople[$num]['t_first_name'])) { |
| 983 |
?> |
| 984 |
<div class="vbo-bookingdet-summary-guestname"> |
| 985 |
<span><?php echo $arrpeople[$num]['t_first_name'].' '.$arrpeople[$num]['t_last_name']; ?></span> |
| 986 |
</div> |
| 987 |
<?php |
| 988 |
} |
| 989 |
?> |
| 990 |
</div> |
| 991 |
<?php |
| 992 |
// split stay |
| 993 |
if ($ord['split_stay'] && count($room_stay_dates) && isset($room_stay_dates[$kor]) && $room_stay_dates[$kor]['idroom'] == $or['idroom']) { |
| 994 |
// print split stay information for this room |
| 995 |
$room_stay_nights = $room_stay_dates[$kor]['nights']; |
| 996 |
// calendar default values |
| 997 |
$cal_def_checkin = date($df, $room_stay_dates[$kor]['checkin']); |
| 998 |
$cal_def_checkout = date($df, $room_stay_dates[$kor]['checkout']); |
| 999 |
$js_cal_def_vals[] = [ |
| 1000 |
'id' => 'room-splitstay-checkin' . $num, |
| 1001 |
'value' => $cal_def_checkin, |
| 1002 |
]; |
| 1003 |
$js_cal_def_vals[] = [ |
| 1004 |
'id' => 'room-splitstay-checkout' . $num, |
| 1005 |
'value' => $cal_def_checkout, |
| 1006 |
]; |
| 1007 |
?> |
| 1008 |
<input type="hidden" name="split_stay_data[<?php echo $kor; ?>][idroom]" value="<?php echo $room_stay_dates[$kor]['idroom']; ?>" /> |
| 1009 |
<input type="hidden" name="split_stay_data[<?php echo $kor; ?>][idbusy]" value="<?php echo !empty($room_stay_dates[$kor]['id']) ? $room_stay_dates[$kor]['id'] : ''; ?>" /> |
| 1010 |
<div class="vbo-editbooking-room-splitstay"> |
| 1011 |
<h4> |
| 1012 |
<span class="vbo-editbooking-room-splitstay-first"><?php VikBookingIcons::e('random'); ?> <?php echo JText::translate('VBO_SPLIT_STAY'); ?></span> |
| 1013 |
<span class="vbo-editbooking-room-splitstay-second"><?php VikBookingIcons::e('moon'); ?> <?php echo $room_stay_nights . ' ' . ($room_stay_nights > 1 ? JText::translate('VBDAYS') : JText::translate('VBDAY')); ?></span> |
| 1014 |
</h4> |
| 1015 |
<div class="vbo-editbooking-room-traveler-guestsinfo vbo-editbooking-room-splitstay-details"> |
| 1016 |
<div class="vbo-editbooking-room-splitstay-date vbo-editbooking-room-splitstay-date-in"> |
| 1017 |
<label for="room-splitstay-checkin<?php echo $num; ?>"><?php echo JText::translate('VBPEDITBUSYFOUR'); ?></label> |
| 1018 |
<?php echo $vbo_app->getCalendar($cal_def_checkin, 'split_stay_data[' . $kor . '][checkin]', 'room-splitstay-checkin' . $num, $nowdf, array('class'=>'', 'size'=>'10', 'maxlength'=>'19', 'todayBtn' => 'true')); ?> |
| 1019 |
</div> |
| 1020 |
<div class="vbo-editbooking-room-splitstay-date vbo-editbooking-room-splitstay-date-out"> |
| 1021 |
<label for="room-splitstay-checkout<?php echo $num; ?>"><?php echo JText::translate('VBPEDITBUSYSIX'); ?></label> |
| 1022 |
<?php echo $vbo_app->getCalendar($cal_def_checkout, 'split_stay_data[' . $kor . '][checkout]', 'room-splitstay-checkout' . $num, $nowdf, array('class'=>'', 'size'=>'10', 'maxlength'=>'19', 'todayBtn' => 'true')); ?> |
| 1023 |
</div> |
| 1024 |
</div> |
| 1025 |
</div> |
| 1026 |
<?php |
| 1027 |
} |
| 1028 |
|
| 1029 |
if (!$ord['split_stay'] && !$ord['closure'] && $ord['roomsnum'] > 1 && $ord['days'] > 1 && $ord['status'] == 'confirmed') { |
| 1030 |
/** |
| 1031 |
* We allow to modify the nights of stay for each room in the limits of the booking dates. |
| 1032 |
* This function will only affect the availability, not the calculation of the rate plans/options. |
| 1033 |
* It is meant to simply free up rooms on dates within the booking check-in and check-out dates. |
| 1034 |
* |
| 1035 |
* @since 1.16.0 (J) - 1.6.0 (WP) |
| 1036 |
*/ |
| 1037 |
$room_now_checkin = $ord['checkin']; |
| 1038 |
$room_now_checkout = $ord['checkout']; |
| 1039 |
$room_now_nights = $ord['days']; |
| 1040 |
if (isset($room_stay_records[$kor]) && $room_stay_records[$kor]['idroom'] == $or['idroom']) { |
| 1041 |
$room_now_checkin = $room_stay_records[$kor]['checkin']; |
| 1042 |
$room_now_checkout = $room_stay_records[$kor]['checkout']; |
| 1043 |
$room_now_nights = $av_helper->countNightsOfStay($room_now_checkin, $room_now_checkout); |
| 1044 |
} |
| 1045 |
?> |
| 1046 |
<div class="vbo-editbooking-room-nights-info"> |
| 1047 |
<div class="vbo-editbooking-room-nights-info-top"> |
| 1048 |
<h4> |
| 1049 |
<span class="vbo-editbooking-room-nights-txt"><?php VikBookingIcons::e('moon'); ?> <?php echo $room_now_nights . ' ' . ($room_now_nights > 1 ? JText::translate('VBDAYS') : JText::translate('VBDAY')); ?></span> |
| 1050 |
</h4> |
| 1051 |
<div class="vbo-editbooking-room-nights-modify"> |
| 1052 |
<label for="room_modify_dates<?php echo $kor; ?>-on"><?php echo JText::translate('VBO_MODIFY_DATES'); ?></label> |
| 1053 |
<span><?php echo $vbo_app->printYesNoButtons('room_modify_dates' . $kor, JText::translate('VBYES'), JText::translate('VBNO'), 0, 1, 0, 'vboEditbusyModifyRoomDates(this.checked, ' . $kor . ')'); ?></span> |
| 1054 |
</div> |
| 1055 |
</div> |
| 1056 |
<div class="vbo-editbooking-room-traveler-guestsinfo vbo-editbooking-room-nights-modify-details" data-roomind="<?php echo $kor; ?>" style="display: none;"> |
| 1057 |
<div class="vbo-editbooking-room-modify-date vbo-editbooking-room-modify-date-in"> |
| 1058 |
<label for="room-modify-checkin<?php echo $num; ?>"><?php echo JText::translate('VBPEDITBUSYFOUR'); ?></label> |
| 1059 |
<div class="vbo-input-calendar-box"> |
| 1060 |
<input type="text" name="<?php echo 'room_modify_dates[' . $kor . '][checkin]'; ?>" class="vbo-editbusy-room-modify-dates-checkin" value="" data-current-value="<?php echo date($df, $room_now_checkin); ?>" autocomplete="off" /><?php VikBookingIcons::e('calendar', 'vbo-caltrigger'); ?> |
| 1061 |
</div> |
| 1062 |
</div> |
| 1063 |
<div class="vbo-editbooking-room-modify-date vbo-editbooking-room-modify-date-out"> |
| 1064 |
<label for="room-modify-checkout<?php echo $num; ?>"><?php echo JText::translate('VBPEDITBUSYSIX'); ?></label> |
| 1065 |
<div class="vbo-input-calendar-box"> |
| 1066 |
<input type="text" name="<?php echo 'room_modify_dates[' . $kor . '][checkout]'; ?>" class="vbo-editbusy-room-modify-dates-checkout" value="" data-current-value="<?php echo date($df, $room_now_checkout); ?>" autocomplete="off" /><?php VikBookingIcons::e('calendar', 'vbo-caltrigger'); ?> |
| 1067 |
</div> |
| 1068 |
</div> |
| 1069 |
<div class="vbo-editbooking-room-modify-date vbo-editbooking-room-modify-date-help"> |
| 1070 |
<?php echo $vbo_app->createPopover(array('title' => JText::translate('VBO_MODIFY_DATES'), 'content' => JText::translate('VBO_MODIFY_DATES_HELP'))); ?> |
| 1071 |
</div> |
| 1072 |
<?php |
| 1073 |
/** |
| 1074 |
* Check if the booking allows to report a stay change to the OTA (for the current room booked). |
| 1075 |
* |
| 1076 |
* @since 1.16.8 (J) - 1.6.8 (WP) |
| 1077 |
* |
| 1078 |
* @requires VCM >= 1.8.24 |
| 1079 |
*/ |
| 1080 |
if (!empty($otachannel_name) && class_exists('VCMOtaReporting') && VCMOtaReporting::getInstance($ord)->stayChangeAllowed()) { |
| 1081 |
?> |
| 1082 |
<div class="vbo-editbooking-room-modify-date vbo-editbook-report-stay-change-ota"> |
| 1083 |
<label for="ota_stay_change_room_<?php echo $kor; ?>-on"><?php echo JText::sprintf('VBO_REPORT_STAY_CHANGE_OTA', $otachannel_name); ?></label> |
| 1084 |
<div> |
| 1085 |
<?php echo $vbo_app->printYesNoButtons('ota_stay_change_room_' . $kor, JText::translate('VBYES'), JText::translate('VBNO'), 0, 1, 0, "jQuery('#vbo-report-stay-change-ota-oner{$kor}').toggle();"); ?> |
| 1086 |
</div> |
| 1087 |
<p id="vbo-report-stay-change-ota-oner<?php echo $kor; ?>" class="info" style="display: none;"><?php echo JText::sprintf('VBO_REPORT_STAY_CHANGE_OTA_ONER_HELP', $otachannel_name); ?></p> |
| 1088 |
</div> |
| 1089 |
<?php |
| 1090 |
} |
| 1091 |
?> |
| 1092 |
</div> |
| 1093 |
</div> |
| 1094 |
<?php |
| 1095 |
} |
| 1096 |
|
| 1097 |
$from_a = $or['fromadult']; |
| 1098 |
$from_a = $from_a > $or['adults'] ? $or['adults'] : $from_a; |
| 1099 |
$to_a = $or['toadult']; |
| 1100 |
$to_a = $to_a < $or['adults'] ? $or['adults'] : $to_a; |
| 1101 |
$from_c = $or['fromchild']; |
| 1102 |
$from_c = $from_c > $or['children'] ? $or['children'] : $from_c; |
| 1103 |
$to_c = $or['tochild']; |
| 1104 |
$to_c = $to_c < $or['children'] ? $or['children'] : $to_c; |
| 1105 |
$adults_opts = ''; |
| 1106 |
$children_opts = ''; |
| 1107 |
for ($z = $from_a; $z <= $to_a; $z++) { |
| 1108 |
$adults_opts .= '<option value="'.$z.'"'.($z == $or['adults'] ? ' selected="selected"' : '').'>'.$z.'</option>'; |
| 1109 |
} |
| 1110 |
for ($z = $from_c; $z <= $to_c; $z++) { |
| 1111 |
$children_opts .= '<option value="'.$z.'"'.($z == $or['children'] ? ' selected="selected"' : '').'>'.$z.'</option>'; |
| 1112 |
} |
| 1113 |
?> |
| 1114 |
<div class="vbo-editbooking-room-traveler"> |
| 1115 |
<h4><?php echo JText::translate('VBPEDITBUSYTRAVELERINFO'); ?></h4> |
| 1116 |
<div class="vbo-editbooking-room-traveler-guestsinfo"> |
| 1117 |
<div class="vbo-editbooking-room-traveler-name"> |
| 1118 |
<label for="t_first_name<?php echo $num; ?>"><?php echo JText::translate('VBTRAVELERNAME'); ?></label> |
| 1119 |
<input type="text" name="t_first_name<?php echo $num; ?>" id="t_first_name<?php echo $num; ?>" value="<?php echo $this->escape($or['t_first_name']); ?>" size="20" /> |
| 1120 |
</div> |
| 1121 |
<div class="vbo-editbooking-room-traveler-name"> |
| 1122 |
<label for="t_last_name<?php echo $num; ?>"><?php echo JText::translate('VBTRAVELERLNAME'); ?></label> |
| 1123 |
<input type="text" name="t_last_name<?php echo $num; ?>" id="t_last_name<?php echo $num; ?>" value="<?php echo $this->escape($or['t_last_name']); ?>" size="20" /> |
| 1124 |
</div> |
| 1125 |
<div class="vbo-editbooking-room-traveler-guestnum"> |
| 1126 |
<label for="adults<?php echo $num; ?>"><?php echo JText::translate('VBMAILADULTS'); ?></label> |
| 1127 |
<select name="adults<?php echo $num; ?>" id="adults<?php echo $num; ?>"> |
| 1128 |
<?php echo $adults_opts; ?> |
| 1129 |
</select> |
| 1130 |
</div> |
| 1131 |
<div class="vbo-editbooking-room-traveler-guestnum"> |
| 1132 |
<label for="children<?php echo $num; ?>"><?php echo JText::translate('VBMAILCHILDREN'); ?></label> |
| 1133 |
<select name="children<?php echo $num; ?>" id="children<?php echo $num; ?>"> |
| 1134 |
<?php echo $children_opts; ?> |
| 1135 |
</select> |
| 1136 |
</div> |
| 1137 |
<div class="vbo-editbooking-room-traveler-guestnum"> |
| 1138 |
<label for="pets<?php echo $num; ?>"><?php VikBookingIcons::e('dog'); ?> <?php echo JText::translate('VBO_PETS'); ?></label> |
| 1139 |
<input type="number" class="vbo-small-input" name="pets<?php echo $num; ?>" id="pets<?php echo $num; ?>" value="<?php echo (int)$or['pets']; ?>" min="0" max="99" /> |
| 1140 |
</div> |
| 1141 |
</div> |
| 1142 |
</div> |
| 1143 |
<div class="vbo-editbooking-room-pricetypes"> |
| 1144 |
<h4><?php echo JText::translate('VBPEDITBUSYSEVEN'); ?></h4> |
| 1145 |
<div class="vbo-editbooking-room-pricetypes-wrap"> |
| 1146 |
<?php |
| 1147 |
$is_cust_cost = !empty($or['cust_cost']) && $or['cust_cost'] > 0.00 ? true : false; |
| 1148 |
$active_rplan_id = 0; |
| 1149 |
if ($is_package || $is_cust_cost) { |
| 1150 |
if ($is_package) { |
| 1151 |
$pkg_name = (!empty($or['pkg_name']) ? $or['pkg_name'] : JText::translate('VBOROOMCUSTRATEPLAN')); |
| 1152 |
?> |
| 1153 |
<div class="vbo-editbooking-room-pricetype vbo-editbooking-room-pricetype-active"> |
| 1154 |
<div class="vbo-editbooking-room-pricetype-inner"> |
| 1155 |
<label for="pid<?php echo $num.$or['id']; ?>"><?php echo $pkg_name; ?></label> |
| 1156 |
<div class="vbo-editbooking-room-pricetype-cost"> |
| 1157 |
<?php echo $currencysymb." ".VikBooking::numberFormat($or['cust_cost']); ?> |
| 1158 |
</div> |
| 1159 |
</div> |
| 1160 |
<div class="vbo-editbooking-room-pricetype-check"> |
| 1161 |
<input type="radio" name="pkgid<?php echo $num; ?>" id="pid<?php echo $num.$or['id']; ?>" value="<?php echo $or['pkg_id']; ?>" checked="checked" /> |
| 1162 |
</div> |
| 1163 |
</div> |
| 1164 |
<?php |
| 1165 |
} else { |
| 1166 |
//custom rate |
| 1167 |
?> |
| 1168 |
<div class="vbo-editbooking-room-pricetype vbo-editbooking-room-pricetype-active"> |
| 1169 |
<div class="vbo-editbooking-room-pricetype-inner"> |
| 1170 |
<label for="pid<?php echo $num.$or['id']; ?>"> |
| 1171 |
<?php echo JText::translate('VBOROOMCUSTRATEPLAN').(!empty($or['otarplan']) ? ' ('.ucwords($or['otarplan']).')' : ''); ?> |
| 1172 |
</label> |
| 1173 |
<div class="vbo-editbooking-room-pricetype-cost"> |
| 1174 |
<?php echo $currencysymb; ?> <input type="number" step="any" name="cust_cost<?php echo $num; ?>" value="<?php echo $or['cust_cost']; ?>" size="4" onchange="if (this.value.length) {document.getElementById('pid<?php echo $num.$or['id']; ?>').checked = true; jQuery('#pid<?php echo $num.$or['id']; ?>').trigger('change');}"/> |
| 1175 |
<div class="vbo-editbooking-room-pricetype-seltax" id="tax<?php echo $num; ?>" style="display: block;"> |
| 1176 |
<?php echo (!empty($wiva) ? str_replace('%s', $num, str_replace('data-aliqid="'.(int)$or['cust_idiva'].'"', 'selected="selected"', $wiva)) : ''); ?> |
| 1177 |
</div> |
| 1178 |
</div> |
| 1179 |
</div> |
| 1180 |
<div class="vbo-editbooking-room-pricetype-check"> |
| 1181 |
<input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="pid<?php echo $num.$or['id']; ?>" value="" checked="checked" /> |
| 1182 |
</div> |
| 1183 |
</div> |
| 1184 |
<?php |
| 1185 |
//print the standard rates anyway |
| 1186 |
foreach ($tars[$num] as $k => $t) { |
| 1187 |
?> |
| 1188 |
<div class="vbo-editbooking-room-pricetype"> |
| 1189 |
<div class="vbo-editbooking-room-pricetype-inner"> |
| 1190 |
<label for="pid<?php echo $num.$t['idprice']; ?>"><?php echo VikBooking::getPriceName($t['idprice']).(strlen((string)$t['attrdata']) ? " - ".VikBooking::getPriceAttr($t['idprice']).": ".$t['attrdata'] : ""); ?></label> |
| 1191 |
<div class="vbo-editbooking-room-pricetype-cost"> |
| 1192 |
<?php echo $currencysymb." ".VikBooking::numberFormat($t['cost']); ?> |
| 1193 |
</div> |
| 1194 |
</div> |
| 1195 |
<div class="vbo-editbooking-room-pricetype-check"> |
| 1196 |
<input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="pid<?php echo $num.$t['idprice']; ?>" value="<?php echo $t['idprice']; ?>" /> |
| 1197 |
</div> |
| 1198 |
</div> |
| 1199 |
<?php |
| 1200 |
} |
| 1201 |
} |
| 1202 |
} else { |
| 1203 |
$sel_rate_changed = false; |
| 1204 |
foreach ($tars[$num] as $k => $t) { |
| 1205 |
$sel_rate_changed = $t['id'] == $or['idtar'] && !empty($or['room_cost']) ? $or['room_cost'] : $sel_rate_changed; |
| 1206 |
$format_cost = VikBooking::numberFormat($t['cost']); |
| 1207 |
if ($t['id'] == $or['idtar'] && !empty($or['room_cost'])) { |
| 1208 |
$active_rplan_id = $t['idprice']; |
| 1209 |
} |
| 1210 |
?> |
| 1211 |
<div class="vbo-editbooking-room-pricetype<?php echo $t['id'] == $or['idtar'] ? ' vbo-editbooking-room-pricetype-active' : ''; ?>"> |
| 1212 |
<div class="vbo-editbooking-room-pricetype-inner"> |
| 1213 |
<label for="pid<?php echo $num.$t['idprice']; ?>"><?php echo VikBooking::getPriceName($t['idprice']).(strlen((string)$t['attrdata']) ? " - ".VikBooking::getPriceAttr($t['idprice']).": ".$t['attrdata'] : ""); ?></label> |
| 1214 |
<div class="vbo-editbooking-room-pricetype-cost"> |
| 1215 |
<?php echo $currencysymb." ".$format_cost; ?> |
| 1216 |
</div> |
| 1217 |
</div> |
| 1218 |
<div class="vbo-editbooking-room-pricetype-check"> |
| 1219 |
<input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="pid<?php echo $num.$t['idprice']; ?>" value="<?php echo $t['idprice']; ?>"<?php echo ($t['id'] == $or['idtar'] ? " checked=\"checked\"" : ""); ?>/> |
| 1220 |
</div> |
| 1221 |
<?php |
| 1222 |
if ($t['id'] == $or['idtar'] && !empty($or['room_cost']) && VikBooking::numberFormat($or['room_cost']) != $format_cost) { |
| 1223 |
/** |
| 1224 |
* The current price is different from the price paid at the time of booking. |
| 1225 |
* Display a checkbox with the information of the previous price to keep it. |
| 1226 |
* |
| 1227 |
* @since 1.3.0 |
| 1228 |
*/ |
| 1229 |
?> |
| 1230 |
<div class="vbo-editbooking-room-pricetype-older"> |
| 1231 |
<div class="vbo-editbooking-room-pricetype-older-inner"> |
| 1232 |
<label for="olderpid<?php echo $num.$t['idprice']; ?>"><?php echo JText::translate('VBOBOOKEDATPRICE') . ' ' . $vbo_app->createPopover(array('title' => JText::translate('VBOBOOKEDATPRICE'), 'content' => JText::translate('VBOBOOKEDATPRICEHELP'))); ?></label> |
| 1233 |
<div class="vbo-editbooking-room-pricetype-cost"> |
| 1234 |
<?php echo $currencysymb." ".VikBooking::numberFormat($or['room_cost']); ?> |
| 1235 |
</div> |
| 1236 |
</div> |
| 1237 |
<div class="vbo-editbooking-room-pricetype-check-older"> |
| 1238 |
<input type="checkbox" name="olderpriceid<?php echo $num; ?>" id="olderpid<?php echo $num.$t['idprice']; ?>" value="<?php echo $t['idprice'] . ':' . $or['room_cost']; ?>" checked="checked"/> |
| 1239 |
</div> |
| 1240 |
</div> |
| 1241 |
<?php |
| 1242 |
} |
| 1243 |
?> |
| 1244 |
</div> |
| 1245 |
<?php |
| 1246 |
} |
| 1247 |
//print the set custom rate anyway |
| 1248 |
?> |
| 1249 |
<div class="vbo-editbooking-room-pricetype"> |
| 1250 |
<div class="vbo-editbooking-room-pricetype-inner"> |
| 1251 |
<label for="cust_cost<?php echo $num; ?>" class="vbo-custrate-lbl-add"><?php echo JText::translate('VBOROOMCUSTRATEPLANADD'); ?></label> |
| 1252 |
<div class="vbo-editbooking-room-pricetype-cost"> |
| 1253 |
<?php echo $currencysymb; ?> <input type="number" step="any" name="cust_cost<?php echo $num; ?>" id="cust_cost<?php echo $num; ?>" value="" placeholder="<?php echo VikBooking::numberFormat(($sel_rate_changed !== false ? $sel_rate_changed : 0)); ?>" size="4" onchange="if (this.value.length) {document.getElementById('priceid<?php echo $num; ?>').checked = true; jQuery('#priceid<?php echo $num; ?>').trigger('change');document.getElementById('tax<?php echo $num; ?>').style.display = 'block';}" /> |
| 1254 |
<div class="vbo-editbooking-room-pricetype-seltax" id="tax<?php echo $num; ?>" style="display: none;"> |
| 1255 |
<?php echo (!empty($wiva) ? str_replace('%s', $num, $wiva) : ''); ?> |
| 1256 |
</div> |
| 1257 |
</div> |
| 1258 |
</div> |
| 1259 |
<div class="vbo-editbooking-room-pricetype-check"> |
| 1260 |
<input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="priceid<?php echo $num; ?>" value="" onclick="document.getElementById('tax<?php echo $num; ?>').style.display = 'block';" /> |
| 1261 |
</div> |
| 1262 |
</div> |
| 1263 |
<?php |
| 1264 |
} |
| 1265 |
?> |
| 1266 |
</div> |
| 1267 |
</div> |
| 1268 |
<?php |
| 1269 |
/** |
| 1270 |
* Meal plans included in the room rate. |
| 1271 |
* |
| 1272 |
* @since 1.16.1 (J) - 1.6.1 (WP) |
| 1273 |
*/ |
| 1274 |
$meal_plan_manager = VBOMealplanManager::getInstance(); |
| 1275 |
?> |
| 1276 |
<div class="vbo-editbooking-room-services vbo-editbooking-room-meal-plans"> |
| 1277 |
<h4><?php echo JText::translate('VBO_MEAL_PLANS_INCL'); ?></h4> |
| 1278 |
<div class="vbo-editbooking-room-services-wrap vbo-editbooking-room-meal-plans-wrap"> |
| 1279 |
<?php |
| 1280 |
foreach ($meal_plan_manager->getPlans() as $meal_enum => $meal_name) { |
| 1281 |
if (!empty($or['meals'])) { |
| 1282 |
// check if meal is included in room-reservation record |
| 1283 |
$meal_included = $meal_plan_manager->roomRateMealIncluded($or, $meal_enum); |
| 1284 |
} else { |
| 1285 |
// check if meal is included in the selected rate plan |
| 1286 |
$meal_included = $active_rplan_id ? $meal_plan_manager->ratePlanMealIncluded($active_rplan_id, $meal_enum) : false; |
| 1287 |
} |
| 1288 |
if (!$meal_included && empty($or['meals']) && !empty($ord['idorderota']) && !empty($ord['channel']) && !empty($ord['custdata'])) { |
| 1289 |
// check if meal is included by using the raw customer data or OTA reservation and room |
| 1290 |
$meal_included = $meal_plan_manager->otaDataMealIncluded($ord, $or, $meal_enum); |
| 1291 |
} |
| 1292 |
?> |
| 1293 |
<div class="vbo-editbooking-room-service vbo-editbooking-room-meal-plan"> |
| 1294 |
<div class="vbo-editbooking-room-service-inner vbo-editbooking-room-meal-plan-inner"> |
| 1295 |
<label for="mealplan-<?php echo $num; ?>-<?php echo $meal_enum; ?>"><?php echo $meal_name; ?></label> |
| 1296 |
</div> |
| 1297 |
<div class="vbo-editbooking-room-service-check vbo-editbooking-room-meal-plan-check"> |
| 1298 |
<input type="checkbox" name="mealplan<?php echo $num; ?>[]" id="mealplan-<?php echo $num; ?>-<?php echo $meal_enum; ?>" value="<?php echo $meal_enum; ?>" <?php echo $meal_included ? 'checked="checked"' : ''; ?>/> |
| 1299 |
</div> |
| 1300 |
</div> |
| 1301 |
<?php |
| 1302 |
} |
| 1303 |
?> |
| 1304 |
</div> |
| 1305 |
</div> |
| 1306 |
<?php |
| 1307 |
|
| 1308 |
//Room Options Start |
| 1309 |
$optionals = empty($or['idopt']) ? '' : VikBooking::getRoomOptionals($or['idopt']); |
| 1310 |
if ($optionals) { |
| 1311 |
// apply filters to options |
| 1312 |
VikBooking::filterOptionalsByDate($optionals, $room_checkin, $room_checkout); |
| 1313 |
VikBooking::filterOptionalsByParty($optionals, $or['adults'], $or['children']); |
| 1314 |
} |
| 1315 |
$arropt = array(); |
| 1316 |
if ($optionals) { |
| 1317 |
?> |
| 1318 |
<div class="vbo-editbooking-room-services vbo-editbooking-room-options pro-feature"> |
| 1319 |
<h4><?php echo JText::translate('VBPEDITBUSYEIGHT'); ?></h4> |
| 1320 |
<div class="vbo-editbooking-room-services-wrap vbo-editbooking-room-options-wrap"> |
| 1321 |
<?php |
| 1322 |
list($optionals, $ageintervals) = VikBooking::loadOptionAgeIntervals($optionals, $or['adults'], $or['children']); |
| 1323 |
if ($ageintervals) { |
| 1324 |
if ($optionals) { |
| 1325 |
$ageintervals = array(0 => $ageintervals); |
| 1326 |
$optionals = array_merge($ageintervals, $optionals); |
| 1327 |
} else { |
| 1328 |
$optionals = array(0 => $ageintervals); |
| 1329 |
} |
| 1330 |
} |
| 1331 |
if (!empty($or['optionals'])) { |
| 1332 |
$haveopt = explode(";", $or['optionals']); |
| 1333 |
foreach ($haveopt as $ho) { |
| 1334 |
if (!empty($ho)) { |
| 1335 |
$havetwo = explode(":", $ho); |
| 1336 |
if (strstr($havetwo[1], '-') != false) { |
| 1337 |
$arropt[$havetwo[0]][] = $havetwo[1]; |
| 1338 |
} else { |
| 1339 |
$arropt[$havetwo[0]] = $havetwo[1]; |
| 1340 |
} |
| 1341 |
} |
| 1342 |
} |
| 1343 |
} else { |
| 1344 |
$arropt[] = ""; |
| 1345 |
} |
| 1346 |
foreach ($optionals as $k => $o) { |
| 1347 |
$oval = ""; |
| 1348 |
if (intval($o['hmany']) == 1) { |
| 1349 |
if (array_key_exists($o['id'], $arropt)) { |
| 1350 |
$oval = $arropt[$o['id']]; |
| 1351 |
} |
| 1352 |
} else { |
| 1353 |
if (array_key_exists($o['id'], $arropt) && !is_array($arropt[$o['id']])) { |
| 1354 |
$oval = " checked=\"checked\""; |
| 1355 |
} |
| 1356 |
} |
| 1357 |
if (!empty($o['ageintervals'])) { |
| 1358 |
if ($or['children'] > 0) { |
| 1359 |
for ($ch = 1; $ch <= $or['children']; $ch++) { |
| 1360 |
$chageselect = '<select name="optid'.$num.$o['id'].'[]">'."\n".'<option value=""> </option>'."\n"; |
| 1361 |
/** |
| 1362 |
* Age intervals may be overridden per child number. |
| 1363 |
* |
| 1364 |
* @since 1.13.5 |
| 1365 |
*/ |
| 1366 |
$optageovrct = VikBooking::getOptionIntervalChildOverrides($o, $or['adults'], $or['children']); |
| 1367 |
$intervals = explode(';;', (isset($optageovrct['ageintervals_child' . $ch]) ? $optageovrct['ageintervals_child' . $ch] : $o['ageintervals'])); |
| 1368 |
// |
| 1369 |
foreach ($intervals as $kintv => $intv) { |
| 1370 |
if (empty($intv)) { |
| 1371 |
continue; |
| 1372 |
} |
| 1373 |
$intvparts = explode('_', $intv); |
| 1374 |
$intvparts[2] = intval($o['perday']) == 1 ? ($intvparts[2] * $room_nights) : $intvparts[2]; |
| 1375 |
if (array_key_exists(3, $intvparts) && strpos($intvparts[3], '%') !== false) { |
| 1376 |
$pricestr = floatval($intvparts[2]) >= 0 ? '+ '.VikBooking::numberFormat($intvparts[2]) : '- '.VikBooking::numberFormat($intvparts[2]); |
| 1377 |
} else { |
| 1378 |
$pricestr = floatval($intvparts[2]) >= 0 ? '+ '.VikBooking::numberFormat($intvparts[2]) : '- '.VikBooking::numberFormat($intvparts[2]); |
| 1379 |
} |
| 1380 |
$selstatus = ''; |
| 1381 |
if (isset($arropt[$o['id']]) && is_array($arropt[$o['id']])) { |
| 1382 |
$ageparts = explode('-', $arropt[$o['id']][($ch - 1)]); |
| 1383 |
if ($kintv == ($ageparts[1] - 1)) { |
| 1384 |
$selstatus = ' selected="selected"'; |
| 1385 |
} |
| 1386 |
} |
| 1387 |
$chageselect .= '<option value="'.($kintv + 1).'"'.$selstatus.'>'.$intvparts[0].' - '.$intvparts[1].' ('.$pricestr.' '.(array_key_exists(3, $intvparts) && strpos($intvparts[3], '%') !== false ? '%' : $currencysymb).')'.'</option>'."\n"; |
| 1388 |
} |
| 1389 |
$chageselect .= '</select>'."\n"; |
| 1390 |
?> |
| 1391 |
<div class="vbo-editbooking-room-service vbo-editbooking-room-option vbo-editbooking-room-option-childage"> |
| 1392 |
<div class="vbo-editbooking-room-service-inner vbo-editbooking-room-option-inner"> |
| 1393 |
<label for="optid<?php echo $num.$o['id'].$ch; ?>"><?php echo JText::translate('VBMAILCHILD').' #'.$ch; ?></label> |
| 1394 |
<div class="vbo-editbooking-room-service-select vbo-editbooking-room-option-select"> |
| 1395 |
<?php echo $chageselect; ?> |
| 1396 |
</div> |
| 1397 |
</div> |
| 1398 |
</div> |
| 1399 |
<?php |
| 1400 |
} |
| 1401 |
} |
| 1402 |
} else { |
| 1403 |
$optquancheckb = 1; |
| 1404 |
$forcedquan = 1; |
| 1405 |
$forceperday = false; |
| 1406 |
$forceperchild = false; |
| 1407 |
if (intval($o['forcesel']) == 1 && strlen((string)$o['forceval'])) { |
| 1408 |
$forceparts = explode("-", $o['forceval']); |
| 1409 |
$forcedquan = intval($forceparts[0]); |
| 1410 |
$forceperday = intval($forceparts[1]) == 1 ? true : false; |
| 1411 |
$forceperchild = intval($forceparts[2]) == 1 ? true : false; |
| 1412 |
$optquancheckb = $forcedquan; |
| 1413 |
$optquancheckb = $forceperchild === true && array_key_exists($num, $arrpeople) && array_key_exists('children', $arrpeople[$num]) ? ($optquancheckb * $arrpeople[$num]['children']) : $optquancheckb; |
| 1414 |
} |
| 1415 |
if (intval($o['perday']) == 1) { |
| 1416 |
$thisoptcost = $o['cost'] * $room_nights; |
| 1417 |
} else { |
| 1418 |
$thisoptcost = $o['cost']; |
| 1419 |
} |
| 1420 |
if ($o['maxprice'] > 0 && $thisoptcost > $o['maxprice']) { |
| 1421 |
$thisoptcost = $o['maxprice']; |
| 1422 |
} |
| 1423 |
$thisoptcost = $thisoptcost * $optquancheckb; |
| 1424 |
if (intval($o['perperson']) == 1) { |
| 1425 |
$thisoptcost = $thisoptcost * $arrpeople[$num]['adults']; |
| 1426 |
} |
| 1427 |
if ($o['pcentroom']) { |
| 1428 |
// it's a percent value, so we do not multiply anything |
| 1429 |
$thisoptcost = $o['cost']; |
| 1430 |
} |
| 1431 |
?> |
| 1432 |
<div class="vbo-editbooking-room-service vbo-editbooking-room-option"> |
| 1433 |
<div class="vbo-editbooking-room-service-inner vbo-editbooking-room-option-inner"> |
| 1434 |
<label for="optid<?php echo $num.$o['id']; ?>"><?php echo $o['name']; ?></label> |
| 1435 |
<div class="vbo-editbooking-room-service-price vbo-editbooking-room-option-price"> |
| 1436 |
<?php echo (int)$o['pcentroom'] ? '' : $currencysymb.' '; ?><?php echo VikBooking::numberFormat($thisoptcost); ?><?php echo (int)$o['pcentroom'] ? '%' : ''; ?> |
| 1437 |
</div> |
| 1438 |
</div> |
| 1439 |
<div class="vbo-editbooking-room-service-check vbo-editbooking-room-option-check"> |
| 1440 |
<?php echo (intval($o['hmany'])==1 ? "<input type=\"number\" name=\"optid".$num.$o['id']."\" id=\"optid".$num.$o['id']."\" value=\"".$oval."\" min=\"0\" />" : "<input type=\"checkbox\" name=\"optid".$num.$o['id']."\" id=\"optid".$num.$o['id']."\" value=\"".$optquancheckb."\"".$oval."/>"); ?> |
| 1441 |
</div> |
| 1442 |
</div> |
| 1443 |
<?php |
| 1444 |
} |
| 1445 |
} |
| 1446 |
?> |
| 1447 |
</div> |
| 1448 |
</div> |
| 1449 |
<?php |
| 1450 |
} |
| 1451 |
//Room Options End |
| 1452 |
//custom extra services for each room Start |
| 1453 |
?> |
| 1454 |
<div class="vbo-editbooking-room-extracosts pro-feature" id="vbo-ebusy-extracosts-<?php echo $num; ?>"> |
| 1455 |
<h4> |
| 1456 |
<?php echo JText::translate('VBPEDITBUSYEXTRACOSTS'); ?> |
| 1457 |
<button class="btn vbo-ebusy-addextracost" type="button" onclick="vboAddExtraCost('<?php echo $num; ?>');"><?php VikBookingIcons::e('plus-circle'); ?> <?php echo JText::translate('VBPEDITBUSYADDEXTRAC'); ?></button> |
| 1458 |
</h4> |
| 1459 |
<div class="vbo-editbooking-room-extracosts-wrap"> |
| 1460 |
<?php |
| 1461 |
if (!empty($or['extracosts'])) { |
| 1462 |
$cur_extra_costs = json_decode($or['extracosts'], true); |
| 1463 |
foreach ($cur_extra_costs as $eck => $ecv) { |
| 1464 |
$ec_taxopts = ''; |
| 1465 |
foreach ($ivas as $iv) { |
| 1466 |
$ec_taxopts .= "<option value=\"".$iv['id']."\"".(!empty($ecv['idtax']) && $ecv['idtax'] == $iv['id'] ? ' selected="selected"' : '').">".(empty($iv['name']) ? $iv['aliq']."%" : $iv['name']." - ".$iv['aliq']."%")."</option>\n"; |
| 1467 |
} |
| 1468 |
?> |
| 1469 |
<div class="vbo-editbooking-room-extracost"> |
| 1470 |
<div class="vbo-ebusy-extracosts-cellname"> |
| 1471 |
<input type="text" name="extracn[<?php echo $num; ?>][]" value="<?php echo JHtml::fetch('esc_attr', $ecv['name']); ?>" placeholder="<?php echo JHtml::fetch('esc_attr', JText::translate('VBPEDITBUSYEXTRACNAME')); ?>" size="25" /> |
| 1472 |
<input type="hidden" name="extractype[<?php echo $num; ?>][]" value="<?php echo isset($ecv['type']) ? JHtml::fetch('esc_attr', $ecv['type']) : ''; ?>" /> |
| 1473 |
<input type="hidden" name="extracfk[<?php echo $num; ?>][]" value="<?php echo isset($ecv['fk']) ? (string)$ecv['fk'] : ''; ?>" /> |
| 1474 |
<input type="hidden" name="extracdata[<?php echo $num; ?>][]" value="<?php echo isset($ecv['data']) ? JHtml::fetch('esc_attr', json_encode($ecv['data'])) : ''; ?>" /> |
| 1475 |
</div> |
| 1476 |
<div class="vbo-ebusy-extracosts-cellcost"> |
| 1477 |
<span class="vbo-ebusy-extracosts-currency"><?php echo $currencysymb; ?></span> |
| 1478 |
<input type="number" step="any" name="extracc[<?php echo $num; ?>][]" value="<?php echo addslashes($ecv['cost']); ?>" size="5" /> |
| 1479 |
</div> |
| 1480 |
<div class="vbo-ebusy-extracosts-celltax"> |
| 1481 |
<select name="extractx[<?php echo $num; ?>][]"> |
| 1482 |
<option value=""><?php echo JText::translate('VBNEWOPTFOUR'); ?></option> |
| 1483 |
<?php echo $ec_taxopts; ?> |
| 1484 |
</select> |
| 1485 |
</div> |
| 1486 |
<div class="vbo-ebusy-extracosts-cellrm"> |
| 1487 |
<button class="btn btn-danger" type="button" onclick="vboRemoveExtraCost(this);">×</button> |
| 1488 |
</div> |
| 1489 |
</div> |
| 1490 |
<?php |
| 1491 |
} |
| 1492 |
} |
| 1493 |
?> |
| 1494 |
</div> |
| 1495 |
</div> |
| 1496 |
<?php |
| 1497 |
//custom extra services for each room End |
| 1498 |
?> |
| 1499 |
</div> |
| 1500 |
<?php |
| 1501 |
} |
| 1502 |
//Rooms Loop End |
| 1503 |
?> |
| 1504 |
<div class="vbo-bookingdet-summary-room vbo-editbooking-summary-room vbo-editbooking-summary-totpaid"> |
| 1505 |
<div class="vbo-editbooking-summary-room-head"> |
| 1506 |
<div class="vbo-editbooking-addroom pro-feature"> |
| 1507 |
<button class="btn btn-success" type="button" id="vbo-add-room"><?php VikBookingIcons::e('plus-circle'); ?> <?php echo JText::translate('VBOBOOKADDROOM'); ?></button> |
| 1508 |
</div> |
| 1509 |
<div class="vbo-editbooking-totpaid"> |
| 1510 |
<label for="totpaid"><?php echo JText::translate('VBPEDITBUSYTOTPAID'); ?></label> |
| 1511 |
<?php echo $currencysymb; ?> <input type="number" min="0" step="any" id="totpaid" name="totpaid" value="<?php echo $ord['totpaid']; ?>"/> |
| 1512 |
</div> |
| 1513 |
<div class="vbo-editbooking-totpaid vbo-editbooking-totrefund"> |
| 1514 |
<label for="refund"><?php echo JText::translate('VBO_AMOUNT_REFUNDED'); ?></label> |
| 1515 |
<?php echo $currencysymb; ?> <input type="number" min="0" step="any" id="refund" name="refund" value="<?php echo $ord['refund']; ?>"/> |
| 1516 |
</div> |
| 1517 |
</div> |
| 1518 |
</div> |
| 1519 |
</div> |
| 1520 |
<?php |
| 1521 |
} else { |
| 1522 |
?> |
| 1523 |
<p class="err"><?php echo JText::translate('VBPEDITBUSYERRNOFARES'); ?></p> |
| 1524 |
<?php |
| 1525 |
} |
| 1526 |
//order from front end or correctly saved - end |
| 1527 |
} elseif ($ord && empty($ordersrooms[0]['idtar'])) { |
| 1528 |
//order is a quick reservation from administrator - start |
| 1529 |
$proceedtars = true; |
| 1530 |
$rooms = array(); |
| 1531 |
$tars = array(); |
| 1532 |
$arrpeople = array(); |
| 1533 |
foreach ($ordersrooms as $kor => $or) { |
| 1534 |
$num = $kor + 1; |
| 1535 |
$rooms[$num] = $or; |
| 1536 |
$arrpeople[$num]['adults'] = $or['adults']; |
| 1537 |
$arrpeople[$num]['children'] = $or['children']; |
| 1538 |
|
| 1539 |
// default values to be considered |
| 1540 |
$room_nights = (int)$ord['days']; |
| 1541 |
$room_checkin = $ord['checkin']; |
| 1542 |
$room_checkout = $ord['checkout']; |
| 1543 |
if ($ord['split_stay'] && count($room_stay_dates) && isset($room_stay_dates[$kor]) && $room_stay_dates[$kor]['idroom'] == $or['idroom']) { |
| 1544 |
// use appropriate values for split stays |
| 1545 |
$room_nights = $room_stay_dates[$kor]['nights']; |
| 1546 |
$room_checkin = $room_stay_dates[$kor]['checkin']; |
| 1547 |
$room_checkout = $room_stay_dates[$kor]['checkout']; |
| 1548 |
} |
| 1549 |
|
| 1550 |
// seek for rates |
| 1551 |
$q = "SELECT * FROM `#__vikbooking_dispcost` WHERE `days`=" . $room_nights . " AND `idroom`=" . (int)$or['idroom'] . " ORDER BY `#__vikbooking_dispcost`.`cost` ASC;"; |
| 1552 |
$dbo->setQuery($q); |
| 1553 |
$tar = $dbo->loadAssocList(); |
| 1554 |
if (!$tar) { |
| 1555 |
$proceedtars = false; |
| 1556 |
break; |
| 1557 |
} |
| 1558 |
|
| 1559 |
$tar = VikBooking::applySeasonsRoom($tar, $room_checkin, $room_checkout); |
| 1560 |
|
| 1561 |
// apply OBP rules |
| 1562 |
$tar = VBORoomHelper::getInstance()->applyOBPRules($tar, $or, $or['adults']); |
| 1563 |
|
| 1564 |
// push tariffs for this room |
| 1565 |
$tars[$num] = $tar; |
| 1566 |
} |
| 1567 |
if ($proceedtars) { |
| 1568 |
?> |
| 1569 |
<input type="hidden" name="areprices" value="quick"/> |
| 1570 |
<div class="vbo-editbooking-tbl"> |
| 1571 |
<?php |
| 1572 |
//Rooms Loop Start |
| 1573 |
foreach ($ordersrooms as $kor => $or) { |
| 1574 |
$num = $kor + 1; |
| 1575 |
|
| 1576 |
// default values to be considered |
| 1577 |
$room_nights = (int)$ord['days']; |
| 1578 |
$room_checkin = $ord['checkin']; |
| 1579 |
$room_checkout = $ord['checkout']; |
| 1580 |
if ($ord['split_stay'] && count($room_stay_dates) && isset($room_stay_dates[$kor]) && $room_stay_dates[$kor]['idroom'] == $or['idroom']) { |
| 1581 |
// use appropriate values for split stays |
| 1582 |
$room_nights = $room_stay_dates[$kor]['nights']; |
| 1583 |
$room_checkin = $room_stay_dates[$kor]['checkin']; |
| 1584 |
$room_checkout = $room_stay_dates[$kor]['checkout']; |
| 1585 |
} |
| 1586 |
?> |
| 1587 |
<div class="vbo-bookingdet-summary-room vbo-editbooking-summary-room"> |
| 1588 |
<div class="vbo-editbooking-summary-room-head"> |
| 1589 |
<div class="vbo-bookingdet-summary-roomnum"><?php VikBookingIcons::e('bed'); ?> <?php echo $or['name']; ?></div> |
| 1590 |
<div class="vbo-bookingdet-summary-roomguests"> |
| 1591 |
<?php VikBookingIcons::e('male'); ?> |
| 1592 |
<div class="vbo-bookingdet-summary-roomadults"> |
| 1593 |
<span><?php echo JText::translate('VBEDITORDERADULTS'); ?>:</span> <?php echo $or['adults']; ?> |
| 1594 |
</div> |
| 1595 |
<?php |
| 1596 |
if ($or['children'] > 0) { |
| 1597 |
?> |
| 1598 |
<div class="vbo-bookingdet-summary-roomchildren"> |
| 1599 |
<span><?php echo JText::translate('VBEDITORDERCHILDREN'); ?>:</span> <?php echo $or['children']; ?> |
| 1600 |
</div> |
| 1601 |
<?php |
| 1602 |
} |
| 1603 |
?> |
| 1604 |
</div> |
| 1605 |
<?php |
| 1606 |
if (!empty($arrpeople[$num]['t_first_name'])) { |
| 1607 |
?> |
| 1608 |
<div class="vbo-bookingdet-summary-guestname"> |
| 1609 |
<span><?php echo $arrpeople[$num]['t_first_name'].' '.$arrpeople[$num]['t_last_name']; ?></span> |
| 1610 |
</div> |
| 1611 |
<?php |
| 1612 |
} |
| 1613 |
?> |
| 1614 |
</div> |
| 1615 |
<div class="vbo-editbooking-room-pricetypes"> |
| 1616 |
<h4><?php echo JText::translate('VBPEDITBUSYSEVEN'); ?><?php echo $ord['closure'] < 1 && $ord['status'] != 'cancelled' ? ' '.$vbo_app->createPopover(array('title' => JText::translate('VBPEDITBUSYSEVEN'), 'content' => JText::translate('VBOMISSPRTYPEROOMH'))) : ''; ?></h4> |
| 1617 |
<div class="vbo-editbooking-room-pricetypes-wrap"> |
| 1618 |
<?php |
| 1619 |
//print the standard rates |
| 1620 |
foreach ($tars[$num] as $k => $t) { |
| 1621 |
?> |
| 1622 |
<div class="vbo-editbooking-room-pricetype"> |
| 1623 |
<div class="vbo-editbooking-room-pricetype-inner"> |
| 1624 |
<label for="pid<?php echo $num.$t['idprice']; ?>"><?php echo VikBooking::getPriceName($t['idprice']).(strlen((string)$t['attrdata']) ? " - ".VikBooking::getPriceAttr($t['idprice']).": ".$t['attrdata'] : ""); ?></label> |
| 1625 |
<div class="vbo-editbooking-room-pricetype-cost"> |
| 1626 |
<?php echo $currencysymb." ".VikBooking::numberFormat($t['cost']); ?> |
| 1627 |
</div> |
| 1628 |
</div> |
| 1629 |
<div class="vbo-editbooking-room-pricetype-check"> |
| 1630 |
<input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="pid<?php echo $num.$t['idprice']; ?>" value="<?php echo $t['idprice']; ?>" /> |
| 1631 |
</div> |
| 1632 |
</div> |
| 1633 |
<?php |
| 1634 |
} |
| 1635 |
//print the custom cost |
| 1636 |
?> |
| 1637 |
<div class="vbo-editbooking-room-pricetype"> |
| 1638 |
<div class="vbo-editbooking-room-pricetype-inner"> |
| 1639 |
<label for="cust_cost<?php echo $num; ?>" class="vbo-custrate-lbl-add"><?php echo JText::translate('VBOROOMCUSTRATEPLANADD'); ?></label> |
| 1640 |
<div class="vbo-editbooking-room-pricetype-cost"> |
| 1641 |
<?php echo $currencysymb; ?> <input type="number" step="any" name="cust_cost<?php echo $num; ?>" id="cust_cost<?php echo $num; ?>" value="" placeholder="<?php echo VikBooking::numberFormat((!empty($ord['idorderota']) && !empty($ord['total']) ? $ord['total'] : 0)); ?>" size="4" onchange="if (this.value.length) {document.getElementById('priceid<?php echo $num; ?>').checked = true; jQuery('#priceid<?php echo $num; ?>').trigger('change'); document.getElementById('tax<?php echo $num; ?>').style.display = 'block';}" /> |
| 1642 |
<div class="vbo-editbooking-room-pricetype-seltax" id="tax<?php echo $num; ?>" style="display: none;"><?php echo (!empty($wiva) ? str_replace('%s', $num, $wiva) : ''); ?></div> |
| 1643 |
</div> |
| 1644 |
</div> |
| 1645 |
<div class="vbo-editbooking-room-pricetype-check"> |
| 1646 |
<input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="priceid<?php echo $num; ?>" value="" onclick="document.getElementById('tax<?php echo $num; ?>').style.display = 'block';" /> |
| 1647 |
</div> |
| 1648 |
</div> |
| 1649 |
<?php |
| 1650 |
// |
| 1651 |
?> |
| 1652 |
</div> |
| 1653 |
</div> |
| 1654 |
<?php |
| 1655 |
$optionals = empty($or['idopt']) ? '' : VikBooking::getRoomOptionals($or['idopt']); |
| 1656 |
if ($optionals) { |
| 1657 |
// apply filters to options |
| 1658 |
VikBooking::filterOptionalsByDate($optionals, $room_checkin, $room_checkout); |
| 1659 |
VikBooking::filterOptionalsByParty($optionals, $or['adults'], $or['children']); |
| 1660 |
} |
| 1661 |
$arropt = array(); |
| 1662 |
//Room Options Start |
| 1663 |
if ($optionals) { |
| 1664 |
list($optionals, $ageintervals) = VikBooking::loadOptionAgeIntervals($optionals, $or['adults'], $or['children']); |
| 1665 |
if ($ageintervals) { |
| 1666 |
if ($optionals) { |
| 1667 |
$ageintervals = array(0 => $ageintervals); |
| 1668 |
$optionals = array_merge($ageintervals, $optionals); |
| 1669 |
} else { |
| 1670 |
$optionals = array(0 => $ageintervals); |
| 1671 |
} |
| 1672 |
} |
| 1673 |
if (!empty($or['optionals'])) { |
| 1674 |
$haveopt = explode(";", $or['optionals']); |
| 1675 |
foreach ($haveopt as $ho) { |
| 1676 |
if (!empty($ho)) { |
| 1677 |
$havetwo = explode(":", $ho); |
| 1678 |
if (strstr($havetwo[1], '-') != false) { |
| 1679 |
$arropt[$havetwo[0]][] = $havetwo[1]; |
| 1680 |
} else { |
| 1681 |
$arropt[$havetwo[0]] = $havetwo[1]; |
| 1682 |
} |
| 1683 |
} |
| 1684 |
} |
| 1685 |
} else { |
| 1686 |
$arropt[] = ""; |
| 1687 |
} |
| 1688 |
?> |
| 1689 |
<div class="vbo-editbooking-room-services vbo-editbooking-room-options"> |
| 1690 |
<h4><?php echo JText::translate('VBPEDITBUSYEIGHT'); ?></h4> |
| 1691 |
<div class="vbo-editbooking-room-services-wrap vbo-editbooking-room-options-wrap"> |
| 1692 |
<?php |
| 1693 |
foreach ($optionals as $k => $o) { |
| 1694 |
$oval = ""; |
| 1695 |
if (intval($o['hmany']) == 1) { |
| 1696 |
if (array_key_exists($o['id'], $arropt)) { |
| 1697 |
$oval = $arropt[$o['id']]; |
| 1698 |
} |
| 1699 |
} else { |
| 1700 |
if (array_key_exists($o['id'], $arropt) && !is_array($arropt[$o['id']])) { |
| 1701 |
$oval = " checked=\"checked\""; |
| 1702 |
} |
| 1703 |
} |
| 1704 |
if (!empty($o['ageintervals'])) { |
| 1705 |
if ($or['children'] > 0) { |
| 1706 |
for ($ch = 1; $ch <= $or['children']; $ch++) { |
| 1707 |
$chageselect = '<select name="optid'.$num.$o['id'].'[]">'."\n".'<option value=""> </option>'."\n"; |
| 1708 |
/** |
| 1709 |
* Age intervals may be overridden per child number. |
| 1710 |
* |
| 1711 |
* @since 1.13.5 |
| 1712 |
*/ |
| 1713 |
$optageovrct = VikBooking::getOptionIntervalChildOverrides($o, $or['adults'], $or['children']); |
| 1714 |
$intervals = explode(';;', (isset($optageovrct['ageintervals_child' . $ch]) ? $optageovrct['ageintervals_child' . $ch] : $o['ageintervals'])); |
| 1715 |
// |
| 1716 |
foreach ($intervals as $kintv => $intv) { |
| 1717 |
if (empty($intv)) { |
| 1718 |
continue; |
| 1719 |
} |
| 1720 |
$intvparts = explode('_', $intv); |
| 1721 |
$intvparts[2] = intval($o['perday']) == 1 ? ($intvparts[2] * $room_nights) : $intvparts[2]; |
| 1722 |
if (array_key_exists(3, $intvparts) && strpos($intvparts[3], '%') !== false) { |
| 1723 |
$pricestr = floatval($intvparts[2]) >= 0 ? '+ '.VikBooking::numberFormat($intvparts[2]) : '- '.VikBooking::numberFormat($intvparts[2]); |
| 1724 |
} else { |
| 1725 |
$pricestr = floatval($intvparts[2]) >= 0 ? '+ '.VikBooking::numberFormat($intvparts[2]) : '- '.VikBooking::numberFormat($intvparts[2]); |
| 1726 |
} |
| 1727 |
$selstatus = ''; |
| 1728 |
if (isset($arropt[$o['id']]) && is_array($arropt[$o['id']])) { |
| 1729 |
$ageparts = explode('-', $arropt[$o['id']][($ch - 1)]); |
| 1730 |
if ($kintv == ($ageparts[1] - 1)) { |
| 1731 |
$selstatus = ' selected="selected"'; |
| 1732 |
} |
| 1733 |
} |
| 1734 |
$chageselect .= '<option value="'.($kintv + 1).'"'.$selstatus.'>'.$intvparts[0].' - '.$intvparts[1].' ('.$pricestr.' '.(array_key_exists(3, $intvparts) && strpos($intvparts[3], '%') !== false ? '%' : $currencysymb).')'.'</option>'."\n"; |
| 1735 |
} |
| 1736 |
$chageselect .= '</select>'."\n"; |
| 1737 |
?> |
| 1738 |
<div class="vbo-editbooking-room-service vbo-editbooking-room-option vbo-editbooking-room-option-childage"> |
| 1739 |
<div class="vbo-editbooking-room-service-inner vbo-editbooking-room-option-inner"> |
| 1740 |
<label for="optid<?php echo $num.$o['id'].$ch; ?>"><?php echo JText::translate('VBMAILCHILD').' #'.$ch; ?></label> |
| 1741 |
<div class="vbo-editbooking-room-service-select vbo-editbooking-room-option-select"> |
| 1742 |
<?php echo $chageselect; ?> |
| 1743 |
</div> |
| 1744 |
</div> |
| 1745 |
</div> |
| 1746 |
<?php |
| 1747 |
} |
| 1748 |
} |
| 1749 |
} else { |
| 1750 |
$optquancheckb = 1; |
| 1751 |
$forcedquan = 1; |
| 1752 |
$forceperday = false; |
| 1753 |
$forceperchild = false; |
| 1754 |
if (intval($o['forcesel']) == 1 && strlen((string)$o['forceval'])) { |
| 1755 |
$forceparts = explode("-", $o['forceval']); |
| 1756 |
$forcedquan = intval($forceparts[0]); |
| 1757 |
$forceperday = intval($forceparts[1]) == 1 ? true : false; |
| 1758 |
$forceperchild = intval($forceparts[2]) == 1 ? true : false; |
| 1759 |
$optquancheckb = $forcedquan; |
| 1760 |
$optquancheckb = $forceperchild === true && array_key_exists($num, $arrpeople) && array_key_exists('children', $arrpeople[$num]) ? ($optquancheckb * $arrpeople[$num]['children']) : $optquancheckb; |
| 1761 |
} |
| 1762 |
if (intval($o['perday']) == 1) { |
| 1763 |
$thisoptcost = $o['cost'] * $room_nights; |
| 1764 |
} else { |
| 1765 |
$thisoptcost = $o['cost']; |
| 1766 |
} |
| 1767 |
if ($o['maxprice'] > 0 && $thisoptcost > $o['maxprice']) { |
| 1768 |
$thisoptcost = $o['maxprice']; |
| 1769 |
} |
| 1770 |
$thisoptcost = $thisoptcost * $optquancheckb; |
| 1771 |
if (intval($o['perperson']) == 1) { |
| 1772 |
$thisoptcost = $thisoptcost * $arrpeople[$num]['adults']; |
| 1773 |
} |
| 1774 |
?> |
| 1775 |
<div class="vbo-editbooking-room-service vbo-editbooking-room-option"> |
| 1776 |
<div class="vbo-editbooking-room-service-inner vbo-editbooking-room-option-inner"> |
| 1777 |
<label for="optid<?php echo $num.$o['id']; ?>"><?php echo $o['name']; ?></label> |
| 1778 |
<div class="vbo-editbooking-room-service-check vbo-editbooking-room-option-check"> |
| 1779 |
<?php echo (intval($o['hmany'])==1 ? "<input type=\"number\" name=\"optid".$num.$o['id']."\" id=\"optid".$num.$o['id']."\" value=\"".$oval."\" min=\"0\"/>" : "<input type=\"checkbox\" name=\"optid".$num.$o['id']."\" id=\"optid".$num.$o['id']."\" value=\"".$optquancheckb."\"".$oval."/>"); ?> |
| 1780 |
</div> |
| 1781 |
</div> |
| 1782 |
</div> |
| 1783 |
<?php |
| 1784 |
} |
| 1785 |
} |
| 1786 |
?> |
| 1787 |
</div> |
| 1788 |
</div> |
| 1789 |
<?php |
| 1790 |
} |
| 1791 |
//Room Options End |
| 1792 |
//custom extra services for each room Start |
| 1793 |
if (!empty($or['extracosts'])) { |
| 1794 |
$cur_extra_costs = json_decode($or['extracosts'], true); |
| 1795 |
?> |
| 1796 |
<div class="vbo-editbooking-room-extracosts" id="vbo-ebusy-extracosts-<?php echo $num; ?>"> |
| 1797 |
<h4> |
| 1798 |
<?php echo JText::translate('VBPEDITBUSYEXTRACOSTS'); ?> |
| 1799 |
<button class="btn vbo-ebusy-addextracost" type="button" onclick="vboAddExtraCost('<?php echo $num; ?>');"><?php VikBookingIcons::e('plus-circle'); ?> <?php echo JText::translate('VBPEDITBUSYADDEXTRAC'); ?></button> |
| 1800 |
</h4> |
| 1801 |
<div class="vbo-editbooking-room-extracosts-wrap"> |
| 1802 |
<?php |
| 1803 |
foreach ($cur_extra_costs as $eck => $ecv) { |
| 1804 |
$ec_taxopts = ''; |
| 1805 |
foreach ($ivas as $iv) { |
| 1806 |
$ec_taxopts .= "<option value=\"".$iv['id']."\"".(!empty($ecv['idtax']) && $ecv['idtax'] == $iv['id'] ? ' selected="selected"' : '').">".(empty($iv['name']) ? $iv['aliq']."%" : $iv['name']." - ".$iv['aliq']."%")."</option>\n"; |
| 1807 |
} |
| 1808 |
?> |
| 1809 |
<div class="vbo-editbooking-room-extracost"> |
| 1810 |
<div class="vbo-ebusy-extracosts-cellname"> |
| 1811 |
<input type="text" name="extracn[<?php echo $num; ?>][]" value="<?php echo addslashes($ecv['name']); ?>" placeholder="<?php echo addslashes(JText::translate('VBPEDITBUSYEXTRACNAME')); ?>" size="25" /> |
| 1812 |
</div> |
| 1813 |
<div class="vbo-ebusy-extracosts-cellcost"> |
| 1814 |
<span class="vbo-ebusy-extracosts-currency"><?php echo $currencysymb; ?></span> |
| 1815 |
<input type="number" step="any" name="extracc[<?php echo $num; ?>][]" value="<?php echo addslashes($ecv['cost']); ?>" size="5" /> |
| 1816 |
</div> |
| 1817 |
<div class="vbo-ebusy-extracosts-celltax"> |
| 1818 |
<select name="extractx[<?php echo $num; ?>][]"> |
| 1819 |
<option value=""><?php echo JText::translate('VBNEWOPTFOUR'); ?></option> |
| 1820 |
<?php echo $ec_taxopts; ?> |
| 1821 |
</select> |
| 1822 |
</div> |
| 1823 |
<div class="vbo-ebusy-extracosts-cellrm"> |
| 1824 |
<button class="btn btn-danger" type="button" onclick="vboRemoveExtraCost(this);">×</button> |
| 1825 |
</div> |
| 1826 |
</div> |
| 1827 |
<?php |
| 1828 |
} |
| 1829 |
?> |
| 1830 |
</div> |
| 1831 |
</div> |
| 1832 |
<?php |
| 1833 |
} |
| 1834 |
//custom extra services for each room End |
| 1835 |
?> |
| 1836 |
</div> |
| 1837 |
<?php |
| 1838 |
} |
| 1839 |
//Rooms Loop End |
| 1840 |
?> |
| 1841 |
<div class="vbo-bookingdet-summary-room vbo-editbooking-summary-room vbo-editbooking-summary-totpaid"> |
| 1842 |
<div class="vbo-editbooking-summary-room-head"> |
| 1843 |
<div class="vbo-editbooking-totpaid"> |
| 1844 |
<label for="totpaid"><?php echo JText::translate('VBPEDITBUSYTOTPAID'); ?></label> |
| 1845 |
<?php echo $currencysymb; ?> <input type="number" min="0" step="any" id="totpaid" name="totpaid" value="<?php echo $ord['totpaid']; ?>"/> |
| 1846 |
</div> |
| 1847 |
<div class="vbo-editbooking-totpaid vbo-editbooking-totrefund"> |
| 1848 |
<label for="refund"><?php echo JText::translate('VBO_AMOUNT_REFUNDED'); ?></label> |
| 1849 |
<?php echo $currencysymb; ?> <input type="number" min="0" step="any" id="refund" name="refund" value="<?php echo $ord['refund']; ?>"/> |
| 1850 |
</div> |
| 1851 |
</div> |
| 1852 |
</div> |
| 1853 |
</div> |
| 1854 |
<?php |
| 1855 |
} else { |
| 1856 |
?> |
| 1857 |
<p class="err"><?php echo JText::translate('VBPEDITBUSYERRNOFARES'); ?></p> |
| 1858 |
<?php |
| 1859 |
} |
| 1860 |
//order is a quick reservation from administrator - end |
| 1861 |
} |
| 1862 |
?> |
| 1863 |
</div> |
| 1864 |
</div> |
| 1865 |
</div> |
| 1866 |
<input type="hidden" name="task" value=""> |
| 1867 |
<input type="hidden" name="idorder" value="<?php echo $ord['id']; ?>"> |
| 1868 |
<input type="hidden" name="option" value="com_vikbooking"> |
| 1869 |
<?php |
| 1870 |
$pfrominv = VikRequest::getInt('frominv', '', 'request'); |
| 1871 |
echo $pfrominv == 1 ? '<input type="hidden" name="frominv" value="1">' : ''; |
| 1872 |
$pvcm = VikRequest::getInt('vcm', '', 'request'); |
| 1873 |
echo $pvcm == 1 ? '<input type="hidden" name="vcm" value="1">' : ''; |
| 1874 |
echo $pgoto == 'overv' ? '<input type="hidden" name="goto" value="overv">' : ''; |
| 1875 |
?> |
| 1876 |
</form> |
| 1877 |
</div> |
| 1878 |
|
| 1879 |
<script type="text/javascript"> |
| 1880 |
jQuery(function() { |
| 1881 |
jQuery('#checkindate').val('<?php echo $rit; ?>').attr('data-alt-value', '<?php echo $rit; ?>'); |
| 1882 |
jQuery('#checkoutdate').val('<?php echo $con; ?>').attr('data-alt-value', '<?php echo $con; ?>'); |
| 1883 |
<?php |
| 1884 |
foreach ($js_cal_def_vals as $js_cal_def_val) { |
| 1885 |
?> |
| 1886 |
jQuery('#<?php echo $js_cal_def_val['id']; ?>').val('<?php echo $js_cal_def_val['value']; ?>').attr('data-alt-value', '<?php echo $js_cal_def_val['value']; ?>'); |
| 1887 |
<?php |
| 1888 |
} |
| 1889 |
?> |
| 1890 |
jQuery('.vbo-pricetype-radio').change(function() { |
| 1891 |
jQuery(this).closest('.vbo-editbooking-room-pricetypes').find('.vbo-editbooking-room-pricetype.vbo-editbooking-room-pricetype-active').removeClass('vbo-editbooking-room-pricetype-active'); |
| 1892 |
jQuery(this).closest('.vbo-editbooking-room-pricetype').addClass('vbo-editbooking-room-pricetype-active'); |
| 1893 |
}); |
| 1894 |
}); |
| 1895 |
if (jQuery.isFunction(jQuery.fn.tooltip)) { |
| 1896 |
jQuery(".hasTooltip").tooltip(); |
| 1897 |
} |
| 1898 |
</script> |
| 1899 |
|