mirror of
https://github.com/foomo/shop.git
synced 2026-06-03 17:40:05 +00:00
121 lines
4.5 KiB
Go
121 lines
4.5 KiB
Go
package order
|
|
|
|
import "github.com/foomo/shop/state"
|
|
|
|
const (
|
|
StateType string = "OrderStatus"
|
|
OrderStatusInvalid string = "OrderStatusInvalid"
|
|
OrderStatusCart string = "OrderStatusCart"
|
|
OrderStatusConfirmed string = "OrderStatusConfirmed"
|
|
OrderStatusTransmitted string = "OrderStatusTransmitted"
|
|
OrderStatusInProgress string = "OrderStatusInProgress"
|
|
OrderStatusPartiallyShipped string = "OrderStatusPartiallyShipped"
|
|
OrderStatusShipped string = "OrderStatusShipped"
|
|
OrderStatusWaitingForStorePickUp string = "OrderStatusWaitingForStorePickUp"
|
|
OrderStatusComplete string = "OrderStatusComplete"
|
|
OrderStatusReturn string = "OrderStatusReturn"
|
|
OrderStatusCanceled string = "OrderStatusCanceled"
|
|
OrderStatusTechnical string = "OrderStatusTechnical"
|
|
)
|
|
|
|
var transitions = map[string][]string{
|
|
OrderStatusInvalid: []string{state.WILDCARD},
|
|
OrderStatusCart: []string{OrderStatusConfirmed, OrderStatusInvalid},
|
|
OrderStatusConfirmed: []string{OrderStatusTransmitted, OrderStatusInvalid, OrderStatusCanceled},
|
|
OrderStatusTransmitted: []string{OrderStatusInProgress, OrderStatusInvalid, OrderStatusCanceled},
|
|
OrderStatusInProgress: []string{OrderStatusPartiallyShipped, OrderStatusShipped, OrderStatusInvalid, OrderStatusCanceled},
|
|
OrderStatusShipped: []string{OrderStatusWaitingForStorePickUp, OrderStatusComplete, OrderStatusInvalid, OrderStatusCanceled},
|
|
OrderStatusPartiallyShipped: []string{OrderStatusWaitingForStorePickUp, OrderStatusShipped, OrderStatusInvalid, OrderStatusCanceled},
|
|
OrderStatusWaitingForStorePickUp: []string{OrderStatusComplete, OrderStatusInvalid, OrderStatusCanceled},
|
|
OrderStatusComplete: []string{OrderStatusReturn},
|
|
OrderStatusReturn: []string{OrderStatusInvalid},
|
|
OrderStatusCanceled: []string{OrderStatusInvalid},
|
|
OrderStatusTechnical: []string{},
|
|
}
|
|
|
|
// blueprints for possible states
|
|
var blueprints = map[string]state.BluePrint{
|
|
OrderStatusInvalid: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusInvalid,
|
|
Description: "Something went wrong",
|
|
Initial: false,
|
|
},
|
|
OrderStatusCart: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusCart,
|
|
Description: "Order has been created.",
|
|
Initial: true,
|
|
},
|
|
OrderStatusConfirmed: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusConfirmed,
|
|
Description: "Order has been confirmed by the Webshop.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusTransmitted: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusTransmitted,
|
|
Description: "Order has been transmitted to external system.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusInProgress: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusInProgress,
|
|
Description: "Order is being processed.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusShipped: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusShipped,
|
|
Description: "Order has been shipped.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusPartiallyShipped: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusPartiallyShipped,
|
|
Description: "Order has been partially shipped.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusWaitingForStorePickUp: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusWaitingForStorePickUp,
|
|
Description: "Order is ready to be picked up in store.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusComplete: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusComplete,
|
|
Description: "Order has been completed.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusReturn: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusReturn,
|
|
Description: "At least one item of the order has been returned.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusCanceled: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusCanceled,
|
|
Description: "Order has been canceled.",
|
|
Initial: false,
|
|
},
|
|
OrderStatusTechnical: state.BluePrint{
|
|
Type: StateType,
|
|
Key: OrderStatusTechnical,
|
|
Description: "Order is only for internal calculation and must be transparent for the customer.",
|
|
Initial: false,
|
|
},
|
|
}
|
|
|
|
func GetStates() map[string]state.BluePrint {
|
|
return blueprints
|
|
}
|
|
|
|
var DefaultStateMachine = &state.StateMachine{
|
|
InitialState: OrderStatusCart,
|
|
Transitions: transitions,
|
|
BluePrints: blueprints,
|
|
}
|