public void CanMakeAnOrderForItemWithReturnable()
        {
            //Given
            var orderAndContext = AnOrderWithItemAndReturnable();
            var order = orderAndContext.Sale;
            var context = orderAndContext.Context;

            var builder = new OrderEnvelopeBuilder(order, new MainOrderEnvelopeBuilder(context));

            //When
            var result = builder.Build();

            //Then
            AssertCommonEnvelopeChecks(result, context);

            var documentCommands = ExtractDocumentCommands(result);
            var createOrder = documentCommands.OfType<CreateMainOrderCommand>().First();

            CheckReference("O", createOrder.DocumentReference, context.User.Username);

            var addMainOrderLineItems = documentCommands.OfType<AddMainOrderLineItemCommand>().ToList();

            CheckOrderLineCommand(order.LineItems[0], addMainOrderLineItems[0]);
            CheckOrderLineCommand(order.ReturnableLineItems[0], addMainOrderLineItems[1]);

        }
Example #2
0
        public Result<object> Process(Sale sale, IEnvelopeContext context)
        {
            var envelopeBuilder = new OrderEnvelopeBuilder(sale,
                new MainOrderEnvelopeBuilder(context,
                new ExternalDocRefEnvelopeBuilder(context,
                new PaymentNoteEnvelopeBuilder(context,
                new OutletVisitNoteEnvelopeBuilder(context)))));

            return new Transactor(database).Transact(() =>
            {
                envelopeBuilder.Build().ForEach(e => envelopeRouter.RouteCommandEnvelope(e));
                sale.OrderReference = context.OrderSaleReference();
                sale.ConfirmNewPayments();
                sale.ProcessingStatus = ProcessingStatus.Submitted;
                saleRepository.Save(sale);
            });
        }