getdokan / dokan

Multivendor marketplace platform
https://wordpress.org/plugins/dokan-lite/
259 stars 204 forks source link

fix: Prevent incorrect sub-order status updates #2354

Closed mralaminahamed closed 2 months ago

mralaminahamed commented 2 months ago

All Submissions:

Changes proposed in this Pull Request:

This PR addresses an issue where sub-order statuses were being incorrectly updated when the main order status changed. Specifically, it prevents cancelled sub-orders from being marked as completed when the main order is completed.

Key changes:

  1. Implemented a new is_status_change_allowed method to validate status transitions.
  2. Added a dokan_sub_order_status_update_whitelist filter for customizable status transition rules.
  3. Updated the on_order_status_change method to respect sub-order status constraints.
  4. Added unit tests and documentation for the new validation logic.

Related Pull Request(s)

Closes

How to test the changes in this Pull Request:

  1. Create a main order with multiple sub-orders from different vendors.
  2. Cancel one of the sub-orders from the vendor dashboard.
  3. From the admin dashboard, mark the main order as completed.
  4. Verify that the previously cancelled sub-order remains cancelled and is not marked as completed.
  5. Test various other status transitions to ensure they behave as expected according to the whitelist.

Changelog entry

Fix: Prevent incorrect sub-order status updates

Previously, when a main order was marked as completed, all sub-orders would be automatically marked as completed, regardless of their current status. This could lead to cancelled sub-orders being incorrectly marked as completed. This PR implements a flexible system to validate status transitions, ensuring that sub-order statuses are updated correctly based on their current status and a configurable set of rules.

Before Changes

When a main order was marked as completed, all sub-orders, including cancelled ones, would be marked as completed.

Screenshot 2024-08-28 at 3 55 01 PM Screenshot 2024-08-28 at 3 55 55 PM

After Changes

When a main order is marked as completed, sub-orders are only updated if the transition is allowed according to the defined rules. Cancelled sub-orders remain cancelled.

Screenshot 2024-08-28 at 3 49 43 PM

Feature Video (optional)

N/A

PR Self Review Checklist:

FOR PR REVIEWER ONLY:

As a reviewer, your feedback should be focused on the idea, not the person. Seek to understand, be respectful, and focus on constructive dialog. As a contributor, your responsibility is to learn from suggestions and iterate your pull request should it be needed based on feedback. Seek to collaborate and produce the best possible contribution to the greater whole.

  • [ ] Correct — Does the change do what it's supposed to?
  • [ ] Secure — Would a nefarious party find some way to exploit this change?
  • [ ] Readable — Will your future self be able to understand this change months down the road?
  • [ ] Elegant — Does the change fit aesthetically within the overall style and architecture?

Summary by CodeRabbit

coderabbitai[bot] commented 2 months ago

Walkthrough

The changes enhance the on_order_status_change method in the Hooks class by implementing conditional checks for sub-order status updates. The new logic verifies if status transitions are allowed before updating sub-orders, preventing unwanted changes. Two new private methods are introduced for prefixing status strings and logging skipped updates, improving code clarity and maintainability.

Changes

File Change Summary
includes/Order/Hooks.php Modified on_order_status_change method logic; added is_status_change_allowed, maybe_add_wc_prefix, and log_skipped_status_update methods.

Assessment against linked issues

Objective Addressed Explanation
Ensure that suborders marked as canceled remain in that state (Issue #2341)
Prevent incorrect status updates for suborders when the main order is completed (Issue #2341)

Poem

🐇 In the land of orders, hopping with glee,
Suborders now stay where they ought to be.
Canceled won't change when the main order's complete,
Logic's been added, making it neat!
So dance little rabbits, let status abide,
In the world of WooCommerce, we take pride! 🌼


[!TIP]

Early access features: enabled We are currently testing the following features in early access: - **Anthropic Claude for code reviews**: The new model is designed to enhance code understanding and generation capabilities. We're excited to hear your feedback as we evaluate its performance. Note: - You can enable or disable early access features from the CodeRabbit UI or by updating the CodeRabbit configuration file. - Please join our [Discord Community](https://discord.com/invite/GsXnASn26c) to provide feedback and report issues. - OSS projects are currently opted into early access features by default.

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.