How to add custom shipment CS-Cart

299 Views Asked by At

I need to add dynamic shipment option to the checkout page, the shipment's pricing, duration and name come from other API.

I tried these hook, none of these invoked during checkout.

    'get_available_shippings',
    'get_shipping_methods',
    'get_shipping_methods_post',
    'get_shipments_info_post'

tried to hook shipping_methods_list.pre.tpl

{assign var="s" value=$all_shippings[0][1]}
{$s["shipping_id"] = '2'}
{$all_shippings[0][2] = $s}

I'm using cs-cart 4.14

1

There are 1 best solutions below

0
Itzbenz On BEST ANSWER

The right hook was shippings_get_shippings_list_post, since it's not adding to the database, it seems you need to hook orders:shipping_info on the backend for further customization.

function fn_example_addons_shippings_get_shippings_list_post(&$group, &$lang, &$area, &$shippings_info)
{
    $package_info = $group['package_info'];
    $fromZipcode = $package_info['origination']['zipcode'];
    $toZipcode = $package_info['location']['zipcode'];
    $weight = (int)round(ceil($package_info["W"]));
    $item_price = (int)round(ceil($package_info["C"]));
    $shipments = fn_example_addons_getRates($fromZipcode, $toZipcode, $weight, $item_price);
    foreach ($shipments as $key => $shipment) {
        $shippings_info[$key] = $shipment;
    }
}

for the shipments

            $shipments["SHIPMENT_ID"] = array(
                "shipping_id" => "SHIPMENT_ID",
                "shipping" => "Example Shipment"
                "delivery_time" => "2-3 days",
                "description" => "",
                "rate_calculation" => "M",
                "service_params" => array(),
                "destination" => "I",
                "min_weight" => "0.0",
                "max_weight" => "0.0",
                "service_id" => "0",
                "free_shipping" => "N",
                "module" => null,
                "service_code" => null,
                "is_address_required" => "Y",
                "rate_info" => array(
                    "rate_id" => "0",
                    "shipping_id" => "0",
                    "rate_value" => array(
                        "C" => array(
                            array(
                                "range_from_value" => 0,
                                "range_to_value" => "",
                                "value" => $price_in_point
                            )
                        )
                    ),
                    "destination_id" => "1",
                    "base_rate" => "0.0"
                ),
                "disable_payments_ids" => array()
            );