public override async Task <Customer> Run(EntityView entityView, CommercePipelineExecutionContext context)
        {
            var customer = await base.Run(entityView, context);

            var customDetails = new MembershipSubscriptionComponent();

            foreach (ViewProperty viewProperty in entityView.Properties)
            {
                if (viewProperty.Name == nameof(MembershipSubscriptionComponent.MemerbshipLevelName))
                {
                    customDetails.MemerbshipLevelName = viewProperty.Value?.ToString();
                }
            }

            customer.Components.Add(customDetails);

            return(customer);
        }
        public async Task <IActionResult> SetMembershipLevelToCustomer([FromBody] ODataActionParameters value)
        {
            if (!ModelState.IsValid || value == null)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            var customerMembershipSubscription = ((JObject)value["CustomerMembershipSubscription"]).ToObject <CustomerMembershipSubscriptionModel>();

            var command = Command <AddEditCustomerMembershipSubscriptionCommand>();
            var membershipSubscription = new MembershipSubscriptionComponent
            {
                MemerbshipLevelName = customerMembershipSubscription.MemerbshipLevelName
            };


            var result = await command.Process(CurrentContext, customerMembershipSubscription.CustomerId, membershipSubscription);

            return(new ObjectResult(command));
        }
        public virtual async Task <Customer> Process(
            CommerceContext commerceContext,
            string customerId,
            MembershipSubscriptionComponent membershipSubscription)
        {
            Customer result = null;
            Customer customer;

            using (CommandActivity.Start(commerceContext, this))
            {
                await PerformTransaction(commerceContext, async() =>
                {
                    CommercePipelineExecutionContextOptions pipelineContextOptions = commerceContext.GetPipelineContextOptions();
                    result = await _pipeline.Run(new CustomerMembershipSubscriptioArgument(customerId, membershipSubscription), pipelineContextOptions);
                });

                customer = result;
            }
            return(customer);
        }
 public CustomerMembershipSubscriptioArgument(string customerId, MembershipSubscriptionComponent membershipSubscription)
     : base(customerId, string.Empty)
 {
     Condition.Requires(membershipSubscription).IsNotNull("The MembershipSubscription can not be null");
     MembershipSubscription = membershipSubscription;
 }