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

feat: add product option to autocomplete orders #3072

Merged
merged 2 commits into from
Apr 25, 2024

Conversation

dkoo
Copy link
Contributor

@dkoo dkoo commented Apr 18, 2024

All Submissions:

Changes proposed in this Pull Request:

When a new order is paid for in WooCommerce, the default behavior is to move the order into processing status and require a store admin to manually move it to completed status, unless the order contains only products that are both virtual and downloadable. If an order never moves to completed status, any data events connected to the order_completed hook (including RAS contact data syncing) will never happen. This is counterintuitive to most Newspack publishers, who simply want the orders to complete automatically without manual intervention.

This PR adds a new "Auto-complete orders" option to all products and product variations, ON by default, which lets orders with those products autocomplete regardless of whether they're virtual and/or downloadable. This essentially changes the default behavior so that orders will be autocompleted unless the "Auto-complete orders" option is intentionally unchecked for a product or variation.

Note that this should be considered a breaking change because it will alter the default order processing behavior for existing products across all Newspack sites.

Screenshot 2024-04-18 at 12 49 58 PM

How to test the changes in this Pull Request:

  1. On trunk, create a new simple product (one-time or subscription) and a variable product (one-time or subscription). Make sure the products and all variations are NOT downloadable.
  2. As a reader, purchase the simple + variable products.
  3. In WP admin > WooCommerce > Orders, observe that the orders are stuck in processing status unless you manually update them to complete.
  4. Check out this branch and edit the products you created in step 1. Confirm there's a new "Auto-complete orders" option for the simple product and each variation, checked by default. Don't change anything yet.
  5. Purchase the products as a reader again, but this time confirm that these orders do automatically finish in completed status without requiring manual intervention.
  6. Edit the products again and uncheck the "Auto-complete orders" option.
  7. Purchase the products as a reader again, and confirm that these orders again get stuck in processing status unless you manually update them to complete (this lets you restore Woo's default order processing behavior on a per-product basis, if needed).

Other information:

  • Have you added an explanation of what your changes do and why you'd like us to include them?
  • Have you written new tests for your changes, as applicable?
  • Have you successfully ran tests with your changes locally?

@dkoo dkoo added the [Status] Needs Review The issue or pull request needs to be reviewed label Apr 18, 2024
@dkoo dkoo self-assigned this Apr 18, 2024
@dkoo dkoo requested a review from a team as a code owner April 18, 2024 18:57
Copy link
Member

@adekbadek adekbadek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a use case where an order for a virtual product should not be completed immediately? If not, then I don't think there's need for UI or a custom product option here. Instead, the "downloadable & virtual" condition could be changed to just "virtual" ('woocommerce_order_item_needs_processing' filter).

@dkoo
Copy link
Contributor Author

dkoo commented Apr 19, 2024

Is there a use case where an order for a virtual product should not be completed immediately?

I don't think we can confidently answer this for all Newspack sites, hence offering the option as an escape hatch.

@claudiulodro
Copy link
Contributor

Is there a use case where an order for a virtual product should not be completed immediately?

There are a couple I can think of, like selling ads or (virtual) event tickets, where there are further logistics needed after someone gives money.

@dkoo dkoo requested a review from adekbadek April 19, 2024 17:39
Copy link
Member

@adekbadek adekbadek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pre-approving with one question. If the answer is no then we're good to go here.

Note that this should be considered a breaking change because it will alter the default order processing behavior for existing products across all Newspack sites.

Don't forget a "BREAKING CHANGE" string in the squashed commit message.

@github-actions github-actions bot added [Status] Approved The pull request has been reviewed and is ready to merge and removed [Status] Needs Review The issue or pull request needs to be reviewed labels Apr 22, 2024
@dkoo dkoo merged commit 4a2859b into trunk Apr 25, 2024
10 checks passed
@dkoo dkoo deleted the feat/autocomplete-orders-option branch April 25, 2024 15:51
matticbot pushed a commit that referenced this pull request Apr 25, 2024
# [4.0.0-alpha.1](v3.8.0...v4.0.0-alpha.1) (2024-04-25)

### Bug Fixes

* ensure only admins can reset starter content and newspack options ([#3081](#3081)) ([4606721](4606721))

### Features

* add product option to autocomplete orders ([#3072](#3072)) ([4a2859b](4a2859b))
* **ras:** skip campaign setup ([#3051](#3051)) ([9ef0e6d](9ef0e6d))

### BREAKING CHANGES

* Changes order autocompletion behavior for existing products!

* feat: add product option to autocomplete orders

* chore: update outdated docblock description
@matticbot
Copy link
Contributor

🎉 This PR is included in version 4.0.0-alpha.1 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

dkoo added a commit that referenced this pull request May 13, 2024
claudiulodro pushed a commit that referenced this pull request May 15, 2024
* chore(deps-dev): bump @wordpress/browserslist-config

Bumps [@wordpress/browserslist-config](https://github.com/WordPress/gutenberg/tree/HEAD/packages/browserslist-config) from 5.37.0 to 5.38.0.
- [Release notes](https://github.com/WordPress/gutenberg/releases)
- [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/browserslist-config/CHANGELOG.md)
- [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/browserslist-config@5.38.0/packages/browserslist-config)

---
updated-dependencies:
- dependency-name: "@wordpress/browserslist-config"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps-dev): bump @rushstack/eslint-patch from 1.10.1 to 1.10.2

Bumps [@rushstack/eslint-patch](https://github.com/microsoft/rushstack/tree/HEAD/eslint/eslint-patch) from 1.10.1 to 1.10.2.
- [Changelog](https://github.com/microsoft/rushstack/blob/main/eslint/eslint-patch/CHANGELOG.md)
- [Commits](https://github.com/microsoft/rushstack/commits/@rushstack/eslint-patch_v1.10.2/eslint/eslint-patch)

---
updated-dependencies:
- dependency-name: "@rushstack/eslint-patch"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps-dev): bump @types/wordpress__blocks from 12.5.13 to 12.5.14

Bumps [@types/wordpress__blocks](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/wordpress__blocks) from 12.5.13 to 12.5.14.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/wordpress__blocks)

---
updated-dependencies:
- dependency-name: "@types/wordpress__blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* refactor(data-events): add abstract Connector class for shared methods (#3015)

* refactor: add abstract Connector class for shared methods

* chore: remove unused imports

* chore(deps-dev): bump @wordpress/browserslist-config

Bumps [@wordpress/browserslist-config](https://github.com/WordPress/gutenberg/tree/HEAD/packages/browserslist-config) from 5.38.0 to 5.39.0.
- [Release notes](https://github.com/WordPress/gutenberg/releases)
- [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/browserslist-config/CHANGELOG.md)
- [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/browserslist-config@5.39.0/packages/browserslist-config)

---
updated-dependencies:
- dependency-name: "@wordpress/browserslist-config"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump qs and @types/qs

Bumps [qs](https://github.com/ljharb/qs) and [@types/qs](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/qs). These dependencies needed to be updated together.

Updates `qs` from 6.12.0 to 6.12.1
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](ljharb/qs@v6.12.0...v6.12.1)

Updates `@types/qs` from 6.9.14 to 6.9.15
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/qs)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: "@types/qs"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: ensure only admins can reset starter content and newspack options (#3081)

* feat: add product option to autocomplete orders (#3072)

BREAKING CHANGE: Changes order autocompletion behavior for existing products!

* feat: add product option to autocomplete orders

* chore: update outdated docblock description

* feat(ras): skip campaign setup (#3051)

* feat(ras): skip campaign setup boilerplate

added new route, added fe logic

* feat(ras): added `is_skipped` to prerequisite status endpoint

* refactor: moved callback to named function

added ui to indicate async skipping flow

* feat: added skip logic to prerequisite component

combined "skipped" and "active" into single `isValid` const

* feat: `is_skipped` property to prerequisite type

added skip logic to RAS wizard

* fix: circle ci / typescript

* fix: ci / eslint

* refactor: remove redirect after skip

added allow continue when skipped.

* refactor: allow parametrized skip

* refactor: revert any type cast

* feat: pr feedback - added redirect, activation skip and remove `activationStep[0]`

* feat: pr feedback, appended `[skipped]` to select items

* chore(release): 4.0.0-alpha.1 [skip ci]

# [4.0.0-alpha.1](v3.8.0...v4.0.0-alpha.1) (2024-04-25)

### Bug Fixes

* ensure only admins can reset starter content and newspack options ([#3081](#3081)) ([4606721](4606721))

### Features

* add product option to autocomplete orders ([#3072](#3072)) ([4a2859b](4a2859b))
* **ras:** skip campaign setup ([#3051](#3051)) ([9ef0e6d](9ef0e6d))

### BREAKING CHANGES

* Changes order autocompletion behavior for existing products!

* feat: add product option to autocomplete orders

* chore: update outdated docblock description

* chore(release): 4.0.0-alpha.2 [skip ci]

# [4.0.0-alpha.2](v4.0.0-alpha.1...v4.0.0-alpha.2) (2024-04-25)

### Bug Fixes

* remove deprecated filter callback ([#3090](#3090)) ([5d7d0bf](5d7d0bf))

* chore(release): 4.0.0-alpha.3 [skip ci]

# [4.0.0-alpha.3](v4.0.0-alpha.2...v4.0.0-alpha.3) (2024-04-26)

### Bug Fixes

* enable Memberships fix cron job only when environment constant is defined ([#3087](#3087)) ([5d40297](5d40297))

* OAuth: use a custom table for transients (#3106)

* feat: start new custom table for oauth transients data

* fix: copy/paste error

* fix(google-oauth): use custom table for transients

* feat: cleanup old transients

* fix: clean up on the fly too, and limit to deleting 1000 at a time max

---------

Co-authored-by: Adam Cassis <adam.cassis@automattic.com>

* fix: autocomplete orders only for virtual products (#3111)

* fix: autocomplete orders only for virtual products

* chore: remove console.log

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: matticbot <sysops+ghmatticbot@automattic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Derrick Koo <dkoo@users.noreply.github.com>
Co-authored-by: Jared Rethman <jaredrethman@gmail.com>
Co-authored-by: matticbot <semantic-release-bot@martynus.net>
Co-authored-by: dkoo <derrick.koo@automattic.com>
@matticbot
Copy link
Contributor

🎉 This PR is included in version 4.0.0-epic-ras-acc.1 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

matticbot pushed a commit that referenced this pull request May 28, 2024
# [4.0.0](v3.8.8...v4.0.0) (2024-05-28)

### Bug Fixes

* autocomplete orders only for virtual products ([#3111](#3111)) ([bfbe554](bfbe554))
* **data-events:** handle no ga_client_id in data ([fc4fc9f](fc4fc9f))
* ensure only admins can reset starter content and newspack options ([#3081](#3081)) ([4606721](4606721))
* **registration-block:** prevent undefined variable warning ([8af9d89](8af9d89))
* **starter-content:** make the starter content generation idempotent ([d5e10ff](d5e10ff))

### Features

* add product option to autocomplete orders ([#3072](#3072)) ([4a2859b](4a2859b))
* **cli:** command to migrate CAP guest authors to WP users ([#3068](#3068)) ([7ea8273](7ea8273))
* custom role for assignable authors who don't edit posts ([#3066](#3066)) ([7b89053](7b89053))
* **ras:** skip campaign setup ([#3051](#3051)) ([9ef0e6d](9ef0e6d))
* support for wrapping rss titles in cdata ([#3104](#3104)) ([8b3a3be](8b3a3be))

### BREAKING CHANGES

* Changes order autocompletion behavior for existing products!

* feat: add product option to autocomplete orders

* chore: update outdated docblock description
@matticbot
Copy link
Contributor

🎉 This PR is included in version 4.0.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
released on @alpha released on @epic/ras-acc released [Status] Approved The pull request has been reviewed and is ready to merge
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants