Exemplo n.º 1
0
        public Result<object> Process(Sale sale, IEnvelopeContext context)
        {
            var envelopeBuilder = new DeliveryEnvelopeBuilder(sale,
                new PaymentNoteEnvelopeBuilder(context,
                new ReceiptEnvelopeBuilder(context,
                new OutletVisitNoteEnvelopeBuilder(context))));

            return new Transactor(database).Transact(() =>
            {
                envelopeBuilder.Build().ForEach(e => envelopeRouter.RouteCommandEnvelope(e));
                sale.ConfirmNewPayments();
                saleRepository.Save(sale);
            });
        }
Exemplo n.º 2
0
        public Result<object> Process(Sale sale, IEnvelopeContext context)
        {
            var envelopeBuilder = new DeliveryEnvelopeBuilder(sale,
                new CloseOrderEnvelopeBuilder(context,
                new DispatchNoteEnvelopeBuilder(context,
                new PaymentNoteEnvelopeBuilder(context,
                new ReceiptEnvelopeBuilder(context,
                new CreditNoteEnvelopeBuilder(context,
                new InventoryAdjustmentNoteEnvelopeBuilder(context, inventoryRepository,
                new OutletVisitNoteEnvelopeBuilder(context))))))));

            return new Transactor(database).Transact(() =>
            {
                envelopeBuilder.Build().ForEach(e => envelopeRouter.RouteCommandEnvelope(e));
                sale.ConfirmNewPayments();

                sale.ProcessingStatus = sale.HasNoBackorderItems ? ProcessingStatus.Confirmed : ProcessingStatus.PartiallyFulfilled;
                saleRepository.Save(sale);
            });
        }