Bulk Order Status Update

intermediate medium risk Order Management

Description

Update order statuses in bulk with validation and business rule checks

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

Boolean

Validate 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

order status bulk workflow validation