Comment définir un paramètre de Smart Structure

Prérequis

Afin de pouvoir suivre ce guide, il faut préalablement avoir créé un formulaire (Une Smart Structure).

Comment procéder ?

Recommandation

Si vous n’êtes pas familier avec les paramètres de Smart Structure et leur fonctionnement, il est fortement recommandé de lire la documentation associée disponible ici

La TVA s’applique sur tous les consommables vendus dans le restaurant. Nous allons la gérer au travers des paramètres en deux étapes :

  1. Déclarer le paramètre associé à la TVA dans la Smart Structure CONSOMMABLE : src/vendor/<vendorName>/<moduleName>/Consommable/110-ConsommableParameters.xml



 
 
 
 
 




<?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="CONSOMMABLE">
        <smart:parameters>
            <smart:field-set name="consommable_param_f" type="frame" access="ReadWrite" label="TVA">
                <smart:field-double name="consommable_vat" access="ReadWrite" label="TVA"/>
            </smart:field-set>
        </smart:parameters>
        <smart:defaults />
    </smart:structure-configuration>
</smart:config>
  1. Les plats et boissons, sont des enfants de la Smart Structure Consommable. Ils possèdent donc le même paramètre par héritage. Cependant, nous allons tout de même lui donner une valeur initiale.

src/vendor/<vendorName>/<moduleName>/Plat/110-PlatParameters.xml





 
 
 



<?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">
        <smart:parameters />
        <smart:defaults>
            <smart:initial field="consommable_vat" reset="true">10</smart:initial>
        </smart:defaults>
    </smart:structure-configuration>
</smart:config>

src/vendor/<vendorName>/<moduleName>/Boisson/110-BoissonParameters.xml





 
 
 



<?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="BOISSON">
        <smart:parameters />
        <smart:defaults>
            <smart:initial field="consommable_vat" reset="true">10</smart:initial>
        </smart:defaults>
    </smart:structure-configuration>
</smart:config>

Utiliser les paramètres pour effectuer un calcul

Lors de la création d’un Smart Element de type Consommable (Plat ou Boisson), le but est de ne renseigner que le prix TTC. La TVA étant maintenant définie par défaut au travers des paramètres, nous allons faire en sorte de calculer automatiquement le prix HT de ce consommable.

Rappel

Le calcul automatique d’une valeur de Smart Field a déjà été abordé dans ce chapitre. Il est donc fortement recommandé de le lire si vous ne l’avez pas déjà fait.

Rendons-nous donc dans le fichier gérant le comportement des consommables afin de créer la méthode effectuant le calcul voulu : src/vendor/<vendorName>/<moduleName>/SmartStructures/Consommable/ConsommableBehavior.php















 
 
 
 
 
 
 
 


<?php

namespace Cogip\Restauratec\SmartStructures\Consommable;

use SmartStructure\Fields\Consommable as ConsommableFields;
use SmartStructure\Fields\Menu as MenuFields;

class ConsommableBehavior extends \Anakeen\SmartElement
{
    public function registerHooks()
    {
        parent::registerHooks();
    }

    public function calculatePriceExclVat(): float
    {
        $priceIncVat = $this->getAttributeValue(ConsommableFields::consommable_price_incl_vat);
        $vat = $this->getFamilyParameterValue(ConsommableFields::consommable_vat);
        $priceExclVat = $priceIncVat * (1 - $vat / 100);

        return $priceExclVat;
    }
}

Autocomplétion dans les fichiers PHP

Par défaut, les fichiers PHP Anakeen Platform 4 ne sont pas déployés dans le projet. Ils sont archivés sous la forme de fichiers .phar dans les dépendances de votre projet.

Pour déployer les fichiers et ainsi bénéficier de l’autocomplétion pour les fichiers PHP dans votre IDE, lancez la commande :

make deploy-phar

Ensuite, dans le fichier de configuration de la Smart Structure concernée, la balise <smart:hooks> est à ajouter et compléter :















 
 
 
 
 




<?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="CONSOMMABLE" label="Consommable">
        <smart:icon file="consommable.png"/>
        <smart:class>Cogip\Restauratec\SmartStructures\Consommable\ConsommableBehavior</smart:class>
        <smart:fields>
            <smart:field-set name="consommable_frame" type="frame" access="ReadWrite" label="Informations relatives au consommable">
                <smart:field-text name="consommable_title" needed="true" is-title="true" access="ReadWrite" label="Titre"/>
                <smart:field-htmltext name="consommable_description" access="ReadWrite" label="Description"/>
                <smart:field-money name="consommable_price_excl_vat" access="Read" label="Prix HT (€)"/>
                <smart:field-money name="consommable_price_incl_vat" access="ReadWrite" label="Prix TTC (€)"/>
                <smart:field-account access="Read" name="consommable_creator" label="Créateur"/>
            </smart:field-set>
        </smart:fields>
        <smart:hooks>
            <smart:field-hook event="onPreRefresh" field="consommable_price_excl_vat">
                <smart:field-callable function="::calculatePriceExclVat"/>
            </smart:field-hook>
        </smart:hooks>
        <smart:defaults/>
    </smart:structure-configuration>
</smart:config>

Vérifier le calcul automatique

Attention

Pensez à effectuer une réinstallation afin que l’application prenne en compte les modifications effectuées :

npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall

Pour vérifier que notre calcul automatique, se rendre sur un formulaire en création d’un consommable, par exemple un plat :

http://localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html

Si on met un prix TTC à six euros, le prix HT est automatiquement calculé :

platPrixHT

Et ensuite ?

Comment créer un énuméré et l’associer à un Smart Field