View Categories

Snippet-uri de cod utile pentru personalizare aditionala a functionalitatilor Sameday

7 min read

Pret diferentiat pentru Sameday Easybox #

Daca doriti sa afisati preturi manuale diferentiate pentru Sameday vs Sameday Easybox atunci inserati urmatorul snippet (costul pentru easybox se seteaza in locul cifrelor verzi.):

add_filter('curiero_overwrite_sameday_easybox_shipping', function (array $args): array {
  if ($args['cost'] == 0) return $args;
  $args['cost'] = 10;
  return $args;
}, 10, 1);

Afisare exclusiva a metodei Easybox si dezactivare metoda Sameday clasica #

add_filter('woocommerce_package_rates', function (array $rates): array {
  if (isset($rates['sameday'])) unset($rates['sameday']);
  return $rates;
}, 99, 1);

Afisare numar comanda pe AWB Sameday in zona de observatii #

add_filter('curiero_awb_details', function (array $awb, string $courier, WC_Abstract_Order $order): array {
    if (
        !class_exists(CurieRO_Printing_Sameday::class)
        || CurieRO_Printing_Sameday::$public_name !== $courier
    ) {
        return $awb;
    }
    return array_merge($awb, [
        'observation' => trim("Comanda nr. {$order->get_order_number()} {$awb['observation']}")
    ]);
}, 10, 3);

Transport gratuit prin Sameday pentru anumite categorii de produse #

Daca doriti sa oferiti livrare gratuita prin Sameday pentru anumite categorii de produse atunci inserati urmatorul snippet (ID-urile de categorii se seteaza in locul cifrelor verzi.):

add_action('curiero_overwrite_sameday_shipping', 'curiero_overwrite_sameday_shipping_for_product_categories', 10, 1);
add_action('curiero_overwrite_sameday_easybox_shipping', 'curiero_overwrite_sameday_shipping_for_product_categories', 10, 1);
function curiero_overwrite_sameday_shipping_for_product_categories($args)
{
    foreach (WC()->cart->get_cart() as $item) {
        if (has_term([19, 20, 21], 'product_cat', $item['product_id'])) {
            $args['cost'] = 0;
            $args['label'] = rtrim($args['label'], ': Gratuit') . ': Gratuit';
            return $args;
        }
    }
    return $args;
}

Afisare continut colet in zona de Observatii pentru AWB-urile in format A6 #

In cazul etichetelor pe format A6 de la Sameday, zona de Continut colet de pe AWB este limitata la 20 de caractere si daca aveti activa optiunea de afisare a continutului pe AWB si exista produse cu denumiri lungi atunci apare situatia in care sa nu fie afisate toate caracterele. De aceea va trebui sa introduceti un cod personalizat care transfera textul de la Continut colet in campul de Observatii care in formatul de AWB A6 are o limita mult mai mare si anume 200 de caractere si unde va incapea descrierea produselor completa:

add_filter('curiero_awb_details', function (array $awb_details, $courier_name, WC_Abstract_Order $order): array {
	if ($courier_name !== CurieRO_Printing_Sameday::$public_name)
		return $awb_details;

	if (empty($awb_details['priceObservation']))
		return $awb_details;

	[$awb_details['observation']] = [$awb_details['priceObservation']];
	$awb_details['priceObservation'] = '';

	return $awb_details;
}, 10, 3);

Redenumire metoda de livrare Sameday Easybox #

Daca doriti sa redenumiti metoda de livrare Sameday Easybox din zona de checkout va trebui sa folositi urmatorul snippet de cod, inlocuind numele boldat cu denumirea dorita de dumneavoastra:

add_filter('curiero_overwrite_sameday_easybox_shipping', function (array $args): array {
	$args['label'] = 'Livrare la Easybox';

	if ($args['cost'] == 0) {
		$args['label'] .= ': Gratuit';
	}

	return $args;
}, 100, 1);

Adaugare cost suplimentar la livrare daca se selecteaza plata ramburs chiar daca se declanseaza pragul de livrare gratuita #

Daca doriti ca la selectarea platii ramburs sa adaugati un cost extra pentru livrare folositi snippetul de mai jos, inlocuind cifra verde cu costul dorit de dvs. Trebuie sa aveti in vedere 2 lucruri:

  • Codul adauga acest cost extra si daca clientul atinge pragul de livrare gratuita
  • Costul trebuie ajustat avand in vedere prezenta cotei de TVA sau nu in setarile WooCommerce
add_filter('curiero_overwrite_sameday_shipping', 'curiero_add_custom_cod_fee', 10, 1);
add_filter('curiero_overwrite_sameday_easybox_shipping', 'curiero_add_custom_cod_fee', 10, 1);

function curiero_add_custom_cod_fee(array $args): array {
    $chosen_gateway = WC()->session->get('chosen_payment_method');
    $new_price = curiero_string_to_float($args['cost']);

    if ($chosen_gateway === 'cod') {
        $new_price += 6.00;
    }

    return array_merge($args, [
        'cost' => $new_price
    ]);
}

Adaugare cost suplimentar la livrare daca se selecteaza plata ramburs si excluderea lui daca se declanseaza pragul de livrare gratuita #

Daca doriti ca la selectarea platii ramburs sa adaugati un cost extra pentru livrare folositi snippetul de mai jos, inlocuind cifra verde cu costul dorit de dvs. Trebuie sa aveti in vedere 2 lucruri:

  • Codul nu mai adauga acest cost extra daca clientul atinge pragul de livrare gratuita
  • Costul trebuie ajustat avand in vedere prezenta cotei de TVA sau nu in setarile WooCommerce
