From 5716ff7742f3ad2a8bdd44aeb8b1c0fdfb5a0c0a Mon Sep 17 00:00:00 2001
From: Malin
Date: Tue, 17 Feb 2026 16:12:11 +0100
Subject: [PATCH] feat: add auto-release sales order option
PATCH salesOrders status to 'Released' after creation and line items.
Controlled by Auto-Release Order checkbox in Order Settings.
Co-Authored-By: Claude Opus 4.6
---
.../admin/class-wbc-admin.php | 3 ++
.../admin/partials/wbc-admin-display.php | 13 +++++++
.../includes/class-wbc-order-sync.php | 34 +++++++++++++++++++
3 files changed, 50 insertions(+)
diff --git a/woo-business-central/admin/class-wbc-admin.php b/woo-business-central/admin/class-wbc-admin.php
index 4902bde..c0430f9 100644
--- a/woo-business-central/admin/class-wbc-admin.php
+++ b/woo-business-central/admin/class-wbc-admin.php
@@ -97,6 +97,9 @@ class WBC_Admin {
register_setting( 'wbc_orders', 'wbc_default_customer_number', array(
'sanitize_callback' => 'sanitize_text_field',
) );
+ register_setting( 'wbc_orders', 'wbc_auto_release_order', array(
+ 'sanitize_callback' => array( $this, 'sanitize_checkbox' ),
+ ) );
}
/**
diff --git a/woo-business-central/admin/partials/wbc-admin-display.php b/woo-business-central/admin/partials/wbc-admin-display.php
index 9c26a18..fca3b52 100644
--- a/woo-business-central/admin/partials/wbc-admin-display.php
+++ b/woo-business-central/admin/partials/wbc-admin-display.php
@@ -328,6 +328,19 @@ $tabs = array(
+
+ |
+
+
+
+
+
+ |
+
|
diff --git a/woo-business-central/includes/class-wbc-order-sync.php b/woo-business-central/includes/class-wbc-order-sync.php
index 5cafa85..1844f96 100644
--- a/woo-business-central/includes/class-wbc-order-sync.php
+++ b/woo-business-central/includes/class-wbc-order-sync.php
@@ -125,6 +125,27 @@ class WBC_Order_Sync {
) );
}
+ // Step 3b: Release the sales order if enabled
+ if ( get_option( 'wbc_auto_release_order', 'no' ) === 'yes' ) {
+ $release_result = $this->release_sales_order( $bc_order_id );
+
+ if ( is_wp_error( $release_result ) ) {
+ WBC_Logger::warning( 'OrderSync', 'Failed to release sales order', array(
+ 'order_id' => $order_id,
+ 'bc_order_id' => $bc_order_id,
+ 'error' => $release_result->get_error_message(),
+ ) );
+ $this->add_order_note( $order, sprintf(
+ __( 'Order created in BC but failed to release: %s', 'woo-business-central' ),
+ $release_result->get_error_message()
+ ) );
+ } else {
+ WBC_Logger::info( 'OrderSync', 'Sales order released', array(
+ 'bc_order_id' => $bc_order_id,
+ ) );
+ }
+ }
+
// Step 4: Save BC order ID to WC order meta
$order->update_meta_data( '_wbc_bc_order_id', $bc_order_id );
$order->update_meta_data( '_wbc_bc_order_number', $bc_order_number );
@@ -297,6 +318,19 @@ class WBC_Order_Sync {
return true;
}
+ /**
+ * Release a sales order in BC (change status from Draft to Released)
+ *
+ * @param string $bc_order_id BC sales order ID.
+ * @return array|WP_Error Updated order or error.
+ */
+ private function release_sales_order( $bc_order_id ) {
+ return WBC_API_Client::patch(
+ '/salesOrders(' . $bc_order_id . ')',
+ array( 'status' => 'Released' )
+ );
+ }
+
/**
* Add order note
*
|