Skip to content

uspdev/workflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Workflow

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.

Features

  • 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.

Installation

1. Instale a biblioteca pelo Composer

Execute o comando abaixo para instalar o pacote:

composer require uspdev/workflow

2. Publicação de configurações e migrations

Execute 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

3. Rodando as migrations

Após a publicação, execute o comando de migração para criar as tabelas necessárias:

php artisan migrate

Configuration

A biblioteca pode ser configurada editando o arquivo config/workflow.php.

Usage

1. Criando uma nova definição de workflow

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.

use Illuminate\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 = new Request($workflowData);

Workflow::criarWorkflowDefinition($request);

2. Exibindo uma definição de workflows

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.

3. Editando uma definição de workflow

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.

public function update(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...
}

4. Apagando uma definição de workflow

Para excluir uma definição, utilize o método Workflow::deletarDefinicaodeWorkflow.

Workflow::deletarDefinicaodeWorkflow($definitionName);

5. Listando as definições de workflows

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.

6. Criando um objeto de workflow

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');

7. Exibindo um objeto de workflow

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'];

8. Exibindo todos os objetos de uma definição

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'];

9. Exibindo todos os objetos criados pelo usuário

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'];

10. Gerenciando transições de estado

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.

11. Apagando um objeto de workflow

Para excluir um objeto, utilize o método Workflow::deletarWorkflow.

Workflow::deletarWorkflow($workflowObjectId);

12. Enviando um formulário

Para fazer a submissão de um formulário de um objeto de workflow, utilize o método Workflow::enviarFormulario

Workflow::enviarFormulario($request);

Contributing

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.

License

This package is licensed under the MIT License. See the LICENSE file for details.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages