| 1 |
<?php |
| 2 |
|
| 3 |
use WPO\WC\PostNL\Compatibility\WC_Core as WCX; |
| 4 |
use WPO\WC\PostNL\Compatibility\Order as WCX_Order; |
| 5 |
|
| 6 |
if ( ! defined('ABSPATH')) exit; // Exit if accessed directly |
| 7 |
|
| 8 |
if ( ! class_exists('WooCommerce_PostNL_Frontend')) : |
| 9 |
|
| 10 |
/** |
| 11 |
* Frontend views |
| 12 |
*/ |
| 13 |
class WooCommerce_PostNL_Frontend { |
| 14 |
|
| 15 |
const RADIO_CHECKED = 'on'; |
| 16 |
private $frontend_settings; |
| 17 |
|
| 18 |
function __construct() { |
| 19 |
// Customer Emails |
| 20 |
if (isset(WooCommerce_PostNL()->general_settings['email_tracktrace'])) { |
| 21 |
add_action('woocommerce_email_before_order_table', array($this, 'track_trace_email'), 10, 2); |
| 22 |
} |
| 23 |
|
| 24 |
// Track & Trace in my account |
| 25 |
if (isset(WooCommerce_PostNL()->general_settings['myaccount_tracktrace'])) { |
| 26 |
add_filter('woocommerce_my_account_my_orders_actions', array($this, 'track_trace_myaccount'), 10, 2); |
| 27 |
} |
| 28 |
|
| 29 |
// pickup address in email |
| 30 |
// woocommerce_email_customer_details: |
| 31 |
// @10 = templates/email-customer-details.php |
| 32 |
// @20 = templates/email-addresses.php |
| 33 |
add_action('woocommerce_email_customer_details', array($this, 'email_pickup_html'), 19, 3); |
| 34 |
|
| 35 |
// pickup address on thank you page |
| 36 |
add_action('woocommerce_thankyou', array($this, 'thankyou_pickup_html'), 10, 1); |
| 37 |
|
| 38 |
// WooCommerce PDF Invoices & Packing Slips Premium Templates compatibility |
| 39 |
add_filter('wpo_wcpdf_templates_replace_postnl_delivery_date', array($this, 'wpo_wcpdf_delivery_date'), 10, 2); |
| 40 |
add_filter('wpo_wcpdf_templates_replace_postnl_tracktrace', array($this, 'wpo_wcpdf_tracktrace'), 10, 2); |
| 41 |
add_filter('wpo_wcpdf_templates_replace_postnl_tracktrace_link', array($this, 'wpo_wcpdf_tracktrace_link'), 10, 2); |
| 42 |
add_filter('wpo_wcpdf_templates_replace_postnl_delivery_options', array($this, 'wpo_wcpdf_delivery_options'), 10, 2); |
| 43 |
|
| 44 |
// Delivery options |
| 45 |
if (isset(WooCommerce_PostNL()->checkout_settings['postnl_checkout'])) { |
| 46 |
// Change the position of the checkout |
| 47 |
if (isset(WooCommerce_PostNL()->checkout_settings['checkout_position'])) { |
| 48 |
$checkout_place = WooCommerce_PostNL()->checkout_settings['checkout_position']; |
| 49 |
} else { |
| 50 |
$checkout_place = 'woocommerce_after_checkout_billing_form'; |
| 51 |
} |
| 52 |
|
| 53 |
add_action('wp_enqueue_scripts', array($this, 'inject_delivery_options_variables'), 9999); |
| 54 |
add_action(apply_filters('wc_postnl_delivery_options_location', $checkout_place), array($this, 'output_delivery_options'), 10); |
| 55 |
} |
| 56 |
|
| 57 |
// Save delivery options data |
| 58 |
add_action('woocommerce_checkout_update_order_meta', array($this, 'save_delivery_options'), 10, 2); |
| 59 |
|
| 60 |
// Delivery options fees |
| 61 |
add_action('woocommerce_cart_calculate_fees', array($this, 'get_delivery_options_fees')); |
| 62 |
|
| 63 |
// Output most expensive shipping class in frontend data |
| 64 |
add_action('woocommerce_checkout_after_order_review', array($this, 'output_shipping_data')); |
| 65 |
add_action('woocommerce_update_order_review_fragments', array($this, 'order_review_fragments')); |
| 66 |
|
| 67 |
$this->frontend_settings = new WooCommerce_PostNL_Frontend_Settings(); |
| 68 |
} |
| 69 |
|
| 70 |
public function track_trace_email($order, $sent_to_admin) { |
| 71 |
if ($sent_to_admin) return; |
| 72 |
|
| 73 |
if (WCX_Order::get_status($order) != 'completed') return; |
| 74 |
|
| 75 |
$order_id = WCX_Order::get_id($order); |
| 76 |
|
| 77 |
$tracktrace_links = WooCommerce_PostNL()->admin->get_tracktrace_links($order_id); |
| 78 |
if ( ! empty($tracktrace_links)) { |
| 79 |
$email_text = __( |
| 80 |
'You can track your order with the following PostNL Track & Trace code:', |
| 81 |
'woocommerce-postnl' |
| 82 |
); |
| 83 |
$email_text = apply_filters('wcpostnl_email_text', $email_text, $order); |
| 84 |
?> |
| 85 |
<p><?php echo $email_text . ' ' . implode(', ', $tracktrace_links); ?></p> |
| 86 |
|
| 87 |
<?php |
| 88 |
} |
| 89 |
} |
| 90 |
|
| 91 |
public function email_pickup_html($order, $sent_to_admin = false, $plain_text = false) { |
| 92 |
WooCommerce_PostNL()->admin->show_order_delivery_options($order); |
| 93 |
} |
| 94 |
|
| 95 |
public function thankyou_pickup_html($order_id) { |
| 96 |
$order = wc_get_order($order_id); |
| 97 |
WooCommerce_PostNL()->admin->show_order_delivery_options($order); |
| 98 |
} |
| 99 |
|
| 100 |
public function track_trace_myaccount($actions, $order) { |
| 101 |
$order_id = WCX_Order::get_id($order); |
| 102 |
if ($consignments = WooCommerce_PostNL()->admin->get_tracktrace_shipments($order_id)) { |
| 103 |
foreach ( $consignments as $key => $consignment ) { |
| 104 |
$actions['postnl_tracktrace_' . $consignment['tracktrace']] = array( |
| 105 |
'url' => $consignment['tracktrace_url'], |
| 106 |
'name' => apply_filters( |
| 107 |
'wcpostnl_myaccount_tracktrace_button', |
| 108 |
__('Track & Trace', 'wooocommerce-postnl') |
| 109 |
) |
| 110 |
); |
| 111 |
} |
| 112 |
} |
| 113 |
|
| 114 |
return $actions; |
| 115 |
} |
| 116 |
|
| 117 |
public function wpo_wcpdf_delivery_options($replacement, $order) { |
| 118 |
ob_start(); |
| 119 |
WooCommerce_PostNL()->admin->show_order_delivery_options($order); |
| 120 |
|
| 121 |
return ob_get_clean(); |
| 122 |
} |
| 123 |
|
| 124 |
public function wpo_wcpdf_delivery_date($replacement, $order) { |
| 125 |
if ($delivery_date = WooCommerce_PostNL()->export->get_delivery_date($order)) { |
| 126 |
$formatted_date = date_i18n( |
| 127 |
apply_filters('wcpostnl_delivery_date_format', wc_date_format()), |
| 128 |
strtotime($delivery_date) |
| 129 |
); |
| 130 |
|
| 131 |
return $formatted_date; |
| 132 |
} |
| 133 |
|
| 134 |
return $replacement; |
| 135 |
} |
| 136 |
|
| 137 |
public function wpo_wcpdf_tracktrace($replacement, $order) { |
| 138 |
if ($shipments = WooCommerce_PostNL()->admin->get_tracktrace_shipments(WCX_Order::get_id($order))) { |
| 139 |
$tracktrace = array(); |
| 140 |
foreach ( $shipments as $shipment ) { |
| 141 |
if ( ! empty($shipment['tracktrace'])) { |
| 142 |
$tracktrace[] = $shipment['tracktrace']; |
| 143 |
} |
| 144 |
} |
| 145 |
$replacement = implode(', ', $tracktrace); |
| 146 |
} |
| 147 |
|
| 148 |
return $replacement; |
| 149 |
} |
| 150 |
|
| 151 |
public function wpo_wcpdf_tracktrace_link($replacement, $order) { |
| 152 |
$tracktrace_links = WooCommerce_PostNL()->admin->get_tracktrace_links(WCX_Order::get_id($order)); |
| 153 |
if ( ! empty($tracktrace_links)) { |
| 154 |
$replacement = implode(', ', $tracktrace_links); |
| 155 |
} |
| 156 |
|
| 157 |
return $replacement; |
| 158 |
} |
| 159 |
|
| 160 |
/** |
| 161 |
* Output some stuff. |
| 162 |
* Return to hide delivery options |
| 163 |
*/ |
| 164 |
public function output_delivery_options() { |
| 165 |
do_action('woocommerce_postnl_before_delivery_options'); |
| 166 |
require_once(WooCommerce_PostNL()->plugin_path() . '/templates/wcmp-delivery-options-template.php'); |
| 167 |
do_action('woocommerce_postnl_after_delivery_options'); |
| 168 |
} |
| 169 |
|
| 170 |
/** |
| 171 |
* Output inline script with the variables needed |
| 172 |
*/ |
| 173 |
public function inject_delivery_options_variables() { |
| 174 |
wp_localize_script( |
| 175 |
'wc-postnl', |
| 176 |
'wcmp_delivery_options', |
| 177 |
array( |
| 178 |
'shipping_methods' => $this->get_delivery_options_shipping_methods(), |
| 179 |
'always_display' => $this->postnl_delivery_options_always_display() |
| 180 |
) |
| 181 |
); |
| 182 |
|
| 183 |
wp_localize_script( |
| 184 |
'wc-postnl', |
| 185 |
'wcmp_config', |
| 186 |
$this->get_checkout_config() |
| 187 |
); |
| 188 |
} |
| 189 |
|
| 190 |
public function output_shipping_data() { |
| 191 |
$shipping_data = $this->get_shipping_data(); |
| 192 |
printf('<div class="postnl-shipping-data">%s</div>', $shipping_data); |
| 193 |
} |
| 194 |
|
| 195 |
public function get_shipping_data() { |
| 196 |
if ($shipping_class = $this->get_cart_shipping_class()) { |
| 197 |
$shipping_data = sprintf( |
| 198 |
'<input type="hidden" value="%s" id="postnl_highest_shipping_class" name="postnl_highest_shipping_class">', |
| 199 |
$shipping_class |
| 200 |
); |
| 201 |
|
| 202 |
return $shipping_data; |
| 203 |
} |
| 204 |
|
| 205 |
return false; |
| 206 |
} |
| 207 |
|
| 208 |
/** |
| 209 |
* Save delivery options to order when used |
| 210 |
* |
| 211 |
* @param int $order_id |
| 212 |
* @param array $posted |
| 213 |
* |
| 214 |
* @return void |
| 215 |
*/ |
| 216 |
public function save_delivery_options($order_id, $posted) { |
| 217 |
$order = WCX::get_order($order_id); |
| 218 |
|
| 219 |
if ($_POST['postnl_highest_shipping_class'] != null) { |
| 220 |
WCX_Order::update_meta_data( |
| 221 |
$order, |
| 222 |
'_postnl_highest_shipping_class', |
| 223 |
$_POST['postnl_highest_shipping_class'] |
| 224 |
); |
| 225 |
} else { |
| 226 |
if (isset($_POST['shipping_method'])) { |
| 227 |
WCX_Order::update_meta_data( |
| 228 |
$order, |
| 229 |
'_postnl_highest_shipping_class', |
| 230 |
$_POST['shipping_method'][0] |
| 231 |
); |
| 232 |
} |
| 233 |
} |
| 234 |
|
| 235 |
if (isset($_POST['postnl-signature-selector'])) { |
| 236 |
WCX_Order::update_meta_data($order, '_postnl_signature', self::RADIO_CHECKED); |
| 237 |
} |
| 238 |
|
| 239 |
if (isset($_POST['method-postnl-only-recipient-selector'])) { |
| 240 |
WCX_Order::update_meta_data($order, '_postnl_only_recipient', self::RADIO_CHECKED); |
| 241 |
} |
| 242 |
|
| 243 |
if ( ! empty($_POST['post-post-nl-data'])) { |
| 244 |
$delivery_options = json_decode(stripslashes($_POST['post-post-nl-data']), true); |
| 245 |
WCX_Order::update_meta_data($order, '_postnl_delivery_options', $delivery_options); |
| 246 |
} |
| 247 |
} |
| 248 |
|
| 249 |
/** |
| 250 |
* Get delivery fee in your order overview, at the front of the website |
| 251 |
* |
| 252 |
* @param $cart |
| 253 |
*/ |
| 254 |
public function get_delivery_options_fees() { |
| 255 |
if ( ! $_POST || (is_admin() && ! is_ajax())) { |
| 256 |
return; |
| 257 |
} |
| 258 |
|
| 259 |
if (isset($_POST['post_data'])) { |
| 260 |
// non-default post data for AJAX calls |
| 261 |
parse_str($_POST['post_data'], $post_data); |
| 262 |
} else { |
| 263 |
// checkout finalization |
| 264 |
$post_data = $_POST; |
| 265 |
} |
| 266 |
|
| 267 |
/* check for delivery options & add fees*/ |
| 268 |
if ( ! empty($post_data['post-post-nl-data'])) { |
| 269 |
$delivery_options = json_decode(stripslashes($post_data['post-post-nl-data']), true); |
| 270 |
|
| 271 |
/* Fees for delivery time options*/ |
| 272 |
if (isset($delivery_options['time'])) { |
| 273 |
$time = array_shift($delivery_options['time']); // take first element in time array |
| 274 |
if (isset($time['price_comment'])) { |
| 275 |
switch($time['price_comment']) { |
| 276 |
case 'morning': |
| 277 |
if ( ! empty(WooCommerce_PostNL()->checkout_settings['morning_fee'])) { |
| 278 |
$fee = WooCommerce_PostNL()->checkout_settings['morning_fee']; |
| 279 |
$fee_name = __('Morning delivery', 'woocommerce-postnl'); |
| 280 |
|
| 281 |
$this->add_fee_signature($delivery_options, 'Signature on delivery'); |
| 282 |
} |
| 283 |
break; |
| 284 |
case 'standard': |
| 285 |
|
| 286 |
$this->add_fee_signature($delivery_options, 'Signature on delivery'); |
| 287 |
$this->add_fee_only_recipient($delivery_options, 'Home address only'); |
| 288 |
|
| 289 |
break; |
| 290 |
case 'avond': |
| 291 |
if ( ! empty(WooCommerce_PostNL()->checkout_settings['evening_fee'])) { |
| 292 |
$fee = WooCommerce_PostNL()->checkout_settings['evening_fee']; |
| 293 |
$fee_name = __('Evening delivery', 'woocommerce-postnl'); |
| 294 |
|
| 295 |
$this->add_fee_signature($delivery_options, 'Signature on delivery'); |
| 296 |
} |
| 297 |
break; |
| 298 |
} |
| 299 |
|
| 300 |
if ( ! empty($fee)) { |
| 301 |
$this->add_fee($fee_name, $fee); |
| 302 |
} |
| 303 |
} |
| 304 |
} |
| 305 |
|
| 306 |
/* Fees for pickup & pickup express */ |
| 307 |
if (isset($delivery_options['price_comment'])) { |
| 308 |
switch($delivery_options['price_comment']) { |
| 309 |
case 'retail': |
| 310 |
if ( ! empty(WooCommerce_PostNL()->checkout_settings['pickup_fee'])) { |
| 311 |
$fee = WooCommerce_PostNL()->checkout_settings['pickup_fee']; |
| 312 |
$fee_name = __('PostNL pickup', 'woocommerce-postnl'); |
| 313 |
} |
| 314 |
break; |
| 315 |
case 'retailexpress': |
| 316 |
if ( ! empty(WooCommerce_PostNL()->checkout_settings['pickup_express_fee'])) { |
| 317 |
$fee = WooCommerce_PostNL()->checkout_settings['pickup_express_fee']; |
| 318 |
$fee_name = __('PostNL Pickup Express', 'woocommerce-postnl'); |
| 319 |
} |
| 320 |
break; |
| 321 |
} |
| 322 |
|
| 323 |
if ( ! empty($fee)) { |
| 324 |
$this->add_fee($fee_name, $fee); |
| 325 |
} |
| 326 |
} |
| 327 |
} |
| 328 |
} |
| 329 |
|
| 330 |
/** |
| 331 |
* Get shipping tax class |
| 332 |
* adapted from WC_Tax::get_shipping_tax_rates |
| 333 |
* assumes per order shipping (per item shipping not supported for postnl yet) |
| 334 |
* @return string tax class |
| 335 |
*/ |
| 336 |
public function get_shipping_tax_class() { |
| 337 |
$shipping_tax_class = get_option('woocommerce_shipping_tax_class'); |
| 338 |
// WC3.0+ sets 'inherit' for taxes based on items, empty for 'standard' |
| 339 |
if (version_compare(WOOCOMMERCE_VERSION, '3.0', '>=') && 'inherit' !== $shipping_tax_class) { |
| 340 |
$shipping_tax_class = '' === $shipping_tax_class ? 'standard' : $shipping_tax_class; |
| 341 |
|
| 342 |
return $shipping_tax_class; |
| 343 |
} else if ( ! empty($shipping_tax_class) && 'inherit' !== $shipping_tax_class) { |
| 344 |
return $shipping_tax_class; |
| 345 |
} |
| 346 |
|
| 347 |
if ($shipping_tax_class == 'inherit') { |
| 348 |
$shipping_tax_class = ''; |
| 349 |
} |
| 350 |
|
| 351 |
// See if we have an explicitly set shipping tax class |
| 352 |
if ($shipping_tax_class) { |
| 353 |
$tax_class = 'standard' === $shipping_tax_class ? '' : $shipping_tax_class; |
| 354 |
} |
| 355 |
|
| 356 |
$location = WC_Tax::get_tax_location(''); |
| 357 |
|
| 358 |
if (sizeof($location) === 4) { |
| 359 |
list($country, $state, $postcode, $city) = $location; |
| 360 |
|
| 361 |
// This will be per order shipping - loop through the order and find the highest tax class rate |
| 362 |
$cart_tax_classes = WC()->cart->get_cart_item_tax_classes(); |
| 363 |
// If multiple classes are found, use the first one. Don't bother with standard rate, we can get that later. |
| 364 |
if (sizeof($cart_tax_classes) > 1 && ! in_array('', $cart_tax_classes)) { |
| 365 |
$tax_classes = WC_Tax::get_tax_classes(); |
| 366 |
|
| 367 |
foreach ( $tax_classes as $tax_class ) { |
| 368 |
$tax_class = sanitize_title($tax_class); |
| 369 |
if (in_array($tax_class, $cart_tax_classes)) { |
| 370 |
// correct $tax_class is now set |
| 371 |
break; |
| 372 |
} |
| 373 |
} |
| 374 |
// If a single tax class is found, use it |
| 375 |
} else { |
| 376 |
if (sizeof($cart_tax_classes) == 1) { |
| 377 |
$tax_class = array_pop($cart_tax_classes); |
| 378 |
} |
| 379 |
} |
| 380 |
|
| 381 |
// no rate = standard rate |
| 382 |
if (empty($tax_class)) { |
| 383 |
$tax_class = 'standard'; |
| 384 |
} |
| 385 |
} |
| 386 |
|
| 387 |
return $tax_class; |
| 388 |
} |
| 389 |
|
| 390 |
/** |
| 391 |
* Get the most expensive shipping class in the cart |
| 392 |
* Requires WC2.4+ |
| 393 |
* Only supports 1 package, takes the first |
| 394 |
* @return [type] [description] |
| 395 |
*/ |
| 396 |
public function get_cart_shipping_class() { |
| 397 |
if (version_compare(WOOCOMMERCE_VERSION, '2.4', '<')) { |
| 398 |
return false; |
| 399 |
} |
| 400 |
|
| 401 |
$chosen_method = isset(WC()->session->chosen_shipping_methods[0]) ? WC()->session->chosen_shipping_methods[0] : ''; |
| 402 |
|
| 403 |
// get package |
| 404 |
$packages = WC()->shipping->get_packages(); |
| 405 |
$package = current($packages); |
| 406 |
|
| 407 |
$shipping_method = WooCommerce_PostNL()->export->get_shipping_method($chosen_method); |
| 408 |
if (empty($shipping_method)) { |
| 409 |
return false; |
| 410 |
} |
| 411 |
|
| 412 |
// get shipping classes from package |
| 413 |
$found_shipping_classes = $shipping_method->find_shipping_classes($package); |
| 414 |
// return print_r( $found_shipping_classes, true ); |
| 415 |
|
| 416 |
$highest_class = WooCommerce_PostNL()->export->get_shipping_class( |
| 417 |
$shipping_method, |
| 418 |
$found_shipping_classes |
| 419 |
); |
| 420 |
|
| 421 |
return $highest_class; |
| 422 |
} |
| 423 |
|
| 424 |
public function order_review_fragments($fragments) { |
| 425 |
$postnl_shipping_data = $this->get_shipping_data(); |
| 426 |
$fragments['.postnl-shipping-data'] = $postnl_shipping_data; |
| 427 |
|
| 428 |
return $fragments; |
| 429 |
} |
| 430 |
|
| 431 |
// converts price string to float value, assuming no thousand-separators used |
| 432 |
public function normalize_price($price) { |
| 433 |
$price = str_replace(',', '.', $price); |
| 434 |
$price = floatval($price); |
| 435 |
|
| 436 |
return $price; |
| 437 |
} |
| 438 |
|
| 439 |
private function get_checkout_config() { |
| 440 |
$PostNLConfig = [ |
| 441 |
|
| 442 |
"address" => [ |
| 443 |
"cc" => '', |
| 444 |
"postalCode" => '', |
| 445 |
"number" => '', |
| 446 |
"city" => '' |
| 447 |
], |
| 448 |
"txtWeekDays" => [ |
| 449 |
'Zondag', |
| 450 |
'Maandag', |
| 451 |
'Dinsdag', |
| 452 |
'Woensdag', |
| 453 |
'Donderdag', |
| 454 |
'Vrijdag', |
| 455 |
'Zaterdag' |
| 456 |
], |
| 457 |
"config" => [ |
| 458 |
"apiBaseUrl" => WooCommerce_PostNL_Frontend_Settings::BASE_URL, |
| 459 |
"carrier" => "1", |
| 460 |
|
| 461 |
"priceMorningDelivery" => $this->frontend_settings->get_price('morning'), |
| 462 |
"priceNormalDelivery" => "", |
| 463 |
"priceEveningDelivery" => $this->frontend_settings->get_price('evening'), |
| 464 |
"priceSignature" => $this->frontend_settings->get_price('signature'), |
| 465 |
"priceOnlyRecipient" => $this->frontend_settings->get_price('only_recipient'), |
| 466 |
"pricePickup" => $this->frontend_settings->get_price('pickup'), |
| 467 |
"pricePickupExpress" => $this->frontend_settings->get_price('pickup_express'), |
| 468 |
|
| 469 |
"allowMondayDelivery" => $this->frontend_settings->is_enabled('saturday_cutoff'), |
| 470 |
"allowMorningDelivery" => isset(WooCommerce_PostNL()->export_defaults['age_check']) ? 0 : $this->frontend_settings->is_enabled('morning'), |
| 471 |
"allowEveningDelivery" => isset(WooCommerce_PostNL()->export_defaults['age_check']) ? 0 : $this->frontend_settings->is_enabled('evening'), |
| 472 |
"allowSignature" => isset(WooCommerce_PostNL()->export_defaults['age_check']) ? 0 : $this->frontend_settings->is_enabled('signature'), |
| 473 |
"allowOnlyRecipient" => isset(WooCommerce_PostNL()->export_defaults['age_check']) ? 0 : $this->frontend_settings->is_enabled('only_recipient'), |
| 474 |
"allowPickupPoints" => $this->frontend_settings->is_enabled('pickup'), |
| 475 |
"allowPickupExpress" => $this->frontend_settings->is_enabled('pickup_express'), |
| 476 |
|
| 477 |
"dropOffDays" => $this->frontend_settings->get_dropoff_days(), |
| 478 |
"saturdayCutoffTime" => $this->frontend_settings->get_saturday_cutoff_time(), |
| 479 |
"cutoffTime" => $this->frontend_settings->get_cutoff_time(), |
| 480 |
"deliverydaysWindow" => $this->frontend_settings->get_deliverydays_window(), |
| 481 |
"dropoffDelay" => $this->frontend_settings->get_dropoff_delay(), |
| 482 |
|
| 483 |
], |
| 484 |
"textToTranslate" =>[ |
| 485 |
"deliveryTitle"=> __($this->frontend_settings->get_title('at_home_delivery'), 'woocommerce-postnl'), |
| 486 |
"deliveryMorningTitle" => __($this->frontend_settings->get_title('morning'),'woocommerce-postnl'), |
| 487 |
"deliveryStandardTitle" => __($this->frontend_settings->get_title('standard'),'woocommerce-postnl'), |
| 488 |
"deliveryEveningTitle" => __($this->frontend_settings->get_title('evening'),'woocommerce-postnl'), |
| 489 |
"signatureTitle"=> __($this->frontend_settings->get_title('signature'), 'woocommerce-postnl'), |
| 490 |
"onlyRecipientTitle"=> __($this->frontend_settings->get_title('only_recipient'), 'woocommerce-postnl'), |
| 491 |
"saturdayDeliveryTitle"=> __('saturday_delivery_title', 'woocommerce-postnl'), |
| 492 |
"pickupTitle"=> __($this->frontend_settings->get_title('pickup'), 'woocommerce-postnl'), |
| 493 |
"headerDeliveryOptions" => __($this->frontend_settings->get_title('header_delivery_options'), 'woocommerce-postnl'), |
| 494 |
|
| 495 |
"BEdeliveryTitle" => __($this->frontend_settings->get_title('belgium_at_home_delivery'), 'woocommerce-postnl'), |
| 496 |
"BEdeliveryStandardTitle" => __($this->frontend_settings->get_title('belgium_standard'), 'woocommerce-postnl'), |
| 497 |
|
| 498 |
"addressNotFound" => __('Address details are not entered', 'woocommerce-postnl'), |
| 499 |
"pickUpFrom" =>__('Pick up from', 'woocommerce-postnl'), |
| 500 |
"openingHours" =>__('Opening hours', 'woocommerce-postnl'), |
| 501 |
"closed" =>__('Closed', 'woocommerce-postnl'), |
| 502 |
"postcode" =>__('Postcode', 'woocommerce-postnl'), |
| 503 |
"houseNumber" =>__('House number', 'woocommerce-postnl'), |
| 504 |
"city"=>__('City', 'woocommerce-postnl'), |
| 505 |
"retry" =>__('Retry', 'woocommerce-postnl'), |
| 506 |
"wrongHouseNumberPostcode" =>__('House number/postcode combination unknown', 'woocommerce-postnl'), |
| 507 |
"quickDelivery"=>__('Deliver as quickly as possible', 'woocommerce-postnl'), |
| 508 |
|
| 509 |
'sunday'=> __('Sunday', 'woocommerce-postnl'), |
| 510 |
'monday'=> __('Monday', 'woocommerce-postnl'), |
| 511 |
'tuesday'=> __('Tuesday', 'woocommerce-postnl'), |
| 512 |
'wednesday'=> __('Wednesday', 'woocommerce-postnl'), |
| 513 |
'thursday'=> __('Thursday', 'woocommerce-postnl'), |
| 514 |
'friday'=> __('Friday', 'woocommerce-postnl'), |
| 515 |
'saturday'=> __('Saturday', 'woocommerce-postnl') |
| 516 |
] |
| 517 |
]; |
| 518 |
|
| 519 |
return json_encode($PostNLConfig); |
| 520 |
// Use cutoff_time and saturday_cutoff_time on saturdays |
| 521 |
} |
| 522 |
|
| 523 |
private function add_fee($fee_name, $fee) { |
| 524 |
$fee = $this->normalize_price($fee); |
| 525 |
// get shipping tax data |
| 526 |
$shipping_tax_class = $this->get_shipping_tax_class(); |
| 527 |
if ($shipping_tax_class) { |
| 528 |
if ($shipping_tax_class == 'standard') { |
| 529 |
$shipping_tax_class = ''; |
| 530 |
} |
| 531 |
WC()->cart->add_fee($fee_name, $fee, true, $shipping_tax_class); |
| 532 |
} else { |
| 533 |
WC()->cart->add_fee($fee_name, $fee); |
| 534 |
} |
| 535 |
} |
| 536 |
|
| 537 |
/** |
| 538 |
* Check witch delivery option is selected |
| 539 |
* |
| 540 |
* @param $post_data |
| 541 |
* @param $post_data_value |
| 542 |
* @param $delivery_type |
| 543 |
* @param $backend_setting |
| 544 |
* @param $delivery_title |
| 545 |
* |
| 546 |
* @return bool |
| 547 |
*/ |
| 548 |
private function add_fee_from_setting($post_data, $post_data_value, $delivery_type, $backend_setting, $delivery_title) { |
| 549 |
// Fee for "delivery" option |
| 550 |
if (isset($post_data[$post_data_value]) && $post_data[$post_data_value] == $delivery_type) { |
| 551 |
if ( ! empty(WooCommerce_PostNL()->checkout_settings[$backend_setting])) { |
| 552 |
$fee = WooCommerce_PostNL()->checkout_settings[$backend_setting]; |
| 553 |
$fee_name = __($delivery_title, 'woocommerce-postnl'); |
| 554 |
$this->add_fee($fee_name, $fee); |
| 555 |
|
| 556 |
return true; |
| 557 |
} |
| 558 |
} |
| 559 |
|
| 560 |
return false; |
| 561 |
} |
| 562 |
|
| 563 |
private function add_fee_signature($delivery_options, $delivery_title) { |
| 564 |
if ($delivery_options['signature'] !== 1) { |
| 565 |
return; |
| 566 |
} |
| 567 |
|
| 568 |
$fee = WooCommerce_PostNL()->checkout_settings['signature_fee']; |
| 569 |
|
| 570 |
if ( ! empty($fee)) { |
| 571 |
$fee_name = __($delivery_title, 'woocommerce-postnl'); |
| 572 |
$this->add_fee($fee_name, $fee); |
| 573 |
} |
| 574 |
} |
| 575 |
|
| 576 |
private function add_fee_only_recipient($delivery_options, $delivery_title) { |
| 577 |
if ($delivery_options['only_recipient'] !== 1) { |
| 578 |
return; |
| 579 |
} |
| 580 |
|
| 581 |
$fee = WooCommerce_PostNL()->checkout_settings['only_recipient_fee']; |
| 582 |
|
| 583 |
if ( ! empty($fee)) { |
| 584 |
$fee_name = __($delivery_title, 'woocommerce-postnl'); |
| 585 |
$this->add_fee($fee_name, $fee); |
| 586 |
} |
| 587 |
} |
| 588 |
|
| 589 |
/** |
| 590 |
* @return string |
| 591 |
*/ |
| 592 |
private function get_delivery_options_shipping_methods() { |
| 593 |
if (isset( |
| 594 |
WooCommerce_PostNL()->export_defaults['shipping_methods_package_types'] |
| 595 |
) |
| 596 |
&& isset(WooCommerce_PostNL()->export_defaults['shipping_methods_package_types'][WooCommerce_PostNL_Export::PACKAGE])) { |
| 597 |
// Shipping methods associated with parcels = enable delivery options |
| 598 |
$delivery_options_shipping_methods = WooCommerce_PostNL()->export_defaults['shipping_methods_package_types'][WooCommerce_PostNL_Export::PACKAGE]; |
| 599 |
} else { |
| 600 |
$delivery_options_shipping_methods = array(); |
| 601 |
} |
| 602 |
|
| 603 |
return json_encode($delivery_options_shipping_methods); |
| 604 |
} |
| 605 |
|
| 606 |
private function postnl_delivery_options_always_display() { |
| 607 |
if (isset(WooCommerce_PostNL()->checkout_settings['checkout_display']) |
| 608 |
&& WooCommerce_PostNL()->checkout_settings['checkout_display'] == 'all_methods') { |
| 609 |
return true; |
| 610 |
} |
| 611 |
|
| 612 |
return false; |
| 613 |
} |
| 614 |
} |
| 615 |
|
| 616 |
endif; // class_exists |
| 617 |
|
| 618 |
return new WooCommerce_PostNL_Frontend(); |
| 619 |
|