예제 #1
0
        public override void Process(ServicePipelineArgs args)
        {
            UpdateUserRequest request;
            UpdateUserResult  result;

            ValidateArguments <UpdateUserRequest, UpdateUserResult>(args, out request, out result);
            Assert.IsNotNull((object)request.CommerceUser, "request.CommerceUser");
            Assert.IsNotNull((object)request.CommerceUser.ExternalId, "request.CommerceUser.ExternalId");
            Assert.IsNotNull((object)request.Shop, "request.Shop");
            Container  container  = this.GetContainer(request.Shop.Name, request.CommerceUser.ExternalId, "", "", args.Request.CurrencyCode, new DateTime?());
            string     externalId = request.CommerceUser.ExternalId;
            EntityView entityView = this.GetEntityView(container, externalId, string.Empty, "Details", "EditCustomer", (ServiceProviderResult)result);

            if (!result.Success)
            {
                return;
            }
            this.TranslateCommerceUserToView(entityView, request.CommerceUser);
            CommerceCommand commerceCommand = this.DoAction(container, entityView, (ServiceProviderResult)result);

            if (commerceCommand != null && commerceCommand.ResponseCode.Equals("ok", StringComparison.OrdinalIgnoreCase))
            {
                result.CommerceUser = request.CommerceUser;
            }
            base.Process(args);
        }
예제 #2
0
        public override void Process(ServicePipelineArgs args)
        {
            ValidateArguments <CreateUserRequest, CreateUserResult>(args, out var request, out var result);
            Assert.IsNotNull(request.UserName, "request.UserName");
            Assert.IsNotNull(request.Password, "request.Password");
            Container container = GetContainer(request.Shop.Name, string.Empty, "", "", args.Request.CurrencyCode,
                                               new DateTime?());
            CommerceUser commerceUser1 = result.CommerceUser;

            if (commerceUser1 != null &&
                commerceUser1.UserName.Equals(request.UserName, StringComparison.OrdinalIgnoreCase))
            {
                string entityId = "Entity-Customer-" + request.UserName;
                ServiceProviderResult currentResult = new ServiceProviderResult();
                EntityView            entityView    = GetEntityView(container, entityId, string.Empty, "Details", string.Empty,
                                                                    currentResult);
                if (currentResult.Success && !string.IsNullOrEmpty(entityView.EntityId))
                {
                    base.Process(args);
                    return;
                }
            }

            EntityView entityView1 =
                GetEntityView(container, string.Empty, string.Empty, "Details", "AddCustomer", result);

            if (!result.Success)
            {
                return;
            }
            entityView1.Properties.FirstOrDefault(p => p.Name.Equals("Domain")).Value    = request.UserName.Split('\\')[0];
            entityView1.Properties.FirstOrDefault(p => p.Name.Equals("LoginName")).Value =
                request.UserName.Split('\\')[1];
            entityView1.Properties.FirstOrDefault(p => p.Name.Equals("AccountStatus")).Value = "ActiveAccount";
            if (!string.IsNullOrEmpty(request.Email))
            {
                entityView1.Properties.FirstOrDefault(p => p.Name.Equals("Email")).Value = request.Email;
            }
            CommerceCommand commerceCommand = DoAction(container, entityView1, result);

            if (commerceCommand != null &&
                commerceCommand.ResponseCode.Equals("ok", StringComparison.OrdinalIgnoreCase))
            {
                CommerceUser commerceUser2 = EntityFactory.Create <CommerceUser>("CommerceUser");
                commerceUser2.Email      = request.Email;
                commerceUser2.UserName   = request.UserName;
                commerceUser2.ExternalId = commerceCommand.Models.OfType <CustomerAdded>().FirstOrDefault()?.CustomerId;
                result.CommerceUser      = commerceUser2;
                request.Properties.Add(new PropertyItem()
                {
                    Key   = "UserId",
                    Value = result.CommerceUser.ExternalId
                });
                string entityId = "Entity-Customer-" + request.UserName;
                TestSave(container, entityId, request, result, commerceUser2.ExternalId);
            }

            base.Process(args);
        }
        public override void Process(ServicePipelineArgs args)
        {
            var request = args.Request as AddReviewRequest;
            var result  = args.Result as AddReviewResult;

            Assert.IsNotNull(request, nameof(request));
            Assert.IsNotNull(result, nameof(result));

            try
            {
                CommerceCommand command = Proxy.DoCommand(
                    this.GetContainer(request.ShopName, string.Empty)
                    .AddReview(request.ProductId, request.Text, request.Author, request.Score));

                result.HandleCommandMessages(command);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message, ex, this);
                result.Success = false;
            }

            base.Process(args);
        }
 private IList <MissingReferencesModel> GetMissingReferences(CommerceCommand command)
 {
     return(command.Models.OfType <MissingReferencesModel>().ToList());
 }
 private IList <string> GetMessages(CommerceCommand command, string code)
 {
     return(command.Messages.Where(x => x.Code.Equals(code, StringComparison.OrdinalIgnoreCase)).Select(x => x.Text).ToList());
 }
 public static void WaitUntilCompletion(this CommerceCommand command, params string[] allowedErrorTerms)
 {
     command.Should().NotBeNull();
     command.ResponseCode.Should().Be("Ok");
     WaitUntilCompletion(command.TaskId, allowedErrorTerms);
 }
예제 #7
0
        public override async Task <IssueCouponArgument> Run(IssueCouponArgument arg,
                                                             CommercePipelineExecutionContext context)
        {
            var policy = context.GetPolicy <LoyaltyPointsPolicy>();

            var summary = arg.Customer.GetComponent <LoyaltySummary>();

            if (summary.TotalPoints - summary.AppliedPoints < policy.PointsForCoupon)
            {
                return(arg);
            }

            ManagedList couponList =
                await _getManagedListCommand.Process(context.CommerceContext, Constants.AvailableCouponsList);

            if (couponList == null)
            {
                return(arg);
            }

            var commerceCommand = new CommerceCommand(_serviceProvider);
            await commerceCommand.PerformTransaction(context.CommerceContext,
                                                     async() =>
            {
                int couponsToIssue = ((summary.TotalPoints - summary.AppliedPoints) / policy.PointsForCoupon);

                CommerceList <Coupon> list =
                    await _findEntitiesInListCommand.Process <Coupon>(context.CommerceContext,
                                                                      Constants.AvailableCouponsList, 0, couponsToIssue);

                if (list.Items.Count < couponsToIssue)
                {
                    context.Abort(
                        $"{Name}: Unable to provision required {couponsToIssue} coupons. Examine List {Constants.AvailableCouponsList} and CreateCouponsMinion process.",
                        context);
                    return;
                }

                List <string> couponCodes = list.Items.Select(coupon => coupon.Code).ToList();
                List <string> entityIds   = list.Items.Select(coupon => coupon.Id).ToList();

                var result = await _removeListEntitiesCommand.Process(context.CommerceContext,
                                                                      Constants.AvailableCouponsList, entityIds);
                if (!result.Success)
                {
                    context.Abort($"{Name}: Unable to remove coupon(s) from List {Constants.AvailableCouponsList}",
                                  context);
                    return;
                }

                summary.AppliedPoints += couponsToIssue *policy.PointsForCoupon;

                summary.CouponEntities.AddRange(entityIds);

                arg.CouponEntities.AddRange(entityIds);
                arg.Coupons.AddRange(couponCodes);

                await _persistEntityPipeline.Run(new PersistEntityArgument(arg.Customer), context);
            });

            return(arg);
        }