diff --git a/src/class-actions.php b/src/class-actions.php index bed2d688..43c0e815 100644 --- a/src/class-actions.php +++ b/src/class-actions.php @@ -15,6 +15,7 @@ use WPGraphQL\Extensions\WooCommerce\Type\WPEnum\Catalog_Visibility; use WPGraphQL\Extensions\WooCommerce\Type\WPEnum\Discount_Type; use WPGraphQL\Extensions\WooCommerce\Type\WPEnum\Manage_Stock; use WPGraphQL\Extensions\WooCommerce\Type\WPEnum\Stock_Status; +use WPGraphQL\Extensions\WooCommerce\Type\WPEnum\Tax_Class; use WPGraphQL\Extensions\WooCommerce\Type\WPEnum\Tax_Status; use WPGraphQL\Extensions\WooCommerce\Type\WPEnum\WC_Connection_Orderby_Enum; use WPGraphQL\Extensions\WooCommerce\Type\WPInputObject\WC_Connection_Orderby_Input; @@ -67,6 +68,7 @@ class Actions { Discount_Type::register(); Manage_Stock::register(); Stock_Status::register(); + Tax_Class::register(); Tax_Status::register(); WC_Connection_Orderby_Enum::register(); diff --git a/src/model/class-order-item.php b/src/model/class-order-item.php index 26b555cf..77f4c877 100644 --- a/src/model/class-order-item.php +++ b/src/model/class-order-item.php @@ -116,12 +116,17 @@ class Order_Item extends Model { 'name' => function() { return ! empty( $this->data->get_name() ) ? $this->data->get_name() : null; }, - 'taxClass' => function() { - return ! empty( $this->data->get_tax_class() ) ? $this->data->get_tax_class() : null; - }, 'taxStatus' => function() { return ! empty( $this->data->get_tax_status() ) ? $this->data->get_tax_status() : null; }, + 'taxClass' => function() { + if ( $this->data->get_tax_status() === 'taxable' ) { + return ! empty( $this->data->get_tax_class() ) + ? $this->data->get_tax_class() + : 'standard'; + } + return null; + }, 'total' => function() { return ! empty( $this->data->get_total() ) ? $this->data->get_total() : null; }, @@ -159,7 +164,7 @@ class Order_Item extends Model { : null; }, 'taxClass' => function() { - return ! empty( $this->data->get_tax_class() ) ? $this->data->get_tax_class() : null; + return is_callable( $this->data, 'get_tax_class' ) ? $this->data->get_tax_class() : 'standard'; }, 'method_id' => function() { return ! empty( $this->data->get_method_id() ) ? $this->data->get_method_id() : null; @@ -206,9 +211,6 @@ class Order_Item extends Model { 'quantity' => function() { return ! empty( $this->data->get_quantity() ) ? $this->data->get_quantity() : null; }, - 'taxClass' => function() { - return ! empty( $this->data->get_tax_class() ) ? $this->data->get_tax_class() : null; - }, 'subtotal' => function() { return ! empty( $this->data->get_subtotal() ) ? $this->data->get_subtotal() : null; }, @@ -232,6 +234,14 @@ class Order_Item extends Model { 'taxStatus' => function() { return ! empty( $this->data->get_tax_status() ) ? $this->data->get_tax_status() : null; }, + 'taxClass' => function() { + if ( $this->data->get_tax_status() === 'taxable' ) { + return ! empty( $this->data->get_tax_class() ) + ? $this->data->get_tax_class() + : 'standard'; + } + return null; + }, ) ); break; diff --git a/src/type/enum/class-stock-status.php b/src/type/enum/class-stock-status.php index bfaea0b1..5b1c25c8 100644 --- a/src/type/enum/class-stock-status.php +++ b/src/type/enum/class-stock-status.php @@ -16,11 +16,11 @@ class Stock_Status { * Registers type */ public static function register() { - $values = [ + $values = array( 'IN_STOCK' => array( 'value' => 'instock' ), 'OUT_OF_STOCK' => array( 'value' => 'outofstock' ), 'ON_BACKORDER' => array( 'value' => 'onbackorder' ), - ]; + ); register_graphql_enum_type( 'StockStatusEnum', diff --git a/src/type/enum/class-tax-class.php b/src/type/enum/class-tax-class.php new file mode 100644 index 00000000..44ebdefe --- /dev/null +++ b/src/type/enum/class-tax-class.php @@ -0,0 +1,45 @@ + array( + 'value' => 'inherit', + 'description' => __( 'Inherits Tax class from cart', 'wp-graphql-woocommerce' ), + ), + WPEnumType::get_safe_name( 'standard' ) => array( + 'value' => 'standard', + 'description' => __( 'Standard Tax rate', 'wp-graphql-woocommerce' ), + ), + ); + + $classes = \WC_Tax::get_tax_classes(); + foreach ( $classes as $class ) { + $values[ WPEnumType::get_safe_name( $class ) ] = array( 'value' => sanitize_title( $class ) ); + } + + register_graphql_enum_type( + 'TaxClassEnum', + array( + 'description' => __( 'Tax class enumeration', 'wp-graphql' ), + 'values' => $values, + ) + ); + } +} diff --git a/src/type/object/class-order-item-type.php b/src/type/object/class-order-item-type.php index d8fe5ccd..02627be5 100644 --- a/src/type/object/class-order-item-type.php +++ b/src/type/object/class-order-item-type.php @@ -83,7 +83,7 @@ class Order_Item_Type { 'description' => __( 'Line taxes', 'wp-graphql-woocommerce' ), ), 'taxClass' => array( - 'type' => 'String', + 'type' => 'TaxClassEnum', 'description' => __( 'Line tax class', 'wp-graphql-woocommerce' ), ), ), @@ -110,7 +110,7 @@ class Order_Item_Type { 'description' => __( 'Line taxes', 'wp-graphql-woocommerce' ), ), 'taxClass' => array( - 'type' => 'String', + 'type' => 'TaxClassEnum', 'description' => __( 'Line tax class', 'wp-graphql-woocommerce' ), ), // 'shippingMethod' => array( @@ -174,7 +174,7 @@ class Order_Item_Type { 'description' => __( 'Line item\'s product quantity', 'wp-graphql-woocommerce' ), ), 'taxClass' => array( - 'type' => 'String', + 'type' => 'TaxClassEnum', 'description' => __( 'Line item\'s tax class', 'wp-graphql-woocommerce' ), ), 'subtotal' => array( diff --git a/src/type/object/class-product-type.php b/src/type/object/class-product-type.php index 5a23e833..7fdfeab7 100644 --- a/src/type/object/class-product-type.php +++ b/src/type/object/class-product-type.php @@ -155,7 +155,7 @@ class Product_Type { 'description' => __( 'Tax status', 'wp-graphql-woocommerce' ), ), 'taxClass' => array( - 'type' => 'String', + 'type' => 'TaxClassEnum', 'description' => __( 'Tax class', 'wp-graphql-woocommerce' ), ), 'manageStock' => array( diff --git a/src/type/object/class-product-variation-type.php b/src/type/object/class-product-variation-type.php index 96e5b80c..323492ab 100644 --- a/src/type/object/class-product-variation-type.php +++ b/src/type/object/class-product-variation-type.php @@ -61,7 +61,7 @@ class Product_Variation_Type { 'description' => __( 'Product variation height', 'wp-graphql-woocommerce' ), ), 'taxClass' => array( - 'type' => 'String', + 'type' => 'TaxClassEnum', 'description' => __( 'Product variation tax class', 'wp-graphql-woocommerce' ), ), 'manageStock' => array( diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 5c05733c..77643075 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -2548,6 +2548,7 @@ return array( 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Discount_Type' => $baseDir . '/src/type/enum/class-discount-type.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Manage_Stock' => $baseDir . '/src/type/enum/class-manage-stock.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Stock_Status' => $baseDir . '/src/type/enum/class-stock-status.php', + 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Tax_Class' => $baseDir . '/src/type/enum/class-tax-class.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Tax_Status' => $baseDir . '/src/type/enum/class-tax-status.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\WC_Connection_Orderby_Enum' => $baseDir . '/src/type/enum/class-wc-connection-orderby-enum.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPInputObject\\WC_Connection_Orderby_Input' => $baseDir . '/src/type/input/class-wc-connection-orderby-input.php', diff --git a/vendor/composer/autoload_framework_classmap.php b/vendor/composer/autoload_framework_classmap.php index d1c5e3d0..184ddbe6 100644 --- a/vendor/composer/autoload_framework_classmap.php +++ b/vendor/composer/autoload_framework_classmap.php @@ -2494,6 +2494,7 @@ return array( 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Discount_Type' => $baseDir . '/src/type/enum/class-discount-type.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Manage_Stock' => $baseDir . '/src/type/enum/class-manage-stock.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Stock_Status' => $baseDir . '/src/type/enum/class-stock-status.php', + 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Tax_Class' => $baseDir . '/src/type/enum/class-tax-class.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Tax_Status' => $baseDir . '/src/type/enum/class-tax-status.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\WC_Connection_Orderby_Enum' => $baseDir . '/src/type/enum/class-wc-connection-orderby-enum.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPInputObject\\WC_Connection_Orderby_Input' => $baseDir . '/src/type/input/class-wc-connection-orderby-input.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 8374b64a..01b2be8c 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -2988,6 +2988,7 @@ class ComposerStaticInit703f21dde3c5889862ac86d8135b48b6 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Discount_Type' => __DIR__ . '/../..' . '/src/type/enum/class-discount-type.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Manage_Stock' => __DIR__ . '/../..' . '/src/type/enum/class-manage-stock.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Stock_Status' => __DIR__ . '/../..' . '/src/type/enum/class-stock-status.php', + 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Tax_Class' => __DIR__ . '/../..' . '/src/type/enum/class-tax-class.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\Tax_Status' => __DIR__ . '/../..' . '/src/type/enum/class-tax-status.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPEnum\\WC_Connection_Orderby_Enum' => __DIR__ . '/../..' . '/src/type/enum/class-wc-connection-orderby-enum.php', 'WPGraphQL\\Extensions\\WooCommerce\\Type\\WPInputObject\\WC_Connection_Orderby_Input' => __DIR__ . '/../..' . '/src/type/input/class-wc-connection-orderby-input.php',