public async Task <bool> Process(CommerceContext commerceContext, string id)
        {
            using (var activity = CommandActivity.Start(commerceContext, this))
            {
                Setting setting = await _commerceCommander.Command <GetSettingCommand>().Process(commerceContext, id);

                if (setting == null)
                {
                    return(false);
                }

                setting.IsActive = true;
                await _commerceCommander.PersistEntity(commerceContext, setting);

                CommerceList <Setting> settings = await _commerceCommander.Command <FindEntitiesInListCommand>().Process <Setting>(commerceContext, CommerceEntity.ListName <Setting>(), 0, int.MaxValue);

                foreach (var listSetting in settings.Items)
                {
                    if (listSetting.Id.Equals(setting.Id))
                    {
                        continue;
                    }

                    listSetting.IsActive = false;
                    await _commerceCommander.PersistEntity(commerceContext, listSetting);
                }
            }

            return(true);
        }
예제 #2
0
        private async Task ReserveIt(CommerceContext commerceContext, string id)
        {
            var entity = await _commander.GetEntity <CommerceEntity>(commerceContext, id, autoCreate : true);

            entity.Id = id;
            await _commander.PersistEntity(commerceContext, entity);
        }
예제 #3
0
        /// <summary>
        /// The execute.
        /// </summary>
        /// <param name="arg">The SampleArgument argument.</param>
        /// <param name="context">The context.</param>
        /// <returns>The <see cref="SampleEntity"/>.</returns>
        public override async Task <SampleEntity> Run(TransactionArgument arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull($"{Name}: The argument can not be null");

            var result = new SampleEntity()
            {
                Id = $"{CommerceEntity.IdPrefix<SampleEntity>()}Inner-{Guid.NewGuid().ToString()}"
            };

            await Commander.PersistEntity(context.CommerceContext, result).ConfigureAwait(false);

            if (arg.ErrorOnInnerScope)
            {
                context.Abort(
                    await context.CommerceContext.AddMessage(
                        context.GetPolicy <KnownResultCodes>().ValidationError,
                        "ForcedError",
                        new object[] { nameof(arg.ErrorOnInnerScope) },
                        $"Error in {nameof(arg.ErrorOnInnerScope)}.").ConfigureAwait(false),
                    context);

                return(null);
            }

            return(result);
        }
예제 #4
0
        public async Task <Setting> Process(CommerceContext commerceContext, CreateSettingArg arg)
        {
            using (var activity = CommandActivity.Start(commerceContext, this))
            {
                var setting = new Setting
                {
                    Id          = arg.Name.ToEntityId <Setting>(),
                    DisplayName = arg.DisplayName,
                    Name        = arg.Name,
                    IsActive    = false
                };

                var listMemberShipComponent = setting.GetComponent <ListMembershipsComponent>();
                if (!listMemberShipComponent.Memberships.Contains(CommerceEntity.ListName <Setting>()))
                {
                    listMemberShipComponent.Memberships.Add(CommerceEntity.ListName <Setting>());
                    setting.SetComponent(listMemberShipComponent);
                }

                var transientListMembershipComponent = setting.GetComponent <TransientListMembershipsComponent>();
                if (!transientListMembershipComponent.Memberships.Contains(CommerceEntity.ListName <Setting>()))
                {
                    transientListMembershipComponent.Memberships.Add(CommerceEntity.ListName <Setting>());
                    setting.SetComponent(transientListMembershipComponent);
                }

                var persistResult = await _commerceCommander.PersistEntity(commerceContext, setting);

                return(persistResult
                    ? setting
                    : null);
            }
        }
예제 #5
0
        private async Task CreateSizingTemplate(CommercePipelineExecutionContext context)
        {
            var composerTemplate = new ComposerTemplate("Sizing".ToEntityId <ComposerTemplate>());

            composerTemplate.GetComponent <ListMembershipsComponent>().Memberships.Add(CommerceEntity.ListName <ComposerTemplate>());
            composerTemplate.LinkedEntities = new List <string>()
            {
                "Sitecore.Commerce.Plugin.Catalog.SellableItem"
            };
            composerTemplate.Name        = "Sizing";
            composerTemplate.DisplayName = "Sizing";

            var composerTemplateViewComponent = composerTemplate.GetComponent <EntityViewComponent>();
            var composerTemplateView          = new EntityView
            {
                Name        = "Sizing",
                DisplayName = "Sizing Data",
                DisplayRank = 0,
                ItemId      = $"Composer-{System.Guid.NewGuid()}",
                EntityId    = composerTemplate.Id
            };

            composerTemplateView.Properties.Add(new ViewProperty
            {
                Name         = "Waist",
                DisplayName  = "Waist",
                OriginalType = "System.Int64",
            });

            composerTemplateView.Properties.Add(new ViewProperty
            {
                Name         = "InsideLeg",
                DisplayName  = "Inside Leg",
                OriginalType = "System.Int64",
            });

            composerTemplateView.Properties.Add(new ViewProperty
            {
                Name         = "OutsideLeg",
                DisplayName  = "Outside Leg",
                OriginalType = "System.Int64",
            });

            composerTemplateViewComponent.View.ChildViews.Add(composerTemplateView);
            await _commerceCommander.PersistEntity(context.CommerceContext, composerTemplate);
        }
        public async Task <bool> Process(CommerceContext commerceContext, string id)
        {
            using (var activity = CommandActivity.Start(commerceContext, this))
            {
                Setting setting = await _commerceCommander.Command <GetSettingCommand>().Process(commerceContext, id);

                if (setting == null)
                {
                    return(false);
                }

                setting.IsActive = false;
                await _commerceCommander.PersistEntity(commerceContext, setting);
            }

            return(true);
        }
