<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dolibarr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=StephM</id>
	<title>Dolibarr ERP CRM Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dolibarr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=StephM"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php/Special:Contributions/StephM"/>
	<updated>2026-11-14T07:10:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=68604</id>
		<title>Module Auto Reminder FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=68604"/>
		<updated>2026-10-27T10:19:47Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Auto_Reminder]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 ou supérieur&lt;br /&gt;
|note=Testé sur Dolibarr 24. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; envoie et relance automatiquement les factures et les devis dans Dolibarr. Tout est déclenché par une tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
== Factures ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des factures validées par email, avec le PDF de la facture en pièce jointe et le modèle d&#039;email de votre choix.&lt;br /&gt;
* Relance automatique des factures impayées, par paliers configurables. Chaque palier définit un délai en jours par rapport à la date d&#039;échéance (ou à la date de facture s&#039;il n&#039;y a pas d&#039;échéance) et son modèle d&#039;email. Les délais négatifs sont acceptés, pour une relance préventive avant l&#039;échéance.&lt;br /&gt;
* Option pour inclure ou exclure les factures partiellement payées.&lt;br /&gt;
&lt;br /&gt;
== Devis (depuis la 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des devis validés par email, avec le PDF du devis en pièce jointe.&lt;br /&gt;
* Relance automatique des devis restés sans réponse (ni signés, ni refusés, ni facturés). Les paliers sont comptés à partir de la date de fin de validité du devis, ou de sa date s&#039;il n&#039;en a pas.&lt;br /&gt;
* Réglages entièrement séparés de ceux des factures : la page de configuration a un onglet Factures et un onglet Devis, chacun avec ses interrupteurs, son modèle d&#039;email et ses paliers.&lt;br /&gt;
&lt;br /&gt;
== Seul le palier le plus élevé atteint est envoyé ==&lt;br /&gt;
&lt;br /&gt;
Pour chaque document, seul le palier de relance le plus élevé atteint est retenu. Les paliers inférieurs manqués ne sont jamais rattrapés : un document déjà en retard au moment où le module est activé reçoit une seule relance, celle qui correspond à son retard réel, avec le bon modèle d&#039;email. Jamais une rafale de relances sur plusieurs jours.&lt;br /&gt;
&lt;br /&gt;
== Mode semi-automatique (depuis la 1.3.7) ==&lt;br /&gt;
&lt;br /&gt;
Au lieu d&#039;envoyer une relance, le module peut la préparer et vous laisser l&#039;envoyer vous-même. Chaque relance à faire devient une alerte :&lt;br /&gt;
* une cloche dans la barre du haut indique le nombre de factures et de devis à relancer, et mène à leur liste ;&lt;br /&gt;
* les listes des factures et des devis ont une colonne &#039;&#039;Relance&#039;&#039; et un filtre &#039;&#039;À relancer&#039;&#039; ;&lt;br /&gt;
* la fiche du document affiche l&#039;alerte avec un bouton &#039;&#039;Relancer&#039;&#039;, qui ouvre le formulaire d&#039;envoi de Dolibarr prérempli avec le modèle du palier, dans la langue du client, et avec les destinataires du module.&lt;br /&gt;
&lt;br /&gt;
L&#039;alerte se ferme quand un email est envoyé depuis la fiche ou programmé avec Doli Mail Later, quand un palier supérieur la remplace, ou quand vous l&#039;annulez : seul ce palier est alors sauté. Le mode se choisit par type de document dans les réglages (&#039;&#039;Mode semi-automatique par défaut&#039;&#039;), et se change par tiers et par document avec le champ « Relances ».&lt;br /&gt;
&lt;br /&gt;
== Relances par tiers et par document (depuis la 1.3.7) ==&lt;br /&gt;
&lt;br /&gt;
Le champ « Relances » est disponible sur la fiche tiers, la fiche facture, la facture modèle et la fiche devis :&lt;br /&gt;
* &#039;&#039;&#039;Automatiques&#039;&#039;&#039; : la relance part toute seule ;&lt;br /&gt;
* &#039;&#039;&#039;Semi-automatiques&#039;&#039;&#039; : le module prépare la relance et vous la signale ;&lt;br /&gt;
* &#039;&#039;&#039;Aucune&#039;&#039;&#039; : la relance n&#039;est ni envoyée ni préparée en alerte, et une alerte déjà ouverte disparaît.&lt;br /&gt;
&lt;br /&gt;
Laissé vide, c&#039;est le niveau suivant qui décide : le choix de la facture ou du devis passe avant celui du tiers, qui passe avant le réglage du module. Exemple : un tiers en litige est sur « Aucune », une de ses factures sur « Automatiques » : seule cette facture est relancée. Une facture générée depuis une facture modèle reçoit le choix du modèle, modifiable ensuite sur la facture.&lt;br /&gt;
&lt;br /&gt;
L&#039;envoi initial des documents n&#039;est pas concerné par ce champ. Il remplace la case « Exclure des relances automatiques » des versions précédentes (voir l&#039;installation pour la mise à jour).&lt;br /&gt;
&lt;br /&gt;
== Destinataire des emails ==&lt;br /&gt;
&lt;br /&gt;
Le destinataire est déterminé dans cet ordre, aussi bien pour l&#039;envoi que pour les relances :&lt;br /&gt;
&lt;br /&gt;
# Le contact rattaché au document (onglet Contacts de la facture ou du devis), quel que soit son rôle. Si plusieurs contacts sont rattachés : facturation, puis prestation, puis livraison pour une facture ; suivi, puis facturation, puis livraison pour un devis.&lt;br /&gt;
# Sinon le contact par défaut du tiers pour ce type de document (onglet Contacts/Adresses du tiers).&lt;br /&gt;
# Sinon le premier contact actif du tiers ayant une adresse email.&lt;br /&gt;
# Sinon l&#039;adresse email du tiers.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.3.1, tous les contacts à égalité sur le rôle le plus prioritaire sont retenus, et non plus seulement le premier : deux ou trois contacts de facturation rattachés à la même facture reçoivent tous l&#039;email, en un seul envoi. L&#039;ordre de priorité est inchangé, un contact de facturation l&#039;emporte toujours sur un contact de livraison. Les étapes 1 et 2 ci-dessus fonctionnent ainsi ; l&#039;étape 3 ne retient qu&#039;un seul destinataire, puisque sans rôle rien n&#039;indique qui s&#039;occupe des factures.&lt;br /&gt;
&lt;br /&gt;
Les contacts désactivés et les contacts sans email ne sont jamais utilisés. Si aucun destinataire n&#039;est trouvé, rien n&#039;est envoyé et un événement est enregistré dans l&#039;agenda du document.&lt;br /&gt;
&lt;br /&gt;
== Langue des emails (depuis la 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
Un email part dans la langue du tiers, sinon dans la langue par défaut des emails choisie dans les réglages du module (depuis la 1.3.7), sinon dans la langue de votre Dolibarr. Le module prend la première de ces langues dans laquelle le modèle d&#039;email existe, et envoie le modèle des réglages tel quel si aucune ne l&#039;a. Le repli de langue (es_MX vers es_ES, puis modèle sans langue) est celui de Dolibarr. Les dates et les montants suivent la langue de l&#039;email envoyé. Le PDF joint, lui, n&#039;est pas régénéré : c&#039;est le document tel qu&#039;il existe.&lt;br /&gt;
&lt;br /&gt;
Exemple : dans un Dolibarr en français, avec l&#039;anglais comme langue par défaut des emails, un tiers sans langue reçoit l&#039;anglais, un tiers français le français, et un tiers allemand l&#039;anglais s&#039;il n&#039;existe pas de modèle en allemand.&lt;br /&gt;
&lt;br /&gt;
Traduire un modèle est un geste Dolibarr, pas un réglage du module : recréer le modèle avec le MÊME libellé, choisir la langue, puis traduire le sujet et le contenu. À noter, la langue des tiers et des modèles n&#039;apparaît que si l&#039;option multilingue de Dolibarr est activée.&lt;br /&gt;
&lt;br /&gt;
== Garde-fou contre l&#039;envoi en masse ==&lt;br /&gt;
&lt;br /&gt;
Seuls les documents validés après l&#039;activation de l&#039;option d&#039;envoi sont envoyés : activer le module sur une base existante n&#039;envoie jamais l&#039;historique. La date de référence est enregistrée au moment où vous activez l&#039;option, affichée dans les réglages, et modifiable : vous pouvez la reculer en connaissance de cause pour inclure une partie de l&#039;historique. Un avertissement explicite est affiché à côté du champ : tout document validé à partir de cette date et jamais envoyé partira au prochain passage de la tâche planifiée.&lt;br /&gt;
&lt;br /&gt;
== Quand un document ne peut pas être traité ==&lt;br /&gt;
&lt;br /&gt;
Quand un document ne peut pas être traité (aucun destinataire valide, PDF introuvable, modèle d&#039;email introuvable, échec d&#039;envoi), le module enregistre un événement dans l&#039;agenda du document avec la raison en clair, une seule fois par document et par raison. En regardant la facture ou le devis, vous voyez immédiatement pourquoi rien n&#039;est parti.&lt;br /&gt;
&lt;br /&gt;
== Multi-société (module Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
Le module fonctionne avec le module Multicompany. Chaque société envoie et relance &#039;&#039;&#039;ses propres documents uniquement&#039;&#039;&#039;, avec ses propres réglages, ses propres paliers et ses propres modèles d&#039;email. Le partage de Multicompany donne un droit de lecture sur les documents d&#039;une autre société, il ne change pas leur propriétaire : une facture partagée reste relancée par la société à laquelle elle appartient. Il n&#039;y a rien à régler. Avant la 1.3.3, une société prenait aussi les factures et les devis des sociétés qu&#039;elle avait le droit de voir, et les traitait avec ses propres réglages.&lt;br /&gt;
&lt;br /&gt;
== Déclencheurs pour les développeurs (depuis la 1.3.5) ==&lt;br /&gt;
&lt;br /&gt;
Après chaque email parti avec succès, le module lance un déclencheur (trigger) sur la facture ou le devis, pour qu&#039;un autre module puisse y réagir : &amp;lt;code&amp;gt;AUTOREMINDER_SEND&amp;lt;/code&amp;gt; après l&#039;envoi automatique d&#039;un document validé, &amp;lt;code&amp;gt;AUTOREMINDER_REMIND&amp;lt;/code&amp;gt; après une relance. Le déclencheur reçoit le document dans &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt; et le détail dans &amp;lt;code&amp;gt;$object-&amp;gt;context[&#039;autoreminder&#039;]&amp;lt;/code&amp;gt; : &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;actioncomm_id&amp;lt;/code&amp;gt; (l&#039;événement d&#039;agenda de cet email), &amp;lt;code&amp;gt;level_id&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;level_days&amp;lt;/code&amp;gt; (le palier de relance, 0 et vide pour l&#039;envoi initial), &amp;lt;code&amp;gt;email_to&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_subject&amp;lt;/code&amp;gt;. Le module ne lance pas les déclencheurs natifs &amp;lt;code&amp;gt;BILL_SENTBYMAIL&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;PROPAL_SENTBYMAIL&amp;lt;/code&amp;gt;, qui signifient qu&#039;un utilisateur a envoyé le document depuis sa fiche.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Télécharger le fichier zip du module.&lt;br /&gt;
# Se connecter à Dolibarr en administrateur, aller dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et envoyer le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; dans la section &#039;&#039;Modules financiers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le module crée automatiquement sa table en base, ses champs complémentaires et une tâche planifiée quotidienne. Lors d&#039;une mise à jour depuis une version 1.x, les paliers existants sont conservés en tant que paliers de factures.&lt;br /&gt;
&lt;br /&gt;
Après une mise à jour depuis la 1.3.6 ou une version antérieure, désactivez puis réactivez le module : les cases « Exclure des relances automatiques » cochées deviennent « Aucune » dans le champ « Relances ». Vos réglages et vos paliers sont conservés.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Avant de configurer le module, créez vos modèles d&#039;email dans &#039;&#039;Accueil - Configuration - Emails - Modèles d&#039;emails&#039;&#039; : type &#039;&#039;Envoi facture&#039;&#039; pour les factures, type &#039;&#039;Envoi proposition commerciale&#039;&#039; pour les devis. Un modèle pour l&#039;envoi initial, un par palier de relance.&lt;br /&gt;
&lt;br /&gt;
Ouvrez ensuite les réglages du module. En haut de la page, commune aux deux types de documents, la &#039;&#039;Langue par défaut des emails&#039;&#039; fixe la langue des emails envoyés aux tiers dont la fiche n&#039;indique aucune langue. Laissée vide, c&#039;est la langue de votre Dolibarr.&lt;br /&gt;
&lt;br /&gt;
Il y a ensuite un onglet par type de document (Factures, Devis), chacun avec :&lt;br /&gt;
&lt;br /&gt;
* l&#039;interrupteur d&#039;envoi automatique et son modèle d&#039;email. À l&#039;activation, la date du jour est enregistrée : seuls les documents validés à partir de cette date seront envoyés. La date est modifiable (avec un avertissement),&lt;br /&gt;
* l&#039;interrupteur des relances, l&#039;option &#039;&#039;Mode semi-automatique par défaut&#039;&#039; (et, pour les factures uniquement, l&#039;option des factures partiellement payées),&lt;br /&gt;
* le tableau des paliers de relance : délai en jours + modèle d&#039;email, autant de paliers que vous voulez.&lt;br /&gt;
&lt;br /&gt;
La tâche planifiée &#039;&#039;AutoReminderJob&#039;&#039; s&#039;exécute une fois par jour par défaut (voir &#039;&#039;Accueil - Configuration - Tâches planifiées&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/doli/modules/autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=68603</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=68603"/>
		<updated>2026-10-27T10:19:17Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Auto_Reminder_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 or higher&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Semi-automatic mode (since 1.3.7) ==&lt;br /&gt;
&lt;br /&gt;
Instead of sending a reminder, the module can prepare it and let you send it yourself. Each reminder due becomes an alert:&lt;br /&gt;
* a bell in the top bar shows how many invoices and proposals are to be reminded, and leads to them;&lt;br /&gt;
* the invoice and proposal lists get a &#039;&#039;Reminder&#039;&#039; column and a &#039;&#039;To remind&#039;&#039; filter;&lt;br /&gt;
* the card of the document shows the alert with a &#039;&#039;Remind&#039;&#039; button, which opens the native Dolibarr send form, prefilled with the template of the level in the language of the customer, and with the recipients of the module.&lt;br /&gt;
&lt;br /&gt;
The alert closes when an email is sent from the card or scheduled with Doli Mail Later, when a higher level replaces it, or when you cancel it: only this level is then skipped. The mode is set per document type in the settings (&#039;&#039;Semi-automatic mode by default&#039;&#039;), and can be changed per third party and per document with the &amp;quot;Reminders&amp;quot; field.&lt;br /&gt;
&lt;br /&gt;
== Reminders per third party and per document (since 1.3.7) ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Reminders&amp;quot; field is available on the third party card, the invoice card, the template invoice and the proposal card:&lt;br /&gt;
* &#039;&#039;&#039;Automatic&#039;&#039;&#039;: the reminder goes out on its own;&lt;br /&gt;
* &#039;&#039;&#039;Semi-automatic&#039;&#039;&#039;: the module prepares the reminder and flags it to you;&lt;br /&gt;
* &#039;&#039;&#039;None&#039;&#039;&#039;: the reminder is neither sent nor prepared as an alert, and an alert already open disappears.&lt;br /&gt;
&lt;br /&gt;
Left empty, the next level decides: the setting chosen on the invoice or the proposal takes precedence over that of the third party, which takes precedence over the module settings. Example: a third party in dispute is set to &amp;quot;None&amp;quot;, one of its invoices to &amp;quot;Automatic&amp;quot;: only that invoice is reminded. An invoice generated from a template invoice receives the setting of the template, which can then be changed on the invoice.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by this field. It replaces the &amp;quot;Exclude from automatic reminders&amp;quot; checkbox of previous versions (see Installation for the upgrade).&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Language of the emails (since 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
An email goes out in the language of the third party, else in the default language of emails chosen in the module settings (since 1.3.7), else in the language of your Dolibarr. The module takes the first of these languages in which the email template exists, and sends the template of the settings as it is when none has it. The language fallback (es_MX to es_ES, then a template with no language) is the native Dolibarr one. Dates and amounts follow the language of the email sent. The attached PDF is not regenerated: it is the document as it stands.&lt;br /&gt;
&lt;br /&gt;
Example: in a French Dolibarr with English as default language of emails, a third party without language receives English, a French third party French, and a German third party English when there is no German template.&lt;br /&gt;
&lt;br /&gt;
Translating a template is done in Dolibarr itself, not in the module settings: create the template again with the SAME label, choose the language, then translate the subject and the content. Note that the language of third parties and templates only appears when the Dolibarr multi-language option is enabled.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
== Multi-company (Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
The module works with the Multicompany module. Each entity sends and reminds &#039;&#039;&#039;its own documents only&#039;&#039;&#039;, with its own settings, its own reminder levels and its own email templates. Sharing in Multicompany grants read visibility on the documents of another entity, it does not change their owner: a shared invoice is still reminded by the entity it belongs to. Nothing to configure. Before 1.3.3, an entity picked up the invoices and proposals of the entities it was allowed to see and processed them with its own settings.&lt;br /&gt;
&lt;br /&gt;
== Triggers for developers (since 1.3.5) ==&lt;br /&gt;
&lt;br /&gt;
After each successful email, the module fires a trigger on the invoice or proposal, so that another module can react to it: &amp;lt;code&amp;gt;AUTOREMINDER_SEND&amp;lt;/code&amp;gt; after the automatic sending of a validated document, &amp;lt;code&amp;gt;AUTOREMINDER_REMIND&amp;lt;/code&amp;gt; after a reminder. The listener receives the document as &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt; and the details in &amp;lt;code&amp;gt;$object-&amp;gt;context[&#039;autoreminder&#039;]&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;actioncomm_id&amp;lt;/code&amp;gt; (the agenda event of this email), &amp;lt;code&amp;gt;level_id&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;level_days&amp;lt;/code&amp;gt; (the reminder level, 0 and empty for the initial sending), &amp;lt;code&amp;gt;email_to&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_subject&amp;lt;/code&amp;gt;. The module does not fire the core &amp;lt;code&amp;gt;BILL_SENTBYMAIL&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PROPAL_SENTBYMAIL&amp;lt;/code&amp;gt; triggers, which mean that a user sent the document from its card.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
After upgrading from 1.3.6 or an earlier version, disable then enable the module: the ticked &amp;quot;Exclude from automatic reminders&amp;quot; checkboxes become &amp;quot;None&amp;quot; in the &amp;quot;Reminders&amp;quot; field. Your settings and levels are kept.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. At the top of the page, shared by both document types, the &#039;&#039;Default language of emails&#039;&#039; sets the language of the emails sent to third parties whose card has no language. Left empty, it is the language of your Dolibarr.&lt;br /&gt;
&lt;br /&gt;
Then there is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the reminders switch, the &#039;&#039;Semi-automatic mode by default&#039;&#039; option (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68269</id>
		<title>Module Doli Legal Mention</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68269"/>
		<updated>2026-10-20T23:33:04Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Legal Mention&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolilegalmention&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=3773&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 or higher, PHP 7.4 or higher, the Third parties and Invoices modules enabled&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; prints on each customer invoice the legal mention its customer requires, such as the VAT exemption of an intra-Community supply or of an export.&lt;br /&gt;
&lt;br /&gt;
[[File:1_DoliLegalMention_invoice.png|thumb|center|700px|The mention printed under the public note of the invoice, in the language of the customer]]&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== One mention per customer, chosen once ==&lt;br /&gt;
&lt;br /&gt;
On the card of the third party, the field &#039;&#039;Legal mention?&#039;&#039; offers the list of the active mentions. You choose the mention once; every customer invoice of that third party then carries it. Leave the field empty for a customer who needs no mention.&lt;br /&gt;
&lt;br /&gt;
[[File:2_DoliLegalMention_thirdparty.png|thumb|center|700px|The legal mention chosen on the third party card]]&lt;br /&gt;
&lt;br /&gt;
[[File:3_DoliLegalMention_thirdparty_list.png|thumb|center|700px|The list of mentions on the third party card]]&lt;br /&gt;
&lt;br /&gt;
== Printed under the public note, with every PDF template ==&lt;br /&gt;
&lt;br /&gt;
When the PDF of a customer invoice is generated, the mention is printed under the public note, as its last lines. Credit notes and down payment invoices follow the same rules. The module changes no PDF template: it works with every template that prints the public note, as the standard templates of Dolibarr do. It was tested with the Sponge and Crabe templates.&lt;br /&gt;
&lt;br /&gt;
The mention is added for the time of the PDF only: the public note saved on the invoice never changes. A PDF already generated keeps what it printed; generate it again to take a new mention or a new text into account.&lt;br /&gt;
&lt;br /&gt;
== Only on invoices without VAT, by default ==&lt;br /&gt;
&lt;br /&gt;
An exemption mention on an invoice that carries VAT would be false. The option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default, prints the mention only when the invoice carries no VAT: a customer who has a mention but buys a product subject to VAT receives an invoice without mention. Switch it off only if some of your mentions must also appear on taxed invoices.&lt;br /&gt;
&lt;br /&gt;
== One text per language ==&lt;br /&gt;
&lt;br /&gt;
Each mention has one text per language, printed in the language of the third party, the field &#039;&#039;Default language&#039;&#039; of its card. Without a text in that language, the module takes the same language of another country (the German of Germany for a customer in Austria), then the main language of Dolibarr. When none of these languages has a text, nothing is printed.&lt;br /&gt;
&lt;br /&gt;
== A list you manage yourself ==&lt;br /&gt;
&lt;br /&gt;
The setup page of the module, reserved to administrators, holds the list: add, modify, translate, disable and delete the mentions. Choose a language and click &#039;&#039;Refresh&#039;&#039; to show and edit the texts written in that language. Disabling a mention stops printing it, and the third parties keep their choice: enabled again, the mention is printed again on their next invoices.&lt;br /&gt;
&lt;br /&gt;
Code, label, position and status can also be edited in &#039;&#039;Setup - Dictionaries&#039;&#039;, dictionary &#039;&#039;Legal mentions&#039;&#039;. The texts are edited in the setup page of the module only.&lt;br /&gt;
&lt;br /&gt;
[[File:4_DoliLegalMention_setup.png|thumb|center|700px|The setup: the option and the list of mentions, with one text per language]]&lt;br /&gt;
&lt;br /&gt;
== Deleting a mention still in use ==&lt;br /&gt;
&lt;br /&gt;
When third parties carry the mention you delete, the confirmation window names them and says what they lose. Once you confirm, the mention is removed from their cards and their next invoices are printed without mention. To stop printing a mention without touching the cards, disable it instead.&lt;br /&gt;
&lt;br /&gt;
A deletion made from the dictionary screen does not warn: the third parties keep a choice that no longer exists. Prefer the setup page of the module to delete a mention.&lt;br /&gt;
&lt;br /&gt;
[[File:5_DoliLegalMention_delete.png|thumb|center|700px|Deleting a mention still in use names the customers concerned]]&lt;br /&gt;
&lt;br /&gt;
== Two examples to adapt ==&lt;br /&gt;
&lt;br /&gt;
On its first activation, the module installs two examples taken from French VAT law, with a text in French and in English: &#039;&#039;UE_PRO&#039;&#039;, the intra-Community supply to a business whose VAT number was checked on VIES (article 262 ter I of the French General Tax Code), and &#039;&#039;EXPORT&#039;&#039;, the export outside the European Union (article 262 I). Each example is offered once: one you deleted does not come back, even after an update, and a text you changed is never overwritten.&lt;br /&gt;
&lt;br /&gt;
The module prints the text you write: the choice and the wording of each mention remain yours, to be checked with your accountant. It checks neither the VAT number nor the country of the customer, and it prints on customer invoices only, not on proposals, orders or supplier invoices.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; in the module list.&lt;br /&gt;
&lt;br /&gt;
Activation creates the two tables of the module, adds the field &#039;&#039;Legal mention?&#039;&#039; to the third party card and installs the two examples. When upgrading, disable then enable the module again: the mentions, their texts, the choice made on each third party and the option are kept.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, line &#039;&#039;Doli Legal Mention&#039;&#039;, setup icon, reserved to administrators:&lt;br /&gt;
&lt;br /&gt;
* the option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default,&lt;br /&gt;
* the list of mentions and their texts, language by language.&lt;br /&gt;
&lt;br /&gt;
The module adds no permission: a user allowed to modify a third party can choose its mention.&lt;br /&gt;
&lt;br /&gt;
Full documentation: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/USER-GUIDE.md user guide] and [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/TECHNICAL.md technical documentation].&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
Bug reports and feature requests: [https://framagit.org/doli/modules/dolilegalmention/-/work_items issue tracker] (free Framagit account).&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Doli Legal Mention}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68268</id>
		<title>Module Doli Legal Mention</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68268"/>
		<updated>2026-10-20T23:31:05Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* Deleting a mention still in use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Legal Mention&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolilegalmention&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=3773&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 or higher, PHP 7.4 or higher, the Third parties and Invoices modules enabled&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; prints on each customer invoice the legal mention its customer requires, such as the VAT exemption of an intra-Community supply or of an export.[[File:1_DoliLegalMention_invoice.png|thumb|center|700px|The mention printed under the public note of the invoice, in the language of the customer]]&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
==One mention per customer, chosen once==&lt;br /&gt;
On the card of the third party, the field &#039;&#039;Legal mention?&#039;&#039; offers the list of the active mentions. You choose the mention once; every customer invoice of that third party then carries it. Leave the field empty for a customer who needs no mention.[[File:2_DoliLegalMention_thirdparty.png|thumb|center|700px|The legal mention chosen on the third party card]]&lt;br /&gt;
&lt;br /&gt;
==Printed under the public note, with every PDF template==&lt;br /&gt;
When the PDF of a customer invoice is generated, the mention is printed under the public note, as its last lines. Credit notes and down payment invoices follow the same rules. The module changes no PDF template: it works with every template that prints the public note, as the standard templates of Dolibarr do. It was tested with the Sponge and Crabe templates.&lt;br /&gt;
&lt;br /&gt;
The mention is added for the time of the PDF only: the public note saved on the invoice never changes. A PDF already generated keeps what it printed; generate it again to take a new mention or a new text into account.&lt;br /&gt;
==Only on invoices without VAT, by default==&lt;br /&gt;
An exemption mention on an invoice that carries VAT would be false. The option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default, prints the mention only when the invoice carries no VAT: a customer who has a mention but buys a product subject to VAT receives an invoice without mention. Switch it off only if some of your mentions must also appear on taxed invoices.&lt;br /&gt;
==One text per language==&lt;br /&gt;
Each mention has one text per language, printed in the language of the third party, the field &#039;&#039;Default language&#039;&#039; of its card. Without a text in that language, the module takes the same language of another country (the German of Germany for a customer in Austria), then the main language of Dolibarr. When none of these languages has a text, nothing is printed.&lt;br /&gt;
==A list you manage yourself==&lt;br /&gt;
The setup page of the module, reserved to administrators, holds the list: add, modify, translate, disable and delete the mentions. Choose a language and click &#039;&#039;Refresh&#039;&#039; to show and edit the texts written in that language. Disabling a mention stops printing it, and the third parties keep their choice: enabled again, the mention is printed again on their next invoices.&lt;br /&gt;
&lt;br /&gt;
Code, label, position and status can also be edited in &#039;&#039;Setup - Dictionaries&#039;&#039;, dictionary &#039;&#039;Legal mentions&#039;&#039;. The texts are edited in the setup page of the module only.[[File:4_DoliLegalMention_setup.png|thumb|center|700px|The setup: the option and the list of mentions, with one text per language]]&lt;br /&gt;
&lt;br /&gt;
==Deleting a mention still in use==&lt;br /&gt;
When third parties carry the mention you delete, the confirmation window names them and says what they lose. Once you confirm, the mention is removed from their cards and their next invoices are printed without mention. To stop printing a mention without touching the cards, disable it instead.&lt;br /&gt;
&lt;br /&gt;
A deletion made from the dictionary screen does not warn: the third parties keep a choice that no longer exists. Prefer the setup page of the module to delete a mention.[[File:5_DoliLegalMention_delete.png|thumb|center|700px|Deleting a mention still in use names the customers concerned]]&lt;br /&gt;
&lt;br /&gt;
==Two examples to adapt==&lt;br /&gt;
On its first activation, the module installs two examples taken from French VAT law, with a text in French and in English: &#039;&#039;UE_PRO&#039;&#039;, the intra-Community supply to a business whose VAT number was checked on VIES (article 262 ter I of the French General Tax Code), and &#039;&#039;EXPORT&#039;&#039;, the export outside the European Union (article 262 I). Each example is offered once: one you deleted does not come back, even after an update, and a text you changed is never overwritten.&lt;br /&gt;
&lt;br /&gt;
The module prints the text you write: the choice and the wording of each mention remain yours, to be checked with your accountant. It checks neither the VAT number nor the country of the customer, and it prints on customer invoices only, not on proposals, orders or supplier invoices.&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
#Download the module zip file.&lt;br /&gt;
#Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
#Activate &#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; in the module list.&lt;br /&gt;
&lt;br /&gt;
Activation creates the two tables of the module, adds the field &#039;&#039;Legal mention?&#039;&#039; to the third party card and installs the two examples. When upgrading, disable then enable the module again: the mentions, their texts, the choice made on each third party and the option are kept.&lt;br /&gt;
=Setup=&lt;br /&gt;
&#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, line &#039;&#039;Doli Legal Mention&#039;&#039;, setup icon, reserved to administrators:&lt;br /&gt;
&lt;br /&gt;
*the option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default,&lt;br /&gt;
*the list of mentions and their texts, language by language.&lt;br /&gt;
&lt;br /&gt;
The module adds no permission: a user allowed to modify a third party can choose its mention.&lt;br /&gt;
&lt;br /&gt;
Full documentation: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/USER-GUIDE.md user guide] and [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/TECHNICAL.md technical documentation].&lt;br /&gt;
=Version history=&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
=Support=&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
Bug reports and feature requests: [https://framagit.org/doli/modules/dolilegalmention/-/work_items issue tracker] (free Framagit account).&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68267</id>
		<title>Module Doli Legal Mention</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68267"/>
		<updated>2026-10-20T23:30:34Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* A list you manage yourself */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Legal Mention&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolilegalmention&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=3773&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 or higher, PHP 7.4 or higher, the Third parties and Invoices modules enabled&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; prints on each customer invoice the legal mention its customer requires, such as the VAT exemption of an intra-Community supply or of an export.[[File:1_DoliLegalMention_invoice.png|thumb|center|700px|The mention printed under the public note of the invoice, in the language of the customer]]&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
==One mention per customer, chosen once==&lt;br /&gt;
On the card of the third party, the field &#039;&#039;Legal mention?&#039;&#039; offers the list of the active mentions. You choose the mention once; every customer invoice of that third party then carries it. Leave the field empty for a customer who needs no mention.[[File:2_DoliLegalMention_thirdparty.png|thumb|center|700px|The legal mention chosen on the third party card]]&lt;br /&gt;
&lt;br /&gt;
==Printed under the public note, with every PDF template==&lt;br /&gt;
When the PDF of a customer invoice is generated, the mention is printed under the public note, as its last lines. Credit notes and down payment invoices follow the same rules. The module changes no PDF template: it works with every template that prints the public note, as the standard templates of Dolibarr do. It was tested with the Sponge and Crabe templates.&lt;br /&gt;
&lt;br /&gt;
The mention is added for the time of the PDF only: the public note saved on the invoice never changes. A PDF already generated keeps what it printed; generate it again to take a new mention or a new text into account.&lt;br /&gt;
==Only on invoices without VAT, by default==&lt;br /&gt;
An exemption mention on an invoice that carries VAT would be false. The option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default, prints the mention only when the invoice carries no VAT: a customer who has a mention but buys a product subject to VAT receives an invoice without mention. Switch it off only if some of your mentions must also appear on taxed invoices.&lt;br /&gt;
==One text per language==&lt;br /&gt;
Each mention has one text per language, printed in the language of the third party, the field &#039;&#039;Default language&#039;&#039; of its card. Without a text in that language, the module takes the same language of another country (the German of Germany for a customer in Austria), then the main language of Dolibarr. When none of these languages has a text, nothing is printed.&lt;br /&gt;
==A list you manage yourself==&lt;br /&gt;
The setup page of the module, reserved to administrators, holds the list: add, modify, translate, disable and delete the mentions. Choose a language and click &#039;&#039;Refresh&#039;&#039; to show and edit the texts written in that language. Disabling a mention stops printing it, and the third parties keep their choice: enabled again, the mention is printed again on their next invoices.&lt;br /&gt;
&lt;br /&gt;
Code, label, position and status can also be edited in &#039;&#039;Setup - Dictionaries&#039;&#039;, dictionary &#039;&#039;Legal mentions&#039;&#039;. The texts are edited in the setup page of the module only.[[File:4_DoliLegalMention_setup.png|thumb|center|700px|The setup: the option and the list of mentions, with one text per language]]&lt;br /&gt;
&lt;br /&gt;
==Deleting a mention still in use==&lt;br /&gt;
When third parties carry the mention you delete, the confirmation window names them and says what they lose. Once you confirm, the mention is removed from their cards and their next invoices are printed without mention. To stop printing a mention without touching the cards, disable it instead.&lt;br /&gt;
&lt;br /&gt;
A deletion made from the dictionary screen does not warn: the third parties keep a choice that no longer exists. Prefer the setup page of the module to delete a mention.[[File:DoliLegalMention_delete.png|thumb|center|700px|Deleting a mention still in use names the customers concerned]]&lt;br /&gt;
==Two examples to adapt==&lt;br /&gt;
On its first activation, the module installs two examples taken from French VAT law, with a text in French and in English: &#039;&#039;UE_PRO&#039;&#039;, the intra-Community supply to a business whose VAT number was checked on VIES (article 262 ter I of the French General Tax Code), and &#039;&#039;EXPORT&#039;&#039;, the export outside the European Union (article 262 I). Each example is offered once: one you deleted does not come back, even after an update, and a text you changed is never overwritten.&lt;br /&gt;
&lt;br /&gt;
The module prints the text you write: the choice and the wording of each mention remain yours, to be checked with your accountant. It checks neither the VAT number nor the country of the customer, and it prints on customer invoices only, not on proposals, orders or supplier invoices.&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
#Download the module zip file.&lt;br /&gt;
#Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
#Activate &#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; in the module list.&lt;br /&gt;
&lt;br /&gt;
Activation creates the two tables of the module, adds the field &#039;&#039;Legal mention?&#039;&#039; to the third party card and installs the two examples. When upgrading, disable then enable the module again: the mentions, their texts, the choice made on each third party and the option are kept.&lt;br /&gt;
=Setup=&lt;br /&gt;
&#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, line &#039;&#039;Doli Legal Mention&#039;&#039;, setup icon, reserved to administrators:&lt;br /&gt;
&lt;br /&gt;
*the option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default,&lt;br /&gt;
*the list of mentions and their texts, language by language.&lt;br /&gt;
&lt;br /&gt;
The module adds no permission: a user allowed to modify a third party can choose its mention.&lt;br /&gt;
&lt;br /&gt;
Full documentation: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/USER-GUIDE.md user guide] and [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/TECHNICAL.md technical documentation].&lt;br /&gt;
=Version history=&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
=Support=&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
Bug reports and feature requests: [https://framagit.org/doli/modules/dolilegalmention/-/work_items issue tracker] (free Framagit account).&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68266</id>
		<title>Module Doli Legal Mention</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68266"/>
		<updated>2026-10-20T23:30:09Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* One mention per customer, chosen once */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Legal Mention&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolilegalmention&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=3773&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 or higher, PHP 7.4 or higher, the Third parties and Invoices modules enabled&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; prints on each customer invoice the legal mention its customer requires, such as the VAT exemption of an intra-Community supply or of an export.[[File:1_DoliLegalMention_invoice.png|thumb|center|700px|The mention printed under the public note of the invoice, in the language of the customer]]&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
==One mention per customer, chosen once==&lt;br /&gt;
On the card of the third party, the field &#039;&#039;Legal mention?&#039;&#039; offers the list of the active mentions. You choose the mention once; every customer invoice of that third party then carries it. Leave the field empty for a customer who needs no mention.[[File:2_DoliLegalMention_thirdparty.png|thumb|center|700px|The legal mention chosen on the third party card]]&lt;br /&gt;
&lt;br /&gt;
==Printed under the public note, with every PDF template==&lt;br /&gt;
When the PDF of a customer invoice is generated, the mention is printed under the public note, as its last lines. Credit notes and down payment invoices follow the same rules. The module changes no PDF template: it works with every template that prints the public note, as the standard templates of Dolibarr do. It was tested with the Sponge and Crabe templates.&lt;br /&gt;
&lt;br /&gt;
The mention is added for the time of the PDF only: the public note saved on the invoice never changes. A PDF already generated keeps what it printed; generate it again to take a new mention or a new text into account.&lt;br /&gt;
==Only on invoices without VAT, by default==&lt;br /&gt;
An exemption mention on an invoice that carries VAT would be false. The option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default, prints the mention only when the invoice carries no VAT: a customer who has a mention but buys a product subject to VAT receives an invoice without mention. Switch it off only if some of your mentions must also appear on taxed invoices.&lt;br /&gt;
==One text per language==&lt;br /&gt;
Each mention has one text per language, printed in the language of the third party, the field &#039;&#039;Default language&#039;&#039; of its card. Without a text in that language, the module takes the same language of another country (the German of Germany for a customer in Austria), then the main language of Dolibarr. When none of these languages has a text, nothing is printed.&lt;br /&gt;
==A list you manage yourself==&lt;br /&gt;
The setup page of the module, reserved to administrators, holds the list: add, modify, translate, disable and delete the mentions. Choose a language and click &#039;&#039;Refresh&#039;&#039; to show and edit the texts written in that language. Disabling a mention stops printing it, and the third parties keep their choice: enabled again, the mention is printed again on their next invoices.&lt;br /&gt;
&lt;br /&gt;
Code, label, position and status can also be edited in &#039;&#039;Setup - Dictionaries&#039;&#039;, dictionary &#039;&#039;Legal mentions&#039;&#039;. The texts are edited in the setup page of the module only.[[File:DoliLegalMention_setup.png|thumb|center|700px|The setup: the option and the list of mentions, with one text per language]]&lt;br /&gt;
==Deleting a mention still in use==&lt;br /&gt;
When third parties carry the mention you delete, the confirmation window names them and says what they lose. Once you confirm, the mention is removed from their cards and their next invoices are printed without mention. To stop printing a mention without touching the cards, disable it instead.&lt;br /&gt;
&lt;br /&gt;
A deletion made from the dictionary screen does not warn: the third parties keep a choice that no longer exists. Prefer the setup page of the module to delete a mention.[[File:DoliLegalMention_delete.png|thumb|center|700px|Deleting a mention still in use names the customers concerned]]&lt;br /&gt;
==Two examples to adapt==&lt;br /&gt;
On its first activation, the module installs two examples taken from French VAT law, with a text in French and in English: &#039;&#039;UE_PRO&#039;&#039;, the intra-Community supply to a business whose VAT number was checked on VIES (article 262 ter I of the French General Tax Code), and &#039;&#039;EXPORT&#039;&#039;, the export outside the European Union (article 262 I). Each example is offered once: one you deleted does not come back, even after an update, and a text you changed is never overwritten.&lt;br /&gt;
&lt;br /&gt;
The module prints the text you write: the choice and the wording of each mention remain yours, to be checked with your accountant. It checks neither the VAT number nor the country of the customer, and it prints on customer invoices only, not on proposals, orders or supplier invoices.&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
#Download the module zip file.&lt;br /&gt;
#Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
#Activate &#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; in the module list.&lt;br /&gt;
&lt;br /&gt;
Activation creates the two tables of the module, adds the field &#039;&#039;Legal mention?&#039;&#039; to the third party card and installs the two examples. When upgrading, disable then enable the module again: the mentions, their texts, the choice made on each third party and the option are kept.&lt;br /&gt;
=Setup=&lt;br /&gt;
&#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, line &#039;&#039;Doli Legal Mention&#039;&#039;, setup icon, reserved to administrators:&lt;br /&gt;
&lt;br /&gt;
*the option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default,&lt;br /&gt;
*the list of mentions and their texts, language by language.&lt;br /&gt;
&lt;br /&gt;
The module adds no permission: a user allowed to modify a third party can choose its mention.&lt;br /&gt;
&lt;br /&gt;
Full documentation: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/USER-GUIDE.md user guide] and [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/TECHNICAL.md technical documentation].&lt;br /&gt;
=Version history=&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
=Support=&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
Bug reports and feature requests: [https://framagit.org/doli/modules/dolilegalmention/-/work_items issue tracker] (free Framagit account).&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68265</id>
		<title>Module Doli Legal Mention</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68265"/>
		<updated>2026-10-20T23:29:53Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Legal Mention&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolilegalmention&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=3773&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 or higher, PHP 7.4 or higher, the Third parties and Invoices modules enabled&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; prints on each customer invoice the legal mention its customer requires, such as the VAT exemption of an intra-Community supply or of an export.[[File:1_DoliLegalMention_invoice.png|thumb|center|700px|The mention printed under the public note of the invoice, in the language of the customer]]&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
==One mention per customer, chosen once==&lt;br /&gt;
On the card of the third party, the field &#039;&#039;Legal mention?&#039;&#039; offers the list of the active mentions. You choose the mention once; every customer invoice of that third party then carries it. Leave the field empty for a customer who needs no mention.[[File:DoliLegalMention_thirdparty.png|thumb|center|700px|The legal mention chosen on the third party card]]&lt;br /&gt;
==Printed under the public note, with every PDF template==&lt;br /&gt;
When the PDF of a customer invoice is generated, the mention is printed under the public note, as its last lines. Credit notes and down payment invoices follow the same rules. The module changes no PDF template: it works with every template that prints the public note, as the standard templates of Dolibarr do. It was tested with the Sponge and Crabe templates.&lt;br /&gt;
&lt;br /&gt;
The mention is added for the time of the PDF only: the public note saved on the invoice never changes. A PDF already generated keeps what it printed; generate it again to take a new mention or a new text into account.&lt;br /&gt;
==Only on invoices without VAT, by default==&lt;br /&gt;
An exemption mention on an invoice that carries VAT would be false. The option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default, prints the mention only when the invoice carries no VAT: a customer who has a mention but buys a product subject to VAT receives an invoice without mention. Switch it off only if some of your mentions must also appear on taxed invoices.&lt;br /&gt;
==One text per language==&lt;br /&gt;
Each mention has one text per language, printed in the language of the third party, the field &#039;&#039;Default language&#039;&#039; of its card. Without a text in that language, the module takes the same language of another country (the German of Germany for a customer in Austria), then the main language of Dolibarr. When none of these languages has a text, nothing is printed.&lt;br /&gt;
==A list you manage yourself==&lt;br /&gt;
The setup page of the module, reserved to administrators, holds the list: add, modify, translate, disable and delete the mentions. Choose a language and click &#039;&#039;Refresh&#039;&#039; to show and edit the texts written in that language. Disabling a mention stops printing it, and the third parties keep their choice: enabled again, the mention is printed again on their next invoices.&lt;br /&gt;
&lt;br /&gt;
Code, label, position and status can also be edited in &#039;&#039;Setup - Dictionaries&#039;&#039;, dictionary &#039;&#039;Legal mentions&#039;&#039;. The texts are edited in the setup page of the module only.[[File:DoliLegalMention_setup.png|thumb|center|700px|The setup: the option and the list of mentions, with one text per language]]&lt;br /&gt;
==Deleting a mention still in use==&lt;br /&gt;
When third parties carry the mention you delete, the confirmation window names them and says what they lose. Once you confirm, the mention is removed from their cards and their next invoices are printed without mention. To stop printing a mention without touching the cards, disable it instead.&lt;br /&gt;
&lt;br /&gt;
A deletion made from the dictionary screen does not warn: the third parties keep a choice that no longer exists. Prefer the setup page of the module to delete a mention.[[File:DoliLegalMention_delete.png|thumb|center|700px|Deleting a mention still in use names the customers concerned]]&lt;br /&gt;
==Two examples to adapt==&lt;br /&gt;
On its first activation, the module installs two examples taken from French VAT law, with a text in French and in English: &#039;&#039;UE_PRO&#039;&#039;, the intra-Community supply to a business whose VAT number was checked on VIES (article 262 ter I of the French General Tax Code), and &#039;&#039;EXPORT&#039;&#039;, the export outside the European Union (article 262 I). Each example is offered once: one you deleted does not come back, even after an update, and a text you changed is never overwritten.&lt;br /&gt;
&lt;br /&gt;
The module prints the text you write: the choice and the wording of each mention remain yours, to be checked with your accountant. It checks neither the VAT number nor the country of the customer, and it prints on customer invoices only, not on proposals, orders or supplier invoices.&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
#Download the module zip file.&lt;br /&gt;
#Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
#Activate &#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; in the module list.&lt;br /&gt;
&lt;br /&gt;
Activation creates the two tables of the module, adds the field &#039;&#039;Legal mention?&#039;&#039; to the third party card and installs the two examples. When upgrading, disable then enable the module again: the mentions, their texts, the choice made on each third party and the option are kept.&lt;br /&gt;
=Setup=&lt;br /&gt;
&#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, line &#039;&#039;Doli Legal Mention&#039;&#039;, setup icon, reserved to administrators:&lt;br /&gt;
&lt;br /&gt;
*the option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default,&lt;br /&gt;
*the list of mentions and their texts, language by language.&lt;br /&gt;
&lt;br /&gt;
The module adds no permission: a user allowed to modify a third party can choose its mention.&lt;br /&gt;
&lt;br /&gt;
Full documentation: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/USER-GUIDE.md user guide] and [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/TECHNICAL.md technical documentation].&lt;br /&gt;
=Version history=&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
=Support=&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
Bug reports and feature requests: [https://framagit.org/doli/modules/dolilegalmention/-/work_items issue tracker] (free Framagit account).&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:5_DoliLegalMention_delete.png&amp;diff=68264</id>
		<title>File:5 DoliLegalMention delete.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:5_DoliLegalMention_delete.png&amp;diff=68264"/>
		<updated>2026-10-20T23:24:09Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{PD}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:4_DoliLegalMention_setup.png&amp;diff=68263</id>
		<title>File:4 DoliLegalMention setup.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:4_DoliLegalMention_setup.png&amp;diff=68263"/>
		<updated>2026-10-20T23:23:54Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{PD}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:3_DoliLegalMention_thirdparty_list.png&amp;diff=68262</id>
		<title>File:3 DoliLegalMention thirdparty list.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:3_DoliLegalMention_thirdparty_list.png&amp;diff=68262"/>
		<updated>2026-10-20T23:23:38Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{PD}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:2_DoliLegalMention_thirdparty.png&amp;diff=68261</id>
		<title>File:2 DoliLegalMention thirdparty.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:2_DoliLegalMention_thirdparty.png&amp;diff=68261"/>
		<updated>2026-10-20T23:23:24Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{PD}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:1_DoliLegalMention_invoice.png&amp;diff=68260</id>
		<title>File:1 DoliLegalMention invoice.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:1_DoliLegalMention_invoice.png&amp;diff=68260"/>
		<updated>2026-10-20T23:23:00Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{PD}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68259</id>
		<title>Module Doli Legal Mention</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Legal_Mention&amp;diff=68259"/>
		<updated>2026-10-20T23:22:05Z</updated>

		<summary type="html">&lt;p&gt;StephM: Created page with &amp;quot;{{TemplateDocUser}} =Information= {{TemplateModuleInfo |modulename=Doli Legal Mention |editor=Stéphane Mallet Informatique |web=https://framagit.org/doli/modules/dolilegalmen...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Legal Mention&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolilegalmention&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=3773&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 or higher, PHP 7.4 or higher, the Third parties and Invoices modules enabled&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; prints on each customer invoice the legal mention its customer requires, such as the VAT exemption of an intra-Community supply or of an export.[[File:DoliLegalMention_invoice.png|thumb|center|700px|The mention printed under the public note of the invoice, in the language of the customer]]&lt;br /&gt;
=Features=&lt;br /&gt;
==One mention per customer, chosen once==&lt;br /&gt;
On the card of the third party, the field &#039;&#039;Legal mention?&#039;&#039; offers the list of the active mentions. You choose the mention once; every customer invoice of that third party then carries it. Leave the field empty for a customer who needs no mention.[[File:DoliLegalMention_thirdparty.png|thumb|center|700px|The legal mention chosen on the third party card]]&lt;br /&gt;
==Printed under the public note, with every PDF template==&lt;br /&gt;
When the PDF of a customer invoice is generated, the mention is printed under the public note, as its last lines. Credit notes and down payment invoices follow the same rules. The module changes no PDF template: it works with every template that prints the public note, as the standard templates of Dolibarr do. It was tested with the Sponge and Crabe templates.&lt;br /&gt;
&lt;br /&gt;
The mention is added for the time of the PDF only: the public note saved on the invoice never changes. A PDF already generated keeps what it printed; generate it again to take a new mention or a new text into account.&lt;br /&gt;
==Only on invoices without VAT, by default==&lt;br /&gt;
An exemption mention on an invoice that carries VAT would be false. The option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default, prints the mention only when the invoice carries no VAT: a customer who has a mention but buys a product subject to VAT receives an invoice without mention. Switch it off only if some of your mentions must also appear on taxed invoices.&lt;br /&gt;
==One text per language==&lt;br /&gt;
Each mention has one text per language, printed in the language of the third party, the field &#039;&#039;Default language&#039;&#039; of its card. Without a text in that language, the module takes the same language of another country (the German of Germany for a customer in Austria), then the main language of Dolibarr. When none of these languages has a text, nothing is printed.&lt;br /&gt;
==A list you manage yourself==&lt;br /&gt;
The setup page of the module, reserved to administrators, holds the list: add, modify, translate, disable and delete the mentions. Choose a language and click &#039;&#039;Refresh&#039;&#039; to show and edit the texts written in that language. Disabling a mention stops printing it, and the third parties keep their choice: enabled again, the mention is printed again on their next invoices.&lt;br /&gt;
&lt;br /&gt;
Code, label, position and status can also be edited in &#039;&#039;Setup - Dictionaries&#039;&#039;, dictionary &#039;&#039;Legal mentions&#039;&#039;. The texts are edited in the setup page of the module only.[[File:DoliLegalMention_setup.png|thumb|center|700px|The setup: the option and the list of mentions, with one text per language]]&lt;br /&gt;
==Deleting a mention still in use==&lt;br /&gt;
When third parties carry the mention you delete, the confirmation window names them and says what they lose. Once you confirm, the mention is removed from their cards and their next invoices are printed without mention. To stop printing a mention without touching the cards, disable it instead.&lt;br /&gt;
&lt;br /&gt;
A deletion made from the dictionary screen does not warn: the third parties keep a choice that no longer exists. Prefer the setup page of the module to delete a mention.[[File:DoliLegalMention_delete.png|thumb|center|700px|Deleting a mention still in use names the customers concerned]]&lt;br /&gt;
==Two examples to adapt==&lt;br /&gt;
On its first activation, the module installs two examples taken from French VAT law, with a text in French and in English: &#039;&#039;UE_PRO&#039;&#039;, the intra-Community supply to a business whose VAT number was checked on VIES (article 262 ter I of the French General Tax Code), and &#039;&#039;EXPORT&#039;&#039;, the export outside the European Union (article 262 I). Each example is offered once: one you deleted does not come back, even after an update, and a text you changed is never overwritten.&lt;br /&gt;
&lt;br /&gt;
The module prints the text you write: the choice and the wording of each mention remain yours, to be checked with your accountant. It checks neither the VAT number nor the country of the customer, and it prints on customer invoices only, not on proposals, orders or supplier invoices.&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
#Download the module zip file.&lt;br /&gt;
#Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
#Activate &#039;&#039;&#039;Doli Legal Mention&#039;&#039;&#039; in the module list.&lt;br /&gt;
&lt;br /&gt;
Activation creates the two tables of the module, adds the field &#039;&#039;Legal mention?&#039;&#039; to the third party card and installs the two examples. When upgrading, disable then enable the module again: the mentions, their texts, the choice made on each third party and the option are kept.&lt;br /&gt;
=Setup=&lt;br /&gt;
&#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, line &#039;&#039;Doli Legal Mention&#039;&#039;, setup icon, reserved to administrators:&lt;br /&gt;
&lt;br /&gt;
*the option &#039;&#039;Print the mention only on invoices without VAT&#039;&#039;, on by default,&lt;br /&gt;
*the list of mentions and their texts, language by language.&lt;br /&gt;
&lt;br /&gt;
The module adds no permission: a user allowed to modify a third party can choose its mention.&lt;br /&gt;
&lt;br /&gt;
Full documentation: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/USER-GUIDE.md user guide] and [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/doc/TECHNICAL.md technical documentation].&lt;br /&gt;
=Version history=&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/dolilegalmention/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
=Support=&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
Bug reports and feature requests: [https://framagit.org/doli/modules/dolilegalmention/-/work_items issue tracker] (free Framagit account).&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=67981</id>
		<title>Module Auto Reminder FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=67981"/>
		<updated>2026-10-09T14:08:59Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* Historique des versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Auto_Reminder]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 ou supérieur&lt;br /&gt;
|note=Testé sur Dolibarr 24. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; envoie et relance automatiquement les factures et les devis dans Dolibarr. Tout est déclenché par une tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Factures ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des factures validées par email, avec le PDF de la facture en pièce jointe et le modèle d&#039;email de votre choix.&lt;br /&gt;
* Relance automatique des factures impayées, par paliers configurables. Chaque palier définit un délai en jours par rapport à la date d&#039;échéance (ou à la date de facture s&#039;il n&#039;y a pas d&#039;échéance) et son modèle d&#039;email. Les délais négatifs sont acceptés, pour une relance préventive avant l&#039;échéance.&lt;br /&gt;
* Option pour inclure ou exclure les factures partiellement payées.&lt;br /&gt;
&lt;br /&gt;
== Devis (depuis la 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des devis validés par email, avec le PDF du devis en pièce jointe.&lt;br /&gt;
* Relance automatique des devis restés sans réponse (ni signés, ni refusés, ni facturés). Les paliers sont comptés à partir de la date de fin de validité du devis, ou de sa date s&#039;il n&#039;en a pas.&lt;br /&gt;
* Réglages entièrement séparés de ceux des factures : la page de configuration a un onglet Factures et un onglet Devis, chacun avec ses interrupteurs, son modèle d&#039;email et ses paliers.&lt;br /&gt;
&lt;br /&gt;
== Seul le palier le plus élevé atteint est envoyé ==&lt;br /&gt;
&lt;br /&gt;
Pour chaque document, seul le palier de relance le plus élevé atteint est retenu. Les paliers inférieurs manqués ne sont jamais rattrapés : un document déjà en retard au moment où le module est activé reçoit une seule relance, celle qui correspond à son retard réel, avec le bon modèle d&#039;email. Jamais une rafale de relances sur plusieurs jours.&lt;br /&gt;
&lt;br /&gt;
== Destinataire des emails ==&lt;br /&gt;
&lt;br /&gt;
Le destinataire est déterminé dans cet ordre, aussi bien pour l&#039;envoi que pour les relances :&lt;br /&gt;
&lt;br /&gt;
# Le contact rattaché au document (onglet Contacts de la facture ou du devis), quel que soit son rôle. Si plusieurs contacts sont rattachés : facturation, puis prestation, puis livraison pour une facture ; suivi, puis facturation, puis livraison pour un devis.&lt;br /&gt;
# Sinon le contact par défaut du tiers pour ce type de document (onglet Contacts/Adresses du tiers).&lt;br /&gt;
# Sinon le premier contact actif du tiers ayant une adresse email.&lt;br /&gt;
# Sinon l&#039;adresse email du tiers.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.3.1, tous les contacts à égalité sur le rôle le plus prioritaire sont retenus, et non plus seulement le premier : deux ou trois contacts de facturation rattachés à la même facture reçoivent tous l&#039;email, en un seul envoi. L&#039;ordre de priorité est inchangé, un contact de facturation l&#039;emporte toujours sur un contact de livraison. Les étapes 1 et 2 ci-dessus fonctionnent ainsi ; l&#039;étape 3 ne retient qu&#039;un seul destinataire, puisque sans rôle rien n&#039;indique qui s&#039;occupe des factures.&lt;br /&gt;
&lt;br /&gt;
Les contacts désactivés et les contacts sans email ne sont jamais utilisés. Si aucun destinataire n&#039;est trouvé, rien n&#039;est envoyé et un événement est enregistré dans l&#039;agenda du document.&lt;br /&gt;
&lt;br /&gt;
== Langue des emails (depuis la 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
Le modèle choisi dans les réglages fixe le LIBELLÉ de référence, pas la langue. Si l&#039;option multilingue de Dolibarr est activée et que le tiers a sa propre langue, le module utilise le modèle d&#039;email portant le même libellé dans cette langue, et se rabat sur celui des réglages s&#039;il n&#039;y en a pas. Le repli de langue (es_MX vers es_ES, puis modèle sans langue) est celui de Dolibarr. Quand une traduction est utilisée, les montants et les dates du message suivent également cette langue. Le PDF joint, lui, n&#039;est pas régénéré : c&#039;est le document tel qu&#039;il existe.&lt;br /&gt;
&lt;br /&gt;
Traduire un modèle est un geste Dolibarr, pas un réglage du module : recréer le modèle avec le MÊME libellé, choisir la langue, puis traduire le sujet et le contenu. À noter, la colonne Langue des modèles d&#039;email n&#039;apparaît que si l&#039;option multilingue est activée.&lt;br /&gt;
&lt;br /&gt;
== Garde-fou contre l&#039;envoi en masse ==&lt;br /&gt;
&lt;br /&gt;
Seuls les documents validés après l&#039;activation de l&#039;option d&#039;envoi sont envoyés : activer le module sur une base existante n&#039;envoie jamais l&#039;historique. La date de référence est enregistrée au moment où vous activez l&#039;option, affichée dans les réglages, et modifiable : vous pouvez la reculer en connaissance de cause pour inclure une partie de l&#039;historique. Un avertissement explicite est affiché à côté du champ : tout document validé à partir de cette date et jamais envoyé partira au prochain passage de la tâche planifiée.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
Une case à cocher « Exclure des relances automatiques » est disponible :&lt;br /&gt;
* sur la fiche tiers : ne jamais relancer ce client (factures et devis),&lt;br /&gt;
* sur la fiche facture : ne jamais relancer cette facture (litige, échéancier négocié...),&lt;br /&gt;
* sur la fiche devis : ne jamais relancer ce devis.&lt;br /&gt;
&lt;br /&gt;
L&#039;envoi initial des documents n&#039;est pas concerné par ces cases.&lt;br /&gt;
&lt;br /&gt;
== Quand un document ne peut pas être traité ==&lt;br /&gt;
&lt;br /&gt;
Quand un document ne peut pas être traité (aucun destinataire valide, PDF introuvable, modèle d&#039;email introuvable, échec d&#039;envoi), le module enregistre un événement dans l&#039;agenda du document avec la raison en clair, une seule fois par document et par raison. En regardant la facture ou le devis, vous voyez immédiatement pourquoi rien n&#039;est parti.&lt;br /&gt;
&lt;br /&gt;
== Multi-société (module Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
Le module fonctionne avec le module Multicompany. Chaque société envoie et relance &#039;&#039;&#039;ses propres documents uniquement&#039;&#039;&#039;, avec ses propres réglages, ses propres paliers et ses propres modèles d&#039;email. Le partage de Multicompany donne un droit de lecture sur les documents d&#039;une autre société, il ne change pas leur propriétaire : une facture partagée reste relancée par la société à laquelle elle appartient. Il n&#039;y a rien à régler. Avant la 1.3.3, une société prenait aussi les factures et les devis des sociétés qu&#039;elle avait le droit de voir, et les traitait avec ses propres réglages.&lt;br /&gt;
&lt;br /&gt;
== Déclencheurs pour les développeurs (depuis la 1.3.5) ==&lt;br /&gt;
&lt;br /&gt;
Après chaque email parti avec succès, le module lance un déclencheur (trigger) sur la facture ou le devis, pour qu&#039;un autre module puisse y réagir : &amp;lt;code&amp;gt;AUTOREMINDER_SEND&amp;lt;/code&amp;gt; après l&#039;envoi automatique d&#039;un document validé, &amp;lt;code&amp;gt;AUTOREMINDER_REMIND&amp;lt;/code&amp;gt; après une relance. Le déclencheur reçoit le document dans &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt; et le détail dans &amp;lt;code&amp;gt;$object-&amp;gt;context[&#039;autoreminder&#039;]&amp;lt;/code&amp;gt; : &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;actioncomm_id&amp;lt;/code&amp;gt; (l&#039;événement d&#039;agenda de cet email), &amp;lt;code&amp;gt;level_id&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;level_days&amp;lt;/code&amp;gt; (le palier de relance, 0 et vide pour l&#039;envoi initial), &amp;lt;code&amp;gt;email_to&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_subject&amp;lt;/code&amp;gt;. Le module ne lance pas les déclencheurs natifs &amp;lt;code&amp;gt;BILL_SENTBYMAIL&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;PROPAL_SENTBYMAIL&amp;lt;/code&amp;gt;, qui signifient qu&#039;un utilisateur a envoyé le document depuis sa fiche.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Télécharger le fichier zip du module.&lt;br /&gt;
# Se connecter à Dolibarr en administrateur, aller dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et envoyer le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; dans la section &#039;&#039;Modules financiers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le module crée automatiquement sa table en base, ses champs complémentaires et une tâche planifiée quotidienne. Lors d&#039;une mise à jour depuis une version 1.x, les paliers existants sont conservés en tant que paliers de factures.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Avant de configurer le module, créez vos modèles d&#039;email dans &#039;&#039;Accueil - Configuration - Emails - Modèles d&#039;emails&#039;&#039; : type &#039;&#039;Envoi facture&#039;&#039; pour les factures, type &#039;&#039;Envoi proposition commerciale&#039;&#039; pour les devis. Un modèle pour l&#039;envoi initial, un par palier de relance.&lt;br /&gt;
&lt;br /&gt;
Ouvrez ensuite les réglages du module. Il y a un onglet par type de document (Factures, Devis), chacun avec :&lt;br /&gt;
&lt;br /&gt;
* l&#039;interrupteur d&#039;envoi automatique et son modèle d&#039;email. À l&#039;activation, la date du jour est enregistrée : seuls les documents validés à partir de cette date seront envoyés. La date est modifiable (avec un avertissement),&lt;br /&gt;
* l&#039;interrupteur de relance automatique (et, pour les factures uniquement, l&#039;option des factures partiellement payées),&lt;br /&gt;
* le tableau des paliers de relance : délai en jours + modèle d&#039;email, autant de paliers que vous voulez.&lt;br /&gt;
&lt;br /&gt;
La tâche planifiée &#039;&#039;AutoReminderJob&#039;&#039; s&#039;exécute une fois par jour par défaut (voir &#039;&#039;Accueil - Configuration - Tâches planifiées&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/doli/modules/autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=67980</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=67980"/>
		<updated>2026-10-09T14:08:43Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* Version history */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Auto_Reminder_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 or higher&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Language of the emails (since 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
The template selected in the settings defines the LABEL of reference, not the language. When the Dolibarr multi-language option is enabled and the third party has its own language, the module uses the email template carrying the same label in that language, and falls back to the template selected in the settings when there is none. The language fallback (es_MX to es_ES, then a template with no language) is the native Dolibarr one. When a translation is used, amounts and dates in the email follow that language too. The attached PDF is not regenerated: it is the document as it stands.&lt;br /&gt;
&lt;br /&gt;
Translating a template is done in Dolibarr itself, not in the module settings: create the template again with the SAME label, choose the language, then translate the subject and the content. Note that the Language column of email templates only appears when the multi-language option is enabled.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
== Multi-company (Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
The module works with the Multicompany module. Each entity sends and reminds &#039;&#039;&#039;its own documents only&#039;&#039;&#039;, with its own settings, its own reminder levels and its own email templates. Sharing in Multicompany grants read visibility on the documents of another entity, it does not change their owner: a shared invoice is still reminded by the entity it belongs to. Nothing to configure. Before 1.3.3, an entity picked up the invoices and proposals of the entities it was allowed to see and processed them with its own settings.&lt;br /&gt;
&lt;br /&gt;
== Triggers for developers (since 1.3.5) ==&lt;br /&gt;
&lt;br /&gt;
After each successful email, the module fires a trigger on the invoice or proposal, so that another module can react to it: &amp;lt;code&amp;gt;AUTOREMINDER_SEND&amp;lt;/code&amp;gt; after the automatic sending of a validated document, &amp;lt;code&amp;gt;AUTOREMINDER_REMIND&amp;lt;/code&amp;gt; after a reminder. The listener receives the document as &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt; and the details in &amp;lt;code&amp;gt;$object-&amp;gt;context[&#039;autoreminder&#039;]&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;actioncomm_id&amp;lt;/code&amp;gt; (the agenda event of this email), &amp;lt;code&amp;gt;level_id&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;level_days&amp;lt;/code&amp;gt; (the reminder level, 0 and empty for the initial sending), &amp;lt;code&amp;gt;email_to&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_subject&amp;lt;/code&amp;gt;. The module does not fire the core &amp;lt;code&amp;gt;BILL_SENTBYMAIL&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PROPAL_SENTBYMAIL&amp;lt;/code&amp;gt; triggers, which mean that a user sent the document from its card.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Mail_Later_FR&amp;diff=67493</id>
		<title>Module Doli Mail Later FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Mail_Later_FR&amp;diff=67493"/>
		<updated>2026-09-29T18:05:04Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Doli_Mail_Later]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Mail Later&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolimaillater&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=DOLISTORE_ID&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 ou supérieur, PHP 7.4 ou supérieur, le planificateur de tâches de Dolibarr actif&lt;br /&gt;
|note=Testé sur Dolibarr 23 et 24, écran d&#039;envoi vérifié sur Dolibarr 22. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Doli Mail Later&#039;&#039;&#039; permet de programmer l&#039;envoi des mails de Dolibarr à un jour et une heure choisis, au lieu de les envoyer tout de suite.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_schedule.png|thumb|center|700px|La fenêtre de programmation, au-dessus du bouton Programmer l&#039;envoi]]&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Programmer un envoi ==&lt;br /&gt;
&lt;br /&gt;
Sur l&#039;écran d&#039;envoi d&#039;un tiers, d&#039;un devis ou d&#039;une facture client, un bouton &#039;&#039;Programmer l&#039;envoi&#039;&#039; se place à côté de &#039;&#039;Envoyer email&#039;&#039;. Il ouvre une petite fenêtre avec un jour, une heure et trois raccourcis tout prêts : dans 15 minutes, dans 30 minutes, dans 2 heures. Vous préparez le message exactement comme d&#039;habitude ; au lieu de partir, il attend dans une file et part tout seul le moment venu.&lt;br /&gt;
&lt;br /&gt;
L&#039;expéditeur et le destinataire sont vérifiés à la programmation : un message sans adresse d&#039;expéditeur ou de destinataire valable est refusé tout de suite, il n&#039;entre jamais dans la file pour échouer le jour prévu.&lt;br /&gt;
&lt;br /&gt;
== Ce qu&#039;on relit est ce qui part ==&lt;br /&gt;
&lt;br /&gt;
Le message est figé à la programmation : destinataires résolus, variables des modèles remplacées, documents joints recopiés dans le dossier du module. Regénérer ou supprimer la facture d&#039;origine ne change pas ce qui sera envoyé.&lt;br /&gt;
&lt;br /&gt;
== Avertissement quand un message attend déjà ==&lt;br /&gt;
&lt;br /&gt;
Quand un message attend déjà pour le même client, un bandeau rouge apparaît au-dessus du formulaire d&#039;envoi. Il compte les messages de tous les utilisateurs, pour que deux collègues n&#039;écrivent pas deux fois au même client, et permet de relire chacun d&#039;eux avant d&#039;en écrire un autre.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_banner.png|thumb|center|700px|Le bandeau des messages déjà en attente pour ce client]]&lt;br /&gt;
&lt;br /&gt;
Une enveloppe dans la barre du haut indique combien de messages attendent leur départ ; un clic ouvre la file sur eux.&lt;br /&gt;
&lt;br /&gt;
== La file ==&lt;br /&gt;
&lt;br /&gt;
Le menu &#039;&#039;Doli Mail Later&#039;&#039; liste tous les messages programmés, filtrables par état ou par client. La fiche d&#039;un message le montre tel qu&#039;il partira, et permet de déplacer son rendez-vous, de l&#039;envoyer maintenant, de l&#039;annuler ou de le mettre à la corbeille. États : en attente, envoyé, refusé par le serveur de mail, retenu, annulé.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_queue.png|thumb|center|700px|La file des messages programmés]]&lt;br /&gt;
&lt;br /&gt;
== Les vieux messages ne se réveillent pas ==&lt;br /&gt;
&lt;br /&gt;
Une tâche planifiée envoie les messages arrivés à échéance toutes les cinq minutes. Si le serveur a été arrêté et qu&#039;une heure prévue est dépassée de plus que le retard toléré (deux jours par défaut), le message est retenu au lieu de partir, et attend votre décision.&lt;br /&gt;
&lt;br /&gt;
== L&#039;agenda dit la vérité ==&lt;br /&gt;
&lt;br /&gt;
Programmer un message crée un événement d&#039;agenda rattaché au client et au document d&#039;origine. Il est mis à jour quand le message part, est annulé, retenu ou refusé : l&#039;agenda n&#039;annonce jamais un envoi qui n&#039;a pas eu lieu.&lt;br /&gt;
&lt;br /&gt;
== Déclencheurs pour les développeurs ==&lt;br /&gt;
&lt;br /&gt;
À chaque étape, le module lance un déclencheur à son propre nom : &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_SCHEDULED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_RESCHEDULED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_SENT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_ERROR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_HELD&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_CANCELED&amp;lt;/code&amp;gt;. L&#039;écouteur reçoit le message programmé dans &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt; : tiers, document d&#039;origine, rendez-vous, adresses, sujet et état.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Téléchargez le fichier zip du module.&lt;br /&gt;
# Connectez-vous à Dolibarr en administrateur, allez dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et déposez le zip.&lt;br /&gt;
# Activez &#039;&#039;&#039;Doli Mail Later&#039;&#039;&#039; dans la liste des modules.&lt;br /&gt;
&lt;br /&gt;
Le module crée ses deux tables et sa tâche planifiée automatiquement. Le planificateur de tâches de Dolibarr doit être actif et appelé par votre serveur, sinon rien ne part. Lors d&#039;une mise à jour, désactivez puis réactivez le module.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Doli Mail Later - Configuration&#039;&#039;, réservée aux administrateurs :&lt;br /&gt;
&lt;br /&gt;
* le retard toléré avant qu&#039;un message en retard soit retenu (2880 minutes, deux jours, par défaut ; zéro ne retient rien),&lt;br /&gt;
* les trois raccourcis de la fenêtre de programmation, en minutes (15, 30 et 120 par défaut).&lt;br /&gt;
&lt;br /&gt;
Trois droits : lire les messages programmés ; programmer un envoi, le déplacer, l&#039;annuler ; mettre un message programmé à la corbeille.&lt;br /&gt;
&lt;br /&gt;
Documentation complète : [https://framagit.org/doli/modules/dolimaillater/-/blob/main/doc/USER-GUIDE.fr.md guide de l&#039;utilisateur] et [https://framagit.org/doli/modules/dolimaillater/-/blob/main/doc/TECHNICAL.fr.md documentation technique].&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.2.3&#039;&#039;&#039; (2026-09-29, bêta) : libellés traduits sur la fiche d&#039;un message, couleurs du thème (thème sombre compris), documentation incluse dans le paquet.&lt;br /&gt;
* &#039;&#039;&#039;1.2.2&#039;&#039;&#039; (2026-09-29) : Dolibarr est chargé par la séquence standard exigée par la validation du Dolistore.&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/doli/modules/dolimaillater/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Doli Mail Later}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Mail_Later_FR&amp;diff=67492</id>
		<title>Module Doli Mail Later FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Mail_Later_FR&amp;diff=67492"/>
		<updated>2026-09-29T18:01:08Z</updated>

		<summary type="html">&lt;p&gt;StephM: Created page with &amp;quot;&amp;lt;!-- BEGIN interlang links --&amp;gt; en:Module_Doli_Mail_Later &amp;lt;!-- END interlang links --&amp;gt;  Category:Modules complémentaires {{TemplateDocUtil}} =Informations= {{TemplateM...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Doli_Mail_Later]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Mail Later&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolimaillater&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=DOLISTORE_ID&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 ou supérieur, PHP 7.4 ou supérieur, le planificateur de tâches de Dolibarr actif&lt;br /&gt;
|note=Testé sur Dolibarr 23 et 24, écran d&#039;envoi vérifié sur Dolibarr 22. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Doli Mail Later&#039;&#039;&#039; permet de programmer l&#039;envoi des mails de Dolibarr à un jour et une heure choisis, au lieu de les envoyer tout de suite.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_schedule.png|thumb|center|700px|La fenêtre de programmation, au-dessus du bouton Programmer l&#039;envoi]]&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Programmer un envoi ==&lt;br /&gt;
&lt;br /&gt;
Sur l&#039;écran d&#039;envoi d&#039;un tiers, d&#039;un devis ou d&#039;une facture client, un  se place à côté de &#039;&#039;Envoyer email&#039;&#039;. Il ouvre une petite fenêtre avec&lt;br /&gt;
un jour, une heure et trois raccourcis tout prêts : dans 15 minutes, da Vous préparez le message exactement comme d&#039;habitude ; au lieu de&lt;br /&gt;
partir, il attend dans une file et part tout seul le moment venu.&lt;br /&gt;
&lt;br /&gt;
L&#039;expéditeur et le destinataire sont vérifiés à la programmation : un meur ou de destinataire valable est refusé tout de suite, il n&#039;entre&lt;br /&gt;
jamais dans la file pour échouer le jour prévu.&lt;br /&gt;
&lt;br /&gt;
== Ce qu&#039;on relit est ce qui part ==&lt;br /&gt;
&lt;br /&gt;
Le message est figé à la programmation : destinataires résolus, variablcuments joints recopiés dans le dossier du module. Regénérer ou&lt;br /&gt;
supprimer la facture d&#039;origine ne change pas ce qui sera envoyé.&lt;br /&gt;
&lt;br /&gt;
== Avertissement quand un message attend déjà ==&lt;br /&gt;
&lt;br /&gt;
Quand un message attend déjà pour le même client, un bandeau rouge appad&#039;envoi. Il compte les messages de tous les utilisateurs, pour que deux&lt;br /&gt;
collègues n&#039;écrivent pas deux fois au même client, et permet de relire e un autre.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_banner.png|thumb|center|700px|Le bandeau des messalient]]&lt;br /&gt;
&lt;br /&gt;
Une enveloppe dans la barre du haut indique combien de messages attendent leur départ ; un clic ouvre la file sur eux.&lt;br /&gt;
&lt;br /&gt;
== La file ==&lt;br /&gt;
&lt;br /&gt;
Le menu &#039;&#039;Doli Mail Later&#039;&#039; liste tous les messages programmés, filtraba fiche d&#039;un message le montre tel qu&#039;il partira, et permet de déplacer&lt;br /&gt;
son rendez-vous, de l&#039;envoyer maintenant, de l&#039;annuler ou de le mettre tente, envoyé, refusé par le serveur de mail, retenu, annulé.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_queue.png|thumb|center|700px|La file des messages&lt;br /&gt;
&lt;br /&gt;
== Les vieux messages ne se réveillent pas ==&lt;br /&gt;
&lt;br /&gt;
Une tâche planifiée envoie les messages arrivés à échéance toutes les cété arrêté et qu&#039;une heure prévue est dépassée de plus que le retardtoléré (deux jours par défaut), le message est retenu au lieu de partir, et attend votre décision.&lt;br /&gt;
&lt;br /&gt;
== L&#039;agenda dit la vérité ==&lt;br /&gt;
&lt;br /&gt;
Programmer un message crée un événement d&#039;agenda rattaché au client et  mis à jour quand le message part, est annulé, retenu ou refusé :&lt;br /&gt;
l&#039;agenda n&#039;annonce jamais un envoi qui n&#039;a pas eu lieu.&lt;br /&gt;
&lt;br /&gt;
== Déclencheurs pour les développeurs ==&lt;br /&gt;
&lt;br /&gt;
À chaque étape, le module lance un déclencheur à son propre nom : &amp;lt;code&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_RESCHEDULED&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_SENT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_ERROR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_HELD&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_CANCELED&amp;lt;/code&amp;gt;. L&#039;écouteur&lt;br /&gt;
reçoit le message programmé dans &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt; : tiers, documentsses, sujet et état.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Téléchargez le fichier zip du module.&lt;br /&gt;
# Connectez-vous à Dolibarr en administrateur, allez dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et déposez le&lt;br /&gt;
zip.&lt;br /&gt;
# Activez &#039;&#039;&#039;Doli Mail Later&#039;&#039;&#039; dans la liste des modules.&lt;br /&gt;
&lt;br /&gt;
Le module crée ses deux tables et sa tâche planifiée automatiquement. LDolibarr doit être actif et appelé par votre serveur, sinon rien ne&lt;br /&gt;
part. Lors d&#039;une mise à jour, désactivez puis réactivez le module.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Doli Mail Later - Configuration&#039;&#039;, réservée aux administrateurs :&lt;br /&gt;
&lt;br /&gt;
* le retard toléré avant qu&#039;un message en retard soit retenu (2880 minu zéro ne retient rien),&lt;br /&gt;
* les trois raccourcis de la fenêtre de programmation, en minutes (15,&lt;br /&gt;
&lt;br /&gt;
Trois droits : lire les messages programmés ; programmer un envoi, le dn message programmé à la corbeille.&lt;br /&gt;
&lt;br /&gt;
Documentation complète : [https://framagit.org/doli/modules/dolimaillater/-/blob/main/doc/USER-GUIDE.fr.md guide de l&#039;utilisateur] et&lt;br /&gt;
[https://framagit.org/doli/modules/dolimaillater/-/blob/main/doc/TECHNIique].&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.2.3&#039;&#039;&#039; (2026-09-29, bêta) : libellés traduits sur la fiche d&#039;un hème sombre compris), documentation incluse dans le paquet.&lt;br /&gt;
* &#039;&#039;&#039;1.2.2&#039;&#039;&#039; (2026-09-29) : Dolibarr est chargé par la séquence standard exigée par la validation du Dolistore.&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/doli/modules/dolimaillater/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Doli Mail Later}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:DoliMailLater_schedule.png&amp;diff=67491</id>
		<title>File:DoliMailLater schedule.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:DoliMailLater_schedule.png&amp;diff=67491"/>
		<updated>2026-09-29T17:55:31Z</updated>

		<summary type="html">&lt;p&gt;StephM: Doli Mail Later module for Dolibarr: the scheduling window, opened above the Schedule sending button, with the day, the time and three quick shortcuts.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Doli Mail Later module for Dolibarr: the scheduling window, opened above the Schedule sending button, with the day, the time and three quick shortcuts.&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:DoliMailLater_queue.png&amp;diff=67490</id>
		<title>File:DoliMailLater queue.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:DoliMailLater_queue.png&amp;diff=67490"/>
		<updated>2026-09-29T17:45:10Z</updated>

		<summary type="html">&lt;p&gt;StephM: Doli Mail Later module for Dolibarr: the queue of scheduled emails, with their planned sending time, customer, subject, recipients, author and status.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Doli Mail Later module for Dolibarr: the queue of scheduled emails, with their planned sending time, customer, subject, recipients, author and status.&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:DoliMailLater_banner.png&amp;diff=67489</id>
		<title>File:DoliMailLater banner.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:DoliMailLater_banner.png&amp;diff=67489"/>
		<updated>2026-09-29T17:44:19Z</updated>

		<summary type="html">&lt;p&gt;StephM: Doli Mail Later module for Dolibarr: the red banner on the sending screen, listing the emails already waiting for this customer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Doli Mail Later module for Dolibarr: the red banner on the sending screen, listing the emails already waiting for this customer.&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Mail_Later&amp;diff=67488</id>
		<title>Module Doli Mail Later</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Mail_Later&amp;diff=67488"/>
		<updated>2026-09-29T17:42:17Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Doli_Mail_Later_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Doli Mail Later&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://framagit.org/doli/modules/dolimaillater&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=DOLISTORE_ID&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 21 or higher, PHP 7.4 or higher, the Dolibarr job scheduler enabled&lt;br /&gt;
|note=Tested on Dolibarr 23 and 24, sending screen checked on Dolibarr 22. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Doli Mail Later&#039;&#039;&#039; lets you schedule the emails you send from Dolibarr for a chosen day and time, instead of sending them right away.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_schedule.png|thumb|center|700px|The scheduling window, above the Schedule sending button]]&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Scheduling an email ==&lt;br /&gt;
&lt;br /&gt;
On the sending screen of a third party, a proposal or a customer invoice, a &#039;&#039;Schedule sending&#039;&#039; button sits next to &#039;&#039;Send email&#039;&#039;. It opens a small window with a day, a time and three ready-made shortcuts: in 15 minutes, in 30 minutes, in 2 hours. You prepare the email exactly as usual; instead of leaving, it waits in a queue and leaves on its own when its time comes.&lt;br /&gt;
&lt;br /&gt;
The sender and the recipient are checked when you schedule: an email without a valid sender or recipient address is refused right away, it never enters the queue only to fail on the planned day.&lt;br /&gt;
&lt;br /&gt;
== What you read is what leaves ==&lt;br /&gt;
&lt;br /&gt;
The email is frozen when scheduled: recipients resolved, template variables replaced, attached documents copied into the folder of the module. Regenerating or deleting the original invoice does not change what will be sent.&lt;br /&gt;
&lt;br /&gt;
== Warning when an email is already waiting ==&lt;br /&gt;
&lt;br /&gt;
When an email is already waiting for the same customer, a red banner appears above the sending form. It counts the emails of every user, so that two colleagues do not write twice to the same customer, and lets you read each of them before writing another one.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_banner.png|thumb|center|700px|The banner of the emails already waiting for this customer]]&lt;br /&gt;
&lt;br /&gt;
An envelope in the top bar shows how many emails are waiting to leave; a click opens the queue on them.&lt;br /&gt;
&lt;br /&gt;
== The queue ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Doli Mail Later&#039;&#039; menu lists every scheduled email, filtered by state or customer. The card of an email shows it as it will leave, and lets you move its planned time, send it now, cancel it or move it to the trash. States: waiting, sent, refused by the mail server, held, canceled.&lt;br /&gt;
&lt;br /&gt;
[[File:DoliMailLater_queue.png|thumb|center|700px|The queue of scheduled emails]]&lt;br /&gt;
&lt;br /&gt;
== Old emails are not woken up ==&lt;br /&gt;
&lt;br /&gt;
A scheduled job sends due emails every five minutes. If the server was stopped and a planned time is past by more than the tolerated delay (two days by default), the email is held instead of being sent, and waits for your decision.&lt;br /&gt;
&lt;br /&gt;
== The agenda tells the truth ==&lt;br /&gt;
&lt;br /&gt;
Scheduling an email creates an agenda event linked to the customer and to the source document. It is updated when the email leaves, is canceled, held or refused: the agenda never announces a sending that did not happen.&lt;br /&gt;
&lt;br /&gt;
== Triggers for developers ==&lt;br /&gt;
&lt;br /&gt;
At each step, the module fires a trigger under its own name: &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_SCHEDULED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_RESCHEDULED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_SENT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_ERROR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_HELD&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_CANCELED&amp;lt;/code&amp;gt;. The listener receives the scheduled email as &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt;: third party, source document, planned time, addresses, subject and state.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Doli Mail Later&#039;&#039;&#039; in the module list.&lt;br /&gt;
&lt;br /&gt;
The module creates its two tables and its scheduled job automatically. The Dolibarr job scheduler must be enabled and called by your server, otherwise nothing leaves. When upgrading, disable then enable the module again.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Doli Mail Later - Setup&#039;&#039;, reserved to administrators:&lt;br /&gt;
&lt;br /&gt;
* the tolerated delay before an overdue email is held (2880 minutes, two days, by default; zero holds nothing),&lt;br /&gt;
* the three shortcuts of the scheduling window, in minutes (15, 30 and 120 by default).&lt;br /&gt;
&lt;br /&gt;
Three permissions: read the scheduled emails; schedule, move or cancel a sending; move a scheduled email to the trash.&lt;br /&gt;
&lt;br /&gt;
Full documentation: [https://framagit.org/doli/modules/dolimaillater/-/blob/main/doc/USER-GUIDE.md user guide] and [https://framagit.org/doli/modules/dolimaillater/-/blob/main/doc/TECHNICAL.md technical documentation].&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.2.3&#039;&#039;&#039; (2026-09-29, beta): labels translated on the card of an email, colors of the theme (dark theme included), documentation included in the package.&lt;br /&gt;
* &#039;&#039;&#039;1.2.2&#039;&#039;&#039; (2026-09-29): Dolibarr is loaded with the standard sequence required by the Dolistore validation.&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/dolimaillater/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Doli Mail Later}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Doli_Mail_Later&amp;diff=67487</id>
		<title>Module Doli Mail Later</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Doli_Mail_Later&amp;diff=67487"/>
		<updated>2026-09-29T17:33:15Z</updated>

		<summary type="html">&lt;p&gt;StephM: Created page with &amp;quot;&amp;lt;nowiki&amp;gt;fr:Module_Doli_Mail_Later_FR&amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;Category:Complementary modules&amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;{{TemplateDocUser}}&amp;lt;/nowiki&amp;gt; =Information= &amp;lt;nowiki&amp;gt;{{TemplateModu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;[[fr:Module_Doli_Mail_Later_FR]]&amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;[[Category:Complementary modules]]&amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;{{TemplateDocUser}}&amp;lt;/nowiki&amp;gt; =Information= &amp;lt;nowiki&amp;gt;{{TemplateModuleInfo |modulename=Doli Mail Later |editor=Stéphane Mallet Informatique |web=https://framagit.org/doli/modules/dolimaillater |webbuy=https://www.dolistore.com/product.php?id=DOLISTORE_ID |status=stable |prerequisites=Dolibarr 21 or higher, PHP 7.4 or higher, the Dolibarr job scheduler enabled |note=Tested on Dolibarr 23 and 24, sending screen checked on Dolibarr 22. Free module, GPLv3. }}&amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;Doli Mail Later&amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt; lets you schedule the emails you send from Dolibarr for a chosen day and time, instead of sending them right away. &amp;lt;nowiki&amp;gt;[[File:DoliMailLater_schedule.png|thumb|center|700px|The scheduling window, above the Schedule sending button]]&amp;lt;/nowiki&amp;gt; = Features = == Scheduling an email == On the sending screen of a third party, a proposal or a customer invoice, a &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;Schedule sending&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; button sits next to &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;Send email&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;. It opens a small window with a day, a time and three ready-made shortcuts: in 15 minutes, in 30 minutes, in 2 hours. You prepare the email exactly as usual; instead of leaving, it waits in a queue and leaves on its own when its time comes. The sender and the recipient are checked when you schedule: an email without a valid sender or recipient address is refused right away, it never enters the queue only to fail on the planned day. == What you read is what leaves == The email is frozen when scheduled: recipients resolved, template variables replaced, attached documents copied into the folder of the module. Regenerating or deleting the original invoice does not change what will be sent. == Warning when an email is already waiting == When an email is already waiting for the same customer, a red banner appears above the sending form. It counts the emails of every user, so that two colleagues do not write twice to the same customer, and lets you read each of them before writing another one. &amp;lt;nowiki&amp;gt;[[File:DoliMailLater_banner.png|thumb|center|700px|The banner of the emails already waiting for this customer]]&amp;lt;/nowiki&amp;gt; An envelope in the top bar shows how many emails are waiting to leave; a click opens the queue on them. == The queue == The &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;Doli Mail Later&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; menu lists every scheduled email, filtered by state or customer. The card of an email shows it as it will leave, and lets you move its planned time, send it now, cancel it or move it to the trash. States: waiting, sent, refused by the mail server, held, canceled. &amp;lt;nowiki&amp;gt;[[File:DoliMailLater_queue.png|thumb|center|700px|The queue of scheduled emails]]&amp;lt;/nowiki&amp;gt; == Old emails are not woken up == A scheduled job sends due emails every five minutes. If the server was stopped and a planned time is past by more than the tolerated delay (two days by default), the email is held instead of being sent, and waits for your decision. == The agenda tells the truth == Scheduling an email creates an agenda event linked to the customer and to the source document. It is updated when the email leaves, is canceled, held or refused: the agenda never announces a sending that did not happen. == Triggers for developers == At each step, the module fires a trigger under its own name: &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_SCHEDULED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_RESCHEDULED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_SENT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_ERROR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_HELD&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOLIMAILLATER_MAIL_CANCELED&amp;lt;/code&amp;gt;. The listener receives the scheduled email as &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt;: third party, source document, planned time, addresses, subject and state. = Installation = # Download the module zip file. # Log in to Dolibarr as administrator, go to &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;Home - Setup - Modules/Applications&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;, tab &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;Deploy/install external app/module&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;, and upload the zip. # Activate &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;Doli Mail Later&amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt; in the module list. The module creates its two tables and its scheduled job automatically. The Dolibarr job scheduler must be enabled and called by your server, otherwise nothing leaves. When upgrading, disable then enable the module again. = Setup = &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;Doli Mail Later - Setup&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;, reserved to administrators: * the tolerated delay before an overdue email is held (2880 minutes, two days, by default; zero holds nothing), * the three shortcuts of the scheduling window, in minutes (15, 30 and 120 by default). Three permissions: read the scheduled emails; schedule, move or cancel a sending; move a scheduled email to the trash. Full documentation: &amp;lt;nowiki&amp;gt;[https://framagit.org/doli/modules/dolimaillater/-/blob/main/doc/USER-GUIDE.md user guide]&amp;lt;/nowiki&amp;gt; and &amp;lt;nowiki&amp;gt;[https://framagit.org/doli/modules/dolimaillater/-/blob/main/doc/TECHNICAL.md technical documentation]&amp;lt;/nowiki&amp;gt;. = Version history = * &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;1.2.3&amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt; (2026-09-29, beta): labels translated on the card of an email, colors of the theme (dark theme included), documentation included in the package. * &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;1.2.2&amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt; (2026-09-29): Dolibarr is loaded with the standard sequence required by the Dolistore validation. Full changelog, every version since the first one: &amp;lt;nowiki&amp;gt;[https://framagit.org/doli/modules/dolimaillater/-/blob/main/ChangeLog.md ChangeLog.md]&amp;lt;/nowiki&amp;gt; = Support = contact@stephane-mallet.fr &amp;lt;nowiki&amp;gt;{{DEFAULTSORT:Doli Mail Later}}&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=67455</id>
		<title>Module Auto Reminder FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=67455"/>
		<updated>2026-09-26T10:06:42Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Auto_Reminder]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 ou supérieur&lt;br /&gt;
|note=Testé sur Dolibarr 24. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; envoie et relance automatiquement les factures et les devis dans Dolibarr. Tout est déclenché par une tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Factures ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des factures validées par email, avec le PDF de la facture en pièce jointe et le modèle d&#039;email de votre choix.&lt;br /&gt;
* Relance automatique des factures impayées, par paliers configurables. Chaque palier définit un délai en jours par rapport à la date d&#039;échéance (ou à la date de facture s&#039;il n&#039;y a pas d&#039;échéance) et son modèle d&#039;email. Les délais négatifs sont acceptés, pour une relance préventive avant l&#039;échéance.&lt;br /&gt;
* Option pour inclure ou exclure les factures partiellement payées.&lt;br /&gt;
&lt;br /&gt;
== Devis (depuis la 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des devis validés par email, avec le PDF du devis en pièce jointe.&lt;br /&gt;
* Relance automatique des devis restés sans réponse (ni signés, ni refusés, ni facturés). Les paliers sont comptés à partir de la date de fin de validité du devis, ou de sa date s&#039;il n&#039;en a pas.&lt;br /&gt;
* Réglages entièrement séparés de ceux des factures : la page de configuration a un onglet Factures et un onglet Devis, chacun avec ses interrupteurs, son modèle d&#039;email et ses paliers.&lt;br /&gt;
&lt;br /&gt;
== Seul le palier le plus élevé atteint est envoyé ==&lt;br /&gt;
&lt;br /&gt;
Pour chaque document, seul le palier de relance le plus élevé atteint est retenu. Les paliers inférieurs manqués ne sont jamais rattrapés : un document déjà en retard au moment où le module est activé reçoit une seule relance, celle qui correspond à son retard réel, avec le bon modèle d&#039;email. Jamais une rafale de relances sur plusieurs jours.&lt;br /&gt;
&lt;br /&gt;
== Destinataire des emails ==&lt;br /&gt;
&lt;br /&gt;
Le destinataire est déterminé dans cet ordre, aussi bien pour l&#039;envoi que pour les relances :&lt;br /&gt;
&lt;br /&gt;
# Le contact rattaché au document (onglet Contacts de la facture ou du devis), quel que soit son rôle. Si plusieurs contacts sont rattachés : facturation, puis prestation, puis livraison pour une facture ; suivi, puis facturation, puis livraison pour un devis.&lt;br /&gt;
# Sinon le contact par défaut du tiers pour ce type de document (onglet Contacts/Adresses du tiers).&lt;br /&gt;
# Sinon le premier contact actif du tiers ayant une adresse email.&lt;br /&gt;
# Sinon l&#039;adresse email du tiers.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.3.1, tous les contacts à égalité sur le rôle le plus prioritaire sont retenus, et non plus seulement le premier : deux ou trois contacts de facturation rattachés à la même facture reçoivent tous l&#039;email, en un seul envoi. L&#039;ordre de priorité est inchangé, un contact de facturation l&#039;emporte toujours sur un contact de livraison. Les étapes 1 et 2 ci-dessus fonctionnent ainsi ; l&#039;étape 3 ne retient qu&#039;un seul destinataire, puisque sans rôle rien n&#039;indique qui s&#039;occupe des factures.&lt;br /&gt;
&lt;br /&gt;
Les contacts désactivés et les contacts sans email ne sont jamais utilisés. Si aucun destinataire n&#039;est trouvé, rien n&#039;est envoyé et un événement est enregistré dans l&#039;agenda du document.&lt;br /&gt;
&lt;br /&gt;
== Langue des emails (depuis la 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
Le modèle choisi dans les réglages fixe le LIBELLÉ de référence, pas la langue. Si l&#039;option multilingue de Dolibarr est activée et que le tiers a sa propre langue, le module utilise le modèle d&#039;email portant le même libellé dans cette langue, et se rabat sur celui des réglages s&#039;il n&#039;y en a pas. Le repli de langue (es_MX vers es_ES, puis modèle sans langue) est celui de Dolibarr. Quand une traduction est utilisée, les montants et les dates du message suivent également cette langue. Le PDF joint, lui, n&#039;est pas régénéré : c&#039;est le document tel qu&#039;il existe.&lt;br /&gt;
&lt;br /&gt;
Traduire un modèle est un geste Dolibarr, pas un réglage du module : recréer le modèle avec le MÊME libellé, choisir la langue, puis traduire le sujet et le contenu. À noter, la colonne Langue des modèles d&#039;email n&#039;apparaît que si l&#039;option multilingue est activée.&lt;br /&gt;
&lt;br /&gt;
== Garde-fou contre l&#039;envoi en masse ==&lt;br /&gt;
&lt;br /&gt;
Seuls les documents validés après l&#039;activation de l&#039;option d&#039;envoi sont envoyés : activer le module sur une base existante n&#039;envoie jamais l&#039;historique. La date de référence est enregistrée au moment où vous activez l&#039;option, affichée dans les réglages, et modifiable : vous pouvez la reculer en connaissance de cause pour inclure une partie de l&#039;historique. Un avertissement explicite est affiché à côté du champ : tout document validé à partir de cette date et jamais envoyé partira au prochain passage de la tâche planifiée.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
Une case à cocher « Exclure des relances automatiques » est disponible :&lt;br /&gt;
* sur la fiche tiers : ne jamais relancer ce client (factures et devis),&lt;br /&gt;
* sur la fiche facture : ne jamais relancer cette facture (litige, échéancier négocié...),&lt;br /&gt;
* sur la fiche devis : ne jamais relancer ce devis.&lt;br /&gt;
&lt;br /&gt;
L&#039;envoi initial des documents n&#039;est pas concerné par ces cases.&lt;br /&gt;
&lt;br /&gt;
== Quand un document ne peut pas être traité ==&lt;br /&gt;
&lt;br /&gt;
Quand un document ne peut pas être traité (aucun destinataire valide, PDF introuvable, modèle d&#039;email introuvable, échec d&#039;envoi), le module enregistre un événement dans l&#039;agenda du document avec la raison en clair, une seule fois par document et par raison. En regardant la facture ou le devis, vous voyez immédiatement pourquoi rien n&#039;est parti.&lt;br /&gt;
&lt;br /&gt;
== Multi-société (module Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
Le module fonctionne avec le module Multicompany. Chaque société envoie et relance &#039;&#039;&#039;ses propres documents uniquement&#039;&#039;&#039;, avec ses propres réglages, ses propres paliers et ses propres modèles d&#039;email. Le partage de Multicompany donne un droit de lecture sur les documents d&#039;une autre société, il ne change pas leur propriétaire : une facture partagée reste relancée par la société à laquelle elle appartient. Il n&#039;y a rien à régler. Avant la 1.3.3, une société prenait aussi les factures et les devis des sociétés qu&#039;elle avait le droit de voir, et les traitait avec ses propres réglages.&lt;br /&gt;
&lt;br /&gt;
== Déclencheurs pour les développeurs (depuis la 1.3.5) ==&lt;br /&gt;
&lt;br /&gt;
Après chaque email parti avec succès, le module lance un déclencheur (trigger) sur la facture ou le devis, pour qu&#039;un autre module puisse y réagir : &amp;lt;code&amp;gt;AUTOREMINDER_SEND&amp;lt;/code&amp;gt; après l&#039;envoi automatique d&#039;un document validé, &amp;lt;code&amp;gt;AUTOREMINDER_REMIND&amp;lt;/code&amp;gt; après une relance. Le déclencheur reçoit le document dans &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt; et le détail dans &amp;lt;code&amp;gt;$object-&amp;gt;context[&#039;autoreminder&#039;]&amp;lt;/code&amp;gt; : &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;actioncomm_id&amp;lt;/code&amp;gt; (l&#039;événement d&#039;agenda de cet email), &amp;lt;code&amp;gt;level_id&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;level_days&amp;lt;/code&amp;gt; (le palier de relance, 0 et vide pour l&#039;envoi initial), &amp;lt;code&amp;gt;email_to&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_subject&amp;lt;/code&amp;gt;. Le module ne lance pas les déclencheurs natifs &amp;lt;code&amp;gt;BILL_SENTBYMAIL&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;PROPAL_SENTBYMAIL&amp;lt;/code&amp;gt;, qui signifient qu&#039;un utilisateur a envoyé le document depuis sa fiche.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Télécharger le fichier zip du module.&lt;br /&gt;
# Se connecter à Dolibarr en administrateur, aller dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et envoyer le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; dans la section &#039;&#039;Modules financiers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le module crée automatiquement sa table en base, ses champs complémentaires et une tâche planifiée quotidienne. Lors d&#039;une mise à jour depuis une version 1.x, les paliers existants sont conservés en tant que paliers de factures.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Avant de configurer le module, créez vos modèles d&#039;email dans &#039;&#039;Accueil - Configuration - Emails - Modèles d&#039;emails&#039;&#039; : type &#039;&#039;Envoi facture&#039;&#039; pour les factures, type &#039;&#039;Envoi proposition commerciale&#039;&#039; pour les devis. Un modèle pour l&#039;envoi initial, un par palier de relance.&lt;br /&gt;
&lt;br /&gt;
Ouvrez ensuite les réglages du module. Il y a un onglet par type de document (Factures, Devis), chacun avec :&lt;br /&gt;
&lt;br /&gt;
* l&#039;interrupteur d&#039;envoi automatique et son modèle d&#039;email. À l&#039;activation, la date du jour est enregistrée : seuls les documents validés à partir de cette date seront envoyés. La date est modifiable (avec un avertissement),&lt;br /&gt;
* l&#039;interrupteur de relance automatique (et, pour les factures uniquement, l&#039;option des factures partiellement payées),&lt;br /&gt;
* le tableau des paliers de relance : délai en jours + modèle d&#039;email, autant de paliers que vous voulez.&lt;br /&gt;
&lt;br /&gt;
La tâche planifiée &#039;&#039;AutoReminderJob&#039;&#039; s&#039;exécute une fois par jour par défaut (voir &#039;&#039;Accueil - Configuration - Tâches planifiées&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.5&#039;&#039;&#039; (2026-09-25, bêta) : déclencheurs &amp;lt;code&amp;gt;AUTOREMINDER_SEND&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;AUTOREMINDER_REMIND&amp;lt;/code&amp;gt; pour les développeurs, lancés après chaque email parti avec succès. La 1.3.1 reste la version release.&lt;br /&gt;
* &#039;&#039;&#039;1.3.4&#039;&#039;&#039; (2026-09-24, bêta) : les emails aux clients dont la langue n&#039;a pas de traduction du modèle n&#039;échouent plus, le modèle choisi dans les réglages est utilisé. Messages d&#039;erreur plus clairs.&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/doli/modules/autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=67454</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=67454"/>
		<updated>2026-09-26T10:05:54Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Auto_Reminder_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 or higher&lt;br /&gt;
|note=Tested on Dolibarr 24. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Language of the emails (since 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
The template selected in the settings defines the LABEL of reference, not the language. When the Dolibarr multi-language option is enabled and the third party has its own language, the module uses the email template carrying the same label in that language, and falls back to the template selected in the settings when there is none. The language fallback (es_MX to es_ES, then a template with no language) is the native Dolibarr one. When a translation is used, amounts and dates in the email follow that language too. The attached PDF is not regenerated: it is the document as it stands.&lt;br /&gt;
&lt;br /&gt;
Translating a template is done in Dolibarr itself, not in the module settings: create the template again with the SAME label, choose the language, then translate the subject and the content. Note that the Language column of email templates only appears when the multi-language option is enabled.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
== Multi-company (Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
The module works with the Multicompany module. Each entity sends and reminds &#039;&#039;&#039;its own documents only&#039;&#039;&#039;, with its own settings, its own reminder levels and its own email templates. Sharing in Multicompany grants read visibility on the documents of another entity, it does not change their owner: a shared invoice is still reminded by the entity it belongs to. Nothing to configure. Before 1.3.3, an entity picked up the invoices and proposals of the entities it was allowed to see and processed them with its own settings.&lt;br /&gt;
&lt;br /&gt;
== Triggers for developers (since 1.3.5) ==&lt;br /&gt;
&lt;br /&gt;
After each successful email, the module fires a trigger on the invoice or proposal, so that another module can react to it: &amp;lt;code&amp;gt;AUTOREMINDER_SEND&amp;lt;/code&amp;gt; after the automatic sending of a validated document, &amp;lt;code&amp;gt;AUTOREMINDER_REMIND&amp;lt;/code&amp;gt; after a reminder. The listener receives the document as &amp;lt;code&amp;gt;$object&amp;lt;/code&amp;gt; and the details in &amp;lt;code&amp;gt;$object-&amp;gt;context[&#039;autoreminder&#039;]&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;actioncomm_id&amp;lt;/code&amp;gt; (the agenda event of this email), &amp;lt;code&amp;gt;level_id&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;level_days&amp;lt;/code&amp;gt; (the reminder level, 0 and empty for the initial sending), &amp;lt;code&amp;gt;email_to&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email_subject&amp;lt;/code&amp;gt;. The module does not fire the core &amp;lt;code&amp;gt;BILL_SENTBYMAIL&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PROPAL_SENTBYMAIL&amp;lt;/code&amp;gt; triggers, which mean that a user sent the document from its card.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.5&#039;&#039;&#039; (2026-09-25, beta): triggers &amp;lt;code&amp;gt;AUTOREMINDER_SEND&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AUTOREMINDER_REMIND&amp;lt;/code&amp;gt; for developers, fired after each successful email. Version 1.3.1 remains the release version.&lt;br /&gt;
* &#039;&#039;&#039;1.3.4&#039;&#039;&#039; (2026-09-24, beta): emails to customers whose language has no translation of the template no longer fail, the template selected in the settings is used. Clearer error messages.&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=67424</id>
		<title>Module Auto Reminder FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=67424"/>
		<updated>2026-09-24T17:28:24Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Auto_Reminder]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 ou supérieur&lt;br /&gt;
|note=Testé sur Dolibarr 23. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; envoie et relance automatiquement les factures et les devis dans Dolibarr. Tout est déclenché par une tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Factures ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des factures validées par email, avec le PDF de la facture en pièce jointe et le modèle d&#039;email de votre choix.&lt;br /&gt;
* Relance automatique des factures impayées, par paliers configurables. Chaque palier définit un délai en jours par rapport à la date d&#039;échéance (ou à la date de facture s&#039;il n&#039;y a pas d&#039;échéance) et son modèle d&#039;email. Les délais négatifs sont acceptés, pour une relance préventive avant l&#039;échéance.&lt;br /&gt;
* Option pour inclure ou exclure les factures partiellement payées.&lt;br /&gt;
&lt;br /&gt;
== Devis (depuis la 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des devis validés par email, avec le PDF du devis en pièce jointe.&lt;br /&gt;
* Relance automatique des devis restés sans réponse (ni signés, ni refusés, ni facturés). Les paliers sont comptés à partir de la date de fin de validité du devis, ou de sa date s&#039;il n&#039;en a pas.&lt;br /&gt;
* Réglages entièrement séparés de ceux des factures : la page de configuration a un onglet Factures et un onglet Devis, chacun avec ses interrupteurs, son modèle d&#039;email et ses paliers.&lt;br /&gt;
&lt;br /&gt;
== Seul le palier le plus élevé atteint est envoyé ==&lt;br /&gt;
&lt;br /&gt;
Pour chaque document, seul le palier de relance le plus élevé atteint est retenu. Les paliers inférieurs manqués ne sont jamais rattrapés : un document déjà en retard au moment où le module est activé reçoit une seule relance, celle qui correspond à son retard réel, avec le bon modèle d&#039;email. Jamais une rafale de relances sur plusieurs jours.&lt;br /&gt;
&lt;br /&gt;
== Destinataire des emails ==&lt;br /&gt;
&lt;br /&gt;
Le destinataire est déterminé dans cet ordre, aussi bien pour l&#039;envoi que pour les relances :&lt;br /&gt;
&lt;br /&gt;
# Le contact rattaché au document (onglet Contacts de la facture ou du devis), quel que soit son rôle. Si plusieurs contacts sont rattachés : facturation, puis prestation, puis livraison pour une facture ; suivi, puis facturation, puis livraison pour un devis.&lt;br /&gt;
# Sinon le contact par défaut du tiers pour ce type de document (onglet Contacts/Adresses du tiers).&lt;br /&gt;
# Sinon le premier contact actif du tiers ayant une adresse email.&lt;br /&gt;
# Sinon l&#039;adresse email du tiers.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.3.1, tous les contacts à égalité sur le rôle le plus prioritaire sont retenus, et non plus seulement le premier : deux ou trois contacts de facturation rattachés à la même facture reçoivent tous l&#039;email, en un seul envoi. L&#039;ordre de priorité est inchangé, un contact de facturation l&#039;emporte toujours sur un contact de livraison. Les étapes 1 et 2 ci-dessus fonctionnent ainsi ; l&#039;étape 3 ne retient qu&#039;un seul destinataire, puisque sans rôle rien n&#039;indique qui s&#039;occupe des factures.&lt;br /&gt;
&lt;br /&gt;
Les contacts désactivés et les contacts sans email ne sont jamais utilisés. Si aucun destinataire n&#039;est trouvé, rien n&#039;est envoyé et un événement est enregistré dans l&#039;agenda du document.&lt;br /&gt;
&lt;br /&gt;
== Langue des emails (depuis la 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
Le modèle choisi dans les réglages fixe le LIBELLÉ de référence, pas la langue. Si l&#039;option multilingue de Dolibarr est activée et que le tiers a sa propre langue, le module utilise le modèle d&#039;email portant le même libellé dans cette langue, et se rabat sur celui des réglages s&#039;il n&#039;y en a pas. Le repli de langue (es_MX vers es_ES, puis modèle sans langue) est celui de Dolibarr. Quand une traduction est utilisée, les montants et les dates du message suivent également cette langue. Le PDF joint, lui, n&#039;est pas régénéré : c&#039;est le document tel qu&#039;il existe.&lt;br /&gt;
&lt;br /&gt;
Traduire un modèle est un geste Dolibarr, pas un réglage du module : recréer le modèle avec le MÊME libellé, choisir la langue, puis traduire le sujet et le contenu. À noter, la colonne Langue des modèles d&#039;email n&#039;apparaît que si l&#039;option multilingue est activée.&lt;br /&gt;
&lt;br /&gt;
== Garde-fou contre l&#039;envoi en masse ==&lt;br /&gt;
&lt;br /&gt;
Seuls les documents validés après l&#039;activation de l&#039;option d&#039;envoi sont envoyés : activer le module sur une base existante n&#039;envoie jamais l&#039;historique. La date de référence est enregistrée au moment où vous activez l&#039;option, affichée dans les réglages, et modifiable : vous pouvez la reculer en connaissance de cause pour inclure une partie de l&#039;historique. Un avertissement explicite est affiché à côté du champ : tout document validé à partir de cette date et jamais envoyé partira au prochain passage de la tâche planifiée.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
Une case à cocher « Exclure des relances automatiques » est disponible :&lt;br /&gt;
* sur la fiche tiers : ne jamais relancer ce client (factures et devis),&lt;br /&gt;
* sur la fiche facture : ne jamais relancer cette facture (litige, échéancier négocié...),&lt;br /&gt;
* sur la fiche devis : ne jamais relancer ce devis.&lt;br /&gt;
&lt;br /&gt;
L&#039;envoi initial des documents n&#039;est pas concerné par ces cases.&lt;br /&gt;
&lt;br /&gt;
== Quand un document ne peut pas être traité ==&lt;br /&gt;
&lt;br /&gt;
Quand un document ne peut pas être traité (aucun destinataire valide, PDF introuvable, modèle d&#039;email introuvable, échec d&#039;envoi), le module enregistre un événement dans l&#039;agenda du document avec la raison en clair, une seule fois par document et par raison. En regardant la facture ou le devis, vous voyez immédiatement pourquoi rien n&#039;est parti.&lt;br /&gt;
&lt;br /&gt;
== Multi-société (module Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
Le module fonctionne avec le module Multicompany. Chaque société envoie et relance &#039;&#039;&#039;ses propres documents uniquement&#039;&#039;&#039;, avec ses propres réglages, ses propres paliers et ses propres modèles d&#039;email. Le partage de Multicompany donne un droit de lecture sur les documents d&#039;une autre société, il ne change pas leur propriétaire : une facture partagée reste relancée par la société à laquelle elle appartient. Il n&#039;y a rien à régler. Avant la 1.3.3, une société prenait aussi les factures et les devis des sociétés qu&#039;elle avait le droit de voir, et les traitait avec ses propres réglages.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Télécharger le fichier zip du module.&lt;br /&gt;
# Se connecter à Dolibarr en administrateur, aller dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et envoyer le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; dans la section &#039;&#039;Modules financiers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le module crée automatiquement sa table en base, ses champs complémentaires et une tâche planifiée quotidienne. Lors d&#039;une mise à jour depuis une version 1.x, les paliers existants sont conservés en tant que paliers de factures.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Avant de configurer le module, créez vos modèles d&#039;email dans &#039;&#039;Accueil - Configuration - Emails - Modèles d&#039;emails&#039;&#039; : type &#039;&#039;Envoi facture&#039;&#039; pour les factures, type &#039;&#039;Envoi proposition commerciale&#039;&#039; pour les devis. Un modèle pour l&#039;envoi initial, un par palier de relance.&lt;br /&gt;
&lt;br /&gt;
Ouvrez ensuite les réglages du module. Il y a un onglet par type de document (Factures, Devis), chacun avec :&lt;br /&gt;
&lt;br /&gt;
* l&#039;interrupteur d&#039;envoi automatique et son modèle d&#039;email. À l&#039;activation, la date du jour est enregistrée : seuls les documents validés à partir de cette date seront envoyés. La date est modifiable (avec un avertissement),&lt;br /&gt;
* l&#039;interrupteur de relance automatique (et, pour les factures uniquement, l&#039;option des factures partiellement payées),&lt;br /&gt;
* le tableau des paliers de relance : délai en jours + modèle d&#039;email, autant de paliers que vous voulez.&lt;br /&gt;
&lt;br /&gt;
La tâche planifiée &#039;&#039;AutoReminderJob&#039;&#039; s&#039;exécute une fois par jour par défaut (voir &#039;&#039;Accueil - Configuration - Tâches planifiées&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.4&#039;&#039;&#039; (2026-09-24, bêta) : les emails aux clients dont la langue n&#039;a pas de traduction du modèle n&#039;échouent plus, le modèle choisi dans les réglages est utilisé. Messages d&#039;erreur plus clairs. La 1.3.1 reste la version release.&lt;br /&gt;
* &#039;&#039;&#039;1.3.3&#039;&#039;&#039; (2026-08-05, bêta) : compatibilité avec le module Multicompany. Chaque société n&#039;envoie et ne relance plus que ses propres factures et devis, avec ses propres réglages et ses propres modèles, même quand le partage est actif.&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/doli/modules/autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=67423</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=67423"/>
		<updated>2026-09-24T17:27:56Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Auto_Reminder_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 or higher&lt;br /&gt;
|note=Tested on Dolibarr 23. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Language of the emails (since 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
The template selected in the settings defines the LABEL of reference, not the language. When the Dolibarr multi-language option is enabled and the third party has its own language, the module uses the email template carrying the same label in that language, and falls back to the template selected in the settings when there is none. The language fallback (es_MX to es_ES, then a template with no language) is the native Dolibarr one. When a translation is used, amounts and dates in the email follow that language too. The attached PDF is not regenerated: it is the document as it stands.&lt;br /&gt;
&lt;br /&gt;
Translating a template is done in Dolibarr itself, not in the module settings: create the template again with the SAME label, choose the language, then translate the subject and the content. Note that the Language column of email templates only appears when the multi-language option is enabled.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
== Multi-company (Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
The module works with the Multicompany module. Each entity sends and reminds &#039;&#039;&#039;its own documents only&#039;&#039;&#039;, with its own settings, its own reminder levels and its own email templates. Sharing in Multicompany grants read visibility on the documents of another entity, it does not change their owner: a shared invoice is still reminded by the entity it belongs to. Nothing to configure. Before 1.3.3, an entity picked up the invoices and proposals of the entities it was allowed to see and processed them with its own settings.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.4&#039;&#039;&#039; (2026-09-24, beta): emails to customers whose language has no translation of the template no longer fail, the template selected in the settings is used. Clearer error messages. Version 1.3.1 remains the release version.&lt;br /&gt;
* &#039;&#039;&#039;1.3.3&#039;&#039;&#039; (2026-08-05, beta): compatibility with the Multicompany module. Each entity now sends and reminds its own invoices and proposals only, with its own settings and templates, even when sharing is enabled.&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/doli/modules/autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66847</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66847"/>
		<updated>2026-08-05T19:04:48Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Auto_Reminder_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 or higher&lt;br /&gt;
|note=Tested on Dolibarr 23. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Language of the emails (since 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
The template selected in the settings defines the LABEL of reference, not the language. When the Dolibarr multi-language option is enabled and the third party has its own language, the module uses the email template carrying the same label in that language, and falls back to the template selected in the settings when there is none. The language fallback (es_MX to es_ES, then a template with no language) is the native Dolibarr one. Amounts and dates in the email follow that language too. The attached PDF is not regenerated: it is the document as it stands.&lt;br /&gt;
&lt;br /&gt;
Translating a template is done in Dolibarr itself, not in the module settings: create the template again with the SAME label, choose the language, then translate the subject and the content. Note that the Language column of email templates only appears when the multi-language option is enabled.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
== Multi-company (Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
The module works with the Multicompany module. Each entity sends and reminds &#039;&#039;&#039;its own documents only&#039;&#039;&#039;, with its own settings, its own reminder levels and its own email templates. Sharing in Multicompany grants read visibility on the documents of another entity, it does not change their owner: a shared invoice is still reminded by the entity it belongs to. Nothing to configure. Before 1.3.3, an entity picked up the invoices and proposals of the entities it was allowed to see and processed them with its own settings.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.3&#039;&#039;&#039; (2026-08-05, beta): compatibility with the Multicompany module. Each entity now sends and reminds its own invoices and proposals only, with its own settings and templates, even when sharing is enabled. Nothing to enable, no migration. Version 1.3.1 remains the release version.&lt;br /&gt;
* &#039;&#039;&#039;1.3.2&#039;&#039;&#039; (2026-08-02, beta): documents and reminders are sent in the language of the third party when a template carrying the same label exists in that language.&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=66846</id>
		<title>Module Auto Reminder FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=66846"/>
		<updated>2026-08-05T19:04:24Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* Historique des versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Auto_Reminder]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 ou supérieur&lt;br /&gt;
|note=Testé sur Dolibarr 23. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; envoie et relance automatiquement les factures et les devis dans Dolibarr. Tout est déclenché par une tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Factures ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des factures validées par email, avec le PDF de la facture en pièce jointe et le modèle d&#039;email de votre choix.&lt;br /&gt;
* Relance automatique des factures impayées, par paliers configurables. Chaque palier définit un délai en jours par rapport à la date d&#039;échéance (ou à la date de facture s&#039;il n&#039;y a pas d&#039;échéance) et son modèle d&#039;email. Les délais négatifs sont acceptés, pour une relance préventive avant l&#039;échéance.&lt;br /&gt;
* Option pour inclure ou exclure les factures partiellement payées.&lt;br /&gt;
&lt;br /&gt;
== Devis (depuis la 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des devis validés par email, avec le PDF du devis en pièce jointe.&lt;br /&gt;
* Relance automatique des devis restés sans réponse (ni signés, ni refusés, ni facturés). Les paliers sont comptés à partir de la date de fin de validité du devis, ou de sa date s&#039;il n&#039;en a pas.&lt;br /&gt;
* Réglages entièrement séparés de ceux des factures : la page de configuration a un onglet Factures et un onglet Devis, chacun avec ses interrupteurs, son modèle d&#039;email et ses paliers.&lt;br /&gt;
&lt;br /&gt;
== Seul le palier le plus élevé atteint est envoyé ==&lt;br /&gt;
&lt;br /&gt;
Pour chaque document, seul le palier de relance le plus élevé atteint est retenu. Les paliers inférieurs manqués ne sont jamais rattrapés : un document déjà en retard au moment où le module est activé reçoit une seule relance, celle qui correspond à son retard réel, avec le bon modèle d&#039;email. Jamais une rafale de relances sur plusieurs jours.&lt;br /&gt;
&lt;br /&gt;
== Destinataire des emails ==&lt;br /&gt;
&lt;br /&gt;
Le destinataire est déterminé dans cet ordre, aussi bien pour l&#039;envoi que pour les relances :&lt;br /&gt;
&lt;br /&gt;
# Le contact rattaché au document (onglet Contacts de la facture ou du devis), quel que soit son rôle. Si plusieurs contacts sont rattachés : facturation, puis prestation, puis livraison pour une facture ; suivi, puis facturation, puis livraison pour un devis.&lt;br /&gt;
# Sinon le contact par défaut du tiers pour ce type de document (onglet Contacts/Adresses du tiers).&lt;br /&gt;
# Sinon le premier contact actif du tiers ayant une adresse email.&lt;br /&gt;
# Sinon l&#039;adresse email du tiers.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.3.1, tous les contacts à égalité sur le rôle le plus prioritaire sont retenus, et non plus seulement le premier : deux ou trois contacts de facturation rattachés à la même facture reçoivent tous l&#039;email, en un seul envoi. L&#039;ordre de priorité est inchangé, un contact de facturation l&#039;emporte toujours sur un contact de livraison. Les étapes 1 et 2 ci-dessus fonctionnent ainsi ; l&#039;étape 3 ne retient qu&#039;un seul destinataire, puisque sans rôle rien n&#039;indique qui s&#039;occupe des factures.&lt;br /&gt;
&lt;br /&gt;
Les contacts désactivés et les contacts sans email ne sont jamais utilisés. Si aucun destinataire n&#039;est trouvé, rien n&#039;est envoyé et un événement est enregistré dans l&#039;agenda du document.&lt;br /&gt;
&lt;br /&gt;
== Langue des emails (depuis la 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
Le modèle choisi dans les réglages fixe le LIBELLÉ de référence, pas la langue. Si l&#039;option multilingue de Dolibarr est activée et que le tiers a sa propre langue, le module utilise le modèle d&#039;email portant le même libellé dans cette langue, et se rabat sur celui des réglages s&#039;il n&#039;y en a pas. Le repli de langue (es_MX vers es_ES, puis modèle sans langue) est celui de Dolibarr. Les montants et les dates du message suivent également cette langue. Le PDF joint, lui, n&#039;est pas régénéré : c&#039;est le document tel qu&#039;il existe.&lt;br /&gt;
&lt;br /&gt;
Traduire un modèle est un geste Dolibarr, pas un réglage du module : recréer le modèle avec le MÊME libellé, choisir la langue, puis traduire le sujet et le contenu. À noter, la colonne Langue des modèles d&#039;email n&#039;apparaît que si l&#039;option multilingue est activée.&lt;br /&gt;
&lt;br /&gt;
== Garde-fou contre l&#039;envoi en masse ==&lt;br /&gt;
&lt;br /&gt;
Seuls les documents validés après l&#039;activation de l&#039;option d&#039;envoi sont envoyés : activer le module sur une base existante n&#039;envoie jamais l&#039;historique. La date de référence est enregistrée au moment où vous activez l&#039;option, affichée dans les réglages, et modifiable : vous pouvez la reculer en connaissance de cause pour inclure une partie de l&#039;historique. Un avertissement explicite est affiché à côté du champ : tout document validé à partir de cette date et jamais envoyé partira au prochain passage de la tâche planifiée.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
Une case à cocher « Exclure des relances automatiques » est disponible :&lt;br /&gt;
* sur la fiche tiers : ne jamais relancer ce client (factures et devis),&lt;br /&gt;
* sur la fiche facture : ne jamais relancer cette facture (litige, échéancier négocié...),&lt;br /&gt;
* sur la fiche devis : ne jamais relancer ce devis.&lt;br /&gt;
&lt;br /&gt;
L&#039;envoi initial des documents n&#039;est pas concerné par ces cases.&lt;br /&gt;
&lt;br /&gt;
== Quand un document ne peut pas être traité ==&lt;br /&gt;
&lt;br /&gt;
Quand un document ne peut pas être traité (aucun destinataire valide, PDF introuvable, modèle d&#039;email introuvable, échec d&#039;envoi), le module enregistre un événement dans l&#039;agenda du document avec la raison en clair, une seule fois par document et par raison. En regardant la facture ou le devis, vous voyez immédiatement pourquoi rien n&#039;est parti.&lt;br /&gt;
&lt;br /&gt;
== Multi-société (module Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
Le module fonctionne avec le module Multicompany. Chaque société envoie et relance &#039;&#039;&#039;ses propres documents uniquement&#039;&#039;&#039;, avec ses propres réglages, ses propres paliers et ses propres modèles d&#039;email. Le partage de Multicompany donne un droit de lecture sur les documents d&#039;une autre société, il ne change pas leur propriétaire : une facture partagée reste relancée par la société à laquelle elle appartient. Il n&#039;y a rien à régler. Avant la 1.3.3, une société prenait aussi les factures et les devis des sociétés qu&#039;elle avait le droit de voir, et les traitait avec ses propres réglages.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Télécharger le fichier zip du module.&lt;br /&gt;
# Se connecter à Dolibarr en administrateur, aller dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et envoyer le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; dans la section &#039;&#039;Modules financiers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le module crée automatiquement sa table en base, ses champs complémentaires et une tâche planifiée quotidienne. Lors d&#039;une mise à jour depuis une version 1.x, les paliers existants sont conservés en tant que paliers de factures.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Avant de configurer le module, créez vos modèles d&#039;email dans &#039;&#039;Accueil - Configuration - Emails - Modèles d&#039;emails&#039;&#039; : type &#039;&#039;Envoi facture&#039;&#039; pour les factures, type &#039;&#039;Envoi proposition commerciale&#039;&#039; pour les devis. Un modèle pour l&#039;envoi initial, un par palier de relance.&lt;br /&gt;
&lt;br /&gt;
Ouvrez ensuite les réglages du module. Il y a un onglet par type de document (Factures, Devis), chacun avec :&lt;br /&gt;
&lt;br /&gt;
* l&#039;interrupteur d&#039;envoi automatique et son modèle d&#039;email. À l&#039;activation, la date du jour est enregistrée : seuls les documents validés à partir de cette date seront envoyés. La date est modifiable (avec un avertissement),&lt;br /&gt;
* l&#039;interrupteur de relance automatique (et, pour les factures uniquement, l&#039;option des factures partiellement payées),&lt;br /&gt;
* le tableau des paliers de relance : délai en jours + modèle d&#039;email, autant de paliers que vous voulez.&lt;br /&gt;
&lt;br /&gt;
La tâche planifiée &#039;&#039;AutoReminderJob&#039;&#039; s&#039;exécute une fois par jour par défaut (voir &#039;&#039;Accueil - Configuration - Tâches planifiées&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.3&#039;&#039;&#039; (2026-08-05, bêta) : compatibilité avec le module Multicompany. Chaque société n&#039;envoie et ne relance plus que ses propres factures et devis, avec ses propres réglages et ses propres modèles, même quand le partage est actif. Rien à activer, aucune migration. La 1.3.1 reste la version release.&lt;br /&gt;
* &#039;&#039;&#039;1.3.2&#039;&#039;&#039; (2026-08-02, bêta) : les documents et les relances partent dans la langue du tiers dès qu&#039;un modèle portant le même libellé existe dans cette langue.&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=66845</id>
		<title>Module Auto Reminder FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=66845"/>
		<updated>2026-08-05T17:56:16Z</updated>

		<summary type="html">&lt;p&gt;StephM: 1.3.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Auto_Reminder]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 ou supérieur&lt;br /&gt;
|note=Testé sur Dolibarr 23. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; envoie et relance automatiquement les factures et les devis dans Dolibarr. Tout est déclenché par une tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Factures ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des factures validées par email, avec le PDF de la facture en pièce jointe et le modèle d&#039;email de votre choix.&lt;br /&gt;
* Relance automatique des factures impayées, par paliers configurables. Chaque palier définit un délai en jours par rapport à la date d&#039;échéance (ou à la date de facture s&#039;il n&#039;y a pas d&#039;échéance) et son modèle d&#039;email. Les délais négatifs sont acceptés, pour une relance préventive avant l&#039;échéance.&lt;br /&gt;
* Option pour inclure ou exclure les factures partiellement payées.&lt;br /&gt;
&lt;br /&gt;
== Devis (depuis la 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des devis validés par email, avec le PDF du devis en pièce jointe.&lt;br /&gt;
* Relance automatique des devis restés sans réponse (ni signés, ni refusés, ni facturés). Les paliers sont comptés à partir de la date de fin de validité du devis, ou de sa date s&#039;il n&#039;en a pas.&lt;br /&gt;
* Réglages entièrement séparés de ceux des factures : la page de configuration a un onglet Factures et un onglet Devis, chacun avec ses interrupteurs, son modèle d&#039;email et ses paliers.&lt;br /&gt;
&lt;br /&gt;
== Seul le palier le plus élevé atteint est envoyé ==&lt;br /&gt;
&lt;br /&gt;
Pour chaque document, seul le palier de relance le plus élevé atteint est retenu. Les paliers inférieurs manqués ne sont jamais rattrapés : un document déjà en retard au moment où le module est activé reçoit une seule relance, celle qui correspond à son retard réel, avec le bon modèle d&#039;email. Jamais une rafale de relances sur plusieurs jours.&lt;br /&gt;
&lt;br /&gt;
== Destinataire des emails ==&lt;br /&gt;
&lt;br /&gt;
Le destinataire est déterminé dans cet ordre, aussi bien pour l&#039;envoi que pour les relances :&lt;br /&gt;
&lt;br /&gt;
# Le contact rattaché au document (onglet Contacts de la facture ou du devis), quel que soit son rôle. Si plusieurs contacts sont rattachés : facturation, puis prestation, puis livraison pour une facture ; suivi, puis facturation, puis livraison pour un devis.&lt;br /&gt;
# Sinon le contact par défaut du tiers pour ce type de document (onglet Contacts/Adresses du tiers).&lt;br /&gt;
# Sinon le premier contact actif du tiers ayant une adresse email.&lt;br /&gt;
# Sinon l&#039;adresse email du tiers.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.3.1, tous les contacts à égalité sur le rôle le plus prioritaire sont retenus, et non plus seulement le premier : deux ou trois contacts de facturation rattachés à la même facture reçoivent tous l&#039;email, en un seul envoi. L&#039;ordre de priorité est inchangé, un contact de facturation l&#039;emporte toujours sur un contact de livraison. Les étapes 1 et 2 ci-dessus fonctionnent ainsi ; l&#039;étape 3 ne retient qu&#039;un seul destinataire, puisque sans rôle rien n&#039;indique qui s&#039;occupe des factures.&lt;br /&gt;
&lt;br /&gt;
Les contacts désactivés et les contacts sans email ne sont jamais utilisés. Si aucun destinataire n&#039;est trouvé, rien n&#039;est envoyé et un événement est enregistré dans l&#039;agenda du document.&lt;br /&gt;
&lt;br /&gt;
== Langue des emails (depuis la 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
Le modèle choisi dans les réglages fixe le LIBELLÉ de référence, pas la langue. Si l&#039;option multilingue de Dolibarr est activée et que le tiers a sa propre langue, le module utilise le modèle d&#039;email portant le même libellé dans cette langue, et se rabat sur celui des réglages s&#039;il n&#039;y en a pas. Le repli de langue (es_MX vers es_ES, puis modèle sans langue) est celui de Dolibarr. Les montants et les dates du message suivent également cette langue. Le PDF joint, lui, n&#039;est pas régénéré : c&#039;est le document tel qu&#039;il existe.&lt;br /&gt;
&lt;br /&gt;
Traduire un modèle est un geste Dolibarr, pas un réglage du module : recréer le modèle avec le MÊME libellé, choisir la langue, puis traduire le sujet et le contenu. À noter, la colonne Langue des modèles d&#039;email n&#039;apparaît que si l&#039;option multilingue est activée.&lt;br /&gt;
&lt;br /&gt;
== Garde-fou contre l&#039;envoi en masse ==&lt;br /&gt;
&lt;br /&gt;
Seuls les documents validés après l&#039;activation de l&#039;option d&#039;envoi sont envoyés : activer le module sur une base existante n&#039;envoie jamais l&#039;historique. La date de référence est enregistrée au moment où vous activez l&#039;option, affichée dans les réglages, et modifiable : vous pouvez la reculer en connaissance de cause pour inclure une partie de l&#039;historique. Un avertissement explicite est affiché à côté du champ : tout document validé à partir de cette date et jamais envoyé partira au prochain passage de la tâche planifiée.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
Une case à cocher « Exclure des relances automatiques » est disponible :&lt;br /&gt;
* sur la fiche tiers : ne jamais relancer ce client (factures et devis),&lt;br /&gt;
* sur la fiche facture : ne jamais relancer cette facture (litige, échéancier négocié...),&lt;br /&gt;
* sur la fiche devis : ne jamais relancer ce devis.&lt;br /&gt;
&lt;br /&gt;
L&#039;envoi initial des documents n&#039;est pas concerné par ces cases.&lt;br /&gt;
&lt;br /&gt;
== Quand un document ne peut pas être traité ==&lt;br /&gt;
&lt;br /&gt;
Quand un document ne peut pas être traité (aucun destinataire valide, PDF introuvable, modèle d&#039;email introuvable, échec d&#039;envoi), le module enregistre un événement dans l&#039;agenda du document avec la raison en clair, une seule fois par document et par raison. En regardant la facture ou le devis, vous voyez immédiatement pourquoi rien n&#039;est parti.&lt;br /&gt;
&lt;br /&gt;
== Multi-société (module Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
Le module fonctionne avec le module Multicompany. Chaque société envoie et relance &#039;&#039;&#039;ses propres documents uniquement&#039;&#039;&#039;, avec ses propres réglages, ses propres paliers et ses propres modèles d&#039;email. Le partage de Multicompany donne un droit de lecture sur les documents d&#039;une autre société, il ne change pas leur propriétaire : une facture partagée reste relancée par la société à laquelle elle appartient. Il n&#039;y a rien à régler. Avant la 1.3.3, une société prenait aussi les factures et les devis des sociétés qu&#039;elle avait le droit de voir, et les traitait avec ses propres réglages.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Télécharger le fichier zip du module.&lt;br /&gt;
# Se connecter à Dolibarr en administrateur, aller dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et envoyer le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; dans la section &#039;&#039;Modules financiers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le module crée automatiquement sa table en base, ses champs complémentaires et une tâche planifiée quotidienne. Lors d&#039;une mise à jour depuis une version 1.x, les paliers existants sont conservés en tant que paliers de factures.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Avant de configurer le module, créez vos modèles d&#039;email dans &#039;&#039;Accueil - Configuration - Emails - Modèles d&#039;emails&#039;&#039; : type &#039;&#039;Envoi facture&#039;&#039; pour les factures, type &#039;&#039;Envoi proposition commerciale&#039;&#039; pour les devis. Un modèle pour l&#039;envoi initial, un par palier de relance.&lt;br /&gt;
&lt;br /&gt;
Ouvrez ensuite les réglages du module. Il y a un onglet par type de document (Factures, Devis), chacun avec :&lt;br /&gt;
&lt;br /&gt;
* l&#039;interrupteur d&#039;envoi automatique et son modèle d&#039;email. À l&#039;activation, la date du jour est enregistrée : seuls les documents validés à partir de cette date seront envoyés. La date est modifiable (avec un avertissement),&lt;br /&gt;
* l&#039;interrupteur de relance automatique (et, pour les factures uniquement, l&#039;option des factures partiellement payées),&lt;br /&gt;
* le tableau des paliers de relance : délai en jours + modèle d&#039;email, autant de paliers que vous voulez.&lt;br /&gt;
&lt;br /&gt;
La tâche planifiée &#039;&#039;AutoReminderJob&#039;&#039; s&#039;exécute une fois par jour par défaut (voir &#039;&#039;Accueil - Configuration - Tâches planifiées&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.3&#039;&#039;&#039; (2026-08-05, bêta) : compatibilité avec le module Multicompany. Chaque société n&#039;envoie et ne relance plus que ses propres factures et devis, avec ses propres réglages et ses propres modèles, même quand le partage est actif. Rien à activer, aucune migration. La 1.3.0 reste la version release.&lt;br /&gt;
* &#039;&#039;&#039;1.3.2&#039;&#039;&#039; (2026-08-02, bêta) : les documents et les relances partent dans la langue du tiers dès qu&#039;un modèle portant le même libellé existe dans cette langue.&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66844</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66844"/>
		<updated>2026-08-05T17:53:48Z</updated>

		<summary type="html">&lt;p&gt;StephM: 1.3.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Auto_Reminder_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 or higher&lt;br /&gt;
|note=Tested on Dolibarr 23. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Language of the emails (since 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
The template selected in the settings defines the LABEL of reference, not the language. When the Dolibarr multi-language option is enabled and the third party has its own language, the module uses the email template carrying the same label in that language, and falls back to the template selected in the settings when there is none. The language fallback (es_MX to es_ES, then a template with no language) is the native Dolibarr one. Amounts and dates in the email follow that language too. The attached PDF is not regenerated: it is the document as it stands.&lt;br /&gt;
&lt;br /&gt;
Translating a template is done in Dolibarr itself, not in the module settings: create the template again with the SAME label, choose the language, then translate the subject and the content. Note that the Language column of email templates only appears when the multi-language option is enabled.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
== Multi-company (Multicompany) ==&lt;br /&gt;
&lt;br /&gt;
The module works with the Multicompany module. Each entity sends and reminds &#039;&#039;&#039;its own documents only&#039;&#039;&#039;, with its own settings, its own reminder levels and its own email templates. Sharing in Multicompany grants read visibility on the documents of another entity, it does not change their owner: a shared invoice is still reminded by the entity it belongs to. Nothing to configure. Before 1.3.3, an entity picked up the invoices and proposals of the entities it was allowed to see and processed them with its own settings.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.3&#039;&#039;&#039; (2026-08-05, beta): compatibility with the Multicompany module. Each entity now sends and reminds its own invoices and proposals only, with its own settings and templates, even when sharing is enabled. Nothing to enable, no migration. Version 1.3.0 remains the release version.&lt;br /&gt;
* &#039;&#039;&#039;1.3.2&#039;&#039;&#039; (2026-08-02, beta): documents and reminders are sent in the language of the third party when a template carrying the same label exists in that language.&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=66841</id>
		<title>Module Auto Reminder FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=66841"/>
		<updated>2026-08-02T19:13:19Z</updated>

		<summary type="html">&lt;p&gt;StephM: Version multi-lingue des alertes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Auto_Reminder]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 ou supérieur&lt;br /&gt;
|note=Testé sur Dolibarr 23. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; envoie et relance automatiquement les factures et les devis dans Dolibarr. Tout est déclenché par une tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Factures ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des factures validées par email, avec le PDF de la facture en pièce jointe et le modèle d&#039;email de votre choix.&lt;br /&gt;
* Relance automatique des factures impayées, par paliers configurables. Chaque palier définit un délai en jours par rapport à la date d&#039;échéance (ou à la date de facture s&#039;il n&#039;y a pas d&#039;échéance) et son modèle d&#039;email. Les délais négatifs sont acceptés, pour une relance préventive avant l&#039;échéance.&lt;br /&gt;
* Option pour inclure ou exclure les factures partiellement payées.&lt;br /&gt;
&lt;br /&gt;
== Devis (depuis la 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des devis validés par email, avec le PDF du devis en pièce jointe.&lt;br /&gt;
* Relance automatique des devis restés sans réponse (ni signés, ni refusés, ni facturés). Les paliers sont comptés à partir de la date de fin de validité du devis, ou de sa date s&#039;il n&#039;en a pas.&lt;br /&gt;
* Réglages entièrement séparés de ceux des factures : la page de configuration a un onglet Factures et un onglet Devis, chacun avec ses interrupteurs, son modèle d&#039;email et ses paliers.&lt;br /&gt;
&lt;br /&gt;
== Seul le palier le plus élevé atteint est envoyé ==&lt;br /&gt;
&lt;br /&gt;
Pour chaque document, seul le palier de relance le plus élevé atteint est retenu. Les paliers inférieurs manqués ne sont jamais rattrapés : un document déjà en retard au moment où le module est activé reçoit une seule relance, celle qui correspond à son retard réel, avec le bon modèle d&#039;email. Jamais une rafale de relances sur plusieurs jours.&lt;br /&gt;
&lt;br /&gt;
== Destinataire des emails ==&lt;br /&gt;
&lt;br /&gt;
Le destinataire est déterminé dans cet ordre, aussi bien pour l&#039;envoi que pour les relances :&lt;br /&gt;
&lt;br /&gt;
# Le contact rattaché au document (onglet Contacts de la facture ou du devis), quel que soit son rôle. Si plusieurs contacts sont rattachés : facturation, puis prestation, puis livraison pour une facture ; suivi, puis facturation, puis livraison pour un devis.&lt;br /&gt;
# Sinon le contact par défaut du tiers pour ce type de document (onglet Contacts/Adresses du tiers).&lt;br /&gt;
# Sinon le premier contact actif du tiers ayant une adresse email.&lt;br /&gt;
# Sinon l&#039;adresse email du tiers.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.3.1, tous les contacts à égalité sur le rôle le plus prioritaire sont retenus, et non plus seulement le premier : deux ou trois contacts de facturation rattachés à la même facture reçoivent tous l&#039;email, en un seul envoi. L&#039;ordre de priorité est inchangé, un contact de facturation l&#039;emporte toujours sur un contact de livraison. Les étapes 1 et 2 ci-dessus fonctionnent ainsi ; l&#039;étape 3 ne retient qu&#039;un seul destinataire, puisque sans rôle rien n&#039;indique qui s&#039;occupe des factures.&lt;br /&gt;
&lt;br /&gt;
Les contacts désactivés et les contacts sans email ne sont jamais utilisés. Si aucun destinataire n&#039;est trouvé, rien n&#039;est envoyé et un événement est enregistré dans l&#039;agenda du document.&lt;br /&gt;
&lt;br /&gt;
== Langue des emails (depuis la 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
Le modèle choisi dans les réglages fixe le LIBELLÉ de référence, pas la langue. Si l&#039;option multilingue de Dolibarr est activée et que le tiers a sa propre langue, le module utilise le modèle d&#039;email portant le même libellé dans cette langue, et se rabat sur celui des réglages s&#039;il n&#039;y en a pas. Le repli de langue (es_MX vers es_ES, puis modèle sans langue) est celui de Dolibarr. Les montants et les dates du message suivent également cette langue. Le PDF joint, lui, n&#039;est pas régénéré : c&#039;est le document tel qu&#039;il existe.&lt;br /&gt;
&lt;br /&gt;
Traduire un modèle est un geste Dolibarr, pas un réglage du module : recréer le modèle avec le MÊME libellé, choisir la langue, puis traduire le sujet et le contenu. À noter, la colonne Langue des modèles d&#039;email n&#039;apparaît que si l&#039;option multilingue est activée.&lt;br /&gt;
&lt;br /&gt;
== Garde-fou contre l&#039;envoi en masse ==&lt;br /&gt;
&lt;br /&gt;
Seuls les documents validés après l&#039;activation de l&#039;option d&#039;envoi sont envoyés : activer le module sur une base existante n&#039;envoie jamais l&#039;historique. La date de référence est enregistrée au moment où vous activez l&#039;option, affichée dans les réglages, et modifiable : vous pouvez la reculer en connaissance de cause pour inclure une partie de l&#039;historique. Un avertissement explicite est affiché à côté du champ : tout document validé à partir de cette date et jamais envoyé partira au prochain passage de la tâche planifiée.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
Une case à cocher « Exclure des relances automatiques » est disponible :&lt;br /&gt;
* sur la fiche tiers : ne jamais relancer ce client (factures et devis),&lt;br /&gt;
* sur la fiche facture : ne jamais relancer cette facture (litige, échéancier négocié...),&lt;br /&gt;
* sur la fiche devis : ne jamais relancer ce devis.&lt;br /&gt;
&lt;br /&gt;
L&#039;envoi initial des documents n&#039;est pas concerné par ces cases.&lt;br /&gt;
&lt;br /&gt;
== Quand un document ne peut pas être traité ==&lt;br /&gt;
&lt;br /&gt;
Quand un document ne peut pas être traité (aucun destinataire valide, PDF introuvable, modèle d&#039;email introuvable, échec d&#039;envoi), le module enregistre un événement dans l&#039;agenda du document avec la raison en clair, une seule fois par document et par raison. En regardant la facture ou le devis, vous voyez immédiatement pourquoi rien n&#039;est parti.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Télécharger le fichier zip du module.&lt;br /&gt;
# Se connecter à Dolibarr en administrateur, aller dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et envoyer le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; dans la section &#039;&#039;Modules financiers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le module crée automatiquement sa table en base, ses champs complémentaires et une tâche planifiée quotidienne. Lors d&#039;une mise à jour depuis une version 1.x, les paliers existants sont conservés en tant que paliers de factures.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Avant de configurer le module, créez vos modèles d&#039;email dans &#039;&#039;Accueil - Configuration - Emails - Modèles d&#039;emails&#039;&#039; : type &#039;&#039;Envoi facture&#039;&#039; pour les factures, type &#039;&#039;Envoi proposition commerciale&#039;&#039; pour les devis. Un modèle pour l&#039;envoi initial, un par palier de relance.&lt;br /&gt;
&lt;br /&gt;
Ouvrez ensuite les réglages du module. Il y a un onglet par type de document (Factures, Devis), chacun avec :&lt;br /&gt;
&lt;br /&gt;
* l&#039;interrupteur d&#039;envoi automatique et son modèle d&#039;email. À l&#039;activation, la date du jour est enregistrée : seuls les documents validés à partir de cette date seront envoyés. La date est modifiable (avec un avertissement),&lt;br /&gt;
* l&#039;interrupteur de relance automatique (et, pour les factures uniquement, l&#039;option des factures partiellement payées),&lt;br /&gt;
* le tableau des paliers de relance : délai en jours + modèle d&#039;email, autant de paliers que vous voulez.&lt;br /&gt;
&lt;br /&gt;
La tâche planifiée &#039;&#039;AutoReminderJob&#039;&#039; s&#039;exécute une fois par jour par défaut (voir &#039;&#039;Accueil - Configuration - Tâches planifiées&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.2&#039;&#039;&#039; (2026-08-02, bêta) : les documents et les relances partent dans la langue du tiers dès qu&#039;un modèle portant le même libellé existe dans cette langue. La 1.3.0 reste la version release.&lt;br /&gt;
* &#039;&#039;&#039;1.3.1&#039;&#039;&#039; (2026-08-02, bêta) : tous les contacts à égalité sur le rôle le plus prioritaire reçoivent le document et les relances (plusieurs contacts de facturation sur la même facture), ordre de priorité inchangé, rien à activer.&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66840</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66840"/>
		<updated>2026-08-02T17:43:54Z</updated>

		<summary type="html">&lt;p&gt;StephM: Version multi-lingue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Auto_Reminder_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 or higher&lt;br /&gt;
|note=Tested on Dolibarr 23. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Language of the emails (since 1.3.2) ==&lt;br /&gt;
&lt;br /&gt;
The template selected in the settings defines the LABEL of reference, not the language. When the Dolibarr multi-language option is enabled and the third party has its own language, the module uses the email template carrying the same label in that language, and falls back to the template selected in the settings when there is none. The language fallback (es_MX to es_ES, then a template with no language) is the native Dolibarr one. Amounts and dates in the email follow that language too. The attached PDF is not regenerated: it is the document as it stands.&lt;br /&gt;
&lt;br /&gt;
Translating a template is done in Dolibarr itself, not in the module settings: create the template again with the SAME label, choose the language, then translate the subject and the content. Note that the Language column of email templates only appears when the multi-language option is enabled.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.2&#039;&#039;&#039; (2026-08-02, beta): documents and reminders are sent in the language of the third party when a template carrying the same label exists in that language. Version 1.3.0 remains the release version.&lt;br /&gt;
* &#039;&#039;&#039;1.3.1&#039;&#039;&#039; (2026-08-02, beta): every contact sharing the highest priority role receives the document and the reminders (several billing contacts on the same invoice), priority order unchanged, nothing to enable.&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=66839</id>
		<title>Module Auto Reminder FR</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder_FR&amp;diff=66839"/>
		<updated>2026-08-02T15:22:01Z</updated>

		<summary type="html">&lt;p&gt;StephM: Created page with &amp;quot;&amp;lt;!-- BEGIN interlang links --&amp;gt; en:Module_Auto_Reminder &amp;lt;!-- END interlang links --&amp;gt;  Category:Modules complémentaires {{TemplateDocUtil}} =Informations= {{TemplateMod...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[en:Module_Auto_Reminder]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 ou supérieur&lt;br /&gt;
|note=Testé sur Dolibarr 23. Module gratuit, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; envoie et relance automatiquement les factures et les devis dans Dolibarr. Tout est déclenché par une tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
= Fonctionnalités =&lt;br /&gt;
&lt;br /&gt;
== Factures ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des factures validées par email, avec le PDF de la facture en pièce jointe et le modèle d&#039;email de votre choix.&lt;br /&gt;
* Relance automatique des factures impayées, par paliers configurables. Chaque palier définit un délai en jours par rapport à la date d&#039;échéance (ou à la date de facture s&#039;il n&#039;y a pas d&#039;échéance) et son modèle d&#039;email. Les délais négatifs sont acceptés, pour une relance préventive avant l&#039;échéance.&lt;br /&gt;
* Option pour inclure ou exclure les factures partiellement payées.&lt;br /&gt;
&lt;br /&gt;
== Devis (depuis la 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Envoi automatique des devis validés par email, avec le PDF du devis en pièce jointe.&lt;br /&gt;
* Relance automatique des devis restés sans réponse (ni signés, ni refusés, ni facturés). Les paliers sont comptés à partir de la date de fin de validité du devis, ou de sa date s&#039;il n&#039;en a pas.&lt;br /&gt;
* Réglages entièrement séparés de ceux des factures : la page de configuration a un onglet Factures et un onglet Devis, chacun avec ses interrupteurs, son modèle d&#039;email et ses paliers.&lt;br /&gt;
&lt;br /&gt;
== Seul le palier le plus élevé atteint est envoyé ==&lt;br /&gt;
&lt;br /&gt;
Pour chaque document, seul le palier de relance le plus élevé atteint est retenu. Les paliers inférieurs manqués ne sont jamais rattrapés : un document déjà en retard au moment où le module est activé reçoit une seule relance, celle qui correspond à son retard réel, avec le bon modèle d&#039;email. Jamais une rafale de relances sur plusieurs jours.&lt;br /&gt;
&lt;br /&gt;
== Destinataire des emails ==&lt;br /&gt;
&lt;br /&gt;
Le destinataire est déterminé dans cet ordre, aussi bien pour l&#039;envoi que pour les relances :&lt;br /&gt;
&lt;br /&gt;
# Le contact rattaché au document (onglet Contacts de la facture ou du devis), quel que soit son rôle. Si plusieurs contacts sont rattachés : facturation, puis prestation, puis livraison pour une facture ; suivi, puis facturation, puis livraison pour un devis.&lt;br /&gt;
# Sinon le contact par défaut du tiers pour ce type de document (onglet Contacts/Adresses du tiers).&lt;br /&gt;
# Sinon le premier contact actif du tiers ayant une adresse email.&lt;br /&gt;
# Sinon l&#039;adresse email du tiers.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.3.1, tous les contacts à égalité sur le rôle le plus prioritaire sont retenus, et non plus seulement le premier : deux ou trois contacts de facturation rattachés à la même facture reçoivent tous l&#039;email, en un seul envoi. L&#039;ordre de priorité est inchangé, un contact de facturation l&#039;emporte toujours sur un contact de livraison. Les étapes 1 et 2 ci-dessus fonctionnent ainsi ; l&#039;étape 3 ne retient qu&#039;un seul destinataire, puisque sans rôle rien n&#039;indique qui s&#039;occupe des factures.&lt;br /&gt;
&lt;br /&gt;
Les contacts désactivés et les contacts sans email ne sont jamais utilisés. Si aucun destinataire n&#039;est trouvé, rien n&#039;est envoyé et un événement est enregistré dans l&#039;agenda du document.&lt;br /&gt;
&lt;br /&gt;
== Garde-fou contre l&#039;envoi en masse ==&lt;br /&gt;
&lt;br /&gt;
Seuls les documents validés après l&#039;activation de l&#039;option d&#039;envoi sont envoyés : activer le module sur une base existante n&#039;envoie jamais l&#039;historique. La date de référence est enregistrée au moment où vous activez l&#039;option, affichée dans les réglages, et modifiable : vous pouvez la reculer en connaissance de cause pour inclure une partie de l&#039;historique. Un avertissement explicite est affiché à côté du champ : tout document validé à partir de cette date et jamais envoyé partira au prochain passage de la tâche planifiée.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
Une case à cocher « Exclure des relances automatiques » est disponible :&lt;br /&gt;
* sur la fiche tiers : ne jamais relancer ce client (factures et devis),&lt;br /&gt;
* sur la fiche facture : ne jamais relancer cette facture (litige, échéancier négocié...),&lt;br /&gt;
* sur la fiche devis : ne jamais relancer ce devis.&lt;br /&gt;
&lt;br /&gt;
L&#039;envoi initial des documents n&#039;est pas concerné par ces cases.&lt;br /&gt;
&lt;br /&gt;
== Quand un document ne peut pas être traité ==&lt;br /&gt;
&lt;br /&gt;
Quand un document ne peut pas être traité (aucun destinataire valide, PDF introuvable, modèle d&#039;email introuvable, échec d&#039;envoi), le module enregistre un événement dans l&#039;agenda du document avec la raison en clair, une seule fois par document et par raison. En regardant la facture ou le devis, vous voyez immédiatement pourquoi rien n&#039;est parti.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Télécharger le fichier zip du module.&lt;br /&gt;
# Se connecter à Dolibarr en administrateur, aller dans &#039;&#039;Accueil - Configuration - Modules/Applications&#039;&#039;, onglet &#039;&#039;Déployer/installer un module externe&#039;&#039;, et envoyer le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; dans la section &#039;&#039;Modules financiers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le module crée automatiquement sa table en base, ses champs complémentaires et une tâche planifiée quotidienne. Lors d&#039;une mise à jour depuis une version 1.x, les paliers existants sont conservés en tant que paliers de factures.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Avant de configurer le module, créez vos modèles d&#039;email dans &#039;&#039;Accueil - Configuration - Emails - Modèles d&#039;emails&#039;&#039; : type &#039;&#039;Envoi facture&#039;&#039; pour les factures, type &#039;&#039;Envoi proposition commerciale&#039;&#039; pour les devis. Un modèle pour l&#039;envoi initial, un par palier de relance.&lt;br /&gt;
&lt;br /&gt;
Ouvrez ensuite les réglages du module. Il y a un onglet par type de document (Factures, Devis), chacun avec :&lt;br /&gt;
&lt;br /&gt;
* l&#039;interrupteur d&#039;envoi automatique et son modèle d&#039;email. À l&#039;activation, la date du jour est enregistrée : seuls les documents validés à partir de cette date seront envoyés. La date est modifiable (avec un avertissement),&lt;br /&gt;
* l&#039;interrupteur de relance automatique (et, pour les factures uniquement, l&#039;option des factures partiellement payées),&lt;br /&gt;
* le tableau des paliers de relance : délai en jours + modèle d&#039;email, autant de paliers que vous voulez.&lt;br /&gt;
&lt;br /&gt;
La tâche planifiée &#039;&#039;AutoReminderJob&#039;&#039; s&#039;exécute une fois par jour par défaut (voir &#039;&#039;Accueil - Configuration - Tâches planifiées&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Historique des versions =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.1&#039;&#039;&#039; (2026-08-02, bêta) : tous les contacts à égalité sur le rôle le plus prioritaire reçoivent le document et les relances (plusieurs contacts de facturation sur la même facture), ordre de priorité inchangé, rien à activer. La 1.3.0 reste la version release.&lt;br /&gt;
* &#039;&#039;&#039;1.3.0&#039;&#039;&#039; (2026-07-21) : gestion des devis (envoi automatique et relances sur la fin de validité, onglets de réglages séparés, moteur unique), date du garde-fou modifiable avec avertissement, nouvelle règle de destinataire commune, exclusion par devis.&lt;br /&gt;
&lt;br /&gt;
Changelog complet, toutes les versions depuis la première : [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66838</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66838"/>
		<updated>2026-08-02T15:20:26Z</updated>

		<summary type="html">&lt;p&gt;StephM: Corrections categories, modele de page. Ajoute du bloc d&amp;#039;informations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
[[fr:Module_Auto_Reminder_FR]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 or higher&lt;br /&gt;
|note=Tested on Dolibarr 23. Free module, GPLv3.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.1&#039;&#039;&#039; (2026-08-02, beta): every contact sharing the highest priority role receives the document and the reminders (several billing contacts on the same invoice), priority order unchanged, nothing to enable. Version 1.3.0 remains the release version.&lt;br /&gt;
* &#039;&#039;&#039;1.3.0&#039;&#039;&#039; (2026-07-21): proposals support (auto-send + reminders on end of validity, separate settings tabs, single engine), editable mass-send safety date with warning, new common recipient rule, per-proposal exclusion checkbox.&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66837</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66837"/>
		<updated>2026-08-02T12:35:50Z</updated>

		<summary type="html">&lt;p&gt;StephM: 1.3.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocUserEn}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Since 1.3.1, every contact sharing the highest priority role is kept, not only the first one: two or three billing contacts attached to the same invoice all receive the email, in a single sending. The priority order is unchanged, so a billing contact still wins over a shipping one. Steps 1 and 2 above work this way; step 3 keeps a single recipient, since without a role nothing tells who handles the invoices.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.1&#039;&#039;&#039; (2026-08-02, beta): every contact sharing the highest priority role receives the document and the reminders (several billing contacts on the same invoice), priority order unchanged, nothing to enable. Version 1.3.0 remains the release version.&lt;br /&gt;
* &#039;&#039;&#039;1.3.0&#039;&#039;&#039; (2026-07-21): proposals support (auto-send + reminders on end of validity, separate settings tabs, single engine), editable mass-send safety date with warning, new common recipient rule, per-proposal exclusion checkbox.&lt;br /&gt;
&lt;br /&gt;
Full changelog, every version since the first one: [https://framagit.org/Steph501/dolibarr-mod-autoreminder/-/blob/main/ChangeLog.md ChangeLog.md]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66705</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66705"/>
		<updated>2026-07-21T11:02:44Z</updated>

		<summary type="html">&lt;p&gt;StephM: 1.3.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocUserEn}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; automatically sends and follows up invoices and commercial proposals in Dolibarr. Everything is driven by a daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated invoices by email, with the invoice PDF attached and a configurable email template.&lt;br /&gt;
* Automatic reminders for unpaid invoices, based on configurable levels. Each level defines a delay in days relative to the due date (or the invoice date if no due date) and an email template. Negative delays are allowed (preventive reminder before the due date).&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
&lt;br /&gt;
== Proposals (since 1.3.0) ==&lt;br /&gt;
&lt;br /&gt;
* Automatic sending of validated proposals by email, with the proposal PDF attached.&lt;br /&gt;
* Automatic reminders for proposals still unanswered (not signed, not refused, not billed). Levels are counted from the end of validity date of the proposal (or its date if none).&lt;br /&gt;
* Settings are fully separate from invoices: the module setup page has one tab for invoices and one tab for proposals, each with its own switches, email template and reminder levels.&lt;br /&gt;
&lt;br /&gt;
== Only the highest level reached is sent ==&lt;br /&gt;
&lt;br /&gt;
For each document, only the highest reminder level reached is considered. Lower levels that were missed are never sent afterwards: a document already overdue when the module is enabled receives a single reminder, the one matching its actual delay, with the right template. Never a burst of reminders over several days.&lt;br /&gt;
&lt;br /&gt;
== Recipient of the emails ==&lt;br /&gt;
&lt;br /&gt;
The recipient is determined in this order, for sending and for reminders:&lt;br /&gt;
&lt;br /&gt;
# The contact attached to the document (Contacts tab of the invoice or proposal), whatever its role. If several contacts are attached: billing then service then shipping for an invoice; follow-up then billing then shipping for a proposal.&lt;br /&gt;
# Otherwise the default contact of the third party for this document type (Contacts/Addresses tab of the third party).&lt;br /&gt;
# Otherwise the first active contact of the third party having an email.&lt;br /&gt;
# Otherwise the email address of the third party.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts and contacts without email are never used. If no recipient is found, nothing is sent and an event is recorded in the document agenda.&lt;br /&gt;
&lt;br /&gt;
== Safety against mass sending ==&lt;br /&gt;
&lt;br /&gt;
Only documents validated after the sending option was enabled are sent: enabling the module on an existing database never sends the historical documents. The reference date is stored when you enable the option, displayed in the settings, and editable: you can move it back knowingly to include part of the history. An explicit warning is shown next to the field: any document validated on or after that date and never sent will be sent on the next job run.&lt;br /&gt;
&lt;br /&gt;
== Exclusions ==&lt;br /&gt;
&lt;br /&gt;
A checkbox &amp;quot;Exclude from automatic reminders&amp;quot; is available:&lt;br /&gt;
* on the third party card: never remind this customer (invoices and proposals),&lt;br /&gt;
* on the invoice card: never remind this invoice (dispute, negotiated payment schedule...),&lt;br /&gt;
* on the proposal card: never remind this proposal.&lt;br /&gt;
&lt;br /&gt;
The initial sending of documents is not affected by these checkboxes.&lt;br /&gt;
&lt;br /&gt;
== When a document cannot be processed ==&lt;br /&gt;
&lt;br /&gt;
When a document cannot be processed (no valid recipient, PDF not found, email template not found, send failure), the module records an event in the document agenda with the reason in plain words, once per document and per reason. Looking at the invoice or proposal, you immediately see why nothing was sent.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
# Download the module zip file.&lt;br /&gt;
# Log in to Dolibarr as administrator, go to &#039;&#039;Home - Setup - Modules/Applications&#039;&#039;, tab &#039;&#039;Deploy/install external app/module&#039;&#039;, and upload the zip.&lt;br /&gt;
# Activate &#039;&#039;&#039;Auto Reminder&#039;&#039;&#039; in the &#039;&#039;Financial modules&#039;&#039; section.&lt;br /&gt;
&lt;br /&gt;
The module creates its database table, its extrafields and a daily scheduled job automatically. When upgrading from a 1.x version, existing reminder levels are kept as invoice levels.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
Before configuring the module, create your email templates in &#039;&#039;Home - Setup - Emails - Email templates&#039;&#039;: type &#039;&#039;Send invoice&#039;&#039; for invoices, type &#039;&#039;Send commercial proposal&#039;&#039; for proposals. One template for the initial sending, one per reminder level.&lt;br /&gt;
&lt;br /&gt;
Then open the module settings. There is one tab per document type (Invoices, Proposals), each with:&lt;br /&gt;
&lt;br /&gt;
* the automatic sending switch and its email template. When enabled, today&#039;s date is stored: only documents validated from that date on will be sent. The date is editable (with a warning),&lt;br /&gt;
* the automatic reminders switch (and, for invoices only, the partially paid option),&lt;br /&gt;
* the reminder levels table: delay in days + email template, unlimited number of levels.&lt;br /&gt;
&lt;br /&gt;
The scheduled job &#039;&#039;AutoReminderJob&#039;&#039; runs once a day by default (see &#039;&#039;Home - Setup - Scheduled jobs&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
= Version history =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1.3.0&#039;&#039;&#039; (2026-07-21): proposals support (auto-send + reminders on end of validity, separate settings tabs, single engine), editable mass-send safety date with warning, new common recipient rule (document contact whatever its role, then third party default contact, then first active contact, then third party email), per-proposal exclusion checkbox.&lt;br /&gt;
* &#039;&#039;&#039;1.2.0&#039;&#039;&#039; (2026-07-20): strict recipient resolution (never a disabled contact, never an arbitrary contact), only the highest reminder level reached is sent, mass-send safety on initial sending, skipped invoices flagged in the invoice agenda.&lt;br /&gt;
* &#039;&#039;&#039;1.1.1&#039;&#039;&#039; (2026-07-16): Spanish, German and Italian translations.&lt;br /&gt;
* &#039;&#039;&#039;1.1.0&#039;&#039;&#039; (2026-07-16): exclusion checkboxes on third party and invoice; settings kept when the module is disabled.&lt;br /&gt;
* &#039;&#039;&#039;1.0.0&#039;&#039;&#039; (2026-02-14): initial release (invoice auto-send and reminder levels).&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66704</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66704"/>
		<updated>2026-07-20T18:19:07Z</updated>

		<summary type="html">&lt;p&gt;StephM: Version 1.2.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Auto Reminder module by Stéphane Mallet Informatique}}&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 minimum - PHP 7.1 minimum - Scheduled jobs module enabled&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&amp;amp;l=en&lt;br /&gt;
|note=Free module, GPLv3 license. Source code and zip: https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short description:&#039;&#039;&#039; Automatically sends invoices as soon as they are validated, and reminds unpaid invoices through configurable levels. One module, two automations, a single daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
==Automatic sending of validated invoices==&lt;br /&gt;
&lt;br /&gt;
*Every validated invoice is emailed without any action, with its PDF attached.&lt;br /&gt;
*The email template is picked among the existing Dolibarr templates.&lt;br /&gt;
*Each invoice is sent only once: the module keeps track of it in the agenda.&lt;br /&gt;
*&#039;&#039;&#039;Safeguard against mass sending&#039;&#039;&#039;: only invoices validated after the option was enabled are concerned. Enabling the module on an existing database never mass-sends your invoice history. The reference date is shown on the setup page.&lt;br /&gt;
&lt;br /&gt;
==Reminders for unpaid invoices==&lt;br /&gt;
&lt;br /&gt;
*Reminders rely on levels you define: a delay in days and an email template for each level.&lt;br /&gt;
*Any number of levels.&lt;br /&gt;
*A negative delay sends the reminder &#039;&#039;&#039;before&#039;&#039;&#039; the due date, as a preventive notice.&lt;br /&gt;
*&#039;&#039;&#039;Only the highest level reached is sent.&#039;&#039;&#039; Lower levels that were missed are never sent afterwards: an invoice already overdue when the module is enabled receives one single reminder, the one matching its actual delay, with the right template. No burst of catch-up reminders.&lt;br /&gt;
*Option to include or exclude partially paid invoices.&lt;br /&gt;
*An invoice is never reminded twice for the same level.&lt;br /&gt;
*The delay is counted from the due date, or from the invoice date when no due date is set.&lt;br /&gt;
&lt;br /&gt;
==Recipient of the emails==&lt;br /&gt;
&lt;br /&gt;
For both automations, the recipient is resolved in this order:&lt;br /&gt;
&lt;br /&gt;
#The &#039;&#039;&#039;billing contact of the invoice&#039;&#039;&#039; (Contacts tab of the invoice, type &amp;quot;Customer invoice contact&amp;quot;).&lt;br /&gt;
#Otherwise, the &#039;&#039;&#039;default billing contact of the third party&#039;&#039;&#039; (Contacts/Addresses tab of the third party card).&lt;br /&gt;
#Otherwise, the &#039;&#039;&#039;email address of the third party&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Disabled contacts are never used, and the module never falls back to a random contact of the third party. When no valid recipient is found, nothing is sent and the invoice is flagged (see below).&lt;br /&gt;
&lt;br /&gt;
==When an invoice cannot be processed==&lt;br /&gt;
&lt;br /&gt;
When an invoice is skipped (no valid recipient, PDF not found, email template not found, sending failure), the module records an &#039;&#039;&#039;event in the agenda of that invoice&#039;&#039;&#039; with the reason in plain words. Each reason is recorded only once per invoice: no clutter, and you can see at a glance why an invoice never received anything.&lt;br /&gt;
&lt;br /&gt;
==Excluding a customer or an invoice from reminders==&lt;br /&gt;
&lt;br /&gt;
*An &amp;quot;Exclude from automatic reminders&amp;quot; checkbox is added on the &#039;&#039;&#039;third party card&#039;&#039;&#039;: this customer receives no reminder at all, while every other customer keeps being reminded.&lt;br /&gt;
*The same checkbox is added on the &#039;&#039;&#039;invoice card&#039;&#039;&#039;: useful for a disputed invoice or a negotiated payment schedule, without stopping the reminders of the other invoices of that customer.&lt;br /&gt;
*These exclusions only apply to reminders. The initial invoice sending is not affected.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_exclude_thirdparty.png|thumb|center|700px|Third party card: tick &amp;quot;Exclure des relances automatiques&amp;quot; (Exclude from automatic reminders) and this customer is never reminded again. Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_exclude_invoice.png|thumb|center|700px|The same checkbox on the invoice card, to skip one single invoice without excluding the whole customer. Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
*The module interface is translated into English, French, Spanish, German and Italian.&lt;br /&gt;
*Both automations are carried by a single daily scheduled job, created when the module is enabled.&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
&lt;br /&gt;
*Dolibarr 19 or above.&lt;br /&gt;
*PHP 7.1 or above.&lt;br /&gt;
*The Dolibarr &#039;&#039;&#039;Scheduled jobs&#039;&#039;&#039; module enabled, and a system cron calling Dolibarr (on most shared hosting, this task has to be created in the hosting control panel). Without it, no automatic sending happens.&lt;br /&gt;
*A working email setup in Dolibarr (Home - Setup - Emails).&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{InstallModuleEn}}&lt;br /&gt;
&lt;br /&gt;
The zip is available for free on Dolistore: https://www.dolistore.com/product.php?id=2770&amp;amp;l=en&lt;br /&gt;
&lt;br /&gt;
The source code is public: https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleEn}}&lt;br /&gt;
&lt;br /&gt;
Once the module is enabled, its setup page allows you to:&lt;br /&gt;
&lt;br /&gt;
*enable the automatic sending of validated invoices, and choose the email template used; when you enable it, the current date is stored and shown: only invoices validated from that day on will be sent;&lt;br /&gt;
*enable the reminders, and decide whether partially paid invoices are concerned;&lt;br /&gt;
*create the reminder levels: for each level, a delay in days and an email template.&lt;br /&gt;
&lt;br /&gt;
With no level configured, no reminder is sent: the module says so on its setup page.&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_setup.png|thumb|center|700px|Setup page: automatic sending of validated invoices, reminders for unpaid invoices, and the list of reminder levels (here -1 and 6 days). Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
There is nothing to do on a daily basis: the scheduled job takes care of the sendings.&lt;br /&gt;
&lt;br /&gt;
To stop reminding a customer, open the third party card, edit it, and tick &#039;&#039;&#039;Exclude from automatic reminders&#039;&#039;&#039;. To skip one specific invoice, tick the same checkbox on that invoice card.&lt;br /&gt;
&lt;br /&gt;
To understand why an invoice was not sent or reminded, open the invoice and look at its &#039;&#039;&#039;Events&#039;&#039;&#039; tab: the module records there every sending and every skip with its reason.&lt;br /&gt;
&lt;br /&gt;
=Upgrade=&lt;br /&gt;
&lt;br /&gt;
Upload the new zip over the previous one (Home - Setup - Modules - Deploy external module), then &#039;&#039;&#039;disable and enable the module again&#039;&#039;&#039;. This last step is required for the new fields to be created. Since version 1.1.0, your settings and your reminder levels are kept during this operation.&lt;br /&gt;
&lt;br /&gt;
=Version history=&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1.2.0&#039;&#039;&#039;: recipient resolution reworked (invoice billing contact, then third party default billing contact, then third party email; disabled contacts are never used). Only the highest reminder level reached is sent, missed lower levels are no longer caught up. Safeguard on the automatic sending: only invoices validated after the option was enabled. Skipped invoices are flagged in the invoice agenda with the reason.&lt;br /&gt;
*&#039;&#039;&#039;1.1.1&#039;&#039;&#039;: module translated into Spanish, German and Italian.&lt;br /&gt;
*&#039;&#039;&#039;1.1.0&#039;&#039;&#039;: exclusion of reminders per third party and per invoice. Fix: settings are no longer lost when the module is disabled.&lt;br /&gt;
*&#039;&#039;&#039;1.0.0&#039;&#039;&#039;: initial release (automatic sending of validated invoices, reminders for unpaid invoices by levels).&lt;br /&gt;
&lt;br /&gt;
=Support=&lt;br /&gt;
&lt;br /&gt;
By email: contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66694</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66694"/>
		<updated>2026-07-16T22:42:24Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* Excluding a customer or an invoice from reminders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Auto Reminder module by Stéphane Mallet Informatique}}&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 minimum - PHP 7.1 minimum - Scheduled jobs module enabled&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&amp;amp;l=en&lt;br /&gt;
|note=Free module, GPLv3 license. Source code and zip: https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short description:&#039;&#039;&#039; Automatically sends invoices as soon as they are validated, and reminds unpaid invoices through configurable levels. One module, two automations, a single daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
==Automatic sending of validated invoices==&lt;br /&gt;
&lt;br /&gt;
*Every validated invoice is emailed without any action, with its PDF attached.&lt;br /&gt;
*The email template is picked among the existing Dolibarr templates.&lt;br /&gt;
*Each invoice is sent only once: the module keeps track of it in the agenda.&lt;br /&gt;
*The recipient is resolved automatically: billing contact, then third party contact, then third party email.&lt;br /&gt;
&lt;br /&gt;
==Reminders for unpaid invoices==&lt;br /&gt;
&lt;br /&gt;
*Reminders rely on levels you define: a delay in days and an email template for each level.&lt;br /&gt;
*Any number of levels.&lt;br /&gt;
*A negative delay sends the reminder &#039;&#039;&#039;before&#039;&#039;&#039; the due date, as a preventive notice.&lt;br /&gt;
*Option to include or exclude partially paid invoices.&lt;br /&gt;
*An invoice is never reminded twice for the same level.&lt;br /&gt;
*The delay is counted from the due date, or from the invoice date when no due date is set.&lt;br /&gt;
&lt;br /&gt;
==Excluding a customer or an invoice from reminders==&lt;br /&gt;
&lt;br /&gt;
*An &amp;quot;Exclude from automatic reminders&amp;quot; checkbox is added on the &#039;&#039;&#039;third party card&#039;&#039;&#039;: this customer receives no reminder at all, while every other customer keeps being reminded.&lt;br /&gt;
*The same checkbox is added on the &#039;&#039;&#039;invoice card&#039;&#039;&#039;: useful for a disputed invoice or a negotiated payment schedule, without stopping the reminders of the other invoices of that customer.&lt;br /&gt;
*These exclusions only apply to reminders. The initial invoice sending is not affected.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_exclude_thirdparty.png|thumb|center|700px|Third party card: tick &amp;quot;Exclure des relances automatiques&amp;quot; (Exclude from automatic reminders) and this customer is never reminded again. Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_exclude_invoice.png|thumb|center|700px|The same checkbox on the invoice card, to skip one single invoice without excluding the whole customer. Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
*The module interface is translated into English, French, Spanish, German and Italian.&lt;br /&gt;
*Both automations are carried by a single daily scheduled job, created when the module is enabled.&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
&lt;br /&gt;
*Dolibarr 19 or above.&lt;br /&gt;
*PHP 7.1 or above.&lt;br /&gt;
*The Dolibarr &#039;&#039;&#039;Scheduled jobs&#039;&#039;&#039; module enabled, and a system cron calling Dolibarr (on most shared hosting, this task has to be created in the hosting control panel). Without it, no automatic sending happens.&lt;br /&gt;
*A working email setup in Dolibarr (Home - Setup - Emails).&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{InstallModuleEn}}&lt;br /&gt;
&lt;br /&gt;
The zip is available for free on Dolistore: https://www.dolistore.com/product.php?id=2770&amp;amp;l=en&lt;br /&gt;
&lt;br /&gt;
The source code is public: https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleEn}}&lt;br /&gt;
&lt;br /&gt;
Once the module is enabled, its setup page allows you to:&lt;br /&gt;
&lt;br /&gt;
*enable the automatic sending of validated invoices, and choose the email template used;&lt;br /&gt;
*enable the reminders, and decide whether partially paid invoices are concerned;&lt;br /&gt;
*create the reminder levels: for each level, a delay in days and an email template.&lt;br /&gt;
&lt;br /&gt;
With no level configured, no reminder is sent: the module says so on its setup page.&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_setup.png|thumb|center|700px|Setup page: automatic sending of validated invoices, reminders for unpaid invoices, and the list of reminder levels (here -1 and 6 days). Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
There is nothing to do on a daily basis: the scheduled job takes care of the sendings.&lt;br /&gt;
&lt;br /&gt;
To stop reminding a customer, open the third party card, edit it, and tick &#039;&#039;&#039;Exclude from automatic reminders&#039;&#039;&#039;. To skip one specific invoice, tick the same checkbox on that invoice card.&lt;br /&gt;
&lt;br /&gt;
=Upgrade=&lt;br /&gt;
&lt;br /&gt;
Upload the new zip over the previous one (Home - Setup - Modules - Deploy external module), then &#039;&#039;&#039;disable and enable the module again&#039;&#039;&#039;. This last step is required for the new fields to be created. Since version 1.1.0, your settings and your reminder levels are kept during this operation.&lt;br /&gt;
&lt;br /&gt;
=Version history=&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1.1.1&#039;&#039;&#039;: module translated into Spanish, German and Italian.&lt;br /&gt;
*&#039;&#039;&#039;1.1.0&#039;&#039;&#039;: exclusion of reminders per third party and per invoice. Fix: settings are no longer lost when the module is disabled.&lt;br /&gt;
*&#039;&#039;&#039;1.0.0&#039;&#039;&#039;: initial release (automatic sending of validated invoices, reminders for unpaid invoices by levels).&lt;br /&gt;
&lt;br /&gt;
=Support=&lt;br /&gt;
&lt;br /&gt;
By email: contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66693</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66693"/>
		<updated>2026-07-16T22:39:02Z</updated>

		<summary type="html">&lt;p&gt;StephM: Ajout des screen shots&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Auto Reminder module by Stéphane Mallet Informatique}}&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 minimum - PHP 7.1 minimum - Scheduled jobs module enabled&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&amp;amp;l=en&lt;br /&gt;
|note=Free module, GPLv3 license. Source code and zip: https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short description:&#039;&#039;&#039; Automatically sends invoices as soon as they are validated, and reminds unpaid invoices through configurable levels. One module, two automations, a single daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
==Automatic sending of validated invoices==&lt;br /&gt;
* Every validated invoice is emailed without any action, with its PDF attached.&lt;br /&gt;
* The email template is picked among the existing Dolibarr templates.&lt;br /&gt;
* Each invoice is sent only once: the module keeps track of it in the agenda.&lt;br /&gt;
* The recipient is resolved automatically: billing contact, then third party contact, then third party email.&lt;br /&gt;
&lt;br /&gt;
==Reminders for unpaid invoices==&lt;br /&gt;
* Reminders rely on levels you define: a delay in days and an email template for each level.&lt;br /&gt;
* Any number of levels.&lt;br /&gt;
* A negative delay sends the reminder &#039;&#039;&#039;before&#039;&#039;&#039; the due date, as a preventive notice.&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
* An invoice is never reminded twice for the same level.&lt;br /&gt;
* The delay is counted from the due date, or from the invoice date when no due date is set.&lt;br /&gt;
&lt;br /&gt;
==Excluding a customer or an invoice from reminders==&lt;br /&gt;
* An &amp;quot;Exclude from automatic reminders&amp;quot; checkbox is added on the &#039;&#039;&#039;third party card&#039;&#039;&#039;: this customer receives no reminder at all, while every other customer keeps being reminded.&lt;br /&gt;
* The same checkbox is added on the &#039;&#039;&#039;invoice card&#039;&#039;&#039;: useful for a disputed invoice or a negotiated payment schedule, without stopping the reminders of the other invoices of that customer.&lt;br /&gt;
* These exclusions only apply to reminders. The initial invoice sending is not affected.&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_exclude_thirdparty.png|thumb|center|700px|Third party card: tick &amp;quot;Exclure des relances automatiques&amp;quot; (Exclude from automatic reminders) and this customer is never reminded again. Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_exclude_invoice.png|thumb|center|700px|The same checkbox on the invoice card, to skip one single invoice without excluding the whole customer. Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* The module interface is translated into English, French, Spanish, German and Italian.&lt;br /&gt;
* Both automations are carried by a single daily scheduled job, created when the module is enabled.&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
* Dolibarr 19 or above.&lt;br /&gt;
* PHP 7.1 or above.&lt;br /&gt;
* The Dolibarr &#039;&#039;&#039;Scheduled jobs&#039;&#039;&#039; module enabled, and a system cron calling Dolibarr (on most shared hosting, this task has to be created in the hosting control panel). Without it, no automatic sending happens.&lt;br /&gt;
* A working email setup in Dolibarr (Home - Setup - Emails).&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{InstallModuleEn}}&lt;br /&gt;
&lt;br /&gt;
The zip is available for free on Dolistore: https://www.dolistore.com/product.php?id=2770&amp;amp;l=en&lt;br /&gt;
&lt;br /&gt;
The source code is public: https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleEn}}&lt;br /&gt;
&lt;br /&gt;
Once the module is enabled, its setup page allows you to:&lt;br /&gt;
* enable the automatic sending of validated invoices, and choose the email template used;&lt;br /&gt;
* enable the reminders, and decide whether partially paid invoices are concerned;&lt;br /&gt;
* create the reminder levels: for each level, a delay in days and an email template.&lt;br /&gt;
&lt;br /&gt;
With no level configured, no reminder is sent: the module says so on its setup page.&lt;br /&gt;
&lt;br /&gt;
[[File:AutoReminder_setup.png|thumb|center|700px|Setup page: automatic sending of validated invoices, reminders for unpaid invoices, and the list of reminder levels (here -1 and 6 days). Screenshot taken on a French installation.]]&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
There is nothing to do on a daily basis: the scheduled job takes care of the sendings.&lt;br /&gt;
&lt;br /&gt;
To stop reminding a customer, open the third party card, edit it, and tick &#039;&#039;&#039;Exclude from automatic reminders&#039;&#039;&#039;. To skip one specific invoice, tick the same checkbox on that invoice card.&lt;br /&gt;
&lt;br /&gt;
=Upgrade=&lt;br /&gt;
&lt;br /&gt;
Upload the new zip over the previous one (Home - Setup - Modules - Deploy external module), then &#039;&#039;&#039;disable and enable the module again&#039;&#039;&#039;. This last step is required for the new fields to be created. Since version 1.1.0, your settings and your reminder levels are kept during this operation.&lt;br /&gt;
&lt;br /&gt;
=Version history=&lt;br /&gt;
* &#039;&#039;&#039;1.1.1&#039;&#039;&#039;: module translated into Spanish, German and Italian.&lt;br /&gt;
* &#039;&#039;&#039;1.1.0&#039;&#039;&#039;: exclusion of reminders per third party and per invoice. Fix: settings are no longer lost when the module is disabled.&lt;br /&gt;
* &#039;&#039;&#039;1.0.0&#039;&#039;&#039;: initial release (automatic sending of validated invoices, reminders for unpaid invoices by levels).&lt;br /&gt;
&lt;br /&gt;
=Support=&lt;br /&gt;
&lt;br /&gt;
By email: contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:AutoReminder_exclude_thirdparty.png&amp;diff=66692</id>
		<title>File:AutoReminder exclude thirdparty.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:AutoReminder_exclude_thirdparty.png&amp;diff=66692"/>
		<updated>2026-07-16T22:34:29Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:AutoReminder_exclude_invoice.png&amp;diff=66691</id>
		<title>File:AutoReminder exclude invoice.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:AutoReminder_exclude_invoice.png&amp;diff=66691"/>
		<updated>2026-07-16T22:34:12Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:AutoReminder_setup.png&amp;diff=66690</id>
		<title>File:AutoReminder setup.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:AutoReminder_setup.png&amp;diff=66690"/>
		<updated>2026-07-16T22:33:33Z</updated>

		<summary type="html">&lt;p&gt;StephM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66689</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66689"/>
		<updated>2026-07-16T22:23:19Z</updated>

		<summary type="html">&lt;p&gt;StephM: Traduction en anglais&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Auto Reminder module by Stéphane Mallet Informatique}}&lt;br /&gt;
[[Category:Complementary modules]]&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
&lt;br /&gt;
=Information=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 minimum - PHP 7.1 minimum - Scheduled jobs module enabled&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&amp;amp;l=en&lt;br /&gt;
|note=Free module, GPLv3 license. Source code and zip: https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short description:&#039;&#039;&#039; Automatically sends invoices as soon as they are validated, and reminds unpaid invoices through configurable levels. One module, two automations, a single daily scheduled job.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
==Automatic sending of validated invoices==&lt;br /&gt;
* Every validated invoice is emailed without any action, with its PDF attached.&lt;br /&gt;
* The email template is picked among the existing Dolibarr templates.&lt;br /&gt;
* Each invoice is sent only once: the module keeps track of it in the agenda.&lt;br /&gt;
* The recipient is resolved automatically: billing contact, then third party contact, then third party email.&lt;br /&gt;
&lt;br /&gt;
==Reminders for unpaid invoices==&lt;br /&gt;
* Reminders rely on levels you define: a delay in days and an email template for each level.&lt;br /&gt;
* Any number of levels.&lt;br /&gt;
* A negative delay sends the reminder &#039;&#039;&#039;before&#039;&#039;&#039; the due date, as a preventive notice.&lt;br /&gt;
* Option to include or exclude partially paid invoices.&lt;br /&gt;
* An invoice is never reminded twice for the same level.&lt;br /&gt;
* The delay is counted from the due date, or from the invoice date when no due date is set.&lt;br /&gt;
&lt;br /&gt;
==Excluding a customer or an invoice from reminders==&lt;br /&gt;
* An &amp;quot;Exclude from automatic reminders&amp;quot; checkbox is added on the &#039;&#039;&#039;third party card&#039;&#039;&#039;: this customer receives no reminder at all, while every other customer keeps being reminded.&lt;br /&gt;
* The same checkbox is added on the &#039;&#039;&#039;invoice card&#039;&#039;&#039;: useful for a disputed invoice or a negotiated payment schedule, without stopping the reminders of the other invoices of that customer.&lt;br /&gt;
* These exclusions only apply to reminders. The initial invoice sending is not affected.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* The module interface is translated into English, French, Spanish, German and Italian.&lt;br /&gt;
* Both automations are carried by a single daily scheduled job, created when the module is enabled.&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
* Dolibarr 19 or above.&lt;br /&gt;
* PHP 7.1 or above.&lt;br /&gt;
* The Dolibarr &#039;&#039;&#039;Scheduled jobs&#039;&#039;&#039; module enabled, and a system cron calling Dolibarr (on most shared hosting, this task has to be created in the hosting control panel). Without it, no automatic sending happens.&lt;br /&gt;
* A working email setup in Dolibarr (Home - Setup - Emails).&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{InstallModuleEn}}&lt;br /&gt;
&lt;br /&gt;
The zip is available for free on Dolistore: https://www.dolistore.com/product.php?id=2770&amp;amp;l=en&lt;br /&gt;
&lt;br /&gt;
The source code is public: https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleEn}}&lt;br /&gt;
&lt;br /&gt;
Once the module is enabled, its setup page allows you to:&lt;br /&gt;
* enable the automatic sending of validated invoices, and choose the email template used;&lt;br /&gt;
* enable the reminders, and decide whether partially paid invoices are concerned;&lt;br /&gt;
* create the reminder levels: for each level, a delay in days and an email template.&lt;br /&gt;
&lt;br /&gt;
With no level configured, no reminder is sent: the module says so on its setup page.&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
There is nothing to do on a daily basis: the scheduled job takes care of the sendings.&lt;br /&gt;
&lt;br /&gt;
To stop reminding a customer, open the third party card, edit it, and tick &#039;&#039;&#039;Exclude from automatic reminders&#039;&#039;&#039;. To skip one specific invoice, tick the same checkbox on that invoice card.&lt;br /&gt;
&lt;br /&gt;
=Upgrade=&lt;br /&gt;
&lt;br /&gt;
Upload the new zip over the previous one (Home - Setup - Modules - Deploy external module), then &#039;&#039;&#039;disable and enable the module again&#039;&#039;&#039;. This last step is required for the new fields to be created. Since version 1.1.0, your settings and your reminder levels are kept during this operation.&lt;br /&gt;
&lt;br /&gt;
=Version history=&lt;br /&gt;
* &#039;&#039;&#039;1.1.1&#039;&#039;&#039;: module translated into Spanish, German and Italian.&lt;br /&gt;
* &#039;&#039;&#039;1.1.0&#039;&#039;&#039;: exclusion of reminders per third party and per invoice. Fix: settings are no longer lost when the module is disabled.&lt;br /&gt;
* &#039;&#039;&#039;1.0.0&#039;&#039;&#039;: initial release (automatic sending of validated invoices, reminders for unpaid invoices by levels).&lt;br /&gt;
&lt;br /&gt;
=Support=&lt;br /&gt;
&lt;br /&gt;
By email: contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66688</id>
		<title>Module Auto Reminder</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Auto_Reminder&amp;diff=66688"/>
		<updated>2026-07-16T22:13:28Z</updated>

		<summary type="html">&lt;p&gt;StephM: Création de la page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Auto Reminder module by Stéphane Mallet Informatique}}&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;br /&gt;
&lt;br /&gt;
=Informations=&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Auto Reminder&lt;br /&gt;
|editor=Stéphane Mallet Informatique&lt;br /&gt;
|web=https://web-pilot.fr/offres/rsi&lt;br /&gt;
|status=stable&lt;br /&gt;
|prerequisites=Dolibarr 19 minimum - PHP 7.1 minimum - Module Tâches planifiées activé&lt;br /&gt;
|webbuy=https://www.dolistore.com/product.php?id=2770&amp;amp;l=fr&lt;br /&gt;
|note=Module gratuit, licence GPLv3. Code source et zip : https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description courte :&#039;&#039;&#039; Envoie automatiquement les factures dès leur validation, et relance les factures impayées par paliers configurables. Un module, deux automatismes, une seule tâche planifiée quotidienne.&lt;br /&gt;
&lt;br /&gt;
=Fonctionnalités=&lt;br /&gt;
&lt;br /&gt;
==Envoi automatique des factures validées==&lt;br /&gt;
* Chaque facture validée part par email, sans intervention, avec son PDF en pièce jointe.&lt;br /&gt;
* Le modèle d&#039;email est choisi parmi les modèles Dolibarr existants.&lt;br /&gt;
* Chaque facture n&#039;est envoyée qu&#039;une seule fois : le module en garde la trace dans l&#039;agenda.&lt;br /&gt;
* Le destinataire est trouvé automatiquement : contact de facturation, sinon contact du tiers, sinon email du tiers.&lt;br /&gt;
&lt;br /&gt;
==Relance des factures impayées==&lt;br /&gt;
* Les relances reposent sur des paliers que vous définissez : un délai en jours et un modèle d&#039;email par palier.&lt;br /&gt;
* Le nombre de paliers est libre.&lt;br /&gt;
* Un délai négatif permet de relancer &#039;&#039;&#039;avant&#039;&#039;&#039; l&#039;échéance, en prévention.&lt;br /&gt;
* Option pour inclure ou non les factures partiellement payées.&lt;br /&gt;
* Une facture n&#039;est jamais relancée deux fois pour le même palier.&lt;br /&gt;
* Le délai se compte à partir de la date d&#039;échéance, ou de la date de facturation si l&#039;échéance est absente.&lt;br /&gt;
&lt;br /&gt;
==Exclure un client ou une facture des relances==&lt;br /&gt;
* Une case &amp;quot;Exclure des relances automatiques&amp;quot; est ajoutée sur la &#039;&#039;&#039;fiche tiers&#039;&#039;&#039; : ce client ne reçoit plus aucune relance, les autres continuent normalement.&lt;br /&gt;
* La même case est ajoutée sur la &#039;&#039;&#039;fiche facture&#039;&#039;&#039; : utile pour une facture en litige ou un échéancier négocié, sans couper les relances des autres factures du même client.&lt;br /&gt;
* Ces exclusions ne concernent que les relances. L&#039;envoi initial de la facture n&#039;est pas affecté.&lt;br /&gt;
&lt;br /&gt;
==Divers==&lt;br /&gt;
* Traduit en français, anglais, espagnol, allemand et italien.&lt;br /&gt;
* Les deux automatismes sont portés par une seule tâche planifiée quotidienne, créée à l&#039;activation du module.&lt;br /&gt;
&lt;br /&gt;
=Prérequis=&lt;br /&gt;
* Dolibarr 19 ou supérieur.&lt;br /&gt;
* PHP 7.1 ou supérieur.&lt;br /&gt;
* Le module &#039;&#039;&#039;Tâches planifiées&#039;&#039;&#039; de Dolibarr activé, et un cron système appelant Dolibarr (chez la plupart des hébergeurs mutualisés, cette tâche est à créer dans le panneau d&#039;administration de l&#039;hébergement). Sans cela, aucun envoi automatique n&#039;a lieu.&lt;br /&gt;
* Un envoi d&#039;emails fonctionnel dans Dolibarr (Accueil - Configuration - Emails).&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{InstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
Le zip est téléchargeable gratuitement sur le Dolistore : https://www.dolistore.com/product.php?id=2770&amp;amp;l=fr&lt;br /&gt;
&lt;br /&gt;
Le code source est public : https://framagit.org/Steph501/dolibarr-mod-autoreminder&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
Une fois le module activé, sa page de configuration permet de :&lt;br /&gt;
* activer l&#039;envoi automatique des factures validées, et choisir le modèle d&#039;email utilisé ;&lt;br /&gt;
* activer les relances, et décider si les factures partiellement payées sont concernées ;&lt;br /&gt;
* créer les paliers de relance : pour chaque palier, un délai en jours et un modèle d&#039;email.&lt;br /&gt;
&lt;br /&gt;
Sans aucun palier configuré, aucune relance n&#039;est envoyée : le module le signale sur sa page de configuration.&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Il n&#039;y a rien à faire au quotidien : la tâche planifiée s&#039;occupe des envois.&lt;br /&gt;
&lt;br /&gt;
Pour ne plus relancer un client, ouvrir sa fiche tiers, la modifier, et cocher &#039;&#039;&#039;Exclure des relances automatiques&#039;&#039;&#039;. Pour ne pas relancer une facture précise, cocher la même case sur la fiche de cette facture.&lt;br /&gt;
&lt;br /&gt;
=Mise à jour=&lt;br /&gt;
&lt;br /&gt;
Déposer le nouveau zip par-dessus l&#039;ancien (Accueil - Configuration - Modules - Déployer un module externe), puis &#039;&#039;&#039;désactiver et réactiver le module&#039;&#039;&#039;. Cette dernière étape est nécessaire pour que les nouveaux champs soient créés. Depuis la version 1.1.0, vos réglages et vos paliers sont conservés lors de cette opération.&lt;br /&gt;
&lt;br /&gt;
=Historique des versions=&lt;br /&gt;
* &#039;&#039;&#039;1.1.1&#039;&#039;&#039; : traduction du module en espagnol, allemand et italien.&lt;br /&gt;
* &#039;&#039;&#039;1.1.0&#039;&#039;&#039; : exclusion des relances par tiers et par facture. Correction : les réglages ne sont plus perdus lors d&#039;une désactivation du module.&lt;br /&gt;
* &#039;&#039;&#039;1.0.0&#039;&#039;&#039; : version initiale (envoi automatique des factures validées, relance des impayés par paliers).&lt;br /&gt;
&lt;br /&gt;
=Support=&lt;br /&gt;
&lt;br /&gt;
Par email : contact@stephane-mallet.fr&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Auto Reminder}}&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=65389</id>
		<title>List of modules id</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=65389"/>
		<updated>2026-02-14T18:34:16Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* ID 100000 - 499999 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateDocDevEs}}&lt;br /&gt;
{{TemplateDocDevFr}}&lt;br /&gt;
{{TemplateDocDevZh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page list all reserved modules numbers / ID.&lt;br /&gt;
&lt;br /&gt;
If you build or want to build your own modules, you should take an ID range here. Please pick range into existing holes first.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=ID 0 - 94999=&lt;br /&gt;
This range is reserved for Dolibarr&#039;s internal core modules, so all modules available into the standard distribution at https://github.com/Dolibarr/dolibarr&lt;br /&gt;
&lt;br /&gt;
=ID 95000 - 99999=&lt;br /&gt;
This range is reserved for Dolibarr&#039;s community modules with sources hosted into the github repository: https://github.com/Dolibarr/dolibarr-community-modules&lt;br /&gt;
&lt;br /&gt;
=ID 100000 - 499999=&lt;br /&gt;
&lt;br /&gt;
Reserved area for editors in need for an ID range. You can edit this page to add your own range (take a range of 20 numbers only the first time, ask us for more)&lt;br /&gt;
&lt;br /&gt;
[[File:Warning.png]] If you reserve more than 20 at once, we may automatically change your reservation range without information and you may experience conflicts with other modules in a future, so please follow the rules! &lt;br /&gt;
&lt;br /&gt;
*ID 100000 - 100999: OpenThink (http://www.openthink.be) - Belgium&lt;br /&gt;
*ID 101000 - 101999: DoliCloud (https://www.dolicloud.com) - France&lt;br /&gt;
*ID 102000 - 102999: Tiaris (http://www.tiaris.fr) - France&lt;br /&gt;
*ID 103000 - 103999: Open-concept.pro (http://www.open-concept.pro) - France&lt;br /&gt;
*ID 104000 - 104999: ATM Consulting (http://www.atm-consulting.fr) - France&lt;br /&gt;
*ID 105000 - 105999: GPC.solutions - France&lt;br /&gt;
*ID 106000 - 106999: PHPASSO&lt;br /&gt;
*ID 107000 - 107999: TecLib (http://www.teclib.com) / Auguria (http://www.auguria.net) - France&lt;br /&gt;
*ID 108000 - 108999: ETHICWEB&lt;br /&gt;
*ID 109000 - 109999: Aplose ([http://www.aplose.fr https://www.aplose.fr]) - France&lt;br /&gt;
*ID 110000 - 110999: Association Dolibarr (https://www.dolibarr.org)&lt;br /&gt;
*ID 111000 - 111999: Asset IT (www.assetit.ch) - Suisse&lt;br /&gt;
*ID 112000 - 112999: Aarboard AG (www.aarboard.ch) - Suisse&lt;br /&gt;
*ID 113000 - 113999: Asilib - Alexandre Spangaro&lt;br /&gt;
*ID 114000 - 114999: Iceleaf OÜ&lt;br /&gt;
*ID 115000 - 115999: 2A2C Conseil - Cyril ZEKSER&lt;br /&gt;
*ID 116000 - 116999: Wolftec GmbH&lt;br /&gt;
*ID 117000 - 117999: Oscim (http://www.oscim.fr)&lt;br /&gt;
*ID 118000 - 118999: Oarces Web (dev.oarces.com)&lt;br /&gt;
*ID 119000 - 119999: Manuel Berrocal - Absolacom&lt;br /&gt;
*ID 120000 - 120999: Régis Houssin (http://www.inodbox.com) - France&lt;br /&gt;
*ID 121000 - 121999: Oscss - Shop - France&lt;br /&gt;
*ID 122000 - 122999: MrSof - la Nation du Web&lt;br /&gt;
*ID 123000 - 123999: Bruno Généré (webiseasy.org)&lt;br /&gt;
*ID 124000 - 124999: 7reasons s.r.l. (www.7reasons.eu) - Austria&lt;br /&gt;
*ID 125000 - 125999: ProgSI (www.progsi.ma)&lt;br /&gt;
*ID 126000 - 126999: Catalanet&lt;br /&gt;
*ID 127000 - 127999: Virgilio Filho pt-BR Brasil (@dolibarr.br) - Brazil&lt;br /&gt;
*ID 128000 - 128999: Nicolas Frappé France (www.sospc.info)&lt;br /&gt;
*ID 129000 - 129999: Adeo-Informatique&lt;br /&gt;
*ID 130000 - 130999: Technicks ICT (http://www.technicks.eu) - Italy&lt;br /&gt;
*ID 131000 - 131999: Joan Louis (itaca.fr) - France&lt;br /&gt;
*ID 132000 - 132999: Jean-Marie Arsac (https://azimut.fr) - France&lt;br /&gt;
*ID 133000 - 133999: Oriel Systems Ltd, UK. (www.orielsystems.com)&lt;br /&gt;
*ID 134000 - 134999: ALSOFT PVT. LTD. (https://www.alsoft.org)&lt;br /&gt;
*ID 135000 - 135999: Net-Logic (https://netlogic.fr)&lt;br /&gt;
*ID 136000 - 136050: MONA.RE - France&lt;br /&gt;
*ID 136051 - 136099: La Vida Marketing&lt;br /&gt;
*ID 136100 - 136149: Synergies-Tech France. (https://www.synergies-france.fr/)&lt;br /&gt;
*ID 136150 - 136199: Lyta&lt;br /&gt;
*ID 136200 - 136219: Maison Théophile Leclerc&lt;br /&gt;
*ID 136220 - 136270: SegoFount - Spain&lt;br /&gt;
*ID 136271 - 136320: Labor Dispatch (Simon Sheng , China)&lt;br /&gt;
*ID 136321 - 136370: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 136371 - 136420: Daxit Solutions (https://www.daxit.be) [https://wiki.dolibarr.org/index.php/DAXIT-SOLUTIONS_List_of_modules_id Liste complète des modules Daxit]&lt;br /&gt;
*ID 136421 - 136470: HUSCH GmbH (https://husch-gmbh.de)&lt;br /&gt;
*ID 136471 - 138999: NSINFO (https://www.ns-info.fr)&lt;br /&gt;
*ID 139000 - 139999: Synergies-Tech France. (https://www.synergies-france.fr/)&lt;br /&gt;
*ID 140000 - 140999: Altairis (http://altairis.fr)&lt;br /&gt;
*ID 141000 - 141050: Projet2Team (https://www.projet2team.fr)&lt;br /&gt;
*ID 141051 - 141099: Elistair (http://elistair.com)&lt;br /&gt;
*ID 141100 - 141149: Blue Networks Technologies (https://www.blnt.fr)&lt;br /&gt;
*ID 141150 - 141199: Mainlab S.r.l. (https://www.mainlabonline.it) - Italy&lt;br /&gt;
*ID 141200 - 141249: Florian DUFOURG - France&lt;br /&gt;
*ID 141250 - 141299: SoftAddicts - Canada&lt;br /&gt;
*ID 141300 - 141349: Finanboo - (https://www.finanboo.com)&lt;br /&gt;
*ID 141350 - 141399: ConstruxZion Soft - Colombia (https://www.construxzionsoft.com.co)&lt;br /&gt;
*ID 141400 - 141450: COEXDIS - République Démocratique du Congo (https://www.coexdis.com)&lt;br /&gt;
*ID 141451 - 141501: HALFWARE - Algeria (https://www.half-ware.com)&lt;br /&gt;
*ID 141502 - 141552: Quantraum (https://quantraum.com)&lt;br /&gt;
*ID 141553 - 141603: Nateo Group&lt;br /&gt;
*ID 141604 - 141653: digital centric GmbH (https://www.digitalcentric.de/dolibarr)&lt;br /&gt;
*ID 141654 - 141699: Decrypting (https://www.decrypting.fr)&lt;br /&gt;
*ID 141700 - 141749: Zeise IT Consulting - Germany (https://www.zeise-it.de)&lt;br /&gt;
*ID 141750 - 141799: Data Rooster - France (https://datarooster.io)&lt;br /&gt;
*ID 141800 - 141849: IP Développement (https://www.ipdeveloppement.fr)&lt;br /&gt;
*ID 141850 - 141899: MSICCA | MRVL Soluciones de Ingeniería y Construcción, c.a (https://msicca.com)&lt;br /&gt;
*ID 141900 - 141949: THERSANE (https://www.thersane.fr)&lt;br /&gt;
*ID 141950 - 141999: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 142000 - 142049: ITANéA (https://www.itanea.fr)&lt;br /&gt;
*ID 142050 - 142099: ERP Consulting NZ ([https://www.erpconsulting.co.nz www.erpconsulting.co.nz])&lt;br /&gt;
*ID 142100 - 142149: Bloxera GmbH (https://www.bloxera.com)&lt;br /&gt;
*ID 142150 - 142199: Evangelos Souglakos - Greece&lt;br /&gt;
*ID 142200 - 142249: Luc CALARESU - France&lt;br /&gt;
*ID 142250 - 142299: OmnIT Services - Belgique (https://www.omnitservices.biz)&lt;br /&gt;
*ID 142300 - 142349: Gwadeyes - Guadeloupe (https://www.gwadeyes-informatique.com/)&lt;br /&gt;
*ID 142350 - 142399: Solution Libre (https://www.solution-libre.fr/)&lt;br /&gt;
*ID 142400 - 142449: Res Digital (https://res.digital)&lt;br /&gt;
*ID 142450 - 142499: itopie informatique (https://www.itopie.ch)&lt;br /&gt;
*ID 142500 - 142549: Weblinx.IT GbR (https://weblinx.it/) - Germany&lt;br /&gt;
*ID 142550 - 142599: ASCI-Automation - Mexico (https://asci-automation.com.mx/)&lt;br /&gt;
*ID 142600 - 142649: ZENKO Design - Japan / France / Spain&lt;br /&gt;
*ID 142650 - 142699: AWeerWolf&lt;br /&gt;
*ID 142700 - 148749: Lysis (https://lysis.net/)&lt;br /&gt;
*ID 142750 - 142799: Hadritech (https://www.hadritech.com/)&lt;br /&gt;
*ID 142800 - 142849: Bloxera GmbH (https://www.bloxera.com)&lt;br /&gt;
*ID 142850 - 148999: Everlats S.L. - España (https://www.everlats.com)&lt;br /&gt;
*ID 149000 - 149999: SydTech - America Central (https://www.sydtech.io/)&lt;br /&gt;
*ID 150000 - 150999: Jeffinfo&lt;br /&gt;
*ID 151000 - 151999: Konverseo (https://konverseo.com)&lt;br /&gt;
*ID 152000 - 152049: Tanguy Pénet (http://tanguype.net)&lt;br /&gt;
*ID 152050 - 152099: Web Solutions&lt;br /&gt;
*ID 152100 - 152149: MagicNet (https://www.magicnet.it)&lt;br /&gt;
*ID 152150 - 152199: Benjamin Falière (https://www.faliere.com)&lt;br /&gt;
*ID 152200 - 152249: Solauv&lt;br /&gt;
*ID 152250 - 156499: TecnoGestión Principado S.L. (https://www.tecnogestion.com) - Asturias - España&lt;br /&gt;
*ID 156500 - 156549: ACE Recycling  (https://www.acerecycling.net.au/)&lt;br /&gt;
*ID 156550 - 156599: Kreativität Works ([http://www.kreativitat.com http://kreativitat.com])&lt;br /&gt;
*ID 156600 - 156649: [https://pierre-couy.dev Pierre Couy]&lt;br /&gt;
*ID 156650 - 156699: CXI (https://cyrix.co.za)&lt;br /&gt;
*ID 156700 - 156749: Mustafa Kemerci - Turkiye&lt;br /&gt;
*ID 156750 - 156799: [https://de-grandpre.quebec de Grandpré Technologies] - Québec (Canada)&lt;br /&gt;
*ID 156800 - 156849: Draceo&lt;br /&gt;
*ID 156850 - 156899: Valleiweb&lt;br /&gt;
*ID 156900 - 159949: NEOVIAQ Advisory LU(https://www.neoviaq.com)&lt;br /&gt;
*ID 159950 - 159999: Arve et Giffre INFOGESTION (https://www.ag-infogestion.fr)&lt;br /&gt;
*ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&lt;br /&gt;
*ID 161000 - 161999: Abbes Bahfir (https://01consulting.eu)&lt;br /&gt;
*ID 162000 - 162999: Jacques Rébiscoul&lt;br /&gt;
*ID 163000 - 163999: Open-DSI (https://www.open-dsi.fr)&lt;br /&gt;
*ID 164000 - 164999: Pixelada S. Coop. And. (https://pixelada.org)&lt;br /&gt;
*ID 165000 - 165049: DovConnect&lt;br /&gt;
*ID 165050 - 165099: Mind Operated Systems (https://www.mosystems.biz)&lt;br /&gt;
*ID 165100 - 165150: SD-Formation (https://sdformation.fr)&lt;br /&gt;
*ID 165151 - 165199: NUM&#039;X (https://www.numx-sets.eu)&lt;br /&gt;
*ID 165200 - 165249: Benjam Préjent (https://www.benjam-prejent.fr)&lt;br /&gt;
*ID 165250 - 165299: Dhi Loka Private Limited, India (https://www.dhiloka.com)&lt;br /&gt;
*ID 165300 - 169999: Accellier Limited (https://www.accellier.com/)&lt;br /&gt;
*ID 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
*ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
*ID 172000 - 172299: Ray Soft-Systems (https://www.ray-soft-systems.com)&lt;br /&gt;
*ID 172300 - 172349: Günter Lukas Consulting (https://gl.co.at)&lt;br /&gt;
*ID 172350 - 172399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 172400 - 172449: Professional Structures Limited (https://pstructures.com)&lt;br /&gt;
*ID 172450 - 172699: IT-BS (https://www.it-bs.fr)&lt;br /&gt;
*ID 172700 - 172749: Indelog (https://www.indelog.fr)&lt;br /&gt;
*ID 172750 - 172799: NSINFO (https://www.ns-info.fr)&lt;br /&gt;
*ID 172800 - 172849: E-Concept Applications (https://e-concept-applications.fr)&lt;br /&gt;
*ID 172850 - 172899: B&amp;amp;R Stamm UG (https://stamm-ug.de)&lt;br /&gt;
*ID 172900 - 172949: Dolipive, support@dolipive.fr, www.dolipive.fr&lt;br /&gt;
*ID 172950 - 172999: CKD-Industrie (https://ckd-industrie.com/) - France&lt;br /&gt;
*ID 173000 - 173049: Aneosys (https://aneosys.fr) - France&lt;br /&gt;
*ID 173050 - 173099: Sebastian Schloßer - Germany&lt;br /&gt;
*ID 173100 - 173149: TecnoSoluciones (https://tecnosoluciones.com)&lt;br /&gt;
*ID 173150 - 173199: Digitalworks (https://www.digitalworks.fr) - France&lt;br /&gt;
*ID 173200 - 173249: UNi.D Consulting (https://www.unid-consulting.fr) - France&lt;br /&gt;
*ID 173250 - 173299: NetworkDigital(https://www.networkdigital.fr) - France&lt;br /&gt;
*ID 173300 - 173300: Módulo VeriFactu Dolibarr (https://verifactudolibarr.es/) - España&lt;br /&gt;
*ID 173301 - 173320: Sibanet (https://sibanet.net) - España&lt;br /&gt;
*ID 173321 - 173340: disQutons (https://wiki.dolibarr.org/index.php/Category:DisQutons)&lt;br /&gt;
*ID 173341 - 173360: Surática Software (https://suratica.es) - Spain&lt;br /&gt;
*ID 173361 - 173380: UpInvoice (https://upinvoice.eu) - Spain&lt;br /&gt;
*ID 173381 - 179999: Toutatis (https://toutatis.eu)&lt;br /&gt;
*ID 180000 - 180999: BM eXpert Labs&lt;br /&gt;
*ID 181000 - 181999: TI Sin Problemas (https://www.tisinproblemas.com)&lt;br /&gt;
*ID 182000 - 182049: Chipserv Pawel Wlizlo (https://www.testware.it)&lt;br /&gt;
*ID 182050 - 182070: Herolapse (https://herolapse.com/)&lt;br /&gt;
*ID 182061 - 182999: TMC&lt;br /&gt;
*ID 183000 - 183999: BB2A Anthony Berton (https://www.bb2a.fr)&lt;br /&gt;
*ID 184000 - 184999: DPS PRINTING &amp;amp; DOCUMENTS SOCIEDAD ANONIMA (https://www.dps-lat.com)&lt;br /&gt;
*ID 185000 - 185049: Telioskour (https://github.com/telioskour)&lt;br /&gt;
*ID 185050 - 185099: Moko Consulting ([[Moko Consulting]] || https://mokoconsulting.tech)&lt;br /&gt;
*ID 185100 - 185149: Sinabe (https://sinabe.ch) - Suisse&lt;br /&gt;
*ID 185150 - 185169: Anatole Conseil (https://anatoleconseil.com/)&lt;br /&gt;
*ID 185170 - 185189: cferoiu&lt;br /&gt;
*ID 185190 - 185209: Guillemonde (https://guillemonde.family)&lt;br /&gt;
*ID 185210 - 185229: ITized - Finta Ionut (https://itized.com)&lt;br /&gt;
*ID 185230 - 185249: svewa (https://github.com/svewa/)&lt;br /&gt;
*ID 185250 - 185269: Clément Jaunay (https://clement-jny.fr/ || contact@clement-jny.fr)&lt;br /&gt;
*ID 185270 - 185289: AMB Technologies (https://www.ambts.fr)&lt;br /&gt;
*ID 185290 - 185299: VIOLET IT UG (https://violet-it.de)&lt;br /&gt;
*ID 185300 - 185319: lorem.site &#039;&#039;&#039;(&#039;&#039;&#039;https://lorem.site/&#039;&#039;&#039;)&#039;&#039;&#039;&lt;br /&gt;
*ID 185320 - 185340: &#039;&#039;&#039;Rentageek  (https://rentageek.hu) Hungary&#039;&#039;&#039;&lt;br /&gt;
*ID 185341 - 189999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 190000 - 190999: Diciannove (http://19.coop)&lt;br /&gt;
*ID 191000 - 191999: Elonet (https://elonet.fr)&lt;br /&gt;
*ID 192000 - 192049: IDFOR Consulting (https://www.idfor-consulting.fr/)&lt;br /&gt;
*ID 192050 - 192069: Stogger (&amp;lt;nowiki&amp;gt;https://stogger.com&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 192070 - 192090: Protectora&lt;br /&gt;
*ID 192091 - 192110: CoopCircuits - OpenFoodNetwork (https://coopcircuits.fr/)&lt;br /&gt;
*ID 192111 - 198999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 199000 - 199999: RFMS&lt;br /&gt;
*ID 200000 - 200999: Noxiome&lt;br /&gt;
*ID 201000 - 201999: Sasa Ostrouska (saxa)&lt;br /&gt;
*ID 202000 - 202999: Z-Application&lt;br /&gt;
*ID 203000 - 203099: Elidee - elidee.com&lt;br /&gt;
*ID 203100 - 203999: Garcia MICHEL (soamichel.fr)&lt;br /&gt;
*ID 204000 - 204999: Ari Elbaz elarifr - accedinfo.com&lt;br /&gt;
*ID 205000 - 205999: Kreiz IT&lt;br /&gt;
*ID 206000 - 206999: GBINFO (www.gbinfo.fr)&lt;br /&gt;
*ID 207000 - 207099: MacroProg (https://www.macroprog.com)&lt;br /&gt;
*ID 207100 - 207149: Reactiva Software&lt;br /&gt;
*ID 207150 - 207199: Ndejje University Water Research and Development Centre ([https://github.com/NDUWRDC/LIMS/])&lt;br /&gt;
*ID 207200 - 207299: Massaoud Bouzenad ([https://www.dzprod.net dzprod.net])&lt;br /&gt;
*ID 207300 - 207349: Ksar&lt;br /&gt;
*ID 207350 - 207399: Easylinux (www.easylinux.fr)&lt;br /&gt;
*ID 207400 - 207449: Arthur LENOBLE&lt;br /&gt;
*ID 207450 - 207499: Vaicop SAS de CV (México)&lt;br /&gt;
*ID 207500 - 207520: Frankie Wong - UK&lt;br /&gt;
*ID 207521 - 207540: Fyssec ([https://fyssec.fr/ fyssec.fr/])&lt;br /&gt;
*ID 207521 - 212099: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 212100 - 212149: Audio Vidéo Technologies (https://www.avtek.fr)&lt;br /&gt;
*ID 212150 - 212169: &#039;&#039;&#039;AI MYA GROUP ([https://Www.AI-MYA-GROUP.com www.AI-MYA-GROUP.com])&#039;&#039;&#039;&lt;br /&gt;
*ID 212170 - 213999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 214000 - 214049: X-Boss&lt;br /&gt;
*ID 214050 - 221999: PixelJM&lt;br /&gt;
*ID 220000 - 220050: Apex Tech (https://apextechmods.com)&lt;br /&gt;
*ID 220051 - 220100: Technology Xchange Solutions (https://www.txscorp.com)&lt;br /&gt;
*ID 222000 - 222999:  dolibit  (https://www.dolibit.de)&lt;br /&gt;
*ID 223000 - 223049: Tráfico Canada&lt;br /&gt;
*ID 223050 - 223099: VLTN (https://vltn.sh)&lt;br /&gt;
*ID 223100 - 229949: Dazax.io (https://www.dazax.io)&lt;br /&gt;
*ID 229950 - 229999: Solucions Informàtiques, Serveis i Innovació SLU (https://6innova.es)&lt;br /&gt;
*ID 230000 - 230049: Unareil (https://www.unareil.eu)&lt;br /&gt;
*ID 230050 - 230099: Lyra Network (https://www.lyra.com/)&lt;br /&gt;
*ID 230100 - 230149: Gheorghe Iftimi - CTW - RO&lt;br /&gt;
*ID 230150 - 230199: MEMA Machinery &amp;amp; Tools (https://www.mema.be)&lt;br /&gt;
*ID 230200 - 230249: Teleassist&lt;br /&gt;
*ID 230250 - 230299: Nh Developer&lt;br /&gt;
*ID 230300 - 230499: Chickenforce/code-chicken, IT Services Hahn (https://github.com/code-chicken [http://itservices-hahn.de/ https://itservices-hahn.de])&lt;br /&gt;
*ID 230500 - 230549: Hidup Consulting (https://consulting.hidup.io)&lt;br /&gt;
*ID 230550 - 230599: CMR Conseil (https://www.weblockup.fr)&lt;br /&gt;
*ID 230600 - 230649: aFreeMind Studio&lt;br /&gt;
*ID 230650 - 230699: Unideal (https://www.uni-deal.com)&lt;br /&gt;
*ID 230700 - 230749: DevLansdes (https://devlandes.com/)&lt;br /&gt;
*ID 230750 - 262699: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 262700 - 262799: Scopen (https://www.scopen.fr)&lt;br /&gt;
*ID 262800 - 262849: Christophe BATTAREL EI&lt;br /&gt;
*ID 262850 - 271799: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 271800 - 271849: bee solutions sàrl (Switzerland)&lt;br /&gt;
*ID 271850 - 272999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 273000 - 273019: Taler (https://taler.net)&lt;br /&gt;
*ID 273020 - 274199: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 274200 - 274249: Mathilde MAROCCO (https://mminformatique.fr)&lt;br /&gt;
*ID 274250 - 274299: Nerv Project (www.nerv-project.eu)&lt;br /&gt;
*ID 274300 - 274349: Knowhere Consulting S.L. (https://www.knowhere-consulting.eu)&lt;br /&gt;
*ID 274350 - 274399: Milen karaganski (https://blacktiehost.com)&lt;br /&gt;
*ID 274400 - 274449: Vincent MAURY ([https://www.timgroup.fr www.timgroup.fr])&lt;br /&gt;
*ID 274450 - 274499: Daraelmin&lt;br /&gt;
*ID 274500 - 274549: Emilie LAFORET (http://www.ermvallon.com)&lt;br /&gt;
*ID 274550 - 278999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 279000 - 279049: VSDigital Electronics (https://vsdigital.ar) - Argentina&lt;br /&gt;
*ID 279050 - 279999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 280000 - 280049: Bingroup (https://www.beinng.com)&lt;br /&gt;
*ID 280050 - 280099: Medialta (https://medialta.com)&lt;br /&gt;
*ID 280100 - 280149: Cédric Ancelin - Ancode (https://www.dolistore.com/fr/recherche?search_query=ancode)&lt;br /&gt;
*ID 280150 - 289999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 290000 - 290099: BNS - Project doliBRA ([https://www.beinng.com https://www.bns.net.br]) - Brasil&lt;br /&gt;
*ID 290100 - 299999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 300000 - 300049: RapidProgress (https://www.rapidprogress.eu) - Bulgaria&lt;br /&gt;
*ID 300050 - 300099: M@ Solution (https://www.ma-solution.fr/)&lt;br /&gt;
*ID 300100 - 300149: LAVA RUN (https://www.lavarun.re)&lt;br /&gt;
*ID 300150 - 300199: PsyCrow Code&lt;br /&gt;
*ID 300200 - 300249: Computences (https://www.computences.com/)&lt;br /&gt;
*ID 300250 - 300299: LEVEL IT (https://levelit.com.ar)&lt;br /&gt;
*ID 300300 - 300349: Progiseize (https://progiseize.fr)&lt;br /&gt;
*ID 300350 - 300399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 300400 - 300449: Anouar Touati&lt;br /&gt;
*ID 300450 - 300499: Martin Danger&lt;br /&gt;
*ID 300500 - 301499: Whale Blows&lt;br /&gt;
*ID 301500 - 301549: Tom Trust - International&lt;br /&gt;
*ID 301550 - 301599: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 301600 - 302479: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 302480 - 302499: akyras (https://akyras.fr)&lt;br /&gt;
*ID 302500 - 302549: Diamubi (https://diamubi.com)&lt;br /&gt;
*ID 302550 - 302599: Datolab (https://www.datolab.com)&lt;br /&gt;
*ID 302600 - 302649: DuMaCo (https://www.dumaco.de)&lt;br /&gt;
*ID 302650 - 302699: Resilio SA&lt;br /&gt;
*ID 302700 - 302749: Aroga&lt;br /&gt;
*ID 302750 - 302799: Productivix (https://www.productivix.com)&lt;br /&gt;
*ID 302800 - 302849: Slibzz&lt;br /&gt;
*ID 302850 - 302899: idea design (https://ideadesign.dz)&lt;br /&gt;
*ID 302900 - 302949: AL MISBAH INFORMATIQUE (https://www.almisbah.ma)&lt;br /&gt;
*ID 302950 - 302999: Atis Solutions - France&lt;br /&gt;
*ID 303000 - 303499: Obixav - Nigeria&lt;br /&gt;
*ID 303500 - 303549: buschler plus GmbH, Germany (https://buschler.plus)&lt;br /&gt;
*ID 303550 - 303599: Prestalidaire - France (https://prestalidaire.com)&lt;br /&gt;
*ID 303600 - 309999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 310000 - 310049: Neilson Dufour (&amp;lt;nowiki&amp;gt;https://hypercode.ca&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 310050 - 313999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 314000 - 314049: Ruemmler IT Solutions (https://www.ruemmler.net)&lt;br /&gt;
*ID 314050 - 314149: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 314150 - 314199: Benoît PASCAL&lt;br /&gt;
*ID 314200 - 319999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 320000 - 320999: Novus Studios (www.novusstudios.it)&lt;br /&gt;
*ID 321000 - 321999: AtooNet (http://www.atoo-net.com)&lt;br /&gt;
*ID 322000 - 322049: Doymer Consultores&lt;br /&gt;
*ID 322050 - 329999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 330000 - 330049: XTEC Industries (www.xtec-ind.com)&lt;br /&gt;
*ID 330050 - 330099: 10100 S.R.L. - (www.10100.to)&lt;br /&gt;
*ID 330100 - 330149: AES Dana SRL (https://aes-dana.be)&lt;br /&gt;
*ID 330150 - 330199: Freshcore (https://www.freshcore.fr)&lt;br /&gt;
*ID 330200 - 331999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 332000 - 332099: Gecka (https://gecka.nc)&lt;br /&gt;
*ID 332100 - 332149: Agence Milkshake (http://agencemilkshake.com)&lt;br /&gt;
*ID 332150 - 332199: Daniel Prowald IT – Service (https://prowald-it.de)&lt;br /&gt;
*ID 332200 - 332249: UNITICE (https://unitice.com)&lt;br /&gt;
*ID 332250 - 332299: Sidonie Moulart&lt;br /&gt;
*ID 332300 - 332349: LTDJ (Antonin MARCHAL - Le Temple du Jeu)&lt;br /&gt;
*ID 332350 - 333299: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 333300 - 333349: Sense Africa (http://sense.africa)&lt;br /&gt;
*ID 333350 - 339999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 340000 - 340049: M34D (https://m34d.com)&lt;br /&gt;
*ID 340050 - 340069: WiwIT&lt;br /&gt;
*ID 340070 - 349999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 350000 - 350049: SOUNDOU &amp;amp; MIDAS (https://www.soundou.org/)&lt;br /&gt;
*ID 350050 - 350099: Ildefonso González (https://igontek.es)&lt;br /&gt;
*ID 350100 - 350149: 7Kas Servicios de Internet, S.L. (https://7kas.com)&lt;br /&gt;
*ID 350150 - 350999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 351000 - 351049: P&#039;tite Tête (https://ptitetete.com) - France&lt;br /&gt;
*ID 351050 - 398999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 359000 - 359049: Milen Karaganski0&lt;br /&gt;
*ID 400000 - 400999: 2byte.es (http://www.2byte.es)&lt;br /&gt;
*ID 401000 - 401999: B&amp;amp;D Informática&lt;br /&gt;
*ID 402000 - 402999: Marcos García de La Fuente (marcosgdf)&lt;br /&gt;
*ID 403000 - 403999: Sergibyte&lt;br /&gt;
*ID 404000 - 404999: Aikhan&lt;br /&gt;
*ID 405000 - 405999: AIME (http://www.aime.mx)&lt;br /&gt;
*ID 406000 - 406999: Som Núvol (https://somnuvol.coop)&lt;br /&gt;
*ID 407000 - 407019: I-Motion SARL&lt;br /&gt;
*ID 407020 - 408999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 409000 - 409999: LliureTIC (https://www.lliuretic.cat)&lt;br /&gt;
*ID 410000 - 410999: DoliGov&lt;br /&gt;
*ID 411000 - 411049: GATTEK SARL (https://www.ga-ttek.com)&lt;br /&gt;
*ID 411050 - 419999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 420000 - 420099: BBS Concept&lt;br /&gt;
*ID 420100 - 420199: LeMousticProduction (www.lemousticproduction.info) -&amp;lt; module DoliRH&lt;br /&gt;
*ID 420200 - 421199: VatCheck (www.abnc.be)&lt;br /&gt;
*ID 421200 - 422199: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 422200 - 422999: Artaban (http://artaban.fr)&lt;br /&gt;
*ID 423000 - 423049: cyberesprit&lt;br /&gt;
*ID 423050 - 423099: R.Bossard&lt;br /&gt;
*ID 423100 - 423199: Joliciel (www.joliciel.fr)&lt;br /&gt;
*ID 423200 - 423299: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 423299 - 423999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 424000 - 424049: Philazerty ([https://www.philazerty.fr www.philazerty.fr])&lt;br /&gt;
*ID 424050 - 424099: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 424100 - 424149: Ohoo Solutions (http://www.ohoosolutions.com)&lt;br /&gt;
*ID 424150 - 424199: DAGARCAM Informática (https://www.dagarcam.com/)&lt;br /&gt;
*ID 424200 - 424999: Lab51 (https://github.com/lab51org)&lt;br /&gt;
*ID 425000 - 425999: Sébastien SERRE Thivinfo (www.thivinfo.com)&lt;br /&gt;
*ID 426000 - 426099: Arkesis-Solution&lt;br /&gt;
*ID 426100 - 426149: GetLandy (www.getlandy.com)&lt;br /&gt;
*ID 426150 - 426649: OOB Software&lt;br /&gt;
*ID 426650 - 426849: Soft-Task Serviços e Sistemas (www.soft-task.com.br)&lt;br /&gt;
*ID 426850 - 426999: Bruno Caldas (https://github.com/BCaldas)&lt;br /&gt;
*ID 427000 - 427999: Kevin GUERRIER (alias xcl.saian)&lt;br /&gt;
*ID 428000 - 428099: af83&lt;br /&gt;
*ID 428100 - 428199: Arnaud Serrut - Adalon&lt;br /&gt;
*ID 428200 - 428249: imschweiler consulting (http://www.imschweiler-consulting.de&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;)&lt;br /&gt;
*ID 428250 - 428299: AL1FO&lt;br /&gt;
*ID 428300 - 428349: Federico García-Patiño Barbolani (&amp;lt;federico.garcia.patino@gmail.com&amp;gt;)&lt;br /&gt;
*ID 428350 - 428399: INTM Groupe - France (www.intm.com)&lt;br /&gt;
*ID 428400 - 428449: Nick Fragoulis - Greece&lt;br /&gt;
*ID 428450 - 428499: Kontava - France ([https://kontava.fr kontava.fr)]&lt;br /&gt;
*ID 428500 - 428549: hkwhitten - USA&lt;br /&gt;
*ID 428550 - 428999: SmartOne&lt;br /&gt;
*ID 429000 - 429999: induslab&lt;br /&gt;
*ID 430000 - 430099: Mixity sprl (www.mixity.be)&lt;br /&gt;
*ID 430100 - 430199: sgiraud&lt;br /&gt;
*ID 430200 - 430299: Merlion TI (www.merlion-si.com.br)&lt;br /&gt;
*ID 430300 - 431299: Libre Expert (www.libre-expert.com)&lt;br /&gt;
*ID 431300 - 431399: ptibogxiv (www.ptibogxiv.net)&lt;br /&gt;
*ID 431400 - 431499: Befox (www.befox.fr)&lt;br /&gt;
*ID 431500 - 431599: rue Béjo (www.ruebejo.fr)&lt;br /&gt;
*ID 431600 - 431699: Avizzeo (www.avizzeo.com)&lt;br /&gt;
*ID 431700 - 432199: Multisistemas (www.multisistemas.com.sv)&lt;br /&gt;
*ID 432200 - 432399: Burbuja - Chile (www.burbuja.cl)&lt;br /&gt;
*ID 432400 - 433399: INOVEA CONSEIL (https://www.inovea-conseil.com)&lt;br /&gt;
*ID 433400 - 434399: Rachid HRICH - Maroc (HricH ServiceS.)&lt;br /&gt;
*ID 434400 - 435399: Lance Bleakley - LanceIT (www.lanceit.net)&lt;br /&gt;
*ID 435400 - 435419: Victorien LOS - France&lt;br /&gt;
*ID 435420 - 435999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 436000 - 436099: SOWEBIO (www.soweb.io)&lt;br /&gt;
*ID 436100 - 436199: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
*ID 436200 - 436300: TDE-INFORMATIQUE (www.tde-informatique.fr)&lt;br /&gt;
*ID 436301 - 436349: Evarisk ([https://www.evarisk.com/id-module-dolibarr/ www.evarisk.com])&lt;br /&gt;
*ID 436350 - 436399: Eoxia ([https://www.eoxia.com/dolibarr/modules/ www.eoxia.com])&lt;br /&gt;
*ID 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&lt;br /&gt;
*ID 437400 - 437449: Martin Neubauer - Germany&lt;br /&gt;
*ID 437450 - 437599: Club1click (www.club1click.es)&lt;br /&gt;
*ID 437600 - 437629: Coulon Vincent (https://github.com/HoverEpic)&lt;br /&gt;
*ID 437630 - 437649: Aytechnet (https://www.aytechnet.fr/) - François Pons&lt;br /&gt;
*ID 437650 - 437699: LibreMaster (https://libremaster.com) - Christophe T.&lt;br /&gt;
*ID 437700 - 437749: STELLAR Broadband (https://www.stellarbb.com) - U.S.A. - Philip Laycock&lt;br /&gt;
*ID 437750 - 437799: DIGITA.LU Ajous Solutions&lt;br /&gt;
*ID 437800 - 437850: iProspective (https://iprospective.fr) - Mathieu Moulin&lt;br /&gt;
*ID 437851 - 437900: Theobald Groupe.&lt;br /&gt;
*ID 437901 - 437950: Neuronnexion (http://neuronnexion.coop)&lt;br /&gt;
*ID 437951 - 437952: jmbc - APIA-ASSO (https://www.apia-asso.fr)&lt;br /&gt;
*ID 437953 - 438002: IPCZEN SARL (https://www.ipczeninformatique.fr/)&lt;br /&gt;
*ID 438003 - 438052: FESF IT Department (https://fesf.org.pk)&lt;br /&gt;
*ID 438053 - 438103: Pilot Engineering team&lt;br /&gt;
*ID 438104 - 438153: u2042 (https://u2042.com)&lt;br /&gt;
*ID 438154 - 438204: Djair E Pereira (ocultooooo@gmail.com) - Brasil&lt;br /&gt;
*ID 438205 - 438255: yoandm (https://yoandm.com)&lt;br /&gt;
*ID 438256 - 438299: PTMSoft (&amp;lt;nowiki&amp;gt;https://www.ptmsoft.fr&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 438300 - 438399: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 438400 - 439399: Tetras Libre - France - Développement logiciels libres (www.tetras-libre.fr)&lt;br /&gt;
*ID 439400 - 440399: Dolibarr-pro - France - Développement Dolibarr (www.dolibarr-pro.com)&lt;br /&gt;
*ID 440400 - 441399: Quidlab Co., Ltd - Thailand - ( www.quidlab.com )&lt;br /&gt;
*ID 441400 - 442399: Ide@log - France - (https://www.idealog-info.net) - Laurent Leblanc&lt;br /&gt;
*ID 442400 - 443399: Valerio Bianchi (www.valeriobianchi.com)&lt;br /&gt;
*ID 443400 - 444399: delassalle - France - (www.delassalle.fr) - Joseph Delassalle&lt;br /&gt;
*ID 444400 - 445399: Webartis - Maroc - (www.webartis.net) - François Dry&lt;br /&gt;
*ID 445400 - 445499: SCOP Au-delà des nuages - France&lt;br /&gt;
*ID 445500 - 445549: X Net Systems - Egypt - (https://www.xneteg.com)&lt;br /&gt;
*ID 445550 - 445569: Schiefer.IT - Austria ([https://schiefer.it schiefer.it])&lt;br /&gt;
*ID 445570 - 445999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 446000 - 446999: iouston (http://www.iouston.com) - France - Julien Marchand&lt;br /&gt;
*ID 447000 - 447999: rSanjoSEO - Rafael San José Tovar (www.rsanjoseo.com) - Spain&lt;br /&gt;
*ID 448000 - 448999: Code 42 (www.code42.fr)&lt;br /&gt;
*ID 449000 - 449999: TakePOS (www.takepos.com)&lt;br /&gt;
*ID 450000 - 450999: Pierre ARDOIN&lt;br /&gt;
*ID 451000 - 451999: Éditeur depordi.fr&lt;br /&gt;
*ID 452000 - 452999: Dylan NAKONG&lt;br /&gt;
*ID 453000 - 453999: Menahd Ouchenir - France - menahd-ouchenir.com&lt;br /&gt;
*ID 454000 - 454999: Withheld - Canada&lt;br /&gt;
*ID 455000 - 455999: Gaëtan MAISON - Info Libre @ Dom - France (https://www.infolibreadom.com)&lt;br /&gt;
*ID 456000 - 456999: Laurent LEBLEU - B.L.C. - Blue Line Company - Lille - France (www.bluelinecompany.fr/dolibarr)&lt;br /&gt;
*ID 457000 - 457999: Sébastien BOUCHER&lt;br /&gt;
*ID 458000 - 458999: Lester HERNÁNDEZ - Argentina - (freelancerlrhd@gmail.com)&lt;br /&gt;
*ID 459000 - 459999: Infopen - France&lt;br /&gt;
*ID 460000 - 460049: torvista - Spain&lt;br /&gt;
*ID 460050 - 460099: ADVAISION.com (Belgique www.advaision.com)&lt;br /&gt;
*ID 460100 - 460999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 461000 - 461999: MEGALOGI - Maroc (www.erpcloud.ma)&lt;br /&gt;
*ID 462000 - 462999: Making Digital (www.making-digital.fr) - France&lt;br /&gt;
*ID 463000 - 463999: linx s.r.l.s.&lt;br /&gt;
*ID 464000 - 464999: NimbleCubed Inc. (www.nimblecubed.com)&lt;br /&gt;
*ID 465000 - 465999: Artefacts (www.artefacts.coop) - Pascal Daugeron&lt;br /&gt;
*ID 466000 - 466999: CDM Consultores - (www.cdm.guru)&lt;br /&gt;
*ID 467000 - 467999: M71 Service GmbH - (www.m71-service.de)&lt;br /&gt;
*ID 468000 - 468049: Clément Segonzac - France (clement.segonzac@gmail.com)&lt;br /&gt;
*ID 468050 - 468099: Flavien Belli - France (https://github.com/Marshlyin || belliflaviencontactpro@gmail.com)&lt;br /&gt;
*ID 468100 - 468119: Chl (https://code.bugness.org/Dolibarr)&lt;br /&gt;
*ID 468120 - 468169: Commotron GmbH (https://www.commotron.com/)&lt;br /&gt;
*ID 468170 - 468219: Infans Group (franck.lauby@infans.fr)&lt;br /&gt;
*ID 468175 - 468199: Gaëlle Rauffet - France (kiwiscan.net)&lt;br /&gt;
*ID 468200 - 468249: Paulo Oliveira - Brasil (paulorcdo@gmail.com)&lt;br /&gt;
*ID 468250 - 468269: CD-Systems - France (https://www.cd-systems.fr)&lt;br /&gt;
*ID 468270 - 468299: Nicolas Testori&lt;br /&gt;
*ID 468300 - 468349: Uvensys - Germany (https://uvensys.de)&lt;br /&gt;
*ID 468350 - 468399: Laudeco - Belgium (http://github.com/laudeco)&lt;br /&gt;
*ID 468400 - 468449: Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 468450 - 468499: Mehdi Belkhayat - Maroc (https://opensi.ma)&lt;br /&gt;
*ID 468500 - 468599: InvIT GmbH - Germany (https://invit.sh)&lt;br /&gt;
*ID 468600 - 468649: Ricardo Sequeira - Portugal (https://ricardo-sequeira.com)&lt;br /&gt;
*ID 468650 - 468699: J-IT - Belgique (https://www.j-it.be)&lt;br /&gt;
*ID 468700 - 468749: Fidesio - France (https://www.fidesio.com/)&lt;br /&gt;
*ID 468750 - 468799: Sgestion - Spain (http://www.sgestion.net/)&lt;br /&gt;
*ID 468800 - 468849: Denis JULIEN - Brasil (matrinxa@free.fr)&lt;br /&gt;
*ID 468850 - 468899: Mmariko - Module GED - Effios&lt;br /&gt;
*ID 468900 - 468949: Maazou Amadou Abdoul aziz - Maroc (yaronfada@gmail.com)&lt;br /&gt;
*ID 468950 - 468999: Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 469000 - 469049: John Livingston (https://github.com/JohnXLivingston/)&lt;br /&gt;
*ID 469050 - 469099: Macrorom ICT-services (https://macrorom.nl/)&lt;br /&gt;
*ID 469100 - 469149: HABOT IT - France (https://habot.it)&lt;br /&gt;
*ID 469150 - 469159: CaribbeanConsult.Com CCC - France Guadeloupe (https://dolibarr.ccc.gp)&lt;br /&gt;
*ID 469160 - 469171: GMBG - Portugal&lt;br /&gt;
*ID 469172 - 469199: BGi Lda - Portugal&lt;br /&gt;
*ID 469200 - 469949: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 469950 - 469999: Goldoweb (http://goldoweb.com)&lt;br /&gt;
*ID 470000 - 470999: Reindeer Digital (https://rdeer.cz)&lt;br /&gt;
*ID 471000 - 471099: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
*ID 471100 - 471199: M. Morillon&lt;br /&gt;
*ID 471200 - 471209: Pablo Nuñez&lt;br /&gt;
*ID 471210 - 471249: FANEL A.Ş  (https://www.fanel.com.tr)&lt;br /&gt;
*ID 471250 - 480999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 481000 - 481999: Alhaidab-ITIS (https://alhaidab.dolibarr.sd)&lt;br /&gt;
*ID 482000 - 482999: Basix IT (https://www.basix.de)&lt;br /&gt;
*ID 483000 - 483049: SASCO SpA (https://www.sasco.cl)&lt;br /&gt;
*ID 483050 - 483099: WIP Engineering (https://www.wip-gmbh.com)&lt;br /&gt;
*ID 483100 - 483149: J.Kaiser&lt;br /&gt;
*ID 483150 - 483199: CodLines (https://www.codlines.com)&lt;br /&gt;
*ID 483200 - 483249: BleepalSoftware (https://bleepal.com)&lt;br /&gt;
*ID 485000 - 485049: Gest Info Service Plus (contact@gest-plus.fr)&lt;br /&gt;
*ID 485050 - 489999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 490000 - 490049: VOLD (https://vold.lu)&lt;br /&gt;
*ID 490050 - 490069: QUANTIVO (http://quantivo.eu/)&lt;br /&gt;
*ID 490070 - 490999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 491000 - 491049: NORD ERP CRM (https://www.nord-erp-crm.fr/)&lt;br /&gt;
*ID 491050 - 491099: KJR-online (https://kjr-online.fr/)&lt;br /&gt;
*ID 491100 - 491149: eNova&lt;br /&gt;
*ID 491150 - 491199: App 4 Business&lt;br /&gt;
*ID 491200 - 491249: Mil24 (http://www.mil24.com.py)&lt;br /&gt;
*ID 491250 - 491299: M2AM&lt;br /&gt;
*ID 491300 - 491349: luigifab (https://github.com/luigifab), also reuse id:105009 for Sentry fork&lt;br /&gt;
*ID 491350 - 491399: Frédéric France (https://github.com/frederic34)&lt;br /&gt;
*ID 491400 - 491449: E-dem (https://www.e-dem.com/)&lt;br /&gt;
*ID 491450 - 491499: Burofree (https://burofreeai.es)&lt;br /&gt;
*ID 491500 - 491549: EMDELEN (https://emdelen.fr/)&lt;br /&gt;
*ID 491550 - 491599: eSoUrCeS Technologie (https://techno.esources.ca/) - Canada&lt;br /&gt;
*ID 491600 - 491649: GoSouce Peru - Peru&lt;br /&gt;
*ID 491650 - 491669: Kaféin Studio (https://kafein.studio) - France&lt;br /&gt;
*ID 491670 - 491699: Neykinfo  - France&lt;br /&gt;
*ID 491700 - 491999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 492000 - 492020: Anura (https://www.anura.fr/)&lt;br /&gt;
*ID 492021 - 492999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 493000 - 493020: Bourez Bastien EI (https://bastien-b.fr/)&lt;br /&gt;
*ID 493051 - 493071: benhmida ilyess (bhilyess98@gmail.com)&lt;br /&gt;
*ID 493101 - 493120: George TS, George SP (gspanos@makeasite.gr)&lt;br /&gt;
*ID 493200 - 493219: Stéphane Mallet (https://framagit.org/Steph501/dolibarr-mod-autoreminder)&lt;br /&gt;
*ID 499001 - 499020: IT GENIUSES (https://www.itgeniuses.com)&lt;br /&gt;
*ID 499051 - 499071: KREATIV PROJECT MANAGEMENT&lt;br /&gt;
&lt;br /&gt;
DO NOT ADD RECORD HERE, PLEASE FILL HOLES FIRST !!!!&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=ID &amp;gt; 500000=&lt;br /&gt;
&lt;br /&gt;
This range can&#039;t be reserved. It is a common range. If you don&#039;t plan to distribute your module, you can use an ID in this range with no need to reserve it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t already have reserved ids and need some, please don&#039;t use hazardous number and use a number higher than 500000, but it is better to ask a wiki account, and reserve your own range by editing the  100000 - 499999 range (20 ids at once).&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=65386</id>
		<title>List of modules id</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=65386"/>
		<updated>2026-02-13T22:44:34Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* ID 100000 - 499999 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateDocDevEs}}&lt;br /&gt;
{{TemplateDocDevFr}}&lt;br /&gt;
{{TemplateDocDevZh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page list all reserved modules numbers / ID.&lt;br /&gt;
&lt;br /&gt;
If you build or want to build your own modules, you should take an ID range here. Please pick range into existing holes first.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=ID 0 - 94999=&lt;br /&gt;
This range is reserved for Dolibarr&#039;s internal core modules, so all modules available into the standard distribution at https://github.com/Dolibarr/dolibarr&lt;br /&gt;
&lt;br /&gt;
=ID 95000 - 99999=&lt;br /&gt;
This range is reserved for Dolibarr&#039;s community modules with sources hosted into the github repository: https://github.com/Dolibarr/dolibarr-community-modules&lt;br /&gt;
&lt;br /&gt;
=ID 100000 - 499999=&lt;br /&gt;
&lt;br /&gt;
Reserved area for editors in need for an ID range. You can edit this page to add your own range (take a range of 20 numbers only the first time, ask us for more)&lt;br /&gt;
&lt;br /&gt;
[[File:Warning.png]] If you reserve more than 20 at once, we may automatically change your reservation range without information and you may experience conflicts with other modules in a future, so please follow the rules! &lt;br /&gt;
&lt;br /&gt;
*ID 100000 - 100999: OpenThink (http://www.openthink.be) - Belgium&lt;br /&gt;
*ID 101000 - 101999: DoliCloud (https://www.dolicloud.com) - France&lt;br /&gt;
*ID 102000 - 102999: Tiaris (http://www.tiaris.fr) - France&lt;br /&gt;
*ID 103000 - 103999: Open-concept.pro (http://www.open-concept.pro) - France&lt;br /&gt;
*ID 104000 - 104999: ATM Consulting (http://www.atm-consulting.fr) - France&lt;br /&gt;
*ID 105000 - 105999: GPC.solutions - France&lt;br /&gt;
*ID 106000 - 106999: PHPASSO&lt;br /&gt;
*ID 107000 - 107999: TecLib (http://www.teclib.com) / Auguria (http://www.auguria.net) - France&lt;br /&gt;
*ID 108000 - 108999: ETHICWEB&lt;br /&gt;
*ID 109000 - 109999: Aplose ([http://www.aplose.fr https://www.aplose.fr]) - France&lt;br /&gt;
*ID 110000 - 110999: Association Dolibarr (https://www.dolibarr.org)&lt;br /&gt;
*ID 111000 - 111999: Asset IT (www.assetit.ch) - Suisse&lt;br /&gt;
*ID 112000 - 112999: Aarboard AG (www.aarboard.ch) - Suisse&lt;br /&gt;
*ID 113000 - 113999: Asilib - Alexandre Spangaro&lt;br /&gt;
*ID 114000 - 114999: Iceleaf OÜ&lt;br /&gt;
*ID 115000 - 115999: 2A2C Conseil - Cyril ZEKSER&lt;br /&gt;
*ID 116000 - 116999: Wolftec GmbH&lt;br /&gt;
*ID 117000 - 117999: Oscim (http://www.oscim.fr)&lt;br /&gt;
*ID 118000 - 118999: Oarces Web (dev.oarces.com)&lt;br /&gt;
*ID 119000 - 119999: Manuel Berrocal - Absolacom&lt;br /&gt;
*ID 120000 - 120999: Régis Houssin (http://www.inodbox.com) - France&lt;br /&gt;
*ID 121000 - 121999: Oscss - Shop - France&lt;br /&gt;
*ID 122000 - 122999: MrSof - la Nation du Web&lt;br /&gt;
*ID 123000 - 123999: Bruno Généré (webiseasy.org)&lt;br /&gt;
*ID 124000 - 124999: 7reasons s.r.l. (www.7reasons.eu) - Austria&lt;br /&gt;
*ID 125000 - 125999: ProgSI (www.progsi.ma)&lt;br /&gt;
*ID 126000 - 126999: Catalanet&lt;br /&gt;
*ID 127000 - 127999: Virgilio Filho pt-BR Brasil (@dolibarr.br) - Brazil&lt;br /&gt;
*ID 128000 - 128999: Nicolas Frappé France (www.sospc.info)&lt;br /&gt;
*ID 129000 - 129999: Adeo-Informatique&lt;br /&gt;
*ID 130000 - 130999: Technicks ICT (http://www.technicks.eu) - Italy&lt;br /&gt;
*ID 131000 - 131999: Joan Louis (itaca.fr) - France&lt;br /&gt;
*ID 132000 - 132999: Jean-Marie Arsac (https://azimut.fr) - France&lt;br /&gt;
*ID 133000 - 133999: Oriel Systems Ltd, UK. (www.orielsystems.com)&lt;br /&gt;
*ID 134000 - 134999: ALSOFT PVT. LTD. (https://www.alsoft.org)&lt;br /&gt;
*ID 135000 - 135999: Net-Logic (https://netlogic.fr)&lt;br /&gt;
*ID 136000 - 136050: MONA.RE - France&lt;br /&gt;
*ID 136051 - 136099: La Vida Marketing&lt;br /&gt;
*ID 136100 - 136149: Synergies-Tech France. (https://www.synergies-france.fr/)&lt;br /&gt;
*ID 136150 - 136199: Lyta&lt;br /&gt;
*ID 136200 - 136219: Maison Théophile Leclerc&lt;br /&gt;
*ID 136220 - 136270: SegoFount - Spain&lt;br /&gt;
*ID 136271 - 136320: Labor Dispatch (Simon Sheng , China)&lt;br /&gt;
*ID 136321 - 136370: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 136371 - 136420: Daxit Solutions (https://www.daxit.be) [https://wiki.dolibarr.org/index.php/DAXIT-SOLUTIONS_List_of_modules_id Liste complète des modules Daxit]&lt;br /&gt;
*ID 136421 - 136470: HUSCH GmbH (https://husch-gmbh.de)&lt;br /&gt;
*ID 136471 - 138999: NSINFO (https://www.ns-info.fr)&lt;br /&gt;
*ID 139000 - 139999: Synergies-Tech France. (https://www.synergies-france.fr/)&lt;br /&gt;
*ID 140000 - 140999: Altairis (http://altairis.fr)&lt;br /&gt;
*ID 141000 - 141050: Projet2Team (https://www.projet2team.fr)&lt;br /&gt;
*ID 141051 - 141099: Elistair (http://elistair.com)&lt;br /&gt;
*ID 141100 - 141149: Blue Networks Technologies (https://www.blnt.fr)&lt;br /&gt;
*ID 141150 - 141199: Mainlab S.r.l. (https://www.mainlabonline.it) - Italy&lt;br /&gt;
*ID 141200 - 141249: Florian DUFOURG - France&lt;br /&gt;
*ID 141250 - 141299: SoftAddicts - Canada&lt;br /&gt;
*ID 141300 - 141349: Finanboo - (https://www.finanboo.com)&lt;br /&gt;
*ID 141350 - 141399: ConstruxZion Soft - Colombia (https://www.construxzionsoft.com.co)&lt;br /&gt;
*ID 141400 - 141450: COEXDIS - République Démocratique du Congo (https://www.coexdis.com)&lt;br /&gt;
*ID 141451 - 141501: HALFWARE - Algeria (https://www.half-ware.com)&lt;br /&gt;
*ID 141502 - 141552: Quantraum (https://quantraum.com)&lt;br /&gt;
*ID 141553 - 141603: Nateo Group&lt;br /&gt;
*ID 141604 - 141653: digital centric GmbH (https://www.digitalcentric.de/dolibarr)&lt;br /&gt;
*ID 141654 - 141699: Decrypting (https://www.decrypting.fr)&lt;br /&gt;
*ID 141700 - 141749: Zeise IT Consulting - Germany (https://www.zeise-it.de)&lt;br /&gt;
*ID 141750 - 141799: Data Rooster - France (https://datarooster.io)&lt;br /&gt;
*ID 141800 - 141849: IP Développement (https://www.ipdeveloppement.fr)&lt;br /&gt;
*ID 141850 - 141899: MSICCA | MRVL Soluciones de Ingeniería y Construcción, c.a (https://msicca.com)&lt;br /&gt;
*ID 141900 - 141949: THERSANE (https://www.thersane.fr)&lt;br /&gt;
*ID 141950 - 141999: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 142000 - 142049: ITANéA (https://www.itanea.fr)&lt;br /&gt;
*ID 142050 - 142099: ERP Consulting NZ ([https://www.erpconsulting.co.nz www.erpconsulting.co.nz])&lt;br /&gt;
*ID 142100 - 142149: Bloxera GmbH (https://www.bloxera.com)&lt;br /&gt;
*ID 142150 - 142199: Evangelos Souglakos - Greece&lt;br /&gt;
*ID 142200 - 142249: Luc CALARESU - France&lt;br /&gt;
*ID 142250 - 142299: OmnIT Services - Belgique (https://www.omnitservices.biz)&lt;br /&gt;
*ID 142300 - 142349: Gwadeyes - Guadeloupe (https://www.gwadeyes-informatique.com/)&lt;br /&gt;
*ID 142350 - 142399: Solution Libre (https://www.solution-libre.fr/)&lt;br /&gt;
*ID 142400 - 142449: Res Digital (https://res.digital)&lt;br /&gt;
*ID 142450 - 142499: itopie informatique (https://www.itopie.ch)&lt;br /&gt;
*ID 142500 - 142549: Weblinx.IT GbR (https://weblinx.it/) - Germany&lt;br /&gt;
*ID 142550 - 142599: ASCI-Automation - Mexico (https://asci-automation.com.mx/)&lt;br /&gt;
*ID 142600 - 142649: ZENKO Design - Japan / France / Spain&lt;br /&gt;
*ID 142650 - 142699: AWeerWolf&lt;br /&gt;
*ID 142700 - 148749: Lysis (https://lysis.net/)&lt;br /&gt;
*ID 142750 - 142799: Hadritech (https://www.hadritech.com/)&lt;br /&gt;
*ID 142800 - 142849: Bloxera GmbH (https://www.bloxera.com)&lt;br /&gt;
*ID 142850 - 148999: Everlats S.L. - España (https://www.everlats.com)&lt;br /&gt;
*ID 149000 - 149999: SydTech - America Central (https://www.sydtech.io/)&lt;br /&gt;
*ID 150000 - 150999: Jeffinfo&lt;br /&gt;
*ID 151000 - 151999: Konverseo (https://konverseo.com)&lt;br /&gt;
*ID 152000 - 152049: Tanguy Pénet (http://tanguype.net)&lt;br /&gt;
*ID 152050 - 152099: Web Solutions&lt;br /&gt;
*ID 152100 - 152149: MagicNet (https://www.magicnet.it)&lt;br /&gt;
*ID 152150 - 152199: Benjamin Falière (https://www.faliere.com)&lt;br /&gt;
*ID 152200 - 152249: Solauv&lt;br /&gt;
*ID 152250 - 156499: TecnoGestión Principado S.L. (https://www.tecnogestion.com) - Asturias - España&lt;br /&gt;
*ID 156500 - 156549: ACE Recycling  (https://www.acerecycling.net.au/)&lt;br /&gt;
*ID 156550 - 156599: Kreativität Works ([http://www.kreativitat.com http://kreativitat.com])&lt;br /&gt;
*ID 156600 - 156649: [https://pierre-couy.dev Pierre Couy]&lt;br /&gt;
*ID 156650 - 156699: CXI (https://cyrix.co.za)&lt;br /&gt;
*ID 156700 - 156749: Mustafa Kemerci - Turkiye&lt;br /&gt;
*ID 156750 - 156799: [https://de-grandpre.quebec de Grandpré Technologies] - Québec (Canada)&lt;br /&gt;
*ID 156800 - 156849: Draceo&lt;br /&gt;
*ID 156850 - 156899: Valleiweb&lt;br /&gt;
*ID 156900 - 159949: NEOVIAQ Advisory LU(https://www.neoviaq.com)&lt;br /&gt;
*ID 159950 - 159999: Arve et Giffre INFOGESTION (https://www.ag-infogestion.fr)&lt;br /&gt;
*ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&lt;br /&gt;
*ID 161000 - 161999: Abbes Bahfir (https://01consulting.eu)&lt;br /&gt;
*ID 162000 - 162999: Jacques Rébiscoul&lt;br /&gt;
*ID 163000 - 163999: Open-DSI (https://www.open-dsi.fr)&lt;br /&gt;
*ID 164000 - 164999: Pixelada S. Coop. And. (https://pixelada.org)&lt;br /&gt;
*ID 165000 - 165049: DovConnect&lt;br /&gt;
*ID 165050 - 165099: Mind Operated Systems (https://www.mosystems.biz)&lt;br /&gt;
*ID 165100 - 165150: SD-Formation (https://sdformation.fr)&lt;br /&gt;
*ID 165151 - 165199: NUM&#039;X (https://www.numx-sets.eu)&lt;br /&gt;
*ID 165200 - 165249: Benjam Préjent (https://www.benjam-prejent.fr)&lt;br /&gt;
*ID 165250 - 165299: Dhi Loka Private Limited, India (https://www.dhiloka.com)&lt;br /&gt;
*ID 165300 - 169999: Accellier Limited (https://www.accellier.com/)&lt;br /&gt;
*ID 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
*ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
*ID 172000 - 172299: Ray Soft-Systems (https://www.ray-soft-systems.com)&lt;br /&gt;
*ID 172300 - 172349: Günter Lukas Consulting (https://gl.co.at)&lt;br /&gt;
*ID 172350 - 172399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 172400 - 172449: Professional Structures Limited (https://pstructures.com)&lt;br /&gt;
*ID 172450 - 172699: IT-BS (https://www.it-bs.fr)&lt;br /&gt;
*ID 172700 - 172749: Indelog (https://www.indelog.fr)&lt;br /&gt;
*ID 172750 - 172799: NSINFO (https://www.ns-info.fr)&lt;br /&gt;
*ID 172800 - 172849: E-Concept Applications (https://e-concept-applications.fr)&lt;br /&gt;
*ID 172850 - 172899: B&amp;amp;R Stamm UG (https://stamm-ug.de)&lt;br /&gt;
*ID 172900 - 172949: Dolipive, support@dolipive.fr, www.dolipive.fr&lt;br /&gt;
*ID 172950 - 172999: CKD-Industrie (https://ckd-industrie.com/) - France&lt;br /&gt;
*ID 173000 - 173049: Aneosys (https://aneosys.fr) - France&lt;br /&gt;
*ID 173050 - 173099: Sebastian Schloßer - Germany&lt;br /&gt;
*ID 173100 - 173149: TecnoSoluciones (https://tecnosoluciones.com)&lt;br /&gt;
*ID 173150 - 173199: Digitalworks (https://www.digitalworks.fr) - France&lt;br /&gt;
*ID 173200 - 173249: UNi.D Consulting (https://www.unid-consulting.fr) - France&lt;br /&gt;
*ID 173250 - 173299: NetworkDigital(https://www.networkdigital.fr) - France&lt;br /&gt;
*ID 173300 - 173300: Módulo VeriFactu Dolibarr (https://verifactudolibarr.es/) - España&lt;br /&gt;
*ID 173301 - 173320: Sibanet (https://sibanet.net) - España&lt;br /&gt;
*ID 173321 - 173340: disQutons (https://wiki.dolibarr.org/index.php/Category:DisQutons)&lt;br /&gt;
*ID 173341 - 173360: Surática Software (https://suratica.es) - Spain&lt;br /&gt;
*ID 173361 - 173380: UpInvoice (https://upinvoice.eu) - Spain&lt;br /&gt;
*ID 173381 - 179999: Toutatis (https://toutatis.eu)&lt;br /&gt;
*ID 180000 - 180999: BM eXpert Labs&lt;br /&gt;
*ID 181000 - 181999: TI Sin Problemas (https://www.tisinproblemas.com)&lt;br /&gt;
*ID 182000 - 182049: Chipserv Pawel Wlizlo (https://www.testware.it)&lt;br /&gt;
*ID 182050 - 182070: Herolapse (https://herolapse.com/)&lt;br /&gt;
*ID 182061 - 182999: TMC&lt;br /&gt;
*ID 183000 - 183999: BB2A Anthony Berton (https://www.bb2a.fr)&lt;br /&gt;
*ID 184000 - 184999: DPS PRINTING &amp;amp; DOCUMENTS SOCIEDAD ANONIMA (https://www.dps-lat.com)&lt;br /&gt;
*ID 185000 - 185049: Telioskour (https://github.com/telioskour)&lt;br /&gt;
*ID 185050 - 185099: Moko Consulting ([[Moko Consulting]] || https://mokoconsulting.tech)&lt;br /&gt;
*ID 185100 - 185149: Sinabe (https://sinabe.ch) - Suisse&lt;br /&gt;
*ID 185150 - 185169: Anatole Conseil (https://anatoleconseil.com/)&lt;br /&gt;
*ID 185170 - 185189: cferoiu&lt;br /&gt;
*ID 185190 - 185209: Guillemonde (https://guillemonde.family)&lt;br /&gt;
*ID 185210 - 185229: ITized - Finta Ionut (https://itized.com)&lt;br /&gt;
*ID 185230 - 185249: svewa (https://github.com/svewa/)&lt;br /&gt;
*ID 185250 - 185269: Clément Jaunay (https://clement-jny.fr/ || contact@clement-jny.fr)&lt;br /&gt;
*ID 185270 - 185289: AMB Technologies (https://www.ambts.fr)&lt;br /&gt;
*ID 185290 - 185299: VIOLET IT UG (https://violet-it.de)&lt;br /&gt;
*ID 185300 - 185319: lorem.site &#039;&#039;&#039;(&#039;&#039;&#039;https://lorem.site/&#039;&#039;&#039;)&#039;&#039;&#039;&lt;br /&gt;
*ID 185320 - 185340: &#039;&#039;&#039;Rentageek  (https://rentageek.hu) Hungary&#039;&#039;&#039;&lt;br /&gt;
*ID 185341 - 189999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 190000 - 190999: Diciannove (http://19.coop)&lt;br /&gt;
*ID 191000 - 191999: Elonet (https://elonet.fr)&lt;br /&gt;
*ID 192000 - 192049: IDFOR Consulting (https://www.idfor-consulting.fr/)&lt;br /&gt;
*ID 192050 - 192069: Stogger (&amp;lt;nowiki&amp;gt;https://stogger.com&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 192070 - 192090: Protectora&lt;br /&gt;
*ID 192091 - 192110: CoopCircuits - OpenFoodNetwork (https://coopcircuits.fr/)&lt;br /&gt;
*ID 192111 - 198999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 199000 - 199999: RFMS&lt;br /&gt;
*ID 200000 - 200999: Noxiome&lt;br /&gt;
*ID 201000 - 201999: Sasa Ostrouska (saxa)&lt;br /&gt;
*ID 202000 - 202999: Z-Application&lt;br /&gt;
*ID 203000 - 203099: Elidee - elidee.com&lt;br /&gt;
*ID 203100 - 203999: Garcia MICHEL (soamichel.fr)&lt;br /&gt;
*ID 204000 - 204999: Ari Elbaz elarifr - accedinfo.com&lt;br /&gt;
*ID 205000 - 205999: Kreiz IT&lt;br /&gt;
*ID 206000 - 206999: GBINFO (www.gbinfo.fr)&lt;br /&gt;
*ID 207000 - 207099: MacroProg (https://www.macroprog.com)&lt;br /&gt;
*ID 207100 - 207149: Reactiva Software&lt;br /&gt;
*ID 207150 - 207199: Ndejje University Water Research and Development Centre ([https://github.com/NDUWRDC/LIMS/])&lt;br /&gt;
*ID 207200 - 207299: Massaoud Bouzenad ([https://www.dzprod.net dzprod.net])&lt;br /&gt;
*ID 207300 - 207349: Ksar&lt;br /&gt;
*ID 207350 - 207399: Easylinux (www.easylinux.fr)&lt;br /&gt;
*ID 207400 - 207449: Arthur LENOBLE&lt;br /&gt;
*ID 207450 - 207499: Vaicop SAS de CV (México)&lt;br /&gt;
*ID 207500 - 207520: Frankie Wong - UK&lt;br /&gt;
*ID 207521 - 207540: Fyssec ([https://fyssec.fr/ fyssec.fr/])&lt;br /&gt;
*ID 207521 - 212099: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 212100 - 212149: Audio Vidéo Technologies (https://www.avtek.fr)&lt;br /&gt;
*ID 212150 - 212169: &#039;&#039;&#039;AI MYA GROUP ([https://Www.AI-MYA-GROUP.com www.AI-MYA-GROUP.com])&#039;&#039;&#039;&lt;br /&gt;
*ID 212170 - 213999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 214000 - 214049: X-Boss&lt;br /&gt;
*ID 214050 - 221999: PixelJM&lt;br /&gt;
*ID 220000 - 220050: Apex Tech (https://apextechmods.com)&lt;br /&gt;
*ID 220051 - 220100: Technology Xchange Solutions (https://www.txscorp.com)&lt;br /&gt;
*ID 222000 - 222999:  dolibit  (https://www.dolibit.de)&lt;br /&gt;
*ID 223000 - 223049: Tráfico Canada&lt;br /&gt;
*ID 223050 - 223099: VLTN (https://vltn.sh)&lt;br /&gt;
*ID 223100 - 229949: Dazax.io (https://www.dazax.io)&lt;br /&gt;
*ID 229950 - 229999: Solucions Informàtiques, Serveis i Innovació SLU (https://6innova.es)&lt;br /&gt;
*ID 230000 - 230049: Unareil (https://www.unareil.eu)&lt;br /&gt;
*ID 230050 - 230099: Lyra Network (https://www.lyra.com/)&lt;br /&gt;
*ID 230100 - 230149: Gheorghe Iftimi - CTW - RO&lt;br /&gt;
*ID 230150 - 230199: MEMA Machinery &amp;amp; Tools (https://www.mema.be)&lt;br /&gt;
*ID 230200 - 230249: Teleassist&lt;br /&gt;
*ID 230250 - 230299: Nh Developer&lt;br /&gt;
*ID 230300 - 230499: Chickenforce/code-chicken, IT Services Hahn (https://github.com/code-chicken [http://itservices-hahn.de/ https://itservices-hahn.de])&lt;br /&gt;
*ID 230500 - 230549: Hidup Consulting (https://consulting.hidup.io)&lt;br /&gt;
*ID 230550 - 230599: CMR Conseil (https://www.weblockup.fr)&lt;br /&gt;
*ID 230600 - 230649: aFreeMind Studio&lt;br /&gt;
*ID 230650 - 230699: Unideal (https://www.uni-deal.com)&lt;br /&gt;
*ID 230700 - 230749: DevLansdes (https://devlandes.com/)&lt;br /&gt;
*ID 230750 - 262699: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 262700 - 262799: Scopen (https://www.scopen.fr)&lt;br /&gt;
*ID 262800 - 262849: Christophe BATTAREL EI&lt;br /&gt;
*ID 262850 - 271799: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 271800 - 271849: bee solutions sàrl (Switzerland)&lt;br /&gt;
*ID 271850 - 272999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 273000 - 273019: Taler (https://taler.net)&lt;br /&gt;
*ID 273020 - 274199: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 274200 - 274249: Mathilde MAROCCO (https://mminformatique.fr)&lt;br /&gt;
*ID 274250 - 274299: Nerv Project (www.nerv-project.eu)&lt;br /&gt;
*ID 274300 - 274349: Knowhere Consulting S.L. (https://www.knowhere-consulting.eu)&lt;br /&gt;
*ID 274350 - 274399: Milen karaganski (https://blacktiehost.com)&lt;br /&gt;
*ID 274400 - 274449: Vincent MAURY ([https://www.timgroup.fr www.timgroup.fr])&lt;br /&gt;
*ID 274450 - 274499: Daraelmin&lt;br /&gt;
*ID 274500 - 274549: Emilie LAFORET (http://www.ermvallon.com)&lt;br /&gt;
*ID 274550 - 278999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 279000 - 279049: VSDigital Electronics (https://vsdigital.ar) - Argentina&lt;br /&gt;
*ID 279050 - 279999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 280000 - 280049: Bingroup (https://www.beinng.com)&lt;br /&gt;
*ID 280050 - 280099: Medialta (https://medialta.com)&lt;br /&gt;
*ID 280100 - 280149: Cédric Ancelin - Ancode (https://www.dolistore.com/fr/recherche?search_query=ancode)&lt;br /&gt;
*ID 280150 - 289999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 290000 - 290099: BNS - Project doliBRA ([https://www.beinng.com https://www.bns.net.br]) - Brasil&lt;br /&gt;
*ID 290100 - 299999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 300000 - 300049: RapidProgress (https://www.rapidprogress.eu) - Bulgaria&lt;br /&gt;
*ID 300050 - 300099: M@ Solution (https://www.ma-solution.fr/)&lt;br /&gt;
*ID 300100 - 300149: LAVA RUN (https://www.lavarun.re)&lt;br /&gt;
*ID 300150 - 300199: PsyCrow Code&lt;br /&gt;
*ID 300200 - 300249: Computences (https://www.computences.com/)&lt;br /&gt;
*ID 300250 - 300299: LEVEL IT (https://levelit.com.ar)&lt;br /&gt;
*ID 300300 - 300349: Progiseize (https://progiseize.fr)&lt;br /&gt;
*ID 300350 - 300399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 300400 - 300449: Anouar Touati&lt;br /&gt;
*ID 300450 - 300499: Martin Danger&lt;br /&gt;
*ID 300500 - 301499: Whale Blows&lt;br /&gt;
*ID 301500 - 301549: Tom Trust - International&lt;br /&gt;
*ID 301550 - 301599: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 301600 - 302479: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 302480 - 302499: akyras (https://akyras.fr)&lt;br /&gt;
*ID 302500 - 302549: Diamubi (https://diamubi.com)&lt;br /&gt;
*ID 302550 - 302599: Datolab (https://www.datolab.com)&lt;br /&gt;
*ID 302600 - 302649: DuMaCo (https://www.dumaco.de)&lt;br /&gt;
*ID 302650 - 302699: Resilio SA&lt;br /&gt;
*ID 302700 - 302749: Aroga&lt;br /&gt;
*ID 302750 - 302799: Productivix (https://www.productivix.com)&lt;br /&gt;
*ID 302800 - 302849: Slibzz&lt;br /&gt;
*ID 302850 - 302899: idea design (https://ideadesign.dz)&lt;br /&gt;
*ID 302900 - 302949: AL MISBAH INFORMATIQUE (https://www.almisbah.ma)&lt;br /&gt;
*ID 302950 - 302999: Atis Solutions - France&lt;br /&gt;
*ID 303000 - 303499: Obixav - Nigeria&lt;br /&gt;
*ID 303500 - 303549: buschler plus GmbH, Germany (https://buschler.plus)&lt;br /&gt;
*ID 303550 - 303599: Prestalidaire - France (https://prestalidaire.com)&lt;br /&gt;
*ID 303600 - 309999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 310000 - 310049: Neilson Dufour (&amp;lt;nowiki&amp;gt;https://hypercode.ca&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 310050 - 313999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 314000 - 314049: Ruemmler IT Solutions (https://www.ruemmler.net)&lt;br /&gt;
*ID 314050 - 314149: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 314150 - 314199: Benoît PASCAL&lt;br /&gt;
*ID 314200 - 319999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 320000 - 320999: Novus Studios (www.novusstudios.it)&lt;br /&gt;
*ID 321000 - 321999: AtooNet (http://www.atoo-net.com)&lt;br /&gt;
*ID 322000 - 322049: Doymer Consultores&lt;br /&gt;
*ID 322050 - 329999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 330000 - 330049: XTEC Industries (www.xtec-ind.com)&lt;br /&gt;
*ID 330050 - 330099: 10100 S.R.L. - (www.10100.to)&lt;br /&gt;
*ID 330100 - 330149: AES Dana SRL (https://aes-dana.be)&lt;br /&gt;
*ID 330150 - 330199: Freshcore (https://www.freshcore.fr)&lt;br /&gt;
*ID 330200 - 331999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 332000 - 332099: Gecka (https://gecka.nc)&lt;br /&gt;
*ID 332100 - 332149: Agence Milkshake (http://agencemilkshake.com)&lt;br /&gt;
*ID 332150 - 332199: Daniel Prowald IT – Service (https://prowald-it.de)&lt;br /&gt;
*ID 332200 - 332249: UNITICE (https://unitice.com)&lt;br /&gt;
*ID 332250 - 332299: Sidonie Moulart&lt;br /&gt;
*ID 332300 - 332349: LTDJ (Antonin MARCHAL - Le Temple du Jeu)&lt;br /&gt;
*ID 332350 - 333299: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 333300 - 333349: Sense Africa (http://sense.africa)&lt;br /&gt;
*ID 333350 - 339999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 340000 - 340049: M34D (https://m34d.com)&lt;br /&gt;
*ID 340050 - 340069: WiwIT&lt;br /&gt;
*ID 340070 - 349999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 350000 - 350049: SOUNDOU &amp;amp; MIDAS (https://www.soundou.org/)&lt;br /&gt;
*ID 350050 - 350099: Ildefonso González (https://igontek.es)&lt;br /&gt;
*ID 350100 - 350149: 7Kas Servicios de Internet, S.L. (https://7kas.com)&lt;br /&gt;
*ID 350150 - 350999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 351000 - 351049: P&#039;tite Tête (https://ptitetete.com) - France&lt;br /&gt;
*ID 351050 - 398999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 359000 - 359049: Milen Karaganski0&lt;br /&gt;
*ID 400000 - 400999: 2byte.es (http://www.2byte.es)&lt;br /&gt;
*ID 401000 - 401999: B&amp;amp;D Informática&lt;br /&gt;
*ID 402000 - 402999: Marcos García de La Fuente (marcosgdf)&lt;br /&gt;
*ID 403000 - 403999: Sergibyte&lt;br /&gt;
*ID 404000 - 404999: Aikhan&lt;br /&gt;
*ID 405000 - 405999: AIME (http://www.aime.mx)&lt;br /&gt;
*ID 406000 - 406999: Som Núvol (https://somnuvol.coop)&lt;br /&gt;
*ID 407000 - 407019: I-Motion SARL&lt;br /&gt;
*ID 407020 - 408999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 409000 - 409999: LliureTIC (https://www.lliuretic.cat)&lt;br /&gt;
*ID 410000 - 410999: DoliGov&lt;br /&gt;
*ID 411000 - 411049: GATTEK SARL (https://www.ga-ttek.com)&lt;br /&gt;
*ID 411050 - 419999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 420000 - 420099: BBS Concept&lt;br /&gt;
*ID 420100 - 420199: LeMousticProduction (www.lemousticproduction.info) -&amp;lt; module DoliRH&lt;br /&gt;
*ID 420200 - 421199: VatCheck (www.abnc.be)&lt;br /&gt;
*ID 421200 - 422199: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 422200 - 422999: Artaban (http://artaban.fr)&lt;br /&gt;
*ID 423000 - 423049: cyberesprit&lt;br /&gt;
*ID 423050 - 423099: R.Bossard&lt;br /&gt;
*ID 423100 - 423199: Joliciel (www.joliciel.fr)&lt;br /&gt;
*ID 423200 - 423299: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 423299 - 423999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 424000 - 424049: Philazerty ([https://www.philazerty.fr www.philazerty.fr])&lt;br /&gt;
*ID 424050 - 424099: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 424100 - 424149: Ohoo Solutions (http://www.ohoosolutions.com)&lt;br /&gt;
*ID 424150 - 424199: DAGARCAM Informática (https://www.dagarcam.com/)&lt;br /&gt;
*ID 424200 - 424999: Lab51 (https://github.com/lab51org)&lt;br /&gt;
*ID 425000 - 425999: Sébastien SERRE Thivinfo (www.thivinfo.com)&lt;br /&gt;
*ID 426000 - 426099: Arkesis-Solution&lt;br /&gt;
*ID 426100 - 426149: GetLandy (www.getlandy.com)&lt;br /&gt;
*ID 426150 - 426649: OOB Software&lt;br /&gt;
*ID 426650 - 426849: Soft-Task Serviços e Sistemas (www.soft-task.com.br)&lt;br /&gt;
*ID 426850 - 426999: Bruno Caldas (https://github.com/BCaldas)&lt;br /&gt;
*ID 427000 - 427999: Kevin GUERRIER (alias xcl.saian)&lt;br /&gt;
*ID 428000 - 428099: af83&lt;br /&gt;
*ID 428100 - 428199: Arnaud Serrut - Adalon&lt;br /&gt;
*ID 428200 - 428249: imschweiler consulting (http://www.imschweiler-consulting.de&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;)&lt;br /&gt;
*ID 428250 - 428299: AL1FO&lt;br /&gt;
*ID 428300 - 428349: Federico García-Patiño Barbolani (&amp;lt;federico.garcia.patino@gmail.com&amp;gt;)&lt;br /&gt;
*ID 428350 - 428399: INTM Groupe - France (www.intm.com)&lt;br /&gt;
*ID 428400 - 428449: Nick Fragoulis - Greece&lt;br /&gt;
*ID 428450 - 428499: Kontava - France ([https://kontava.fr kontava.fr)]&lt;br /&gt;
*ID 428500 - 428549: hkwhitten - USA&lt;br /&gt;
*ID 428550 - 428999: SmartOne&lt;br /&gt;
*ID 429000 - 429999: induslab&lt;br /&gt;
*ID 430000 - 430099: Mixity sprl (www.mixity.be)&lt;br /&gt;
*ID 430100 - 430199: sgiraud&lt;br /&gt;
*ID 430200 - 430299: Merlion TI (www.merlion-si.com.br)&lt;br /&gt;
*ID 430300 - 431299: Libre Expert (www.libre-expert.com)&lt;br /&gt;
*ID 431300 - 431399: ptibogxiv (www.ptibogxiv.net)&lt;br /&gt;
*ID 431400 - 431499: Befox (www.befox.fr)&lt;br /&gt;
*ID 431500 - 431599: rue Béjo (www.ruebejo.fr)&lt;br /&gt;
*ID 431600 - 431699: Avizzeo (www.avizzeo.com)&lt;br /&gt;
*ID 431700 - 432199: Multisistemas (www.multisistemas.com.sv)&lt;br /&gt;
*ID 432200 - 432399: Burbuja - Chile (www.burbuja.cl)&lt;br /&gt;
*ID 432400 - 433399: INOVEA CONSEIL (https://www.inovea-conseil.com)&lt;br /&gt;
*ID 433400 - 434399: Rachid HRICH - Maroc (HricH ServiceS.)&lt;br /&gt;
*ID 434400 - 435399: Lance Bleakley - LanceIT (www.lanceit.net)&lt;br /&gt;
*ID 435400 - 435419: Victorien LOS - France&lt;br /&gt;
*ID 435420 - 435999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 436000 - 436099: SOWEBIO (www.soweb.io)&lt;br /&gt;
*ID 436100 - 436199: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
*ID 436200 - 436300: TDE-INFORMATIQUE (www.tde-informatique.fr)&lt;br /&gt;
*ID 436301 - 436349: Evarisk ([https://www.evarisk.com/id-module-dolibarr/ www.evarisk.com])&lt;br /&gt;
*ID 436350 - 436399: Eoxia ([https://www.eoxia.com/dolibarr/modules/ www.eoxia.com])&lt;br /&gt;
*ID 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&lt;br /&gt;
*ID 437400 - 437449: Martin Neubauer - Germany&lt;br /&gt;
*ID 437450 - 437599: Club1click (www.club1click.es)&lt;br /&gt;
*ID 437600 - 437629: Coulon Vincent (https://github.com/HoverEpic)&lt;br /&gt;
*ID 437630 - 437649: Aytechnet (https://www.aytechnet.fr/) - François Pons&lt;br /&gt;
*ID 437650 - 437699: LibreMaster (https://libremaster.com) - Christophe T.&lt;br /&gt;
*ID 437700 - 437749: STELLAR Broadband (https://www.stellarbb.com) - U.S.A. - Philip Laycock&lt;br /&gt;
*ID 437750 - 437799: DIGITA.LU Ajous Solutions&lt;br /&gt;
*ID 437800 - 437850: iProspective (https://iprospective.fr) - Mathieu Moulin&lt;br /&gt;
*ID 437851 - 437900: Theobald Groupe.&lt;br /&gt;
*ID 437901 - 437950: Neuronnexion (http://neuronnexion.coop)&lt;br /&gt;
*ID 437951 - 437952: jmbc - APIA-ASSO (https://www.apia-asso.fr)&lt;br /&gt;
*ID 437953 - 438002: IPCZEN SARL (https://www.ipczeninformatique.fr/)&lt;br /&gt;
*ID 438003 - 438052: FESF IT Department (https://fesf.org.pk)&lt;br /&gt;
*ID 438053 - 438103: Pilot Engineering team&lt;br /&gt;
*ID 438104 - 438153: u2042 (https://u2042.com)&lt;br /&gt;
*ID 438154 - 438204: Djair E Pereira (ocultooooo@gmail.com) - Brasil&lt;br /&gt;
*ID 438205 - 438255: yoandm (https://yoandm.com)&lt;br /&gt;
*ID 438256 - 438299: PTMSoft (&amp;lt;nowiki&amp;gt;https://www.ptmsoft.fr&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 438300 - 438399: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 438400 - 439399: Tetras Libre - France - Développement logiciels libres (www.tetras-libre.fr)&lt;br /&gt;
*ID 439400 - 440399: Dolibarr-pro - France - Développement Dolibarr (www.dolibarr-pro.com)&lt;br /&gt;
*ID 440400 - 441399: Quidlab Co., Ltd - Thailand - ( www.quidlab.com )&lt;br /&gt;
*ID 441400 - 442399: Ide@log - France - (https://www.idealog-info.net) - Laurent Leblanc&lt;br /&gt;
*ID 442400 - 443399: Valerio Bianchi (www.valeriobianchi.com)&lt;br /&gt;
*ID 443400 - 444399: delassalle - France - (www.delassalle.fr) - Joseph Delassalle&lt;br /&gt;
*ID 444400 - 445399: Webartis - Maroc - (www.webartis.net) - François Dry&lt;br /&gt;
*ID 445400 - 445499: SCOP Au-delà des nuages - France&lt;br /&gt;
*ID 445500 - 445549: X Net Systems - Egypt - (https://www.xneteg.com)&lt;br /&gt;
*ID 445550 - 445569: Schiefer.IT - Austria ([https://schiefer.it schiefer.it])&lt;br /&gt;
*ID 445570 - 445999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 446000 - 446999: iouston (http://www.iouston.com) - France - Julien Marchand&lt;br /&gt;
*ID 447000 - 447999: rSanjoSEO - Rafael San José Tovar (www.rsanjoseo.com) - Spain&lt;br /&gt;
*ID 448000 - 448999: Code 42 (www.code42.fr)&lt;br /&gt;
*ID 449000 - 449999: TakePOS (www.takepos.com)&lt;br /&gt;
*ID 450000 - 450999: Pierre ARDOIN&lt;br /&gt;
*ID 451000 - 451999: Éditeur depordi.fr&lt;br /&gt;
*ID 452000 - 452999: Dylan NAKONG&lt;br /&gt;
*ID 453000 - 453999: Menahd Ouchenir - France - menahd-ouchenir.com&lt;br /&gt;
*ID 454000 - 454999: Withheld - Canada&lt;br /&gt;
*ID 455000 - 455999: Gaëtan MAISON - Info Libre @ Dom - France (https://www.infolibreadom.com)&lt;br /&gt;
*ID 456000 - 456999: Laurent LEBLEU - B.L.C. - Blue Line Company - Lille - France (www.bluelinecompany.fr/dolibarr)&lt;br /&gt;
*ID 457000 - 457999: Sébastien BOUCHER&lt;br /&gt;
*ID 458000 - 458999: Lester HERNÁNDEZ - Argentina - (freelancerlrhd@gmail.com)&lt;br /&gt;
*ID 459000 - 459999: Infopen - France&lt;br /&gt;
*ID 460000 - 460049: torvista - Spain&lt;br /&gt;
*ID 460050 - 460099: ADVAISION.com (Belgique www.advaision.com)&lt;br /&gt;
*ID 460100 - 460999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 461000 - 461999: MEGALOGI - Maroc (www.erpcloud.ma)&lt;br /&gt;
*ID 462000 - 462999: Making Digital (www.making-digital.fr) - France&lt;br /&gt;
*ID 463000 - 463999: linx s.r.l.s.&lt;br /&gt;
*ID 464000 - 464999: NimbleCubed Inc. (www.nimblecubed.com)&lt;br /&gt;
*ID 465000 - 465999: Artefacts (www.artefacts.coop) - Pascal Daugeron&lt;br /&gt;
*ID 466000 - 466999: CDM Consultores - (www.cdm.guru)&lt;br /&gt;
*ID 467000 - 467999: M71 Service GmbH - (www.m71-service.de)&lt;br /&gt;
*ID 468000 - 468049: Clément Segonzac - France (clement.segonzac@gmail.com)&lt;br /&gt;
*ID 468050 - 468099: Flavien Belli - France (https://github.com/Marshlyin || belliflaviencontactpro@gmail.com)&lt;br /&gt;
*ID 468100 - 468119: Chl (https://code.bugness.org/Dolibarr)&lt;br /&gt;
*ID 468120 - 468169: Commotron GmbH (https://www.commotron.com/)&lt;br /&gt;
*ID 468170 - 468219: Infans Group (franck.lauby@infans.fr)&lt;br /&gt;
*ID 468175 - 468199: Gaëlle Rauffet - France (kiwiscan.net)&lt;br /&gt;
*ID 468200 - 468249: Paulo Oliveira - Brasil (paulorcdo@gmail.com)&lt;br /&gt;
*ID 468250 - 468269: CD-Systems - France (https://www.cd-systems.fr)&lt;br /&gt;
*ID 468270 - 468299: Nicolas Testori&lt;br /&gt;
*ID 468300 - 468349: Uvensys - Germany (https://uvensys.de)&lt;br /&gt;
*ID 468350 - 468399: Laudeco - Belgium (http://github.com/laudeco)&lt;br /&gt;
*ID 468400 - 468449: Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 468450 - 468499: Mehdi Belkhayat - Maroc (https://opensi.ma)&lt;br /&gt;
*ID 468500 - 468599: InvIT GmbH - Germany (https://invit.sh)&lt;br /&gt;
*ID 468600 - 468649: Ricardo Sequeira - Portugal (https://ricardo-sequeira.com)&lt;br /&gt;
*ID 468650 - 468699: J-IT - Belgique (https://www.j-it.be)&lt;br /&gt;
*ID 468700 - 468749: Fidesio - France (https://www.fidesio.com/)&lt;br /&gt;
*ID 468750 - 468799: Sgestion - Spain (http://www.sgestion.net/)&lt;br /&gt;
*ID 468800 - 468849: Denis JULIEN - Brasil (matrinxa@free.fr)&lt;br /&gt;
*ID 468850 - 468899: Mmariko - Module GED - Effios&lt;br /&gt;
*ID 468900 - 468949: Maazou Amadou Abdoul aziz - Maroc (yaronfada@gmail.com)&lt;br /&gt;
*ID 468950 - 468999: Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 469000 - 469049: John Livingston (https://github.com/JohnXLivingston/)&lt;br /&gt;
*ID 469050 - 469099: Macrorom ICT-services (https://macrorom.nl/)&lt;br /&gt;
*ID 469100 - 469149: HABOT IT - France (https://habot.it)&lt;br /&gt;
*ID 469150 - 469159: CaribbeanConsult.Com CCC - France Guadeloupe (https://dolibarr.ccc.gp)&lt;br /&gt;
*ID 469160 - 469171: GMBG - Portugal&lt;br /&gt;
*ID 469172 - 469199: BGi Lda - Portugal&lt;br /&gt;
*ID 469200 - 469949: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 469950 - 469999: Goldoweb (http://goldoweb.com)&lt;br /&gt;
*ID 470000 - 470999: Reindeer Digital (https://rdeer.cz)&lt;br /&gt;
*ID 471000 - 471099: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
*ID 471100 - 471199: M. Morillon&lt;br /&gt;
*ID 471200 - 471209: Pablo Nuñez&lt;br /&gt;
*ID 471210 - 471249: FANEL A.Ş  (https://www.fanel.com.tr)&lt;br /&gt;
*ID 471250 - 480999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 481000 - 481999: Alhaidab-ITIS (https://alhaidab.dolibarr.sd)&lt;br /&gt;
*ID 482000 - 482999: Basix IT (https://www.basix.de)&lt;br /&gt;
*ID 483000 - 483049: SASCO SpA (https://www.sasco.cl)&lt;br /&gt;
*ID 483050 - 483099: WIP Engineering (https://www.wip-gmbh.com)&lt;br /&gt;
*ID 483100 - 483149: J.Kaiser&lt;br /&gt;
*ID 483150 - 483199: CodLines (https://www.codlines.com)&lt;br /&gt;
*ID 483200 - 483249: BleepalSoftware (https://bleepal.com)&lt;br /&gt;
*ID 485000 - 485049: Gest Info Service Plus (contact@gest-plus.fr)&lt;br /&gt;
*ID 485050 - 489999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 490000 - 490049: VOLD (https://vold.lu)&lt;br /&gt;
*ID 490050 - 490069: QUANTIVO (http://quantivo.eu/)&lt;br /&gt;
*ID 490070 - 490999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 491000 - 491049: NORD ERP CRM (https://www.nord-erp-crm.fr/)&lt;br /&gt;
*ID 491050 - 491099: KJR-online (https://kjr-online.fr/)&lt;br /&gt;
*ID 491100 - 491149: eNova&lt;br /&gt;
*ID 491150 - 491199: App 4 Business&lt;br /&gt;
*ID 491200 - 491249: Mil24 (http://www.mil24.com.py)&lt;br /&gt;
*ID 491250 - 491299: M2AM&lt;br /&gt;
*ID 491300 - 491349: luigifab (https://github.com/luigifab), also reuse id:105009 for Sentry fork&lt;br /&gt;
*ID 491350 - 491399: Frédéric France (https://github.com/frederic34)&lt;br /&gt;
*ID 491400 - 491449: E-dem (https://www.e-dem.com/)&lt;br /&gt;
*ID 491450 - 491499: Burofree (https://burofreeai.es)&lt;br /&gt;
*ID 491500 - 491549: EMDELEN (https://emdelen.fr/)&lt;br /&gt;
*ID 491550 - 491599: eSoUrCeS Technologie (https://techno.esources.ca/) - Canada&lt;br /&gt;
*ID 491600 - 491649: GoSouce Peru - Peru&lt;br /&gt;
*ID 491650 - 491669: Kaféin Studio (https://kafein.studio) - France&lt;br /&gt;
*ID 491670 - 491699: Neykinfo  - France&lt;br /&gt;
*ID 491700 - 491999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 492000 - 492020: Anura (https://www.anura.fr/)&lt;br /&gt;
*ID 492021 - 492999: &#039;&#039;&#039;Free (take ranges of 20 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 493000 - 493020: Bourez Bastien EI (https://bastien-b.fr/)&lt;br /&gt;
*ID 493051 - 493071: benhmida ilyess (bhilyess98@gmail.com)&lt;br /&gt;
*ID 493101 - 493120: George TS, George SP (gspanos@makeasite.gr)&lt;br /&gt;
*ID 493200 - 493219: Stéphane Mallet (framagit.org/Steph501)&lt;br /&gt;
*ID 499001 - 499020: IT GENIUSES (https://www.itgeniuses.com)&lt;br /&gt;
*ID 499051 - 499071: KREATIV PROJECT MANAGEMENT&lt;br /&gt;
&lt;br /&gt;
DO NOT ADD RECORD HERE, PLEASE FILL HOLES FIRST !!!!&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=ID &amp;gt; 500000=&lt;br /&gt;
&lt;br /&gt;
This range can&#039;t be reserved. It is a common range. If you don&#039;t plan to distribute your module, you can use an ID in this range with no need to reserve it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t already have reserved ids and need some, please don&#039;t use hazardous number and use a number higher than 500000, but it is better to ask a wiki account, and reserve your own range by editing the  100000 - 499999 range (20 ids at once).&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=D%C3%A9veloppement_module&amp;diff=45466</id>
		<title>Développement module</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=D%C3%A9veloppement_module&amp;diff=45466"/>
		<updated>2019-12-31T15:04:23Z</updated>

		<summary type="html">&lt;p&gt;StephM: Corrections orthographiques&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Module_development --&amp;gt;&lt;br /&gt;
[[en:Module_development]]&lt;br /&gt;
[[es:Desarrollo_de_un_módulo]]&lt;br /&gt;
[[de:Modul_Entwicklung]]&lt;br /&gt;
[[zh:模块开发]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Noyau]]&lt;br /&gt;
{{TemplateDocDev}}&lt;br /&gt;
Pour créer un nouveau module, il existe plusieurs étapes. Ce didacticiel a pour but de vous décrire chacune d&#039;elles afin d&#039;ajouter un module permettant d&#039;étendre les possibilités de Dolibarr, comme par exemple ajouter une ou plusieurs des fonctionnalités suivantes:&lt;br /&gt;
&lt;br /&gt;
*Ajouter de nouvelles tables en base&lt;br /&gt;
*Ajouter vos propres entrées dans les menus&lt;br /&gt;
*Ajouter des écrans de saisie/consultation de nouvelle tables&lt;br /&gt;
*Ajouter ou supprimer des onglets sur les pages de vues/édition des objets (facture, produit, commande, événement, ...)&lt;br /&gt;
*Ajouter des exports prédéfinis pour la fonction export&lt;br /&gt;
*Ajouter de nouvelles boites pour la home page&lt;br /&gt;
*Ajouter des variables de substitution&lt;br /&gt;
*Définir de nouvelles permissions&lt;br /&gt;
*Déclencher du code automatiquement sur une action Dolibarr particulière&lt;br /&gt;
*Insérer votre code aux emplacements hooks de Dolibarr&lt;br /&gt;
*Ajouter un module de numérotation&lt;br /&gt;
*Ajouter un modèle de document&lt;br /&gt;
*Ajouter un nouveau thème&lt;br /&gt;
&lt;br /&gt;
etc...&lt;br /&gt;
&lt;br /&gt;
Les chapitres suivants vous présentent comment réaliser tout cela en manuel de manière simple.&lt;br /&gt;
&lt;br /&gt;
=[[File:Art.png]] Création de Module avec le générateur de module=&lt;br /&gt;
Depuis Dolibarr 9.0 il est possible de créer les fichiers principaux de votre module avec le &amp;quot;Générateur de module&amp;quot; (aussi appelé &amp;quot;Module Builder&amp;quot;). Pour l&#039;activer :&lt;br /&gt;
&lt;br /&gt;
*Activez le module &amp;quot;Générateur de Module&amp;quot; dans la section &amp;quot;Outils multi-modules&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Mod_builder_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*puis cliquez sur l’icône &amp;quot;bug&amp;quot; qui est apparue dans la barre de menu en haut à droite&lt;br /&gt;
&lt;br /&gt;
[[File:Mod_builder_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=[[File:Art.png]] Exemple de modèle de module externe=&lt;br /&gt;
Un bon modéle/squelette de module externe Dolibarr est disponible ici : [https://github.com/Dolibarr/dolibarr/tree/develop/htdocs/modulebuilder/template GitHub Dolibarr Module Modèle]&lt;br /&gt;
&lt;br /&gt;
=[[File:Art.png]] Créer un module=&lt;br /&gt;
Les sous chapitres suivant décrivent les actions à faire pour créer un module Dolibarr. Les premiers chapitres sont obligatoires quelle que soit la vocation du module, les suivants dépendront de ce que doit faire le module.&lt;br /&gt;
&lt;br /&gt;
==Créer un descripteur de Module (obligatoire)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : Obligatoire dès qu&#039;une extension est développée, quelle que soit sa vocation (sauf pour l&#039;ajout de thèmes ou de modèles de documents). &lt;br /&gt;
&#039;&#039;&#039;Depuis Dolibarr 9.0, il est possible de créer le descripteur de votre module avec le &amp;quot;Générateur de module&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Créer votre descripteur avec le générateur de module===&lt;br /&gt;
&lt;br /&gt;
*Lancez le générateur de module en cliquant sur l’icône &amp;quot;bug&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:Mod_builder_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Entrez le nom de votre module sans espaces (le nom de votre module NE DOIT PAS CONTENIR le caractère underscore ou tiret bas : _)&lt;br /&gt;
&lt;br /&gt;
[[File:Mod_builder_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Vous pourrez alors modifier les paramètres du descriptif du module :&lt;br /&gt;
&lt;br /&gt;
[[File:Mod_builder_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Alternative : créer votre descripteur manuellement (sans utiliser le générateur de module)===&lt;br /&gt;
La première étape est donc de créer un fichier de description du module (descripteur). Pour cela:&lt;br /&gt;
&lt;br /&gt;
*Créez le répertoire &#039;&#039;&#039;/htdocs/&#039;&#039;monmodule&#039;&#039;/core/modules&#039;&#039;&#039;. Puis, allez dans le répertoire &#039;&#039;&#039;dev/skeletons&#039;&#039;&#039; et recopiez le fichier modMyModule.class.php dans ce répertoire &#039;&#039;&#039;htdocs/&#039;&#039;monmodule&#039;&#039;/core/modules&#039;&#039;&#039;.&lt;br /&gt;
*Renommez le fichier mod&#039;&#039;&#039;MyModule&#039;&#039;&#039;.class.php en modifiant seulement la partie &#039;&#039;&#039;MyModule&#039;&#039;&#039; (le fichier doit commencer par mod)&lt;br /&gt;
&lt;br /&gt;
Ensuite, modifiez le contenu de ce fichier afin de remplacer :&lt;br /&gt;
&lt;br /&gt;
*les &#039;&#039;modMyModule&#039;&#039; en une valeur qui corresponde à la vocation de votre module. Cette valeur doit toujours commencer par &#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;mod&#039;&#039;&#039;&#039; et ne contenir que des &#039;&#039;&#039;caractères alphabétiques&#039;&#039;&#039;.&lt;br /&gt;
*$this-&amp;gt;numero = &#039;&#039;100000&#039;&#039; par un numéro de module libre. Pour éviter tout conflit, vous pouvez consulter la page suivante pour retrouver les numéros déjà alloués : [[List of modules id|Liste des id de modules]].&lt;br /&gt;
*Modifier éventuellement les autres variables définies dans le constructeurs (Voir le commentaire dans le code du squelette pour leur signification).&lt;br /&gt;
&lt;br /&gt;
Le descripteur de votre module est alors en place.&lt;br /&gt;
&lt;br /&gt;
===Tester votre descripteur===&lt;br /&gt;
&lt;br /&gt;
Lancez Dolibarr et allez sur la page &#039;&#039;&#039;Configuration-&amp;gt;module&#039;&#039;&#039;, vous devez voir apparaître une nouvelle ligne avec votre nouveau module et la possibilité de l&#039;activer ou non (parcourez tous les onglets de chaque catégories de modules jusqu&#039;à le retrouver).&lt;br /&gt;
C&#039;est la valeur de $this-&amp;gt;special qui détermine dans quel onglet se trouve votre module.&lt;br /&gt;
&lt;br /&gt;
===Nom de module===&lt;br /&gt;
&lt;br /&gt;
Le nom de votre module NE DOIT PAS CONTENIR le caractère underscore ou tiret bas : _&lt;br /&gt;
&lt;br /&gt;
==Arborescence d&#039;un nouveau module==&lt;br /&gt;
Voici l&#039;arborescence à respecter pour l&#039;organisation des fichiers d&#039;un module.&lt;br /&gt;
&lt;br /&gt;
Rem: Seule la deuxième ligne est obligatoire.&lt;br /&gt;
{{TemplateModuleTreeSimple}}&lt;br /&gt;
&lt;br /&gt;
Un bon modèle/squelette de module externe Dolibarr est disponible ici : [https://github.com/Dolibarr/dolibarr/tree/develop/htdocs/modulebuilder/template GitHub Dolibarr Module Modèle]&lt;br /&gt;
&lt;br /&gt;
==Créer vos tables SQL et les classes PHP DAO (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039;: Si votre module a besoin de gérer des données qui lui sont propres&lt;br /&gt;
&lt;br /&gt;
===Créer vos fichiers .sql===&lt;br /&gt;
Si votre module a vocation à gérer des données bien à lui, qui n&#039;existent pas en base dans la version standard de Dolibarr, il est nécessaire de définir des tables SQL pour stocker ces données.&lt;br /&gt;
&lt;br /&gt;
Créer un sous-répertoire &#039;&#039;&#039;sql&#039;&#039;&#039; dans le répertoire de votre module (par exemple &#039;&#039;&#039;htdocs/monmodule/sql&#039;&#039;&#039;) afin d&#039;y placer les scripts sql que vous allez créer.&lt;br /&gt;
&lt;br /&gt;
Ensuite, vérifiez dans votre fichier descripteur de module, dans la fonction &#039;&#039;&#039;init&#039;&#039;&#039; que la ligne&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$this-&amp;gt;_load_tables(&#039;/mymodule/sql/&#039;);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n&#039;est pas commentée.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Règles à respecter:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Ajoutez les fichiers d&#039;ordre de création de vos tables sur le principe d&#039;un fichier &#039;&#039;&#039;llx_matable.sql&#039;&#039;&#039; par table accompagné éventuellement du fichier &#039;&#039;&#039;llx_matable.key.sql&#039;&#039;&#039; (voir les fichiers existants dans &#039;&#039;&#039;install/mysql/tables&#039;&#039;&#039; pour exemple).&lt;br /&gt;
*Les types et noms recommandés pour les champs SQL sont définis sur la page [[https://wiki.dolibarr.org/index.php/Langages_et_normes#R.C3.A8gles_de_codage_SQL]].&lt;br /&gt;
*Pour ce qui est des commandes permettant d&#039;ajouter/manipuler des données, elles doivent toutes se trouver dans un fichier nommé &#039;&#039;&#039;data.sql&#039;&#039;&#039; situé dans le même répertoire &#039;&#039;&#039;/monmodule/sql/&#039;&#039;&#039;.&lt;br /&gt;
*N&#039;utilisez pas &amp;quot;chaine&amp;quot; mais &#039;chaine&#039; car les guillemets doubles (&amp;quot;) ont une signification particulière en PostGreSQL&lt;br /&gt;
&lt;br /&gt;
Exemple de contenu de fichier data.sql&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 delete from llx_const where name=&#039;MONMODULE_IT_WORKS&#039; and entity=&#039;__ENTITY__&#039;;&lt;br /&gt;
 insert into llx_const (name, value, type, note, visible, entity) values (&#039;MONMODULE_IT_WORKS&#039;,&#039;1&#039;,&#039;chaine&#039;,&#039;A constant for my module&#039;,1,&#039;__ENTITY__&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les ordres SQL des fichiers doivent être opérationnels pour la base de données &#039;&#039;&#039;mysql&#039;&#039;&#039;.&lt;br /&gt;
Rem: Les fichiers des autres bases ne sont pas à maintenir. Ils sont lus et convertis à la volée par le driver de la base de données.&lt;br /&gt;
&lt;br /&gt;
===Tester vos fichiers .sql===&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers prêts, vous pouvez retourner sous Dolibarr puis désactiver le module, dropper les tables en base et réactiver le module.&lt;br /&gt;
Les tables doivent alors être recréées par l&#039;activation du module.&lt;br /&gt;
Si tel n&#039;est pas le cas, vérifiez vos scripts en les passant à la main, ou consultez les logs Dolibarr.&lt;br /&gt;
&lt;br /&gt;
===Générer la classe PHP DAO d&#039;accès aux tables===&lt;br /&gt;
&lt;br /&gt;
Une fois votre ou vos tables créées en base, allez dans le répertoire &#039;&#039;&#039;dev/skeletons&#039;&#039;&#039;, copiez le fichier &#039;&#039;&#039;build_class_from_table.php&#039;&#039;&#039; dans le répertoire sql/ de votre module, et lancez le script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;php build_class_from_table.php nomtable&amp;lt;/source&amp;gt;&lt;br /&gt;
Remarque : Si la commande ne fonctionne pas, essayez d&#039;utiliser php-cli plutot que php.&lt;br /&gt;
&lt;br /&gt;
Ceci génèrera un fichier &#039;&#039;&#039;out.nomtable.class.php&#039;&#039;&#039; qui contient la classe de gestion de la table nomtable.&lt;br /&gt;
Dans cette classe, se trouve des méthodes CRUD (Create/Read/Update/Delete) déjà opérationnelles pour faire un insert, un fetch (select), un update, un delete d&#039;une ligne de la table.&lt;br /&gt;
Supprimer juste le &amp;quot;out&amp;quot; du nom de fichier et placer votre fichier dans le sous-répertoire de &#039;&#039;&#039;htdocs&#039;&#039;&#039; propre à votre module (Dans &#039;&#039;&#039;htdocs/monmodule&#039;&#039;&#039; par exemple).&lt;br /&gt;
&lt;br /&gt;
Un fichier &#039;&#039;&#039;out.nomtable_script.php&#039;&#039;&#039; a également été généré et contient un exemple de code pour utiliser la classe pour chacune des 4 méthodes CRUD.&lt;br /&gt;
&lt;br /&gt;
==Affichage des onglets (optionnel)==&lt;br /&gt;
&lt;br /&gt;
===Ajouter ou supprimer des onglets sur les fiches objets===&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : Pour ajouter votre propre onglet parmi les onglets standard d&#039;une fiche entité (facture, commande, proposition commercial, adhérent...)&lt;br /&gt;
&lt;br /&gt;
Pour cela, allez dans le fichier descripteur de module précédemment créé et modifiez le tableau $this-&amp;gt;tabs:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	// Array to add new pages in new tabs or remove existing one&lt;br /&gt;
	$this-&amp;gt;tabs = array(&#039;objecttype:+tabname1:Title1:mylangfile@monmodule:$user-&amp;gt;rights-&amp;gt;monmodule-&amp;gt;read:/monmodule/mapagetab1.php?id=__ID__&#039;    // To add a new tab identified by code tabname1&lt;br /&gt;
                            &#039;objecttype:+tabname2:Title2:mylangfile@monmodule:$user-&amp;gt;rights-&amp;gt;monmodule-&amp;gt;read:/monmodule/mapagetab2.php?id=__ID__&#039;,   // To add a new tab identified by code tabname2&lt;br /&gt;
                            &#039;objecttype:-tabname&#039;);                                                     // To remove an existing tab identified by code tabname&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau doit contenir une liste de chaîne, chaque chaîne représentant un nouvel onglet.&lt;br /&gt;
Le format de la chaîne étant composé de 6 parties séparées par &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*Partie 1 : le type d&#039;élément (objecttype) dans lequel doit apparaître l&#039;onglet qui est une valeur parmi celle-ci:&lt;br /&gt;
{{TemplateModuleTabs-fr}}&lt;br /&gt;
&lt;br /&gt;
*Partie 2 : nom de code pour l&#039;onglet à ajouter (commence par +) ou à enlever (commence par -)&lt;br /&gt;
*Partie 3 : le titre de l&#039;onglet. Cela peut être un libellé en dur ou mieux un code traduction présent dans un fichier lang.&lt;br /&gt;
*Partie 4 : le nom du fichier .lang (sans l&#039;extension .lang) qui contient la correspondance entre le code traduction et le libellé à afficher. Si ce com est suivi de @monmodule, Dolibarr cherche le fichier dans le répertoire lang propre au module, c&#039;est à dire htdocs/monmodule/langs/code_CODE/monmodule.lang, sinon Dolibarr cherche le fichier traduction dans htdocs/langs/code_CODE/mylangfile.lang&lt;br /&gt;
*Partie 5 : une condition à tester pour savoir si l&#039;onglet doit être visible ou pas. Mettre &#039;1&#039; pour qu&#039;il soit toujours visible.&lt;br /&gt;
*Partie 6 : l&#039;url de la page à afficher quand on clique sur l&#039;onglet. La chaine __ID__ sera remplacée automatiquement par l&#039;Id de l&#039;entité concernée.&lt;br /&gt;
&lt;br /&gt;
Pour que la déclaration soit effective, il faut désactiver et réactiver le module.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le contenu de l&#039;onglet avec des données issues de la base, voir le chapitre suivant.&lt;br /&gt;
&lt;br /&gt;
===Ajouter les onglets standard d&#039;un objet sur sa propre page===&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : Pour afficher les onglets standard d&#039;une fiche entité (produit, tiers, etc.) sur votre propre page onglet d&#039;une entité.&lt;br /&gt;
&lt;br /&gt;
Il faut appliquer la procédure suivante :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Inclure les fichiers définissant les fonctions utiles dans vos fichiers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour chaque fiche entité, il y a deux fichiers à inclure avec l&#039;instruction&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;require_once($url_fichier) ;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de fichiers à inclure (DOL_DOCUMENT_ROOT correspond au dossier dolibarr/htdocs/) :&lt;br /&gt;
&lt;br /&gt;
*Entité tiers (thirdparty) :&lt;br /&gt;
**DOL_DOCUMENT_ROOT/societe/class/societe.class.php&lt;br /&gt;
**DOL_DOCUMENT_ROOT/core/lib/company.lib.php&lt;br /&gt;
*Entité produit (product) :&lt;br /&gt;
**DOL_DOCUMENT_ROOT/product/class/product.class.php&lt;br /&gt;
**DOL_DOCUMENT_ROOT/core/lib/product.lib.php&lt;br /&gt;
*Entité facture (invoice) :&lt;br /&gt;
**DOL_DOCUMENT_ROOT/compta/facture/facture.class.php&lt;br /&gt;
**DOL_DOCUMENT_ROOT/core/lib/invoice.lib.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Créer et charger l&#039;objet à afficher dans votre onglet&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Créez l&#039;objet de la classe voulue, et récupérez les données de l&#039;objet à partir de la base de données. Pour cela il faut utiliser les fonctions fetch() de la classe correspondante, en passant en paramètre l&#039;identifiant de l&#039;objet que vous récupérez depuis l&#039;url (ex : /mononglet.php?id=1).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Exemple :&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$id=GETPOST(&#039;id&#039;,&#039;int&#039;);&lt;br /&gt;
$ref=GETPOST(&#039;ref&#039;,&#039;alpha&#039;);&lt;br /&gt;
$product = new Product($db) ;&lt;br /&gt;
$result = $product-&amp;gt;fetch($id, $ref) ; //Tester $result pour vérifier que l&#039;accès à la base s&#039;est bien passée&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Récupérer la liste des onglets correspondants à l&#039;entité choisie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Utilisez la fonction XXX_prepare_head($obj), ou XXX est le nom de l&#039;entité, permettant de créer un tableau contenant les définitions des onglets à afficher. Le paramètre à passer est l&#039;objet pour lequel vous voulez afficher les onglets.&lt;br /&gt;
&lt;br /&gt;
Le tableau retourné est composé de la façon suivante :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$head        // Tableau des onglets&lt;br /&gt;
$head[$h]    // Élément décrivant un onglet. Il y aura autant de $h que d&#039;onglets à afficher&lt;br /&gt;
$head[$h][0] // Url de la page affichée quand on clique sur l&#039;onglet&lt;br /&gt;
$head[$h][1] // Titre de l’onglet&lt;br /&gt;
$head[$h][2] // Code de l&#039;onglet, à utiliser pour choisir quel onglet sera &#039;actif&#039; (voir paragraphe suivant)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Exemple :&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$head = product_prepare_head($product, $user) ; //le paramètre $user n&#039;est pas présent sur certaines fonctions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Afficher les onglets sur votre page onglet&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Utilisez la fonction dol_fiche_head() qui affiche les onglets contenus dans le tableau $head retourné par XX_prepare_head().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
dol_fiche_head($links, $active=&#039;0&#039;, $title=&#039;&#039;, $notab=0, $picto=&#039;&#039;)&lt;br /&gt;
//$links  // Tableau des onglets, appelé $head plus haut.&lt;br /&gt;
//$active // Onglet actif (mettre le nom de l&#039;onglet défini dans votre fichier de module, ou un nom contenu dans $head[$h][2]). Cet onglet sera mis en surbrillance&lt;br /&gt;
//$title  // ?&lt;br /&gt;
//$notab  // Mettre ce paramètre à 1 permet de ne pas afficher de zone bleue en dessous des onglets.&lt;br /&gt;
//$picto  // Nom de l&#039;image à utiliser au début de la barre des onglet. Les choix suivant sont possibles :&lt;br /&gt;
//            product&lt;br /&gt;
//            service&lt;br /&gt;
//            company&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction affiche les onglets voulus et ouvre un élément &#039;&#039;&amp;lt; div class=&amp;quot;&amp;quot; &amp;gt;&#039;&#039; qui correspond à la zone bleue sous les onglets (si paramètre $notab = 0). Pour fermer la zone bleue, il suffit de fermer l&#039;élément &#039;&#039;&amp;lt; /div &amp;gt;&#039;&#039; dans le code PHP.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Remarque&#039;&#039; :&lt;br /&gt;
Pour plus de détail, se référer à la [http://www.dolibarr.fr/doxygen/ documentation Doxygen] ou directement au code de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
==Créer vos pages écran PHP (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : Si l&#039;objet de votre module est d&#039;ajouter des fonctionnalités qui nécessitent de nouveaux écrans.&lt;br /&gt;
&lt;br /&gt;
===Créer une page écran PHP brute===&lt;br /&gt;
Vous pouvez ensuite créer vos pages PHP, qui se basent sur les données de vos tables, en utilisant les squelettes fournis comme exemple dans le répertoire &#039;&#039;&#039;modulebuilder&#039;&#039;&#039; (Pour le développement d&#039;un script en ligne de commande, voir [[Développement de scripts]]).&lt;br /&gt;
&lt;br /&gt;
Pour créer une nouvelle page écran utilisateur, créez un sous-répertoire de &#039;&#039;&#039;htdocs&#039;&#039;&#039; (si non déjà fait) propre à votre module (Dans &#039;&#039;&#039;htdocs/monmodule&#039;&#039;&#039; par exemple) afin d&#039;y placer les pages que vous allez créer.&lt;br /&gt;
&lt;br /&gt;
Y recopier le fichier &#039;&#039;&#039;myobject_page.php&#039;&#039;&#039; qui va servir de point de départ.&lt;br /&gt;
Modifiez le fichier afin que le main.inc.php soit trouvé&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Load Dolibarr environment&lt;br /&gt;
$res=0;&lt;br /&gt;
// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)&lt;br /&gt;
if (! $res &amp;amp;&amp;amp; ! empty($_SERVER[&amp;quot;CONTEXT_DOCUMENT_ROOT&amp;quot;])) $res=@include($_SERVER[&amp;quot;CONTEXT_DOCUMENT_ROOT&amp;quot;].&amp;quot;/main.inc.php&amp;quot;);&lt;br /&gt;
// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME&lt;br /&gt;
$tmp=empty($_SERVER[&#039;SCRIPT_FILENAME&#039;])?&#039;&#039;:$_SERVER[&#039;SCRIPT_FILENAME&#039;];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;&lt;br /&gt;
while($i &amp;gt; 0 &amp;amp;&amp;amp; $j &amp;gt; 0 &amp;amp;&amp;amp; isset($tmp[$i]) &amp;amp;&amp;amp; isset($tmp2[$j]) &amp;amp;&amp;amp; $tmp[$i]==$tmp2[$j]) { $i--; $j--; }&lt;br /&gt;
if (! $res &amp;amp;&amp;amp; $i &amp;gt; 0 &amp;amp;&amp;amp; file_exists(substr($tmp, 0, ($i+1)).&amp;quot;/main.inc.php&amp;quot;)) $res=@include(substr($tmp, 0, ($i+1)).&amp;quot;/main.inc.php&amp;quot;);&lt;br /&gt;
if (! $res &amp;amp;&amp;amp; $i &amp;gt; 0 &amp;amp;&amp;amp; file_exists(dirname(substr($tmp, 0, ($i+1))).&amp;quot;/main.inc.php&amp;quot;)) $res=@include(dirname(substr($tmp, 0, ($i+1))).&amp;quot;/main.inc.php&amp;quot;);&lt;br /&gt;
// Try main.inc.php using relative path&lt;br /&gt;
if (! $res &amp;amp;&amp;amp; file_exists(&amp;quot;../main.inc.php&amp;quot;)) $res=@include(&amp;quot;../main.inc.php&amp;quot;);&lt;br /&gt;
if (! $res &amp;amp;&amp;amp; file_exists(&amp;quot;../../main.inc.php&amp;quot;)) $res=@include(&amp;quot;../../main.inc.php&amp;quot;);&lt;br /&gt;
if (! $res &amp;amp;&amp;amp; file_exists(&amp;quot;../../../main.inc.php&amp;quot;)) $res=@include(&amp;quot;../../../main.inc.php&amp;quot;);&lt;br /&gt;
if (! $res) die(&amp;quot;Include of main fails&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Comme vous pouvez le constater, plusieurs tentatives de chargement du fichier main.inc.php (ou master.inc.php) ont été tentées. Le but est de réussir dans le plus grand nombre de cas possibles. Le minimum est de 2 lignes: une pour essayer de charger le fichier master / main.inc.php dans le répertoire racine de dolibarr et une autre pour essayer de charger le fichier afin de prendre en charge le cas où le module est déployé dans le répertoire &amp;quot;custom&amp;quot;. Mais vous pouvez avoir à gérer plus de situations. L&#039;exemple fourni devrait pouvoir charger le fichier main / master.inc.php dans presque toutes les situations / configurations.&lt;br /&gt;
&lt;br /&gt;
Notez que vous pouvez ajouter plus &amp;quot;../&amp;quot; en fonction de la profondeur du fichier par rapport à l&#039;arborescence de votre module.&lt;br /&gt;
&lt;br /&gt;
C&#039;est dans le main qu&#039;est chargé l&#039;environnement technique ainsi que les habilitations. Les variables objets suivantes sont alors positionnées:&lt;br /&gt;
&lt;br /&gt;
*$user    L&#039;objet qui contient les caractéristiques de l&#039;utilisateur + ses droits.&lt;br /&gt;
*$conf    L&#039;objet qui contient la configuration de Dolibarr.&lt;br /&gt;
*$db      L&#039;objet qui contient le handler de connexion à la base de données.&lt;br /&gt;
*$langs   L&#039;objet qui contient la langue de l&#039;utilisateur.&lt;br /&gt;
&lt;br /&gt;
*L&#039;inclusion d&#039;une classe ou librairie dédiée au module, sans savoir d&#039;où le fichier sera appelé, se fait en utilisant une fonction de Dolibarr (et non en utilisant directement le include_once)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Exemple :&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
dol_include_once(&#039;/monmodule/class/maclasse.class.php&#039;, &#039;MaClasse&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*L&#039;appel des classes fournies en standard avec Dolibarr se fera par contre par le require_once directe avec la syntaxe suivante:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Exemple :&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
require_once DOL_DOCUMENT_ROOT.&#039;/core/class/doli.class.php&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La raison est que si le dol_include_once est pratique car il scanne chaque répertoire de chemin alternatif pour trouver le fichier, il est aussi moins performant car génère des accès et recherches disque à chaque appel (en effet, PHP intègre un cache des fichiers lus mais n&#039;intègre pas un cache des fichiers &amp;quot;non trouvés&amp;quot;. Et comme un fichier donné n&#039;est que dans une seule arborescence, il y a toujours une arborescence alternative où il ne se trouve pas et qui génère des accès superflus au disque dur, pénalisant en terme de performance. Comme pour les fichiers internes à Dolibarr, on connait toujours le chemin exacte, le require_once avec ce chemin direct doit être préféré).&lt;br /&gt;
&lt;br /&gt;
===Remplacer les parties d&#039;écrans templatés (version 3.3+)===&lt;br /&gt;
Certaines portions d&#039;écran de Dolibarr sont isolées dans des fichiers templates.&lt;br /&gt;
Vous pouvez développer un module pour remplacer un ou plusieurs de ces templates par les vôtres.&lt;br /&gt;
{{ToComplete}}&lt;br /&gt;
&lt;br /&gt;
===Accès à la base===&lt;br /&gt;
Si vous avez besoin de réaliser des modifications en base dans votre propre table ajoutée, utilisez la classe générée plus haut qui contient les méthodes pour cela.&lt;br /&gt;
&lt;br /&gt;
Si toutefois vous voulez faire des accès dans des tables sans objet PHP dédié, ceci reste possible (par exemple pour récupérer une liste d&#039;enregistrement). Dans ce cas, pensez à suivre ces exemples:&lt;br /&gt;
&lt;br /&gt;
Pour un insert, update ou delete :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$db-&amp;gt;begin();   // Debut transaction&lt;br /&gt;
$db-&amp;gt;query(&amp;quot;Ma requete insert, update ou delete&amp;quot;);&lt;br /&gt;
$db-&amp;gt;commit();       // Valide&lt;br /&gt;
ou $db-&amp;gt;rollback()  // Annule&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une lecture :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$resql=$db-&amp;gt;query(&amp;quot;Ma requete select&amp;quot;);&lt;br /&gt;
if ($resql)&lt;br /&gt;
{&lt;br /&gt;
	$num = $db-&amp;gt;num_rows($resql);&lt;br /&gt;
	$i = 0;&lt;br /&gt;
	if ($num)&lt;br /&gt;
	{&lt;br /&gt;
		while ($i &amp;lt; $num)&lt;br /&gt;
		{&lt;br /&gt;
			$obj = $db-&amp;gt;fetch_object($resql);&lt;br /&gt;
			if ($obj)&lt;br /&gt;
			{&lt;br /&gt;
				// You can use here results&lt;br /&gt;
				print $obj-&amp;gt;field1;&lt;br /&gt;
				print $obj-&amp;gt;field2;&lt;br /&gt;
			}&lt;br /&gt;
			$i++;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Définition du style===&lt;br /&gt;
Pour que le look de la page soit aligné avec le thème Dolibarr, il est nécessaire d&#039;utiliser les styles des CSS de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&lt;br /&gt;
*class=&amp;quot;&#039;&#039;&#039;liste_titre&#039;&#039;&#039;&amp;quot; sur les balises &#039;&#039;tr&#039;&#039; et &#039;&#039;td&#039;&#039; pour une ligne de titre de tableau.&lt;br /&gt;
*class=&amp;quot;&#039;&#039;&#039;pair&#039;&#039;&#039;&amp;quot; ou class=&amp;quot;&#039;&#039;&#039;impair&#039;&#039;&#039;&amp;quot; sur les balises &#039;&#039;tr&#039;&#039; et &#039;&#039;td&#039;&#039; des lignes de données de tableau.&lt;br /&gt;
*class=&amp;quot;&#039;&#039;&#039;flat&#039;&#039;&#039;&amp;quot; sur tous les champs de saisie (&#039;&#039;input, select, textarea&#039;&#039;...).&lt;br /&gt;
*class=&amp;quot;&#039;&#039;&#039;button&#039;&#039;&#039;&amp;quot; sur les objets de type &#039;&#039;input type=&amp;quot;submit&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Utilisez le sélecteur de date de Dolibarr===&lt;br /&gt;
Si vous le désirez, vous pouvez profiter du sélecteur de date dans des écrans Dolibarr. Pour cela, utilisez la ligne suivante:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form=new Form($db);&lt;br /&gt;
$form-&amp;gt;select_date(&#039;&#039;,&#039;mykey&#039;,0,0,0,&amp;quot;myform&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La chaîne mykey identifie la zone date. Il faut y mettre une valeur différente s&#039;il y a plusieurs zones.&lt;br /&gt;
La chaine myform est le nom de la zone FORM (dans form name=&amp;quot;myform&amp;quot; de la page HTML).&lt;br /&gt;
L&#039;affichage d&#039;un sélecteur de date doit donc être intégré dans une zone FORM Html.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer la valeur, à l&#039;issu du POST, la commande est:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$mydate = dol_mktime(12, 0 , 0, $_POST[&#039;mykeymonth&#039;], $_POST[&#039;mykeyday&#039;], $_POST[&#039;mykeyyear&#039;]);&lt;br /&gt;
print strftime(&#039;%A %d %B %Y&#039;, $mydate);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Définir votre page de configuration (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : si votre module offre plusieurs options paramétrables.&lt;br /&gt;
&lt;br /&gt;
===Créez votre page d&#039;édition de configuration===&lt;br /&gt;
Si votre module offre plusieurs options paramétrables, il est nécessaire de créer une page PHP pour éditer les options (qui sont stockées dans la [[Table llx_const|table &#039;&#039;&#039;llx_const&#039;&#039;&#039;]]).&lt;br /&gt;
Créez une page PHP nommée &#039;&#039;&#039;monmodule_setupapage.php&#039;&#039;&#039; qui affiche les options possibles et les met à jour.&lt;br /&gt;
Il est nécessaire de prendre exemple sur une page dans &#039;&#039;&#039;/admin&#039;&#039;&#039; qui vous montre la méthode pour lire ou sauvegarder en base votre option.&lt;br /&gt;
Placez cette page de configuration dans le répertoire &#039;&#039;&#039;/admin&#039;&#039;&#039; également.&lt;br /&gt;
Ensuite dans le descripteur de module, modifiez la variable pour indiquer le nom de cette page PHP (sans le chemin qui n&#039;est pas nécessaire, la page étant forcément dans le rep admin).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;config_page_url = array(&amp;quot;monmodule_setupapage.php&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testez votre page===&lt;br /&gt;
Allez sur la page &#039;&#039;&#039;Configuration-&amp;gt;module&#039;&#039;&#039;, vous devez voir apparaître une icône qui permet d&#039;accéder à la page de configuration et vous devez être capable de modifier ces options et les voir conservées en base.&lt;br /&gt;
&lt;br /&gt;
==Définir vos entrées de menu (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : si vous avez créé des pages PHP, il est nécessaire que ces écrans soient accessibles depuis le menu Dolibarr.&lt;br /&gt;
&lt;br /&gt;
===Définissez vos entrées menus===&lt;br /&gt;
Pour cela, il vous faut définir dans le fichier descripteur de module, le tableau this-&amp;gt;menu qui déclare les menus.&lt;br /&gt;
Ce tableau contient toutes les entrées qui apparaîtront dans les menus une fois le module activé.&lt;br /&gt;
Le fichier de descripteur de module exemple &#039;&#039;&#039;modMonModule.class.php&#039;&#039;&#039; possède un exemple de déclaration de menu haut ainsi que de ses entrées menu gauche associées.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple de déclaration d&#039;entrées de menu dans le fichier descripteur:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Main menu entries&lt;br /&gt;
$this-&amp;gt;menu = array();			// List of menus to add&lt;br /&gt;
$r=0;&lt;br /&gt;
&lt;br /&gt;
// Add here entries to declare new menus&lt;br /&gt;
// Example to declare the Top Menu entry:&lt;br /&gt;
$this-&amp;gt;menu[$r]=array(	&#039;fk_menu&#039;=&amp;gt;0,			// Put 0 if this is a top menu&lt;br /&gt;
			&#039;type&#039;=&amp;gt;&#039;top&#039;,			// This is a Top menu entry&lt;br /&gt;
			&#039;titre&#039;=&amp;gt;&#039;MonModule top menu&#039;,&lt;br /&gt;
			&#039;mainmenu&#039;=&amp;gt;&#039;monmodule&#039;,&lt;br /&gt;
			&#039;leftmenu&#039;=&amp;gt;&#039;monmodule&#039;,&lt;br /&gt;
			&#039;url&#039;=&amp;gt;&#039;/monmodule/pagetop.php&#039;,&lt;br /&gt;
			&#039;langs&#039;=&amp;gt;&#039;mylangfile&#039;,	// Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.&lt;br /&gt;
			&#039;position&#039;=&amp;gt;100,&lt;br /&gt;
			&#039;enabled&#039;=&amp;gt;&#039;1&#039;,			// Define condition to show or hide menu entry. Use &#039;$conf-&amp;gt;monmodule-&amp;gt;enabled&#039; if entry must be visible if module is enabled.&lt;br /&gt;
			&#039;perms&#039;=&amp;gt;&#039;1&#039;,			// Use &#039;perms&#039;=&amp;gt;&#039;$user-&amp;gt;rights-&amp;gt;monmodule-&amp;gt;level1-&amp;gt;level2&#039; if you want your menu with a permission rules&lt;br /&gt;
			&#039;target&#039;=&amp;gt;&#039;&#039;,&lt;br /&gt;
			&#039;user&#039;=&amp;gt;2);				// 0=Menu for internal users, 1=external users, 2=both&lt;br /&gt;
$r++;&lt;br /&gt;
&lt;br /&gt;
// Example to declare a Left Menu entry:&lt;br /&gt;
$this-&amp;gt;menu[$r]=array(	&#039;fk_menu&#039;=&amp;gt;&#039;fk_mainmenu=xxx&#039;,	// Use &#039;fk_mainmenu=xxx&#039; or &#039;fk_mainmenu=xxx,fk_leftmenu=yyy&#039; where xxx is mainmenucode and yyy is a leftmenucode of parent menu&lt;br /&gt;
			&#039;type&#039;=&amp;gt;&#039;left&#039;,			// This is a Left menu entry&lt;br /&gt;
			&#039;titre&#039;=&amp;gt;&#039;MonModule left menu 1&#039;,&lt;br /&gt;
			&#039;mainmenu&#039;=&amp;gt;&#039;xxx&#039;,&lt;br /&gt;
                        &#039;leftmenu&#039;=&amp;gt;&#039;yyy&#039;,&lt;br /&gt;
			&#039;url&#039;=&amp;gt;&#039;/monmodule/pagelevel1.php&#039;,&lt;br /&gt;
			&#039;langs&#039;=&amp;gt;&#039;mylangfile&#039;,	// Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.&lt;br /&gt;
			&#039;position&#039;=&amp;gt;100,&lt;br /&gt;
			&#039;enabled&#039;=&amp;gt;&#039;1&#039;,			// Define condition to show or hide menu entry. Use &#039;$conf-&amp;gt;monmodule-&amp;gt;enabled&#039; if entry must be visible if module is enabled.&lt;br /&gt;
			&#039;perms&#039;=&amp;gt;&#039;1&#039;,			// Use &#039;perms&#039;=&amp;gt;&#039;$user-&amp;gt;rights-&amp;gt;monmodule-&amp;gt;level1-&amp;gt;level2&#039; if you want your menu with a permission rules&lt;br /&gt;
			&#039;target&#039;=&amp;gt;&#039;&#039;,&lt;br /&gt;
			&#039;user&#039;=&amp;gt;2);				// 0=Menu for internal users,1=external users, 2=both&lt;br /&gt;
$r++;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour conditionner l&#039;accès au menu selon des permission, modifier la propriété &#039;&#039;&#039;perms&#039;&#039;&#039; du tableau. Voir le chapitre sur les permissions un peu plus loin pour savoir comment ajouter des permissions.&lt;br /&gt;
&lt;br /&gt;
===Testez vos entrées menus===&lt;br /&gt;
Désactiver et réactiver votre module sous Dolibarr, les entrées menus doivent alors apparaître (si la condition dans &#039;enabled&#039; est vraie).&lt;br /&gt;
&lt;br /&gt;
==Définir vos propres permissions (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : Si vous voulez ajouter de nouvelles permissions.&lt;br /&gt;
&lt;br /&gt;
La définition des permissions que gérera votre module se fait dans le fichier descripteur créé dans la première étape.&lt;br /&gt;
Modifier la ligne &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;rights_class = &#039;monmodule&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
pour y mettre la bonne valeur de monmodule.&lt;br /&gt;
&lt;br /&gt;
Ensuite remplissez le tableau $this-&amp;gt;rights avec autant d&#039;entrées que de permissions différentes à gérer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;rights[$r][0] = 10001;&lt;br /&gt;
$this-&amp;gt;rights[$r][1] = &#039;Libelle par défaut de ma permission&#039;;&lt;br /&gt;
$this-&amp;gt;rights[$r][3] = 1;&lt;br /&gt;
$this-&amp;gt;rights[$r][4] = &#039;action&#039;;&lt;br /&gt;
$this-&amp;gt;rights[$r][5] = &#039;sousaction&#039;;&lt;br /&gt;
$r++;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans $this-&amp;gt;rights[$r][0], mettre un id de permission non déjà pris (Voir dans le menu &#039;&#039;&#039;Infos Système&#039;&#039;&#039; sur une installation de Dolibarr opérationnelle pour connaître les id déjà utilisés.&lt;br /&gt;
Dans $this-&amp;gt;rights[$r][3], mettre 1 si cette permission est attribué d&#039;office par défaut quand un utilisateur est créé.&lt;br /&gt;
Dans $this-&amp;gt;rights[$r][1], mettre un libellé par défaut (il sera affiché si aucune traduction n&#039;est trouvé pour votre permission dans le fichier &#039;&#039;&#039;admin.lang&#039;&#039;&#039;).&lt;br /&gt;
Dans $this-&amp;gt;rights[$r][4] et $this-&amp;gt;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 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($user-&amp;gt;rights-&amp;gt;monmodule-&amp;gt;action-&amp;gt;sousaction) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Définir vos propres box (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : si votre module amène avec lui une ou plusieurs Boxes.&lt;br /&gt;
&lt;br /&gt;
===Définissez vos box===&lt;br /&gt;
Pour cela, modifiez les tableaux $this-&amp;gt;boxes du fichier descripteur de module.&lt;br /&gt;
Il suffit d&#039;ajouter 2 lignes par fichier box que vous allez créer dans le répertoire &#039;&#039;&#039;htdocs/monmodule/core/boxes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Exemple :&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;boxes[0][&#039;file&#039;]=&#039;mabox0.php@monmodule&#039;&lt;br /&gt;
$this-&amp;gt;boxes[0][&#039;note&#039;]=&#039;Ma box 0&#039;&lt;br /&gt;
 ...&lt;br /&gt;
$this-&amp;gt;boxes[n][&#039;file&#039;]=&#039;maboxn.php@monmodule&#039;&lt;br /&gt;
$this-&amp;gt;boxes[n][&#039;note&#039;]=&#039;Ma box n&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite créez les fichiers &#039;&#039;&#039;htdocs/monmodule/core/boxes/mabox0.php&#039;&#039;&#039;, &#039;&#039;&#039;htdocs/monmodule/core/boxes/mabox1.php&#039;&#039;&#039;... en prenant exemple sur des box existantes (exemple dans le répertoire &#039;&#039;&#039;htdocs/core/boxes&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
===Testez la présence de vos box dans Dolibarr===&lt;br /&gt;
Désactivez et réactivez le module.&lt;br /&gt;
&lt;br /&gt;
Allez dans le menu &#039;&#039;&#039;Accueil - Configuration - Boite&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vos box doivent apparaître dans la liste des box activables. Activez les puis allez sur la page d&#039;accueil et vérifiez qu&#039;elles s&#039;affichent correctement.&lt;br /&gt;
&lt;br /&gt;
==Définir vos propres exports (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : si votre module amène avec lui des exports prédéfinis de données (pour ces propres tables ou des tables déjà existantes d&#039;un autre module de Dolibarr).&lt;br /&gt;
&lt;br /&gt;
===Définissez l&#039;export===&lt;br /&gt;
Pour cela, décommentez et modifiez les tableaux $this-&amp;gt;export_xxx du votre fichier descripteur de module.&lt;br /&gt;
&lt;br /&gt;
===Testez votre export===&lt;br /&gt;
Allez dans le menu outils -&amp;gt; export de Dolibarr. Votre export doit apparaitre dans la liste des exports prédéfinis disponibles (si votre module est bien activé).&lt;br /&gt;
Le choisir, vous devez alors voir les champs possibles définis dans le tableau à l&#039;étape précédente.&lt;br /&gt;
Choissez quelques champs et tentez une génération du fichier export.&lt;br /&gt;
&lt;br /&gt;
==Définir vos styles CSS (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : lorsque dans vos écrans PHP, vous utiliser des classes de styles qui ne sont pas celle des thèmes de Dolibarr (non recommandé).&lt;br /&gt;
&lt;br /&gt;
Cette fonctionnalité est décrite mais pas encore opérationnel en 2.4&lt;br /&gt;
&lt;br /&gt;
===Créez et déclarez votre feuille de style===&lt;br /&gt;
Créez un fichier de style css nommé &#039;&#039;&#039;monmodule.css&#039;&#039;&#039; ou &#039;&#039;&#039;monmodule.css.php&#039;&#039;&#039; et placez le dans le répertoire &#039;&#039;&#039;&#039;&#039;monmodule&#039;&#039;&#039;&#039;&#039; dans &#039;&#039;&#039;htdocs&#039;&#039;&#039;. Il ne peut y avoir qu&#039;un fichier css propre à chaque module.&lt;br /&gt;
Rappelons qu&#039;il vaut mieux utiliser les styles déjà existant de Dolibarr (le fichier css utilisé par Dolibarr étant le fichier &#039;&#039;&#039;themes/nomtheme/&#039;&#039;nomtheme&#039;&#039;.css.php&#039;&#039;&#039;). Ne créez un fichier css propre à votre module que si vous devez absolument gérer des styles non déjà existants.&lt;br /&gt;
Une fois votre feuille de style prête, déclarez la dans votre fichier descripteur de module en modifiant la propriété &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039;.&lt;br /&gt;
La valeur à renseigner ici doit être le chemin relatif de l&#039;URL de votre fichier css.&lt;br /&gt;
Par exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&#039;css&#039; =&amp;gt; array(&#039;/monmodule/css/monmodule.css.php&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testez votre feuille de style===&lt;br /&gt;
Désactivez et réactivez votre module.&lt;br /&gt;
&lt;br /&gt;
Appelez la page d&#039;accueil de Dolibarr. Affichez la source de la page HTML.&lt;br /&gt;
&lt;br /&gt;
Vous devriez voir dans l&#039;entête HTML, une ligne déclarant votre feuille de style.&lt;br /&gt;
&lt;br /&gt;
==Définir vos fonctions Javascript (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : lorsque dans vos écrans PHP, vous utiliser des fonctions javascript non dispo en standard (fichier lib_head.js)&lt;br /&gt;
&lt;br /&gt;
Si dans vos écrans PHP, vous utilisez des fonctions javascript, il est nécessaire de faire en sorte que vos fonctions déclarées dans un fichier javascript &#039;&#039;&#039;htdocs/monmodule/js/monmodule.js&#039;&#039;&#039; soit chargées dans l&#039;entête head html.&lt;br /&gt;
Pour demander à Dolibarr qui gère la génération de la section header d&#039;inclure un de vos fichiers javascript, il est nécessaire de fournir en paramètre de la fonction llxHeader() appelée au début de votre page, d&#039;inclure le paramètre qui contient l&#039;URL vers le js à inclure.&lt;br /&gt;
&lt;br /&gt;
Exemple pour la page /htdocs/monmodule/mapage.php :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
require(&#039;../main.inc.php&#039;);&lt;br /&gt;
$morejs=array(&amp;quot;/monmodule/js/monmodule.js&amp;quot;);&lt;br /&gt;
llxHeader(&#039;&#039;,&#039;Titre&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,$morejs,&#039;&#039;,0,0); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Déclencher du code sur un évènement Dolibarr (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : lorsque vous voulez que des actions particulières s&#039;exécutent suite au déclenchement d&#039;actions standards de Dolibarr (exemple : je veux mettre à jour une table de mon module quand une facture se crée dans Dolibarr), il vous faut créer un fichier de &#039;&#039;&#039;triggers&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Voir aussi [[Interfaces_Dolibarr_vers_exterieur|Interfaces de Dolibarr vers l&#039;exterieur]]&lt;br /&gt;
et [[Interfaces_Exterieur_vers_Dolibarr|Interfaces exterieures vers Dolibarr]]&lt;br /&gt;
&lt;br /&gt;
==Insérer votre code aux emplacement hooks de Dolibarr (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : lorsque vous voulez modifier ou ajouter du code autrement que lors d&#039;un événement métier (voir le chapitre précédent pour cela).&lt;br /&gt;
&lt;br /&gt;
Voir la page [[Système de Hooks]].&lt;br /&gt;
&lt;br /&gt;
==Ajouter un module de numérotation (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : lorsque vous voulez ajouter une règle de numérotation non couverte par les modules par défaut.&lt;br /&gt;
&lt;br /&gt;
Voir la page [[Créer un module de numérotation]].&lt;br /&gt;
&lt;br /&gt;
==Ajouter un nouveau modèle de document (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039; : lorsque vous voulez ajouter un nouveau modèle de document.&lt;br /&gt;
&lt;br /&gt;
La documentation au sujet de la génération de documents depuis des modèles est disponible sur la page [[Créer un modèle de document PDF]] ou [[Créer un modèle de document ODT]].&lt;br /&gt;
&lt;br /&gt;
==Ajouter un thème (optionnel)==&lt;br /&gt;
&#039;&#039;&#039;Quand&#039;&#039;&#039;: Lorsque vous voulez une interface aux couleurs personnalisées à votre cas.&lt;br /&gt;
&lt;br /&gt;
Voir la page [[Themes]].&lt;br /&gt;
&lt;br /&gt;
=[[File:Art.png]] Quelques règles de codage et fonctions pour développeurs=&lt;br /&gt;
Les règles de codage à suivre sont définis dans la [[Documentation Développeur|Documentation développeur]], rubrique &amp;quot;Informations Générales - Langage et normes de développement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
De nombreuses fonctions prédéfinies pour les développeurs sont disponibles et décrites sur la page [[Documentation Développeur|Documentation développeur]] sous la section &amp;quot;Les couches techniques de Dolibarr&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=[[File:Art.png]] Créer un package pour livrer et installer votre module=&lt;br /&gt;
Cette procédure doit être utilisée pour fabriquer un package afin de le soumettre sur la place de marché http://www.dolistore.com.&lt;br /&gt;
Mais vous pouvez aussi l&#039;utiliser pour distribuer facillement votre module via votre propre réseau de distribution.&lt;br /&gt;
&lt;br /&gt;
*Allez dans le répertoire &#039;&#039;&#039;/build&#039;&#039;&#039; et recopiez le fichier &#039;&#039;&#039;makepack-dolibarrmodules.conf&#039;&#039;&#039; en &#039;&#039;&#039;makepack-monmodule.conf&#039;&#039;&#039;. Attention, ce répertoire peut ne pas être fourni dans les packages de versions stables. Si c&#039;est le cas, il peut être récupéré dans le snapshot disponible en téléchargement sur le site web Dolibarr dans la rubrique Version de développement (prenez dans ce cas tout le répertoire build qui est un répertoire autonome et indépendant de la version).&lt;br /&gt;
&lt;br /&gt;
Saisissez dans ce fichier la liste des noms des nouveaux fichiers que vous avez créé pour votre module (descripteur de module, nouveaux fichiers sql de tables, page php, images, etc...)&lt;br /&gt;
&lt;br /&gt;
*Lancer le script via Perl (besoin de la version Perl 5.0 ou +):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
perl makepack-dolibarrmodule.pl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Le script vous demande le nom de votre module, sa version majeure et mineure.&lt;br /&gt;
Un fichier &#039;&#039;&#039;monmodule.zip&#039;&#039;&#039; va alors être fabriqué contenant votre module prêt pour être déployé.&lt;br /&gt;
&lt;br /&gt;
*La personne qui reçoit votre module doit alors placer le fichier dans son répertoire racine d&#039;installation de Dolibarr et réaliser la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tar -xvf monmodule.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Si vous désirez que votre module profite à tous, vous pouvez le soumettre (le fichier zip) sur la place de marché des modules complémentaires: {{LinkToPluginDownload}} (vous devez avoir créé un compte auparavant et utiliser le lien &amp;quot;Soumettre un module/produit&amp;quot;).&lt;br /&gt;
**Si votre module a été fabriqué correctement, le fichier sera validé rapidement.&lt;br /&gt;
**Si la qualité est suffisante, que la licence le permet et que la fonctionnalité du module s&#039;avère être d&#039;un intérêt général, le code pourra être ajouté au code source de Dolibarr (sauf si vous ne le désirez pas).&lt;br /&gt;
&lt;br /&gt;
=[[File:Art.png]] Validation/activation du module externe sur Dolistore=&lt;br /&gt;
&lt;br /&gt;
Voir [[Module_Dolistore_Validation_Regles|Règles de Validation]]&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Syst%C3%A8me_de_menus&amp;diff=45464</id>
		<title>Système de menus</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Syst%C3%A8me_de_menus&amp;diff=45464"/>
		<updated>2019-12-31T14:13:03Z</updated>

		<summary type="html">&lt;p&gt;StephM: /* Le système de menu Dolibarr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Menus_system --&amp;gt;&lt;br /&gt;
[[en:Menus_system]]&lt;br /&gt;
[[es:Sistema_de_menús]]&lt;br /&gt;
[[de:Menü_System]]&lt;br /&gt;
[[zh:菜单]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Noyau]]&lt;br /&gt;
{{TemplateDocDev}}&lt;br /&gt;
&lt;br /&gt;
=Le système de menu Dolibarr=&lt;br /&gt;
&lt;br /&gt;
Il y a 2 systèmes de menu. Un système de menu défini les entrées de menu à afficher, conditions et localisation.&lt;br /&gt;
&lt;br /&gt;
Changer de système de menu est possible via la page &#039;&#039;&#039;Configuration - Menus&#039;&#039;&#039;. Choisir ensuite &#039;&#039;&#039;Editeur de menus&#039;&#039;&#039;. Prendre par exemple les gestionnaires de menu &amp;quot;auguria&amp;quot;, fournis en standard au lieu de &amp;quot;eldy&amp;quot;. Ces gestionnaires de menu (gauche et haut) sont complètement opérationnels et offre la même vision mais en utilisant une technologie de stockage différente.&lt;br /&gt;
&lt;br /&gt;
Pour personnaliser ces menus par défaut, vous pouvez, soit ajouter votre propre entrée menu, soit développer votre propre gestionnaire de menu qui remplacera complètement le gestionnaire par défaut. Vous décidez alors comment stocker votre menu (en base de données comme avec le gestionnaire de menu &#039;&#039;&#039;auguria&#039;&#039;&#039;, centralisé en dur dans un fichier comme avec le gestionnaire de menu &#039;&#039;&#039;eldy&#039;&#039;&#039;, dans un fichier xml, ...). Voir les chapitres suivant pour cela....&lt;br /&gt;
&lt;br /&gt;
=Ajouter votre entrée menu=&lt;br /&gt;
Imaginez que vous vouliez ajouter une entrée menu. Allez dans &#039;&#039;&#039;Accueil - Configuration - Menus&#039;&#039;&#039;. Choisir &#039;&#039;&#039;Editeur de menu&#039;&#039;&#039;. Ajouter l&#039;entrée. &lt;br /&gt;
&lt;br /&gt;
Par exemple, pour ajouter une entrée de menu afin d&#039;arriver sur la page qui liste uniquement les opportunités avec les filtres déjà positionnées, vous ajouterez une entrée qui ressemblera à ceci:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;divforimgcentpercent&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Menu editor.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Développer son propre système de menu=&lt;br /&gt;
&lt;br /&gt;
Le but de cet article est de décrire comment créer un nouveau système de menu dans son intégralité (remplacement de l&#039;intégralité des entrées menus, chamboulement complet du concept de navigation).&lt;br /&gt;
&lt;br /&gt;
Cela ne concerne pas le simple ajout d&#039;entrées de menus. Si tel et le cas et que vous désirez juste savoir comment ajouter des entrées menus au sein d&#039;un gestionnaire de menu existant, dans le cadre du développement d&#039;une extension ou d&#039;un nouveau module par exemple, reporter vous plutôt à la page [[Developpement module]].&lt;br /&gt;
&lt;br /&gt;
Si vous voulez remplacer intégralement un systeme de menu par le votre, le plus simple est de prendre exemple sur le gestionnaire de menu &amp;quot;eldy_backoffice&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Pour développer son &#039;&#039;&#039;système de menu haut&#039;&#039;&#039;==&lt;br /&gt;
Il suffit de&lt;br /&gt;
&lt;br /&gt;
#Copier le fichier htdocs/core/menus/standard/eldy_backoffice.php sous un autre nom comme htdocs/core/menus/standard/monmenu.php&lt;br /&gt;
#Editer ensuite le fichier monmenu.php. La fonction showmenu() de la classe MenuTop est la fonction appelée par Dolibarr lorsqu&#039;il génère une page pour afficher ce menu haut. On peut y mettre le code que l&#039;on veut, cette fonction ne modifie aucune variable extérieur et doit juste afficher par des &amp;quot;print&amp;quot; le menu que l&#039;on veut voir. On peut ainsi récupérer le menu à afficher depuis un fichier de configuration, une base de données et le personnaliser par rapport à l&#039;environnement. L&#039;environnement Dolibarr étant stocké dans les 3 objets global suivant: $user, $conf, $langs.&lt;br /&gt;
&lt;br /&gt;
 $user contient les informations propres à l&#039;utilisateur.&lt;br /&gt;
 $conf contient les informations propres à la configuration (modules actifs, permissions actives, etc...)&lt;br /&gt;
 $langs contient les informations propres à la langue active.&lt;br /&gt;
&lt;br /&gt;
Exemple de fonction showmenu() du fichier htdocs/core/menus/standard/monmenu.php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    function showmenu()&lt;br /&gt;
    {&lt;br /&gt;
        global $user,$conf,$langs,$dolibarr_main_db_name;&lt;br /&gt;
        &lt;br /&gt;
        print &#039;&amp;lt;table class=&amp;quot;tmenu&amp;quot;&amp;gt;&amp;lt;tr class=&amp;quot;tmenu&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
	    // Menu Home&lt;br /&gt;
	    print &#039;&amp;lt;td class=&amp;quot;tmenu&amp;quot;&amp;gt;&amp;lt;a &#039;.$class.&#039; href=&amp;quot;&#039;.DOL_URL_ROOT.&#039;/index.php?mainmenu=home&amp;amp;leftmenu=&amp;quot;&#039;.($this-&amp;gt;atarget?&amp;quot; target=&amp;quot;.$this-&amp;gt;atarget:&amp;quot;&amp;quot;).&#039;&amp;gt;&#039;.$langs-&amp;gt;trans(&amp;quot;Home&amp;quot;).&#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
	    &lt;br /&gt;
	    // Put here other entries&lt;br /&gt;
	    // ...&lt;br /&gt;
	    &lt;br /&gt;
        print &#039;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour développer son &#039;&#039;&#039;système de menu gauche&#039;&#039;&#039;==&lt;br /&gt;
Le principe est aussi simple que le menu haut.&lt;br /&gt;
&lt;br /&gt;
#Copier le fichier htdocs/core/menus/standard/eldy_backoffice.php sous un autre nom comme htdocs/core/menus/standard/monmenu.php.&lt;br /&gt;
#Il faut ensuite modifier la fonction showmenu() de la classe MenuLeft afin de fabriquer son menu gauche. Si on veut afficher le menu standard ou juste le modifier légèrement sans recréer le sien complètement, il suffit de boucler sur le contenu du tableau $menu-&amp;gt;liste. Si vous voulez afficher un menu complètement différent et totalement contrôlé par vous, il vous faut, dans la fonction showmenu(), créer un objet $newmenu=new Menu() et utiliser les méthodes $newmenu-&amp;gt;add et $newmenu-&amp;gt;add_submenu pour définir la liste des entrées menu gauche à faire apparaitre. Une fois cela fait, on affiche par des &amp;quot;print&amp;quot; le contenu du tableau $newmenu-&amp;gt;liste (qui vient d’être construit) au lieu de $menu-&amp;gt;liste.&lt;br /&gt;
&lt;br /&gt;
Exemple de fichier htdocs/core/menus/standard/monmenu.php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    function showmenu()&lt;br /&gt;
    {&lt;br /&gt;
        global $user,$conf,$langs,$dolibarr_main_db_name;&lt;br /&gt;
        $newmenu = new Menu();&lt;br /&gt;
        &lt;br /&gt;
	// Put here left menu entries&lt;br /&gt;
	// ***** START *****&lt;br /&gt;
&lt;br /&gt;
	$langs-&amp;gt;load(&amp;quot;admin&amp;quot;);	// Load translation file admin.lang&lt;br /&gt;
	$newmenu-&amp;gt;add(DOL_URL_ROOT.&amp;quot;/admin/index.php?leftmenu=setup&amp;quot;, $langs-&amp;gt;trans(&amp;quot;Setup&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/company.php&amp;quot;, $langs-&amp;gt;trans(&amp;quot;MenuCompanySetup&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/modules.php&amp;quot;, $langs-&amp;gt;trans(&amp;quot;Modules&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/ihm.php&amp;quot;, $langs-&amp;gt;trans(&amp;quot;GUISetup&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/boxes.php&amp;quot;, $langs-&amp;gt;trans(&amp;quot;Boxes&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/delais.php&amp;quot;,$langs-&amp;gt;trans(&amp;quot;Alerts&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/triggers.php&amp;quot;, $langs-&amp;gt;trans(&amp;quot;Triggers&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/perms.php&amp;quot;, $langs-&amp;gt;trans(&amp;quot;Security&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/dict.php&amp;quot;, $langs-&amp;gt;trans(&amp;quot;DictionnarySetup&amp;quot;));&lt;br /&gt;
	$newmenu-&amp;gt;add_submenu(DOL_URL_ROOT.&amp;quot;/admin/const.php&amp;quot;, $langs-&amp;gt;trans(&amp;quot;OtherSetup&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
	// ***** END *****&lt;br /&gt;
		&lt;br /&gt;
        // do not change code after this&lt;br /&gt;
&lt;br /&gt;
        // override menu_array by value array in $newmenu&lt;br /&gt;
	$this-&amp;gt;menu_array=$newmenu-&amp;gt;liste;&lt;br /&gt;
&lt;br /&gt;
        $alt=0;&lt;br /&gt;
        for ($i = 0 ; $i &amp;lt; sizeof($this-&amp;gt;menu_array) ; $i++) &lt;br /&gt;
        {&lt;br /&gt;
            $alt++;&lt;br /&gt;
            if ($this-&amp;gt;menu_array[$i][&#039;level&#039;]==0) {&lt;br /&gt;
                if (($alt%2==0))&lt;br /&gt;
                {&lt;br /&gt;
                    print &#039;&amp;lt;div class=&amp;quot;blockvmenuimpair&amp;quot;&amp;gt;&#039;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    print &#039;&amp;lt;div class=&amp;quot;blockvmenupair&amp;quot;&amp;gt;&#039;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ($this-&amp;gt;menu_array[$i][&#039;level&#039;]==0) {&lt;br /&gt;
                if ($this-&amp;gt;menu_array[$i][&#039;enabled&#039;])&lt;br /&gt;
                    print &#039;&amp;lt;a class=&amp;quot;vmenu&amp;quot; href=&amp;quot;&#039;.$this-&amp;gt;menu_array[$i][&#039;url&#039;].&#039;&amp;quot;&amp;gt;&#039;.$this-&amp;gt;menu_array[$i][&#039;titre&#039;].&#039;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&#039;;&lt;br /&gt;
                else &lt;br /&gt;
                    print &#039;&amp;lt;font class=&amp;quot;vmenudisabled&amp;quot;&amp;gt;&#039;.$this-&amp;gt;menu_array[$i][&#039;titre&#039;].&#039;&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            if ($this-&amp;gt;menu_array[$i][&#039;level&#039;]==1) {&lt;br /&gt;
                if ($this-&amp;gt;menu_array[$i][&#039;enabled&#039;])&lt;br /&gt;
                    print &#039;&amp;lt;a class=&amp;quot;vsmenu&amp;quot; href=&amp;quot;&#039;.$this-&amp;gt;menu_array[$i][&#039;url&#039;].&#039;&amp;quot;&amp;gt;&#039;.$this-&amp;gt;menu_array[$i][&#039;titre&#039;].&#039;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&#039;;&lt;br /&gt;
                else &lt;br /&gt;
                    print &#039;&amp;lt;font class=&amp;quot;vsmenudisabled&amp;quot;&amp;gt;&#039;.$this-&amp;gt;menu_array[$i][&#039;titre&#039;].&#039;&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            if ($this-&amp;gt;menu_array[$i][&#039;level&#039;]==2) {&lt;br /&gt;
                if ($this-&amp;gt;menu_array[$i][&#039;enabled&#039;])&lt;br /&gt;
                    print &#039;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;a class=&amp;quot;vsmenu&amp;quot; href=&amp;quot;&#039;.$this-&amp;gt;menu_array[$i][&#039;url&#039;].&#039;&amp;quot;&amp;gt;&#039;.$this-&amp;gt;menu_array[$i][&#039;titre&#039;].&#039;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&#039;;&lt;br /&gt;
                else &lt;br /&gt;
                    print &#039;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;font class=&amp;quot;vsmenudisabled&amp;quot;&amp;gt;&#039;.$this-&amp;gt;menu_array[$i][&#039;titre&#039;].&#039;&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            if ($this-&amp;gt;menu_array[$i][&#039;level&#039;]==3) {&lt;br /&gt;
                if ($this-&amp;gt;menu_array[$i][&#039;enabled&#039;])&lt;br /&gt;
                    print &#039;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;a class=&amp;quot;vsmenu&amp;quot; href=&amp;quot;&#039;.$this-&amp;gt;menu_array[$i][&#039;url&#039;].&#039;&amp;quot;&amp;gt;&#039;.$this-&amp;gt;menu_array[$i][&#039;titre&#039;].&#039;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&#039;;&lt;br /&gt;
                else &lt;br /&gt;
                    print &#039;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;font class=&amp;quot;vsmenudisabled&amp;quot;&amp;gt;&#039;.$this-&amp;gt;menu_array[$i][&#039;titre&#039;].&#039;&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            if ($i == (sizeof($this-&amp;gt;menu_array)-1) || $this-&amp;gt;menu_array[$i+1][&#039;level&#039;]==0)  {&lt;br /&gt;
                print &amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Forcer l&#039;utilisation de votre gestionnaire de menu=&lt;br /&gt;
Vous pouvez aussi forcer l&#039;utilisation de votre gestionnaire au dépend de tout autre en développant un module.&lt;br /&gt;
Pour cela, il suffit d&#039;ajouter les 4 constantes suivantes dans le tableau $this-&amp;gt;const de votre descripteur de module (Voir la page [[Développement module]]).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
* 1=&amp;gt;array(&#039;MAIN_MENU_STANDARD_FORCED&#039;,&#039;chaine&#039;,&#039;monmenu.php&#039;,&#039;Force menu handler to this value&#039;,1,&#039;current&#039;,1),&lt;br /&gt;
* 2=&amp;gt;array(&#039;MAIN_MENUFRONT_STANDARD_FORCED&#039;,&#039;chaine&#039;,&#039;monmenu.php&#039;,&#039;Force menu handler to this value&#039;,1,&#039;current&#039;,1),&lt;br /&gt;
* 3=&amp;gt;array(&#039;MAIN_MENU_SMARTPHONE_FORCED&#039;,&#039;chaine&#039;,&#039;monmenu.php&#039;,&#039;Force menu handler to this value&#039;,1,&#039;current&#039;,1),&lt;br /&gt;
* 4=&amp;gt;array(&#039;MAIN_MENUFRONT_SMARTPHONE_FORCED&#039;,&#039;chaine&#039;,&#039;monmenu.php&#039;,&#039;Force menu handler to this value&#039;,1,&#039;current&#039;,1),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Votre gestionnaire de menu sera utilisé, quelque soit la configuration, une fois que le module aura été activé.&lt;/div&gt;</summary>
		<author><name>StephM</name></author>
	</entry>
</feed>