order
This module provides functionality to search, retrieve, and manage orders from the Smart1 SDK API.
Overview
The order module allows you to:
Search orders with pagination
Filter orders by multiple criteria (state, priority, dates, fleet, etc.)
Sort order results by various properties
Update order states (reject, start, complete)
Retrieve specific order fields to optimize API calls
Work with complex shipment data structures
Main Components
GetAndSearchOrdersByPage
Main use case for retrieving orders from the API with advanced filtering and pagination.
UpdateOrderState
Use case for updating the state of an order (e.g., reject, start, complete).
Models
Order
Represents a complete order entity with all details.
Properties:
id: Int- Unique order identifierrouteId: Int- Related route IDstate: OrderState- Current order statepriority: Int- Order prioritytotalOperators: Int- Total operators assignedidentifier: String- Order identifierbusinessUnit: String- Business unitshipment: List<Shipment>- Shipment informationdateInit: String- Initial datehourInit: String- Initial houredaOrigin: String- EDA originetaOrigin: String- ETA origineddOrigin: String- EDD originetdOrigin: String- ETD originedaDestination: String- EDA destinationetaDestination: String- ETA destinationeddDestination: String- EDD destinationetdDestination: String- ETD destinationfleet: FleetType- Fleet typeloadType: LoadType- Load typeresourceIds: List<Int>- Resource IDstruckId: Int- Truck IDoperatorIds: List<Int>- Operator IDsobjectId: Int- Related object IDadditionalInfo: JsonObject- Dynamic additional informationcompanyId: Int- Company IDaddedOnDate: String- Creation dateupdateOnDate: String- Last update date
Shipment
Contains shipment information for an order.
Properties:
portId: Int- Port IDempty: Boolean- Is shipment emptypickups: List<ShipmentItem>- Pickup pointsdeliveries: List<ShipmentItem>- Delivery points
ShipmentItem
Represents a pickup or delivery point.
Properties:
skillIds: List<Int>- Required skill IDscapacityInfo: List<CapacityInfo>- Capacity information
OrderFilters
Comprehensive filters for order search.
Properties: 26 different filter options including IDs, states, dates, fleet types, and more.
OrderOrderSort
Sorting configuration with 26 sortable properties.
Types
OrderProperty
Enum with 26 properties for field selection.
Values:
ID,ROUTE_ID,STATE,PRIORITY,TOTAL_OPERATORS,IDENTIFIERBUSINESS_UNIT,SHIPMENT,DATE_INIT,HOUR_INITEDA_ORIGIN,ETA_ORIGIN,EDD_ORIGIN,ETD_ORIGINEDA_DESTINATION,ETA_DESTINATION,EDD_DESTINATION,ETD_DESTINATIONFLEET,LOAD_TYPE,RESOURCE_IDS,TRUCK_ID,OPERATOR_IDSOBJECT_ID,ADDITIONAL_INFO,COMPANY_ID,ADDED_ON_DATE,UPDATE_ON_DATE
OrderState
Enum representing order states.
Values:
NOT_ASSIGNED- Order not assigned (use to reject)ASSIGNED- Order assigned to operatorIN_PROGRESS- Order in progressCOMPLETED- Order completedUNKNOWN- Unknown state (never use for updates)
PlanType
Enum for plan types.
Values:
BREAK,DRIVING,SETUP,SLEEPING,UNKNOWN
Usage Examples
Basic Search - Get All Orders
import com.servinformacion.smart1sdk.android.order.GetAndSearchOrdersByPage
import com.servinformacion.smart1sdk.android.core.ResultS1SDK
class OrderViewModel : ViewModel() {
private val getOrders = GetAndSearchOrdersByPage()
fun loadOrders() {
viewModelScope.launch {
val result = getOrders(
page = 1,
pageQuantity = 20
)
when (result) {
is ResultS1SDK.Success -> {
val orders = result.data.data
val totalPages = result.data.paginationInfo.totalPages
// Handle success
}
is ResultS1SDK.Error -> {
// Handle error
}
}
}
}
}Filter by Order State
import com.servinformacion.smart1sdk.android.order.model.OrderFilters
import com.servinformacion.smart1sdk.android.order.types.OrderState
suspend fun getAssignedOrders() {
val getOrders = GetAndSearchOrdersByPage()
val result = getOrders(
filters = OrderFilters(
states = listOf(OrderState.ASSIGNED, OrderState.IN_PROGRESS)
),
page = 1
)
// Handle result
}Filter by Date Range
suspend fun getOrdersByDateRange(startDate: String, endDate: String) {
val getOrders = GetAndSearchOrdersByPage()
val result = getOrders(
filters = OrderFilters(
dateInit = listOf(startDate, endDate)
),
searchType = ApiSearchType.CONTAINS,
page = 1
)
// Handle result
}Sort Orders by Priority
import com.servinformacion.smart1sdk.android.order.model.OrderOrderSort
import com.servinformacion.smart1sdk.android.core.types.ApiSortType
suspend fun getOrdersSortedByPriority() {
val getOrders = GetAndSearchOrdersByPage()
val result = getOrders(
orderSort = OrderOrderSort(
priority = ApiSortType.DESC,
dateInit = ApiSortType.ASC
),
page = 1
)
// Handle result
}Update Order State - Start Order
import com.servinformacion.smart1sdk.android.order.UpdateOrderState
import com.servinformacion.smart1sdk.android.order.types.OrderState
suspend fun startOrder(orderId: Int) {
val updateOrderState = UpdateOrderState()
val result = updateOrderState(
orderId = orderId,
newStatus = OrderState.IN_PROGRESS
)
when (result) {
is ResultS1SDK.Success -> {
println("Order started successfully")
}
is ResultS1SDK.Error -> {
println("Failed to start order: ${result.error}")
}
}
}Update Order State - Reject Order
suspend fun rejectOrder(orderId: Int) {
val updateOrderState = UpdateOrderState()
val result = updateOrderState(
orderId = orderId,
newStatus = OrderState.NOT_ASSIGNED
)
// Handle result
}Optimized Field Selection
import com.servinformacion.smart1sdk.android.order.types.OrderProperty
suspend fun getOrderBasicInfo() {
val getOrders = GetAndSearchOrdersByPage()
val result = getOrders(
fields = listOf(
OrderProperty.ID,
OrderProperty.IDENTIFIER,
OrderProperty.STATE,
OrderProperty.PRIORITY,
OrderProperty.DATE_INIT
),
page = 1,
pageQuantity = 50
)
// Handle result
}Advanced Search with Multiple Filters
import com.servinformacion.smart1sdk.android.core.types.FleetType
import com.servinformacion.smart1sdk.android.core.types.LoadType
suspend fun advancedOrderSearch() {
val getOrders = GetAndSearchOrdersByPage()
val result = getOrders(
filters = OrderFilters(
states = listOf(OrderState.ASSIGNED),
priorities = listOf(1, 2, 3),
fleet = listOf(FleetType.INTERNAL),
loadTypes = listOf(LoadType.FULL),
companyIds = listOf(1)
),
logicalOperator = ApiLogicalOperator.AND,
orderSort = OrderOrderSort(
priority = ApiSortType.DESC,
dateInit = ApiSortType.ASC
),
searchType = ApiSearchType.EXACT,
page = 1,
pageQuantity = 20
)
when (result) {
is ResultS1SDK.Success -> {
val dataSet = result.data
println("Total orders: ${dataSet.paginationInfo.totalRecords}")
dataSet.data.forEach { order ->
println("Order ${order.identifier} - State: ${order.state}")
}
}
is ResultS1SDK.Error -> {
println("Error: ${result.error}")
}
}
}Working with Shipment Data
suspend fun analyzeOrderShipments(orderId: Int) {
val getOrders = GetAndSearchOrdersByPage()
val result = getOrders(
filters = OrderFilters(ids = listOf(orderId)),
fields = listOf(
OrderProperty.ID,
OrderProperty.SHIPMENT
)
)
when (result) {
is ResultS1SDK.Success -> {
val order = result.data.data.firstOrNull()
order?.shipment?.forEach { shipment ->
println("Port: ${shipment.portId}")
println("Pickups: ${shipment.pickups.size}")
println("Deliveries: ${shipment.deliveries.size}")
println("Empty: ${shipment.empty}")
}
}
is ResultS1SDK.Error -> {
// Handle error
}
}
}Important Notes
Required Field: Always include
OrderProperty.IDin the fields list.Order States:
Use
NOT_ASSIGNEDto reject an orderUse
IN_PROGRESSto start an orderUse
COMPLETEDwhen order is finishedNever use
UNKNOWNfor updatesField Selection: Request only needed fields for better performance.
Pagination: Results are paginated. Use
DataSet.paginationInfoto navigate.Complex Data: Orders contain nested shipment data with pickups and deliveries.
Date Formats:
Dates:
YYYY-MM-DD'T'HH:MM:SSTimes:
HH:MM:SSUpdate Restrictions: Only certain state transitions are allowed by the API.
Additional Info: Dynamic JsonObject structure that varies by object configuration.
Response Structure
data class DataSet<T>(
val data: List<T>, // List of orders
val paginationInfo: PaginationInfo, // Pagination metadata
val capacityInfo: CapacityInfo // API capacity information
)Error Handling
Common errors:
CommonError.InvalidInputData- Invalid parameters (empty fields, invalid state transitions)ApiError.ExpiredToken- Session token expired (handled automatically)ApiError.Unauthorized- Invalid or missing authenticationApiError.NotFound- Order not found