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 :
- 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>
- Les
plats
etboissons
, sont des enfants de la Smart StructureConsommable
. 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é :