diff --git a/eu-vat-for-woocommerce.php b/eu-vat-for-woocommerce.php index 3dbbc19..bad4e62 100644 --- a/eu-vat-for-woocommerce.php +++ b/eu-vat-for-woocommerce.php @@ -3,7 +3,7 @@ Plugin Name: EU/UK VAT for WooCommerce Plugin URI: https://wpfactory.com/item/eu-vat-for-woocommerce/ Description: Manage EU VAT in WooCommerce. Beautifully. -Version: 2.10.0 +Version: 2.10.1 Author: WPFactory Author URI: https://wpfactory.com/ Text Domain: eu-vat-for-woocommerce @@ -22,7 +22,7 @@ * Main Alg_WC_EU_VAT Class * * @class Alg_WC_EU_VAT - * @version 2.10.0 + * @version 2.10.1 * @since 1.0.0 */ final class Alg_WC_EU_VAT { @@ -33,7 +33,7 @@ final class Alg_WC_EU_VAT { * @var string * @since 1.0.0 */ - public $version = '2.10.0'; + public $version = '2.10.1'; public $core = null; public $settings = array(); diff --git a/includes/class-alg-wc-eu-vat-core.php b/includes/class-alg-wc-eu-vat-core.php index 6b1a56d..040c29f 100644 --- a/includes/class-alg-wc-eu-vat-core.php +++ b/includes/class-alg-wc-eu-vat-core.php @@ -1343,7 +1343,7 @@ function filter_available_payment_gateways_allowed( $available_gateways ) { /** * checkout_validate_vat. * - * @version 1.7.1 + * @version 2.10.1 * @since 1.0.0 * @todo [dev] (important) simplify the code */ @@ -1390,6 +1390,7 @@ function checkout_validate_vat( $_posted ) { $_posted[ alg_wc_eu_vat_get_field_id() ] != alg_wc_eu_vat_session_get( 'alg_wc_eu_vat_to_check' ) ) ) { + $is_valid = false; if ( 'yes' === get_option( 'alg_wc_eu_vat_force_checkout_recheck', 'no' ) && @@ -1400,6 +1401,31 @@ function checkout_validate_vat( $_posted ) { ( isset( $_posted['billing_country'] ) ? $_posted['billing_country'] : '' ), ( isset( $_posted['billing_company'] ) ? $_posted['billing_company'] : '' ) ); + } else { + + $vat_number = $_posted[ alg_wc_eu_vat_get_field_id() ]; + $billing_country = isset( $_posted['billing_country'] ) ? $_posted['billing_country'] : ''; + $billing_company = isset( $_posted['billing_company'] ) ? $_posted['billing_company'] : ''; + $vat_number = preg_replace('/\s+/', '', $vat_number); + $eu_vat_number = alg_wc_eu_vat_parse_vat( $vat_number, $billing_country ); + + /* Vat validate manually presaved number */ + if( 'yes' === get_option( 'alg_wc_eu_vat_manual_validation_enable', 'no' ) ) { + if( '' != ( $manual_validation_vat_numbers = get_option( 'alg_wc_eu_vat_manual_validation_vat_numbers', '' ) ) ) { + $prevalidated_VAT_numbers = array(); + $prevalidated_VAT_numbers = explode( ',', $manual_validation_vat_numbers ); + $sanitized_vat_numbers = array_map('trim', $prevalidated_VAT_numbers); + + $conjuncted_vat_number = $billing_country . '' . $eu_vat_number['number']; + if( isset($sanitized_vat_numbers[0] ) ){ + if ( in_array( $conjuncted_vat_number, $sanitized_vat_numbers ) ) { + alg_wc_eu_vat_maybe_log( $eu_vat_number['country'], $eu_vat_number['number'], $billing_company, '', __( 'Success (checkout): VAT ID valid. Matched with prevalidated VAT numbers.', 'eu-vat-for-woocommerce' ) ); + $is_valid = true; + + } + } + } + } } if ( 'no' != ( $preserve_option_value = get_option( 'alg_wc_eu_vat_preserv_vat_for_different_shipping', 'no' ) ) ) { diff --git a/includes/functions/alg-wc-eu-vat-functions-validation.php b/includes/functions/alg-wc-eu-vat-functions-validation.php index ae54e62..b39af0a 100644 --- a/includes/functions/alg-wc-eu-vat-functions-validation.php +++ b/includes/functions/alg-wc-eu-vat-functions-validation.php @@ -45,7 +45,7 @@ function alg_wc_eu_vat_parse_vat( $full_vat_number, $billing_country ) { /** * alg_wc_eu_vat_validate_vat_no_soap. * - * @version 2.9.16 + * @version 2.10.1 * @since 1.0.0 * @return mixed: bool on successful checking, null otherwise */ @@ -88,6 +88,10 @@ function alg_wc_eu_vat_validate_vat_no_soap( $country_code, $vat_number, $billin if ( isset( $decoded_result['isValid'] ) && $decoded_result['isValid'] ) { alg_wc_eu_vat_maybe_log( $country_code, $vat_number, $billing_company, $method, __( 'Success: VAT ID is valid', 'eu-vat-for-woocommerce' ) ); + + // store result to session + alg_wc_eu_vat_store_validation_session( $country_code, $vat_number, true, $billing_company ); + return true; } else { alg_wc_eu_vat_maybe_log( $country_code, $vat_number, $billing_company, $method, @@ -130,6 +134,10 @@ function alg_wc_eu_vat_validate_vat_no_soap( $country_code, $vat_number, $billin alg_wc_eu_vat_maybe_log( $country_code, $vat_number, $billing_company, $method, __( 'Success: VAT ID is valid', 'eu-vat-for-woocommerce' ) ); } + + // store result to session + alg_wc_eu_vat_store_validation_session( $country_code, $vat_number, $return, $billing_company ); + return $return; } } @@ -138,7 +146,7 @@ function alg_wc_eu_vat_validate_vat_no_soap( $country_code, $vat_number, $billin /** * alg_wc_eu_vat_validate_vat_soap. * - * @version 2.9.15 + * @version 2.10.1 * @since 1.0.0 * @return mixed: bool on successful checking, null otherwise */ @@ -198,15 +206,21 @@ function alg_wc_eu_vat_validate_vat_soap( $country_code, $vat_number, $billing_c alg_wc_eu_vat_maybe_log( $country_code, $vat_number, $billing_company, 'soap', __( 'Success: VAT ID is valid', 'eu-vat-for-woocommerce' ) ); } + + // store result to session + alg_wc_eu_vat_store_validation_session( $country_code, $vat_number, $return, $billing_company ); + return $return; } else { alg_wc_eu_vat_maybe_log( $country_code, $vat_number, $billing_company, 'soap', __( 'Error: SoapClient class does not exist', 'eu-vat-for-woocommerce' ) ); + return null; } } catch( Exception $exception ) { alg_wc_eu_vat_maybe_log( $country_code, $vat_number, $billing_company, 'soap', sprintf( __( 'Error: Exception: %s', 'eu-vat-for-woocommerce' ), $exception->getMessage() ) ); + return null; } } @@ -242,7 +256,7 @@ function alg_wc_eu_vat_validate_vat_with_method( $country_code, $vat_number, $bi /** * alg_wc_eu_vat_validate_vat. * - * @version 2.9.18 + * @version 2.10.1 * @since 1.0.0 * @return mixed: bool on successful checking, null otherwise * @todo [dev] (maybe) check for minimal length @@ -276,6 +290,15 @@ function alg_wc_eu_vat_validate_vat( $country_code, $vat_number, $billing_compan } } } + + /* First validate from session value */ + $validate_status = alg_wc_eu_vat_validate_from_session( $country_code, $vat_number, $billing_company ); + + if( $validate_status ) { + alg_wc_eu_vat_maybe_log( $country_code, $vat_number, $billing_company, 'ValidateFromStoredSession', __( 'Success: VAT ID is valid', 'eu-vat-for-woocommerce' ) ); + return true; + } + /* Vat validate manually presaved number end */ $methods = array(); @@ -305,7 +328,7 @@ function alg_wc_eu_vat_validate_vat( $country_code, $vat_number, $billing_compan /** * alg_wc_eu_vat_validate_vat_uk. * - * @version 2.9.15 + * @version 2.10.1 * @since 1.0.0 * @return mixed: bool on successful checking, null otherwise * @todo [dev] (maybe) check for minimal length @@ -397,6 +420,67 @@ function alg_wc_eu_vat_validate_vat_uk( $country_code, $vat_number, $billing_com alg_wc_eu_vat_maybe_log( $country_code, $vat_number, $billing_company, $method, __( 'Success: VAT ID is valid', 'eu-vat-for-woocommerce' ) ); } + + // store result to session + alg_wc_eu_vat_store_validation_session( $country_code, $vat_number, $return, $billing_company ); + return $return; } +} + +if ( ! function_exists( 'alg_wc_eu_vat_store_validation_session' ) ) { + /** + * alg_wc_eu_vat_store_validation_session. + * + * @version 2.10.1 + * @since 2.9.22 + * @return mixed: array of stored value + * @todo [dev] store vat number validation result to reduce request number to VIES + */ + function alg_wc_eu_vat_store_validation_session( $country_code, $vat_number, $status, $billing_company = '' ) { + $store_array_each = array('country_code' => $country_code, 'vat_number' => $vat_number, 'billing_company' => $billing_company, 'status' => $status ); + + if( 'yes' !== get_option( 'alg_wc_eu_vat_reduce_concurrent_request_enable', 'no' ) ){ + return $store_array_each; + } + + $validation_saved = alg_wc_eu_vat_session_get( 'alg_wc_eu_vat_validation_storage', array() ); + + if( empty( $validation_saved ) ) { + $validation_saved = array(); + } + + if( is_array( $validation_saved ) && isset( $validation_saved[$vat_number] ) ) { + return $store_array_each; + } + + $validation_saved[$vat_number] = $store_array_each; + + alg_wc_eu_vat_session_set( 'alg_wc_eu_vat_validation_storage', $validation_saved ); + return $store_array; + } +} + +if ( ! function_exists( 'alg_wc_eu_vat_validate_from_session' ) ) { + /** + * alg_wc_eu_vat_validate_from_session. + * + * @version 2.10.1 + * @since 2.9.22 + * @return mixed: bool on successful checking, null otherwise + * @todo [dev] validate vat number from session to reduce request number to VIES + */ + function alg_wc_eu_vat_validate_from_session( $country_code, $vat_number, $billing_company = '' ) { + if( 'yes' !== get_option( 'alg_wc_eu_vat_reduce_concurrent_request_enable', 'no' ) ){ + return false; + } + + $validation_results = alg_wc_eu_vat_session_get('alg_wc_eu_vat_validation_storage', array()); + if( !empty($vat_number) && !empty( $validation_results ) && is_array( $validation_results ) && isset( $validation_results[$vat_number] ) ) { + if( $validation_results[$vat_number]['status'] == '1' ) { + return true; + } + } + return false; + } } \ No newline at end of file diff --git a/includes/settings/class-alg-wc-eu-vat-settings-admin.php b/includes/settings/class-alg-wc-eu-vat-settings-admin.php index 0f85aa2..31dc35a 100644 --- a/includes/settings/class-alg-wc-eu-vat-settings-admin.php +++ b/includes/settings/class-alg-wc-eu-vat-settings-admin.php @@ -2,7 +2,7 @@ /** * EU VAT for WooCommerce - Admin Section Settings * - * @version 2.9.21 + * @version 2.10.1 * @since 1.5.0 * @author WPFactory */ @@ -30,7 +30,7 @@ function __construct() { /** * get_settings. * - * @version 2.9.21 + * @version 2.10.1 * @since 1.5.0 * @todo [dev] (important) set "Session type" default value to "WC session (recommended)" */ @@ -149,6 +149,16 @@ function get_settings() { 'default' => 'no', 'type' => 'checkbox', ), + + array( + 'title' => __( 'Reduce concurrent request to VIES', 'eu-vat-for-woocommerce' ), + 'desc' => __( 'Enable', 'eu-vat-for-woocommerce' ), + 'desc_tip' => __( 'Enable if validation fails multiple times and you encounter the "MS_MAX_CONCURRENT_REQ" error after debugging.', 'eu-vat-for-woocommerce' ), + 'id' => 'alg_wc_eu_vat_reduce_concurrent_request_enable', + 'default' => 'no', + 'type' => 'checkbox', + ), + array( 'type' => 'sectionend', 'id' => 'alg_wc_eu_vat_advanced_options', diff --git a/includes/settings/class-alg-wc-eu-vat-settings-validation.php b/includes/settings/class-alg-wc-eu-vat-settings-validation.php index ca2a6b4..9a18dd8 100644 --- a/includes/settings/class-alg-wc-eu-vat-settings-validation.php +++ b/includes/settings/class-alg-wc-eu-vat-settings-validation.php @@ -88,7 +88,7 @@ function get_settings() { ), array( - 'title' => __( 'Exempt VAT for valid numbers', 'eu-vat-for-woocommerce' ), + 'title' => __( 'Remove VAT for validated numbers', 'eu-vat-for-woocommerce' ), 'desc_tip' => __( 'Enables/disabled VAT exemption.', 'eu-vat-for-woocommerce' ), 'desc' => __( 'Yes', 'eu-vat-for-woocommerce' ), 'id' => 'alg_wc_eu_vat_disable_for_valid', @@ -97,8 +97,8 @@ function get_settings() { ), array( - 'title' => __( 'Preserve VAT if shipping country is different from billing country', 'eu-vat-for-woocommerce' ), - 'desc_tip' => __( 'Enables for preserve VAT if shipping country is different from billing country.', 'eu-vat-for-woocommerce' ), + 'title' => __( 'Keep VAT if shipping country is different from billing country', 'eu-vat-for-woocommerce' ), + 'desc_tip' => __( 'Enables for keep VAT if shipping country is different from billing country.', 'eu-vat-for-woocommerce' ), 'desc' => __( 'Yes', 'eu-vat-for-woocommerce' ), 'id' => 'alg_wc_eu_vat_preserv_vat_for_different_shipping', 'default' => 'no', @@ -106,7 +106,7 @@ function get_settings() { ), array( - 'title' => __( 'Preserve VAT in selected countries', 'eu-vat-for-woocommerce' ), + 'title' => __( 'Keep VAT in selected countries', 'eu-vat-for-woocommerce' ), 'desc_tip' => __( 'This will validate the VAT, but won\'t exempt VAT for selected countries.', 'eu-vat-for-woocommerce' ) . ' ' . sprintf( __( 'Country for "Base (i.e. store) country" option is set in "%s".', 'eu-vat-for-woocommerce' ), __( 'WooCommerce > Settings > General > Store Address', 'eu-vat-for-woocommerce' ) ), diff --git a/langs/eu-vat-for-woocommerce.pot b/langs/eu-vat-for-woocommerce.pot index ba0662f..6cc339f 100644 --- a/langs/eu-vat-for-woocommerce.pot +++ b/langs/eu-vat-for-woocommerce.pot @@ -2,14 +2,14 @@ # This file is distributed under the GNU General Public License v3.0. msgid "" msgstr "" -"Project-Id-Version: eu-vat-for-woocommerce 2.10.0\n" +"Project-Id-Version: eu-vat-for-woocommerce 2.10.1\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/eu-vat-for-woocommerce\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2024-03-21T19:35:05+01:00\n" +"POT-Creation-Date: 2024-03-26T13:31:13+01:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.9.0\n" "X-Domain: eu-vat-for-woocommerce\n" @@ -153,7 +153,7 @@ msgid "VAT is valid." msgstr "" #: includes/class-alg-wc-eu-vat-ajax.php:51 -#: includes/class-alg-wc-eu-vat-core.php:1453 +#: includes/class-alg-wc-eu-vat-core.php:1479 #: includes/settings/class-alg-wc-eu-vat-settings-validation.php:254 msgid "VAT is not valid." msgstr "" @@ -223,12 +223,16 @@ msgid "Customer Decide" msgstr "" #: includes/class-alg-wc-eu-vat-core.php:1376 -#: includes/class-alg-wc-eu-vat-core.php:1418 +#: includes/class-alg-wc-eu-vat-core.php:1444 #: includes/settings/class-alg-wc-eu-vat-settings-validation.php:70 msgid "EU VAT Number is not valid." msgstr "" -#: includes/class-alg-wc-eu-vat-core.php:1426 +#: includes/class-alg-wc-eu-vat-core.php:1422 +msgid "Success (checkout): VAT ID valid. Matched with prevalidated VAT numbers." +msgstr "" + +#: includes/class-alg-wc-eu-vat-core.php:1452 msgid "Error: VAT is not valid (checkout)" msgstr "" @@ -250,49 +254,50 @@ msgstr "" #: includes/functions/alg-wc-eu-vat-functions-validation.php:62 #: includes/functions/alg-wc-eu-vat-functions-validation.php:74 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:322 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:334 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:345 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:357 msgid "Error: %s is disabled" msgstr "" #: includes/functions/alg-wc-eu-vat-functions-validation.php:82 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:343 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:366 msgid "Error: No response" msgstr "" #: includes/functions/alg-wc-eu-vat-functions-validation.php:90 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:131 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:199 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:398 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:135 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:207 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:298 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:421 msgid "Success: VAT ID is valid" msgstr "" -#: includes/functions/alg-wc-eu-vat-functions-validation.php:94 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:127 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:191 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:394 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:98 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:131 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:199 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:417 msgid "Error: VAT ID not valid" msgstr "" -#: includes/functions/alg-wc-eu-vat-functions-validation.php:124 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:184 -#: includes/functions/alg-wc-eu-vat-functions-validation.php:387 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:128 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:192 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:410 msgid "Error: Company name does not match (%s)" msgstr "" -#: includes/functions/alg-wc-eu-vat-functions-validation.php:195 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:203 msgid "Error: Result is not set" msgstr "" -#: includes/functions/alg-wc-eu-vat-functions-validation.php:204 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:216 msgid "Error: SoapClient class does not exist" msgstr "" -#: includes/functions/alg-wc-eu-vat-functions-validation.php:209 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:222 msgid "Error: Exception: %s" msgstr "" -#: includes/functions/alg-wc-eu-vat-functions-validation.php:272 +#: includes/functions/alg-wc-eu-vat-functions-validation.php:286 msgid "Success: VAT ID valid. Matched with prevalidated VAT numbers." msgstr "" @@ -339,6 +344,7 @@ msgstr "" #: includes/settings/class-alg-wc-eu-vat-settings-admin.php:116 #: includes/settings/class-alg-wc-eu-vat-settings-admin.php:132 #: includes/settings/class-alg-wc-eu-vat-settings-admin.php:147 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:155 #: includes/settings/class-alg-wc-eu-vat-settings-general.php:146 #: includes/settings/class-alg-wc-eu-vat-settings-general.php:155 #: includes/settings/class-alg-wc-eu-vat-settings-general.php:251 @@ -404,35 +410,43 @@ msgstr "" msgid "Remove country from VAT number in REST API" msgstr "" -#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:160 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:154 +msgid "Reduce concurrent request to VIES" +msgstr "" + +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:156 +msgid "Enable if validation fails multiple times and you encounter the \"MS_MAX_CONCURRENT_REQ\" error after debugging." +msgstr "" + +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:170 msgid "Additional Info" msgstr "" -#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:164 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:174 msgid "Field ID used for EU VAT: %s." msgstr "" -#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:165 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:175 msgid "Tool for adding EU country standard VAT rates: %s." msgstr "" -#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:166 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:176 msgid "Tools > EU country VAT Rates" msgstr "" -#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:167 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:177 msgid "EU VAT report: %s." msgstr "" -#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:168 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:178 msgid "WooCommerce > Reports > Taxes > EU VAT" msgstr "" -#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:169 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:179 msgid "You can use shortcodes in field label, placeholder, description and all messages options, e.g.: %s." msgstr "" -#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:171 +#: includes/settings/class-alg-wc-eu-vat-settings-admin.php:181 msgid "Plugin description on %s." msgstr "" @@ -833,7 +847,7 @@ msgid "Simple" msgstr "" #: includes/settings/class-alg-wc-eu-vat-settings-validation.php:91 -msgid "Exempt VAT for valid numbers" +msgid "Remove VAT for validated numbers" msgstr "" #: includes/settings/class-alg-wc-eu-vat-settings-validation.php:92 @@ -841,15 +855,15 @@ msgid "Enables/disabled VAT exemption." msgstr "" #: includes/settings/class-alg-wc-eu-vat-settings-validation.php:100 -msgid "Preserve VAT if shipping country is different from billing country" +msgid "Keep VAT if shipping country is different from billing country" msgstr "" #: includes/settings/class-alg-wc-eu-vat-settings-validation.php:101 -msgid "Enables for preserve VAT if shipping country is different from billing country." +msgid "Enables for keep VAT if shipping country is different from billing country." msgstr "" #: includes/settings/class-alg-wc-eu-vat-settings-validation.php:109 -msgid "Preserve VAT in selected countries" +msgid "Keep VAT in selected countries" msgstr "" #: includes/settings/class-alg-wc-eu-vat-settings-validation.php:110 diff --git a/readme.txt b/readme.txt index df89ba3..6887f38 100644 --- a/readme.txt +++ b/readme.txt @@ -3,7 +3,7 @@ Contributors: wpcodefactory, omardabbas, karzin, anbinder, algoritmika, kousikmu Tags: woocommerce, eu, uk, vat, eu vat, vat validation Requires at least: 6.1 Tested up to: 6.4 -Stable tag: 2.10.0 +Stable tag: 2.10.1 License: GNU General Public License v3.0 License URI: http://www.gnu.org/licenses/gpl-3.0.html @@ -284,6 +284,10 @@ Once activated, access the plugin's settings by navigating to “WooCommerce > S == Changelog == += 2.10.1 - 26/03/2024 = +* Add - Admin & Advance > Reduce concurrent request to VIES +* Fix - code check for manual validation at checkout. + = 2.10.0 - 21/03/2024 = * Add - filter alg_wc_eu_vat_get_field_id, alg_wc_eu_vat_confirmation_bg_yes, alg_wc_eu_vat_confirmation_bg_no. * Fix - $ is undefined in alg-wc-eu-vat-place-order.js