Пример #1
0
        /// <summary>
        /// Provides states where the first one is an initial state and has a transition to the second one.
        /// The states may reused and won't be deleted.
        /// </summary>
        /// <returns></returns>
        public List <State> GetStandardStates()
        {
            IClient commerceToolsClient = this.GetService <IClient>();
            var     standardStates      = new List <State>();

            string initialStateKey = "Initial";//given from the platform
            string nextStateKey    = "NextState";

            var initialState = this.CreateStateIfNotExists(initialStateKey, StateType.LineItemState);
            var nextState    = this.CreateStateIfNotExists(nextStateKey, StateType.LineItemState, false);

            if (initialState.Transitions == null || initialState.Transitions.Count == 0)
            {
                var transitionTo = new ResourceIdentifier <State> {
                    Key = nextStateKey
                };
                var setTransitions = new SetTransitionsUpdateAction
                {
                    Transitions = new List <IReference <State> > {
                        transitionTo
                    }
                };
                var updateActions = new List <UpdateAction <State> > {
                    setTransitions
                };
                initialState = commerceToolsClient
                               .ExecuteAsync(new UpdateByIdCommand <State>(initialState.Id, initialState.Version, updateActions))
                               .Result;
            }

            standardStates.Add(initialState);
            standardStates.Add(nextState);

            return(standardStates);
        }
        /// <summary>
        /// Provides states where the first one is an initial state and has a transition to the second one.
        /// The states may reused and won't be deleted.
        /// </summary>
        /// <returns></returns>
        public static List <State> GetStandardStates(IClient client)
        {
            var standardStates = new List <State>();

            var initialState = CreateOrRetrieveByKey <State, StateDraft>(client, InitialStateKey, new StateDraft(),
                                                                         draft =>
            {
                var stateDraft     = DefaultStateDraftWithType(draft, StateType.LineItemState);
                stateDraft.Key     = InitialStateKey;
                stateDraft.Initial = true;
                stateDraft.Name    = new LocalizedString()
                {
                    { "en", InitialStateKey }
                };
                return(stateDraft);
            });
            var nextState =
                CreateOrRetrieveByKey <State, StateDraft>(client, NextStateKey, new StateDraft(),
                                                          draft =>
            {
                var stateDraft     = DefaultStateDraftWithType(draft, StateType.LineItemState);
                stateDraft.Initial = false;
                stateDraft.Key     = NextStateKey;
                stateDraft.Name    = new LocalizedString()
                {
                    { "en", NextStateKey }
                };
                return(stateDraft);
            });

            if (initialState.Transitions == null || initialState.Transitions.Count == 0)
            {
                var transitionTo = new ResourceIdentifier <State> {
                    Key = NextStateKey
                };
                var setTransitions = new SetTransitionsUpdateAction
                {
                    Transitions = new List <IReference <State> > {
                        transitionTo
                    }
                };
                var updateActions = new List <UpdateAction <State> > {
                    setTransitions
                };
                initialState = client
                               .ExecuteAsync(new UpdateByIdCommand <State>(initialState.Id, initialState.Version, updateActions))
                               .Result;
            }

            standardStates.Add(initialState);
            standardStates.Add(nextState);

            return(standardStates);
        }
        public async Task UpdateStateSetTransitions()
        {
            await WithState(client, draft =>
            {
                var randomInt   = TestingUtility.RandomInt();
                var stateDraft  = DefaultStateDraft(draft);
                stateDraft.Name = new LocalizedString()
                {
                    { "en", $"Shipped_{randomInt}" }
                };
                stateDraft.Initial = false;
                stateDraft.Type    = StateType.OrderState;
                return(stateDraft);
            },
                            async shippedState =>
            {
                await WithUpdateableState(client,
                                          initialStateDraft => DefaultStateDraftWithType(initialStateDraft, StateType.OrderState),
                                          async initialState =>
                {
                    Assert.Null(initialState.Transitions);
                    var transitionTo = shippedState.ToKeyResourceIdentifier();
                    var action       = new SetTransitionsUpdateAction
                    {
                        Transitions = new List <IReference <State> >
                        {
                            transitionTo
                        }
                    };

                    var updatedInitialState = await client
                                              .ExecuteAsync(initialState.UpdateByKey(actions => actions.AddUpdate(action)));

                    Assert.NotNull(updatedInitialState.Transitions);
                    Assert.Equal(shippedState.Id, updatedInitialState.Transitions[0].Id);
                    return(updatedInitialState);
                });
            });
        }