Line 1:
Line 1:
−
== Tips Tricks and Hacks about MultiEntity module ==
+
= How to make your module compatible with MultiCompany =
+
When you forge a SELECT SQL request, to have it compatible with the multicompany module you must add a criteria in the WHERE
+
+
"WHERE...AND entity IN (".getEntity($object->table_name).")";
+
+
If the object you read is a data that should never be shared with another entity (for example the accountancy), you must use
+
+
"WHERE...AND entity = ".((int) $conf->entity);
+
+
+
=Tips Tricks and Hacks about MultiEntity module=
+
+
Permettre à un module externe d'ajouter son option de partage dans l'onglet options du module
+
+
valeur par défaut si une clé n'est pas définie :
+
+
* enable : valeur par défaut : ! empty($conf->mymodule->enabled)
+
* display : valeur par défaut : ! empty($conf->global->MULTICOMPANY_SHARINGS_ENABLED)
+
* tooltip : pas d'aide au format tooltip
+
* input : pas d'interaction avec d'autres boutons on/off
+
+
partage parent, exemple :
+
'member' => array( // Valeur utilisée dans getEntity()
+
'type' => 'element', // element: partage d'éléments principaux (thirdparty, product, member, etc...)
+
'icon' => 'address-card', // Font Awesome icon
+
'lang' => 'langfile@mymodule' // Fichier de langue contenant les traductions
+
'tooltip' => 'MyToolTipTranslateKey', // Message Tooltip (ne pas mettre cette clé si pas de tooltip)
+
'input' => array( // input : Paramétrage de la réaction du bouton on/off
+
'global' => array( // global : réaction lorsqu'on désactive l'option de partage global
+
'showhide' => true, // showhide : afficher/cacher le bloc de partage lors de l'activation/désactivation du partage global
+
'hide' => true, // hide : cache le bloc de partage lors de la désactivation du partage global
+
'del' => true // del : suppression de la constante du partage lors de la désactivation du partage global
+
)
+
)
+
),
+
partage qui dépend d'un partage parent, exemple :
+
'productprice' => array( // Valeur utilisée dans getEntity()
+
'type' => 'element', // element: partage d'éléments principaux (thirdparty, product, member, etc...)
+
'icon' => 'money', // Font Awesome icon
+
'lang' => 'langfile@mymodule' // Fichier de langue contenant les traductions
+
'tooltip' => 'ProductPriceSharingInfo', // Message Tooltip (ne pas mettre cette clé si pas de tooltip)
+
'enable' => '(! empty($conf->product->enabled) || ! empty($conf->service->enabled))', // Conditions d'activation du partage
+
'display' => '! empty($conf->global->MULTICOMPANY_PRODUCT_SHARING_ENABLED)', // L'affichage de ce bloc de partage dépend de l'activation d'un partage parent
+
'input' => array( // input : Paramétrage de la réaction du bouton on/off
+
'global' => array( // global : réaction lorsqu'on désactive l'option de partage global
+
'hide' => true, // hide : cache le bloc de partage lors de la désactivation du partage global
+
'del' => true // del : supprime la constante du partage lors de la désactivation du partage global
+
),
+
'product' => array( // product (nom du module parent) : réaction lorsqu'on désactive le partage parent (ici le partage des produits/services)
+
'showhide' => true, // showhide : afficher/cacher le bloc de partage lors de l'activation/désactivation du partage parent
+
'del' => true // del : suppression de la constante du partage lors de la désactivation du partage parent
+
)
+
)
+
'disable' => true // disable : désactive ce bloc de partage si en cours de développement
+
),
+
partage des objets qui dépendent d'un partage principal, exemple :
+
'proposal' => array( // Valeur utilisée dans getEntity()
+
'type' => 'object', // object : partage d'objets (propal, commande, facture, numéro de facture, etc...)
+
'icon' => 'file-pdf-o', // Font Awesome icon
+
'lang' => 'langfile@mymodule' // Fichier de langue contenant les traductions
+
'tooltip' => 'MyToolTipTranslateKey', // Message Tooltip (ne pas mettre cette clé si pas de tooltip)
+
'mandatory' => 'thirdparty', // partage principal obligatoire
+
'enable' => '(! empty($conf->propal->enabled) && ! empty($conf->societe->enabled))', // Conditions d'activation du partage
+
'display' => '! empty($conf->global->MULTICOMPANY_THIRDPARTY_SHARING_ENABLED)', // L'affichage de ce bloc de partage dépend de l'activation d'un partage principal
+
'input' => array( // input : Paramétrage de la réaction du bouton on/off
+
'global' => array( // global : réaction lorsqu'on désactive l'option de partage global
+
'hide' => true, // hide : cache le bloc de partage lors de la désactivation du partage global
+
'del' => true // del : suppression de la constante du partage lors de la désactivation du partage global
+
),
+
'thirdparty' => array( // thirdparty (nom du module principal) : réaction lorsqu'on désactive le partage principal (ici le partage des tiers)
+
'showhide' => true, // showhide : afficher/cacher le bloc de partage lors de l'activation/désactivation du partage principal
+
'hide' => true, // hide : cache le bloc de partage lors de la désactivation du partage principal
+
'del' => true // del : supprime la constante du partage lors de la désactivation du partage principal
+
)
+
)
+
),
+
exemple de tableau pour votre module :
+
$params = array(
+
'nameofyourmodule' => array( // nom informatif du module externe qui apporte ses paramètres
+
'sharingelements' => array( // section des paramètres 'element' et 'object'
+
'elementsharename' => array( // Valeur utilisée dans getEntity()
+
'type' => 'element',
+
......
+
......
+
),
+
'objectsharename' => array( // Valeur utilisée dans getEntity()
+
'type' => 'object',
+
......
+
......
+
)
+
),
+
'sharingmodulename' => array( // correspondance des noms de modules pour le lien parent ou compatibilité (ex: 'productsupplierprice' => 'product')
+
'myshare' => 'mymodule',
+
......
+
......
+
),
+
'addzero' => array( // défini si un partage ajoute le 0 (toute les entités) à l'entité courante ex: "entity IN (0, id entite courante)"
+
'mymoduleshare1', // Valeur utilisée dans getEntity()
+
'mymoduleshare2',
+
......
+
......
+
)
+
)
+
)
+
ajouter ceci à l'activation de votre module :
+
$externalmodule = json_decode($conf->global->MULTICOMPANY_EXTERNAL_MODULES_SHARING, true);
+
$externalmodule = array_merge($externalmodule, $params);
+
$jsonformat = json_encode($externalmodule);
+
dolibarr_set_const($this->db, "MULTICOMPANY_EXTERNAL_MODULES_SHARING", $externalmodule);
+
et ceci à la désactivation de votre module :
+
$externalmodule = json_decode($conf->global->MULTICOMPANY_EXTERNAL_MODULES_SHARING, true);
+
unset($externalmodule['nameofyourmodule']); // nom informatif du module externe qui apporte ses paramètres
+
$jsonformat = json_encode($externalmodule);
+
dolibarr_set_const($this->db, "MULTICOMPANY_EXTERNAL_MODULES_SHARING", $externalmodule);
Sources:
Sources:
−
* https://www.dolibarr.fr/forum/t/multicompany-for-ever-or-not/42084/13
+
+
*https://www.dolibarr.fr/forum/t/multicompany-for-ever-or-not/42084/13