isEnabled()) { return; } add_filter('fluent_cart/cart/estimated_total', function ($total, $data) { $cart = $data['cart']; if (Arr::get($cart->checkout_data, 'tax_data.tax_behavior', 0) == 1) { $taxTotal = (int)Arr::get($cart->checkout_data, 'tax_data.tax_total', 0); $total += (int)$taxTotal; // adds shipping tax as well $shippingTax = (int)Arr::get($cart->checkout_data, 'tax_data.shipping_tax', 0); $total += (int)$shippingTax; } return $total; }, 10, 2); //new hook to get changes add_filter('fluent_cart/checkout/before_patch_checkout_data', [$this, 'maybeRecalculateTaxAmount'], 10, 2); add_filter('fluent_cart/cart/tax_behavior', function ($behavior, $data) { $cart = $data['cart']; return Arr::get($cart->checkout_data, 'tax_data.tax_behavior', $behavior); }, 10, 2); add_action('fluent_cart/checkout/before_summary_total', function ($data) { $cart = $data['cart']; if (empty($cart->checkout_data['tax_data'])) { return; } $taxAmount = (int)Arr::get($cart->checkout_data, 'tax_data.tax_total', 0); $taxLines = Arr::get($cart->checkout_data, 'tax_data.tax_lines', []); $shippingTax = (int)Arr::get($cart->checkout_data, 'tax_data.shipping_tax', 0); $isInclusive = Arr::get($cart->checkout_data, 'tax_data.tax_behavior', 2) === 2; $isReverseCharge = Arr::get($cart->checkout_data, 'tax_data.valid', false); // if (!$taxAmount && !$isReverseCharge && !$shippingTax) { // return; // } // Show breakdown by tax rate if available if (!empty($taxLines) && !$isReverseCharge) { $this->renderCompoundTaxRow($cart); } else { // Fallback to showing total tax if no breakdown available $this->renderTaxRow($cart); ?> renderShippingTaxRow($cart); }); add_action('fluent_cart/checkout/prepare_other_data', [$this, 'prepareOtherData'], 10, 1); add_action('fluent_cart/product/after_price', function () { $priceSuffix = Arr::get($this->taxSettings, 'price_suffix', ''); if ($priceSuffix) { echo '' . wp_kses_post($priceSuffix) . ''; } }); add_filter('fluent_cart/product/price_suffix_atts', function ($suffix) { $priceSuffix = Arr::get($this->taxSettings, 'price_suffix', ''); if ($priceSuffix) { return $priceSuffix; } return $suffix; }); add_filter('fluent_cart/checkout/after_patch_checkout_data_fragments', [$this, 'maybeRerenderEuVatField'], 10, 2); $this->initCheckoutActions(); $this->registerAjaxHandlers(); add_action('fluent_cart/cart/cart_data_items_updated', [$this, 'recalculateTax']); } public function renderTaxRow($cart, $atts = '') { $taxAmount = (int)Arr::get($cart->checkout_data, 'tax_data.tax_total', 0); $shippingTax = (int)Arr::get($cart->checkout_data, 'tax_data.shipping_tax', 0); $isInclusive = Arr::get($cart->checkout_data, 'tax_data.tax_behavior', 2) === 2; $isReverseCharge = Arr::get($cart->checkout_data, 'tax_data.valid', false); ?>
  • >
  • checkout_data, 'tax_data.shipping_tax', 0); $isInclusive = Arr::get($cart->checkout_data, 'tax_data.tax_behavior', 2) === 2; if ($shippingTax == 0) { return ''; } ?>
  • >
  • checkout_data, 'tax_data.tax_total', 0); $taxLines = Arr::get($cart->checkout_data, 'tax_data.tax_lines', []); $shippingTax = (int)Arr::get($cart->checkout_data, 'tax_data.shipping_tax', 0); $isInclusive = Arr::get($cart->checkout_data, 'tax_data.tax_behavior', 2) === 2; $isReverseCharge = Arr::get($cart->checkout_data, 'tax_data.valid', false); foreach ($taxLines as $taxLine) { $rateLabel = Arr::get($taxLine, 'label', 'Tax'); $rateTaxAmount = (int)Arr::get($taxLine, 'tax_amount', 0); $isCompound = Arr::get($taxLine, 'is_compound', false); $taxableBase = (int)Arr::get($taxLine, 'taxable_amount', 0); $ratePercent = Arr::get($taxLine, 'rate_percent', 0); // Build the label with compound indicator if needed $displayLabel = $rateLabel; if ($isCompound) { $displayLabel .= ' (' . __('Compound', 'fluent-cart') . ')'; } // Add calculation details if available if ($taxableBase && $ratePercent) { $displayLabel .= ' [' . Helper::toDecimal($taxableBase) . ' × ' . number_format($ratePercent, 2) . '%]'; } ?>
  • checkout_data; $checkoutData['fees'] = $cart->getFees(); $fillData = $this->calculateCartTax([ 'cart_data' => $cart->cart_data, 'checkout_data' => $checkoutData ]); $cart->fill($fillData); $cart->save(); } public function maybeRecalculateTaxAmount($fillData, $data) { $changes = Arr::get($data, 'changes', []); $watchings = array_filter($changes, function ($value, $key) { return preg_match('/^(billing_|shipping_|ship_to_|fct_billing_tax)/i', $key); }, ARRAY_FILTER_USE_BOTH); if (empty($watchings)) { return $fillData; } // Persist dynamic fees so tax pipeline can see them $cart = Arr::get($data, 'cart'); if ($cart) { $checkoutData = Arr::get($fillData, 'checkout_data', []); $checkoutData['fees'] = $cart->getFees(); $fillData['checkout_data'] = $checkoutData; } return $this->calculateCartTax($fillData); } public function getSettings() { if (!empty($this->taxSettings)) { return $this->taxSettings; } $defaultSettings = [ 'tax_inclusion' => 'included', 'tax_calculation_basis' => 'shipping', 'tax_rounding' => 'item', 'enable_tax' => 'no', 'eu_vat_settings' => [ 'require_vat_number' => 'no', 'local_reverse_charge' => 'yes', 'vat_reverse_excluded_categories' => [] ] ]; $savedSettings = get_option('fluent_cart_tax_configuration_settings', []); return $this->taxSettings = wp_parse_args($savedSettings, $defaultSettings); } public function isEnabled() { $settings = $this->getSettings(); return Arr::get($settings, 'enable_tax', 'no') === 'yes'; } public function calculateCartTax($fillData) { $lineItems = Arr::get($fillData, 'cart_data', []); $checkoutData = Arr::get($fillData, 'checkout_data', []); $country = ''; $state = ''; $postCode = ''; $taxSettings = $this->getSettings(); $taxCalculationBasis = Arr::get($taxSettings, 'tax_calculation_basis', 'shipping'); //$checkoutData = $cart->checkout_data; if ($taxCalculationBasis === 'shipping' && Arr::get($checkoutData, 'form_data.ship_to_different', '') !== 'yes') { $taxCalculationBasis = 'billing'; } if ($taxCalculationBasis === 'shipping') { $country = Arr::get($checkoutData, 'form_data.shipping_country', ''); $state = Arr::get($checkoutData, 'form_data.shipping_state', ''); $city = Arr::get($checkoutData, 'form_data.shipping_city', ''); $postCode = Arr::get($checkoutData, 'form_data.shipping_postcode', ''); } elseif ($taxCalculationBasis === 'billing') { $country = Arr::get($checkoutData, 'form_data.billing_country', ''); $state = Arr::get($checkoutData, 'form_data.billing_state', ''); $city = Arr::get($checkoutData, 'form_data.billing_city', ''); $postCode = Arr::get($checkoutData, 'form_data.billing_postcode', ''); } elseif ($taxCalculationBasis === 'store') { $storeSettings = new StoreSettings(); $country = $storeSettings->get('store_country'); $state = $storeSettings->get('store_state'); $city = $storeSettings->get('store_city'); $postCode = $storeSettings->get('store_postcode'); } // Add taxable fee items to the tax calculation pipeline $fees = (array)Arr::get($checkoutData, 'fees', []); $feeItems = []; foreach ($fees as $fee) { if (!empty($fee['taxable']) && !empty($fee['amount'])) { $feeItems[] = Cart::buildFeeCartItem($fee); } } $allItems = array_merge($lineItems, $feeItems); $taxCalculator = new TaxCalculator($allItems, [ 'inclusive' => false, 'country' => $country, 'state' => $state, 'city' => $city, 'postcode' => $postCode, ]); if (empty($checkoutData['tax_data'])) { $checkoutData['tax_data'] = []; } $taxTotal = $taxCalculator->getTotalTax(); $shippingTax = $taxCalculator->getShippingTax(); $taxCountry = $taxCalculator->getTaxCountry(); $taxLines = $taxCalculator->getTaxLinesByRates(); // Separate product and fee items from taxed lines $allTaxedLines = $taxCalculator->getTaxedLines(); $productLines = []; $feeTax = 0; foreach ($allTaxedLines as $taxedLine) { if (!empty($taxedLine['is_fee'])) { $feeTax += (int)Arr::get($taxedLine, 'tax_amount', 0); } else { $productLines[] = $taxedLine; } } $checkoutData['tax_data']['tax_total'] = $taxTotal; $checkoutData['tax_data']['tax_behavior'] = $taxCalculator->getTaxBahaviorValue(); $checkoutData['tax_data']['tax_country'] = $taxCountry; $checkoutData['tax_data']['shipping_tax'] = $shippingTax; $checkoutData['tax_data']['fee_tax'] = $feeTax; $checkoutData['tax_data']['tax_lines'] = $taxLines; $fillData['checkout_data'] = $checkoutData; // Only product lines go back into cart_data $fillData['cart_data'] = $productLines; if (isset($fillData['hook_changes'])) { Arr::set($fillData, 'hook_changes.tax', true); } return $fillData; } public function maybeRerenderEuVatField($fragments, $args) { $taxSettings = $this->getSettings(); $taxEnabled = Arr::get($taxSettings, 'enable_tax', 'no') === 'yes'; $euVatEnabled = Arr::get($taxSettings, 'eu_vat_settings.require_vat_number', 'no') === 'yes'; $cart = Arr::get($args, 'cart'); // all changes are relevant for tax , so not checking changes for now if (!$taxEnabled || !$euVatEnabled) { return $fragments; } $taxApplicableCountry = $this->getTaxApplicableCountry(Arr::get($this->taxSettings, 'tax_calculation_basis'), $cart->checkout_data['form_data']); $euCountryCodes = LocalizationManager::getInstance()->taxContinents('EU'); $euCountryCodes = Arr::get($euCountryCodes, 'countries'); $isEuCountry = in_array($taxApplicableCountry, $euCountryCodes); ob_start(); (new EUVatRenderer($isEuCountry, $taxApplicableCountry))->render($cart); $euVatView = ob_get_clean(); $fragments[] = [ 'selector' => '[data-fluent-cart-checkout-page-tax-wrapper]', 'content' => $euVatView, 'type' => 'replace' ]; return $fragments; } public function prepareOtherData($data) { $cart = Arr::get($data, 'cart'); $order = Arr::get($data, 'order'); if (empty($cart->checkout_data['tax_data']) || !$order->id || !$cart) { return; } $checkoutData = $cart->checkout_data; $taxCountry = Arr::get($checkoutData, 'tax_data.tax_country', ''); // add store vat number into tax data $taxSettings = $this->getSettings(); $isEuCountry = LocalizationManager::getInstance()->continentFromCountry($taxCountry ?? '') === 'EU'; $storeVatNumber = ''; if ($isEuCountry) { $euVatMethod = Arr::get($taxSettings, 'eu_vat_settings.method'); if ($euVatMethod === 'home') { $storeVatNumber = Arr::get($taxSettings, 'eu_vat_settings.home_vat', ''); } elseif ($euVatMethod === 'oss') { $storeVatNumber = Arr::get($taxSettings, 'eu_vat_settings.oss_vat', ''); } } if (empty($storeVatNumber)) { $key = 'fluent_cart_tax_id_' . $taxCountry; $taxCountryData = \FluentCart\App\Models\Meta::query()->where('meta_key', $key)->where('object_type', 'tax')->first(); if ($taxCountryData) { $storeVatNumber = Arr::get($taxCountryData->meta_value, 'tax_id', ''); } } $customerVatData = []; if (Arr::get($cart->checkout_data, 'tax_data.valid', false)) { $customerVatData = Arr::get($checkoutData, 'tax_data'); $order = $data['order']; $order->customer->updateMeta('customer_tax_info', Arr::only($customerVatData, ['vat_number', 'country', 'valid', 'name', 'address']) ); } foreach ($cart->cart_data as $item) { $taxMeta = Arr::get($item, 'line_meta.tax_config.rates.0', []); $rateId = Arr::get($taxMeta, 'rate_id'); if (!$rateId) { $rateId = 0; // assume this rate is from JSON tax rate } $shippingTax = (int)Arr::get($taxMeta, 'shipping_tax', 0); $taxAmount = (int)Arr::get($taxMeta, 'tax_amount', 0); $taxMeta = Arr::get($item, 'line_meta.tax_config', []); $taxMeta['tax_country'] = $taxCountry; $taxMeta['store_vat_number'] = $storeVatNumber; if (!empty($customerVatData)) { $taxMeta['vat_reverse'] = $customerVatData; $taxAmount = 0; $shippingTax = 0; } $orderTaxRate = OrderTaxRate::query()->where('order_id', $order->id) ->where('tax_rate_id', $rateId) ->first(); if (!$orderTaxRate) { $orderTaxRate = OrderTaxRate::create([ 'order_id' => $order->id, 'tax_rate_id' => $rateId, 'shipping_tax' => $shippingTax, 'order_tax' => $taxAmount, 'total_tax' => $shippingTax + $taxAmount, 'meta' => $taxMeta ]); } else { $orderTaxRate->update([ 'shipping_tax' => $shippingTax, 'order_tax' => $taxAmount, 'total_tax' => $shippingTax + $taxAmount, 'meta' => $taxMeta ]); } } } public function initCheckoutActions() { add_action('fluent_cart/before_payment_methods', [$this, 'renderTaxField'], 10, 1); } public function registerAjaxHandlers() { add_action('wp_ajax_fluent_cart_validate_vat', [$this, 'handleVatValidation']); add_action('wp_ajax_nopriv_fluent_cart_validate_vat', [$this, 'handleVatValidation']); add_action('wp_ajax_fluent_cart_remove_vat', [$this, 'removeVat']); add_action('wp_ajax_nopriv_fluent_cart_remove_vat', [$this, 'removeVat']); } public function renderTaxField($data) { $cart = Arr::get($data, 'cart'); $checkoutData = $cart->checkout_data; $vatNumber = Arr::get($checkoutData, 'tax_data.vat_number', ''); $euVatEnabled = Arr::get($this->taxSettings, 'eu_vat_settings.require_vat_number', 'no'); $taxApplicableCountry = $this->getTaxApplicableCountry( Arr::get($this->taxSettings, 'tax_calculation_basis'), Arr::get($checkoutData, 'form_data') ); $isEuCountry = LocalizationManager::getInstance()->continentFromCountry($taxApplicableCountry) === 'EU'; $isEuVatRcAvailable = false; if ($isEuCountry && $euVatEnabled === 'yes') { $isEuVatRcAvailable = true; } ?>

    renderValidNote($checkoutData); ?>
    get('store_country') ?? ''; } else if ($calculationBasis === 'billing' || ($calculationBasis === 'shipping' && !$shipToDifferent)) { $country = Arr::get($formData, 'billing_country') ?? ''; } else { $country = Arr::get($formData, 'shipping_country') ?? ''; } return $country; } public function renderValidNote($checkoutData) { $isValid = Arr::get($checkoutData, 'tax_data.valid', false); ?>
    —
    __('Security check failed', 'fluent-cart')], 403); } if (Arr::get($this->taxSettings, 'eu_vat_settings.require_vat_number', 'yes') !== 'yes') { wp_send_json(['message' => __('EU VAT reverse charge is not enabled!', 'fluent-cart')], 422); } $cart = CartHelper::getCart(); $taxCalculationBasis = Arr::get($this->taxSettings, 'tax_calculation_basis'); $formData = Arr::get($cart->checkout_data, 'form_data', []); $shipToDifferent = Arr::get($formData, 'ship_to_different', ''); if ($taxCalculationBasis === 'billing' || ($taxCalculationBasis === 'shipping' && $shipToDifferent !== 'yes')) { $countryCode = Arr::get($formData, 'billing_country', ''); } elseif ($taxCalculationBasis === 'shipping') { $countryCode = Arr::get($formData, 'shipping_country', ''); } $vatNumber = isset($_REQUEST['vat_number']) ? sanitize_text_field(wp_unslash($_REQUEST['vat_number'])) : ''; $storeCountry = (new StoreSettings())->get('store_country'); if ($taxCalculationBasis === 'store') { $countryCode = $storeCountry; } if (!$countryCode || !$vatNumber) { wp_send_json(['message' => __('Missing required data', 'fluent-cart')], 422); } // check if the $vatNumber contains any EU country code prefix remove it and get only vat number $euCountry = LocalizationManager::getInstance()->taxContinents('EU'); $euCountryCodes = Arr::get($euCountry, 'countries', []); foreach ($euCountryCodes as $i => $code) { if (strpos($vatNumber, $code) === 0) { // Check if $code is at the beginning of $vatNumber $vatNumber = substr($vatNumber, strlen($code)); // Remove the prefix break; } } $taxData = $this->validateEuVatNumber($countryCode, $vatNumber); if (is_wp_error($taxData)) { wp_send_json(['message' => $taxData->get_error_message()], 422); } if (!Arr::get($taxData, 'valid')) { wp_send_json(['message' => __('VAT number is not valid!', 'fluent-cart')], 422); } // if there is any excluded category in the cart, then don't apply VAT reverse charge $excludedCategories = Arr::get($this->taxSettings, 'eu_vat_settings.vat_reverse_excluded_categories', []); $productIds = array_column($cart->cart_data, 'post_id'); $productTerms = $this->getTermsByProductIds($productIds); $isExcluded = false; foreach ($productTerms as $productId => $terms) { if (array_intersect($terms, $excludedCategories)) { $isExcluded = true; break; } } //make existing tax zero if local reverse charge is enabled if (!$isExcluded) { if (Arr::get($this->taxSettings, 'eu_vat_settings.local_reverse_charge', 'yes') === 'yes' || $countryCode !== $storeCountry) { $taxData['tax_total'] = 0; $taxData['shipping_tax'] = 0; $taxData['tax_behavior'] = 0; } } $checkoutData = $cart->checkout_data; if (!isset($checkoutData['tax_data']) || !is_array($checkoutData['tax_data'])) { $checkoutData['tax_data'] = []; } $checkoutData['tax_data'] = array_merge($checkoutData['tax_data'], $taxData); $cart->checkout_data = $checkoutData; $cart->update(); ob_start(); (new CartSummaryRender($cart))->render(false); $cartSummaryInner = ob_get_clean(); ob_start(); (new EUVatRenderer(true, Arr::get($taxData, 'tax_country')))->render($cart); $euVatView = ob_get_clean(); wp_send_json([ 'success' => true, 'message' => __('VAT has been applied successfully', 'fluent-cart'), 'tax_data' => $taxData, 'fragments' => [ [ 'selector' => '[data-fluent-cart-checkout-page-cart-items-wrapper]', 'content' => $cartSummaryInner, 'type' => 'replace' ], [ 'selector' => '[data-fluent-cart-checkout-page-tax-wrapper]', 'content' => $euVatView, 'type' => 'replace' ] ], ], 200); } public function removeVat() { nocache_headers(); if (!isset($_REQUEST['_wpnonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['_wpnonce'])), 'fluentcart')) { wp_send_json(['message' => __('Security check failed', 'fluent-cart')], 403); } if (isset($_REQUEST['fct_cart_hash'])) { $cart = CartResource::get(['hash' => sanitize_text_field(wp_unslash($_REQUEST['fct_cart_hash']))]); } else { $cart = CartResource::get(); } // recalculate tax amount do_action('fluent_cart/checkout/cart_amount_updated', [ 'cart' => $cart ]); $checkoutData = $cart->checkout_data; // Reset VAT-related fields if (isset($checkoutData)) { unset($checkoutData['tax_data']['valid']); unset($checkoutData['tax_data']['name']); unset($checkoutData['tax_data']['address']); unset($checkoutData['tax_data']['vat_number']); unset($checkoutData['tax_data']['country']); } $cart->checkout_data = $checkoutData; $cart->save(); ob_start(); (new CartSummaryRender($cart))->render(false); $cartSummaryInner = ob_get_clean(); wp_send_json([ 'success' => true, 'message' => __('VAT has been removed successfully', 'fluent-cart'), 'checkout_data' => [], 'fragments' => [ [ 'selector' => '[data-fluent-cart-checkout-page-cart-items-wrapper]', 'content' => $cartSummaryInner, 'type' => 'replace' ] ] ]); } protected function getTermsByProductIds($products) { $formattedTerms = null; if ($formattedTerms === null) { $terms = App::make('db')->table('term_relationships') ->whereIn('object_id', $products) ->get(); $formattedTerms = []; foreach ($terms as $term) { if (!isset($formattedTerms[$term->object_id])) { $formattedTerms[$term->object_id] = []; } $formattedTerms[$term->object_id][] = $term->term_taxonomy_id; } } return $formattedTerms; } protected function validateEuVatNumber($countryCode, $vatNumber) { try { $wsdl = "https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"; if (!class_exists('\\SoapClient')) { throw new \Exception(__('SOAP is not available on the server.', 'fluent-cart')); } $client = new \SoapClient($wsdl, [ 'exceptions' => true, 'trace' => true, ]); $params = [ 'countryCode' => $countryCode, 'vatNumber' => preg_replace('/[^A-Za-z0-9]/', '', $vatNumber) ]; $result = $client->checkVat($params); if (empty($result->valid)) { throw new \Exception( sprintf( /* translators: %s is the country code */ __('Invalid VAT number for country %s!', 'fluent-cart'), $countryCode ) ); } $taxData = [ 'country' => $result->countryCode, 'vat_number' => $result->vatNumber, 'valid' => (bool)$result->valid, 'name' => $result->name, 'address' => $result->address, ]; return $taxData; } catch (\SoapFault $e) { return new \WP_Error('soap_fault', $e->getMessage()); } catch (\Exception $e) { return new \WP_Error('invalid', $e->getMessage()); } } public static function isTaxEnabled() { $taxSettings = get_option('fluent_cart_tax_configuration_settings', []); return Arr::get($taxSettings, 'enable_tax', 'no') === 'yes'; } public static function euVatCountyOptions() { $eu_vat_countries = [ ['label' => 'Austria', 'value' => 'AT'], ['label' => 'Belgium', 'value' => 'BE'], ['label' => 'Bulgaria', 'value' => 'BG'], ['label' => 'Croatia', 'value' => 'HR'], ['label' => 'Cyprus', 'value' => 'CY'], ['label' => 'Czech Republic', 'value' => 'CZ'], ['label' => 'Denmark', 'value' => 'DK'], ['label' => 'Estonia', 'value' => 'EE'], ['label' => 'Finland', 'value' => 'FI'], ['label' => 'France', 'value' => 'FR'], ['label' => 'Germany', 'value' => 'DE'], ['label' => 'Greece', 'value' => 'GR'], ['label' => 'Hungary', 'value' => 'HU'], ['label' => 'Ireland', 'value' => 'IE'], ['label' => 'Italy', 'value' => 'IT'], ['label' => 'Latvia', 'value' => 'LV'], ['label' => 'Lithuania', 'value' => 'LT'], ['label' => 'Luxembourg', 'value' => 'LU'], ['label' => 'Malta', 'value' => 'MT'], ['label' => 'Netherlands', 'value' => 'NL'], ['label' => 'Poland', 'value' => 'PL'], ['label' => 'Portugal', 'value' => 'PT'], ['label' => 'Romania', 'value' => 'RO'], ['label' => 'Slovakia', 'value' => 'SK'], ['label' => 'Slovenia', 'value' => 'SI'], ['label' => 'Spain', 'value' => 'ES'], ['label' => 'Sweden', 'value' => 'SE'], ]; return $eu_vat_countries; } public static function taxTitleLists(): array { return apply_filters('fluent_cart/tax/country_tax_titles', [ 'AU' => __('ABN', 'fluent-cart'), // Australia 'NZ' => __('GST', 'fluent-cart'), // New Zealand 'IN' => __('GST', 'fluent-cart'), // India 'SG' => __('GST', 'fluent-cart'), // Singapore 'MY' => __('SST', 'fluent-cart'), // Malaysia 'CA' => __('GST / HST / PST / QST', 'fluent-cart'), // Canada 'GB' => __('VAT', 'fluent-cart'), // United Kingdom 'EU' => __('VAT', 'fluent-cart'), // European Union 'FR' => __('VAT', 'fluent-cart'), // France 'DE' => __('VAT', 'fluent-cart'), // Germany 'NL' => __('VAT', 'fluent-cart'), // Netherlands 'ES' => __('VAT', 'fluent-cart'), // Spain 'IT' => __('VAT', 'fluent-cart'), // Italy 'IE' => __('VAT', 'fluent-cart'), // Ireland 'US' => __('EIN / Sales Tax', 'fluent-cart'), // United States 'ZA' => __('VAT', 'fluent-cart'), // South Africa 'NG' => __('TIN / VAT', 'fluent-cart'), // Nigeria 'AE' => __('TRN / VAT', 'fluent-cart'), // United Arab Emirates 'SA' => __('VAT', 'fluent-cart'), // Saudi Arabia 'QA' => __('VAT', 'fluent-cart'), // Qatar 'JP' => __('Consumption Tax (CTN)', 'fluent-cart'), // Japan 'CN' => __('VAT', 'fluent-cart'), // China 'HK' => __('BRN', 'fluent-cart'), // Hong Kong 'PH' => __('TIN / VAT', 'fluent-cart'), // Philippines 'ID' => __('NPWP / PPN', 'fluent-cart'), // Indonesia 'TH' => __('VAT', 'fluent-cart'), // Thailand 'VN' => __('MST / VAT', 'fluent-cart'), // Vietnam 'BD' => __('BIN / VAT', 'fluent-cart'), // Bangladesh 'PK' => __('NTN / STRN', 'fluent-cart'), // Pakistan 'LK' => __('VAT', 'fluent-cart'), // Sri Lanka 'NP' => __('PAN / VAT', 'fluent-cart'), // Nepal 'BR' => __('CNPJ / CPF', 'fluent-cart'), // Brazil 'AR' => __('CUIT', 'fluent-cart'), // Argentina 'MX' => __('RFC / IVA', 'fluent-cart'), // Mexico 'CL' => __('RUT / IVA', 'fluent-cart'), // Chile 'PE' => __('RUC / IGV', 'fluent-cart'), // Peru 'RU' => __('INN / VAT', 'fluent-cart'), // Russia 'TR' => __('VKN / VAT', 'fluent-cart'), // Turkey 'CH' => __('MWST / TVA / IVA', 'fluent-cart'), // Switzerland 'NO' => __('VAT', 'fluent-cart'), // Norway 'IS' => __('VSK', 'fluent-cart'), // Iceland 'IL' => __('VAT', 'fluent-cart'), // Israel 'SE' => __('VAT', 'fluent-cart'), // Sweden ]); } public static function getCountryTaxTitle($countryCode = '') { $countryTaxTitles = self::taxTitleLists(); if (isset($countryTaxTitles[$countryCode])) { return $countryTaxTitles[$countryCode]; } return __('VAT', 'fluent-cart'); } }