View Categories

Snippet-uri de cod utile pentru personalizare aditionala a functionalitatilor FAN Courier

5 min read

Pret diferentiat pentru FAN Box #

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

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

Afisare exclusiva a metodei FAN Box si dezactivare metoda Fan Curier clasica #

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

Afisarea numarului de comanda pe AWB in campul Observatii #


add_filter('curiero_awb_details', function ($awb, $courier, $order) {
    if ($courier != 'FanCourier') return $awb;
   
    $awb['observatii'] = 'Comanda nr. ' . $order->get_order_number();
    
    return $awb;
}, 10, 3);

Adaugare cost suplimentar la livrare daca se selecteaza plata ramburs #

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 3 lucruri:

  • Codul functioneaza simultan si pentru metodele FAN Box si CollectPoint. Daca nu doriti adaugarea pentru una din celelalte 2 metode puteti sterge liniile 2 si/sau 3
  • 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
add_filter('curiero_overwrite_fan_shipping', 'curiero_add_custom_cod_fee', 10, 1);
add_filter('curiero_overwrite_fan_box_shipping', 'curiero_add_custom_cod_fee', 10, 1);
add_filter('curiero_overwrite_fan_collect_point_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 suma suplimentara la tariful de livrare #

Dacă doriți să adăugați o sumă suplimentară la tariful de livrare, introduceți acest cod.

add_action('curiero_overwrite_fan_shipping', function($args){
    if ($args['cost'] != 0) 
	$args['cost'] += suma;
    return $args;
}, 10, 1);

Adaugare cost fix suplimentar la livrare daca exista kilometri suplimentari (inlocuieste costul pe Km suplimentar) #

Dacă doriți să adăugați o sumă suplimentară fixa indiferent de cati KM suplimentari exista si nu doriti sa calculati in checkout costul in functie de numarul de kilometri suplimentari, adaugati snippet-ul de mai jos si nu uitati sa inlocuiti numarul cu verde cu suma fixa dorita a fi adaugata aditional la costul standard de livrare:

add_filter('curiero_overwrite_fan_shipping', function (array $args, string $judetdest, ?string $extra_km): array {
	if (empty($extra_km)) {
		return $args;
	}

	$args['cost'] += 15;
	$args['label'] = preg_replace('/(: ' . __('Gratuit', 'curiero-plugin') . ')/', '', $args['label']);

	return $args;
}, 10, 4);

Mutarea textului din „Conținut” în „Observații”
#

Acest snippet de cod facilitează transferul automat al textului din câmpul „Conținut” în câmpul „Observații”, asigurând o gestionare mai eficientă a informațiilor și optimizând fluxul de lucru.

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

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

[$awb_details['observatii']] = [$awb_details['continut']];
$awb_details['continut'] = '';

return $awb_details;

}, 10, 3);

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

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

add_filter('woocommerce_package_rates', 'disable_fanbox_shipping_based_on_cart', 10, 2);
function disable_fanbox_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_fan_fanbox'])) unset($rates['curiero_fan_fanbox']);
    }

    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);