Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

createOrder mutation #97

Merged

Conversation

kidunot89
Copy link
Member

@kidunot89 kidunot89 commented Jul 1, 2019

Your checklist for this pull request

Thanks for sending a pull request! Please make sure you click the link above to view the contribution guidelines, then fill out the blanks below.

🚨Please review the guidelines for contributing to this repository.

  • Make sure you are making a pull request against the develop branch (left side). Also you should start your branch off our develop.
  • Make sure you are requesting to pull request from a topic/feature/bugfix branch (right side). Don't pull request from your master!

What does this implement/fix? Explain your changes.

Adds createOrder mutation as well as a few input types.

Note: To use the createOrder the user needs to have the edit-post capability for the shop_order CPT. This mutation was not designed for public use, in that case, use the checkout mutation.

  • OrderMutationsTest added.

New classes

  • Order_Mutation class - provides static helper functions for order mutations.
  • Order_Create class - register and defines the createOrder mutation
  • Fee_Line_Input class - register and the input type for additional fees.
  • Line_Item_Input class - register and the input type for line items.
  • Meta_Data_Input class - register and the input type for meta data.
  • Shipping_Line_Input class - register and the input type for shipping lines.

New Tests

  • OrderMutationsTests

Example usage

mutation createOrder( $input: CreateOrderInput! ) {
    createOrder( input: $input ) {
        clientMutationId
        order {
            ...order fields
        }
    }
}

CreateOrderInput definition

'clientMutationId' => array(
	'type'        => array( 'non_null' => 'String' ),
	'description' => __( 'Unique ID for mutation', 'wp-graphql-woocommerce' ),
),
'parentId'           => array(
	'type'        => 'Integer',
	'description' => __( 'Parent order ID.', 'wp-graphql-woocommerce' ),
),
'currency'           => array(
	'type'        => 'String',
	'description' => __( 'Currency the order was created with, in ISO format.', 'wp-graphql-woocommerce' ),
),
'customerId'         => array(
	'type'        => array( 'non_null' => 'Int' ),
	'description' => __( 'Order customer ID', 'wp-graphql-woocommerce' ),
),
'customerNote'       => array(
	'type'        => 'String',
	'description' => __( 'Note left by customer during checkout.', 'wp-graphql-woocommerce' ),
),
'coupons'            => array(
	'type'        => array( 'list_of' => 'String' ),
	'description' => __( 'Coupons codes to be applied to order', 'wp-graphql-woocommerce' ),
),
'status'             => array(
	'type'        => 'OrderStatusEnum',
	'description' => __( 'Order status' ),
),
'paymentMethod'      => array(
	'type'        => 'String',
	'description' => __( 'Payment method ID.', 'woocommerce' ),
),
'paymentMethodTitle' => array(
	'type'        => 'String',
	'description' => __( 'Payment method title.', 'woocommerce' ),
),
'transactionId'      => array(
	'type'        => 'String',
	'description' => __( 'Order transaction ID', 'wp-graphql-woocommerce' ),
),
'billing'            => array(
	'type'        => 'CustomerAddressInput',
	'description' => __( 'Order billing address', 'wp-graphql-woocommerce' ),
),
'shipping'           => array(
	'type'        => 'CustomerAddressInput',
	'description' => __( 'Order shipping address', 'wp-graphql-woocommerce' ),
),
'lineItems'          => array(
	'type'        => array( 'list_of' => 'LineItemInput' ),
	'description' => __( 'Order line items', 'wp-graphql-woocommerce' ),
),
'shippingLines'      => array(
	'type'        => array( 'list_of' => 'ShippingLineInput' ),
	'description' => __( 'Order shipping lines', 'wp-graphql-woocommerce' ),
),
'feeLines'           => array(
	'type'        => array( 'list_of' => 'FeeLineInput' ),
	'description' => __( 'Order shipping lines', 'wp-graphql-woocommerce' ),
),
'metaData'           => array(
	'type'        => array( 'list_of' => 'MetaDataInput' ),
	'description' => __( 'Order meta data', 'wp-graphql-woocommerce' ),
),
'isPaid'             => array(
	'type'        => 'Boolean',
	'description' => __( 'Define if the order is paid. It will set the status to processing and reduce stock items.', 'wp-graphql-woocommerce' ),
),

LineItemInput definition