예제 #7
0
        public override async Task <EntityView> Run(EntityView entityView, CommercePipelineExecutionContext context)
        {
            if (entityView == null || !entityView.Action.Contains("Roles.DisablePlugin"))
            {
                return(entityView);
            }

            try
            {
                var pluginName = entityView.Action.Replace("Roles.DisablePlugin.", "");

                var userPluginOptions = await _commerceCommander.Command <PluginCommander>().CurrentUserSettings(context.CommerceContext, _commerceCommander);

                userPluginOptions.EnabledPlugins.Remove(pluginName);

                await _commerceCommander.PersistEntity(context.CommerceContext, userPluginOptions);
            }
            catch (Exception ex)
            {
                context.Logger.LogError($"Catalog.DoActionAddDashboardEntity.Exception: Message={ex.Message}");
            }

            return(entityView);
        }
예제 #8
0
        /// <summary>
        /// Runs the specified argument.
        /// </summary>
        /// <param name="arg">The argument.</param>
        /// <param name="context">The context.</param>
        /// <returns>The <see cref="Order"/></returns>
        public override async Task <Order> Run(Order arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull($"{Name}: The order cannot be null.");

            if (!arg.HasComponent <FederatedPaymentComponent>() ||
                !arg.Status.Equals(context.GetPolicy <KnownOrderStatusPolicy>().Released, StringComparison.OrdinalIgnoreCase))
            {
                return(arg);
            }

            var knownOrderStatuses = context.GetPolicy <KnownOrderStatusPolicy>();

            var payment = arg.GetComponent <FederatedPaymentComponent>();
            var salesActivityReference = arg.SalesActivity.FirstOrDefault(sa => sa.Name.Equals(payment.Id, StringComparison.OrdinalIgnoreCase));

            if (string.IsNullOrEmpty(payment.TransactionId) || salesActivityReference == null)
            {
                payment.TransactionStatus = knownOrderStatuses.Problem;
                arg.Status = knownOrderStatuses.Problem;

                await context.CommerceContext.AddMessage(
                    context.GetPolicy <KnownResultCodes>().Error,
                    "InvalidOrMissingPropertyValue",
                    new object[]
                {
                    "TransactionId"
                },
                    "Invalid or missing value for property 'TransactionId'.")
                .ConfigureAwait(false);

                return(arg);
            }

            var salesActivity = await _commander
                                .GetEntity <SalesActivity>(context.CommerceContext, salesActivityReference.EntityTarget, salesActivityReference.EntityTargetUniqueId)
                                .ConfigureAwait(false);

            if (salesActivity == null)
            {
                payment.TransactionStatus = knownOrderStatuses.Problem;
                arg.Status = knownOrderStatuses.Problem;

                await context.CommerceContext.AddMessage(
                    context.GetPolicy <KnownResultCodes>().Error,
                    "EntityNotFound",
                    new object[]
                {
                    salesActivityReference.EntityTarget
                },
                    $"Entity '{salesActivityReference.EntityTarget}' was not found.")
                .ConfigureAwait(false);

                return(arg);
            }

            var knowSalesActivitiesStatus = context.GetPolicy <KnownSalesActivityStatusesPolicy>();

            if (payment.TransactionStatus.Equals(knownOrderStatuses.Problem, StringComparison.OrdinalIgnoreCase))
            {
                salesActivity.PaymentStatus = knowSalesActivitiesStatus.Problem;
            }

            await SettleSalesActivity(salesActivity, context).ConfigureAwait(false);

            payment.TransactionStatus = salesActivity.GetComponent <FederatedPaymentComponent>().TransactionStatus;
            if (salesActivity.PaymentStatus.Equals(knowSalesActivitiesStatus.Problem, StringComparison.OrdinalIgnoreCase))
            {
                arg.Status = knownOrderStatuses.Problem;
            }

            var knownSalesActivityLists = context.GetPolicy <KnownOrderListsPolicy>();
            var listToAssignTo          = !salesActivity.PaymentStatus.Equals(knowSalesActivitiesStatus.Settled, StringComparison.OrdinalIgnoreCase)
                ? knownSalesActivityLists.ProblemSalesActivities
                : knownSalesActivityLists.SettledSalesActivities;
            var argument = new MoveEntitiesInListsArgument(knownSalesActivityLists.SettleSalesActivities, listToAssignTo, new List <string>
            {
                salesActivity.Id
            });
            await _commander.Pipeline <IMoveEntitiesInListsPipeline>().Run(argument, context.CommerceContext.PipelineContextOptions).ConfigureAwait(false);

            await _commander.PersistEntity(context.CommerceContext, salesActivity).ConfigureAwait(false);

            return(arg);
        }
