Empêcher la modification du code client

Bonjour,

Est-il possible d’empêcher la modification du code client par un groupe d’utilisateur une fois que celui-ci a été créé ? Toutes les autres modifications sur la fiche client doivent rester possibles.

Ce code servant de clé d’identification unique sur plusieurs logiciels tiers, il est pour nous impératif qu’il ne puisse pas être modifié.

Cdlt

Bonjour,
Sauf erreur on ne peut pas sauf à développer quelque chose.
A noter que la clé d’identification unique dans Dolibarr est l’id du tiers qui elle ne change jamais.
@+

C’est bien ce qu’il me semblait, merci pour la confirmation.
Je ne peux hélas pas utiliser l’id du tiers, les tiers étant déjà existants avec leur propre code sur nos autres applications.
Je vais donc développer une solution spécifique.

Cdlt

Bonjour,

Et un attribut supplémentaire où on décoche l’option Peut toujours être édité ?

Le problème de l’attribut supplémentaire c’est qu’il ne va pas apparaître sur les factures et commandes etc, cela nécessite de créer et/ou mettre à jour les templates.

Certes…

A voir quel développement aura la meilleur rapport productivité/cout.

Il suffit de créer une constante quelconque et de modifier le code de card.php pour que la modif ne puisse se faire que si celle-ci est à oui/non.
@+

Je viens de regardez le code et il semble y avoir des choses en place :

Ligne 1876 : $object->codeclient_modifiable()…

Mais je ne trouve pas le mode d’application/fonctionnement.
@+

Cela se configure dans le modele de numérotation du codeclient mod_codeclient_leopard.php par exemple.
Mais je travaille sur une solution avec un module qui me permet de ne pas modifier le code de base de dolibarr. La solution devant survivre aux mises à jour de dolibarr.

1 J'aime

Comme solution j’ai opté pour l’utilisation du hook « thirdpartycard/doActions » dans un module.

Si on est en action « edit » c’est à dire modification, je remplace la valeur du champ code client transmis par le formulaire par le code client déjà existant. De cette manière une tentative de modification du code client sera vaine.

Voici le code pour le hook qui va empêcher la modification du code client. Ce n’est pas très orthodoxe comme méthode, mais ça fonctionne.

function doActions($parameters, &$object, $action, $hookmanager)
{
    if ($action == 'update' && $parameters['currentcontext'] == 'thirdpartycard')
        $_POST['customer_code'] = $object->code_client;
    return 0;
}
1 J'aime

Merci !
Tu mets ça où en fait ?
Pourquoi ne pas proposer sur Github ton option?
@+

Le morceau de code correspond à la function doActions telle que décrite sur le wiki https://wiki.dolibarr.org/index.php/Système_de_Hooks

Bonjour,
En fait, c’est au niveau du modèle de numérotation que se situe la gestion de code_modifiable.
Regardez par exemple htdocs/core/modules/societe/mod_codeclient_elephant.php.
Vous pouvez donc crééer votre propre modèle de numérotation (à mettre de préférence dans votremodule/core/modules/societe/) et renvoyer 0 au lieu de 1 dans code_modifiable.
Ou plus simplement modifier le modèle du core mais à refaire à chaque changement de version.
Sinon, votre solution a le mérite de marcher même si l’utilisateur ne va pas comprendre pourquoi sa modif n’est pas prise en compte (ajouter un message d’erreur et faire un return -1; ?)

@altatof c’est exact, j’ai vu cette solution il y a quelques jours car je suis en train de mettre au point un modèle de numérotation spécifique que ne permet pas le modèle elephant (il me faut plusieurs préfixes différents selon l’application d’origine du client).
Comme je l’ai indiqué ma méthode n’est pas très orthodoxe :wink: mais c’est la solution la plus rapide que j’ai trouvée sur le moment.