public void SubmitChanges(Domain.Transactional.DocumentEntities.Invoice document, BasicConfig config) { int sequence = 0; var envelope = new CommandEnvelope(); envelope.Initialize(document); List<DocumentCommand> commandsToExecute = document.GetDocumentCommandsToExecute(); CreateCommand createCommand; //= commandsToExecute.OfType<CreateCommand>().First(); if (TryGetCreateCommand(commandsToExecute, out createCommand)) { envelope.CommandsList.Add(new CommandEnvelopeItem(++sequence, createCommand)); //_commandRouter.RouteDocumentCommand(createCommand); _auditLogWFManager.AuditLogEntry("Invoice", string.Format("Created Invoice: {0}; for Order: {1}", document.Id, document.OrderId)); } List<AfterCreateCommand> lineItemCommands; if (TryGetAfterCreateCommands(commandsToExecute, out lineItemCommands)) { foreach (var item in lineItemCommands) { envelope.CommandsList.Add(new CommandEnvelopeItem(++sequence, item)); // _commandRouter.RouteDocumentCommand(item); var _item = item as AddInvoiceLineItemCommand; _auditLogWFManager.AuditLogEntry("Invoice", string.Format( "Added Product: {0}; Quantity: {1}; for Invoice: {2};", _item.ProductId, _item.Qty, document.Id)); } } ConfirmCommand confirmCommand; if (TryGetConfirmCommand(commandsToExecute, out confirmCommand)) { envelope.CommandsList.Add(new CommandEnvelopeItem(++sequence, confirmCommand)); // _commandRouter.RouteDocumentCommand(confirmCommand); //send notification // _notifyService.SubmitInvoiceNotification(document); _auditLogWFManager.AuditLogEntry("Invoice", string.Format("Confirmed Invoice: {0}; for Order: {1}", document.Id, document.OrderId)); } _commandEnvelopeRouter.RouteCommandEnvelope(envelope); document.CallClearCommands(); }