Beispiel #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);
            });
        }
Beispiel #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);
            });
        }
        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);
            });
        }
Beispiel #4
0
        public Result<object> Process(Sale sale, IEnvelopeContext context)
        {

            var envelopeBuilder = new SaleEnvelopeBuilder(sale,
                new MainOrderEnvelopeBuilder(context,
                new CloseOrderEnvelopeBuilder(context,
                new ExternalDocRefEnvelopeBuilder(context,
                new DispatchNoteEnvelopeBuilder(context,
                new InvoiceEnvelopeBuilder(context,
                new PaymentNoteEnvelopeBuilder(context,
                new ReceiptEnvelopeBuilder(context,
                new InventoryAdjustmentNoteEnvelopeBuilder(context, inventoryRepository,
                new OutletVisitNoteEnvelopeBuilder(context))))))))));

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