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 *