|
@@ -0,0 +1,214 @@
|
|
|
|
|
+# QDR — Studiou WC Order Print Statuses
|
|
|
|
|
+
|
|
|
|
|
+WordPress plugin that extends WooCommerce with a dedicated workflow for managing print orders sent to third-party print providers. It adds custom order statuses, tracking fields, CSV export, protocol-based CSV imports, and search/filter capabilities tailored to a print fulfillment pipeline.
|
|
|
|
|
+
|
|
|
|
|
+- **Plugin slug / text domain:** `studiou-wc-ord-print-statuses`
|
|
|
|
|
+- **Current version:** 1.3.2
|
|
|
|
|
+- **Author:** Dalibor Votruba — [quadarax.com](https://www.quadarax.com)
|
|
|
|
|
+- **License:** GPL v2 or later
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Requirements
|
|
|
|
|
+
|
|
|
|
|
+| Component | Minimum | Tested up to |
|
|
|
|
|
+|-------------|---------|--------------|
|
|
|
|
|
+| WordPress | 5.8 | 6.8.3 |
|
|
|
|
|
+| WooCommerce | 3.0 | 10.2.2 |
|
|
|
|
|
+| PHP | 7.2 | — |
|
|
|
|
|
+
|
|
|
|
|
+Compatible with WooCommerce **High-Performance Order Storage (HPOS)** — the plugin declares `custom_order_tables` compatibility and queries the HPOS `wc_orders` table directly.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Installation
|
|
|
|
|
+
|
|
|
|
|
+1. Copy the `studiou-wc-ord-print-statuses` folder into `wp-content/plugins/`.
|
|
|
|
|
+2. Make sure WooCommerce is installed and active.
|
|
|
|
|
+3. Activate the plugin from **Plugins** in the WordPress admin.
|
|
|
|
|
+
|
|
|
|
|
+No additional setup is required — custom statuses, fields, columns, and bulk actions are registered on activation.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Features
|
|
|
|
|
+
|
|
|
|
|
+### 1. Custom order statuses
|
|
|
|
|
+
|
|
|
|
|
+Two new statuses are inserted in the WooCommerce status pipeline, right after `processing`:
|
|
|
|
|
+
|
|
|
|
|
+| Slug | Label | Purpose |
|
|
|
|
|
+|---------------|----------------------|-------------------------------------------------|
|
|
|
|
|
+| `wc-to-print` | Prepare to Printing | Order is queued and exported to the print shop. |
|
|
|
|
|
+| `wc-in-print` | In Printing | Print shop has accepted the order. |
|
|
|
|
|
+
|
|
|
|
|
+Status transitions automatically stamp the related metadata field (`to_print_date` / `in_print_date`) with the current server time.
|
|
|
|
|
+
|
|
|
|
|
+### 2. Print Information fields on the order edit page
|
|
|
|
|
+
|
|
|
|
|
+A new **Print Information** panel is added to the order details screen with four editable fields:
|
|
|
|
|
+
|
|
|
|
|
+- **Prepare To Print Date** (`to_print_date`)
|
|
|
|
|
+- **In Print Date** (`in_print_date`)
|
|
|
|
|
+- **External Order Number** (`external_ref_ord_no`)
|
|
|
|
|
+- **External Order Delivered** (`external_ref_ord_delivered`)
|
|
|
|
|
+
|
|
|
|
|
+An additional internal field `external_ref_ord_date` is populated during InPrint protocol imports.
|
|
|
|
|
+
|
|
|
|
|
+### 3. Bulk actions on the Orders list
|
|
|
|
|
+
|
|
|
|
|
+Available in the **Bulk actions** dropdown on **WooCommerce → Orders**:
|
|
|
|
|
+
|
|
|
|
|
+- **Prepare to Printing Export** — runs the print-shop export SQL across the selected orders, streams the result as a CSV download, and moves every selected order to `wc-to-print`.
|
|
|
|
|
+- **Set Status to Prepare to Printing** — moves selected orders to `wc-to-print` and stamps `to_print_date`.
|
|
|
|
|
+- **Set Status to In Printing** — moves selected orders to `wc-in-print` and stamps `in_print_date`.
|
|
|
|
|
+
|
|
|
|
|
+### 4. Extra columns in the Orders list
|
|
|
|
|
+
|
|
|
|
|
+Three columns are appended after **Total**:
|
|
|
|
|
+
|
|
|
|
|
+- **To Print Date**
|
|
|
|
|
+- **In Print Date**
|
|
|
|
|
+- **External Order Number**
|
|
|
|
|
+
|
|
|
|
|
+### 5. Search by External Order Number
|
|
|
|
|
+
|
|
|
|
|
+The Orders list gains a search input that filters orders on the `external_ref_ord_no` meta value (LIKE match).
|
|
|
|
|
+
|
|
|
|
|
+### 6. Protocol imports
|
|
|
|
|
+
|
|
|
|
|
+A **WooCommerce → Import Protocols** submenu exposes two CSV upload forms:
|
|
|
|
|
+
|
|
|
|
|
+- **Import InPrint Protocol** — for every row in the file, the matching order is set to `wc-in-print` and the external reference number / date are saved.
|
|
|
|
|
+- **Import Delivered Protocol** — for every row in the file, the matching order is set to `wc-completed` and the delivery timestamp is recorded.
|
|
|
|
|
+
|
|
|
|
|
+Both importers require the `manage_woocommerce` capability and are protected by WordPress nonces.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## CSV formats
|
|
|
|
|
+
|
|
|
|
|
+### Export — Prepare to Printing
|
|
|
|
|
+
|
|
|
|
|
+Generated file: `prepare_to_printing_export.csv`
|
|
|
|
|
+
|
|
|
|
|
+Columns (in order):
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+order_no, prod_cat, prod_name, prod_var, prod_var_type, prod_img_url, qty, email
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+`prod_var_type` is sourced from the variation's `attribute_pa_format` postmeta, resolved against the `wp_terms` table.
|
|
|
|
|
+
|
|
|
|
|
+### Import — InPrint Protocol
|
|
|
|
|
+
|
|
|
|
|
+Required headers (case-sensitive):
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+order_no, externalorder, externalorderdate
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Effect per row: order → status `wc-in-print`, sets `in_print_date` (now), `external_ref_ord_no`, `external_ref_ord_date`.
|
|
|
|
|
+
|
|
|
|
|
+### Import — Delivered Protocol
|
|
|
|
|
+
|
|
|
|
|
+Required header:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+order_no
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Effect per row: order → status `wc-completed`, sets `external_ref_ord_delivered` (now).
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Architecture
|
|
|
|
|
+
|
|
|
|
|
+The plugin follows a manager-based pattern. The main bootstrapper (`studiou-wc-ord-print-statuses.php`) wires up specialised classes, each owning one slice of behaviour:
|
|
|
|
|
+
|
|
|
|
|
+| Class | File | Responsibility |
|
|
|
|
|
+|---------------------------|--------------------------------------------|--------------------------------------------------|
|
|
|
|
|
+| `Order_Status_Manager` | `includes/class-order-status-manager.php` | Register custom statuses, handle transitions. |
|
|
|
|
|
+| `Order_Fields_Manager` | `includes/class-order-fields-manager.php` | Render and persist Print Information fields. |
|
|
|
|
|
+| `Bulk_Actions_Manager` | `includes/class-bulk-actions-manager.php` | Register and dispatch bulk actions. |
|
|
|
|
|
+| `Custom_Columns_Manager` | `includes/class-custom-columns-manager.php`| Inject extra columns into the Orders list. |
|
|
|
|
|
+| `Import_Manager` | `includes/class-import-manager.php` | Admin UI + handlers for protocol CSV imports. |
|
|
|
|
|
+| `Order_Search_Manager` | `includes/class-order-search-manager.php` | Extend order search to external reference no. |
|
|
|
|
|
+| `Studiou_DB_Manager` | `includes/class-db-manager.php` | All SQL and protocol-processing logic. |
|
|
|
|
|
+| `UtilsLog` | `includes/utils-log.php` | Lightweight logging helper (uses `WP_DEBUG`). |
|
|
|
|
|
+
|
|
|
|
|
+The export query in `Studiou_DB_Manager::get_orders_for_printing()` joins `wc_orders`, `wc_order_product_lookup`, `posts` (products + variations), `postmeta` (variation attribute + thumbnail), `terms`, `term_taxonomy`, and `term_relationships` to assemble the print-shop payload in a single round-trip.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Internationalization
|
|
|
|
|
+
|
|
|
|
|
+- Text domain: `studiou-wc-ord-print-statuses`
|
|
|
|
|
+- Translation files: `languages/`
|
|
|
|
|
+- Bundled locales: **Czech (`cs_CZ`)** — see `docs/translations.txt` for the EN→CS reference list.
|
|
|
|
|
+
|
|
|
|
|
+Use the standard WordPress functions (`__()`, `_e()`, `_x()`, `_n_noop()`) for any new strings.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Logging
|
|
|
|
|
+
|
|
|
|
|
+`UtilsLog::log($message)` writes to the WordPress error log when `WP_DEBUG` is enabled. With `WP_DEBUG_LOG` on, log output ends up in `wp-content/debug.log`. The plugin logs initialization, dependency loading, status changes, bulk actions, and SQL failures.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Project layout
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+studiou-wc-ord-print-statuses/
|
|
|
|
|
+├── studiou-wc-ord-print-statuses.php # Plugin bootstrap (header + main class)
|
|
|
|
|
+├── includes/
|
|
|
|
|
+│ ├── class-db-manager.php
|
|
|
|
|
+│ ├── class-order-status-manager.php
|
|
|
|
|
+│ ├── class-order-fields-manager.php
|
|
|
|
|
+│ ├── class-order-search-manager.php
|
|
|
|
|
+│ ├── class-bulk-actions-manager.php
|
|
|
|
|
+│ ├── class-custom-columns-manager.php
|
|
|
|
|
+│ ├── class-import-manager.php
|
|
|
|
|
+│ └── utils-log.php
|
|
|
|
|
+├── languages/ # .po / .mo translation files
|
|
|
|
|
+├── docs/ # Project documentation (see below)
|
|
|
|
|
+├── README.md # This file
|
|
|
|
|
+└── CLAUDE.md # Guidance for Claude Code sessions
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Documentation
|
|
|
|
|
+
|
|
|
|
|
+Reference documents live under [`docs/`](docs/):
|
|
|
|
|
+
|
|
|
|
|
+- [`docs/readme.md`](docs/readme.md) — Previous user-facing readme (kept for history).
|
|
|
|
|
+- [`docs/instructions.txt`](docs/instructions.txt) — Original feature specification used to scaffold the plugin.
|
|
|
|
|
+- [`docs/translations.txt`](docs/translations.txt) — EN → CS translation reference.
|
|
|
|
|
+
|
|
|
|
|
+Project-internal guidance for AI-assisted development is documented in [`CLAUDE.md`](CLAUDE.md).
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Changelog
|
|
|
|
|
+
|
|
|
|
|
+### 1.3.2 — 2025-10-18
|
|
|
|
|
+- **Fixed:** `prod_var_type` column was empty in `prepare_to_printing_export.csv`. Variation attribute is now resolved through `postmeta.attribute_pa_format` joined against `wp_terms.name`.
|
|
|
|
|
+- **Fixed:** HPOS incompatibility warning. Plugin now explicitly declares `custom_order_tables` compatibility.
|
|
|
|
|
+- **Tested:** WordPress 6.8.3, WooCommerce 10.2.2 with HPOS enabled.
|
|
|
|
|
+
|
|
|
|
|
+### 1.3.1
|
|
|
|
|
+- Previous stable release.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Support
|
|
|
|
|
+
|
|
|
|
|
+For bug reports, feature requests or commercial support, contact **[quadarax.com](https://www.quadarax.com)**.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## License
|
|
|
|
|
+
|
|
|
|
|
+Released under the **GNU General Public License v2.0 or later** — see [https://www.gnu.org/licenses/gpl-2.0.html](https://www.gnu.org/licenses/gpl-2.0.html).
|