add_filter('curiero_overwrite_sameday_shipping', 'curiero_add_custom_cod_fee', 10, 1);
add_filter('curiero_overwrite_sameday_easybox_shipping', 'curiero_add_custom_cod_fee', 10, 1);

function curiero_add_custom_cod_fee(array $args): array {
    $chosen_gateway = WC()->session->get('chosen_payment_method');
    $new_price = curiero_string_to_float($args['cost']);

	if ($chosen_gateway === 'cod' && $args['cost'] !== 0) {
        $new_price += 6.00;
    } else {
        $new_price = 0; 
    }

    return array_merge($args, [
        'cost' => $new_price
    ]);
}

Aplicare TVA la Costurile de Livrare #

Acest cod îl puteți aplica în cazul în care prețurile nu au TVA inclus. Codul va adăuga automat TVA de 19% la costurile de livrare pentru comenzile efectuate prin Sameday și Sameday Easybox în WooCommerce.

add_filter('curiero_overwrite_sameday_shipping', 'curiero_add_shipping_vat', 10, 1);
add_filter('curiero_overwrite_sameday_easybox_shipping', 'curiero_add_shipping_vat', 10, 1);
function curiero_add_shipping_vat(array $args): array
{
	if ($args['cost'] != 0) {
		$args['cost'] *= 1.19;
	}

	$shippingInstance = WC()->shipping->get_shipping_methods()['sameday'];
	$args['cost'] = min($args['cost'], $shippingInstance->get_option('tarif_maxim', 999999));

	return $args;
}

Dezactivare livrare la locker in functie de dimensiuni sau greutate comanda #

Acest cod permite dezactivarea metodei de livrare la easybox in cazul in care dimensiunea sau greutatea totala a produselor dintr-o comanda nu sunt permise sau nu incap intr-un easyBox. Va rugam adaptati valorile boldate in functie de specificatiile maxima de acceptanta ale curierului:

add_filter('woocommerce_package_rates', 'disable_easybox_shipping_based_on_cart', 10, 2);
function disable_easybox_shipping_based_on_cart($rates, $package)
{
    // Define the maximum allowable dimensions
    $max_length = 40;
    $max_width = 44;
    $max_height = 45;

    // Define the volumetric divisor (standard values range between 5000 and 6000)
    $volumetric_divisor = 6000;

    // Define the maximum allowable weight
    $max_weight = 30;

    // Initialize total dimensions, actual weight, and volumetric weight
    $total_length = 0;
    $total_width = 0;
    $total_height = 0;
    $total_actual_weight = 0;
    $total_volumetric_weight = 0;

    // Loop through each item in the cart
    foreach (WC()->cart->get_cart() as $cart_item) {
        // Get the product object
        $product = $cart_item['data'];

        // Get product dimensions and weight
        $length = $product->get_length();
        $width = $product->get_width();
        $height = $product->get_height();
        $actual_weight = $product->get_weight() * $cart_item['quantity'];

        // Calculate the volume for the product
        $volume = $length * $width * $height;

        // Calculate the volumetric weight for the product
        $volumetric_weight = ($volume / $volumetric_divisor) * $cart_item['quantity'];

        // Accumulate the total dimensions, actual weight, and volumetric weight
        $total_length += $length;
        $total_width += $width;
        $total_height += $height;
        $total_actual_weight += $actual_weight;
        $total_volumetric_weight += $volumetric_weight;
    }

    // Determine the larger weight for comparison
    $effective_weight = max($total_actual_weight, $total_volumetric_weight);

    // Check if the total dimensions or effective weight exceed the limit
    if ($total_length > $max_length || $total_width > $max_width || $total_height > $max_height || $effective_weight > $max_weight) {
        // If the conditions are met, remove the shipping method
        if (isset($rates['curiero_sameday_lockers'])) unset($rates['curiero_sameday_lockers']);
    }

    return $rates;
}

Hook nou pentru statusul AWB-ului #

Am introdus un hook nou care vă permite să actualizați automat statusul unei comenzi, în funcție de statusul livrării.

Acest hook se numește curiero_awb_status_changed și poate fi folosit, de exemplu, pentru a marca automat o comandă ca Anulată dacă coletul a fost refuzat de client.

Vă oferim un exemplu de cod mai jos. Trebuie să completați exact denumirea statusurilor de livrare pe care le considerați ca fiind refuzuri (ex: pentru Sameday și DPD, vedeți liniile din cod marcate).
De asemenea, dacă aveți un status personalizat pentru comenzile anulate, înlocuiți linia $status = 'cancelled'; cu denumirea statusului folosit de dumneavoastră.

add_action('curiero_awb_status_changed', function ($public_name, $order, $awb, $response) {
$refusal_statuses = [
'generic' => ['Refuzat'],
'Bookurier' => ['17'],
'DPD' => ['Expedierea ta a fost refuzată.'],
'ExpressCourier' => ['Refuz primire destinatar'],
'FanCourier' => ['6', 'S6'],
'Sameday'=> [
'Refusal of receipt',
'Order refused by recipient'
]
];

if( isset($refusal_statuses[$public_name]) &&
in_array($response, $refusal_statuses[$public_name])
) {
$status = 'cancelled';
$order->update_status($status, 'Livrarea a fost refuzată.');
}
}, 10, 4);