Solution paiement

Home - Solution paiement

Couplez vos idées à notre logiciel métier Avocat

Introduction

Le logiciel métier Avoloi est conçu autour d’une architecture modulaire qui permet à des tiers de développer des modules qui permettent d’étendre les fonctionnalités du logiciel métier ou de le connecter à d’autres applications.

 

Une collection d’API est exposée nativement et documenté au format OpenAPI, ce qui permet à des applications clientes ou à des serveurs d’interroger le logiciel métier pour récupérer ou ajouter des informations. Par exemple, il est possible d’ajouter un rendez-vous ou de rechercher un tiers directement depuis l’API. L’authentification est assurée par un système d’authentification répondant au standard OAuth2 et le chiffrement assuré par le protocole TLS v1.3.

 

Le système de module offre aux développeurs la possibilité de créer de nouvelles API, de nouveaux écrans ou encore des traitements automatisés.

Création d’un module

Les modules sont développés à l’aide du langage PHP en version 7. Chaque nouveau module doit être placé dans le répertoire “htdocs” du logiciel métier, dans un répertoire dédié. Dans cette documentation, le module sera nommé “modmonmodule” et localisé dans un répertoire “monmodule”.

Attention : le module et son dossier ne doivent pas comporter d’espaces, de tirets ou d’underscore. Par exemple “ceciestmonmodule” ou “monmodulemetier”.

Arborescence

Chaque module doit suivre une arborescence définie et déclarer plusieurs variables afin d’être identifié par le logiciel métier.

L’arborescence d’un module est la suivante :

  • monmodule/build/ contient les fichiers et outils qui permettent la compilation et/ou le packaging du module
  • monmodule/core/modules/ contient le fichier manifeste du module
  • monmodule/core/triggers contient les actions qui peuvent être déclenchés suite à des évènements du logiciel métier
  • monmodule/class/ contient les classes PHP du module
  • monmodule/docs contient la documentation du module
  • monmodule/lib contient les librairies tièrces du module
  • monmodule/sql contient la liste des instructions SQL à exécuter pour ajouter des tables et/ou des colonnes à l’installation ou à la mise à jour du module

Manifeste

Le manifeste doit être positionné dans le repertoire core/modules du module et doit être précisément nommé “mod” + le nom du répertoire créé à l’étape précédente + “.class.php”. Par exemple “modmonmodule.class.php”.

Ce fichier doit contenir à minima le code source suivante :

<?php

include_once DOL_DOCUMENT_ROOT .’/core/modules/DolibarrModules.class.php’;

 

class modAvoloiExport extends DolibarrModules

{

public function __construct($db)

{

global $langs,$conf;

$this->db = $db;

$this->numero = 565465;

$this->rights_class = ‘avoloiexport’;

$this->family = “other”;

$this->module_position = ’90’;

$this->name = preg_replace(‘/^mod/i’, ”, get_class($this));

$this->description = “Dolibarr module to export comptability”;

$this->descriptionlong = “Export all comptability between two dates”;

$this->editor_name = ‘DME Communication’;

$this->editor_url = ‘http://www.avoloi.fr’;

$this->version = ‘1.0’;

$this->const_name = ‘MAIN_MODULE_’.strtoupper($this->name);

$this->picto=’generic’;

$this->module_parts = array(

‘triggers’ => 0,

‘login’ => 0,

‘substitutions’ => 0,

‘menus’ => 0,

‘tpl’ => 0,

‘barcode’ => 0,

‘models’ => 0,

‘theme’ => 0,

‘css’ => array(

//    ‘/mymodule/css/mymodule.css.php’,

),

‘js’ => array(

//   ‘/mymodule/js/mymodule.js.php’,

),

‘hooks’ => array(),

‘moduleforexternal’ => 0,

);

$this->hidden = false;

$this->depends = array();

$this->requiredby = array();

$this->conflictwith = array();

$this->langfiles = array(“avoloiexport@avoloiexport”);

$this->phpmin = array(5,5);

$this->need_dolibarr_version = array(8,0);

$this->warnings_activation = array();

$this->warnings_activation_ext = array();

 

$this->const = array();

 

if (! isset($conf->mymodule) || ! isset($conf->mymodule->enabled)) {

$conf->mymodule=new stdClass();

$conf->mymodule->enabled=0;

}

 

$this->tabs = array();

 

$this->dictionaries=array();

 

$this->boxes = array(

//  0 => array(

//      ‘file’ => ‘mymodulewidget1.php@mymodule’,

//      ‘note’ => ‘Widget provided by MyModule’,

//      ‘enabledbydefaulton’ => ‘Home’,

//  ),

//  …

);

 

$this->cronjobs = array(

//  0 => array(

//      ‘label’ => ‘MyJob label’,

//      ‘jobtype’ => ‘method’,

//      ‘class’ => ‘/mymodule/class/myobject.class.php’,

//      ‘objectname’ => ‘MyObject’,

//      ‘method’ => ‘doScheduledJob’,

//      ‘parameters’ => ”,

//      ‘comment’ => ‘Comment’,

//      ‘frequency’ => 2,

//      ‘unitfrequency’ => 3600,

//      ‘status’ => 0,

//      ‘test’ => ‘$conf->mymodule->enabled’,

//      ‘priority’ => 50,

//  ),

);

 

$this->rights = array();

$r=0;

 

$this->rights[$r][0] = $this->numero + $r;

$this->rights[$r][1] = ‘Export comptability’;

$this->rights[$r][3] = 0;

$this->rights[$r][4] = ‘write’;

$this->rights[$r][5] = ”;

$r++;

 

$this->menu = array();

 

}

 

public function init($options = ”)

{

 

$sql = array();

return $this->_init($sql, $options);

}

 

public function remove($options = ”)

{

$sql = array();

return $this->_remove($sql, $options);

}

}

 

