Exemple #1
0
        public void ProcessMessage(IHandlerContext <EMailSentEvent> context)
        {
            if (!context.TransportMessage.IsHandledHere())
            {
                return;
            }

            OrderProcess orderProcess;

            using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName))
            {
                orderProcess = _repository.Get(new Guid(context.TransportMessage.CorrelationId));

                if (orderProcess == null)
                {
                    throw new ApplicationException(
                              string.Format("Could not find an order process with correlation id '{0}'.",
                                            context.TransportMessage.CorrelationId));
                }

                var orderProcessStatus = new OrderProcessStatus("EMail Sent");

                orderProcess.AddStatus(orderProcessStatus);

                _repository.AddStatus(orderProcessStatus, orderProcess.Id);
            }

            context.Send(new CompleteOrderProcessCommand
            {
                OrderProcessId = orderProcess.Id
            }, c => c.Local());
        }
Exemple #2
0
        public void ProcessMessage(IHandlerContext <RegisterOrderProcessCommand> context)
        {
            var message = context.Message;

            var orderProcess = new OrderProcess
            {
                OrderId         = null,
                InvoiceId       = null,
                CustomerName    = message.CustomerName,
                CustomerEMail   = message.CustomerEMail,
                TargetSystem    = message.TargetSystem,
                TargetSystemUri = message.TargetSystemUri
            };

            orderProcess.GenerateOrderNumber();

            foreach (var quotedProduct in message.QuotedProducts)
            {
                orderProcess.AddItem(new OrderProcessItem(quotedProduct.ProductId, quotedProduct.Description,
                                                          quotedProduct.Price));
            }

            var status = new OrderProcessStatus("Cooling Off");

            orderProcess.AddStatus(status);

            using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName))
            {
                _repository.Add(orderProcess);
            }

            context.Publish(new OrderProcessRegisteredEvent
            {
                OrderProcessId  = orderProcess.Id,
                QuotedProducts  = message.QuotedProducts,
                CustomerName    = message.CustomerName,
                CustomerEMail   = message.CustomerEMail,
                OrderNumber     = orderProcess.OrderNumber,
                OrderDate       = orderProcess.DateRegistered,
                OrderTotal      = orderProcess.Total(),
                Status          = status.Status,
                StatusDate      = status.StatusDate,
                TargetSystem    = message.TargetSystem,
                TargetSystemUri = message.TargetSystemUri
            });

            context.Send(new AcceptOrderProcessCommand
            {
                OrderProcessId = orderProcess.Id
            }, c => c.Defer(DateTime.Now.AddSeconds(10)).Local());
        }
        public void ProcessMessage(IHandlerContext <AcceptOrderProcessCommand> context)
        {
            OrderProcess orderProcess;

            using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName))
            {
                orderProcess = _repository.Get(context.Message.OrderProcessId);

                if (orderProcess == null)
                {
                    // Probably cancelled in the meantime.
                    // In a production system you would probably check this against some audit mechanism.
                    return;
                }

                var orderProcessStatus = new OrderProcessStatus("Order Accepted");

                orderProcess.AddStatus(orderProcessStatus);

                _repository.AddStatus(orderProcessStatus, orderProcess.Id);
            }

            var createOrderCommand = new CreateOrderCommand
            {
                OrderNumber   = orderProcess.OrderNumber,
                OrderDate     = orderProcess.DateRegistered,
                CustomerName  = orderProcess.CustomerName,
                CustomerEMail = orderProcess.CustomerEMail
            };

            foreach (var orderProcessItem in orderProcess.OrderProcessItems)
            {
                createOrderCommand.Items.Add(new MessageOrderItem
                {
                    Description = orderProcessItem.Description,
                    Price       = orderProcessItem.Price
                });
            }

            context.Send(createOrderCommand, c => c.WithCorrelationId(orderProcess.Id.ToString()));

            context.Publish(new OrderProcessAcceptedEvent
            {
                OrderProcessId = orderProcess.Id
            });
        }
        public void ProcessMessage(IHandlerContext <OrderCreatedEvent> context)
        {
            if (!context.TransportMessage.IsHandledHere())
            {
                return;
            }

            OrderProcess orderProcess;

            using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName))
            {
                orderProcess = _repository.Get(new Guid(context.TransportMessage.CorrelationId));

                if (orderProcess == null)
                {
                    throw new ApplicationException(
                              string.Format("Could not find an order process with correlation id '{0}'.",
                                            context.TransportMessage.CorrelationId));
                }

                var orderProcessStatus = new OrderProcessStatus("Order Created");

                orderProcess.AddStatus(orderProcessStatus);

                _repository.SaveOrderId(context.Message.OrderId, orderProcess.Id);
                _repository.AddStatus(orderProcessStatus, orderProcess.Id);
            }

            var createInvoiceCommand = new CreateInvoiceCommand
            {
                OrderId             = context.Message.OrderId,
                AccountContactName  = orderProcess.CustomerName,
                AccountContactEMail = orderProcess.CustomerEMail
            };

            foreach (var messageOrderItem in context.Message.Items)
            {
                createInvoiceCommand.Items.Add(new MessageInvoiceItem
                {
                    Description = messageOrderItem.Description,
                    Price       = messageOrderItem.Price
                });
            }

            context.Send(createInvoiceCommand, c => c.WithCorrelationId(orderProcess.Id.ToString()));
        }
Exemple #5
0
        public void ProcessMessage(IHandlerContext <CompleteOrderProcessCommand> context)
        {
            OrderProcess orderProcess;

            using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName))
            {
                orderProcess = _repository.Get(context.Message.OrderProcessId);

                var orderProcessStatus = new OrderProcessStatus("Completed");

                orderProcess.AddStatus(orderProcessStatus);

                _repository.AddStatus(orderProcessStatus, orderProcess.Id);
            }

            context.Publish(new OrderProcessCompletedEvent
            {
                OrderProcessId = orderProcess.Id
            });
        }
        public void ProcessMessage(IHandlerContext <InvoiceCreatedEvent> context)
        {
            if (!context.TransportMessage.IsHandledHere())
            {
                return;
            }

            OrderProcess orderProcess;

            using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName))
            {
                orderProcess = _repository.Get(new Guid(context.TransportMessage.CorrelationId));

                if (orderProcess == null)
                {
                    throw new ApplicationException(
                              string.Format("Could not find an order process with correlation id '{0}'.",
                                            context.TransportMessage.CorrelationId));
                }

                var orderProcessStatus = new OrderProcessStatus("Invoice Created");

                orderProcess.AddStatus(orderProcessStatus);

                _repository.SaveInvoiceId(context.Message.InvoiceId, orderProcess.Id);
                _repository.AddStatus(orderProcessStatus, orderProcess.Id);
            }

            context.Send(new SendEMailCommand
            {
                RecipientEMail = orderProcess.CustomerEMail,
                HtmlBody       =
                    string.Format(
                        "Hello {0},<br/><br/>Your order number {1} has been dispatched.<br/><br/>Regards,<br/>The Shuttle Books Team",
                        orderProcess.CustomerName, orderProcess.OrderNumber)
            });
        }
        public void AddStatus(OrderProcessStatus status)
        {
            Guard.AgainstNull(status, "status");

            _statuses.Add(status);
        }