public void Execute(CreateDisbursementNoteCommand command)
        {
            _log.InfoFormat("Execute {1} - Command Id {0} ", command.CommandId, command.GetType().ToString());

            try
            {
                bool already_Exist = _documentRepository.GetById(command.DocumentId) != null;

                if (already_Exist)
                    return;
                DisbursementNote disbursementNote = _documentFactory.CreateDocument
                    (
                    command.DocumentId,
                    DocumentType.DisbursementNote,
                    _costCenterRepository.GetById(command.DocumentIssuerCostCentreId),
                    _costCenterRepository.GetById(command.DocumentRecipientCostCentreId),
                    _userRepository.GetById(command.DocIssuerUserId)
                    ,
                    "") as DisbursementNote;
                disbursementNote.SendDateTime = command.SendDateTime;
                disbursementNote.DocumentDateIssued = command.CommandCreatedDateTime;
                _documentRepository.Save(disbursementNote);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Error Execute {1} - Command Id {0} ", command.CommandId, command.GetType().ToString());
                _log.Error("CreateDisbursementNoteCommandHandler exception", ex);
                throw ;
            }
        }
        public void SubmitChanges(DisbursementNote document,BasicConfig config )
        {
            //send commands
            var coc = new CreateDisbursementNoteCommand(
                Guid.NewGuid(),                
                document.Id,              
                document.DocumentIssuerUser.Id,               
                config.CostCentreId,               
                0,               
                document.DocumentIssuerCostCentreApplicationId,               
                document.DocumentIssuerCostCentre.Id,               
                document.DocumentRecipientCostCentre.Id, 
                document.DocumentIssuerUser.Id,
                document.DocumentParentId,document.DocumentDateIssued, 
                document.DocumentReference
             );

            _commandRouter.RouteDocumentCommand(coc);
            _auditLogWFManager.AuditLogEntry("Disbursment Note", string.Format("Created Disbursement Note document: {0}", document.Id));

            foreach (var item in document.LineItems)
            {
                var ali = new AddDisbursementNoteLineItemCommand(
                    Guid.NewGuid(),
                    document.Id,
                    document.DocumentIssuerUser.Id,
                    document.DocumentIssuerCostCentre.Id,
                    0,
                    config.CostCentreApplicationId,
                    0,
                    item.Product.Id,
                    item.Qty,
                    item.Value,document.DocumentParentId);
                _commandRouter.RouteDocumentCommand(ali);
                _auditLogWFManager.AuditLogEntry("Disbursment Note", string.Format("Added Product: {1}; Quantity: {2}; Value: {3}; to Disbursement Note document: {0}", document.Id,item.Product.Description,item.Qty,item.Value));

            }

            var co = new ConfirmDisbursementNoteCommand(Guid.NewGuid(), document.Id,
                document.DocumentIssuerUser.Id,
                document.DocumentIssuerCostCentre.Id, 0,
                config.CostCentreApplicationId,document.DocumentParentId);

            _commandRouter.RouteDocumentCommand(co);
            _auditLogWFManager.AuditLogEntry("Disbursment Note", string.Format("Confirmed Disbursement Note document: {0}", document.Id));
        }