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

1,859 lines 85.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 = !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 (is_array($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'].'">'.$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 </div>
858 </div>
859 <div class="vbo-editbooking-summary">
860 <?php
861 if (is_array($ord) && (!empty($ordersrooms[0]['idtar']) || $is_package || $is_cust_cost)) {
862 // order from front end or correctly saved - start
863 $proceedtars = true;
864 $rooms = array();
865 $tars = array();
866 $arrpeople = array();
867 foreach ($ordersrooms as $kor => $or) {
868 $num = $kor + 1;
869 $rooms[$num] = $or;
870 $arrpeople[$num]['adults'] = $or['adults'];
871 $arrpeople[$num]['children'] = $or['children'];
872
873 if ($is_package) {
874 continue;
875 }
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 // seek for rates
889 $q = "SELECT * FROM `#__vikbooking_dispcost` WHERE `days`=" . $room_nights . " AND `idroom`=" . (int)$or['idroom'] . " ORDER BY `#__vikbooking_dispcost`.`cost` ASC;";
890 $dbo->setQuery($q);
891 $tar = $dbo->loadAssocList();
892 if (!$tar) {
893 $proceedtars = false;
894 break;
895 }
896 $tar = VikBooking::applySeasonsRoom($tar, $room_checkin, $room_checkout);
897
898 // apply OBP rules
899 $tar = VBORoomHelper::getInstance()->applyOBPRules($tar, $or, $or['adults']);
900
901 // push tariffs for this room
902 $tars[$num] = $tar;
903 }
904 if ($proceedtars) {
905 ?>
906 <input type="hidden" name="areprices" value="yes"/>
907 <input type="hidden" name="rm_room_oid" id="rm_room_oid" value="" />
908 <div class="vbo-editbooking-tbl">
909 <?php
910 // rooms loop start
911 foreach ($ordersrooms as $kor => $or) {
912 $num = $kor + 1;
913
914 // default values to be considered
915 $room_nights = (int)$ord['days'];
916 $room_checkin = $ord['checkin'];
917 $room_checkout = $ord['checkout'];
918 if ($ord['split_stay'] && count($room_stay_dates) && isset($room_stay_dates[$kor]) && $room_stay_dates[$kor]['idroom'] == $or['idroom']) {
919 // use appropriate values for split stays
920 $room_nights = $room_stay_dates[$kor]['nights'];
921 $room_checkin = $room_stay_dates[$kor]['checkin'];
922 $room_checkout = $room_stay_dates[$kor]['checkout'];
923 }
924 ?>
925 <div class="vbo-bookingdet-summary-room vbo-editbooking-summary-room">
926 <div class="vbo-editbooking-summary-room-head">
927 <div class="vbo-bookingdet-summary-roomnum"><?php VikBookingIcons::e('bed'); ?> <?php echo $or['name']; ?></div>
928 <?php
929 if ($ord['roomsnum'] > 1) {
930 ?>
931 <div class="vbo-editbooking-room-remove pro-feature">
932 <button type="button" class="btn btn-danger" onclick="vboConfirmRmRoom('<?php echo $or['id']; ?>');"><?php VikBookingIcons::e('times-circle'); ?> <?php echo JText::translate('VBOREMOVEROOM'); ?></button>
933 </div>
934 <?php
935 }
936 $switch_code = '';
937 if ($switching) {
938 $switch_code = sprintf($switcher, 'switch_'.$or['id'], $or['id'], $or['idroom'], $or['id']);
939 ?>
940 <div class="vbo-editbooking-room-switch pro-feature">
941 <?php echo $switch_code; ?>
942 </div>
943 <?php
944 }
945 ?>
946 <div class="vbo-bookingdet-summary-roomguests">
947 <?php VikBookingIcons::e('male'); ?>
948 <div class="vbo-bookingdet-summary-roomadults">
949 <span><?php echo JText::translate('VBEDITORDERADULTS'); ?>:</span> <?php echo $arrpeople[$num]['adults']; ?>
950 </div>
951 <?php
952 if ($arrpeople[$num]['children'] > 0) {
953 ?>
954 <div class="vbo-bookingdet-summary-roomchildren">
955 <span><?php echo JText::translate('VBEDITORDERCHILDREN'); ?>:</span> <?php echo $arrpeople[$num]['children']; ?>
956 </div>
957 <?php
958 }
959 ?>
960 </div>
961 <?php
962 if (!empty($arrpeople[$num]['t_first_name'])) {
963 ?>
964 <div class="vbo-bookingdet-summary-guestname">
965 <span><?php echo $arrpeople[$num]['t_first_name'].' '.$arrpeople[$num]['t_last_name']; ?></span>
966 </div>
967 <?php
968 }
969 ?>
970 </div>
971 <?php
972 // split stay
973 if ($ord['split_stay'] && count($room_stay_dates) && isset($room_stay_dates[$kor]) && $room_stay_dates[$kor]['idroom'] == $or['idroom']) {
974 // print split stay information for this room
975 $room_stay_nights = $room_stay_dates[$kor]['nights'];
976 // calendar default values
977 $cal_def_checkin = date($df, $room_stay_dates[$kor]['checkin']);
978 $cal_def_checkout = date($df, $room_stay_dates[$kor]['checkout']);
979 $js_cal_def_vals[] = [
980 'id' => 'room-splitstay-checkin' . $num,
981 'value' => $cal_def_checkin,
982 ];
983 $js_cal_def_vals[] = [
984 'id' => 'room-splitstay-checkout' . $num,
985 'value' => $cal_def_checkout,
986 ];
987 ?>
988 <input type="hidden" name="split_stay_data[<?php echo $kor; ?>][idroom]" value="<?php echo $room_stay_dates[$kor]['idroom']; ?>" />
989 <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'] : ''; ?>" />
990 <div class="vbo-editbooking-room-splitstay">
991 <h4>
992 <span class="vbo-editbooking-room-splitstay-first"><?php VikBookingIcons::e('random'); ?> <?php echo JText::translate('VBO_SPLIT_STAY'); ?></span>
993 <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>
994 </h4>
995 <div class="vbo-editbooking-room-traveler-guestsinfo vbo-editbooking-room-splitstay-details">
996 <div class="vbo-editbooking-room-splitstay-date vbo-editbooking-room-splitstay-date-in">
997 <label for="room-splitstay-checkin<?php echo $num; ?>"><?php echo JText::translate('VBPEDITBUSYFOUR'); ?></label>
998 <?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')); ?>
999 </div>
1000 <div class="vbo-editbooking-room-splitstay-date vbo-editbooking-room-splitstay-date-out">
1001 <label for="room-splitstay-checkout<?php echo $num; ?>"><?php echo JText::translate('VBPEDITBUSYSIX'); ?></label>
1002 <?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')); ?>
1003 </div>
1004 </div>
1005 </div>
1006 <?php
1007 }
1008
1009 if (!$ord['split_stay'] && !$ord['closure'] && $ord['roomsnum'] > 1 && $ord['days'] > 1 && $ord['status'] == 'confirmed') {
1010 /**
1011 * We allow to modify the nights of stay for each room in the limits of the booking dates.
1012 * This function will only affect the availability, not the calculation of the rate plans/options.
1013 * It is meant to simply free up rooms on dates within the booking check-in and check-out dates.
1014 *
1015 * @since 1.16.0 (J) - 1.6.0 (WP)
1016 */
1017 $room_now_checkin = $ord['checkin'];
1018 $room_now_checkout = $ord['checkout'];
1019 $room_now_nights = $ord['days'];
1020 if (isset($room_stay_records[$kor]) && $room_stay_records[$kor]['idroom'] == $or['idroom']) {
1021 $room_now_checkin = $room_stay_records[$kor]['checkin'];
1022 $room_now_checkout = $room_stay_records[$kor]['checkout'];
1023 $room_now_nights = $av_helper->countNightsOfStay($room_now_checkin, $room_now_checkout);
1024 }
1025 ?>
1026 <div class="vbo-editbooking-room-nights-info">
1027 <div class="vbo-editbooking-room-nights-info-top">
1028 <h4>
1029 <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>
1030 </h4>
1031 <div class="vbo-editbooking-room-nights-modify">
1032 <label for="room_modify_dates<?php echo $kor; ?>-on"><?php echo JText::translate('VBO_MODIFY_DATES'); ?></label>
1033 <span><?php echo $vbo_app->printYesNoButtons('room_modify_dates' . $kor, JText::translate('VBYES'), JText::translate('VBNO'), 0, 1, 0, 'vboEditbusyModifyRoomDates(this.checked, ' . $kor . ')'); ?></span>
1034 </div>
1035 </div>
1036 <div class="vbo-editbooking-room-traveler-guestsinfo vbo-editbooking-room-nights-modify-details" data-roomind="<?php echo $kor; ?>" style="display: none;">
1037 <div class="vbo-editbooking-room-modify-date vbo-editbooking-room-modify-date-in">
1038 <label for="room-modify-checkin<?php echo $num; ?>"><?php echo JText::translate('VBPEDITBUSYFOUR'); ?></label>
1039 <div class="vbo-input-calendar-box">
1040 <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'); ?>
1041 </div>
1042 </div>
1043 <div class="vbo-editbooking-room-modify-date vbo-editbooking-room-modify-date-out">
1044 <label for="room-modify-checkout<?php echo $num; ?>"><?php echo JText::translate('VBPEDITBUSYSIX'); ?></label>
1045 <div class="vbo-input-calendar-box">
1046 <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'); ?>
1047 </div>
1048 </div>
1049 <div class="vbo-editbooking-room-modify-date vbo-editbooking-room-modify-date-help">
1050 <?php echo $vbo_app->createPopover(array('title' => JText::translate('VBO_MODIFY_DATES'), 'content' => JText::translate('VBO_MODIFY_DATES_HELP'))); ?>
1051 </div>
1052 </div>
1053 </div>
1054 <?php
1055 }
1056
1057 $from_a = $or['fromadult'];
1058 $from_a = $from_a > $or['adults'] ? $or['adults'] : $from_a;
1059 $to_a = $or['toadult'];
1060 $to_a = $to_a < $or['adults'] ? $or['adults'] : $to_a;
1061 $from_c = $or['fromchild'];
1062 $from_c = $from_c > $or['children'] ? $or['children'] : $from_c;
1063 $to_c = $or['tochild'];
1064 $to_c = $to_c < $or['children'] ? $or['children'] : $to_c;
1065 $adults_opts = '';
1066 $children_opts = '';
1067 for ($z = $from_a; $z <= $to_a; $z++) {
1068 $adults_opts .= '<option value="'.$z.'"'.($z == $or['adults'] ? ' selected="selected"' : '').'>'.$z.'</option>';
1069 }
1070 for ($z = $from_c; $z <= $to_c; $z++) {
1071 $children_opts .= '<option value="'.$z.'"'.($z == $or['children'] ? ' selected="selected"' : '').'>'.$z.'</option>';
1072 }
1073 ?>
1074 <div class="vbo-editbooking-room-traveler">
1075 <h4><?php echo JText::translate('VBPEDITBUSYTRAVELERINFO'); ?></h4>
1076 <div class="vbo-editbooking-room-traveler-guestsinfo">
1077 <div class="vbo-editbooking-room-traveler-name">
1078 <label for="t_first_name<?php echo $num; ?>"><?php echo JText::translate('VBTRAVELERNAME'); ?></label>
1079 <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" />
1080 </div>
1081 <div class="vbo-editbooking-room-traveler-name">
1082 <label for="t_last_name<?php echo $num; ?>"><?php echo JText::translate('VBTRAVELERLNAME'); ?></label>
1083 <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" />
1084 </div>
1085 <div class="vbo-editbooking-room-traveler-guestnum">
1086 <label for="adults<?php echo $num; ?>"><?php echo JText::translate('VBMAILADULTS'); ?></label>
1087 <select name="adults<?php echo $num; ?>" id="adults<?php echo $num; ?>">
1088 <?php echo $adults_opts; ?>
1089 </select>
1090 </div>
1091 <div class="vbo-editbooking-room-traveler-guestnum">
1092 <label for="children<?php echo $num; ?>"><?php echo JText::translate('VBMAILCHILDREN'); ?></label>
1093 <select name="children<?php echo $num; ?>" id="children<?php echo $num; ?>">
1094 <?php echo $children_opts; ?>
1095 </select>
1096 </div>
1097 <div class="vbo-editbooking-room-traveler-guestnum">
1098 <label for="pets<?php echo $num; ?>"><?php VikBookingIcons::e('dog'); ?> <?php echo JText::translate('VBO_PETS'); ?></label>
1099 <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" />
1100 </div>
1101 </div>
1102 </div>
1103 <div class="vbo-editbooking-room-pricetypes">
1104 <h4><?php echo JText::translate('VBPEDITBUSYSEVEN'); ?></h4>
1105 <div class="vbo-editbooking-room-pricetypes-wrap">
1106 <?php
1107 $is_cust_cost = !empty($or['cust_cost']) && $or['cust_cost'] > 0.00 ? true : false;
1108 $active_rplan_id = 0;
1109 if ($is_package || $is_cust_cost) {
1110 if ($is_package) {
1111 $pkg_name = (!empty($or['pkg_name']) ? $or['pkg_name'] : JText::translate('VBOROOMCUSTRATEPLAN'));
1112 ?>
1113 <div class="vbo-editbooking-room-pricetype vbo-editbooking-room-pricetype-active">
1114 <div class="vbo-editbooking-room-pricetype-inner">
1115 <label for="pid<?php echo $num.$or['id']; ?>"><?php echo $pkg_name; ?></label>
1116 <div class="vbo-editbooking-room-pricetype-cost">
1117 <?php echo $currencysymb." ".VikBooking::numberFormat($or['cust_cost']); ?>
1118 </div>
1119 </div>
1120 <div class="vbo-editbooking-room-pricetype-check">
1121 <input type="radio" name="pkgid<?php echo $num; ?>" id="pid<?php echo $num.$or['id']; ?>" value="<?php echo $or['pkg_id']; ?>" checked="checked" />
1122 </div>
1123 </div>
1124 <?php
1125 } else {
1126 //custom rate
1127 ?>
1128 <div class="vbo-editbooking-room-pricetype vbo-editbooking-room-pricetype-active">
1129 <div class="vbo-editbooking-room-pricetype-inner">
1130 <label for="pid<?php echo $num.$or['id']; ?>">
1131 <?php echo JText::translate('VBOROOMCUSTRATEPLAN').(!empty($or['otarplan']) ? ' ('.ucwords($or['otarplan']).')' : ''); ?>
1132 </label>
1133 <div class="vbo-editbooking-room-pricetype-cost">
1134 <?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');}"/>
1135 <div class="vbo-editbooking-room-pricetype-seltax" id="tax<?php echo $num; ?>" style="display: block;">
1136 <?php echo (!empty($wiva) ? str_replace('%s', $num, str_replace('data-aliqid="'.(int)$or['cust_idiva'].'"', 'selected="selected"', $wiva)) : ''); ?>
1137 </div>
1138 </div>
1139 </div>
1140 <div class="vbo-editbooking-room-pricetype-check">
1141 <input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="pid<?php echo $num.$or['id']; ?>" value="" checked="checked" />
1142 </div>
1143 </div>
1144 <?php
1145 //print the standard rates anyway
1146 foreach ($tars[$num] as $k => $t) {
1147 ?>
1148 <div class="vbo-editbooking-room-pricetype">
1149 <div class="vbo-editbooking-room-pricetype-inner">
1150 <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>
1151 <div class="vbo-editbooking-room-pricetype-cost">
1152 <?php echo $currencysymb." ".VikBooking::numberFormat($t['cost']); ?>
1153 </div>
1154 </div>
1155 <div class="vbo-editbooking-room-pricetype-check">
1156 <input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="pid<?php echo $num.$t['idprice']; ?>" value="<?php echo $t['idprice']; ?>" />
1157 </div>
1158 </div>
1159 <?php
1160 }
1161 }
1162 } else {
1163 $sel_rate_changed = false;
1164 foreach ($tars[$num] as $k => $t) {
1165 $sel_rate_changed = $t['id'] == $or['idtar'] && !empty($or['room_cost']) ? $or['room_cost'] : $sel_rate_changed;
1166 $format_cost = VikBooking::numberFormat($t['cost']);
1167 if ($t['id'] == $or['idtar'] && !empty($or['room_cost'])) {
1168 $active_rplan_id = $t['idprice'];
1169 }
1170 ?>
1171 <div class="vbo-editbooking-room-pricetype<?php echo $t['id'] == $or['idtar'] ? ' vbo-editbooking-room-pricetype-active' : ''; ?>">
1172 <div class="vbo-editbooking-room-pricetype-inner">
1173 <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>
1174 <div class="vbo-editbooking-room-pricetype-cost">
1175 <?php echo $currencysymb." ".$format_cost; ?>
1176 </div>
1177 </div>
1178 <div class="vbo-editbooking-room-pricetype-check">
1179 <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\"" : ""); ?>/>
1180 </div>
1181 <?php
1182 if ($t['id'] == $or['idtar'] && !empty($or['room_cost']) && VikBooking::numberFormat($or['room_cost']) != $format_cost) {
1183 /**
1184 * The current price is different from the price paid at the time of booking.
1185 * Display a checkbox with the information of the previous price to keep it.
1186 *
1187 * @since 1.3.0
1188 */
1189 ?>
1190 <div class="vbo-editbooking-room-pricetype-older">
1191 <div class="vbo-editbooking-room-pricetype-older-inner">
1192 <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>
1193 <div class="vbo-editbooking-room-pricetype-cost">
1194 <?php echo $currencysymb." ".VikBooking::numberFormat($or['room_cost']); ?>
1195 </div>
1196 </div>
1197 <div class="vbo-editbooking-room-pricetype-check-older">
1198 <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"/>
1199 </div>
1200 </div>
1201 <?php
1202 }
1203 ?>
1204 </div>
1205 <?php
1206 }
1207 //print the set custom rate anyway
1208 ?>
1209 <div class="vbo-editbooking-room-pricetype">
1210 <div class="vbo-editbooking-room-pricetype-inner">
1211 <label for="cust_cost<?php echo $num; ?>" class="vbo-custrate-lbl-add"><?php echo JText::translate('VBOROOMCUSTRATEPLANADD'); ?></label>
1212 <div class="vbo-editbooking-room-pricetype-cost">
1213 <?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';}" />
1214 <div class="vbo-editbooking-room-pricetype-seltax" id="tax<?php echo $num; ?>" style="display: none;">
1215 <?php echo (!empty($wiva) ? str_replace('%s', $num, $wiva) : ''); ?>
1216 </div>
1217 </div>
1218 </div>
1219 <div class="vbo-editbooking-room-pricetype-check">
1220 <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';" />
1221 </div>
1222 </div>
1223 <?php
1224 }
1225 ?>
1226 </div>
1227 </div>
1228 <?php
1229 /**
1230 * Meal plans included in the room rate.
1231 *
1232 * @since 1.16.1 (J) - 1.6.1 (WP)
1233 */
1234 $meal_plan_manager = VBOMealplanManager::getInstance();
1235 ?>
1236 <div class="vbo-editbooking-room-services vbo-editbooking-room-meal-plans">
1237 <h4><?php echo JText::translate('VBO_MEAL_PLANS_INCL'); ?></h4>
1238 <div class="vbo-editbooking-room-services-wrap vbo-editbooking-room-meal-plans-wrap">
1239 <?php
1240 foreach ($meal_plan_manager->getPlans() as $meal_enum => $meal_name) {
1241 if (!empty($or['meals'])) {
1242 // check if meal is included in room-reservation record
1243 $meal_included = $meal_plan_manager->roomRateMealIncluded($or, $meal_enum);
1244 } else {
1245 // check if meal is included in the selected rate plan
1246 $meal_included = $active_rplan_id ? $meal_plan_manager->ratePlanMealIncluded($active_rplan_id, $meal_enum) : false;
1247 }
1248 if (!$meal_included && empty($or['meals']) && !empty($ord['idorderota']) && !empty($ord['channel']) && !empty($ord['custdata'])) {
1249 // check if meal is included by using the raw customer data or OTA reservation and room
1250 $meal_included = $meal_plan_manager->otaDataMealIncluded($ord, $or, $meal_enum);
1251 }
1252 ?>
1253 <div class="vbo-editbooking-room-service vbo-editbooking-room-meal-plan">
1254 <div class="vbo-editbooking-room-service-inner vbo-editbooking-room-meal-plan-inner">
1255 <label for="mealplan-<?php echo $num; ?>-<?php echo $meal_enum; ?>"><?php echo $meal_name; ?></label>
1256 </div>
1257 <div class="vbo-editbooking-room-service-check vbo-editbooking-room-meal-plan-check">
1258 <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"' : ''; ?>/>
1259 </div>
1260 </div>
1261 <?php
1262 }
1263 ?>
1264 </div>
1265 </div>
1266 <?php
1267
1268 //Room Options Start
1269 $optionals = empty($or['idopt']) ? '' : VikBooking::getRoomOptionals($or['idopt']);
1270 if ($optionals) {
1271 // apply filters to options
1272 VikBooking::filterOptionalsByDate($optionals, $room_checkin, $room_checkout);
1273 VikBooking::filterOptionalsByParty($optionals, $or['adults'], $or['children']);
1274 }
1275 $arropt = array();
1276 if ($optionals) {
1277 ?>
1278 <div class="vbo-editbooking-room-services vbo-editbooking-room-options pro-feature">
1279 <h4><?php echo JText::translate('VBPEDITBUSYEIGHT'); ?></h4>
1280 <div class="vbo-editbooking-room-services-wrap vbo-editbooking-room-options-wrap">
1281 <?php
1282 list($optionals, $ageintervals) = VikBooking::loadOptionAgeIntervals($optionals, $or['adults'], $or['children']);
1283 if ($ageintervals) {
1284 if ($optionals) {
1285 $ageintervals = array(0 => $ageintervals);
1286 $optionals = array_merge($ageintervals, $optionals);
1287 } else {
1288 $optionals = array(0 => $ageintervals);
1289 }
1290 }
1291 if (!empty($or['optionals'])) {
1292 $haveopt = explode(";", $or['optionals']);
1293 foreach ($haveopt as $ho) {
1294 if (!empty($ho)) {
1295 $havetwo = explode(":", $ho);
1296 if (strstr($havetwo[1], '-') != false) {
1297 $arropt[$havetwo[0]][] = $havetwo[1];
1298 } else {
1299 $arropt[$havetwo[0]] = $havetwo[1];
1300 }
1301 }
1302 }
1303 } else {
1304 $arropt[] = "";
1305 }
1306 foreach ($optionals as $k => $o) {
1307 $oval = "";
1308 if (intval($o['hmany']) == 1) {
1309 if (array_key_exists($o['id'], $arropt)) {
1310 $oval = $arropt[$o['id']];
1311 }
1312 } else {
1313 if (array_key_exists($o['id'], $arropt) && !is_array($arropt[$o['id']])) {
1314 $oval = " checked=\"checked\"";
1315 }
1316 }
1317 if (!empty($o['ageintervals'])) {
1318 if ($or['children'] > 0) {
1319 for ($ch = 1; $ch <= $or['children']; $ch++) {
1320 $chageselect = '<select name="optid'.$num.$o['id'].'[]">'."\n".'<option value=""> </option>'."\n";
1321 /**
1322 * Age intervals may be overridden per child number.
1323 *
1324 * @since 1.13.5
1325 */
1326 $optageovrct = VikBooking::getOptionIntervalChildOverrides($o, $or['adults'], $or['children']);
1327 $intervals = explode(';;', (isset($optageovrct['ageintervals_child' . $ch]) ? $optageovrct['ageintervals_child' . $ch] : $o['ageintervals']));
1328 //
1329 foreach ($intervals as $kintv => $intv) {
1330 if (empty($intv)) {
1331 continue;
1332 }
1333 $intvparts = explode('_', $intv);
1334 $intvparts[2] = intval($o['perday']) == 1 ? ($intvparts[2] * $room_nights) : $intvparts[2];
1335 if (array_key_exists(3, $intvparts) && strpos($intvparts[3], '%') !== false) {
1336 $pricestr = floatval($intvparts[2]) >= 0 ? '+ '.VikBooking::numberFormat($intvparts[2]) : '- '.VikBooking::numberFormat($intvparts[2]);
1337 } else {
1338 $pricestr = floatval($intvparts[2]) >= 0 ? '+ '.VikBooking::numberFormat($intvparts[2]) : '- '.VikBooking::numberFormat($intvparts[2]);
1339 }
1340 $selstatus = '';
1341 if (isset($arropt[$o['id']]) && is_array($arropt[$o['id']])) {
1342 $ageparts = explode('-', $arropt[$o['id']][($ch - 1)]);
1343 if ($kintv == ($ageparts[1] - 1)) {
1344 $selstatus = ' selected="selected"';
1345 }
1346 }
1347 $chageselect .= '<option value="'.($kintv + 1).'"'.$selstatus.'>'.$intvparts[0].' - '.$intvparts[1].' ('.$pricestr.' '.(array_key_exists(3, $intvparts) && strpos($intvparts[3], '%') !== false ? '%' : $currencysymb).')'.'</option>'."\n";
1348 }
1349 $chageselect .= '</select>'."\n";
1350 ?>
1351 <div class="vbo-editbooking-room-service vbo-editbooking-room-option vbo-editbooking-room-option-childage">
1352 <div class="vbo-editbooking-room-service-inner vbo-editbooking-room-option-inner">
1353 <label for="optid<?php echo $num.$o['id'].$ch; ?>"><?php echo JText::translate('VBMAILCHILD').' #'.$ch; ?></label>
1354 <div class="vbo-editbooking-room-service-select vbo-editbooking-room-option-select">
1355 <?php echo $chageselect; ?>
1356 </div>
1357 </div>
1358 </div>
1359 <?php
1360 }
1361 }
1362 } else {
1363 $optquancheckb = 1;
1364 $forcedquan = 1;
1365 $forceperday = false;
1366 $forceperchild = false;
1367 if (intval($o['forcesel']) == 1 && strlen((string)$o['forceval'])) {
1368 $forceparts = explode("-", $o['forceval']);
1369 $forcedquan = intval($forceparts[0]);
1370 $forceperday = intval($forceparts[1]) == 1 ? true : false;
1371 $forceperchild = intval($forceparts[2]) == 1 ? true : false;
1372 $optquancheckb = $forcedquan;
1373 $optquancheckb = $forceperchild === true && array_key_exists($num, $arrpeople) && array_key_exists('children', $arrpeople[$num]) ? ($optquancheckb * $arrpeople[$num]['children']) : $optquancheckb;
1374 }
1375 if (intval($o['perday']) == 1) {
1376 $thisoptcost = $o['cost'] * $room_nights;
1377 } else {
1378 $thisoptcost = $o['cost'];
1379 }
1380 if ($o['maxprice'] > 0 && $thisoptcost > $o['maxprice']) {
1381 $thisoptcost = $o['maxprice'];
1382 }
1383 $thisoptcost = $thisoptcost * $optquancheckb;
1384 if (intval($o['perperson']) == 1) {
1385 $thisoptcost = $thisoptcost * $arrpeople[$num]['adults'];
1386 }
1387 if ($o['pcentroom']) {
1388 // it's a percent value, so we do not multiply anything
1389 $thisoptcost = $o['cost'];
1390 }
1391 ?>
1392 <div class="vbo-editbooking-room-service vbo-editbooking-room-option">
1393 <div class="vbo-editbooking-room-service-inner vbo-editbooking-room-option-inner">
1394 <label for="optid<?php echo $num.$o['id']; ?>"><?php echo $o['name']; ?></label>
1395 <div class="vbo-editbooking-room-service-price vbo-editbooking-room-option-price">
1396 <?php echo (int)$o['pcentroom'] ? '' : $currencysymb.' '; ?><?php echo VikBooking::numberFormat($thisoptcost); ?><?php echo (int)$o['pcentroom'] ? '%' : ''; ?>
1397 </div>
1398 </div>
1399 <div class="vbo-editbooking-room-service-check vbo-editbooking-room-option-check">
1400 <?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."/>"); ?>
1401 </div>
1402 </div>
1403 <?php
1404 }
1405 }
1406 ?>
1407 </div>
1408 </div>
1409 <?php
1410 }
1411 //Room Options End
1412 //custom extra services for each room Start
1413 ?>
1414 <div class="vbo-editbooking-room-extracosts pro-feature" id="vbo-ebusy-extracosts-<?php echo $num; ?>">
1415 <h4>
1416 <?php echo JText::translate('VBPEDITBUSYEXTRACOSTS'); ?>
1417 <button class="btn vbo-ebusy-addextracost" type="button" onclick="vboAddExtraCost('<?php echo $num; ?>');"><?php VikBookingIcons::e('plus-circle'); ?> <?php echo JText::translate('VBPEDITBUSYADDEXTRAC'); ?></button>
1418 </h4>
1419 <div class="vbo-editbooking-room-extracosts-wrap">
1420 <?php
1421 if (!empty($or['extracosts'])) {
1422 $cur_extra_costs = json_decode($or['extracosts'], true);
1423 foreach ($cur_extra_costs as $eck => $ecv) {
1424 $ec_taxopts = '';
1425 foreach ($ivas as $iv) {
1426 $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";
1427 }
1428 ?>
1429 <div class="vbo-editbooking-room-extracost">
1430 <div class="vbo-ebusy-extracosts-cellname">
1431 <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" />
1432 <input type="hidden" name="extractype[<?php echo $num; ?>][]" value="<?php echo isset($ecv['type']) ? JHtml::fetch('esc_attr', $ecv['type']) : ''; ?>" />
1433 <input type="hidden" name="extracfk[<?php echo $num; ?>][]" value="<?php echo isset($ecv['fk']) ? (string)$ecv['fk'] : ''; ?>" />
1434 <input type="hidden" name="extracdata[<?php echo $num; ?>][]" value="<?php echo isset($ecv['data']) ? JHtml::fetch('esc_attr', json_encode($ecv['data'])) : ''; ?>" />
1435 </div>
1436 <div class="vbo-ebusy-extracosts-cellcost">
1437 <span class="vbo-ebusy-extracosts-currency"><?php echo $currencysymb; ?></span>
1438 <input type="number" step="any" name="extracc[<?php echo $num; ?>][]" value="<?php echo addslashes($ecv['cost']); ?>" size="5" />
1439 </div>
1440 <div class="vbo-ebusy-extracosts-celltax">
1441 <select name="extractx[<?php echo $num; ?>][]">
1442 <option value=""><?php echo JText::translate('VBNEWOPTFOUR'); ?></option>
1443 <?php echo $ec_taxopts; ?>
1444 </select>
1445 </div>
1446 <div class="vbo-ebusy-extracosts-cellrm">
1447 <button class="btn btn-danger" type="button" onclick="vboRemoveExtraCost(this);">&times;</button>
1448 </div>
1449 </div>
1450 <?php
1451 }
1452 }
1453 ?>
1454 </div>
1455 </div>
1456 <?php
1457 //custom extra services for each room End
1458 ?>
1459 </div>
1460 <?php
1461 }
1462 //Rooms Loop End
1463 ?>
1464 <div class="vbo-bookingdet-summary-room vbo-editbooking-summary-room vbo-editbooking-summary-totpaid">
1465 <div class="vbo-editbooking-summary-room-head">
1466 <div class="vbo-editbooking-addroom pro-feature">
1467 <button class="btn btn-success" type="button" id="vbo-add-room"><?php VikBookingIcons::e('plus-circle'); ?> <?php echo JText::translate('VBOBOOKADDROOM'); ?></button>
1468 </div>
1469 <div class="vbo-editbooking-totpaid">
1470 <label for="totpaid"><?php echo JText::translate('VBPEDITBUSYTOTPAID'); ?></label>
1471 <?php echo $currencysymb; ?> <input type="number" min="0" step="any" id="totpaid" name="totpaid" value="<?php echo $ord['totpaid']; ?>"/>
1472 </div>
1473 <div class="vbo-editbooking-totpaid vbo-editbooking-totrefund">
1474 <label for="refund"><?php echo JText::translate('VBO_AMOUNT_REFUNDED'); ?></label>
1475 <?php echo $currencysymb; ?> <input type="number" min="0" step="any" id="refund" name="refund" value="<?php echo $ord['refund']; ?>"/>
1476 </div>
1477 </div>
1478 </div>
1479 </div>
1480 <?php
1481 } else {
1482 ?>
1483 <p class="err"><?php echo JText::translate('VBPEDITBUSYERRNOFARES'); ?></p>
1484 <?php
1485 }
1486 //order from front end or correctly saved - end
1487 } elseif (is_array($ord) && empty($ordersrooms[0]['idtar'])) {
1488 //order is a quick reservation from administrator - start
1489 $proceedtars = true;
1490 $rooms = array();
1491 $tars = array();
1492 $arrpeople = array();
1493 foreach ($ordersrooms as $kor => $or) {
1494 $num = $kor + 1;
1495 $rooms[$num] = $or;
1496 $arrpeople[$num]['adults'] = $or['adults'];
1497 $arrpeople[$num]['children'] = $or['children'];
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 // seek for rates
1511 $q = "SELECT * FROM `#__vikbooking_dispcost` WHERE `days`=" . $room_nights . " AND `idroom`=" . (int)$or['idroom'] . " ORDER BY `#__vikbooking_dispcost`.`cost` ASC;";
1512 $dbo->setQuery($q);
1513 $dbo->execute();
1514 if (!$dbo->getNumRows()) {
1515 $proceedtars = false;
1516 break;
1517 }
1518 $tar = $dbo->loadAssocList();
1519 $tar = VikBooking::applySeasonsRoom($tar, $room_checkin, $room_checkout);
1520
1521 // apply OBP rules
1522 $tar = VBORoomHelper::getInstance()->applyOBPRules($tar, $or, $or['adults']);
1523
1524 // push tariffs for this room
1525 $tars[$num] = $tar;
1526 }
1527 if ($proceedtars) {
1528 ?>
1529 <input type="hidden" name="areprices" value="quick"/>
1530 <div class="vbo-editbooking-tbl">
1531 <?php
1532 //Rooms Loop Start
1533 foreach ($ordersrooms as $kor => $or) {
1534 $num = $kor + 1;
1535
1536 // default values to be considered
1537 $room_nights = (int)$ord['days'];
1538 $room_checkin = $ord['checkin'];
1539 $room_checkout = $ord['checkout'];
1540 if ($ord['split_stay'] && count($room_stay_dates) && isset($room_stay_dates[$kor]) && $room_stay_dates[$kor]['idroom'] == $or['idroom']) {
1541 // use appropriate values for split stays
1542 $room_nights = $room_stay_dates[$kor]['nights'];
1543 $room_checkin = $room_stay_dates[$kor]['checkin'];
1544 $room_checkout = $room_stay_dates[$kor]['checkout'];
1545 }
1546 ?>
1547 <div class="vbo-bookingdet-summary-room vbo-editbooking-summary-room">
1548 <div class="vbo-editbooking-summary-room-head">
1549 <div class="vbo-bookingdet-summary-roomnum"><?php VikBookingIcons::e('bed'); ?> <?php echo $or['name']; ?></div>
1550 <div class="vbo-bookingdet-summary-roomguests">
1551 <?php VikBookingIcons::e('male'); ?>
1552 <div class="vbo-bookingdet-summary-roomadults">
1553 <span><?php echo JText::translate('VBEDITORDERADULTS'); ?>:</span> <?php echo $or['adults']; ?>
1554 </div>
1555 <?php
1556 if ($or['children'] > 0) {
1557 ?>
1558 <div class="vbo-bookingdet-summary-roomchildren">
1559 <span><?php echo JText::translate('VBEDITORDERCHILDREN'); ?>:</span> <?php echo $or['children']; ?>
1560 </div>
1561 <?php
1562 }
1563 ?>
1564 </div>
1565 <?php
1566 if (!empty($arrpeople[$num]['t_first_name'])) {
1567 ?>
1568 <div class="vbo-bookingdet-summary-guestname">
1569 <span><?php echo $arrpeople[$num]['t_first_name'].' '.$arrpeople[$num]['t_last_name']; ?></span>
1570 </div>
1571 <?php
1572 }
1573 ?>
1574 </div>
1575 <div class="vbo-editbooking-room-pricetypes">
1576 <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>
1577 <div class="vbo-editbooking-room-pricetypes-wrap">
1578 <?php
1579 //print the standard rates
1580 foreach ($tars[$num] as $k => $t) {
1581 ?>
1582 <div class="vbo-editbooking-room-pricetype">
1583 <div class="vbo-editbooking-room-pricetype-inner">
1584 <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>
1585 <div class="vbo-editbooking-room-pricetype-cost">
1586 <?php echo $currencysymb." ".VikBooking::numberFormat($t['cost']); ?>
1587 </div>
1588 </div>
1589 <div class="vbo-editbooking-room-pricetype-check">
1590 <input class="vbo-pricetype-radio" type="radio" name="priceid<?php echo $num; ?>" id="pid<?php echo $num.$t['idprice']; ?>" value="<?php echo $t['idprice']; ?>" />
1591 </div>
1592 </div>
1593 <?php
1594 }
1595 //print the custom cost
1596 ?>
1597 <div class="vbo-editbooking-room-pricetype">
1598 <div class="vbo-editbooking-room-pricetype-inner">
1599 <label for="cust_cost<?php echo $num; ?>" class="vbo-custrate-lbl-add"><?php echo JText::translate('VBOROOMCUSTRATEPLANADD'); ?></label>
1600 <div class="vbo-editbooking-room-pricetype-cost">
1601 <?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';}" />
1602 <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>
1603 </div>
1604 </div>
1605 <div class="vbo-editbooking-room-pricetype-check">
1606 <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';" />
1607 </div>
1608 </div>
1609 <?php
1610 //
1611 ?>
1612 </div>
1613 </div>
1614 <?php
1615 $optionals = empty($or['idopt']) ? '' : VikBooking::getRoomOptionals($or['idopt']);
1616 if ($optionals) {
1617 // apply filters to options
1618 VikBooking::filterOptionalsByDate($optionals, $room_checkin, $room_checkout);
1619 VikBooking::filterOptionalsByParty($optionals, $or['adults'], $or['children']);
1620 }
1621 $arropt = array();
1622 //Room Options Start
1623 if ($optionals) {
1624 list($optionals, $ageintervals) = VikBooking::loadOptionAgeIntervals($optionals, $or['adults'], $or['children']);
1625 if ($ageintervals) {
1626 if ($optionals) {
1627 $ageintervals = array(0 => $ageintervals);
1628 $optionals = array_merge($ageintervals, $optionals);
1629 } else {
1630 $optionals = array(0 => $ageintervals);
1631 }
1632 }
1633 if (!empty($or['optionals'])) {
1634 $haveopt = explode(";", $or['optionals']);
1635 foreach ($haveopt as $ho) {
1636 if (!empty($ho)) {
1637 $havetwo = explode(":", $ho);
1638 if (strstr($havetwo[1], '-') != false) {
1639 $arropt[$havetwo[0]][] = $havetwo[1];
1640 } else {
1641 $arropt[$havetwo[0]] = $havetwo[1];
1642 }
1643 }
1644 }
1645 } else {
1646 $arropt[] = "";
1647 }
1648 ?>
1649 <div class="vbo-editbooking-room-services vbo-editbooking-room-options">
1650 <h4><?php echo JText::translate('VBPEDITBUSYEIGHT'); ?></h4>
1651 <div class="vbo-editbooking-room-services-wrap vbo-editbooking-room-options-wrap">
1652 <?php
1653 foreach ($optionals as $k => $o) {
1654 $oval = "";
1655 if (intval($o['hmany']) == 1) {
1656 if (array_key_exists($o['id'], $arropt)) {
1657 $oval = $arropt[$o['id']];
1658 }
1659 } else {
1660 if (array_key_exists($o['id'], $arropt) && !is_array($arropt[$o['id']])) {
1661 $oval = " checked=\"checked\"";
1662 }
1663 }
1664 if (!empty($o['ageintervals'])) {
1665 if ($or['children'] > 0) {
1666 for ($ch = 1; $ch <= $or['children']; $ch++) {
1667 $chageselect = '<select name="optid'.$num.$o['id'].'[]">'."\n".'<option value=""> </option>'."\n";
1668 /**
1669 * Age intervals may be overridden per child number.
1670 *
1671 * @since 1.13.5
1672 */
1673 $optageovrct = VikBooking::getOptionIntervalChildOverrides($o, $or['adults'], $or['children']);
1674 $intervals = explode(';;', (isset($optageovrct['ageintervals_child' . $ch]) ? $optageovrct['ageintervals_child' . $ch] : $o['ageintervals']));
1675 //
1676 foreach ($intervals as $kintv => $intv) {
1677 if (empty($intv)) {
1678 continue;
1679 }
1680 $intvparts = explode('_', $intv);
1681 $intvparts[2] = intval($o['perday']) == 1 ? ($intvparts[2] * $room_nights) : $intvparts[2];
1682 if (array_key_exists(3, $intvparts) && strpos($intvparts[3], '%') !== false) {
1683 $pricestr = floatval($intvparts[2]) >= 0 ? '+ '.VikBooking::numberFormat($intvparts[2]) : '- '.VikBooking::numberFormat($intvparts[2]);
1684 } else {
1685 $pricestr = floatval($intvparts[2]) >= 0 ? '+ '.VikBooking::numberFormat($intvparts[2]) : '- '.VikBooking::numberFormat($intvparts[2]);
1686 }
1687 $selstatus = '';
1688 if (isset($arropt[$o['id']]) && is_array($arropt[$o['id']])) {
1689 $ageparts = explode('-', $arropt[$o['id']][($ch - 1)]);
1690 if ($kintv == ($ageparts[1] - 1)) {
1691 $selstatus = ' selected="selected"';
1692 }
1693 }
1694 $chageselect .= '<option value="'.($kintv + 1).'"'.$selstatus.'>'.$intvparts[0].' - '.$intvparts[1].' ('.$pricestr.' '.(array_key_exists(3, $intvparts) && strpos($intvparts[3], '%') !== false ? '%' : $currencysymb).')'.'</option>'."\n";
1695 }
1696 $chageselect .= '</select>'."\n";
1697 ?>
1698 <div class="vbo-editbooking-room-service vbo-editbooking-room-option vbo-editbooking-room-option-childage">
1699 <div class="vbo-editbooking-room-service-inner vbo-editbooking-room-option-inner">
1700 <label for="optid<?php echo $num.$o['id'].$ch; ?>"><?php echo JText::translate('VBMAILCHILD').' #'.$ch; ?></label>
1701 <div class="vbo-editbooking-room-service-select vbo-editbooking-room-option-select">
1702 <?php echo $chageselect; ?>
1703 </div>
1704 </div>
1705 </div>
1706 <?php
1707 }
1708 }
1709 } else {
1710 $optquancheckb = 1;
1711 $forcedquan = 1;
1712 $forceperday = false;
1713 $forceperchild = false;
1714 if (intval($o['forcesel']) == 1 && strlen((string)$o['forceval'])) {
1715 $forceparts = explode("-", $o['forceval']);
1716 $forcedquan = intval($forceparts[0]);
1717 $forceperday = intval($forceparts[1]) == 1 ? true : false;
1718 $forceperchild = intval($forceparts[2]) == 1 ? true : false;
1719 $optquancheckb = $forcedquan;
1720 $optquancheckb = $forceperchild === true && array_key_exists($num, $arrpeople) && array_key_exists('children', $arrpeople[$num]) ? ($optquancheckb * $arrpeople[$num]['children']) : $optquancheckb;
1721 }
1722 if (intval($o['perday']) == 1) {
1723 $thisoptcost = $o['cost'] * $room_nights;
1724 } else {
1725 $thisoptcost = $o['cost'];
1726 }
1727 if ($o['maxprice'] > 0 && $thisoptcost > $o['maxprice']) {
1728 $thisoptcost = $o['maxprice'];
1729 }
1730 $thisoptcost = $thisoptcost * $optquancheckb;
1731 if (intval($o['perperson']) == 1) {
1732 $thisoptcost = $thisoptcost * $arrpeople[$num]['adults'];
1733 }
1734 ?>
1735 <div class="vbo-editbooking-room-service vbo-editbooking-room-option">
1736 <div class="vbo-editbooking-room-service-inner vbo-editbooking-room-option-inner">
1737 <label for="optid<?php echo $num.$o['id']; ?>"><?php echo $o['name']; ?></label>
1738 <div class="vbo-editbooking-room-service-check vbo-editbooking-room-option-check">
1739 <?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."/>"); ?>
1740 </div>
1741 </div>
1742 </div>
1743 <?php
1744 }
1745 }
1746 ?>
1747 </div>
1748 </div>
1749 <?php
1750 }
1751 //Room Options End
1752 //custom extra services for each room Start
1753 if (!empty($or['extracosts'])) {
1754 $cur_extra_costs = json_decode($or['extracosts'], true);
1755 ?>
1756 <div class="vbo-editbooking-room-extracosts" id="vbo-ebusy-extracosts-<?php echo $num; ?>">
1757 <h4>
1758 <?php echo JText::translate('VBPEDITBUSYEXTRACOSTS'); ?>
1759 <button class="btn vbo-ebusy-addextracost" type="button" onclick="vboAddExtraCost('<?php echo $num; ?>');"><?php VikBookingIcons::e('plus-circle'); ?> <?php echo JText::translate('VBPEDITBUSYADDEXTRAC'); ?></button>
1760 </h4>
1761 <div class="vbo-editbooking-room-extracosts-wrap">
1762 <?php
1763 foreach ($cur_extra_costs as $eck => $ecv) {
1764 $ec_taxopts = '';
1765 foreach ($ivas as $iv) {
1766 $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";
1767 }
1768 ?>
1769 <div class="vbo-editbooking-room-extracost">
1770 <div class="vbo-ebusy-extracosts-cellname">
1771 <input type="text" name="extracn[<?php echo $num; ?>][]" value="<?php echo addslashes($ecv['name']); ?>" placeholder="<?php echo addslashes(JText::translate('VBPEDITBUSYEXTRACNAME')); ?>" size="25" />
1772 </div>
1773 <div class="vbo-ebusy-extracosts-cellcost">
1774 <span class="vbo-ebusy-extracosts-currency"><?php echo $currencysymb; ?></span>
1775 <input type="number" step="any" name="extracc[<?php echo $num; ?>][]" value="<?php echo addslashes($ecv['cost']); ?>" size="5" />
1776 </div>
1777 <div class="vbo-ebusy-extracosts-celltax">
1778 <select name="extractx[<?php echo $num; ?>][]">
1779 <option value=""><?php echo JText::translate('VBNEWOPTFOUR'); ?></option>
1780 <?php echo $ec_taxopts; ?>
1781 </select>
1782 </div>
1783 <div class="vbo-ebusy-extracosts-cellrm">
1784 <button class="btn btn-danger" type="button" onclick="vboRemoveExtraCost(this);">&times;</button>
1785 </div>
1786 </div>
1787 <?php
1788 }
1789 ?>
1790 </div>
1791 </div>
1792 <?php
1793 }
1794 //custom extra services for each room End
1795 ?>
1796 </div>
1797 <?php
1798 }
1799 //Rooms Loop End
1800 ?>
1801 <div class="vbo-bookingdet-summary-room vbo-editbooking-summary-room vbo-editbooking-summary-totpaid">
1802 <div class="vbo-editbooking-summary-room-head">
1803 <div class="vbo-editbooking-totpaid">
1804 <label for="totpaid"><?php echo JText::translate('VBPEDITBUSYTOTPAID'); ?></label>
1805 <?php echo $currencysymb; ?> <input type="number" min="0" step="any" id="totpaid" name="totpaid" value="<?php echo $ord['totpaid']; ?>"/>
1806 </div>
1807 <div class="vbo-editbooking-totpaid vbo-editbooking-totrefund">
1808 <label for="refund"><?php echo JText::translate('VBO_AMOUNT_REFUNDED'); ?></label>
1809 <?php echo $currencysymb; ?> <input type="number" min="0" step="any" id="refund" name="refund" value="<?php echo $ord['refund']; ?>"/>
1810 </div>
1811 </div>
1812 </div>
1813 </div>
1814 <?php
1815 } else {
1816 ?>
1817 <p class="err"><?php echo JText::translate('VBPEDITBUSYERRNOFARES'); ?></p>
1818 <?php
1819 }
1820 //order is a quick reservation from administrator - end
1821 }
1822 ?>
1823 </div>
1824 </div>
1825 </div>
1826 <input type="hidden" name="task" value="">
1827 <input type="hidden" name="idorder" value="<?php echo $ord['id']; ?>">
1828 <input type="hidden" name="option" value="com_vikbooking">
1829 <?php
1830 $pfrominv = VikRequest::getInt('frominv', '', 'request');
1831 echo $pfrominv == 1 ? '<input type="hidden" name="frominv" value="1">' : '';
1832 $pvcm = VikRequest::getInt('vcm', '', 'request');
1833 echo $pvcm == 1 ? '<input type="hidden" name="vcm" value="1">' : '';
1834 echo $pgoto == 'overv' ? '<input type="hidden" name="goto" value="overv">' : '';
1835 ?>
1836 </form>
1837 </div>
1838
1839 <script type="text/javascript">
1840 jQuery(function() {
1841 jQuery('#checkindate').val('<?php echo $rit; ?>').attr('data-alt-value', '<?php echo $rit; ?>');
1842 jQuery('#checkoutdate').val('<?php echo $con; ?>').attr('data-alt-value', '<?php echo $con; ?>');
1843 <?php
1844 foreach ($js_cal_def_vals as $js_cal_def_val) {
1845 ?>
1846 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']; ?>');
1847 <?php
1848 }
1849 ?>
1850 jQuery('.vbo-pricetype-radio').change(function() {
1851 jQuery(this).closest('.vbo-editbooking-room-pricetypes').find('.vbo-editbooking-room-pricetype.vbo-editbooking-room-pricetype-active').removeClass('vbo-editbooking-room-pricetype-active');
1852 jQuery(this).closest('.vbo-editbooking-room-pricetype').addClass('vbo-editbooking-room-pricetype-active');
1853 });
1854 });
1855 if (jQuery.isFunction(jQuery.fn.tooltip)) {
1856 jQuery(".hasTooltip").tooltip();
1857 }
1858 </script>
1859