diff --git a/admin/themes/default/template/controllers/orders/_product_line.tpl b/admin/themes/default/template/controllers/orders/_product_line.tpl
index fe5039d2c..e68b185df 100644
--- a/admin/themes/default/template/controllers/orders/_product_line.tpl
+++ b/admin/themes/default/template/controllers/orders/_product_line.tpl
@@ -221,10 +221,14 @@
{/if}
- {if isset($refundReqBookings) && $refundReqBookings}
+ {if (isset($refundReqBookings) && $refundReqBookings) || (isset($isCancelledRoom) && $isCancelledRoom)}
- {if isset($data.refund_info) && $data.refund_info}
+ {if $data.is_cancelled}
+ {l s='Cancelled'}
+ {elseif isset($data.refund_info) && $data.refund_info}
{$data.refund_info.name|escape:'html':'UTF-8'}
+ {else}
+ --
{/if}
|
diff --git a/admin/themes/default/template/controllers/orders/_rooms_informaion_table.tpl b/admin/themes/default/template/controllers/orders/_rooms_informaion_table.tpl
index 0419ec9cd..41d7b56c5 100644
--- a/admin/themes/default/template/controllers/orders/_rooms_informaion_table.tpl
+++ b/admin/themes/default/template/controllers/orders/_rooms_informaion_table.tpl
@@ -16,12 +16,12 @@
| {l s='Extra Services/Fee (Tax excl.)'} |
{l s='Total Tax'} |
{l s='Total Price (Tax incl.)'} |
- {if isset($refundReqBookings) && $refundReqBookings}
- {l s='Refund State'} |
+ {if (isset($refundReqBookings) && $refundReqBookings) || (isset($isCancelledRoom) && $isCancelledRoom)}
+ {l s='Refund/Cancellation Status'} |
{l s='Refunded amount'} |
{/if}
{if ($can_edit && !$order->hasBeenDelivered())}
- {l s='Edit Order'} |
+ {l s='Edit Order'} |
{/if}
diff --git a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl
index cb757e317..0c58d10b2 100644
--- a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl
+++ b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl
@@ -281,55 +281,57 @@
{if isset($htl_booking_order_data) && $htl_booking_order_data}
{foreach from=$htl_booking_order_data item=data}
-
- |
- {$data['room_num']}
- |
-
-
- {$data['hotel_name']}
-
- |
-
- {dateFormat date=$data['date_from']} - {dateFormat date=$data['date_to']}
- |
-
-
-
- {l s='Documents'} {$data.num_checkin_documents}
-
- |
-
-
+ |
+
+ {/if}
{/foreach}
{else}
@@ -2101,4 +2103,4 @@
});
-{/block}
+{/block}
\ No newline at end of file
diff --git a/classes/Product.php b/classes/Product.php
index 5be2d2244..84fc215a2 100644
--- a/classes/Product.php
+++ b/classes/Product.php
@@ -3078,7 +3078,7 @@ class ProductCore extends ObjectModel
$address_infos = Address::getCountryAndState($id_address);
}
- if (isset($address_infos['id_country'])) {
+ if (isset($address_infos['id_country']) && $address_infos['id_country']) {
$id_country = (int)$address_infos['id_country'];
$id_state = (int)$address_infos['id_state'];
$zipcode = $address_infos['postcode'];
diff --git a/classes/order/Order.php b/classes/order/Order.php
index ee5ed845d..73d0a801e 100644
--- a/classes/order/Order.php
+++ b/classes/order/Order.php
@@ -1781,7 +1781,7 @@ class OrderCore extends ObjectModel
// We put autodate parameter of add method to true if date_add field is null
if ($res = $order_payment->add(is_null($order_payment->date_add))) {
if ($update_payment_detail) {
- $res &= $this->addOrderPaymentDetail($order_payment, $amount_paid, $order_invoice);
+ $res = $res && $this->addOrderPaymentDetail($order_payment, $amount_paid, $order_invoice);
}
}
@@ -2553,8 +2553,8 @@ class OrderCore extends ObjectModel
// $refundFlag [ORDER_RETURN_STATE_FLAG_REFUNDED || ORDER_RETURN_STATE_FLAG_DENIED]
public function hasCompletelyRefunded($refundFlag = 0)
{
+ $objHotelBooking = new HotelBookingdetail();
if ($refundBookings = OrderReturn::getOrdersReturnDetail($this->id)) {
- $objHotelBooking = new HotelBookingdetail();
if ($orderBookings = $objHotelBooking->getOrderCurrentDataByOrderId($this->id)) {
if (count($refundBookings) == count($orderBookings)) {
if ($refundFlag) {
@@ -2578,6 +2578,12 @@ class OrderCore extends ObjectModel
return true;
}
}
+ } elseif ($orderBookings = $objHotelBooking->getOrderCurrentDataByOrderId($this->id)) {
+ if (count(array_unique(array_column($orderBookings, 'is_cancelled'))) === 1
+ && array_unique(array_column($orderBookings, 'is_cancelled'))[0] != 0
+ ) {
+ return true;
+ }
}
return false;
@@ -2599,4 +2605,4 @@ class OrderCore extends ObjectModel
'SELECT `id` FROM `'._DB_PREFIX_.'htl_booking_detail` WHERE `id_order` = '.(int)$this->id.' ORDER BY `id` ASC'
);
}
-}
+}
\ No newline at end of file
diff --git a/classes/order/OrderReturn.php b/classes/order/OrderReturn.php
index 0c27a44e7..92e0bad77 100644
--- a/classes/order/OrderReturn.php
+++ b/classes/order/OrderReturn.php
@@ -198,51 +198,43 @@ class OrderReturnCore extends ObjectModel
$objBookingDemands = new HotelBookingDemands();
$objRoomTypeServiceProductOrderDetail = new RoomTypeServiceProductOrderDetail();
+ $objOrder = new Order($idOrder);
foreach ($returnDetails as &$bookingRow) {
- $bookingRow['extra_demands_price_tax_incl'] = $objBookingDemands->getRoomTypeBookingExtraDemands(
- $bookingRow['id_order'],
- $bookingRow['id_product'],
- $bookingRow['id_room'],
- $bookingRow['date_from'],
- $bookingRow['date_to'],
- 0,
- 1
- );
- $bookingRow['extra_demands_price_tax_excl'] = $objBookingDemands->getRoomTypeBookingExtraDemands(
- $bookingRow['id_order'],
- $bookingRow['id_product'],
- $bookingRow['id_room'],
- $bookingRow['date_from'],
- $bookingRow['date_to'],
- 0,
- 1,
- 0
- );
- $bookingRow['additional_services_tax_excl'] = $objRoomTypeServiceProductOrderDetail->getroomTypeServiceProducts(
- $bookingRow['id_order'],
- 0,
- 0,
- $bookingRow['id_product'],
- $bookingRow['date_from'],
- $bookingRow['date_to'],
- $bookingRow['id_room'],
- 1,
- 0,
- null
- );
- $bookingRow['additional_services_tax_incl'] = $objRoomTypeServiceProductOrderDetail->getroomTypeServiceProducts(
- $bookingRow['id_order'],
- 0,
- 0,
- $bookingRow['id_product'],
- $bookingRow['date_from'],
- $bookingRow['date_to'],
- $bookingRow['id_room'],
- 1,
- 1,
- null
- );
+ $bookingRow['extra_service_total_paid_amount'] = 0;
+ $bookingRow['extra_service_total_price_tax_incl'] = 0;
+ $bookingRow['room_paid_amount'] = 0;
+ if ($objOrder->total_paid_real > 0) {
+ if ($bookingRow['total_price_tax_incl'] > 0) {
+ $bookingRow['room_paid_amount'] = ($objOrder->total_paid_real*$bookingRow['total_price_tax_incl'])/$objOrder->total_paid_tax_incl;
+ }
+ $roomSelectedDemands = $objBookingDemands->getRoomTypeBookingExtraDemands(
+ $idOrder,
+ $bookingRow['id_product'],
+ $bookingRow['id_room'],
+ $bookingRow['date_from'],
+ $bookingRow['date_to'],
+ 0
+ );
+ if (count($roomSelectedDemands)) {
+ foreach ($roomSelectedDemands as $demand) {
+ if ($demand['total_price_tax_incl'] > 0) {
+ $bookingRow['extra_service_total_paid_amount'] += ($objOrder->total_paid_real*$demand['total_price_tax_incl'])/$objOrder->total_paid_tax_incl;
+ $bookingRow['extra_service_total_price_tax_incl'] += $demand['total_price_tax_incl'];
+ }
+ }
+ }
+ if ($roomSelectedServices = $objRoomTypeServiceProductOrderDetail->getSelectedServicesForRoom($bookingRow['id_htl_booking'])) {
+ if (count($roomSelectedServices['additional_services'])) {
+ foreach ($roomSelectedServices['additional_services'] as $service) {
+ if ($service['total_price_tax_incl'] > 0) {
+ $bookingRow['extra_service_total_paid_amount'] += ($objOrder->total_paid_real*$service['total_price_tax_incl'])/$objOrder->total_paid_tax_incl;
+ $bookingRow['extra_service_total_price_tax_incl'] += $service['total_price_tax_incl'];
+ }
+ }
+ }
+ }
+ }
if ($customerView) {
$dateJoin = $bookingRow['id_product'].'_'.strtotime($bookingRow['date_from']).strtotime($bookingRow['date_to']);
if (isset($returnsCustView[$dateJoin]['num_rooms'])) {
@@ -250,10 +242,6 @@ class OrderReturnCore extends ObjectModel
$returnsCustView[$dateJoin]['refunded_amount'] += $bookingRow['refunded_amount'];
$returnsCustView[$dateJoin]['total_price_tax_incl'] += $bookingRow['total_price_tax_incl'];
$returnsCustView[$dateJoin]['total_paid_amount'] += $bookingRow['total_paid_amount'];
- $returnsCustView[$dateJoin]['extra_demands_price_tax_incl'] += $bookingRow['extra_demands_price_tax_incl'];
- $returnsCustView[$dateJoin]['extra_demands_price_tax_incl'] += $bookingRow['additional_services_tax_incl'];
- $returnsCustView[$dateJoin]['extra_demands_price_tax_excl'] += $bookingRow['extra_demands_price_tax_excl'];
- $returnsCustView[$dateJoin]['extra_demands_price_tax_excl'] += $bookingRow['additional_services_tax_excl'];
} else {
unset($bookingRow['id_room']);
unset($bookingRow['room_num']);
@@ -277,10 +265,12 @@ class OrderReturnCore extends ObjectModel
}
$sql = 'SELECT orr.`id_order`, orr.`state`, orr.`id_order_return`, orr.`payment_mode`, orr.`id_transaction`,
orr.`id_return_type`, orr.`return_type`, ors.`id_cart_rule`, orr.`date_add`, orr.`date_upd`,
- COUNT(ord.`id_order_return_detail`) AS total_rooms
+ hbd.`is_cancelled`, COUNT(ord.`id_order_return_detail`) AS total_rooms
FROM `'._DB_PREFIX_.'order_return` orr
LEFT JOIN `'._DB_PREFIX_.'order_return_detail` ord
ON (ord.`id_order_return` = orr.`id_order_return`)
+ LEFT JOIN `'._DB_PREFIX_.'htl_booking_detail` hbd
+ ON (hbd.`id` = ord.`id_htl_booking`)
LEFT JOIN `'._DB_PREFIX_.'order_slip` ors
ON (ors.`id_order_slip` = orr.`id_return_type` AND orr.`return_type` = '.(int) self::RETURN_TYPE_ORDER_SLIP.')
WHERE orr.`id_customer` = '.(int)$customer_id.
diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php
index 5f2f2f568..039260ad1 100644
--- a/controllers/admin/AdminOrdersController.php
+++ b/controllers/admin/AdminOrdersController.php
@@ -251,6 +251,7 @@ class AdminOrdersControllerCore extends AdminController
$this->access_where = ' WHERE hbd.id_hotel IN ('.implode(',', $acsHtls).')';
}
+
parent::__construct();
}
@@ -1729,6 +1730,10 @@ class AdminOrdersControllerCore extends AdminController
$bookingOrderRoomInfo['num_checkin_documents'] = HotelBookingDocument::getCountByIdHtlBooking($bookingOrderRoomInfo['id']);
}
+ $objHotelBookingDetail = new HotelBookingDetail();
+ $htlBookingDetail = $objHotelBookingDetail->getOrderCurrentDataByOrderId($order->id);
+ $isCancelledRoom = in_array(1, array_column($htlBookingDetail, 'is_cancelled'));
+
// hotel booking statuses
$htlOrderStatus = HotelBookingDetail::getAllHotelOrderStatus();
@@ -1826,6 +1831,7 @@ class AdminOrdersControllerCore extends AdminController
'products' => $products,
'customer' => $customer)
),
+ 'isCancelledRoom' => $isCancelledRoom,
);
return parent::renderView();
@@ -3163,7 +3169,6 @@ class AdminOrdersControllerCore extends AdminController
// delete cart feature prices after room addition success
HotelRoomTypeFeaturePricing::deleteByIdCart($cart->id);
-
die(json_encode(array(
'result' => true,
//'view' => $this->createTemplate('_product_line.tpl')->fetch(),
@@ -3706,7 +3711,6 @@ class AdminOrdersControllerCore extends AdminController
}
$this->sendChangedNotification($order);
-
die(json_encode(array(
'result' => $res,
'view' => $view,
@@ -4007,31 +4011,19 @@ class AdminOrdersControllerCore extends AdminController
$objRoomTypeServiceProductOrderDetail = new RoomTypeServiceProductOrderDetail();
$additionlServicesTI = $objRoomTypeServiceProductOrderDetail->getSelectedServicesForRoom(
- $id_order,
- $id_product,
- $date_from,
- $date_to,
- $id_room,
+ $idHotelBooking,
1,
1
);
$additionlServicesTE = $objRoomTypeServiceProductOrderDetail->getSelectedServicesForRoom(
- $id_order,
- $id_product,
- $date_from,
- $date_to,
- $id_room,
+ $idHotelBooking,
1,
0
);
$selectedAdditonalServices = $objRoomTypeServiceProductOrderDetail->getSelectedServicesForRoom(
- $id_order,
- $id_product,
- $date_from,
- $date_to,
- $id_room
+ $idHotelBooking
);
@@ -4142,7 +4134,7 @@ class AdminOrdersControllerCore extends AdminController
// delete the demands od this booking
$objBookingDemand->deleteBookingDemands($idHotelBooking);
- $objRoomTypeServiceProductOrderDetail->deleteRoomSevicesByIdHotelBookingDetail($idHotelBooking);
+ $objRoomTypeServiceProductOrderDetail->deleteRoomSevices($idHotelBooking);
/*By webkul to delete cart and order entries from cart and order tables of hotelreservationsystem when delete booking form the order line in order detaoil page*/
$obj_htl_cart_booking = new HotelCartBookingData();
@@ -4162,7 +4154,6 @@ class AdminOrdersControllerCore extends AdminController
));
$this->sendChangedNotification($order);
-
die(json_encode(array(
'result' => $res,
'order' => $order,
@@ -4748,11 +4739,7 @@ class AdminOrdersControllerCore extends AdminController
$objRoomTypeServiceProductOrderDetail = new RoomTypeServiceProductOrderDetail();
if ($additionalServices = $objRoomTypeServiceProductOrderDetail->getSelectedServicesForRoom(
- $idOrder,
- $idProduct,
- $dateFrom,
- $dateTo,
- $idRoom
+ $htlBookingDetail['id']
)) {
$smartyVars['additionalServices'] = $additionalServices;
}
@@ -4795,11 +4782,7 @@ class AdminOrdersControllerCore extends AdminController
$smartyVars['id_booking_detail'] = $htlBookingDetail['id'];
$objRoomTypeServiceProductOrderDetail = new RoomTypeServiceProductOrderDetail();
if ($additionalServices = $objRoomTypeServiceProductOrderDetail->getSelectedServicesForRoom(
- $idOrder,
- $idProduct,
- $dateFrom,
- $dateTo,
- $idRoom
+ $htlBookingDetail['id']
)) {
$smartyVars['additionalServices'] = $additionalServices;
}
diff --git a/controllers/front/OrderDetailController.php b/controllers/front/OrderDetailController.php
index 286061863..196091216 100644
--- a/controllers/front/OrderDetailController.php
+++ b/controllers/front/OrderDetailController.php
@@ -242,7 +242,15 @@ class OrderDetailControllerCore extends FrontController
} else {
$hasError = 1;
}
+ $res = true;
if (!$hasError) {
+ if ((int)$order->total_paid_real == 0){
+ foreach ($bookingRefunds as $idHtlBooking) {
+ $objHtlBooking = new HotelBookingDetail($idHtlBooking);
+ $objHtlBooking->save();
+ }
+ }
+
$objOrderReturn = new OrderReturn();
$objOrderReturn->id_customer = $order->id_customer;
$objOrderReturn->id_order = $order->id;
@@ -381,6 +389,13 @@ class OrderDetailControllerCore extends FrontController
if ($data_v['is_back_order']) {
$anyBackOrder = 1;
}
+ if ($data_v['is_refunded']) {
+ $cartHotelData[$type_key]['date_diff'][$date_join]['count_refunded'] += 1;
+ }
+ if ($data_v['is_cancelled']) {
+ $cartHotelData[$type_key]['date_diff'][$date_join]['count_cancelled'] += 1;
+ $cartHotelData[$type_key]['date_diff'][$date_join]['count_refunded'] -= 1;
+ }
} else {
$num_days = $objBookingDetail->getNumberOfDays($data_v['date_from'], $data_v['date_to']);
$cartHotelData[$type_key]['date_diff'][$date_join]['num_rm'] = 1;
@@ -400,8 +415,19 @@ class OrderDetailControllerCore extends FrontController
if ($data_v['is_back_order']) {
$anyBackOrder = 1;
}
+ $cartHotelData[$type_key]['date_diff'][$date_join]['count_cancelled'] = 0;
+ $cartHotelData[$type_key]['date_diff'][$date_join]['count_refunded'] = 0;
+ if ($data_v['is_refunded']) {
+ $cartHotelData[$type_key]['date_diff'][$date_join]['count_refunded'] += 1;
+ }
+ if ($data_v['is_cancelled']) {
+ $cartHotelData[$type_key]['date_diff'][$date_join]['count_cancelled'] += 1;
+ $cartHotelData[$type_key]['date_diff'][$date_join]['count_refunded'] -= 1;
+ }
}
+ $cartHotelData[$type_key]['date_diff'][$date_join]['is_refunded'] = $data_v['is_refunded'];
+
$cartHotelData[$type_key]['date_diff'][$date_join]['ids_htl_booking_detail'][] = $data_v['id'];
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
@@ -575,6 +601,9 @@ class OrderDetailControllerCore extends FrontController
$redirectTermsLink = $this->context->link->getCMSLink(new CMS(3, $this->context->language->id), null, $this->context->language->id);
}
+
+ $objHotelBookingDetail = new HotelBookingDetail();
+ $htlBookingDetail = $objHotelBookingDetail->getOrderCurrentDataByOrderId($order->id);
$this->context->smarty->assign(
array(
'id_cms_refund_policy' => Configuration::get('WK_GLOBAL_REFUND_POLICY_CMS'),
@@ -664,4 +693,4 @@ class OrderDetailControllerCore extends FrontController
$this->addCSS(_THEME_CSS_DIR_.'addresses.css');
}
}
-}
+}
\ No newline at end of file
diff --git a/controllers/front/OrderReturnController.php b/controllers/front/OrderReturnController.php
index a1a16e861..6e59569b2 100644
--- a/controllers/front/OrderReturnController.php
+++ b/controllers/front/OrderReturnController.php
@@ -51,11 +51,17 @@ class OrderReturnControllerCore extends FrontController
$orderCurrency = new Currency($objOrder->id_currency);
$refundReqBookings = $objOrderReturn->getOrderRefundRequestedBookings($objOrderReturn->id_order, $objOrderReturn->id, 0, 1);
-
+ $isCanceled = false;
+ if (count(array_unique(array_column($refundReqBookings, 'is_cancelled'))) === 1
+ && array_unique(array_column($refundReqBookings, 'is_cancelled'))[0] != 0
+ ) {
+ $isCanceled = true;
+ }
$this->context->smarty->assign(
array (
'orderReturnInfo' => (array)$objOrderReturn,
'refundReqBookings' => $refundReqBookings,
+ 'isCanceled' => $isCanceled,
'orderInfo' => (array) $objOrder,
'orderCurrency' => (array) $orderCurrency,
'currentStateInfo' => (array) new OrderReturnState($objOrderReturn->state,
diff --git a/install/data/xml/configuration.xml b/install/data/xml/configuration.xml
index c9babed8d..935de20ba 100644
--- a/install/data/xml/configuration.xml
+++ b/install/data/xml/configuration.xml
@@ -906,4 +906,4 @@
1
-
+
\ No newline at end of file
diff --git a/modules/hotelreservationsystem/classes/HotelBookingDetail.php b/modules/hotelreservationsystem/classes/HotelBookingDetail.php
index b3d34ef58..8f2b3ad49 100644
--- a/modules/hotelreservationsystem/classes/HotelBookingDetail.php
+++ b/modules/hotelreservationsystem/classes/HotelBookingDetail.php
@@ -44,6 +44,7 @@ class HotelBookingDetail extends ObjectModel
public $is_back_order;
public $id_status;
public $is_refunded;
+ public $is_cancelled;
// public $available_for_order;
// hotel information/location/contact
@@ -107,6 +108,7 @@ class HotelBookingDetail extends ObjectModel
'total_price_tax_incl' => array('type' => self::TYPE_FLOAT, 'validate' => 'isPrice', 'required' => true),
'total_paid_amount' => array('type' => self::TYPE_FLOAT, 'validate' => 'isPrice', 'default' => 0, 'required' => true),
'is_refunded' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
+ 'is_cancelled' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
// 'available_for_order' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'is_back_order' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
diff --git a/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php b/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php
index 491c82c29..12ed9ae83 100644
--- a/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php
+++ b/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php
@@ -126,17 +126,16 @@ class HotelOrderRefundRules extends ObjectModel
return Db::getInstance()->getRow('SELECT * FROM `'._DB_PREFIX_.'htl_order_refund_rules` WHERE days='.$days);
}
- public function calculateDeductionAmountFromRefundRules($idOrder, $idOrderReturn = 0, $idHtlBooking = 0)
+ public function getBookingCancellationDetails($idOrder, $idOrderReturn = 0, $idHtlBooking = 0)
{
- $totalCancelationCharges = 0;
-
+ $bookingCancellations = array();
$objHtlRefundRules = new HotelBranchRefundRules();
$objHotelBookingDemands = new HotelBookingDemands();
$objRoomTypeServiceProductOrderDetail = new RoomTypeServiceProductOrderDetail();
if ($bookingsToRefund = OrderReturn::getOrdersReturnDetail($idOrder, $idOrderReturn, $idHtlBooking)) {
foreach ($bookingsToRefund as $booking) {
- $bookingCancellationCharge = 0;
+ $bookingCancellationDetail = array();
if (Validate::isLoadedObject($objHtlBooking = new HotelBookingDetail($booking['id_htl_booking']))) {
$objOrder = new Order($objHtlBooking->id_order);
@@ -153,17 +152,10 @@ class HotelOrderRefundRules extends ObjectModel
1
);
- $totalServicesPrice = $objRoomTypeServiceProductOrderDetail->getroomTypeServiceProducts(
- $objHtlBooking->id_order,
- 0,
- 0,
- $objHtlBooking->id_product,
- $objHtlBooking->date_from,
- $objHtlBooking->date_to,
- $objHtlBooking->id_room,
+ $totalServicesPrice = $objRoomTypeServiceProductOrderDetail->getSelectedServicesForRoom(
+ $objHtlBooking->id,
1,
- 1,
- null
+ 1
);
if ($refundRules = $objHtlRefundRules->getHotelRefundRules($objHtlBooking->id_hotel, 0, 1)) {
@@ -189,31 +181,34 @@ class HotelOrderRefundRules extends ObjectModel
} else {
$refundValue = $refRule['deduction_value_full_pay'];
}
+ $bookingCancellationDetail['reduction_value'] = $refundValue;
if ($refRule['payment_type'] == HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE) {
- $bookingCancellationCharge = $paidAmount * ($refundValue / 100);
+ $bookingCancellationDetail['reduction_type'] = HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE;
+ $bookingCancellationDetail['cancelation_charge'] = $paidAmount * ($refundValue / 100);
if ($defaultCurrency != $orderCurrency) {
- $bookingCancellationCharge = Tools::convertPriceFull(
- $bookingCancellationCharge,
+ $bookingCancellationDetail['cancelation_charge'] = Tools::convertPriceFull(
+ $bookingCancellationDetail['cancelation_charge'],
$objDefaultCurrency,
$objOrderCurrency
);
}
} else {
+ $bookingCancellationDetail['reduction_type'] = HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_FIXED;
if ($defaultCurrency != $orderCurrency) {
- $bookingCancellationCharge = Tools::convertPriceFull(
+ $bookingCancellationDetail['cancelation_charge'] = Tools::convertPriceFull(
$refundValue,
$objDefaultCurrency,
$objOrderCurrency
);
} else {
- $bookingCancellationCharge = $refundValue;
+ $bookingCancellationDetail['cancelation_charge'] = $refundValue;
}
// if deduction amount is more than the order total cost
- if ($bookingCancellationCharge > $paidAmount) {
- $bookingCancellationCharge = $paidAmount;
+ if ($bookingCancellationDetail['cancelation_charge'] > $paidAmount) {
+ $bookingCancellationDetail['cancelation_charge'] = $paidAmount;
}
}
@@ -223,18 +218,22 @@ class HotelOrderRefundRules extends ObjectModel
}
if (!$ruleApplied) {
- $bookingCancellationCharge = ($objHtlBooking->total_price_tax_incl + $totalDemandsPrice);
+ $bookingCancellationDetail['cancelation_charge'] = ($objHtlBooking->total_price_tax_incl + $totalDemandsPrice);
+ $bookingCancellationDetail['reduction_type'] = HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE;
+ $bookingCancellationDetail['reduction_value'] = 100;
}
} else {
- $bookingCancellationCharge = ($objHtlBooking->total_price_tax_incl + $totalDemandsPrice);
+ $bookingCancellationDetail['cancelation_charge'] = ($objHtlBooking->total_price_tax_incl + $totalDemandsPrice);
+ $bookingCancellationDetail['reduction_type'] = HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE;
+ $bookingCancellationDetail['reduction_value'] = 100;
}
}
- $totalCancelationCharges += $bookingCancellationCharge;
+ $bookingCancellations[] = $bookingCancellationDetail;
}
}
- return $totalCancelationCharges;
+ return $bookingCancellations;
}
public static function getApplicableRefundRules($idOrder)
diff --git a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php
index 9518df583..5e8a45c1e 100644
--- a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php
+++ b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php
@@ -174,6 +174,7 @@ class HotelReservationSystemDb
`children` smallint(6) NOT NULL DEFAULT '0',
`child_ages` text NOT NULL,
`is_refunded` tinyint(1) NOT NULL DEFAULT '0',
+ `is_cancelled` tinyint(1) NOT NULL DEFAULT '0',
-- `available_for_order` tinyint(1) NOT NULL DEFAULT '0',
`date_add` datetime NOT NULL,
`date_upd` datetime NOT NULL,
@@ -561,4 +562,4 @@ class HotelReservationSystemDb
`'._DB_PREFIX_.'htl_access`'
);
}
-}
+}
\ No newline at end of file
diff --git a/modules/hotelreservationsystem/classes/RoomTypeServiceProductOrderDetail.php b/modules/hotelreservationsystem/classes/RoomTypeServiceProductOrderDetail.php
index 6e6f16e7b..4557cb4f0 100644
--- a/modules/hotelreservationsystem/classes/RoomTypeServiceProductOrderDetail.php
+++ b/modules/hotelreservationsystem/classes/RoomTypeServiceProductOrderDetail.php
@@ -185,11 +185,7 @@ class RoomTypeServiceProductOrderDetail extends ObjectModel
}
public function getSelectedServicesForRoom(
- $idOrder,
- $roomTypeIdProduct,
- $dateFrom,
- $dateTo,
- $idRoom,
+ $idHotelBookingDetail,
$getTotalPrice = 0,
$useTax = null
) {
@@ -204,9 +200,11 @@ class RoomTypeServiceProductOrderDetail extends ObjectModel
od.`product_auto_add`, od.`product_price_calculation_method`, od.`product_price_addition_type`';
}
$sql .= ' FROM `'._DB_PREFIX_.'htl_booking_detail` hbd
- LEFT JOIN `'._DB_PREFIX_.'htl_room_type_service_product_order_detail` rsod ON(rsod.`id_htl_booking_detail` = hbd.`id`)';
+ INNER JOIN `'._DB_PREFIX_.'htl_room_type_service_product_order_detail` rsod ON(rsod.`id_htl_booking_detail` = hbd.`id`)';
+
$sql .= ' LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON(od.`id_order_detail` = rsod.`id_order_detail`)';
- $sql .= ' WHERE rsod.`id_order` = '.(int)$idOrder.' AND hbd.`id_product`='.(int) $roomTypeIdProduct .' AND hbd.`date_from` = \''.pSQL($dateFrom).'\' AND hbd.`date_to` = \''.pSQL($dateTo).'\' AND hbd.`id_room`='.(int) $idRoom;
+
+ $sql .= ' WHERE hbd.`id` = '.(int)$idHotelBookingDetail;
if ($getTotalPrice) {
$totalPrice = 0;
@@ -274,7 +272,7 @@ class RoomTypeServiceProductOrderDetail extends ObjectModel
return $selectedAdditionalServices;
}
- public function deleteRoomSevicesByIdHotelBookingDetail($idHotelBookingDetail)
+ public function deleteRoomSevices($idHotelBookingDetail)
{
$services = Db::getInstance()->executeS(
'SELECT `id_room_type_service_product_order_detail` FROM `'._DB_PREFIX_.'htl_room_type_service_product_order_detail` pod
diff --git a/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRequestsController.php b/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRequestsController.php
index fe6d7f78c..f943ac8c8 100644
--- a/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRequestsController.php
+++ b/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRequestsController.php
@@ -220,11 +220,12 @@ class AdminOrderRefundRequestsController extends ModuleAdminController
$objRefundRules = new HotelOrderRefundRules();
if ($refundReqBookings = $objOrderReturn->getOrderRefundRequestedBookings($objOrderReturn->id_order, $objOrderReturn->id)){
foreach ($refundReqBookings as &$booking) {
- $booking['cancelation_charge'] = $objRefundRules->calculateDeductionAmountFromRefundRules(
+ $bookingCharges = $objRefundRules->getBookingCancellationDetails(
$objOrderReturn->id_order,
$objOrderReturn->id,
$booking['id']
);
+ $booking = array_merge($booking, array_shift($bookingCharges));
}
}
@@ -279,8 +280,7 @@ class AdminOrderRefundRequestsController extends ModuleAdminController
if (Validate::isLoadedObject($objRefundState = new OrderReturnState($idRefundState))) {
if ($objRefundState->refunded) {
$refundedAmounts = Tools::getValue('refund_amounts');
-
- if ((float) $orderTotalPaid) {
+ if ((float) $orderTotalPaid > 0) {
if ($idsReturnDetail && count($idsReturnDetail)) {
if ($refundedAmounts) {
foreach ($idsReturnDetail as $idRetDetail) {
@@ -327,6 +327,8 @@ class AdminOrderRefundRequestsController extends ModuleAdminController
$totalRefundedAmount = 0;
if ($objRefundState->refunded || $objRefundState->denied) {
+ $objHotelBookingDemands = new HotelBookingDemands();
+ $objRoomTypeServiceProductOrderDetail = new RoomTypeServiceProductOrderDetail();
foreach ($idsReturnDetail as $idRetDetail) {
$objOrderReturnDetail = new OrderReturnDetail($idRetDetail);
@@ -334,24 +336,75 @@ class AdminOrderRefundRequestsController extends ModuleAdminController
$idHtlBooking = $objOrderReturnDetail->id_htl_booking;
$numDays = 1;
$idOrderDetail = 0;
+ $reduction_amount = array(
+ 'total_price_tax_excl' => 0,
+ 'total_price_tax_incl' => 0,
+ 'total_products_tax_excl' => 0,
+ 'total_products_tax_incl' => 0,
+ );
if (Validate::isLoadedObject($objHtlBooking = new HotelBookingDetail($idHtlBooking))) {
$objHtlBooking->is_refunded = 1;
-
- // if (Tools::isSubmit('unavailable_for_order')) {
- // $objHtlBooking->available_for_order = 0;
- // } else {
- // $objHtlBooking->available_for_order = 1;
- // }
-
- $objHtlBooking->is_refunded = 1;
-
- $objHtlBooking->save();
-
$numDays = $objHtlBooking->getNumberOfDays(
$objHtlBooking->date_from,
$objHtlBooking->date_to
);
+ if ((float) $orderTotalPaid <= 0) {
+ $reduction_amount['total_price_tax_excl'] = $objHtlBooking->total_price_tax_excl;
+ $reduction_amount['total_products_tax_excl'] = $objHtlBooking->total_price_tax_excl;
+ $reduction_amount['total_price_tax_incl'] = $objHtlBooking->total_price_tax_incl;
+ $reduction_amount['total_products_tax_incl'] = $objHtlBooking->total_price_tax_incl;
+ // reduce facilities amount from order and services_detail
+ if ($roomDemands = $objHotelBookingDemands->getRoomTypeBookingExtraDemands(
+ $objHtlBooking->id_order,
+ $objHtlBooking->id_product,
+ $objHtlBooking->id_room,
+ $objHtlBooking->date_from,
+ $objHtlBooking->date_to,
+ 0
+ )) {
+ foreach ($roomDemands as $roomDemand) {
+ $objHotelBookingDemands = new HotelBookingDemands($roomDemand['id_booking_demand']);
+ $reduction_amount['total_price_tax_excl'] += $objHotelBookingDemands->total_price_tax_excl;
+ $reduction_amount['total_price_tax_incl'] += $objHotelBookingDemands->total_price_tax_incl;
+ $objHotelBookingDemands->total_price_tax_excl = 0;
+ $objHotelBookingDemands->total_price_tax_incl = 0;
+ $objHotelBookingDemands->save();
+ }
+ }
+
+ // reduce services amount from order and services_detail
+ if ($roomServices = $objRoomTypeServiceProductOrderDetail->getSelectedServicesForRoom(
+ $objHtlBooking->id
+ )) {
+ foreach ($roomServices['additional_services'] as $roomService) {
+ $objRoomTypeServiceProductOrderDetail = new RoomTypeServiceProductOrderDetail(
+ $roomService['id_room_type_service_product_order_detail']
+ );
+ $reduction_amount['total_price_tax_excl'] += $objRoomTypeServiceProductOrderDetail->total_price_tax_excl;
+ $reduction_amount['total_products_tax_excl'] += $objRoomTypeServiceProductOrderDetail->total_price_tax_excl;
+ $reduction_amount['total_price_tax_incl'] += $objRoomTypeServiceProductOrderDetail->total_price_tax_incl;
+ $reduction_amount['total_products_tax_incl'] += $objRoomTypeServiceProductOrderDetail->total_price_tax_incl;
+
+ if (Validate::isLoadedObject($objOrderDetail = new OrderDetail($objRoomTypeServiceProductOrderDetail->id_order_detail))) {
+ $objOrderDetail->product_quantity_refunded += $objRoomTypeServiceProductOrderDetail->quantity;
+ if ($objOrderDetail->product_quantity_refunded > $objOrderDetail->product_quantity) {
+ $objOrderDetail->product_quantity_refunded = $objOrderDetail->product_quantity;
+ }
+
+ $objOrderDetail->total_price_tax_excl -= $objRoomTypeServiceProductOrderDetail->total_price_tax_excl;
+ $objOrderDetail->total_price_tax_incl -= $objRoomTypeServiceProductOrderDetail->total_price_tax_incl;
+ $objOrderDetail->save();
+ }
+
+ $objRoomTypeServiceProductOrderDetail->total_price_tax_excl = 0;
+ $objRoomTypeServiceProductOrderDetail->total_price_tax_incl = 0;
+ $objRoomTypeServiceProductOrderDetail->save();
+ }
+ }
+
+ }
+
// enter refunded quantity in the order detail table
$idOrderDetail = $objHtlBooking->id_order_detail;
if (Validate::isLoadedObject($objOrderDetail = new OrderDetail($idOrderDetail))) {
@@ -359,8 +412,29 @@ class AdminOrderRefundRequestsController extends ModuleAdminController
if ($objOrderDetail->product_quantity_refunded > $objOrderDetail->product_quantity) {
$objOrderDetail->product_quantity_refunded = $objOrderDetail->product_quantity;
}
+
+ if ((float) $orderTotalPaid <= 0) {
+ // reduce room amount from order and order detail
+ $objOrderDetail->total_price_tax_incl -= $objHtlBooking->total_price_tax_incl;
+ $objOrderDetail->total_price_tax_excl -= $objHtlBooking->total_price_tax_excl;
+ if (Validate::isLoadedObject($objOrder = new Order($objHtlBooking->id_order))) {
+ $objOrder->total_paid -= $reduction_amount['total_price_tax_incl'];
+ $objOrder->total_paid_tax_excl -= $reduction_amount['total_price_tax_excl'];
+ $objOrder->total_paid_tax_incl -= $reduction_amount['total_price_tax_incl'];
+ $objOrder->total_products -= $reduction_amount['total_products_tax_excl'];
+ $objOrder->total_products_wt -= $reduction_amount['total_products_tax_incl'];
+ $objOrder->save();
+ }
+ }
$objOrderDetail->save();
}
+ if ((float) $orderTotalPaid <= 0) {
+ // reduce room amount from htl_booking_detail
+ $objHtlBooking->is_cancelled = 1;
+ $objHtlBooking->total_price_tax_excl = 0;
+ $objHtlBooking->total_price_tax_incl = 0;
+ }
+ $objHtlBooking->save();
}
// save individual booking amount for every booking refund
@@ -387,7 +461,7 @@ class AdminOrderRefundRequestsController extends ModuleAdminController
}
// if bookings are refunded then set the payment information
- if ($objRefundState->refunded) {
+ if ($objRefundState->refunded && (float) $orderTotalPaid > 0) {
if (Tools::isSubmit('refundTransactionAmount')) {
$objOrderReturn->payment_mode = $paymentMode;
$objOrderReturn->id_transaction = $idTransaction;
diff --git a/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRulesController.php b/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRulesController.php
index 33f8cb1c3..ffcf6ec19 100644
--- a/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRulesController.php
+++ b/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRulesController.php
@@ -52,7 +52,8 @@ class AdminOrderRefundRulesController extends ModuleAdminController
);
$paymentType = array(
- HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE => 'Percentage', HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_FIXED => 'Fixed'
+ HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE => 'Percentage',
+ HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_FIXED => 'Fixed'
);
$this->fields_list = array(
@@ -316,4 +317,4 @@ class AdminOrderRefundRulesController extends ModuleAdminController
$this->addJs(_MODULE_DIR_.$this->module->name.'/views/js/admin/wk_refund_rule.js');
$this->addJS(_MODULE_DIR_.$this->module->name.'/views/js/HotelReservationAdmin.js');
}
-}
+}
\ No newline at end of file
diff --git a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl
index b099aa1ba..3149ab90f 100644
--- a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl
+++ b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl
@@ -118,8 +118,9 @@
| {l s='Room type' mod='hotelreservationsystem'} |
{l s='Hotel' mod='hotelreservationsystem'} |
{l s='Duration' mod='hotelreservationsystem'} |
- {l s='Total rooms paid (tax incl.)'} |
- {l s='Additional services price (tax incl.)'} |
+ {l s='Total room cost (tax incl.)'} |
+ {l s='Room amount paid (tax incl.)'} |
+ {l s='Additional services amount paid (tax incl.)'} |
{if !$isRefundCompleted}
{l s='Rooms cancelation charges' mod='hotelreservationsystem'} |
{/if}
@@ -136,10 +137,16 @@
{$booking['room_type_name']|escape:'htmlall':'UTF-8'} |
{$booking['hotel_name']|escape:'htmlall':'UTF-8'} |
{$booking['date_from']|date_format:"%d-%m-%Y"} {l s='To' mod='hotelreservationsystem'} {$booking['date_to']|date_format:"%d-%m-%Y"} |
- {displayPrice price=$booking['total_paid_amount'] currency=$orderCurrency['id']} |
- {displayPrice price=($booking['extra_demands_price_tax_incl'] + $booking['additional_services_tax_incl']) currency=$orderCurrency['id']} |
+ {displayPrice price=$booking['total_price_tax_incl'] currency=$orderCurrency['id']} |
+ {displayPrice price=$booking['room_paid_amount'] currency=$orderCurrency['id']} |
+ {displayPrice price=$booking['extra_service_total_paid_amount'] currency=$orderCurrency['id']} |
{if !$isRefundCompleted}
- {displayPrice price=$booking['cancelation_charge'] currency=$orderCurrency['id']} |
+
+ {displayPrice price=$booking['cancelation_charge'] currency=$orderCurrency['id']}
+ {if $booking['reduction_type'] == HotelOrderRefundRules::WK_REFUND_RULE_PAYMENT_TYPE_PERCENTAGE}
+ {Tools::ps_round($booking['reduction_value'])}{l s='% of'} {displayPrice price=$booking['total_price_tax_incl'] currency=$orderCurrency['id']}
+ {/if}
+ |
{/if}
{if $orderTotalPaid|floatval}
@@ -148,7 +155,7 @@
{displayPrice price=$booking['refunded_amount'] currency=$orderCurrency['id']}
{else}
{$orderCurrency['sign']|escape:'html':'UTF-8'}
-
+
{l s='tax incl.' mod='hotelreservationsystem'}
{/if}
@@ -229,7 +236,7 @@
@@ -330,4 +337,4 @@
-
+
\ No newline at end of file
diff --git a/themes/hotel-reservation-theme/order-detail.tpl b/themes/hotel-reservation-theme/order-detail.tpl
index 5e932891b..532599299 100644
--- a/themes/hotel-reservation-theme/order-detail.tpl
+++ b/themes/hotel-reservation-theme/order-detail.tpl
@@ -23,684 +23,692 @@
* International Registered Trademark & Property of PrestaShop SA
*}
{if isset($order)}
-
- {if isset($reorderingAllowed) && $reorderingAllowed}
- |