'id'          => array(
	'type'        => 'ID',
	'description' => __( 'Line Item ID', 'wp-graphql-woocommerce' ),
),
'name'        => array(
	'type'        => 'String',
	'description' => __( 'Line name', 'wp-graphql-woocommerce' ),
),
'productId'   => array(
	'type'        => 'Int',
	'description' => __( 'Product ID.', 'wp-graphql-woocommerce' ),
),
'variationId' => array(
	'type'        => 'Int',
	'description' => __( 'Variation ID, if applicable.', 'wp-graphql-woocommerce' ),
),
'quantity'    => array(
	'type'        => 'Int',
	'description' => __( 'Quantity ordered.', 'wp-graphql-woocommerce' ),
),
'taxClass'    => array(
	'type'        => 'TaxClassEnum',
	'description' => __( 'Tax class of product.', 'wp-graphql-woocommerce' ),
),
'subtotal'    => array(
	'type'        => 'String',
	'description' => __( 'Line subtotal (before discounts).', 'wp-graphql-woocommerce' ),
),
'total'       => array(
	'type'        => 'String',
	'description' => __( 'Line total (after discounts).', 'wp-graphql-woocommerce' ),
),
'metaData'    => array(
	'type'        => array( 'list_of' => 'MetaDataInput' ),
	'description' => __( 'Meta data.', 'wp-graphql-woocommerce' ),
),
'sku'         => array(
	'type'        => 'string',
	'description' => __( 'Product SKU.', 'wp-graphql-woocommerce' ),
),

ShippingLineInput definition

'id'          => array(
	'type'        => 'ID',
	'description' => __( 'Shipping Line ID', 'wp-graphql-woocommerce' ),
),
'methodTitle' => array(
	'type'        => array( 'non_null' => 'String' ),
	'description' => __( 'Shipping method name.', 'wp-graphql-woocommerce' ),
),
'methodId'    => array(
	'type'        => array( 'non_null' => 'String' ),
	'description' => __( 'Shipping method ID.', 'wp-graphql-woocommerce' ),
),
'instanceId'  => array(
	'type'        => 'String',
	'description' => __( 'Shipping instance ID.', 'wp-graphql-woocommerce' ),
),
'total'       => array(
	'type'        => array( 'non_null' => 'String' ),
	'description' => __( 'Line total (after discounts).', 'wp-graphql-woocommerce' ),
),
'metaData'    => array(
	'type'        => array( 'list_of' => 'MetaDataInput' ),
	'description' => __( 'Meta data.', 'wp-graphql-woocommerce' ),
),

FeeLineInput definition

'id'        => array(
	'type'        => 'ID',
	'description' => __( 'Fee Line ID', 'wp-graphql-woocommerce' ),
),
'name'      => array(
	'type'        => 'String',
	'description' => __( 'Fee name.', 'wp-graphql-woocommerce' ),
),
'amount'    => array(
	'type'        => 'String',
	'description' => __( 'Fee amount.', 'wp-graphql-woocommerce' ),
),
'taxClass'  => array(
	'type'        => 'TaxClassEnum',
	'description' => __( 'Tax class of fee.', 'wp-graphql-woocommerce' ),
),
'taxStatus' => array(
	'type'        => 'TaxStatusEnum',
	'description' => __( 'Tax status of fee.', 'wp-graphql-woocommerce' ),
),
'total'     => array(
	'type'        => 'String',
	'description' => __( 'Line total (after discounts).', 'wp-graphql-woocommerce' ),
),

MetaDataInput definition

'key'   => array(
	'type'        => array( 'non_null' => 'String' ),
	'description' => __( 'Meta key.', 'wp-graphql-woocommerce' ),
),
'value' => array(
	'type'        => array( 'non_null' => 'String' ),
	'description' => __( 'Meta value.', 'wp-graphql-woocommerce' ),
),

Does this close any currently open issues?

Any relevant logs, error output, GraphiQL screenshots, etc?

(If it’s long, please paste to https://ghostbin.com/ and insert the link here.)

Any other comments?

Where has this been tested?

Operating System: Ubuntu 18.04

WordPress Version: 5.2

@kidunot89 kidunot89 added work in progress Solution development in progress new mutations Feature adds mutation(s) to the schema labels Jul 1, 2019
@kidunot89 kidunot89 self-assigned this Jul 1, 2019
@kidunot89 kidunot89 added the new types Feature adds a new type(s) label Jul 2, 2019
@kidunot89 kidunot89 merged commit 4f84381 into wp-graphql:release-v0.2.0 Jul 4, 2019
@kidunot89 kidunot89 deleted the feature/create-order-mutation branch July 4, 2019 18:50
@kidunot89 kidunot89 mentioned this pull request Jul 5, 2019
3 tasks
@kidunot89 kidunot89 changed the title Feature/create order mutation createOrder mutation Jul 5, 2019
@kidunot89 kidunot89 mentioned this pull request Jul 5, 2019
18 tasks
@kidunot89 kidunot89 removed the work in progress Solution development in progress label Jul 5, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new mutations Feature adds mutation(s) to the schema new types Feature adds a new type(s)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant