Adding context

This commit is contained in:
Marc Ducobu 2021-08-12 23:55:01 +02:00
parent 8df4c93c97
commit cbdf976885
5 changed files with 174 additions and 2 deletions

View File

@ -0,0 +1,29 @@
<?php
namespace Chill\DocGeneratorBundle\Context;
/**
* Interface for context for for document generation
*/
interface DocGeneratorContextInterface
{
/**
* has form
*/
public function hasForm(): bool;
/**
* Generate the form that display
*/
public function getForm($entity);
/**
* True of false which entity supports
*/
public function supports(string $entityClass): bool;
/**
* Get the data that will be injected to the generated document
*/
public function getData($entity): array;
}

View File

@ -0,0 +1,57 @@
<?php
namespace Chill\DocGeneratorBundle\Context;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
/**
* Context that display a form to select a member of a houseHold
*/
class HouseholdMemberSelectionContext implements DocGeneratorContextInterface
{
/**
* has form
*/
public function hasForm(): bool {
return true;
}
/**
* Generate the form that display
*/
public function getForm($entity) {
// TODO Get FormFactory and create a form
// access to the house hold for the AccompanyingPeriod pr the SocialAction
// and configure the form to select member of the family
}
/**
* True of false which entity supports
*/
public function supports(string $entityClass): bool {
return
($entityClass == AccompanyingPeriod::class) ||
($entityClass == SocialAction::class);
}
/**
* Get the data that will be injected to the generated document
*/
public function getData($entity): array {
$ret = [];
if(get_class($entity) == AccompanyingPeriod::class) {
// TODO mettre ça dans un service
$ret = ['AccompanyingPeriod' => $entity];
} elseif(get_class($entity) == SocialAction::class) {
$ret = ['SocialAction' => $entity];
}
// TODO AJOUTER LES DONNES DU FORMULAIRE
return $ret;
}
}

View File

@ -23,11 +23,15 @@ class LoadDocGeneratorTemplate extends AbstractFixture
[
'name' => ['fr' => 'FORMULAIRE AEB'],
'desc' => 'stocké sur openstack comedienbe',
'file' => 'FORMULAIRE_AEB.docx'
'file' => 'FORMULAIRE_AEB.docx',
'context' => 'Chill\DocGeneratorBundle\Context\HouseholdMemberSelectionContext',
'entities' => ['Chill\PersonBundle\Entity\AccompanyingPeriod', 'Chill\PersonBundle\Entity\SocialWork\SocialAction'],
], [
'name' => ['fr' => 'AIDE ALIMENTAIRE'],
'desc' => 'stocké sur openstack comedienbe',
'file' => 'AIDE_ALIMENTAIRE.docx'
'file' => 'AIDE_ALIMENTAIRE.docx',
'context' => 'Chill\DocGeneratorBundle\Context\HouseholdMemberSelectionContext',
'entities' => ['Chill\PersonBundle\Entity\AccompanyingPeriod', 'Chill\PersonBundle\Entity\SocialWork\SocialAction'],
],
];
@ -39,6 +43,8 @@ class LoadDocGeneratorTemplate extends AbstractFixture
->setName($template['name'])
->setDescription($template['desc'])
->setFile($template['file'])
->setContext($template['context'])
->setEntities($template['entities'])
;
$manager->persist($newTemplate);

View File

@ -29,6 +29,28 @@ class DocGeneratorTemplate
*/
private string $description;
/**
* @ORM\Column(type="simple_array")
*
* Class name of the entities for which this template can be used
*
* so if $entities = ['Chill\PersonBundle\Entity\AccompanyingPeriod', 'Chill\PersonBundle\Entity\SocialWork\SocialAction']
* this template can be selected for an AccompanyingPeriod or a SocialAction
*/
private array $entities = [];
/**
* @ORM\Column(type="string", length=255)
*
* Class name of the context to use
*
* so if $context = ''
* this template will use '' as context
*/
private string $context;
/**
* @ORM\Column(type="string", length=255)
*/
@ -74,4 +96,28 @@ class DocGeneratorTemplate
return $this;
}
public function getEntities(): ?array
{
return $this->entities;
}
public function setEntities(array $entities): self
{
$this->entities = $entities;
return $this;
}
public function getContext(): ?string
{
return $this->context;
}
public function setContext(string $context): self
{
$this->context = $context;
return $this;
}
}

View File

@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Chill\Migrations\DocGenerator;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Add entities and context fields to DocGenTemplate
*/
final class Version20210812214310 extends AbstractMigration
{
public function getDescription(): string
{
return 'Add entities and context fields to DocGenTemplate';
}
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE chill_docgen_template ADD entities TEXT');
$this->addSql('ALTER TABLE chill_docgen_template ADD context VARCHAR(255)');
$this->addSql('COMMENT ON COLUMN chill_docgen_template.entities IS \'(DC2Type:simple_array)\'');
$this->addSql('COMMENT ON COLUMN chill_docgen_template.name IS \'(DC2Type:json_array)\'');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE chill_docgen_template DROP entities');
$this->addSql('ALTER TABLE chill_docgen_template DROP context');
$this->addSql('COMMENT ON COLUMN chill_docgen_template.name IS NULL');
}
}