PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.6.4
VikBooking Hotel Booking Engine & PMS v1.6.4
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.6.4, at admin/views/editbusy/tmpl/default.php

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