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 <noreply@anthropic.com>
This commit is contained in:
2026-02-17 16:12:11 +01:00
parent 782681b30f
commit 5716ff7742
3 changed files with 50 additions and 0 deletions

View File

@@ -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
*