Back-End

30 mar, 2018

Gerando gráficos de Gantt com PHPProject

Publicidade

Bem, a série de artigos sobre o PHPOffice está quase chegando ao fim. Porém, ainda temos duas bibliotecas para explorar. No artigo de hoje vamos explorar uma delas, que é a PHPProject.

Caso você queira criar arquivos de gestão de projetos em PHP, você deve conhecer esse projeto, e o legal é que você consegue exportar de várias maneiras o projeto, inclusive para um .pptx.

Vamos então parar de enrolação e ver um exemplo prático:

Para instalar a biblioteca no seu projeto, basta dar um composer require.

composer require phpoffice/phpproject

Vamos criar um projeto de artigo do pokemão, que iniciou no dia 25 de março de 2018 e terminaria no dia 29 de março de 2018, com o nome first.php

<?php

require_once 'vendor/autoload.php'; //autoload do composer

use PhpOffice\PhpProject\PhpProject; //importando a classe PHPProject
use PhpOffice\PhpProject\IOFactory; //importanto a classe IOFactory

$objPHPProject = new PhpProject(); //instanciando um novo Project

// Create resource
$objRes1 = $objPHPProject->createResource(); //criando um novo recurso no projeto
$objRes1->setTitle('Pokemao'); //definindo o nome do recurso

// Create a task
$objTask1 = $objPHPProject->createTask(); //criando uma nova tarefa
$objTask1->setName('Artigo sobre PhpProject'); //definindo o nome da tarefa
$objTask1->setStartDate('25-03-2018'); //definindo a data inicial da tarefa
$objTask1->setEndDate('29-03-2018'); //definindo a data final da tarefa
$objTask1->setProgress(0.5); //definindo o progresso da tarefa
$objTask1->addResource($objRes1); //definindo o recurso responsável pela tarefa

$oWriterGAN = IOFactory::createWriter($objPHPProject, 'GanttProject'); //definindo o tipo de modelo de projeto para Gantt
$oWriterGAN->save(__DIR__ . "/first.gan"); //salvando o arquivo como first.gan

Depois, rode o php first.php e será gerado o arquivo first.gan na pasta raiz do seu projeto.

Para abrir o arquivo gerado, usarei o programa GanttProject, mas você pode usar o Microsoft Project ou qualquer outro programa que leia arquivos “.gan”

E no exemplo 2, vamos incluir mais recursos: além do Pokemão, teremos Alefe, Silotto e Vitor. Com tarefas distintas: Pokemão irá fazer o artigo sobre PHPVisio, Alefe já terminou sua palestra para o 7Masters de Laravel, Silotto irá preparar seu novo vídeo para o Tekzoom e Vitor irá revisar o artigo sobre PHPProject. Iremos salvar o arquivo como second.php

<?php

require_once 'vendor/autoload.php'; //autoload do composer

use PhpOffice\PhpProject\PhpProject; //importando a classe PHPProject
use PhpOffice\PhpProject\IOFactory; //importanto a classe IOFactory

$objPHPProject = new PhpProject(); //instanciando um novo Project

// Create resource
$objRes1 = $objPHPProject->createResource(); //criando um novo recurso no projeto
$objRes1->setTitle('Pokemao'); //definindo o nome do recurso

// Create resource
$objRes2 = $objPHPProject->createResource(); //criando um novo recurso no projeto
$objRes2->setTitle('Alefe'); //definindo o nome do recurso

// Create resource
$objRes3 = $objPHPProject->createResource(); //criando um novo recurso no projeto
$objRes3->setTitle('Silotto'); //definindo o nome do recurso

// Create resource
$objRes4 = $objPHPProject->createResource(); //criando um novo recurso no projeto
$objRes4->setTitle('Vitor'); //definindo o nome do recurso

// Create a task
$objTask1 = $objPHPProject->createTask(); //criando uma nova tarefa
$objTask1->setName('Artigo sobre PhpProject'); //definindo o nome da tarefa
$objTask1->setStartDate('25-03-2018'); //definindo a data inicial da tarefa
$objTask1->setEndDate('29-03-2018'); //definindo a data final da tarefa
$objTask1->setProgress(0.8); //definindo o progresso da tarefa
$objTask1->addResource($objRes1); //definindo o recurso responsável pela tarefa

// Create a task
$objTask2 = $objPHPProject->createTask(); //criando uma nova tarefa
$objTask2->setName('Palestra do 7Masters Laravel'); //definindo o nome da tarefa
$objTask2->setStartDate('25-03-2018'); //definindo a data inicial da tarefa
$objTask2->setEndDate('28-03-2018'); //definindo a data final da tarefa
$objTask2->setProgress(1.0); //definindo o progresso da tarefa
$objTask2->addResource($objRes2); //definindo o recurso responsável pela tarefa

// Create a task
$objTask3 = $objPHPProject->createTask(); //criando uma nova tarefa
$objTask3->setName('Novo vídeo do Tekzoom'); //definindo o nome da tarefa
$objTask3->setStartDate('01-04-2018'); //definindo a data inicial da tarefa
$objTask3->setEndDate('05-04-2018'); //definindo a data final da tarefa
$objTask3->setProgress(0.0); //definindo o progresso da tarefa
$objTask3->addResource($objRes3); //definindo o recurso responsável pela tarefa

// Create a task
$objTask4 = $objPHPProject->createTask(); //criando uma nova tarefa
$objTask4->setName('Edição do Artigo de PHPProject'); //definindo o nome da tarefa
$objTask4->setStartDate('29-03-2018'); //definindo a data inicial da tarefa
$objTask4->setEndDate('29-03-2018'); //definindo a data final da tarefa
$objTask4->setProgress(0.0); //definindo o progresso da tarefa
$objTask4->addResource($objRes4); //definindo o recurso responsável pela tarefa

// Create a task
$objTask5 = $objPHPProject->createTask(); //criando uma nova tarefa
$objTask5->setName('Artigo sobre PhpVisio'); //definindo o nome da tarefa
$objTask5->setStartDate('04-04-2018'); //definindo a data inicial da tarefa
$objTask5->setEndDate('06-04-2018'); //definindo a data final da tarefa
$objTask5->setProgress(0.0); //definindo o progresso da tarefa
$objTask5->addResource($objRes1); //definindo o recurso responsável pela tarefa

$oWriterGAN = IOFactory::createWriter($objPHPProject, 'GanttProject'); //definindo o tipo de modelo de projeto para Gantt
$oWriterGAN->save(__DIR__ . "/second.gan"); //salvando o arquivo como first.gan

Depois, basta dar um para gerar o arquivo second.gan:

php second.php

E ficará assim, mais ou menos, o gráfico de Gantt:

E o diagrama de pessoas ficaria assim:

Bem, espero que tenham gostado de saber que também conseguimos fazer gerencia de projetos direto com código PHP. E semana que vem fechamos a série com o PHPVisio. Abraços e até a próxima!