[API] Created commands to create tax rates and tax classes
This commit is contained in:
parent
647a2e7498
commit
18cf62ed66
|
@ -553,7 +553,7 @@ class WC_API_Taxes extends WC_API_Resource {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a tax class
|
* Create a tax class.
|
||||||
*
|
*
|
||||||
* @since 2.5.0
|
* @since 2.5.0
|
||||||
*
|
*
|
||||||
|
@ -583,7 +583,7 @@ class WC_API_Taxes extends WC_API_Resource {
|
||||||
$classes = WC_Tax::get_tax_classes();
|
$classes = WC_Tax::get_tax_classes();
|
||||||
$exists = false;
|
$exists = false;
|
||||||
|
|
||||||
// Check if class exists
|
// Check if class exists.
|
||||||
foreach ( $classes as $key => $class ) {
|
foreach ( $classes as $key => $class ) {
|
||||||
if ( sanitize_title( $class ) === $slug ) {
|
if ( sanitize_title( $class ) === $slug ) {
|
||||||
$exists = true;
|
$exists = true;
|
||||||
|
@ -591,12 +591,12 @@ class WC_API_Taxes extends WC_API_Resource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return error if tax class already exists
|
// Return error if tax class already exists.
|
||||||
if ( $exists ) {
|
if ( $exists ) {
|
||||||
throw new WC_API_Exception( 'woocommerce_api_cannot_create_tax_class', __( 'Tax class already exists', 'woocommerce' ), 401 );
|
throw new WC_API_Exception( 'woocommerce_api_cannot_create_tax_class', __( 'Tax class already exists', 'woocommerce' ), 401 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the new class
|
// Add the new class.
|
||||||
$classes[] = $name;
|
$classes[] = $name;
|
||||||
|
|
||||||
update_option( 'woocommerce_tax_classes', implode( "\n", $classes ) );
|
update_option( 'woocommerce_tax_classes', implode( "\n", $classes ) );
|
||||||
|
|
|
@ -10,6 +10,159 @@
|
||||||
*/
|
*/
|
||||||
class WC_CLI_Tax extends WC_CLI_Command {
|
class WC_CLI_Tax extends WC_CLI_Command {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a tax rate.
|
||||||
|
*
|
||||||
|
* ## OPTIONS
|
||||||
|
*
|
||||||
|
* [--<field>=<value>]
|
||||||
|
* : Associative args for the new tax rate.
|
||||||
|
*
|
||||||
|
* [--porcelain]
|
||||||
|
* : Outputs just the new tax rate id.
|
||||||
|
*
|
||||||
|
* ## AVAILABLE FIELDS
|
||||||
|
*
|
||||||
|
* These fields are available for create command:
|
||||||
|
*
|
||||||
|
* * country
|
||||||
|
* * state
|
||||||
|
* * postcode
|
||||||
|
* * city
|
||||||
|
* * rate
|
||||||
|
* * name
|
||||||
|
* * priority
|
||||||
|
* * compound
|
||||||
|
* * shipping
|
||||||
|
* * class
|
||||||
|
* * order
|
||||||
|
*
|
||||||
|
* ## EXAMPLES
|
||||||
|
*
|
||||||
|
* wp wc tax create --country=US --rate=5 --class=standard --type=percent
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function create( $__, $assoc_args ) {
|
||||||
|
$porcelain = isset( $assoc_args['porcelain'] );
|
||||||
|
unset( $assoc_args['porcelain'] );
|
||||||
|
|
||||||
|
$assoc_args = apply_filters( 'woocommerce_cli_create_tax_rate_data', $assoc_args );
|
||||||
|
|
||||||
|
$tax_data = array(
|
||||||
|
'tax_rate_country' => '',
|
||||||
|
'tax_rate_state' => '',
|
||||||
|
'tax_rate' => '',
|
||||||
|
'tax_rate_name' => '',
|
||||||
|
'tax_rate_priority' => 1,
|
||||||
|
'tax_rate_compound' => 0,
|
||||||
|
'tax_rate_shipping' => 1,
|
||||||
|
'tax_rate_order' => 0,
|
||||||
|
'tax_rate_class' => '',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ( $tax_data as $key => $value ) {
|
||||||
|
$new_key = str_replace( 'tax_rate_', '', $key );
|
||||||
|
$new_key = 'tax_rate' === $new_key ? 'rate' : $new_key;
|
||||||
|
|
||||||
|
if ( isset( $assoc_args[ $new_key ] ) ) {
|
||||||
|
if ( in_array( $new_key, array( 'compound', 'shipping' ) ) ) {
|
||||||
|
$tax_data[ $key ] = $assoc_args[ $new_key ] ? 1 : 0;
|
||||||
|
} else {
|
||||||
|
$tax_data[ $key ] = $assoc_args[ $new_key ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create tax rate.
|
||||||
|
$id = WC_Tax::_insert_tax_rate( $tax_data );
|
||||||
|
|
||||||
|
// Add locales.
|
||||||
|
if ( ! empty( $assoc_args['postcode'] ) ) {
|
||||||
|
WC_Tax::_update_tax_rate_postcodes( $id, wc_clean( $assoc_args['postcode'] ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! empty( $assoc_args['city'] ) ) {
|
||||||
|
WC_Tax::_update_tax_rate_cities( $id, wc_clean( $assoc_args['city'] ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
do_action( 'woocommerce_cli_create_tax_rate', $id, $tax_data );
|
||||||
|
|
||||||
|
if ( $porcelain ) {
|
||||||
|
WP_CLI::line( $id );
|
||||||
|
} else {
|
||||||
|
WP_CLI::success( "Created tax rate $id." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a tax class.
|
||||||
|
*
|
||||||
|
* ## OPTIONS
|
||||||
|
*
|
||||||
|
* [--<field>=<value>]
|
||||||
|
* : Associative args for the new tax class.
|
||||||
|
*
|
||||||
|
* [--porcelain]
|
||||||
|
* : Outputs just the new tax class slug.
|
||||||
|
*
|
||||||
|
* ## AVAILABLE FIELDS
|
||||||
|
*
|
||||||
|
* These fields are available for create command:
|
||||||
|
*
|
||||||
|
* * name
|
||||||
|
*
|
||||||
|
* ## EXAMPLES
|
||||||
|
*
|
||||||
|
* wp wc tax create_class --name="Reduced Rate"
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function create_class( $__, $assoc_args ) {
|
||||||
|
try {
|
||||||
|
$porcelain = isset( $assoc_args['porcelain'] );
|
||||||
|
unset( $assoc_args['porcelain'] );
|
||||||
|
|
||||||
|
$assoc_args = apply_filters( 'woocommerce_cli_create_tax_class_data', $assoc_args );
|
||||||
|
|
||||||
|
// Check if name is specified.
|
||||||
|
if ( ! isset( $assoc_args['name'] ) ) {
|
||||||
|
throw new WC_CLI_Exception( 'woocommerce_cli_missing_name', sprintf( __( 'Missing parameter %s', 'woocommerce' ), 'name' ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = sanitize_text_field( $assoc_args['name'] );
|
||||||
|
$slug = sanitize_title( $name );
|
||||||
|
$classes = WC_Tax::get_tax_classes();
|
||||||
|
$exists = false;
|
||||||
|
|
||||||
|
// Check if class exists.
|
||||||
|
foreach ( $classes as $key => $class ) {
|
||||||
|
if ( sanitize_title( $class ) === $slug ) {
|
||||||
|
$exists = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return error if tax class already exists.
|
||||||
|
if ( $exists ) {
|
||||||
|
throw new WC_CLI_Exception( 'woocommerce_cli_cannot_create_tax_class', __( 'Tax class already exists', 'woocommerce' ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the new class
|
||||||
|
$classes[] = $name;
|
||||||
|
|
||||||
|
update_option( 'woocommerce_tax_classes', implode( "\n", $classes ) );
|
||||||
|
|
||||||
|
do_action( 'woocommerce_cli_create_tax_class', $slug, array( 'name' => $name ) );
|
||||||
|
|
||||||
|
if ( $porcelain ) {
|
||||||
|
WP_CLI::line( $slug );
|
||||||
|
} else {
|
||||||
|
WP_CLI::success( "Created tax class $slug." );
|
||||||
|
}
|
||||||
|
} catch ( WC_CLI_Exception $e ) {
|
||||||
|
WP_CLI::error( $e->getMessage() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List taxes.
|
* List taxes.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue