Désactiver un modèle de documents lors de la désactivation d'un module :

Bonjour,

Je suis en train de créer des modules pour faciliter l’importation de modèles d’étiquettes en PDF, mon premier est prêt et fonctionnelle, mon côté perfectionniste m’oblige à attendre avant de le mettre sur le Dolistore car il réside un soucis ( que je retrouve dans le module Rubis de @Philazerty mais pas dans le module InfraSPack Plus v7 de @Sylvain.Legrand, je ne sais pas si @grandoc y arrive avec ses modules Ultimatepdf car je n’en ai pas à portée de clique ) le voici :

Lorsque j’installe mon module et que je l’actives, mon modèle est disponible dans la partie configuration du module produits par exemple si je veux faire une étiquette, pour l’activer il faut aller dans la configuration du module produits puis l’activer (et éventuellement le mettre par défaut mais c’est moins important même si l’astuce m’intéresse également). Je vais dans une fiche produit et alors je peux imprimer mon étiquette comme je veux en sélectionnant mon modèle dans la liste.

Imaginons que je veuille désactiver mon module, pour par exemple le supprimer/mettre à jours.
Si je n’ai pas pris la peine d’aller d’abords désactiver mon modèle d’étiquette dans la configuration du module produits, alors même si mon module est désactiver je vais me retrouver avec mon modèle d’étiquette de proposé à l’impression et si j’ai le malheurs de cliquer sur générer j’ai une belle erreur (normale puisque mon étiquette n’est plus référencée dans les modèles de la configuration du module produits).

Tout ça pour arriver à ma question :

Comme faire en sorte d’activer/désactiver un modèle PDF à l’activation désactivation du module.

@Sylvain.Legrand si tu as une piste à nous donner je suis preneur de la solution, j’ai renouvelé mon achat de tes modules hier pour voir si le comportement était toujours d’actualité :wink: et effectivement ça le fait bien.

Amicalement,
Gaëtan.

Bonjour,
Je n’ai pas été vérifier avant de répondre mais ce n’est pas au niveau de la table llx_const qu’il faut aller chercher le modèle et le désactiver ?

1 « J'aime »

Bonsoir,

Merci @akene pour ta réponse, elle m’a permis de pointer mes recherches dans la base données et de voir comment désactiver mon modèle lorsque je désactive mon module, voici l’explication :

En faite c’est dans la table Table llx_document_model qu’il faut aller chercher les modèles de documents, si ils sont activés ils sont présents, par contre si ils sont désactivés ils sont supprimés.

Il faut donc que lorsque je désactive mon module il aille supprimer mon modèle d’étiquette :wink: reste plus qu’à coder ça phpMyAdmin me propose ça :

$sql = "DELETE FROM `llx_document_model` WHERE `llx_document_model`.`nom` LIKE \'%eti%\'";

Il faut maintenant que je vois comment le transformer en action lors de la désactivation de mon module, ça va me permettre de progresser en PHP/MySQL et le fonctionnement de Dolibarr :wink:

Amicalement,
Gaëtan.

Dans modMonmodule.class.php tu as les actions quand tu désactive le module

1 « J'aime »

Re,

Bon je me réponds à moi-même :smiley: il suffit de mettre dans le fichier modMonmodule.class.php dans la partie :

/**
 *  Function called when module is disabled.
 *  Remove from database constants, boxes and permissions from Dolibarr database.
 *  Data directories are not deleted
 *
 *  @param      string	$options    Options when enabling module ('', 'noboxes')
 *  @return     int                 1 if OK, 0 if KO
 */
public function remove($options = '')
{
	$sql = array();
	return $this->_remove($sql, $options);
}

La ligne qui va bien :

$sql = array("DELETE FROM `llx_document_model` WHERE `llx_document_model`.`nom` LIKE 'Monmodule%'");

Et donc ça donne ceci :

/**
 *  Function called when module is disabled.
 *  Remove from database constants, boxes and permissions from Dolibarr database.
 *  Data directories are not deleted
 *
 *  @param      string	$options    Options when enabling module ('', 'noboxes')
 *  @return     int                 1 if OK, 0 if KO
 */
public function remove($options = '')
{
	$sql = array("DELETE FROM `llx_document_model` WHERE `llx_document_model`.`nom` LIKE 'Monmodule%'");
	return $this->_remove($sql, $options);
}

Encore un énorme merci @akene.

@Philazerty as-tu un git pour que je puisse te faire une PR pour ton module Rubis ?

Désolé @BB2A j’ai vu ta réponse après avoir trouvé/commencé à rédiger la mienne, mais merci pour la piste c’était effectivement la bonne.

Bonne fin de soirée.

Amicalement,
Gaëtan.

1 « J'aime »

Salut @gmilad
Mon Git n’est pas à jour ni vraiment utilisé. Je travaille à l’ancienne !!! Et je n’ai pas pris le temps de comprendre GitHub que je trouve trop compliqué pour mon usage.
Merci Gaëtan pour ton retour, je vais intégré ça dans ma prochaine version.
@+

Salut @Philazerty,

Pas de soucis, personnellement je me sers de GitHub/GitLab presque uniquement par l’interface web, ça permet de ne pas avoir à configurer git sur son poste et ainsi être libre d’utiliser plusieurs ordinateurs pour le développement :wink:

Pour revenir à la solution il faut bien sur ne pas mettre llx (comme dit dans un autre sujet de discutions) car si jamais il y a une dénomination des tables différentes alors la désactivation ne fonctionnera pas voici un exemple ( repris du module InfraSPack Plus v7 de @Sylvain.Legrand qui me l’autorise puisqu’il est sous licence libre vive le libre !! :wink: )

$sql = array('DELETE FROM '.MAIN_DB_PREFIX.'const WHERE name like "MonModule\_%" AND entity = "'.$conf->entity.'"');

Bonne soirée.

Amicalement,
Gaëtan,

2 « J'aime »