=== B2B Quick Order Matrix ===
Contributors: craftwebb
Donate link: https://craftedwebb.github.io/index.html
Tags: woocommerce wholesale, b2b, bulk order, order form, quick order
Requires at least: 6.5
Tested up to: 6.8
Requires PHP: 8.0
Stable tag: 0.2.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A fast SKU-based order matrix for B2B and wholesale WooCommerce stores.
Paste SKUs, validate stock, and add all items to cart instantly.

== Description ==

**B2B Quick Order Matrix** streamlines bulk ordering for wholesale and B2B customers with seamless Excel integration.
Copy-paste directly from spreadsheets or upload CSV/TSV files to import multiple SKUs and quantities instantly.
Search for products by SKU or name, validate stock in real-time, and add everything to your cart in one click—no more browsing product pages one by one.

### Key Features

- Paste excel selection of upload CSV/TSV file with SKUs and quantities
- Search products by SKU or name with enhanced product details
- Automatic SKU resolution to product names
- Inline stock quantity validation in order table
- Stock availability alerts with user-friendly UI
- Add all resolved items to cart in one click
- Collapsible notifications area for cleaner interface

This saves significant time for repeat orders and bulk purchasing.

== Installation ==

1. Upload the plugin files to the `/wp-content/plugins/b2bqom-quick-order-matrix` directory, or install via the WordPress Plugins screen.
2. Activate the plugin through the **Plugins** screen in WordPress.
3. Use the shortcode `[b2bqom_quick_order_matrix]` on any page to display the quick order matrix.
4. By default, only administrators can access the quick order matrix.
   To grant access to other roles, go to **Settings → B2B Quick Order** and select the roles.

== Frequently Asked Questions ==

= Does this plugin work without WooCommerce? =
No, it requires WooCommerce to be installed and active.

= Is it possible to import SKUs from a file? =
Yes! You can upload CSV or TSV files directly, or copy-paste from spreadsheets.
Both methods support quick bulk imports for faster order processing.

= Who can use the quick order matrix? =
Administrators and any user roles enabled in the plugin settings. A permission filter is also available for site owners and developers to implement custom logic beyond the built-in role selection.

== Screenshots ==

1. Paste SKUs into the quick order form
2. Search products by SKU or name
3. Products resolved with stock validation

== Changelog ==

= 0.2.0 =
* **WordPress.org Compliance**: Fixed naming conventions to meet WordPress plugin guidelines
  - Renamed main plugin file to `b2bqom-quick-order-matrix.php`
  - Updated shortcode to `[b2bqom_quick_order_matrix]` with consistent `b2bqom` prefix
  - Standardized all function names, class names, and text domains
* **New Feature**: CSV/TSV file upload support for bulk order imports
* **Enhancement**: Collapsible notifications area for better UX
* **Enhancement**: Debounced search for improved performance
* **Enhancement**: Inline stock quantity validation in order table
* **Improvement**: Better stock availability messaging
* **Improvement**: Enhanced search dialog with product details

= 0.1.43 =
* Pre-review polishing and bug fixes

= 0.1.42 =
* Initial public release (MVP: paste SKUs, resolve products, validate stock, add to cart).

== Upgrade Notice ==

= 0.2.0 =
Major update with WordPress.org compliance fixes and new features. Note: Shortcode changed to [b2bqom_quick_order_matrix] - please update your pages.

= 0.1.42 =
First release of B2B Quick Order Matrix.

== Developer Notes ==

= Filter: b2bqom_check_user_permission =

For developers: the plugin provides a filter to override or extend the default
role-based permission logic.

Default behavior:
- Administrators always allowed
- Other roles must be enabled in plugin settings

Filter usage:

add_filter( 'b2bqom_check_user_permission', function( $allowed, $user, $allowed_roles ) {
    // Example: grant access to anyone with a custom capability
    if ( user_can( $user, 'read_private_products' ) ) {
        return true;
    }
    return $allowed;
}, 10, 3 );


