PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.7.2
VikBooking Hotel Booking Engine & PMS v1.7.2
1.8.16 1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 All 37 releases
vikbooking / admin / views / editbusy / tmpl / default.php

default.php in VikBooking Hotel Booking Engine & PMS 1.7.2, at admin/views/editbusy/tmpl/default.php

1,899 lines 87.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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);\">&times;</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('&times;');
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>&nbsp;</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);">&times;</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' ? '&nbsp;&nbsp; '.$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);">&times;</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