Update order statuses in bulk with validation and business rule checks
Bulk Order Status Update
intermediate medium risk Order Management
Description
Prerequisites
- Order status workflow definitions
- Business rule validation
- Backup of order data
Parameters
orderCodes
Collection*Collection of order codes to update
newStatus
String*New status to set for orders
validateTransition
BooleanValidate status transition is allowed
Default: true
Script Code
import de.hybris.platform.core.model.order.OrderModel
import de.hybris.platform.servicelayer.search.FlexibleSearchService
import de.hybris.platform.servicelayer.model.ModelService
import de.hybris.platform.workflow.WorkflowProcessingService
def orderCodes = parameters.orderCodes
def newStatus = parameters.newStatus
def validateTransition = parameters.validateTransition ?: true
def errors = []
def updatedCount = 0
try {
orderCodes.each { orderCode ->
try {
def order = flexibleSearchService.search("SELECT {pk} FROM {Order} WHERE {code} = ?code",
[code: orderCode]).result[0]
if (!order) {
errors.add("Order with code '$orderCode' not found")
return
}
// Validate status transition if required
if (validateTransition) {
def currentStatus = order.status
if (!isValidTransition(currentStatus, newStatus)) {
errors.add("Invalid status transition from '$currentStatus' to '$newStatus' for order $orderCode")
return
}
}
// Update order status
order.setStatus(newStatus)
modelService.save(order)
// Trigger workflow if needed
if (shouldTriggerWorkflow(newStatus)) {
// workflowProcessingService.startWorkflow(order, newStatus)
println "Workflow triggered for order $orderCode"
}
updatedCount++
} catch (Exception e) {
errors.add("Error updating order '$orderCode': $e.message")
}
}
println "Updated $updatedCount orders successfully"
if (errors) {
println "Errors encountered:"
errors.each { println " - $it" }
}
} catch (Exception e) {
errors.add("Bulk order status update failed: $e.message")
}
def isValidTransition(currentStatus, newStatus) {
// Define valid status transitions
def validTransitions = [
'CREATED': ['CONFIRMED', 'CANCELLED'],
'CONFIRMED': ['SHIPPED', 'CANCELLED'],
'SHIPPED': ['DELIVERED', 'RETURNED'],
'DELIVERED': ['COMPLETED', 'RETURNED']
]
return validTransitions[currentStatus]?.contains(newStatus) ?: false
}
def shouldTriggerWorkflow(status) {
def workflowStatuses = ['CONFIRMED', 'SHIPPED', 'DELIVERED']
return workflowStatuses.contains(status)
}Script Information
Author:SAP Commerce Team
Execution Time:2-6 minutes
Rating:4.4/5
Downloads:750
Last Updated:2024-01-08
Version:1.3.0
Tags
tools.groovyScriptLibrary.ui.title
tools.groovyScriptLibrary.ui.subtitle