Initial Commit
This commit is contained in:
275
inc/tax/class-dashboard-taxes-tab.php
Normal file
275
inc/tax/class-dashboard-taxes-tab.php
Normal file
@ -0,0 +1,275 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Ultimo Dashboard Tax Admin Panel
|
||||
*
|
||||
* @package WP_Ultimo
|
||||
* @subpackage Admin_Pages
|
||||
* @since 2.0.0
|
||||
*/
|
||||
|
||||
namespace WP_Ultimo\Tax;
|
||||
|
||||
// Exit if accessed directly
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* WP Ultimo Dashboard Tax Admin Panel
|
||||
*/
|
||||
class Dashboard_Taxes_Tab {
|
||||
|
||||
/**
|
||||
* Reference to the main admin page object so we can
|
||||
* access its methods on the render functions.
|
||||
*
|
||||
* @since 2.0.11
|
||||
* @var \WP_Ultimo\Admin_Pages\Base_Admin_Page
|
||||
*/
|
||||
protected $dashboard_page;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
public function __construct() {
|
||||
|
||||
add_filter('wu_dashboard_filter_bar', array($this, 'add_tab'));
|
||||
|
||||
add_action('wu_dashboard_taxes_widgets', array($this, 'register_widgets'), 10, 3);
|
||||
|
||||
} // end __construct;
|
||||
|
||||
/**
|
||||
* Checks if tax support is enabled or not.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return boolean
|
||||
*/
|
||||
protected function is_enabled() {
|
||||
|
||||
return wu_get_setting('enable_taxes');
|
||||
|
||||
} // end is_enabled;
|
||||
|
||||
/**
|
||||
* Add_tab to dashboard
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param array $dashboard_filters Dashboard tabs.
|
||||
*/
|
||||
public function add_tab($dashboard_filters) {
|
||||
|
||||
$dashboard_filters['taxes'] = array(
|
||||
'field' => 'type',
|
||||
'label' => __('Taxes', 'wp-ultimo'),
|
||||
'url' => add_query_arg('tab', 'taxes'),
|
||||
'count' => 0,
|
||||
);
|
||||
|
||||
return $dashboard_filters;
|
||||
|
||||
} // end add_tab;
|
||||
|
||||
/**
|
||||
* Renders the disabled message, if taxes are not enabled.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function disabled_message() {
|
||||
|
||||
echo wu_render_empty_state(array(
|
||||
'message' => __('You do not have tax support enabled yet...'),
|
||||
'sub_message' => __('If you need to collect taxes, you\'ll be glad to hear that WP Ultimo offers tax support!'),
|
||||
'link_label' => __('Enable Tax Support', 'wp-ultimo'),
|
||||
'link_url' => wu_network_admin_url('wp-ultimo-settings', array(
|
||||
'tab' => 'taxes',
|
||||
)),
|
||||
));
|
||||
|
||||
} // end disabled_message;
|
||||
|
||||
/**
|
||||
* Adds a back link to the taxes without tax.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param array $links The already existent links.
|
||||
* @return array
|
||||
*/
|
||||
public function add_back_link($links) {
|
||||
|
||||
$back_link = array(
|
||||
array(
|
||||
'url' => wu_network_admin_url('wp-ultimo'),
|
||||
'label' => __('Go Back', 'wp-ultimo'),
|
||||
'icon' => 'wu-reply',
|
||||
),
|
||||
);
|
||||
|
||||
return array_merge($back_link, $links);
|
||||
|
||||
} // end add_back_link;
|
||||
|
||||
/**
|
||||
* Register_widgets
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $tab Name of selected tab.
|
||||
* @param \WP_Screen $screen The current screen object.
|
||||
* @param \WP_Ultimo\Admin_Pages\Dashboard_Admin_Page $dashboard_page Name of selected tab.
|
||||
* @return void
|
||||
*/
|
||||
public function register_widgets($tab, $screen, $dashboard_page) {
|
||||
|
||||
/**
|
||||
* Set the dashboard page as a property
|
||||
* to make the helper methods available on the render
|
||||
* functions for the metaboxes.
|
||||
*/
|
||||
$this->dashboard_page = $dashboard_page;
|
||||
|
||||
/*
|
||||
* Displays an empty page with the option to activate tax support.
|
||||
*/
|
||||
if (!$this->is_enabled()) {
|
||||
|
||||
add_filter('wu_dashboard_display_filter', '__return_false');
|
||||
|
||||
add_filter('wu_dashboard_display_widgets', '__return_false');
|
||||
|
||||
add_action('wu_dash_before_metaboxes', array($this, 'disabled_message'));
|
||||
|
||||
add_filter('wu_page_get_title_links', array($this, 'add_back_link'));
|
||||
|
||||
return;
|
||||
|
||||
} // end if;
|
||||
|
||||
$this->dashboard_page = $dashboard_page;
|
||||
|
||||
add_meta_box('wp-ultimo-taxes', __('Taxes', 'wp-ultimo'), array($this, 'output_widget_taxes'), $screen->id, 'full', 'high');
|
||||
|
||||
add_meta_box('wp-ultimo-taxes-by-rate', __('Taxes by Code', 'wp-ultimo'), array($this, 'output_widget_taxes_by_rate'), $screen->id, 'normal', 'high');
|
||||
|
||||
add_meta_box('wp-ultimo-taxes-by-day', __('Taxes by Day', 'wp-ultimo'), array($this, 'output_widget_taxes_by_day'), $screen->id, 'side', 'high');
|
||||
|
||||
$this->register_scripts();
|
||||
|
||||
} // end register_widgets;
|
||||
|
||||
/**
|
||||
* Registers the necessary scripts to handle the tax graph.
|
||||
*
|
||||
* @todo: extract the calculations onto their own function.
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function register_scripts() {
|
||||
|
||||
$payments_per_month = array(
|
||||
'january' => array(),
|
||||
'february' => array(),
|
||||
'march' => array(),
|
||||
'april' => array(),
|
||||
'may' => array(),
|
||||
'june' => array(),
|
||||
'july' => array(),
|
||||
'august' => array(),
|
||||
'september' => array(),
|
||||
'october' => array(),
|
||||
'november' => array(),
|
||||
'december' => array()
|
||||
);
|
||||
|
||||
$data = wu_calculate_taxes_by_month();
|
||||
|
||||
$index = 1;
|
||||
|
||||
foreach ($payments_per_month as &$month) {
|
||||
|
||||
$month = $data[$index];
|
||||
|
||||
$index++;
|
||||
|
||||
} // end foreach;
|
||||
|
||||
$month_list = array();
|
||||
|
||||
$start = date_i18n('Y-m-d 00:00:00', strtotime('first day of january this year'));
|
||||
|
||||
for ($i = 0; $i < 12; $i++) {
|
||||
|
||||
$start_date = wu_date($start);
|
||||
|
||||
$month_list[] = date_i18n('M y', $start_date->addMonths($i)->format('U'));
|
||||
|
||||
} // end for;
|
||||
|
||||
wp_register_script('wu-tax-stats', wu_get_asset('tax-statistics.js', 'js'), array('jquery', 'wu-functions', 'wu-ajax-list-table', 'moment', 'wu-block-ui', 'dashboard', 'wu-apex-charts', 'wu-vue-apex-charts'), wu_get_version(), true);
|
||||
|
||||
wp_localize_script('wu-tax-stats', 'wu_tax_statistics_vars', array(
|
||||
'data' => $payments_per_month,
|
||||
'start_date' => date_i18n('Y-m-d', strtotime((string) wu_request('start_date', '-1 month'))),
|
||||
'end_date' => date_i18n('Y-m-d', strtotime((string) wu_request('end_date', 'tomorrow'))),
|
||||
'today' => date_i18n('Y-m-d', strtotime('tomorrow')),
|
||||
'month_list' => $month_list,
|
||||
'i18n' => array(
|
||||
'net_profit_label' => __('Net Profit', 'wp-ultimo'),
|
||||
'taxes_label' => __('Taxes Collected', 'wp-ultimo'),
|
||||
)
|
||||
));
|
||||
|
||||
wp_enqueue_script('wu-tax-stats');
|
||||
|
||||
} // end register_scripts;
|
||||
|
||||
/**
|
||||
* Renders the tax graph.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function output_widget_taxes() {
|
||||
|
||||
wu_get_template('dashboard-statistics/widget-tax-graph');
|
||||
|
||||
} // end output_widget_taxes;
|
||||
|
||||
/**
|
||||
* Renders the taxes by rate widget.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function output_widget_taxes_by_rate() {
|
||||
|
||||
$taxes_by_rate = wu_calculate_taxes_by_rate($this->dashboard_page->start_date, $this->dashboard_page->end_date);
|
||||
|
||||
wu_get_template('dashboard-statistics/widget-tax-by-code', array(
|
||||
'taxes_by_rate' => $taxes_by_rate,
|
||||
'page' => $this->dashboard_page,
|
||||
));
|
||||
|
||||
} // end output_widget_taxes_by_rate;
|
||||
|
||||
/**
|
||||
* Renders the taxes by date widget.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function output_widget_taxes_by_day() {
|
||||
|
||||
$taxes_by_day = wu_calculate_taxes_by_day($this->dashboard_page->start_date, $this->dashboard_page->end_date);
|
||||
|
||||
wu_get_template('dashboard-statistics/widget-tax-by-day', array(
|
||||
'taxes_by_day' => $taxes_by_day,
|
||||
'page' => $this->dashboard_page,
|
||||
));
|
||||
|
||||
} // end output_widget_taxes_by_day;
|
||||
|
||||
} // end class Dashboard_Taxes_Tab;
|
415
inc/tax/class-tax.php
Normal file
415
inc/tax/class-tax.php
Normal file
@ -0,0 +1,415 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Ultimo Tax Class.
|
||||
*
|
||||
* @package WP_Ultimo
|
||||
* @subpackage Tax
|
||||
* @since 2.0.0
|
||||
*/
|
||||
|
||||
namespace WP_Ultimo\Tax;
|
||||
|
||||
// Exit if accessed directly
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* WP Ultimo Tax Class.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
class Tax {
|
||||
|
||||
use \WP_Ultimo\Traits\Singleton;
|
||||
|
||||
/**
|
||||
* Adds hooks to be added at the original instantiations.
|
||||
*
|
||||
* @since 1.9.0
|
||||
*/
|
||||
public function init() {
|
||||
|
||||
add_action('init', array($this, 'add_settings'));
|
||||
|
||||
add_action('wu_page_wp-ultimo-settings_load', array($this, 'add_sidebar_widget'));
|
||||
|
||||
if ($this->is_enabled()) {
|
||||
|
||||
add_action('wp_ultimo_admin_pages', array($this, 'add_admin_page'));
|
||||
|
||||
add_action('wp_ajax_wu_get_tax_rates', array($this, 'serve_taxes_rates_via_ajax'));
|
||||
|
||||
add_action('wp_ajax_wu_save_tax_rates', array($this, 'save_taxes_rates'));
|
||||
|
||||
add_action('wu_before_search_models', function() {
|
||||
|
||||
$model = wu_request('model', 'state');
|
||||
|
||||
$country = wu_request('country', 'not-present');
|
||||
|
||||
if ($country === 'not-present') {
|
||||
|
||||
return;
|
||||
|
||||
} // end if;
|
||||
|
||||
if ($model === 'state') {
|
||||
|
||||
$results = wu_get_country_states($country, 'slug', 'name');
|
||||
|
||||
} elseif ($model === 'city') {
|
||||
|
||||
$states = explode(',', (string) wu_request('state', ''));
|
||||
|
||||
$results = wu_get_country_cities($country, $states, 'slug', 'name');
|
||||
|
||||
} // end if;
|
||||
|
||||
$query = wu_request('query', array(
|
||||
'search' => 'searching....',
|
||||
));
|
||||
|
||||
$s = trim((string) wu_get_isset($query, 'search', 'searching...'), '*');
|
||||
|
||||
$filtered = array();
|
||||
|
||||
if (!empty($s)) {
|
||||
|
||||
$filtered = \WP_Ultimo\Dependencies\Arrch\Arrch::find($results, array(
|
||||
'sort_key' => 'name',
|
||||
'where' => array(
|
||||
array(array('slug', 'name'), '~', $s),
|
||||
),
|
||||
));
|
||||
|
||||
} // end if;
|
||||
|
||||
wp_send_json(array_values($filtered));
|
||||
|
||||
exit;
|
||||
|
||||
});
|
||||
|
||||
} // end if;
|
||||
|
||||
} // end init;
|
||||
|
||||
/**
|
||||
* Register tax settings.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function add_settings() {
|
||||
|
||||
wu_register_settings_section('taxes', array(
|
||||
'title' => __('Taxes', 'wp-ultimo'),
|
||||
'desc' => __('Taxes', 'wp-ultimo'),
|
||||
'icon' => 'dashicons-wu-percent',
|
||||
'order' => 55,
|
||||
));
|
||||
|
||||
wu_register_settings_field('taxes', 'enable_taxes', array(
|
||||
'title' => __('Enable Taxes', 'wp-ultimo'),
|
||||
'desc' => __('Enable this option to be able to collect sales taxes on your network payments.', 'wp-ultimo'),
|
||||
'type' => 'toggle',
|
||||
'default' => 0,
|
||||
));
|
||||
|
||||
wu_register_settings_field('taxes', 'inclusive_tax', array(
|
||||
'title' => __('Inclusive Tax', 'wp-ultimo'),
|
||||
'desc' => __('Enable this option if your prices include taxes. In that case, WP Ultimo will calculate the included tax instead of adding taxes to the price.', 'wp-ultimo'),
|
||||
'type' => 'toggle',
|
||||
'default' => 0,
|
||||
'require' => array(
|
||||
'enable_taxes' => 1,
|
||||
),
|
||||
));
|
||||
|
||||
} // end add_settings;
|
||||
|
||||
/**
|
||||
* Adds the sidebar widget.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function add_sidebar_widget() {
|
||||
|
||||
wu_register_settings_side_panel('taxes', array(
|
||||
'title' => __('Tax Rates', 'wp-ultimo'),
|
||||
'render' => array($this, 'render_taxes_side_panel'),
|
||||
));
|
||||
|
||||
} // end add_sidebar_widget;
|
||||
|
||||
/**
|
||||
* Checks if this functionality is available and should be loaded.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return boolean
|
||||
*/
|
||||
public function is_enabled() {
|
||||
|
||||
$is_enabled = wu_get_setting('enable_taxes', false);
|
||||
|
||||
return apply_filters('wu_enable_taxes', $is_enabled);
|
||||
|
||||
} // end is_enabled;
|
||||
|
||||
/**
|
||||
* Adds the Tax Rate edit admin screen.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function add_admin_page() {
|
||||
|
||||
new \WP_Ultimo\Admin_Pages\Tax_Rates_Admin_Page;
|
||||
|
||||
} // end add_admin_page;
|
||||
|
||||
/**
|
||||
* Returns the Tax Rate Types available in the platform; Filterable
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return array
|
||||
*/
|
||||
public function get_tax_rate_types() {
|
||||
|
||||
return apply_filters('wu_get_tax_rate_types', array(
|
||||
'regular' => __('Regular', 'wp-ultimo')
|
||||
));
|
||||
|
||||
} // end get_tax_rate_types;
|
||||
|
||||
/**
|
||||
* Returns the default elements of a tax rate.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return array
|
||||
*/
|
||||
public function get_tax_rate_defaults() {
|
||||
|
||||
$defaults = array(
|
||||
'id' => uniqid(),
|
||||
'title' => __('Tax Rate', 'wp-ultimo'),
|
||||
'country' => '',
|
||||
'state' => '',
|
||||
'city' => '',
|
||||
'tax_type' => 'percentage',
|
||||
'tax_amount' => 0,
|
||||
'priority' => 10,
|
||||
'compound' => false,
|
||||
'type' => 'regular',
|
||||
);
|
||||
|
||||
return apply_filters('wu_get_tax_rate_defaults', $defaults);
|
||||
|
||||
} // end get_tax_rate_defaults;
|
||||
|
||||
/**
|
||||
* Returns the registered tax rates.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param bool $fetch_state_options If true, sends the state options along-side the results.
|
||||
* @return array
|
||||
*/
|
||||
public function get_tax_rates($fetch_state_options = false) {
|
||||
|
||||
$tax_rates_categories = wu_get_option('tax_rates', array(
|
||||
'default' => array(
|
||||
'name' => __('Default', 'wp-ultimo'),
|
||||
'rates' => array(),
|
||||
),
|
||||
));
|
||||
|
||||
if (!isset($tax_rates_categories['default'])) {
|
||||
/**
|
||||
* We need to make sure the default category is always present.
|
||||
*/
|
||||
$default = array_shift($tax_rates_categories);
|
||||
|
||||
$tax_rates_categories = array_merge(array('default' => $default), $tax_rates_categories);
|
||||
|
||||
} // end if;
|
||||
|
||||
foreach ($tax_rates_categories as &$tax_rate_category) {
|
||||
|
||||
$tax_rate_category['rates'] = array_map(function($rate) use ($fetch_state_options) {
|
||||
|
||||
if ($fetch_state_options) {
|
||||
|
||||
$rate['state_options'] = wu_get_country_states($rate['country'], 'slug', 'name');
|
||||
|
||||
} // end if;
|
||||
|
||||
$rate['tax_rate'] = is_numeric($rate['tax_rate']) ? $rate['tax_rate'] : 0;
|
||||
|
||||
return wp_parse_args($rate, $this->get_tax_rate_defaults());
|
||||
|
||||
}, $tax_rate_category['rates']);
|
||||
|
||||
} // end foreach;
|
||||
|
||||
return apply_filters('wu_get_tax_rates', $tax_rates_categories, $fetch_state_options);
|
||||
|
||||
} // end get_tax_rates;
|
||||
|
||||
/**
|
||||
* Retrieves the tax rates to serve via ajax.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function serve_taxes_rates_via_ajax() {
|
||||
|
||||
$tax_rates = array();
|
||||
|
||||
if (current_user_can('read_tax_rates')) {
|
||||
|
||||
$tax_rates = $this->get_tax_rates(true);
|
||||
|
||||
} // end if;
|
||||
|
||||
wp_send_json_success((object) $tax_rates);
|
||||
|
||||
} // end serve_taxes_rates_via_ajax;
|
||||
|
||||
/**
|
||||
* Handles the saving of new tax rates.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function save_taxes_rates() {
|
||||
|
||||
if (!check_ajax_referer('wu_tax_editing')) {
|
||||
|
||||
wp_send_json(array(
|
||||
'code' => 'not-enough-permissions',
|
||||
'message' => __('You don\'t have permission to alter tax rates', 'wp-ultimo')
|
||||
));
|
||||
|
||||
} // end if;
|
||||
|
||||
$data = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
$tax_rates = isset($data['tax_rates']) ? $data['tax_rates'] : false;
|
||||
|
||||
if (!$tax_rates) {
|
||||
|
||||
wp_send_json(array(
|
||||
'code' => 'tax-rates-not-found',
|
||||
'message' => __('No tax rates present in the request', 'wp-ultimo')
|
||||
));
|
||||
|
||||
} // end if;
|
||||
|
||||
$treated_tax_rates = array();
|
||||
|
||||
foreach ($tax_rates as $tax_rate_slug => $tax_rate) {
|
||||
|
||||
if (!isset($tax_rate['rates'])) {
|
||||
|
||||
continue;
|
||||
|
||||
} // end if;
|
||||
|
||||
$tax_rate['rates'] = array_map(function($item) {
|
||||
|
||||
unset($item['selected']);
|
||||
|
||||
unset($item['state_options']);
|
||||
|
||||
return $item;
|
||||
|
||||
}, $tax_rate['rates']);
|
||||
|
||||
$treated_tax_rates[strtolower(sanitize_title($tax_rate_slug))] = $tax_rate;
|
||||
|
||||
} // end foreach;
|
||||
|
||||
wu_save_option('tax_rates', $treated_tax_rates);
|
||||
|
||||
wp_send_json(array(
|
||||
'code' => 'success',
|
||||
'message' => __('Tax Rates successfully updated!', 'wp-ultimo'),
|
||||
'tax_category' => strtolower(sanitize_title(wu_get_isset($data, 'tax_category', 'default'))),
|
||||
));
|
||||
|
||||
} // end save_taxes_rates;
|
||||
|
||||
/**
|
||||
* Render the tax side panel.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return void
|
||||
*/
|
||||
public function render_taxes_side_panel() { // phpcs:disable ?>
|
||||
|
||||
<div id="wu-taxes-side-panel" class="wu-widget-inset">
|
||||
|
||||
<div class="wu-p-4">
|
||||
|
||||
<span class="wu-text-gray-700 wu-font-bold wu-uppercase wu-tracking-wide wu-text-xs">
|
||||
<?php _e('Manage Tax Rates', 'wp-ultimo'); ?>
|
||||
</span>
|
||||
|
||||
<div class="wu-py-2">
|
||||
<img class="wu-w-full" alt="<?php esc_attr_e('Manage Tax Rates', 'wp-ultimo'); ?>" src="<?php echo wu_get_asset('sidebar/invoices.png'); ?>">
|
||||
</div>
|
||||
|
||||
<p class="wu-text-gray-600 wu-p-0 wu-m-0">
|
||||
<?php _e('Add different tax rates depending on the country of your customers.', 'wp-ultimo'); ?>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div v-cloak v-show="enabled == 0" class="wu-mx-4 wu-p-2 wu-bg-blue-100 wu-text-blue-600 wu-rounded wu-mb-4">
|
||||
<?php _e('You need to activate tax support first.', 'wp-ultimo'); ?>
|
||||
</div>
|
||||
|
||||
<?php if (current_user_can('wu_edit_payments')) : ?>
|
||||
|
||||
<div class="wu-p-4 wu-bg-gray-100 wu-border-solid wu-border-0 wu-border-t wu-border-gray-300">
|
||||
|
||||
<span v-if="false" class="button wu-w-full wu-text-center">
|
||||
<?php _e('Manage Tax Rates →', 'wp-ultimo'); ?>
|
||||
</span>
|
||||
|
||||
<div v-cloak>
|
||||
|
||||
<a v-if="enabled" class="button wu-w-full wu-text-center" target="_blank" href="<?php echo wu_network_admin_url('wp-ultimo-tax-rates'); ?>">
|
||||
<?php _e('Manage Tax Rates →', 'wp-ultimo'); ?>
|
||||
</a>
|
||||
|
||||
<button v-else disabled="disabled" class="button wu-w-full wu-text-center">
|
||||
<?php _e('Manage Tax Rates →', 'wp-ultimo'); ?>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
new Vue({
|
||||
el: "#wu-taxes-side-panel",
|
||||
data: {},
|
||||
computed: {
|
||||
enabled: function() {
|
||||
return <?php echo json_encode(wu_get_setting('enable_taxes')); ?>
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php // phpcs:enable
|
||||
|
||||
} // end render_taxes_side_panel;
|
||||
|
||||
} // end class Tax;
|
Reference in New Issue
Block a user