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:
@@ -97,6 +97,9 @@ class WBC_Admin {
|
|||||||
register_setting( 'wbc_orders', 'wbc_default_customer_number', array(
|
register_setting( 'wbc_orders', 'wbc_default_customer_number', array(
|
||||||
'sanitize_callback' => 'sanitize_text_field',
|
'sanitize_callback' => 'sanitize_text_field',
|
||||||
) );
|
) );
|
||||||
|
register_setting( 'wbc_orders', 'wbc_auto_release_order', array(
|
||||||
|
'sanitize_callback' => array( $this, 'sanitize_checkbox' ),
|
||||||
|
) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -328,6 +328,19 @@ $tabs = array(
|
|||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row"><?php esc_html_e( 'Auto-Release Order', 'woo-business-central' ); ?></th>
|
||||||
|
<td>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" name="wbc_auto_release_order" value="yes"
|
||||||
|
<?php checked( get_option( 'wbc_auto_release_order', 'no' ), 'yes' ); ?> />
|
||||||
|
<?php esc_html_e( 'Automatically release sales orders in BC after creation', 'woo-business-central' ); ?>
|
||||||
|
</label>
|
||||||
|
<p class="description">
|
||||||
|
<?php esc_html_e( 'Changes the order status from Draft to Released so it can be processed for shipping.', 'woo-business-central' ); ?>
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">
|
<th scope="row">
|
||||||
<label for="wbc_default_customer_number"><?php esc_html_e( 'Default Customer Number', 'woo-business-central' ); ?></label>
|
<label for="wbc_default_customer_number"><?php esc_html_e( 'Default Customer Number', 'woo-business-central' ); ?></label>
|
||||||
|
|||||||
@@ -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
|
// 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_id', $bc_order_id );
|
||||||
$order->update_meta_data( '_wbc_bc_order_number', $bc_order_number );
|
$order->update_meta_data( '_wbc_bc_order_number', $bc_order_number );
|
||||||
@@ -297,6 +318,19 @@ class WBC_Order_Sync {
|
|||||||
return true;
|
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
|
* Add order note
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user