A biblioteca Workflow facilita o gerenciamento de fluxos de trabalho em aplicações. Ela permite criar, exibir e gerenciar definições de workflow, transições, estados, formulários associados e outras funcionalidades relacionadas.
- Gerenciamento completo de workflows com definições armazenadas em banco de dados;
- Suporte à biblioteca Symfony Workflow para transições e estados;
- Integração com Laravel 11 em diante;
- Representação visual de workflows.
Execute o comando abaixo para instalar o pacote:
composer require uspdev/workflowExecute os seguintes comandos para publicar as configurações e as migrations da biblioteca:
php artisan vendor:publish --provider="Uspdev\Workflow\WorkflowServiceProvider" --tag=workflow-config php artisan vendor:publish --provider="Uspdev\Workflow\WorkflowServiceProvider" --tag=workflow-migrations php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations" php artisan vendor:publish --tag=forms-migrations php artisan vendor:publish --tag=forms-config Após a publicação, execute o comando de migração para criar as tabelas necessárias:
php artisan migrateA biblioteca pode ser configurada editando o arquivo config/workflow.php.
Utilize o método Workflow::criarWorkflowDefinition para criar uma nova definição na tabela workflow_definitions. Este método valida os dados enviados e os salva no banco de dados se estiverem corretos.
useIlluminate\Http\Request; $workflowData = [ 'name' => 'simples', 'description' => 'Fluxo de workflow simples', 'definition' => json_encode([ 'type' => 'workflow', 'title' => 'Workflow simples', 'name' => 'simples', 'description' => 'Workflow simples de teste', 'places' => [ 'inicio' => [ 'description' => 'Formulário inicial', 'forms' => 'textarea' ], 'processamento1' => [ 'description' => 'Etapa 1 do processo', 'forms' => 'textarea' ], 'fim' => [ 'description' => 'Finalizado', 'forms' => 'textarea', ] ], 'initial_places' => 'inicio', 'transitions' => [ 'tr_inicio_p1' => [ 'label' => 'Enviar solicitação', 'from' => 'inicio', 'to' => 'processamento1' ], 'tr_p1_fim' => [ 'label' => 'Finalizar', 'from' => 'processamento1', 'to' => 'fim' ] ], ]); ]; $request = newRequest($workflowData); Workflow::criarWorkflowDefinition($request);Para exibir uma definição de workflow em uma view, utilize o método Workflow::obterDadosDaDefinicao. Este método retorna os dados estruturados da definição, incluindo seu estado inicial, transições e caminho da representação visual.
$workflowDefinitionData = Workflow::obterDadosDaDefinicao($definitionName); $definitionName = $workflowDefinitionData['definitionName']; $imagePath = $workflowDefinitionData['path']; $formattedJson = $workflowDefinitionData['formattedJson'];Com os dados retornados, você pode exibir o JSON formatado ou a imagem gerada do workflow na interface do usuário.
Utilize o método Workflow::atualizarWorkflow para editar uma definição. Este método também valida os dados enviados e os salva no banco de dados se estiverem corretos.
publicfunctionupdate(Request$request){# Outras validações do update... # As validações do workflow já estão integradas na biblioteca Workflow::atualizarWorkflow($request); # Outras lógicas do update... }Para excluir uma definição, utilize o método Workflow::deletarDefinicaodeWorkflow.
Workflow::deletarDefinicaodeWorkflow($definitionName);Para listar as definições de workflow, utilize o método Workflow::obterTodosWorkflowDefinitions. Este método retorna todas as definições de workflow presentes no banco de dados.
$workflowDefinitions = Workflow::obterTodosWorkflowDefinitions();Com os dados retornados, você pode exibir o JSON formatado ou a imagem gerada do workflow na interface do usuário.
Para instanciar um novo objeto de workflow baseado em uma definição existente, utilize o método Workflow::criarWorkflowObject. Ele inicializa o objeto no estado inicial definido pela configuração.
$WorkflowObject = Workflow::criarWorkflowObject('pull_requests');Para exibir um objeto de workflow em uma view, utilize o método Workflow::obterDadosDoObjeto. Este método retorna os dados estruturados do objeto, incluindo sua definição, transições, formulários, título, atividades e submissões de formulário.
$workflowObjectData = Workflow::obterDadosDoObjeto($workflowObjectId); $workflowObject = $workflowObjectData['workflowObject']; $workflowDefinition = $workflowObjectData['workflowDefinition']; $workflowsTransitions = $workflowObjectData['workflowsTransitions']; $formHtml = $workflowObjectData['formHtml']; $title = $workflowObjectData['title']; $activities = $workflowObjectData['activities']; $formSubmissions = $workflowObjectData['formSubmissions'];Para exibir todos os objetos de uma definição de workflow, utilize o método Workflow::listarWorkflowsdaDefinition. Este método retorna os objetos de workflow, as transições daquela definição e a própria definição
$workflowsToDisplay = Workflow::listarWorkflowsdaDefinition($definitionName); $workflowObjects = $workflowsToDisplay['workflows']; $workflowTransitions = $workflowsToDisplay['workflowsTransitions']; $workflowDefinition = $workflowsToDisplay['workflowDefinition'];Para exibir todos os objetos criados pelo usuário, utilize o método Workflow::listarWorkflowsdoUser. É possível passar um id de usuário como parâmetro, mas se não for fornecido, será utilizado o id do usuário autenticado no sistema. O método retorna os objetos de workflow e os dados do objeto, incluindo estado do dele e sua definição de workflow
$workflowsToDisplay = Workflow::listarWorkflowsdoUser($id); $workflowObjects = $workflowsToDisplay['workflows']; $workflowData = $workflowsToDisplay['workflowData'];Utilize o método Workflow::aplicarTransition para mudar o estado de um objeto de workflow com base nas transições definidas.
Workflow::aplicarTransition($workflowObjectId, 'tr_opened_in_review');Esse método verifica se a transição é válida no estado atual antes de aplicá-la.
Para excluir um objeto, utilize o método Workflow::deletarWorkflow.
Workflow::deletarWorkflow($workflowObjectId);Para fazer a submissão de um formulário de um objeto de workflow, utilize o método Workflow::enviarFormulario
Workflow::enviarFormulario($request);Contributions are welcome! Please follow these steps to contribute:
Fork the repository. Create a new branch (git checkout -b feature/YourFeature). Make your changes and commit them (git commit -m 'Add some feature'). Push to the branch (git push origin feature/YourFeature). Create a new Pull Request.
This package is licensed under the MIT License. See the LICENSE file for details.