Comment ajouter des paramètres à une transition d’un cycle de vie
Prérequis
Afin de pouvoir suivre ce guide, il faut préalablement avoir paramétré un cycle de vie (workflow).
Comment procéder ?
Recommandations
Si vous n’êtes pas familier avec la configuration des transitions de cycles de vie, il est recommandé de lire la documentation associée disponible ici
Lors de la validation d’un PLAT
par un cuisinier, on souhaite que ce cuisinier soit enregistré dans ce Smart Element
PLAT
en tant que validateur. Le validateur doit également pouvoir laisser un commentaire pour justifier la validation.
Modifier la Smart Structure src/vendor/Cogip/Restauratec/SmartStructures/Plat/100-PlatStructure.xml
pour rajouter un
Smart Field validateur
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="PLAT" label="Plat">
<smart:extends ref="CONSOMMABLE"></smart:extends>
<smart:icon file="plat.png" />
<smart:class>Cogip\Restauratec\SmartStructures\Plat\PlatBehavior</smart:class>
<smart:fields reset="true">
<smart:field-set name="consommable_frame" extended="true">
<smart:field-enum name="plat_type" label="Type de plat" relation="Plat_Type" access="Read" />
<smart:field-date name="plat_validity_date" label="Disponible jusqu'au" access="Read" />
<smart:field-text name="plat_static_value" label="Valeur fixe" access="ReadWrite" />
<smart:field-double name="plat_price_difference" label="Différence de prix" access="ReadWrite"/>
<smart:field-date name="plat_dynamic_value" label="Date de création du plat" access="ReadWrite" />
<smart:field-image name="plat_image" label="Image du plat" access="ReadWrite" />
<smart:field-account name="plat_validateur" label="Validateur" access="ReadWrite"/>
</smart:field-set>
</smart:fields>
<smart:hooks />
<smart:defaults reset="true">
<smart:default field="plat_static_value">Ma valeur fixe</smart:default>
<smart:default field="plat_dynamic_value">
<smart:field-callable function="::getDynamicValue"/>
</smart:default>
</smart:defaults>
</smart:structure-configuration>
</smart:config>
Ajouter également un paramètre de cycle de vie en modifiant
src/vendor/Cogip/Restauratec/SmartStructures/Plat/PlatWorkflows/WfamPlatWorkflow/110-WfamPlatParameters.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="WFAM_PLAT">
<smart:parameters>
<smart:field-set name="wplat_params" label="Paramètres" access="ReadWrite" type="frame">
<smart:field-htmltext access="ReadWrite" name="wplat_commentaire" label="commentaire"/>
</smart:field-set>
</smart:parameters>
</smart:structure-configuration>
</smart:config>
Recommandations
Si vous n’êtes pas familier avec les paramètres de cycle de vie et de Smart Structure, vous pouvez consulter la documentation associée disponible ici
Enfin définissons les informations de transition en modifiant le fichier
src/vendor/Cogip/Restauratec/SmartStructures/Plat/PlatWorkflows/WfamPlatWorkflow/WfamPlatBehavior.php
:
<?php
namespace Cogip\Restauratec\SmartStructures\Plat\PlatWorkflows\WfamPlatWorkflow;
use Anakeen\Core\ContextManager;
use Cogip\Restauratec\SmartStructures\Plat\PlatWorkflows\WfamPlatWorkflow\WfamPlatGraphConstant;
use DocHisto;
use SmartStructure\Wdoc;
/**
* Workflow Behavior of WFAM_PLAT elements
*/
class WfamPlatBehavior extends Wdoc
{
public function __construct($dbaccess = '', $id = '', $res = '', $dbid = 0)
{
parent::__construct($dbaccess, $id, $res, $dbid);
$this->useWorkflowGraph(__DIR__ . "/WfamPlatGraph.xml");
$this->getTransition(WfamPlatGraphConstant::transition_t_plat_e1_e2)
->setM0(function () {
$err = "";
// Récupère la liste des rôles que l’utilisateur connecté possède
$userRoles = ContextManager::getCurrentUser()->getRoleList();
$isAuthorized = false;
foreach ($userRoles as $role) {
// Si l’utilisateur possède le rôle ci-dessous, il est autorisé à effectuer la transition ...
if ($role->login == "role_direction") {
$isAuthorized = true;
}
}
// ... sinon cette dernière lui est bloquée
if ($isAuthorized === false) {
$err = "Vous n’êtes pas autorisé à effectuer cette transition";
}
return $err;
})
->setM2(function () {
// Ajoute un message à l’historique du Smart Element ayant subit cette transition
return $this->doc->addHistoryEntry("Mon message personnalisé", DocHisto::MESSAGE);
})->setAsks(function () {
return [
// Smart Field du Smart Element courant
$this->getSmartElement()->getAttribute("plat_validateur"),
// Paramètre du workflow
$this->getAttribute("wplat_commentaire")
];
});
}
}
Vous pouvez maintenant déployer vos modifications :
npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall
Et voir le résultat sur un PLAT
à l’état En test
en étant connecté avec un utilisateur de la direction :
login: pope
password: cogip
Et ensuite ?
Comment personnaliser la fenêtre de transition d’un cycle de vie