=== 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 );