예제 #9
0
        public async override Task <EntityView> Run(EntityView entityView, CommercePipelineExecutionContext context)
        {
            string targetId = string.IsNullOrEmpty(entityView.EntityId)
             ? entityView.ItemId
             : entityView.EntityId;

            var setting = await _commerceCommander.Command <GetSettingCommand>().Process(context.CommerceContext, targetId);

            if (setting == null)
            {
                return(entityView);
            }

            var policies = _commerceCommander.Command <PolicyCollectionCommand>().Process(context.CommerceContext);

            foreach (var policy in policies)
            {
                string actionName = policy.GetActionName();
                if (entityView == null || !entityView.Action.Equals(actionName, StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                try
                {
                    var policyFromSetting = setting.EntityPolicies.FirstOrDefault(element => element.GetType().FullName.Equals(policy.FullName));
                    if (policyFromSetting == null)
                    {
                        policyFromSetting = Activator.CreateInstance(policy) as Policy;
                    }

                    foreach (var property in policyFromSetting.GetType().GetProperties())
                    {
                        var editorSetting = property.GetCustomAttribute <EditorSettingAttribute>();
                        if (editorSetting == null)
                        {
                            continue;
                        }

                        string formValue = entityView.Properties.FirstOrDefault(element => element.Name.Equals(editorSetting.DisplayName))?.Value ?? string.Empty;

                        var propertyValue = property.GetValue(policyFromSetting);
                        if (propertyValue is IList <string> )
                        {
                            property.SetValue(policyFromSetting, formValue.Split('|'));
                        }
                        else if (propertyValue is int)
                        {
                            if (int.TryParse(formValue, out int mappedFormValue))
                            {
                                property.SetValue(policyFromSetting, mappedFormValue);
                            }
                        }
                        else if (propertyValue is bool)
                        {
                            if (bool.TryParse(formValue, out bool mappedFormValue))
                            {
                                property.SetValue(policyFromSetting, mappedFormValue);
                            }
                        }
                        else
                        {
                            property.SetValue(policyFromSetting, formValue);
                        }
                    }

                    setting.SetPolicy(policyFromSetting);
                    bool success = await _commerceCommander.PersistEntity(context.CommerceContext, setting);

                    return(entityView);
                }

                catch (Exception ex)
                {
                    context.Logger.LogError($"{this.Name}.PathNotFound: Message={ex.Message}");
                }
            }

            return(entityView);
        }
예제 #10
0
        public async Task <EntityView> ExecuteRun <T>(EntityView entityView, CommercePipelineExecutionContext context, string actionName) where T : Policy
        {
            if (entityView == null ||
                !entityView.Action.Equals(actionName, StringComparison.OrdinalIgnoreCase))
            {
                return(entityView);
            }

            string targetId = string.IsNullOrEmpty(entityView.EntityId)
             ? entityView.ItemId
             : entityView.EntityId;

            try
            {
                var setting = await _commerceCommander.Command <GetSettingCommand>().Process(context.CommerceContext, targetId);

                if (setting == null)
                {
                    return(entityView);
                }

                var importerPolicy = setting.GetPolicy <T>();


                foreach (var property in importerPolicy.GetType().GetProperties())
                {
                    var editorSetting = property.GetCustomAttribute <EditorSettingAttribute>();
                    if (editorSetting == null)
                    {
                        continue;
                    }

                    string formValue = entityView.Properties.FirstOrDefault(element => element.Name.Equals(editorSetting.DisplayName))?.Value ?? string.Empty;

                    var propertyValue = property.GetValue(importerPolicy);
                    if (propertyValue is IList <string> )
                    {
                        property.SetValue(importerPolicy, formValue.Split('|'));
                    }
                    else if (propertyValue is int)
                    {
                        if (int.TryParse(formValue, out int mappedFormValue))
                        {
                            property.SetValue(importerPolicy, mappedFormValue);
                        }
                    }
                    else
                    {
                        property.SetValue(importerPolicy, formValue);
                    }
                }

                bool success = await _commerceCommander.PersistEntity(context.CommerceContext, setting);
            }

            catch (Exception ex)
            {
                context.Logger.LogError($"{this.Name}.PathNotFound: Message={ex.Message}");
            }

            return(entityView);
        }