示例#1
0
        public JsonResult OrderDelete(DraftOrder order)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    ShopifyAPIClient api = new ShopifyAPIClient(authState);

                    // Del from shopify store
                    api.Delete("/admin/orders/" + order.Id + ".json");

                    // Del from db
                    repositories.OrderRepository.RemoveById(order.Id);

                    // Find by id product for delete
                    var AllOrders = ((List <DraftOrder>)(CacheManager.List as ArrayList)[1]);
                    var ordcache  = AllOrders.Where(p => p.Id == order.Id).FirstOrDefault();

                    //Remove from cache
                    ((List <DraftOrder>)(CacheManager.List as ArrayList)[1]).Remove(ordcache);

                    return(Json(new { success = "removed" }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new { error = "Model is not valid" }, JsonRequestBehavior.AllowGet));
                }
            }
            catch (System.Exception e)
            {
                return(Json(new { error = e.Message }, JsonRequestBehavior.AllowGet));
            }
        }
        private bool WasNotAlreadyHandled(DraftOrder draftOrder, int eventVersion)
        {
            // This assumes that events will be handled in order, but we might get the same message more than once.
            if (eventVersion > draftOrder.OrderVersion)
            {
                return(true);
            }
            else if (eventVersion == draftOrder.OrderVersion)
            {
                logger.LogWarning(
                    "Ignoring duplicate draft order update message with version {1} for order id {0}",
                    draftOrder.OrderID,
                    eventVersion);
                return(false);
            }
            else
            {
                logger.LogWarning(
                    @"An older order update message was received with with version {1} for order id {0}, last known version {2}.
This read model generator has an expectation that the EventBus will deliver messages for the same source in order.",
                    draftOrder.OrderID,
                    eventVersion,
                    draftOrder.OrderVersion);
                return(false);
            }
        }
        public void Handle(OrderPlaced @event)
        {
            var dto = new DraftOrder(@event.SourceId, @event.ConferenceId, (int)DraftOrder.States.PendingReservation, @event.Version)
            {
                AccessCode = @event.AccessCode,
            };

            dto.Lines.AddRange(@event.Seats.Select(seat => new DraftOrderItem(seat.SeatType, seat.Quantity)));

            draftOrderRepository.Insert(dto);
        }
        public async Task Consume(ConsumeContext <OrderPlaced> consumeContext)
        {
            await using var repository = this.contextFactory.Invoke();
            var dto = new DraftOrder(consumeContext.Message.SourceId, consumeContext.Message.ConferenceId, DraftOrder.States.PendingReservation, consumeContext.Message.Version)
            {
                AccessCode = consumeContext.Message.AccessCode,
            };

            dto.Lines.AddRange(consumeContext.Message.Seats.Select(seat => new DraftOrderItem(seat.SeatType, seat.Quantity)));

            await repository.Save(dto);
        }
        public void Handle(OrderPlaced @event)
        {
            using (var context = contextFactory.Invoke()) {
                var dto = new DraftOrder(@event.SourceId, @event.ConferenceId, DraftOrder.States.PendingReservation, @event.Version)
                {
                    AccessCode = @event.AccessCode
                };
                dto.Lines.AddRange(@event.Seats.Select(seat => new DraftOrderItem(seat.SeatType, seat.Quantity)));

                context.Save(dto);
            }
        }
        private void UpdateViewModel(OrderViewModel viewModel, DraftOrder order)
        {
            viewModel.OrderId      = order.OrderId;
            viewModel.OrderVersion = order.OrderVersion;
            viewModel.ReservationExpirationDate = order.ReservationExpirationDate.ToEpochMilliseconds();

            foreach (var line in order.Lines)
            {
                var seat = viewModel.Items.First(s => s.SeatType.Id == line.SeatType);
                seat.OrderItem = line;
                seat.AvailableQuantityForOrder = seat.AvailableQuantityForOrder + line.RequestedSeats;
                seat.MaxSelectionQuantity      = Math.Min(seat.AvailableQuantityForOrder, 20);
                seat.PartiallyFulfilled        = line.RequestedSeats > line.ReservedSeats;
            }
        }
        public void Handle(OrderPlaced @event)
        {
            using (var context = factory.Create())
            {
                var dto = new DraftOrder(@event.SourceId, @event.WorkshopId, DraftOrder.States.PendingReservation, @event.Version)
                {
                    AccessCode = @event.AccessCode,
                };

                dto.Lines.AddRange(@event.Anchors.Select(anchor => new DraftOrderItem(anchor.AnchorType, anchor.Quantity)));
                DbContext.Save(dto);

                context.SaveChanges();
            }
        }
