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

transition

Et ensuite ?

Comment personnaliser la fenêtre de transition d’un cycle de vie