Rédaction des procédures

Les procédures permettent de définir les différents intervenants d'une intervention.

Créer une nouvelle procédure

Les procédures permettent de définir les différents éléments intervenant au sein d'une opération de la production.

Liste des procédures xml

La liste des procédures xml se trouve dans le répertoire

ekylibre/config/procedures

Les catégories de procédures

Les procédures sont triées par catégories. Les catégories sont renseignées en haut de la procédure xml :

categories=""

Les catégories sont définies en nomenclature dans la liste des procedure_categories et sont associées à des activity_families. On trouve la nomenclature dans le fichier :

ekylibre/db/nomenclature/db.xml

Les actions d'une procédure

Les actions permettent d'enregistrer dans quels buts a été faite l'intervention. Il y a des actions “obligatoires” : les actions et des actions “optionnelles” : les optional-actions. De le même manière que les categories, elles doivent être renseignées avec les éléments de nomenclature :

ekylibre/db/nomenclature/db.xml

Les actions optionnelles sont visibles par l'utilisateur sous forme de cases à cocher et permettent de renseigner précisément la ou les actions de l'intervention. Ex: Une intervention de pulvérisation peut avoir une action fongicide, insecticide, biostimulant…

Les actions obligatoires ne sont pas visibles pour l'utilisateur, ce sont les actions implicites qui sont systématiquement engendré par un type d'intervention. Ex: Une intervention semis tout-en-un a deux actions incontournables, semer et fertiliser.

Les éléments intervenant dans une procédure

L'ensemble des éléments participant à une intervention sont définis dans la procédure :

Participant Nom XML Exemples
La cible target Une parcelle, une culture
Les acteurs doer Un chauffeur, un opérateur
Les équipements tool Les tracteurs, les outils
Les intrants input Engrais, produit phytosanitaire
Les extrants output Légumes, grains (lors des récoltes)

Les balises XML

Pour chaque éléments ci-dessus (target, doer, tool, input, output), des paramètres sont à définir : name, filter et cardinality.

name

name permet d'afficher le nom.

filter

filter permet de faire un filtre sur l'ensemble des éléments qui s'afficheront dans la liste déroulante pour l'utilisateur. Les filtres se rédigent suivent un langage précis défini en intégralité dans:

lib/working_set/query_language.treetop

Ex : filter=“is variety_name and has indicator_name and can ability

compute-filter

compute-filter permet de calculer un filtre sur l'ensemble des éléments qui s'afficheront dans la liste déroulante pour l'utilisateur.Il peut comprendre des appels à des méthodes. Les méthodes sont dans: lib/procedo/engine/functions.rb Ex : compute-filter=“'is animal_group and derives from %{variety_of(PRODUCT)}'”

Comme pour les filtres, il est possible de s'aider des abilities et varieties definies sur les product_natures de la nomenclature :

ekylibre/db/nomenclatures/db.xml

default-name

default-name permet de calculer un nom par défault lorsqu'un produit est créé pendant une intervention.Il peut comprendre des appels à des méthodes. Les méthodes sont également dans: lib/procedo/engine/functions.rb Ex : default-name=“'%{variant_name(PRODUCT)} %{birth_name(PRODUCT)}'” default-name

cardinality

cardinality permet de préciser le nombre d'éléments à entrer pour un élément intervenant dans une intervention donnée. Ex : Enregistrer au moins 1 cible, enregistrer aucun, un, ou plusieurs opérateurs…Italique

Utilisation :

  • Par défaut, si on ne met pas de cardinality –> Au moins 1
  • cardinality=“*” –> Facultatif : 0, 1 ou plusieurs
  • cardinality=“1” –> Utile dans un group pour créer en un couple unique d'éléments (ex: semis –> couple target/output=parcelle/culture)

attribute

La balise attribute est spécifique au target. Elle permet d'afficher la zone de travail sur la parcelle.

reading

La balise reading permet d'entrer la valeur d'un indicateur à la création du produit. Ex : Enregistrement d'une naissance, entrer le sexe du veau.

handler

La balise handler est spécifique aux inpout/output (intrant/extrant). Elle permet à l'utilisateur de saisir la valeur d'un produit dans une nouvelle unité et de faire automatiquement la conversion par rapport à l'unité de départ du produit.

  • Le handler “population” obligatoire pour que cela fonctionne.
  <handler name="population"/>
  • Pour chaque nouvelle unité, un handler est créé pour faire la conversion : tous les handler sont indépendants, basés sur la population.

Pour chaque handler, il faut renseigner l'indicateur, l'unité (nouvelle unité) et ajouter un nom si le même indicateur est utilisé dans plusieurs handler de la procédure.

  <handler name="" indicator="" unit=""
           ... />

Ensuite, il faut ajouter les conditions d'appel de l'indicateur grâce au if.

  <handler name="" indicator="" unit=""
           if=""
           ... />

Un fichier permet de visualiser l'ensemble du langage des conditions à utiliser pour écrire ces conditions :

ekylibre/lib/procedo/formula/language.treetop

Les fonctions auxquelles fait appel ce fichier sont rédigées dans :

ekylibre/lib/procedo/engine/functions.rb

Pour terminer, pour que les conversions soient gérées correctement de façon automatique, il faut ajouter un backward et un forward.

  • Le backward permet de faire la conversion dans le sens unité de la population –> nouvelle unité
  • Le forward permet de faire la conversion dans le sens nouvelle unité –> unité de la population
  <handler name="" indicator="" unit=""
           if=""
           backward=""
           forward="" />

ATTENTION à la syntaxe des '.' et ':' et aux tests sur les valeurs de population.

Helpers

La variable working_periods permet de récupérer les dates sous cette forme!

  [
    { started_at: '2016-09-01 08:00', stopped_at: '2016-09-01 10:00' },
    { started: '2016-09-01 11:00', stopped_at: '2016-09-01 12:00' }
  ]

De plus, les fonctions intervention_started_at et intervention_stopped_at retourne respectivement la date de début et date de fin, toutes périodes confondues.

Le contrôleur

Le contrôleur des procédures :

ekylibre/app/controllers/backend/interventions_controller.rb

respond to est utilisé pour générer des rapports.

Les vues

Vue de la liste des interventions sur une campagne :

ekylibre/app/views/backend/index.html.haml

Vue des détails d'une intervention en particulier :

ekylibre/app/views/backend/show.html.haml

Vue du formulaire de modification ou création d'une intervention :

_form.html.haml

Modifier une procédure

La modification de procédure est plus ou moins impactante. Les noms de procédures et les noms des variables de procédure étant stockés en base de données, leur modification dans les fichiers XML nécessitent forcément une mise à jour de la base de données.

Renommer une procédure

Pour renommer une procédure, il faut créer une migration :

rails g migration rename_procedure_old_to_new

Et à l'interieur du def change, il faut mettre le code suivant :

class MyMigration < ActiveRecord::Migration
 
  def change
    ...
    reversible do |d|
      d.up do
        execute "UPDATE interventions SET procedure_name = 'new_procedure_name' WHERE procedure_name = 'old_procedure_name'"
      end
      d.down do
        execute "UPDATE interventions SET procedure_name = 'old_procedure_name' WHERE procedure_name = 'new_procedure_name'"
      end
    end
    ...
  end
end

Renommer un paramètre de procédure

Un générateur permet de créer rapidement la migration de renommage d'un paramètre. Il suffit de renseigner l'ancien nom du paramètre, son nouveau nom et le nom de la procédure.

rails g renaming_migration OLD_NAME NEW_NAME PROCEDURE_NAME

Voir aussi