Plugin Directory

Changeset 2987026


Ignore:
Timestamp:
10/31/2023 08:47:21 PM (2 years ago)
Author:
shipbubble
Message:

Admin process shipment bug fix

Location:
shipbubble
Files:
45 added
7 edited

Legend:

Unmodified
Added
Removed
  • shipbubble/trunk/admin/js/ajax-create-shipment.js

    r2975160 r2987026  
    2020
    2121            if (details.val() != '') {
     22                let payload;
     23                if (typeof JSON.parse(details.val()) == 'object') {
     24                    payload = JSON.parse(details.val());
     25                } else {
     26                    payload = JSON.parse(JSON.parse(details.val()));
     27                }
    2228
    23                 const payload = JSON.parse(details.val());
    2429                payload['order_id'] = wc_order_id.val();
    2530
  • shipbubble/trunk/admin/woocommerce/async-create-shipment.php

    r2975160 r2987026  
    3737    if (!current_user_can('manage_options')) return;
    3838
    39     // $shipmentPayload = $_POST['data'];
    4039    $payload = array_map('sanitize_text_field', $_POST['data']['shipment']);
    4140
     
    4443    $orderId = sanitize_text_field($shipmentPayload['order_id']);
    4544
    46     $shipmentDetailsArray = get_post_meta($orderId, 'shipbubble_shipment_details');
    47     if (count($shipmentDetailsArray)) {
    48         $shipment = json_decode($shipmentDetailsArray[0], true);
    49         $shipment['admin_initiate_shipment_time'] = date('Y-m-d H:i:s');
    50         update_post_meta($orderId, 'shipbubble_shipment_details', sanitize_text_field(json_encode($shipment)));
    51     }
     45    // set time meta to initiate the request
     46    $shipmentPayload['admin_initiate_shipment_time'] = date('Y-m-d H:i:s');
     47    update_post_meta($orderId, 'shipbubble_shipment_details', sanitize_text_field(json_encode($shipmentPayload)));
    5248
     49    // initiate request
    5350    $response = shipbubble_create_shipment($shipmentPayload);
    5451
     
    5754        update_post_meta($orderId, 'shipbubble_order_id', $response->data->order_id);
    5855
    59         $shipmentDetailsArray = get_post_meta($orderId, 'shipbubble_shipment_details');
    60         if (count($shipmentDetailsArray)) {
    61             $shipment = json_decode($shipmentDetailsArray[0], true);
    62             $shipment['admin_create_shipment_time'] = date('Y-m-d H:i:s');
    63             update_post_meta($orderId, 'shipbubble_shipment_details', sanitize_text_field(json_encode($shipment)));
    64         }
     56        // set time meta
     57        $shipmentPayload['admin_create_shipment_time'] = date('Y-m-d H:i:s');
     58        update_post_meta($orderId, 'shipbubble_shipment_details', sanitize_text_field(json_encode($shipmentPayload)));
    6559
    6660        // set shipping status
  • shipbubble/trunk/admin/woocommerce/orders.php

    r2976344 r2987026  
    44function shibubble_order_data_after_billing_address($order)
    55{
     6
    67    if (in_array($order->get_status(), SHIPBUBBLE_WC_BAD_ORDER_STATUS_ARR)) {
    78        return;
     
    2324    $orderAddress = sb_create_address($shippingData['address_1'], $shippingData['city'], $shippingData['state'], $shippingData['country']);
    2425
    25     // echo '<pre> ' . var_export(reset($order->get_items( 'shipping' ))->get_method_id(), true) . '</pre>';
    26     // echo '<pre> ' . var_export($shippingData, true) . '</pre>';
    27     // echo '<pre> ' . var_export($order->data['shipping'], true) . '</pre>';
    28     // echo '<pre>' . var_export(wc_get_product( $order->get_items()[9]['product_id'] ), true) . '</pre>';
    29     // echo '<pre> ' . var_export(json_decode($shipment)->service_code, true) . '</pre>';
    30     // die;
    31 
    3226    // Get Delivery Address
    3327    $shipbubbleDeliveryAddress = get_post_meta($order->get_id(), 'shipbubble_delivery_address', true);
     
    3630    $shipbubbleOrderId = get_post_meta($order->get_id(), 'shipbubble_order_id', true);
    3731
    38     $shipment = $shipmentDetailsArray[0]; // [0 => 'request token ...']
    39 
     32    // $shipment = $shipmentDetailsArray[0]; // [0 => 'request token ...']
     33
     34    // var_dump($shipmentDetailsArray[0]);
     35    // die;
     36
     37    $convertedArray = shipbubble_convert_special_strings_to_array($shipmentDetailsArray[0]); // [0 => 'request token ...']
     38    $shipment = json_decode(json_encode($convertedArray));
     39    $serviceCode = ''; // prod
    4040    // $serviceCode = array( 'speedaf-express' ); // test
    4141
    42     if (empty($shipment)) {
    43         $serviceCode = array(); // prod
    44     } else {
    45         $serviceCode = array(json_decode($shipment)->service_code); // prod
     42    if (!empty($shipment)) {
     43        $serviceCode = $shipment->service_code; // prod
    4644    }
    4745
     
    5250    $hrsInterval = $interval->h + ($interval->days * 24);
    5351
    54     // check token has lasted longer than 48hrs before regenerating new request token
    55     if (strlen($shipbubbleOrderId) < 1 && $hrsInterval > SHIPBUBBLE_REQUEST_TOKEN_EXPIRY && !is_null($shipment)) {
    56         $rates = shipbubble_regenerate_rate_token($order, $serviceCode);
    57         if (count($rates)) {
    58             $shipment = json_encode($rates);
     52    //if (strlen($shipbubbleOrderId) < 1 && !sb_compare_addresses($shipbubbleDeliveryAddress, $orderAddress) && $hrsInterval < SHIPBUBBLE_REQUEST_TOKEN_EXPIRY && !is_null($shipment)) {
     53
     54    // set flag to regenerate token
     55    $regenerateToken = false;
     56
     57    // Check token has expired and shipbubble id doesn't exist to enable flag
     58    if (strlen($shipbubbleOrderId) < 1 && $hrsInterval > SHIPBUBBLE_REQUEST_TOKEN_EXPIRY) {
     59        $regenerateToken = true;
     60    }
     61
     62    // Check address has changed under 48hrs to enable flag
     63    if (!sb_compare_addresses($shipbubbleDeliveryAddress, $orderAddress)) {
     64        $regenerateToken = true;
     65    }
     66
     67    if ($regenerateToken && !is_null($shipment)) {
     68        // regenerate token
     69        $regeneratedMeta = shipbubble_regenerate_rate_token($order, $shipment);
     70
     71        // update db
     72        if (count($regeneratedMeta) && isset($regeneratedMeta['request_token'])) {
     73            $shipment = json_encode($regeneratedMeta);
    5974            update_post_meta($order->get_id(), 'shipbubble_shipment_details', $shipment);
    6075            update_post_meta($order->get_id(), 'shipbubble_delivery_address', $orderAddress);
    61         }
    62     }
    63 
    64     // Check address has changed under 48hrs before before regenerating new request token
    65     if (strlen($shipbubbleOrderId) < 1 && !sb_compare_addresses($shipbubbleDeliveryAddress, $orderAddress) && $hrsInterval < SHIPBUBBLE_REQUEST_TOKEN_EXPIRY && !is_null($shipment)) {
    66         // regenerate
    67         $rates = shipbubble_regenerate_rate_token($order, $serviceCode);
    68         if (count($rates)) {
    69             $shipment = json_encode($rates);
    70             update_post_meta($order->get_id(), 'shipbubble_shipment_details', $shipment);
    71             update_post_meta($order->get_id(), 'shipbubble_delivery_address', $orderAddress);
     76        } else {
     77            if (isset($regeneratedMeta['errors'])) {
     78                $message = $regeneratedMeta["errors"] . ' when regenerating shipbubble token';
     79                $output = '<div id="message" class="notice notice-warning is-dismissible">
     80                    <p>' . $message . '</p>
     81                   
     82                    <button type="button" class="notice-dismiss">
     83                        <span class="screen-reader-text">Dismiss this notice.</span>
     84                    </button>
     85                </div>';
     86
     87                echo $output;
     88            }
    7289        }
    7390    }
     
    7794        <input type="hidden" id="wc_order_id" name="wc_order_id" value='<?php echo esc_html($order->get_id()); ?>' />
    7895
    79         <input type="hidden" id="shipment_details" name="shipment_details" value='<?php echo esc_html($shipment); ?>' />
     96        <input type="hidden" id="shipment_details" name="shipment_details" value='<?php echo esc_html(json_encode($shipment)); ?>' />
    8097
    8198        <button id="create-shipment" style="background-color: #FF5170; color: #FFF; padding: 4px 16px; border: 1px solid #FF5170; border-radius: 3px; cursor: pointer;">
  • shipbubble/trunk/includes/core-methods.php

    r2975160 r2987026  
    184184}
    185185
    186 function shipbubble_regenerate_rate_token($order, $serviceCodes)
     186function shipbubble_regenerate_rate_token($order, $shipment)
    187187{
    188188    $countryObject = WC()->countries;
     
    200200
    201201    // Generate Address Code
     202
    202203    $addressResponse = shipbubble_validate_address(
    203204        $shipping['name'],
     
    240241
    241242        // Fetch Shipping rate for service code
    242         $response = shipbubble_process_shipping_rates($addressCode, $items, $serviceCodes);
    243 
    244         if (count($response) > 0) {
     243        $response = shipbubble_process_shipping_rates($addressCode, $items, [$shipment->service_code]);
     244
     245        if (count($response) && isset($response['couriers']) && count($response['couriers'])) {
    245246            $rates['request_token'] = $response['request_token'];
    246             $rates['service_code'] = $response['couriers'][0]->service_code;
    247             $rates['courier_id'] = $response['couriers'][0]->courier_id;
    248             $rates['courier_name'] = $response['couriers'][0]->courier_name;
    249             $rates['shipment_cost'] = $response['couriers'][0]->total;
    250         }
    251     }
    252 
    253     // echo '<pre>' . var_export($rates, true) . '</pre>';
    254     // die;
    255 
     247
     248            // filter request
     249            $filtered_courier = array_filter($response['couriers'], function ($courier) use ($shipment) {
     250                return $shipment->service_code == $courier->service_code && $shipment->courier_id == $courier->courier_id;
     251            });
     252
     253            if (count($filtered_courier)) {
     254                $rates['service_code'] = $filtered_courier[0]->service_code;
     255                $rates['courier_id'] = $filtered_courier[0]->courier_id;
     256                $rates['courier_name'] = $filtered_courier[0]->courier_name;
     257                $rates['shipment_cost'] = (string) $filtered_courier[0]->total;
     258            } else {
     259                $rates['service_code'] = $response['couriers'][0]->service_code;
     260                $rates['courier_id'] = $response['couriers'][0]->courier_id;
     261                $rates['courier_name'] = $response['couriers'][0]->courier_name;
     262                $rates['shipment_cost'] = (string) $response['couriers'][0]->total;
     263            }
     264
     265            // first data
     266            $rates['request_datetime'] = $shipment->request_datetime;
     267            $rates['order_request_time'] = $shipment->order_request_time;
     268
     269            // new data
     270            $rates['regenerated_token_time'] = date('Y-m-d H:i:s');
     271        } else {
     272            if (isset($response['error'])) {
     273                $rates['errors'] = $response['error'];
     274            }
     275        }
     276    } else {
     277        if (isset($addressResponse->status) && $addressResponse->status == 'failed') {
     278            $rates['errors'] = isset($addressResponse->message) ? $addressResponse->message : '';
     279        }
     280    }
    256281    return $rates;
    257282}
     
    316341    return trim(strtolower($address1)) == trim(strtolower($address2));
    317342}
     343
     344function shipbubble_convert_special_strings_to_array($subject)
     345{
     346    $string = str_replace('\n', '', $subject);
     347    $string = str_replace('{', '', $string);
     348    $string = str_replace('}', '', $string);
     349    $string = rtrim($string, ',');
     350    $string = str_replace('"', '', $string);
     351
     352    $converted = [];
     353    foreach (explode(',', $string) as $item) {
     354        $parts = explode(':', $item);
     355        $count = count($parts);
     356        if ($count > 2) {
     357            $join = '';
     358            for ($i = 1; $i < $count; $i++) {
     359                if ($count - $i == 1) {
     360                    $join .= $parts[$i];
     361                } else {
     362                    $join .= $parts[$i] . ':';
     363                }
     364            }
     365            $converted[trim($parts[0])] = $join;
     366        } else {
     367            $converted[trim($parts[0])] = $parts[1];
     368        }
     369    }
     370
     371    return $converted;
     372}
  • shipbubble/trunk/public/js/couriers-on-checkout.js

    r2975160 r2987026  
    2424            // use shipping variables
    2525            if (useShippingAddress.is(':checked')) {
     26
    2627                firstName = $('input#shipping_first_name').val();
    2728                lastName = $('input#shipping_last_name').val();
     
    5152
    5253            } else {
     54
    5355                // use billing variables
    5456                firstName = $('input#billing_first_name').val();
     
    181183
    182184                        // log time of data fetch
    183                         var request_fetch_date = new Date().toJSON();
    184                         $('input[name="shipbubble_rate_datetime"]').val(request_fetch_date);
     185                        var json_fetch_date = new Date().toJSON();
     186                        var string_fetch_date = JSON.stringify(json_fetch_date);
     187                        $('input[name="shipbubble_rate_datetime"]').val(string_fetch_date);
    185188
    186189                        loaders.hide();
  • shipbubble/trunk/readme.txt

    r2976344 r2987026  
    8484* Fixed checkout bug for other shipping methods (if available).
    8585
     86= 1.7.2 =
     87* Admin process shipment bug fix.
     88
    8689== Upgrade Notice ==
    87 = 1.7.1 =
    88 Fixed checkout bug for other shipping methods (if available).
     90= 1.7.2 =
     91Admin process shipment bug fix
  • shipbubble/trunk/shipbubble.php

    r2976344 r2987026  
    88 * Tags: logistics, deliveries, shipping rates, multiple couriers, post purchase experience
    99 * Requires at least: 4.0
    10  * Tested up to: 6.2
    11  * Version: 1.7.1
     10 * Tested up to: 6.3
     11 * Version: 1.7.2
    1212 * Requires PHP: 5.6
    1313 * Text Domain:  shipbubble
     
    189189    }
    190190
    191     // error_log(print_r('here', true));
    192     // error_log(print_r(sea($_POST['shipbubble_shipment_details']), true));
     191    // error_log(print_r($_POST['shipbubble_shipment_details']), true));
    193192    // die;
    194193
     
    265264            update_post_meta($order_id, 'shipbubble_delivery_address', $address);
    266265        }
     266    }
     267}
     268
     269add_action('woocommerce_checkout_order_processed', 'handle_processed', 10, 1);
     270function handle_processed($order_id)
     271{
     272    $order = new WC_Order($order_id);
     273    $shipping_items = $order->get_items('shipping');
     274    $shipping_total = $order->get_shipping_total();
     275
     276    if ($order->has_shipping_method(SHIPBUBBLE_ID) && (empty($shipping_items) || "0" == $shipping_total)) {
     277        $order->delete();
     278        wp_send_json_error();
    267279    }
    268280}
Note: See TracChangeset for help on using the changeset viewer.