示例#8
0
        private static void UpdateViewModel(OrderViewModel viewModel, DraftOrder order)
        {
            viewModel.OrderId      = order.OrderID;
            viewModel.OrderVersion = order.OrderVersion;
            viewModel.ReservationExpirationDate = order.ReservationExpirationDate.ToEpochMilliseconds();

            // TODO check DTO matches view model

            foreach (var line in order.Lines)
            {
                var seat = viewModel.Items.First(s => s.AnchorType.ID == line.AnchorType);
                seat.OrderItem = line;
                seat.AvailableQuantityForOrder = seat.AvailableQuantityForOrder + line.ReservedAnchors;
                seat.MaxSelectionQuantity      = Math.Min(seat.AvailableQuantityForOrder, 20);
                seat.PartiallyFulfilled        = line.RequestedAnchors > line.ReservedAnchors;
            }
        }
        public void ThenTheOrderShouldBeCreatedWithTheFollowingOrderItems(Table table)
        {
            draftOrder = RegistrationHelper.GetModel <DraftOrder>(registrationController.ThankYou(registrationViewModel.Order.OrderId));
            Assert.NotNull(draftOrder);

            foreach (var row in table.Rows)
            {
                var orderItem = draftOrder.Lines.FirstOrDefault(
                    l => l.SeatType == conferenceInfo.Seats.First(s => s.Description == row["seat type"]).Id);

                Assert.NotNull(orderItem);
                Assert.Equal(Int32.Parse(row["quantity"]), orderItem.ReservedSeats);
            }

            // Wait for event processing
            Thread.Sleep(Constants.WaitTimeout);
        }
示例#10
0
        private static bool WasNotAlreadyHandled(DraftOrder draftOrder, int eventVersion)
        {
            if (eventVersion > draftOrder.OrderVersion)
            {
                return(true);
            }
            else if (eventVersion == draftOrder.OrderVersion)
            {
                Trace.TraceWarning("Ignoring duplicate draft order update message with version {1} for order id {0}",
                                   draftOrder.OrderId, eventVersion);
                return(false);
            }
            else
            {
                Trace.TraceWarning(
                    @"An older order update message was received with with version {1} for order id {0}, last known version {2}.
This read model generator has an expectation that the EventBus will deliver messages for the same source in order.",
                    draftOrder.OrderId,
                    eventVersion,
                    draftOrder.OrderVersion);
                return(false);
            }
        }
        public void when_specifying_registrant_and_credit_card_payment_details_for_a_valid_registration_then_sends_commands_and_redirects_to_payment_action()
        {
            var orderId = Guid.NewGuid();
            var command = new AssignRegistrantDetails
            {
                OrderId   = orderId,
                Email     = "*****@*****.**",
                FirstName = "First Name",
                LastName  = "Last Name",
            };
            InitiateThirdPartyProcessorPayment paymentCommand = null;

            // Arrange
            var seatId = Guid.NewGuid();

            var order = new DraftOrder(orderId, conferenceAlias.Id, DraftOrder.States.ReservationCompleted, 10);

            order.Lines.Add(new DraftOrderItem(seatId, 5)
            {
                ReservedSeats = 5
            });
            Mock.Get <IOrderDao>(this.orderDao)
            .Setup(d => d.FindDraftOrder(orderId))
            .Returns(order);
            Mock.Get <IOrderDao>(this.orderDao)
            .Setup(d => d.FindPricedOrder(orderId))
            .Returns(new PricedOrder {
                OrderId = orderId, Total = 100, OrderVersion = 10
            });

            Mock.Get <ICommandBus>(this.bus)
            .Setup(b => b.Send(It.IsAny <Envelope <ICommand> >()))
            .Callback <Envelope <ICommand> >(
                es => { if (es.Body is InitiateThirdPartyProcessorPayment)
                        {
                            paymentCommand = (InitiateThirdPartyProcessorPayment)es.Body;
                        }
                });

            this.routes.MapRoute("ThankYou", "thankyou", new { controller = "Registration", action = "ThankYou" });
            this.routes.MapRoute("SpecifyRegistrantAndPaymentDetails", "checkout", new { controller = "Registration", action = "SpecifyRegistrantAndPaymentDetails" });

            // Act
            var result =
                (RedirectToRouteResult)this.sut.SpecifyRegistrantAndPaymentDetails(command, RegistrationController.ThirdPartyProcessorPayment, 0).Result;

            // Assert
            Mock.Get <ICommandBus>(this.bus)
            .Verify(b => b.Send(It.Is <Envelope <ICommand> >(es => es.Body == command)), Times.Once());

            Assert.NotNull(paymentCommand);
            Assert.Equal(conferenceAlias.Id, paymentCommand.ConferenceId);
            Assert.Equal(orderId, paymentCommand.PaymentSourceId);
            Assert.InRange(paymentCommand.TotalAmount, 99.9m, 100.1m);

            Assert.Equal("Payment", result.RouteValues["controller"]);
            Assert.Equal("ThirdPartyProcessorPayment", result.RouteValues["action"]);
            Assert.Equal(this.conferenceAlias.Code, result.RouteValues["conferenceCode"]);
            Assert.Equal(paymentCommand.PaymentId, result.RouteValues["paymentId"]);
            Assert.True(((string)result.RouteValues["paymentAcceptedUrl"]).StartsWith("/thankyou"));
            Assert.True(((string)result.RouteValues["paymentRejectedUrl"]).StartsWith("/checkout"));
        }