ATTENTION :

Il est important de modifier `$this->numero` et de lui assigner un numéro unique.

Il faut remplacer les autres noms par le nom de votre module.

Classe métier

Dans le dossier class, il est possible de créer un fichier suivant la nomenclature suivante : nom du module + ‘.modules.php’. Dans l’exemple, on a donc `monmodule.modules.php`.

Ce fichier doit contenir les informations suivantes :

 

class monmodule

{

/**

* @var array Minimum version of PHP required by module.

* e.g.: PHP ≥ 5.5 = array(5, 5)

*/

public $phpmin = array(5, 5);

 

/**

*    Constructor

*

*  @param        DoliDB        $db      Database handler

*/

public function __construct($db)

{

global $conf, $langs, $mysoc;

}

}

““

On déclare ici la version minimum de PHP.

Exécution d’instructions SQL à l’installation

Si le module a besoin de tables et/ou colonnes complémentaires, des fichiers .sql peuvent être placés dans le répertoire “sql” du module.

Dans ce cas, il est indispensable que l’instruction suivante soit présente dans la fonction “init” du fichier manifeste :

$this->_load_tables(‘/mymodule/sql/’);

Développement du module

Exposition d’API

Dans le dossier class, créer un fichier suivant la nomenclature suivante : ‘api_’ + nom du module + ‘.class.php’. Dans notre exemple, on a donc `api_monmodule.class.php`.

C’est le point d’entrée du module, pour permettre de l’exposer via l’API.

Voici un exemple :

 

<?php

use LuracastRestlerRestException;

 

include_once DOL_DOCUMENT_ROOT . ‘/main.inc.php’;

require_once DOL_DOCUMENT_ROOT . “/compta/facture/class/facture.class.php”;

 

class AvoloiExport extends DolibarrApi

{

 

static $DOCUMENT_FIELDS = array(

‘modulepart’

);

 

public function __construct()

{

global $db;

$this->db = $db;

}

 

/**

* Export des facturations en fichier excel

*

* @return array List of documents

*

* @throws 400

* @throws 200

*

* @url PUT /facturations

*/

public function facturations($datestart, $dateend)

{

 

// contenu de la fonction

}

}

 

Les commentaires sont très importants ici car ils contiennent la définition de l’API pour chaque fonction.

Ici, on a donc la fonction “facturations“ qui sera appelée lorsque l’on fera un appel en PUT à “/facturations“.

 

La partie

static $DOCUMENT_FIELDS = array(

‘modulepart’

);

 

public function __construct()

{

global $db;

$this->db = $db;

}

n’a pas à être modifiée.

Accès à la base

Si vous avez besoin de réaliser des modifications en base, il est possible d’utiliser les fonctions de base de PHP.

 

Insert, update ou delete

$db->begin();   // Debut transaction

$db->query(“Ma requete insert, update ou delete”);

$db->commit();       // Valide

ou $db->rollback()  // Annule

Lecture

$resql=$db->query(“Ma requete select”);

if ($resql)

{

$num = $db->num_rows($resql);

$i = 0;

if ($num)

{

while ($i < $num)

{

$obj = $db->fetch_object($resql);

if ($obj)

{

// You can use here results

print $obj->field1;

print $obj->field2;

}

$i++;

}

}

}

Permissions

La définition des permissions que gérera le module se fait dans le fichier manifeste.

 

Modifier la ligne

 

$this->rights_class = ‘monmodule’

pour y mettre la bonne valeur de monmodule.

 

Ensuite remplir le tableau $this->rights avec autant d’entrées que de permissions différentes à gérer.

 

$this->rights[$r][0] = 10001;

$this->rights[$r][1] = ‘Libelle par défaut de ma permission’;

$this->rights[$r][3] = 1;

$this->rights[$r][4] = ‘action’;

$this->rights[$r][5] = ‘sousaction’;

$r++;

 

Dans $this->rights[$r][0], mettre un id de permission non déjà pris (Voir dans le menu Infos Système sur une installation de Dolibarr opérationnelle pour connaître les id déjà utilisés.

 

Dans $this->rights[$r][3], mettre 1 si cette permission est attribué d’office par défaut quand un utilisateur est créé. Dans $this->rights[$r][1], mettre un libellé par défaut (il sera affiché si aucune traduction n’est trouvé pour votre permission dans le fichier admin.lang).

 

Dans $this->rights[$r][4] et $this->rights[$r][5], mettre une chaîne action et sous action sans espace.

 

Vous pourrez alors tester dans le code PHP si un utilisateurs a bien les droits par la séquence suivante :

 

if ($user->rights->monmodule->action->sousaction) …

My Shopping Cart