mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Add signature functionality to workflow entities
Created new files to add signature functionality to the workflow entities, including signature state enums and signature metadata. Added these changes to the migration script as well. Updated EntityWorkflowStep to include a collection for signatures.
This commit is contained in:
parent
c9d54a5fea
commit
3db4fff80d
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\MainBundle\Entity\Workflow;
|
||||
|
||||
enum EntityWorkflowSignatureStateEnum: string
|
||||
{
|
||||
case PENDING = 'pending';
|
||||
case SIGNED = 'signed';
|
||||
case REJECTED = 'rejected';
|
||||
case CANCELED = 'canceled';
|
||||
}
|
@ -42,19 +42,25 @@ class EntityWorkflowStep
|
||||
private array $destEmail = [];
|
||||
|
||||
/**
|
||||
* @var Collection<User>
|
||||
* @var Collection<int, User>
|
||||
*/
|
||||
#[ORM\ManyToMany(targetEntity: User::class)]
|
||||
#[ORM\JoinTable(name: 'chill_main_workflow_entity_step_user')]
|
||||
private Collection $destUser;
|
||||
|
||||
/**
|
||||
* @var Collection<User>
|
||||
* @var Collection<int, User>
|
||||
*/
|
||||
#[ORM\ManyToMany(targetEntity: User::class)]
|
||||
#[ORM\JoinTable(name: 'chill_main_workflow_entity_step_user_by_accesskey')]
|
||||
private Collection $destUserByAccessKey;
|
||||
|
||||
/**
|
||||
* @var Collection <int, EntityWorkflowStepSignature>
|
||||
*/
|
||||
#[ORM\OneToMany(mappedBy: 'step', targetEntity: EntityWorkflowStepSignature::class, cascade: ['persist'], orphanRemoval: true)]
|
||||
private Collection $signatures;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: EntityWorkflow::class, inversedBy: 'steps')]
|
||||
private ?EntityWorkflow $entityWorkflow = null;
|
||||
|
||||
@ -97,6 +103,7 @@ class EntityWorkflowStep
|
||||
$this->ccUser = new ArrayCollection();
|
||||
$this->destUser = new ArrayCollection();
|
||||
$this->destUserByAccessKey = new ArrayCollection();
|
||||
$this->signatures = new ArrayCollection();
|
||||
$this->accessKey = bin2hex(openssl_random_pseudo_bytes(32));
|
||||
}
|
||||
|
||||
@ -136,6 +143,29 @@ class EntityWorkflowStep
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal use @see{EntityWorkflowStepSignature}'s constructor instead
|
||||
*/
|
||||
public function addSignature(EntityWorkflowStepSignature $signature): self
|
||||
{
|
||||
if (!$this->signatures->contains($signature)) {
|
||||
$this->signatures[] = $signature;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeSignature(EntityWorkflowStepSignature $signature): self
|
||||
{
|
||||
if ($this->signatures->contains($signature)) {
|
||||
$this->signatures->removeElement($signature);
|
||||
}
|
||||
|
||||
$signature->detachEntityWorkflowStep();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getAccessKey(): string
|
||||
{
|
||||
return $this->accessKey;
|
||||
@ -198,6 +228,14 @@ class EntityWorkflowStep
|
||||
return $this->entityWorkflow;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, EntityWorkflowStepSignature>
|
||||
*/
|
||||
public function getSignatures(): Collection
|
||||
{
|
||||
return $this->signatures;
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
|
@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\MainBundle\Entity\Workflow;
|
||||
|
||||
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
|
||||
use Chill\MainBundle\Doctrine\Model\TrackCreationTrait;
|
||||
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
|
||||
use Chill\MainBundle\Doctrine\Model\TrackUpdateTrait;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity]
|
||||
#[ORM\Table(name: 'chill_main_workflow_entity_step_signature')]
|
||||
class EntityWorkflowStepSignature implements TrackCreationInterface, TrackUpdateInterface
|
||||
{
|
||||
use TrackCreationTrait;
|
||||
use TrackUpdateTrait;
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER, unique: true)]
|
||||
#[ORM\GeneratedValue(strategy: 'AUTO')]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: User::class)]
|
||||
#[ORM\JoinColumn(nullable: true)]
|
||||
private ?User $userSigner = null;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: Person::class)]
|
||||
#[ORM\JoinColumn(nullable: true)]
|
||||
private ?Person $personSigner = null;
|
||||
|
||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::STRING, length: 50, nullable: false, enumType: EntityWorkflowSignatureStateEnum::class)]
|
||||
private EntityWorkflowSignatureStateEnum $state = EntityWorkflowSignatureStateEnum::PENDING;
|
||||
|
||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::DATETIMETZ_IMMUTABLE, nullable: true, options: ['default' => null])]
|
||||
private ?\DateTimeImmutable $stateDate = null;
|
||||
|
||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON, nullable: false, options: ['default' => '[]'])]
|
||||
private array $signatureMetadata = [];
|
||||
|
||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER, nullable: true, options: ['default' => null])]
|
||||
private ?int $zoneSignatureIndex = null;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: EntityWorkflowStep::class, inversedBy: 'signatures')]
|
||||
#[ORM\JoinColumn(nullable: false)]
|
||||
private ?EntityWorkflowStep $step = null;
|
||||
|
||||
public function __construct(
|
||||
EntityWorkflowStep $step,
|
||||
User|Person $signer,
|
||||
) {
|
||||
$this->step = $step;
|
||||
$step->addSignature($this);
|
||||
$this->setSigner($signer);
|
||||
}
|
||||
|
||||
private function setSigner(User|Person $signer): void
|
||||
{
|
||||
if ($signer instanceof User) {
|
||||
$this->userSigner = $signer;
|
||||
} else {
|
||||
$this->personSigner = $signer;
|
||||
}
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getStep(): EntityWorkflowStep
|
||||
{
|
||||
return $this->step;
|
||||
}
|
||||
|
||||
public function getSigner(): User|Person
|
||||
{
|
||||
if (null !== $this->userSigner) {
|
||||
return $this->userSigner;
|
||||
}
|
||||
|
||||
return $this->personSigner;
|
||||
}
|
||||
|
||||
public function getSignatureMetadata(): array
|
||||
{
|
||||
return $this->signatureMetadata;
|
||||
}
|
||||
|
||||
public function setSignatureMetadata(array $signatureMetadata): EntityWorkflowStepSignature
|
||||
{
|
||||
$this->signatureMetadata = $signatureMetadata;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getState(): EntityWorkflowSignatureStateEnum
|
||||
{
|
||||
return $this->state;
|
||||
}
|
||||
|
||||
public function setState(EntityWorkflowSignatureStateEnum $state): EntityWorkflowStepSignature
|
||||
{
|
||||
$this->state = $state;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getStateDate(): ?\DateTimeImmutable
|
||||
{
|
||||
return $this->stateDate;
|
||||
}
|
||||
|
||||
public function setStateDate(?\DateTimeImmutable $stateDate): EntityWorkflowStepSignature
|
||||
{
|
||||
$this->stateDate = $stateDate;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getZoneSignatureIndex(): ?int
|
||||
{
|
||||
return $this->zoneSignatureIndex;
|
||||
}
|
||||
|
||||
public function setZoneSignatureIndex(?int $zoneSignatureIndex): EntityWorkflowStepSignature
|
||||
{
|
||||
$this->zoneSignatureIndex = $zoneSignatureIndex;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Detach from the @see{EntityWorkflowStep}.
|
||||
*
|
||||
* @internal used internally to remove the current signature
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function detachEntityWorkflowStep(): self
|
||||
{
|
||||
$this->step = null;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\MainBundle\Repository\Workflow;
|
||||
|
||||
use Chill\MainBundle\Entity\Workflow\EntityWorkflowStepSignature;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\Persistence\ObjectRepository;
|
||||
|
||||
/**
|
||||
* @template-implements ObjectRepository<EntityWorkflowStepSignature>
|
||||
*/
|
||||
class EntityWorkflowStepSignatureRepository implements ObjectRepository
|
||||
{
|
||||
private \Doctrine\ORM\EntityRepository $repository;
|
||||
|
||||
public function __construct(EntityManagerInterface $entityManager)
|
||||
{
|
||||
$this->repository = $entityManager->getRepository(EntityWorkflowStepSignature::class);
|
||||
}
|
||||
|
||||
public function find($id): ?EntityWorkflowStepSignature
|
||||
{
|
||||
return $this->repository->find($id);
|
||||
}
|
||||
|
||||
public function findAll(): array
|
||||
{
|
||||
return $this->repository->findAll();
|
||||
}
|
||||
|
||||
public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array
|
||||
{
|
||||
return $this->findBy($criteria, $orderBy, $limit, $offset);
|
||||
}
|
||||
|
||||
public function findOneBy(array $criteria): ?EntityWorkflowStepSignature
|
||||
{
|
||||
return $this->findOneBy($criteria);
|
||||
}
|
||||
|
||||
public function getClassName(): string
|
||||
{
|
||||
return EntityWorkflowStepSignature::class;
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\MainBundle\Tests\Entity\Workflow;
|
||||
|
||||
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
||||
use Chill\MainBundle\Entity\Workflow\EntityWorkflowStepSignature;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class EntityWorkflowStepSignatureTest extends KernelTestCase
|
||||
{
|
||||
private EntityManagerInterface $entityManager;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
self::bootKernel();
|
||||
$this->entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
}
|
||||
|
||||
public function testConstruct()
|
||||
{
|
||||
$workflow = new EntityWorkflow();
|
||||
$workflow->setWorkflowName('vendee_internal')
|
||||
->setRelatedEntityId(0)
|
||||
->setRelatedEntityClass(AccompanyingPeriodWorkEvaluationDocument::class);
|
||||
|
||||
$step = $workflow->getCurrentStep();
|
||||
|
||||
$person = $this->entityManager->createQuery('SELECT p FROM '.Person::class.' p')
|
||||
->setMaxResults(1)
|
||||
->getSingleResult();
|
||||
|
||||
$signature = new EntityWorkflowStepSignature($step, $person);
|
||||
|
||||
self::assertCount(1, $step->getSignatures());
|
||||
self::assertSame($signature, $step->getSignatures()->first());
|
||||
|
||||
$this->entityManager->getConnection()->beginTransaction();
|
||||
$this->entityManager->persist($workflow);
|
||||
$this->entityManager->persist($step);
|
||||
$this->entityManager->persist($signature);
|
||||
|
||||
$this->entityManager->flush();
|
||||
$this->entityManager->getConnection()->commit();
|
||||
|
||||
$this->entityManager->clear();
|
||||
|
||||
$signatureBis = $this->entityManager->find(EntityWorkflowStepSignature::class, $signature->getId());
|
||||
|
||||
self::assertEquals($signature->getId(), $signatureBis->getId());
|
||||
self::assertEquals($step->getId(), $signatureBis->getStep()->getId());
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\Migrations\Main;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
final class Version20240628095159 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Add signatures to workflow';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
$this->addSql('CREATE SEQUENCE chill_main_workflow_entity_step_signature_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
|
||||
$this->addSql('CREATE TABLE chill_main_workflow_entity_step_signature (id INT NOT NULL, step_id INT NOT NULL, '.
|
||||
'state VARCHAR(50) NOT NULL, stateDate TIMESTAMP(0) WITH TIME ZONE DEFAULT NULL, signatureMetadata JSON DEFAULT \'[]\' NOT NULL,'.
|
||||
' zoneSignatureIndex INT DEFAULT NULL, createdAt TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, updatedAt TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL,'.
|
||||
' userSigner_id INT DEFAULT NULL, personSigner_id INT DEFAULT NULL, createdBy_id INT DEFAULT NULL, updatedBy_id INT DEFAULT NULL, PRIMARY KEY(id))');
|
||||
$this->addSql('CREATE INDEX IDX_C47D4BA3D934E3A4 ON chill_main_workflow_entity_step_signature (userSigner_id)');
|
||||
$this->addSql('CREATE INDEX IDX_C47D4BA3ADFFA293 ON chill_main_workflow_entity_step_signature (personSigner_id)');
|
||||
$this->addSql('CREATE INDEX IDX_C47D4BA373B21E9C ON chill_main_workflow_entity_step_signature (step_id)');
|
||||
$this->addSql('CREATE INDEX IDX_C47D4BA33174800F ON chill_main_workflow_entity_step_signature (createdBy_id)');
|
||||
$this->addSql('CREATE INDEX IDX_C47D4BA365FF1AEC ON chill_main_workflow_entity_step_signature (updatedBy_id)');
|
||||
$this->addSql('COMMENT ON COLUMN chill_main_workflow_entity_step_signature.stateDate IS \'(DC2Type:datetimetz_immutable)\'');
|
||||
$this->addSql('COMMENT ON COLUMN chill_main_workflow_entity_step_signature.createdAt IS \'(DC2Type:datetime_immutable)\'');
|
||||
$this->addSql('COMMENT ON COLUMN chill_main_workflow_entity_step_signature.updatedAt IS \'(DC2Type:datetime_immutable)\'');
|
||||
$this->addSql('ALTER TABLE chill_main_workflow_entity_step_signature ADD CONSTRAINT FK_C47D4BA3D934E3A4 FOREIGN KEY (userSigner_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||
$this->addSql('ALTER TABLE chill_main_workflow_entity_step_signature ADD CONSTRAINT FK_C47D4BA3ADFFA293 FOREIGN KEY (personSigner_id) REFERENCES chill_person_person (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||
$this->addSql('ALTER TABLE chill_main_workflow_entity_step_signature ADD CONSTRAINT FK_C47D4BA373B21E9C FOREIGN KEY (step_id) REFERENCES chill_main_workflow_entity_step (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||
$this->addSql('ALTER TABLE chill_main_workflow_entity_step_signature ADD CONSTRAINT FK_C47D4BA33174800F FOREIGN KEY (createdBy_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||
$this->addSql('ALTER TABLE chill_main_workflow_entity_step_signature ADD CONSTRAINT FK_C47D4BA365FF1AEC FOREIGN KEY (updatedBy_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
$this->addSql('DROP SEQUENCE chill_main_workflow_entity_step_signature_id_seq CASCADE');
|
||||
$this->addSql('DROP TABLE chill_main_workflow_entity_step_signature');
|
||||
}
|
||||
}
|
294
tests/app/config/packages/workflow_chill.yaml
Normal file
294
tests/app/config/packages/workflow_chill.yaml
Normal file
@ -0,0 +1,294 @@
|
||||
framework:
|
||||
workflows:
|
||||
vendee_internal:
|
||||
type: state_machine
|
||||
metadata:
|
||||
related_entity:
|
||||
- Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument
|
||||
- Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork
|
||||
- Chill\DocStoreBundle\Entity\AccompanyingCourseDocument
|
||||
label:
|
||||
fr: 'Suivi'
|
||||
support_strategy: Chill\MainBundle\Workflow\RelatedEntityWorkflowSupportsStrategy
|
||||
initial_marking: 'initial'
|
||||
marking_store:
|
||||
property: step
|
||||
type: method
|
||||
places:
|
||||
initial:
|
||||
metadata:
|
||||
label:
|
||||
fr: Étape initiale
|
||||
attenteModification:
|
||||
metadata:
|
||||
label:
|
||||
fr: En attente de modification du document
|
||||
validationFilterInputLabels:
|
||||
forward: {fr: Modification effectuée}
|
||||
backward: {fr: Pas de modification effectuée}
|
||||
neutral: {fr: Autre}
|
||||
attenteMiseEnForme:
|
||||
metadata:
|
||||
label:
|
||||
fr: En attente de mise en forme
|
||||
validationFilterInputLabels:
|
||||
forward: {fr: Mise en forme terminée}
|
||||
backward: {fr: Pas de mise en forme effectuée}
|
||||
neutral: {fr: Autre}
|
||||
attenteVisa:
|
||||
metadata:
|
||||
label:
|
||||
fr: En attente de visa
|
||||
validationFilterInputLabels:
|
||||
forward: {fr: Visa accordé}
|
||||
backward: {fr: Visa refusé}
|
||||
neutral: {fr: Autre}
|
||||
attenteSignature:
|
||||
metadata:
|
||||
label:
|
||||
fr: En attente de signature
|
||||
validationFilterInputLabels:
|
||||
forward: {fr: Signature accordée}
|
||||
backward: {fr: Signature refusée}
|
||||
neutral: {fr: Autre}
|
||||
attenteTraitement:
|
||||
metadata:
|
||||
label:
|
||||
fr: En attente de traitement
|
||||
validationFilterInputLabels:
|
||||
forward: {fr: Traitement terminé favorablement}
|
||||
backward: {fr: Traitement terminé défavorablement}
|
||||
neutral: {fr: Autre}
|
||||
attenteEnvoi:
|
||||
metadata:
|
||||
label:
|
||||
fr: En attente d'envoi
|
||||
validationFilterInputLabels:
|
||||
forward: {fr: Document envoyé}
|
||||
backward: {fr: Document non envoyé}
|
||||
neutral: {fr: Autre}
|
||||
attenteValidationMiseEnForme:
|
||||
metadata:
|
||||
label:
|
||||
fr: En attente de validation de la mise en forme
|
||||
validationFilterInputLabels:
|
||||
forward: {fr: Validation de la mise en forme}
|
||||
backward: {fr: Refus de validation de la mise en forme}
|
||||
neutral: {fr: Autre}
|
||||
annule:
|
||||
metadata:
|
||||
isFinal: true
|
||||
isFinalPositive: false
|
||||
label:
|
||||
fr: Annulé
|
||||
final:
|
||||
metadata:
|
||||
isFinal: true
|
||||
isFinalPositive: true
|
||||
label:
|
||||
fr: Finalisé
|
||||
transitions:
|
||||
# transition qui avancent
|
||||
demandeModificationDocument:
|
||||
from:
|
||||
- initial
|
||||
to: attenteModification
|
||||
metadata:
|
||||
label:
|
||||
fr: Demande de modification du document
|
||||
isForward: true
|
||||
demandeMiseEnForme:
|
||||
from:
|
||||
- initial
|
||||
- attenteModification
|
||||
to: attenteMiseEnForme
|
||||
metadata:
|
||||
label:
|
||||
fr: Demande de mise en forme
|
||||
isForward: true
|
||||
demandeValidationMiseEnForme:
|
||||
from:
|
||||
- attenteMiseEnForme
|
||||
to: attenteValidationMiseEnForme
|
||||
metadata:
|
||||
label:
|
||||
fr: Demande de validation de la mise en forme
|
||||
isForward: true
|
||||
demandeVisa:
|
||||
from:
|
||||
- initial
|
||||
- attenteModification
|
||||
- attenteMiseEnForme
|
||||
- attenteValidationMiseEnForme
|
||||
to: attenteVisa
|
||||
metadata:
|
||||
label:
|
||||
fr: Demande de visa
|
||||
isForward: true
|
||||
demandeSignature:
|
||||
from:
|
||||
- initial
|
||||
- attenteModification
|
||||
- attenteMiseEnForme
|
||||
- attenteValidationMiseEnForme
|
||||
- attenteVisa
|
||||
to: attenteSignature
|
||||
metadata:
|
||||
label: {fr: Demande de signature}
|
||||
isForward: true
|
||||
demandeTraitement:
|
||||
from:
|
||||
- initial
|
||||
- attenteModification
|
||||
- attenteMiseEnForme
|
||||
- attenteValidationMiseEnForme
|
||||
- attenteVisa
|
||||
- attenteSignature
|
||||
to: attenteTraitement
|
||||
metadata:
|
||||
label: {fr: Demande de traitement}
|
||||
isForward: true
|
||||
demandeEnvoi:
|
||||
from:
|
||||
- initial
|
||||
- attenteModification
|
||||
- attenteMiseEnForme
|
||||
- attenteValidationMiseEnForme
|
||||
- attenteVisa
|
||||
- attenteSignature
|
||||
- attenteTraitement
|
||||
to: attenteEnvoi
|
||||
metadata:
|
||||
label: {fr: Demande d'envoi}
|
||||
isForward: true
|
||||
annulation:
|
||||
from:
|
||||
- initial
|
||||
- attenteModification
|
||||
- attenteMiseEnForme
|
||||
- attenteValidationMiseEnForme
|
||||
- attenteVisa
|
||||
- attenteSignature
|
||||
- attenteTraitement
|
||||
- attenteEnvoi
|
||||
to: annule
|
||||
metadata:
|
||||
label: {fr: Annulation}
|
||||
isForward: false
|
||||
# transitions qui répètent l'étape
|
||||
demandeMiseEnFormeSupplementaire:
|
||||
from:
|
||||
- attenteMiseEnForme
|
||||
- attenteValidationMiseEnForme
|
||||
to: attenteMiseEnForme
|
||||
metadata:
|
||||
label: {fr: Demande de mise en forme supplémentaire}
|
||||
demandeVisaSupplementaire:
|
||||
from:
|
||||
- attenteVisa
|
||||
to: attenteVisa
|
||||
metadata:
|
||||
label: {fr: Demande de visa supplémentaire}
|
||||
isForward: true
|
||||
demandeSignatureSupplementaire:
|
||||
from:
|
||||
- attenteSignature
|
||||
to: attenteSignature
|
||||
metadata:
|
||||
label: {fr: Demande de signature supplémentaire}
|
||||
demandeTraitementSupplementaire:
|
||||
from:
|
||||
- attenteTraitement
|
||||
to: attenteTraitement
|
||||
metadata:
|
||||
label: {fr: Demande de traitement supplémentaire}
|
||||
# transitions qui renvoient vers une étape précédente
|
||||
refusEtModificationDocument:
|
||||
from:
|
||||
- attenteVisa
|
||||
- attenteSignature
|
||||
- attenteTraitement
|
||||
- attenteEnvoi
|
||||
to: attenteModification
|
||||
metadata:
|
||||
label:
|
||||
fr: Refus et demande de modification du document
|
||||
isForward: false
|
||||
refusEtDemandeMiseEnForme:
|
||||
from:
|
||||
- attenteVisa
|
||||
- attenteSignature
|
||||
- attenteTraitement
|
||||
- attenteEnvoi
|
||||
to: attenteMiseEnForme
|
||||
metadata:
|
||||
label: {fr: Refus et demande de mise en forme}
|
||||
isForward: false
|
||||
refusEtDemandeVisa:
|
||||
from:
|
||||
- attenteSignature
|
||||
- attenteTraitement
|
||||
- attenteEnvoi
|
||||
to: attenteVisa
|
||||
metadata:
|
||||
label: {fr: Refus et demande de visa}
|
||||
isForward: false
|
||||
refusEtDemandeSignature:
|
||||
from:
|
||||
- attenteTraitement
|
||||
- attenteEnvoi
|
||||
to: attenteSignature
|
||||
metadata:
|
||||
label: {fr: Refus et demande de signature}
|
||||
isForward: false
|
||||
refusEtDemandeTraitement:
|
||||
from:
|
||||
- attenteEnvoi
|
||||
to: attenteTraitement
|
||||
metadata:
|
||||
label: {fr: Refus et demande de traitement}
|
||||
isForward: false
|
||||
# transition vers final
|
||||
initialToFinal:
|
||||
from:
|
||||
- initial
|
||||
to: final
|
||||
metadata:
|
||||
label: {fr: Clotûre immédiate et cloture positive}
|
||||
isForward: true
|
||||
attenteMiseEnFormeToFinal:
|
||||
from:
|
||||
- attenteMiseEnForme
|
||||
- attenteValidationMiseEnForme
|
||||
to: final
|
||||
metadata:
|
||||
label: {fr: Mise en forme terminée et cloture positive}
|
||||
isForward: true
|
||||
attenteVisaToFinal:
|
||||
from:
|
||||
- attenteVisa
|
||||
to: final
|
||||
metadata:
|
||||
label: {fr: Accorde le visa et cloture positive}
|
||||
isForward: true
|
||||
attenteSignatureToFinal:
|
||||
from:
|
||||
- attenteSignature
|
||||
to: final
|
||||
metadata:
|
||||
label: {fr: Accorde la signature et cloture positive}
|
||||
isForward: true
|
||||
attenteTraitementToFinal:
|
||||
from:
|
||||
- attenteTraitement
|
||||
to: final
|
||||
metadata:
|
||||
label: {fr: Traitement terminé et cloture postive}
|
||||
isForward: true
|
||||
attenteEnvoiToFinal:
|
||||
from:
|
||||
- attenteEnvoi
|
||||
to: final
|
||||
metadata:
|
||||
label: {fr: Envoyé et cloture postive}
|
||||
isForward: true
|
Loading…
x
Reference in New Issue
Block a user