Difference between revisions of "MultiEntity dev"

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
(multi entity pour développeurs)
Tag: 2017 source edit
 
(doc de régis)
Line 1: Line 1:
== Tips Tricks and Hacks about MultiEntity module ==
+
==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

Revision as of 08:52, 16 June 2023

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: