<?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=Ssherratt</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=Ssherratt"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php/Special:Contributions/Ssherratt"/>
	<updated>2026-10-22T06:51:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Environment_and_development_tools_-_Optional&amp;diff=49958</id>
		<title>Environment and development tools - Optional</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Environment_and_development_tools_-_Optional&amp;diff=49958"/>
		<updated>2021-03-12T15:25:40Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: minor grammatical errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN origin interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- You can edit this section but do NOT remove these comments&lt;br /&gt;
     Links below will be automatically replicated on translated pages by PolyglotBot --&amp;gt;&lt;br /&gt;
[[fr:Outils_de_développement_-_Composants_optionnels]]&lt;br /&gt;
[[es:Herramientas_de_Desarrollo_-_Opcional]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TemplateDocDev}}&lt;br /&gt;
This page describes optional components you may install to support more technologies for development of Dolibarr.&lt;br /&gt;
They are not required to develop Dolibarr nor modules but may be useful for specific development.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==If you want to make Perl scripts==&lt;br /&gt;
&lt;br /&gt;
*Install the Eclipse plugin for Perl: EPIC&lt;br /&gt;
&lt;br /&gt;
For this, use the &#039;&#039;&#039;Find And Install process&#039;&#039;&#039; and add the update URL: &lt;br /&gt;
&lt;br /&gt;
[http://e-p-i-c.sourceforge.net/updates https://e-p-i-c.sourceforge.net/updates]  or &lt;br /&gt;
&lt;br /&gt;
https://www.epic-ide.org/updates/ &lt;br /&gt;
&lt;br /&gt;
==If you want to make Python scripts==&lt;br /&gt;
&lt;br /&gt;
*Install the Eclipse plugin for Python: PyDev&lt;br /&gt;
&lt;br /&gt;
For this, use the &#039;&#039;&#039;Find And Install process&#039;&#039;&#039; and add the update URL: http://pydev.org/updates &lt;br /&gt;
&lt;br /&gt;
==If you are using Windows==&lt;br /&gt;
&lt;br /&gt;
*Notepad++ (for those who can&#039;t stand java or are using a computer too old for Eclipse).&lt;br /&gt;
&lt;br /&gt;
*WinMerge (to compare files and directories)&lt;br /&gt;
&lt;br /&gt;
*CygWin (to have the &amp;quot;patch&amp;quot; command)&lt;br /&gt;
&lt;br /&gt;
==If you want to do step by step debugging or tuning (XDebug)==&lt;br /&gt;
&lt;br /&gt;
*To add global tuning information, from dolibarr 3.8, for pages on your browser javascript console log, add environment variable MAIN_SHOW_TUNING_INFO to 1 on your webserver.&lt;br /&gt;
&lt;br /&gt;
For Apache, just add the following line into your apache.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
SetEnv MAIN_SHOW_TUNING_INFO 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
For Nginx, add the following line to your php location:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
fastcgi_param MAIN_SHOW_TUNING_INFO true;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The variable name is DOL_TUNING for versions of Dolibarr &amp;lt; 3.8.&lt;br /&gt;
&lt;br /&gt;
*Install XDebug:&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_windows.png|24px]] In Windows===&lt;br /&gt;
&lt;br /&gt;
*Download dll file &#039;&#039;&#039;php_debug_xxx.dll&#039;&#039;&#039; on http://www.xdebug.org and store it in directory /ext of php. Then enable plugin.&lt;br /&gt;
&lt;br /&gt;
*Modify php.ini file to add parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 [xdebug]&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=c:/temp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_ubuntu.png|24px]] In Ubuntu / Linux===&lt;br /&gt;
&lt;br /&gt;
*Install package &#039;&#039;&#039;php-xdebug&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install php-xdebug&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Modify xdebug.ini to add parameters after the line zend_extension=xxx (or similar):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 ; With xdebug 2.1 and more&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=/var/tmp&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
 ; Add also this with xdebug 2.2 and more&lt;br /&gt;
 xdebug.show_mem_delta=1&lt;br /&gt;
 xdebug.trace_output_dir=/var/tmp&lt;br /&gt;
 xdebug.auto_trace=0&lt;br /&gt;
 xdebug.trace_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Eclipsephp.jpg|24px]] Eclipse configuration===&lt;br /&gt;
&lt;br /&gt;
*Open Eclipse. In Window-&amp;gt;Preferences-&amp;gt;General-&amp;gt;Web Browser, select external web browser, and set it to Default system web browser.&lt;br /&gt;
&lt;br /&gt;
*Go into the debug section, by Window-&amp;gt;Preferences-&amp;gt;PHP-&amp;gt;Debug, and set the PHP Debugger option to XDebug (by default this is set to the Zend Debugger). Note the chekbox “Break at first line” in this page as well – you can change this later on, as required.&lt;br /&gt;
&lt;br /&gt;
*After you’ve applied your changes, go into the PHP Debug prespective, and go to menu Debug Configurations… Here, make sure the Server Debugger is set to XDebug, and that the PHP server points to http://localhost/ or an appropriate server location. The file section should point to the file to be debugged, relative to your workspace, the relative path maybe something /dolibarr/htdocs/index.php.&lt;br /&gt;
&lt;br /&gt;
*Check the URL section to see whether it points to the correct location – if not, make sure you uncheck the “Auto-Generate” check box, and enter in the correct location. Apply the changes and close the dialog box.&lt;br /&gt;
&lt;br /&gt;
*You should now be ready to debug Dolibarr. Click on Run-&amp;gt;Debug or F11 to enable debugging, Eclipse should switch to the Debug View, and the page should start loading in your external browser. If “Break at First Line” checkbox was checked previously, then the program would have “stopped” at the first line. You can step into or step over subsequent lines using the controls on your top left corner. Alternatively, you can place breakpoints at various locations and stop code execution there as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then to analyze files generated by XDebug profiling, you must call the page by adding parameter XDEBUG_PROFILE=1 to generate the file and then install KCacheGrind (Linux) or WinCacheGrind (Windows) to analyze them.&lt;br /&gt;
&lt;br /&gt;
==To develop or use Quality controls (PHPUnit, PHPCodeSniffer, PHPCpd, PHPDepends)==&lt;br /&gt;
===From Eclipse===&lt;br /&gt;
The plugin to provide phpcodesniffer or phpunit for Eclipse is now deprecated.&lt;br /&gt;
&lt;br /&gt;
*PHPUnit is supported by default on a standard Eclipse installation&lt;br /&gt;
&lt;br /&gt;
*To get PHP Codesniffer, you can create an entry &amp;quot;External Tools&amp;quot; with this setup&lt;br /&gt;
&lt;br /&gt;
[[Image:Setup_phpcs.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===From Command Line===&lt;br /&gt;
====Install PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Project-page:  https://phpunit.de/&lt;br /&gt;
*Download a release archive from https://github.com/sebastianbergmann/phpunit and extract it to a directory that is listed in the include_path of your php.ini configuration file.&lt;br /&gt;
*Prepare the phpunit script:&lt;br /&gt;
**For Linux: Rename the phpunit.php script to phpunit and replace the @php_bin@ string in it with the path to your PHP command-line interpreter (usually /usr/bin/php).&lt;br /&gt;
**For Windows: Replace the @php_bin@ string in file phpunit.bat with the path of your PHP command-line interpreter and @bin_dir@ string with the path of the PHPunit directory.&lt;br /&gt;
**Edit your Path to inclulde PHPunit directory&lt;br /&gt;
**Make script runnable (chmod +x phpunit on Linux).&lt;br /&gt;
*Prepare the PHPUnit/Util/PHP.php script:&lt;br /&gt;
**Replace the @php_bin@ string if it exists in file it with the path to your PHP command-line interpreter (usually /usr/bin/php).&lt;br /&gt;
*Module xdebug can also be required if you plan to make reporting of test code covering.&lt;br /&gt;
&lt;br /&gt;
====Execute PHPUnit tests or generate code coverage reports====&lt;br /&gt;
&lt;br /&gt;
*Go into directory &#039;&#039;&#039;/test&#039;&#039;&#039; of sources. Read file &#039;&#039;&#039;README&#039;&#039;&#039; to know the process to execute a unit test campaign.&lt;br /&gt;
&lt;br /&gt;
====Install other quality tools (phpcs, phpcd, phpdepends)====&lt;br /&gt;
&lt;br /&gt;
*Take a look at tools documentation (PHPCodeSniffer, PHPPcd, PHPDepends). For example, to install or upgrade PHPCodeSniffer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo pear upgrade PHP_CodeSniffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
And check into PHPCodeSniffer setup, that you use the PEAR libraries store into */usr/bin/php*&lt;br /&gt;
&lt;br /&gt;
==To develop or use Selenium tests==&lt;br /&gt;
===From Firefox===&lt;br /&gt;
====Install plugin for Firefox Selenium IDE====&lt;br /&gt;
&lt;br /&gt;
*Download file of plugin &amp;quot;Selenium IDE&amp;quot; for Firefox.&lt;br /&gt;
*Add it into firefox in menu Tools - Complementary modules.&lt;br /&gt;
&lt;br /&gt;
====Execute Selenium tests====&lt;br /&gt;
&lt;br /&gt;
*Go into menu Tools - Selinum IDE of Firefox.&lt;br /&gt;
*Open xml file of the suite tests.&lt;br /&gt;
*Execute the test.&lt;br /&gt;
&lt;br /&gt;
==To build Doxygen documentation==&lt;br /&gt;
&lt;br /&gt;
*Install Doxygen available for download at http://www.doxygen.org (or install package doxygen with Ubuntu).&lt;br /&gt;
*Install Eclipse plugin by adding source http://download.gna.org/eclox/update/ into your Eclipse update setup. Then setup your Eclipse (Window-Preferences-Doxygen) to define path to Doxygen tool.&lt;br /&gt;
&lt;br /&gt;
==To add asciidoc support into Eclipse==&lt;br /&gt;
&lt;br /&gt;
*Add the URL to Install repositories http://download.eclipse.org/mylyn/snapshots/nightly/docs/. Then install package &#039;&#039;&#039;Mylyn Docs - Mylyn Wikitext Extras&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40782</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40782"/>
		<updated>2019-01-23T11:41:53Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Suppliers Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USER_HIDE_INACTIVE_IN_COMBOBOX&#039;&#039;&#039; ► Disable display inactive users in combobox. &lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Default (constant not set or Value &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref only eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY&#039;&#039;&#039; ► Restrict selection of products in supplier order to only those with a buying price defined for that supplier. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY&#039;&#039;&#039; ► Restrict selection of products in supplier proposal to only those with a buying price defined for that supplier. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40781</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40781"/>
		<updated>2019-01-23T11:40:17Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Suppliers Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USER_HIDE_INACTIVE_IN_COMBOBOX&#039;&#039;&#039; ► Disable display inactive users in combobox. &lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Default (constant not set or Value &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref only eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY&#039;&#039;&#039; ► Restrict selection of products to only those with a buying price defined for this supplier. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40780</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40780"/>
		<updated>2019-01-23T11:31:19Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Suppliers Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USER_HIDE_INACTIVE_IN_COMBOBOX&#039;&#039;&#039; ► Disable display inactive users in combobox. &lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Default (constant not set or Value &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref only eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY&#039;&#039;&#039; ► Can enter a product even if no supplier price defined. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40778</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40778"/>
		<updated>2019-01-22T15:14:21Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* PDF Options */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Default (constant not set or Value &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref only eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_NOPRICEDEFINED&#039;&#039;&#039; ► Can enter a product even if no supplier price defined. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40777</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40777"/>
		<updated>2019-01-22T15:14:04Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* PDF Options */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Default (constant not set or Value &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref only eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_NOPRICEDEFINED&#039;&#039;&#039; ► Can enter a product even if no supplier price defined. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40776</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40776"/>
		<updated>2019-01-22T14:50:38Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* PDF Options */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Default (constant not set or Value &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref first. eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_NOPRICEDEFINED&#039;&#039;&#039; ► Can enter a product even if no supplier price defined. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40775</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40775"/>
		<updated>2019-01-22T14:49:26Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* PDF Options */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Default (constant not set or Value &amp;lt;code&amp;gt;0&amp;lt;/code): Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref first. eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_NOPRICEDEFINED&#039;&#039;&#039; ► Can enter a product even if no supplier price defined. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40774</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40774"/>
		<updated>2019-01-22T14:48:54Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* PDF Options */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Default (constant not set or 0): Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref first. eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_NOPRICEDEFINED&#039;&#039;&#039; ► Can enter a product even if no supplier price defined. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40773</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40773"/>
		<updated>2019-01-22T14:47:17Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this feature, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. Consequently this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples: &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipient when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it appears in the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard-coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front of payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required in some countries for legal reasons), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the read-only archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► Allow user to select a default invoice documents models according to invoice type. On invoice create page, the model is dynamically changed on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser always asks to save downloaded files on disk (like PDF), try this this option. File may be displayed directly in your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref first. eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;: Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_NOPRICEDEFINED&#039;&#039;&#039; ► Can enter a product even if no supplier price defined. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It applies a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranteed with this. Also if the image is removed or renamed by the image hosting service, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40772</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=40772"/>
		<updated>2019-01-22T14:36:00Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* PDF Options */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help About Screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu Path:&#039;&#039;&#039; Home ► Setup ► Other&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Goal&#039;&#039;&#039; =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Reading the List&#039;&#039;&#039; =&lt;br /&gt;
After Global Options, this list is sorted alphabetically.  The basic format of how the list is written is broken down in the example below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HIDDEN_CONFIG&#039;&#039;&#039; ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;List of Known Hidden Options&#039;&#039;&#039; =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; (unless othwerwise stated) in &amp;lt;code&amp;gt;Home ► Setup -&amp;gt; Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Global Options&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_NOTES_TAB&#039;&#039;&#039; ►Show or hide notes tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_CONTACTS_TAB&#039;&#039;&#039; ► Show or hide contacts tab in the card page ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LOGOUT_GOTO_URL&#039;&#039;&#039; ► URL to which the user will be redirected after LOGOUT ► (core)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FILESYSTEM_ENCODING&#039;&#039;&#039; ► With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on Linux or OSX system, and ISO-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable &amp;lt;code&amp;gt;MAIN_FILESYSTEM_ENCODING&amp;lt;/code&amp;gt; to &amp;quot;&amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TECHNICAL_ID&#039;&#039;&#039; ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAXTABS_IN_CARD&#039;&#039;&#039; ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ONLY_LOGIN_ALLOWED&#039;&#039;&#039; ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES&#039;&#039;&#039; ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SECURITY_CSRF_WITH_TOKEN&#039;&#039;&#039; ► Activate a second anti-CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_APPLICATION_TITLE&#039;&#039;&#039; ► This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_AUTOFILL_DATE&#039;&#039;&#039; ► If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FULL_SCANLIST&#039;&#039;&#039; ► Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIRST_TO_UPPER&#039;&#039;&#039; ► Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_LOG_TO_HTML&#039;&#039;&#039; ► If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_HOURMIN_IN_DATE_RANGE&#039;&#039;&#039; ► On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REMOVE_INSTALL_WARNING&#039;&#039;&#039; ► Remove all security warnings that appear to administrator users if URL &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; is public. You should solve the problem if warning occurs, instead of removing the warning! For this, create a file called &amp;lt;code&amp;gt;install.lock&amp;lt;/code&amp;gt; into Dolibarr root directory. This will stop the warning but also make the page &amp;lt;code&amp;gt;/install&amp;lt;/code&amp;gt; not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZE_SPEED&#039;&#039;&#039; ► Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPLACE_TRANS_xx_XX&#039;&#039;&#039; ► Where &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt; is language code. If value is &amp;lt;code&amp;gt;string1:newstring1;string2:newstring2&amp;lt;/code&amp;gt; then replace &amp;lt;code&amp;gt;string1&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;newstring1&amp;lt;/code&amp;gt; in all translation done for language &amp;lt;code&amp;gt;xx_XX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_REPEATCONTACTONEACHTAB&#039;&#039;&#039; ► If added and set to &#039;&#039;&#039;1&#039;&#039;&#039;, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_JQUERY_JNOTIFY&#039;&#039;&#039; ► Disable usage of &amp;lt;code&amp;gt;JNotify&amp;lt;/code&amp;gt; to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_JEDITABLE&#039;&#039;&#039; ► Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this features, because it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. So this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_JQUERY_MULTISELECT&#039;&#039;&#039; ► Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HELPCENTER_LINKTOUSE&#039;&#039;&#039;  ► Define the URL link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MODULES_FOR_EXTERNAL&#039;&#039;&#039; ► Limit available modules for external users. By default value is &#039;&amp;lt;code&amp;gt;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_TUNING_INFO&#039;&#039;&#039; ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOL_SCRIPTS_ROOT&#039;&#039;&#039; ► Define directory who contains &#039;scripts&#039; directory (e.g. &amp;lt;code&amp;gt;/var/www/dolibarr&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING&#039;&#039;&#039; ► A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE&#039;&#039;&#039; ► Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_AJAX_COMBOX&#039;&#039;&#039; ► If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_CACHE_MANIFEST&#039;&#039;&#039; ► Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCELANGDIR&#039;&#039;&#039; ► Relative path of the directory holding your custom &amp;lt;code&amp;gt;langs&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS&#039;&#039;&#039; ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_HTML_TITLE&#039;&#039;&#039; ► Can be used to control how the html page title is formatted. If value contains key &#039;&amp;lt;code&amp;gt;noapp&amp;lt;/code&amp;gt;&#039;, application name will not be output. If value contains &#039;&amp;lt;code&amp;gt;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;&amp;lt;code&amp;gt;noapp;thirdpartynameonly&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_LANDING_PAGE&#039;&#039;&#039; ► Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param). ► (v3.9+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN&#039;&#039;&#039; ► When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible. ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_WEIGHT_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_ROUND&#039;&#039;&#039; ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VOLUME_DEFAULT_UNIT&#039;&#039;&#039; ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PUBLIC_NOTE_IN_ADDRESS&#039;&#039;&#039; ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEFAULT_PAYMENT_TERM_ID&#039;&#039;&#039; ► With ID of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND&#039;&#039;&#039; ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_VIEW_LINE_NUMBER&#039;&#039;&#039; ► Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME&#039;&#039;&#039; ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOC_USE_TIMING&#039;&#039;&#039; ► Add a timestamp at end of generated document. Value must be format of timestamp. For example: &amp;lt;code&amp;gt;%Y%m%d%H%M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLEDRAFTSTATUS&#039;&#039;&#039; ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_OLD_SEARCH_FORM&#039;&#039;&#039; ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVER_TZ&#039;&#039;&#039; ► If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples : &amp;lt;code&amp;gt;Europe/Paris&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_FORM_ON_HOME_AREAS&#039;&#039;&#039; ► Show the search form on home page areas for core modules (Removed after v5 due to global search combo) ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE&#039;&#039;&#039; ► If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES&#039;&#039;&#039; ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC&#039;&#039;&#039; ► Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community) ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOWDATABASENAMEINHELPPAGESLINK&#039;&#039;&#039; ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_MULTIPLE_FILEUPLOAD&#039;&#039;&#039; ► Disable users to upload multiple files at once.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Agenda Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_MAX_EVENTS_DAY_VIEW&#039;&#039;&#039; ► Define the maximum number of visible entries for each day in agenda. Default value is &#039;&#039;&#039;3&#039;&#039;&#039;. Value &#039;&#039;&#039;0&#039;&#039;&#039; means no limit.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_USE_EVENT_TYPE&#039;&#039;&#039; ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS&#039;&#039;&#039; ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_EVENT_ON_ELEMENT_CARD&#039;&#039;&#039; ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bank Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BANK_CAN_RECONCILIATE_CASHACCOUNT&#039;&#039;&#039; ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_DISABLE_CHECK_DEPOSIT&#039;&#039;&#039; ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_ORDER&#039;&#039;&#039; ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL&#039;&#039;&#039; ► Ask bank account during creation of a proposal&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;BlockedLog&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY&#039;&#039;&#039; ► Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Contracts&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CONTRACT_SUPPORT_PRODUCTS&#039;&#039;&#039; ► Products are also suggested into module contract.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Email and SMS&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAILFORM_DISABLE_ENTERKEY&#039;&#039;&#039; ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Prefix for the mails ID. Default value is &amp;lt;code&amp;gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&amp;lt;/code&amp;gt; ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DEBUG&#039;&#039;&#039; ► Write content with header of last mail into file &amp;lt;code&amp;gt;dolibarr_mail.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SMS_DEBUG&#039;&#039;&#039; ► Write content of SMS sent into file &amp;lt;code&amp;gt;dolibarr_sms.log&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;dolibarr_main_data_root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ALLOW_SENDMAIL_F&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_SENDMAIL_FORCE_BA&#039;&#039;&#039; ► On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option ask PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;&amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt;&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_NO_FULL_EMAIL&#039;&#039;&#039; ► Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FIX_FOR_BUGGED_MTA&#039;&#039;&#039; ► Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of &amp;lt;code&amp;gt;orange.fr&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;hotmail.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_DO_NOT_USE_SIGN&#039;&#039;&#039; ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_INVOICE&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_ORDER&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_FORCE_DELIVERY_RECEIPT_PROPAL&#039;&#039;&#039; ► Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; ► 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_PROPOSAL_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_ORDER_TO&#039;&#039;&#039;, &#039;&#039;&#039;MAIN_MAIL_AUTOCOPY_INVOICE_TO&#039;&#039;&#039; ► Email to use as a BCC recipients when sending email for proposal, order or invoice. You can make this value visible by setting &#039;&#039;&#039;MAIN_EMAIL_USECCC&#039;&#039;&#039; (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EMAIL_ADD_TRACK_ID&#039;&#039;&#039; ► When value is &#039;&#039;&#039;1&#039;&#039;&#039; (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is &#039;&#039;&#039;2&#039;&#039;&#039;: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL&#039;&#039;&#039; ► Restrict sending of 1 email message to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; recipients for same email message (x for To: + CC: + BCC:). If not defined, value is &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Required to fight against spamming that include 1000 recipients in 1 message. Note that &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL&#039;&#039;&#039;, &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL&#039;&#039;&#039; and &#039;&#039;&#039;MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL&#039;&#039;&#039; are also available.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML&#039;&#039;&#039; ► Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_USE_MULTI_PART&#039;&#039;&#039; ► Forge email content using an alternate text part ► (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS&#039;&#039;&#039; ► If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_COPY_FILE_IN_EVENT_AUTO&#039;&#039;&#039; ► Add attachement document on event auto generated by sending email from dolibarr. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS&#039;&#039;&#039; ► Enter the public IP address of the server, so it will appears into the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MAIL_ENABLED_USER_DEST_SELECT&#039;&#039;&#039; ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Emailing Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAILING_PREFIX_FOR_EMAIL_ID&#039;&#039;&#039; ► Set the value that will be used to compose the &amp;quot;Email ID&amp;quot; into email headers. If you set this value to &#039;&amp;lt;code&amp;gt;SERVER_NAME&amp;lt;/code&amp;gt;&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; ► If set, the module emailing can&#039;t be used with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS&#039;&#039;&#039; ► Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option &#039;&#039;&#039;MAILING_NO_USING_PHPMAIL&#039;&#039;&#039; is set to on.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_PHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_PHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039;&#039;&#039; ► Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &amp;lt;code&amp;gt;MAILING_LIMIT_WARNING_NOPHPMAIL&amp;lt;/code&amp;gt; and enter translation key for each language for this key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EMAILING_USE_ADVANCED_SELECTOR&#039;&#039;&#039; ► Enable the advanced selector for destinaries&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYWEB&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbyweb&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAILING_LIMIT_SENDBYCLI&#039;&#039;&#039; ► Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;&amp;lt;code&amp;gt;dolibarr_mailing_limit_sendbycli&amp;lt;/code&amp;gt;&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Expense Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS&#039;&#039;&#039; ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPENSEREPORT_USE_OLD_NUMBERING_RULE&#039;&#039;&#039; ► The module Expense Report use numbering rules that you can setup (like other modules do). If you need to keep the hard coded numbering rule of expenses report used in v6.0 set this constant to &#039;&#039;&#039;1&#039;&#039;&#039; ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_IK&#039;&#039;&#039; ► This feature allows you to set index kilometers against a mileage index for different types of vehicles. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_EXPENSE_RULE&#039;&#039;&#039; ► This feature allows you to set a variety of rules per user/group/all so they can only create reports within their limits. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Export Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_SEPARATOR_TO_USE&#039;&#039;&#039; ► String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORT_CSV_FORCE_CHARSET&#039;&#039;&#039; ► Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;EXPORTTOOL_CATEGORIES&#039;&#039;&#039; ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USE_STRICT_CSV_RULES&#039;&#039;&#039; ► Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Foundation Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_URL_REDIRECT_SUBSCRIPTION&#039;&#039;&#039; ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MEMBER_EXT_URL_SUBSCRIPTION_INFO&#039;&#039;&#039; ► Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front off payment cell, into the page to make online subscription.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Interventions Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_CLASSIFY_BILLED&#039;&#039;&#039;► Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger &amp;lt;code&amp;gt;FICHINTER_CLASSIFY_BILLED&amp;lt;/code&amp;gt; into list of possible automatic event into agenda.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FICHINTER_DISABLE_DETAILS&#039;&#039;&#039;► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Invoice Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DEPOSIT_MULTI_TVA&#039;&#039;&#039; ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SHOW_SEND_REMINDER&#039;&#039;&#039; ► Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; &#039;&#039;(obsolete feature)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_EDITED&#039;&#039;&#039; ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_ALWAYS_BE_REMOVED&#039;&#039;&#039; ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CAN_NEVER_BE_REMOVED&#039;&#039;&#039; ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POSITIVE_CREDIT_NOTE&#039;&#039;&#039; ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_CHANGE_THIRDPARTY&#039;&#039;&#039; ► Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_USE_PROFORMAT&#039;&#039;&#039; ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_DEPOSITS_ARE_JUST_PAYMENTS&#039;&#039;&#039; ► Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_SENDBYEMAIL_FOR_ALL_STATUS&#039;&#039;&#039; ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT&#039;&#039;&#039; ► Disable VAT on generated documents. like for an association. (it&#039;s work with crabe template)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_CREDIT_NOTE_STANDALONE&#039;&#039;&#039; ► Can make a credit note without invoice. ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION&#039;&#039;&#039; ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_SITUATION_CREDIT_NOTE&#039;&#039;&#039; ► Enable the &amp;quot;situation credit note&amp;quot; feature (need &amp;lt;code&amp;gt;INVOICE_USE_SITUATION&amp;lt;/code&amp;gt;) ► (v8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_DEPOSIT&#039;&#039;&#039; ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_REPLACEMENT&#039;&#039;&#039; ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_DISABLE_CREDIT_NOTE&#039;&#039;&#039; ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_BILL_ON_SHIPMENT&#039;&#039;&#039; ► Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_POINTOFTAX_DATE&#039;&#039;&#039; ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FACTURE_ENABLE_NEGATIVE_LINES&#039;&#039;&#039; ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;INVOICE_USE_DEFAULT_DOCUMENT&#039;&#039;&#039; ► This new configurations allow user to select à default invoice documents models according to invoice type. On invoice create page, the model is dynamicaly change on invoice type selection. ► (v9.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Look or Theme&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_OPTIMIZEFORTEXTBROWSER&#039;&#039;&#039; ► Optimize output rendering for usage of a text browser (usefull for blind people)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_ELDY_DISABLE_IMAGE&#039;&#039;&#039; ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MENU_HIDE_UNAUTHORIZED&#039;&#039;&#039; ► Hide menu if logged in user is not autorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THEME_TOPMENU_STICKY_POSITION&#039;&#039;&#039; ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_EASTER_EGG_COMMITSTRIP&#039;&#039;&#039; ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;MultiCurrency&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION&#039;&#039;&#039; ► Enable CurrencyLayer API synchronization&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Order Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_REQUIRE_SOURCE&#039;&#039;&#039; =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_VALID_AFTER_CLOSE_PROPAL&#039;&#039;&#039; =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COMMANDE_CHANGE_THIRDPARTY&#039;&#039;&#039; =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ORDER_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;PDF Options&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FORCE_SAVEAS&#039;&#039;&#039; ► If your browser ask always to save downloaded files on disk (like PDF), try to add this option. File might appears directly into your browser.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_COMPRESSION&#039;&#039;&#039; ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INVERT_SENDER_RECIPIENT&#039;&#039;&#039; ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_PDF_AUTOUPDATE&#039;&#039;&#039; ► Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_BACKGROUND_ON_PDF&#039;&#039;&#039; ► Define this constant with short name of an image (example &amp;quot;&amp;lt;code&amp;gt;myimage.jpg&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany/logos&amp;lt;/code&amp;gt;&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library being crazy sometime and content on image disappeared !&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ADD_PDF_BACKGROUND&#039;&#039;&#039; ► Define this constant with short name of a PDF file (example &amp;quot;&amp;lt;code&amp;gt;mypdf.pdf&amp;lt;/code&amp;gt;&amp;quot;) that must be saved into directory &amp;quot;&amp;lt;code&amp;gt;documents/mycompany&amp;lt;/code&amp;gt;&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FORCE_FONT&#039;&#039;&#039; ► To ignore font defined into language file and force usage of a particular font. For example &amp;quot;&amp;lt;code&amp;gt;DejaVuSans&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_FREETEXT_HEIGHT&#039;&#039;&#039; ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_TITLE_BACKGROUND_COLOR&#039;&#039;&#039; ► Can define a background color onto title line. Example: &amp;lt;code&amp;gt;220,220,200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_USE_COMPANY_NAME_OF_CONTACT&#039;&#039;&#039; ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF&#039;&#039;&#039; ► Activate PDF conversion from ODT document. If value is &#039;&amp;lt;code&amp;gt;jodconverter&amp;lt;/code&amp;gt;&#039;, java and jodconverter command line tool must be available. If value is &#039;&amp;lt;code&amp;gt;/pathto/jodconverter.jar&amp;lt;/code&amp;gt;&#039; then java and the jodconvertar jar must exist. Soffice must also be available. &amp;lt;code&amp;gt;MAIN_DOL_SCRIPTS_ROOT&amp;lt;/code&amp;gt; Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example &amp;lt;code&amp;gt;/var/www/mydolibarr&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_ODT_AS_PDF_DEL_SOURCE&#039;&#039;&#039; ► For ODT generation. If set, then initial behaviour is conserved but ODT file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_INVOICES_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE&#039;&#039;&#039; ► Include the first image of the product into the line of the generated PDF for supplier proposals ► (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_LOGO_HEIGHT&#039;&#039;&#039; ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DOCUMENTS_WITH_PICTURE_WIDTH&#039;&#039;&#039; ► Can change size of picture when hidden option &amp;lt;code&amp;gt;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&amp;lt;/code&amp;gt; is used. By default value is &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN&#039;&#039;&#039; ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_SHOW_PROJECT&#039;&#039;&#039; ► Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN&#039;&#039;&#039; ► Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for France, &amp;quot;sort code/account number&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES&#039;&#039;&#039; ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
Value &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Supplier ref first. eg.&amp;quot;SUPPLIER-REF-001 - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: Supplier ref followed by internal ref in brackets. eg.&amp;quot;SUPPLIER-REF-001 (InternalRef COMPANY-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
Value &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;: Internal ref followed by supplier ref in brackets.&amp;quot;COMPANY-REF-001 (Vendor SKU SUPPLIER-REF-001) - LABEL...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_ADDALSOTARGETDETAILS&#039;&#039;&#039; ► Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME&#039;&#039;&#039; ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_TVAINTRA_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID1_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 1 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID2_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 2 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID3_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 3 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID4_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 4 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID5_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 5 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROFID6_IN_SOURCE_ADDRESS&#039;&#039;&#039; ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Point of Sale&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_SHOW_KEYPAD&#039;&#039;&#039; ► Show a mouse key pad into Point of Sale.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;POS_ADDON&#039;&#039;&#039; ► Set this value to an existing numbering module rule (for example &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039;, &#039;&amp;lt;code&amp;gt;mod_facture_mars&amp;lt;/code&amp;gt;&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value &amp;lt;code&amp;gt;POS_ADDON&amp;lt;/code&amp;gt; to &#039;&amp;lt;code&amp;gt;mod_facture_terre&amp;lt;/code&amp;gt;&#039; will use the numbering module &#039;&amp;lt;code&amp;gt;terre&amp;lt;/code&amp;gt;&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use &#039;&#039;&#039;POS_NUMBERING_TERRE_FORCE_PREFIX&#039;&#039;&#039; and &#039;&#039;&#039;POS_NUMBERING_MARS_FORCE_PREFIX&#039;&#039;&#039; variable to change the prefix used).&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Products Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE&#039;&#039;&#039; ► Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_ADD_TYPE_IN_DOCUMENTS&#039;&#039;&#039; ► Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DONOTSEARCH_ANYWHERE&#039;&#039;&#039; ► When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_DESC_IN_LIST&#039;&#039;&#039; ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_OLD_PATH_FOR_PHOTO&#039;&#039;&#039; ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_USE_UNITS&#039;&#039;&#039; ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SIZE&#039;&#039;&#039; ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_LENGTH&#039;&#039;&#039; ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_SURFACE&#039;&#039;&#039; ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_VOLUME&#039;&#039;&#039; ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_DISABLE_CUSTOM_INFO&#039;&#039;&#039; ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL&#039;&#039;&#039; ► When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DIRECT_STATUS_UPDATE&#039;&#039;&#039; ► Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_CHARGES&#039;&#039;&#039; ► Adds an extra field for adhoc charges at the product buying price stage. The cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product. ► (&amp;lt;= v7.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_VISIBLE_PHOTO&#039;&#039;&#039; ► Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&#039; will show the first five product photos found on the product card.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUCT_MAX_LENGTH_COMBO&#039;&#039;&#039; ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_FREE_LINES&#039;&#039;&#039; ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SHOW_PRODUCT_ACTIVITY_TRIM&#039;&#039;&#039; ► Show Product and Services turnover before for all four quarters tax over recent years recent years on the product area ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CATEGORY_GRAPHSTATS_ON_PRODUCTS&#039;&#039;&#039; ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Projects Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_DISABLE_UNLINK_FROM_OVERVIEW&#039;&#039;&#039; ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS&#039;&#039;&#039; ► Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS&#039;&#039;&#039; ► Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_SHOW_REF_INTO_LISTS&#039;&#039;&#039; ► Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_UNSELECTABLES&#039;&#039;&#039; ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_HIDE_TASKS&#039;&#039;&#039; ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LIST_SHOW_STARTDATE&#039;&#039;&#039; ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_LINK_ON_OVERWIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_CREATE_ON_OVERVIEW_DISABLED&#039;&#039;&#039; ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY&#039;&#039;&#039; ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROJECT_ALLOW_COMMENT_ON_TASK&#039;&#039;&#039; ► Add comment feature on project task&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Proposals Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_CLONE_ON_CREATE_PAGE&#039;&#039;&#039; ► On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PROPAL_CHOOSE_ODT_DOCUMENT&#039;&#039;&#039; ► On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_GENERATE_PROPOSALS_WITH_PICTURE&#039;&#039;&#039; ► Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPAL_DISABLE_SIGNATURE&#039;&#039;&#039; ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES&#039;&#039;&#039; ► Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRODUIT_PDF_MERGE_PROPAL&#039;&#039;&#039; ► When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING&#039;&#039;&#039; ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Services Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;SERVICE_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Shipments&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS&#039;&#039;&#039; ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SHIPMENT_GETS_ALL_ORDER_PRODUCTS&#039;&#039;&#039; ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Stocks&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_SERVICES_ARE_ECOMMERCE_200238EC&#039;&#039;&#039; ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CASHDESK_FORCE_STOCK_ON_BILL&#039;&#039;&#039; =&amp;gt; Option to force decrease of stock whatever is user setup. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED&#039;&#039;&#039; ► Disable stock dispatch when total expected was already received.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Suppliers Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FOURN_PRODUCT_AVAILABILITY&#039;&#039;&#039; ► On the Suppliers price page of the products, activate the supplier product availability. &#039;&#039;This is duplicate feature with delivery_delay introduced with 3.8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RELOAD_PAGE_ON_SUPPLIER_CHANGE&#039;&#039;&#039; ► On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_AUTOADD_USER_CONTACT&#039;&#039;&#039; ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID&#039;&#039;&#039; ► Set the default payment method for suppliers (&amp;lt;code&amp;gt;rowid&amp;lt;/code&amp;gt; in table &amp;lt;code&amp;gt;llx_c_paiement&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_USE_DISPATCH_STATUS&#039;&#039;&#039; ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_NO_DIRECT_APPROVE&#039;&#039;&#039; ► No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_WITH_NOPRICEDEFINED&#039;&#039;&#039; ► Can enter a product even if no supplier price defined. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT&#039;&#039;&#039; ► Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. ► (v6.0+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Third Parties Module&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;COMPANY_AQUARIUM_CLEAN_REGEX&#039;&#039;&#039; ► Add a REGEX rule on the third parties names. It apply a regex replacement pattern on generated code if COMPANY_AQUARIUM_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. For example if COMPANY_AQUARIUM_CLEAN_REGEX = &#039;&amp;lt;code&amp;gt;^..(..)..(.*)&amp;lt;/code&amp;gt;&#039; the first char and second char are removed and the char 5 and 6 too ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_FORCE_DEFAULT_STATE_ID&#039;&#039;&#039; ►  &amp;lt;code&amp;gt;rowid (integer)&amp;lt;/code&amp;gt; of a state/province as defined in &amp;lt;code&amp;gt;llx_c_departements&amp;lt;/code&amp;gt;. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_CUSTOMERS&#039;&#039;&#039; ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_PROSPECTS&#039;&#039;&#039; ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_DISABLE_STATE&#039;&#039;&#039; ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_NOTSUPPLIER_BY_DEFAULT&#039;&#039;&#039; ► Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_SORT_ON_TYPEENT&#039;&#039;&#039; ► The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_CREATE_CONTACT&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_THIRDPARTY_CREATION_INDIVIDUAL&#039;&#039;&#039; ► With this setting as &#039;&#039;&#039;1&#039;&#039;&#039; the option is set for third parties to be created WITH the child contact ► (v&amp;lt;5.0)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USEVAT&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX1&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_DEFAULT_USELOCALTAX2&#039;&#039;&#039; ► When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PARENT_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO&#039;&#039;&#039; ► Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SOCIETE_ASK_FOR_SHIPPING_METHOD&#039;&#039;&#039; ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD&#039;&#039;&#039; ► When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL&#039;&#039;&#039; ► External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER&#039;&#039;&#039; ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VAT Report&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;MAIN_INCLUDE_ZERO_VAT_IN_REPORTS&#039;&#039;&#039; ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;WYSIWYG Editor&#039;&#039;&#039; ==&lt;br /&gt;
* &#039;&#039;&#039;FCKEDITOR_ENABLE_DETAILS_FULL&#039;&#039;&#039; ► Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranted with this. Also if the image is removed or renamed by the image hoster, your proposal, order or invoice will be broken.&lt;br /&gt;
[[#Top|(back to top)]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40770</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40770"/>
		<updated>2019-01-18T09:49:23Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* List of available Contexts in Dolibarr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique (may be repeated in various code modules), so to identify the location accurately, code modules have a &amp;quot;context&amp;quot; name that will be referred to by all hooks in that code module location.&lt;br /&gt;
So to use a hook, you need to know its context name (its location) and the hook name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context Name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in the php files.&lt;br /&gt;
This will find results such as &amp;quot;$hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;));&amp;quot; where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook Name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; in the block of code you are interest in modifying...possibly there may be no hook defined so you may add your own (and submit a corresponding pull-request in Github so it gets included in a future version).&lt;br /&gt;
This will find results such as &amp;quot;$reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action);&amp;quot; where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name.&lt;br /&gt;
&lt;br /&gt;
= Adding a hook point into code=&lt;br /&gt;
To add a hook into a module (so that the module can be &#039;&#039;hooked&#039;&#039; by others), two code additions are required in each php script where you want to implement hooks. Hooks are implemented in Dolibarr core modules in the same manner.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activates the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use, to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context dedicated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send data to the hook so the hooking function can process it. It can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, usually the current module&#039;s data (eg: the invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook functions =&lt;br /&gt;
&lt;br /&gt;
To use a hook (to add to/replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]). Using a hook function is a part of creating a custom module, so please use the built-in Module Builder to easily create a custom module from a template so you can then modify the relevant hook section.&lt;br /&gt;
&lt;br /&gt;
One the descriptor is created, two further steps are required:&lt;br /&gt;
&lt;br /&gt;
1- add your module/the core module context name to the list of contexts you want to hook on.&lt;br /&gt;
This means that when the core program code executes a context, your module hook function will be called.&lt;br /&gt;
Edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and add the context name to the variable &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039;.&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to change YourModuleName to your own module&#039;s name!&lt;br /&gt;
&lt;br /&gt;
Note: one way to determine the context name of the core module that you wish to modify is by adding this code in that modules php code:&lt;br /&gt;
print(&#039;Module context: &#039;.$object-&amp;gt;context);&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Note that when you add a new context name to the &#039;hooks&#039; =&amp;gt; array, this list of contexts must be stored in the database. This only occurs when the custom module is enabled.&lt;br /&gt;
So, when you add/remove/modify/rename any context name, you MUST disable and enable the custom module for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will override a hook (a function) with your own function.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overriding the doActions function : replacing the parent function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when the program executes the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook. Note the calling context is stored in  $parameters[&#039;context&#039;] which is added to the array when it branches through hookmanager.&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object/data that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is passed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook ($reshook) is 0 / 1 if successful, or negative if in error.&lt;br /&gt;
&lt;br /&gt;
Return Code 0. In this case if the subsequent core module code function is enclosed by&lt;br /&gt;
if (empty($reshook)) {...}&lt;br /&gt;
it will execute as normal but with the data modified by your custom function.&lt;br /&gt;
&lt;br /&gt;
Return Code 1. In this case if the subsequent core module code function is enclosed by&lt;br /&gt;
if (empty($reshook)) {...}&lt;br /&gt;
it will not execute at all. So this means it has been replaced by your custom  function.&lt;br /&gt;
&lt;br /&gt;
Return code is negative if an error has occurred in your function. You can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be loaded with the contents of this array, may be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code may also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all the available hooks in Dolibarr core code? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
There are many, and more are added in each version update.&lt;br /&gt;
This is small list of some example hooks (not up to date/complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list changes continually as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find a complete list of available module context names in Dolibarr, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list changes as hooks and contexts are added into Dolibarr, so if you really need to find a specific context, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40769</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40769"/>
		<updated>2019-01-18T09:47:47Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* List of available Hooks in Dolibarr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique (may be repeated in various code modules), so to identify the location accurately, code modules have a &amp;quot;context&amp;quot; name that will be referred to by all hooks in that code module location.&lt;br /&gt;
So to use a hook, you need to know its context name (its location) and the hook name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context Name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in the php files.&lt;br /&gt;
This will find results such as &amp;quot;$hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;));&amp;quot; where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook Name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; in the block of code you are interest in modifying...possibly there may be no hook defined so you may add your own (and submit a corresponding pull-request in Github so it gets included in a future version).&lt;br /&gt;
This will find results such as &amp;quot;$reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action);&amp;quot; where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name.&lt;br /&gt;
&lt;br /&gt;
= Adding a hook point into code=&lt;br /&gt;
To add a hook into a module (so that the module can be &#039;&#039;hooked&#039;&#039; by others), two code additions are required in each php script where you want to implement hooks. Hooks are implemented in Dolibarr core modules in the same manner.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activates the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use, to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context dedicated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send data to the hook so the hooking function can process it. It can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, usually the current module&#039;s data (eg: the invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook functions =&lt;br /&gt;
&lt;br /&gt;
To use a hook (to add to/replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]). Using a hook function is a part of creating a custom module, so please use the built-in Module Builder to easily create a custom module from a template so you can then modify the relevant hook section.&lt;br /&gt;
&lt;br /&gt;
One the descriptor is created, two further steps are required:&lt;br /&gt;
&lt;br /&gt;
1- add your module/the core module context name to the list of contexts you want to hook on.&lt;br /&gt;
This means that when the core program code executes a context, your module hook function will be called.&lt;br /&gt;
Edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and add the context name to the variable &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039;.&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to change YourModuleName to your own module&#039;s name!&lt;br /&gt;
&lt;br /&gt;
Note: one way to determine the context name of the core module that you wish to modify is by adding this code in that modules php code:&lt;br /&gt;
print(&#039;Module context: &#039;.$object-&amp;gt;context);&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Note that when you add a new context name to the &#039;hooks&#039; =&amp;gt; array, this list of contexts must be stored in the database. This only occurs when the custom module is enabled.&lt;br /&gt;
So, when you add/remove/modify/rename any context name, you MUST disable and enable the custom module for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will override a hook (a function) with your own function.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overriding the doActions function : replacing the parent function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when the program executes the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook. Note the calling context is stored in  $parameters[&#039;context&#039;] which is added to the array when it branches through hookmanager.&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object/data that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is passed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook ($reshook) is 0 / 1 if successful, or negative if in error.&lt;br /&gt;
&lt;br /&gt;
Return Code 0. In this case if the subsequent core module code function is enclosed by&lt;br /&gt;
if (empty($reshook)) {...}&lt;br /&gt;
it will execute as normal but with the data modified by your custom function.&lt;br /&gt;
&lt;br /&gt;
Return Code 1. In this case if the subsequent core module code function is enclosed by&lt;br /&gt;
if (empty($reshook)) {...}&lt;br /&gt;
it will not execute at all. So this means it has been replaced by your custom  function.&lt;br /&gt;
&lt;br /&gt;
Return code is negative if an error has occurred in your function. You can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be loaded with the contents of this array, may be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code may also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all the available hooks in Dolibarr core code? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
There are many, and more are added in each version update.&lt;br /&gt;
This is small list of some example hooks (not up to date/complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list changes continually as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find the complete list of available modules&#039; context in Dolibarr&#039;s nomenclatura, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40768</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40768"/>
		<updated>2019-01-18T09:45:51Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Implement the Hook */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique (may be repeated in various code modules), so to identify the location accurately, code modules have a &amp;quot;context&amp;quot; name that will be referred to by all hooks in that code module location.&lt;br /&gt;
So to use a hook, you need to know its context name (its location) and the hook name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context Name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in the php files.&lt;br /&gt;
This will find results such as &amp;quot;$hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;));&amp;quot; where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook Name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; in the block of code you are interest in modifying...possibly there may be no hook defined so you may add your own (and submit a corresponding pull-request in Github so it gets included in a future version).&lt;br /&gt;
This will find results such as &amp;quot;$reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action);&amp;quot; where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name.&lt;br /&gt;
&lt;br /&gt;
= Adding a hook point into code=&lt;br /&gt;
To add a hook into a module (so that the module can be &#039;&#039;hooked&#039;&#039; by others), two code additions are required in each php script where you want to implement hooks. Hooks are implemented in Dolibarr core modules in the same manner.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activates the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use, to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context dedicated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send data to the hook so the hooking function can process it. It can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, usually the current module&#039;s data (eg: the invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook functions =&lt;br /&gt;
&lt;br /&gt;
To use a hook (to add to/replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]). Using a hook function is a part of creating a custom module, so please use the built-in Module Builder to easily create a custom module from a template so you can then modify the relevant hook section.&lt;br /&gt;
&lt;br /&gt;
One the descriptor is created, two further steps are required:&lt;br /&gt;
&lt;br /&gt;
1- add your module/the core module context name to the list of contexts you want to hook on.&lt;br /&gt;
This means that when the core program code executes a context, your module hook function will be called.&lt;br /&gt;
Edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and add the context name to the variable &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039;.&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to change YourModuleName to your own module&#039;s name!&lt;br /&gt;
&lt;br /&gt;
Note: one way to determine the context name of the core module that you wish to modify is by adding this code in that modules php code:&lt;br /&gt;
print(&#039;Module context: &#039;.$object-&amp;gt;context);&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Note that when you add a new context name to the &#039;hooks&#039; =&amp;gt; array, this list of contexts must be stored in the database. This only occurs when the custom module is enabled.&lt;br /&gt;
So, when you add/remove/modify/rename any context name, you MUST disable and enable the custom module for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will override a hook (a function) with your own function.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overriding the doActions function : replacing the parent function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when the program executes the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook. Note the calling context is stored in  $parameters[&#039;context&#039;] which is added to the array when it branches through hookmanager.&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object/data that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is passed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook ($reshook) is 0 / 1 if successful, or negative if in error.&lt;br /&gt;
&lt;br /&gt;
Return Code 0. In this case if the subsequent core module code function is enclosed by&lt;br /&gt;
if (empty($reshook)) {...}&lt;br /&gt;
it will execute as normal but with the data modified by your custom function.&lt;br /&gt;
&lt;br /&gt;
Return Code 1. In this case if the subsequent core module code function is enclosed by&lt;br /&gt;
if (empty($reshook)) {...}&lt;br /&gt;
it will not execute at all. So this means it has been replaced by your custom  function.&lt;br /&gt;
&lt;br /&gt;
Return code is negative if an error has occurred in your function. You can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be loaded with the contents of this array, may be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code may also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all available hooks in Dolibarr&#039;s nomenclatura ? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find the complete list of available modules&#039; context in Dolibarr&#039;s nomenclatura, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40767</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40767"/>
		<updated>2019-01-18T09:20:57Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Add a hook to insert code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique (may be repeated in various code modules), so to identify the location accurately, code modules have a &amp;quot;context&amp;quot; name that will be referred to by all hooks in that code module location.&lt;br /&gt;
So to use a hook, you need to know its context name (its location) and the hook name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context Name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in the php files.&lt;br /&gt;
This will find results such as &amp;quot;$hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;));&amp;quot; where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook Name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; in the block of code you are interest in modifying...possibly there may be no hook defined so you may add your own (and submit a corresponding pull-request in Github so it gets included in a future version).&lt;br /&gt;
This will find results such as &amp;quot;$reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action);&amp;quot; where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name.&lt;br /&gt;
&lt;br /&gt;
= Adding a hook point into code=&lt;br /&gt;
To add a hook into a module (so that the module can be &#039;&#039;hooked&#039;&#039; by others), two code additions are required in each php script where you want to implement hooks. Hooks are implemented in Dolibarr core modules in the same manner.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activates the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use, to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context dedicated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send data to the hook so the hooking function can process it. It can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, usually the current module&#039;s data (eg: the invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook =&lt;br /&gt;
&lt;br /&gt;
To use a hook (add or replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]), and then you need to do 2 things:&lt;br /&gt;
&lt;br /&gt;
1- add your module to the list of contexts you want to hook on.&lt;br /&gt;
This means that when a context you hook will happen, your module hook code will be called.&lt;br /&gt;
To do that, just edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and edit the &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039; variable with something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course change YourModuleName with your own module&#039;s name.&lt;br /&gt;
&lt;br /&gt;
Note: you can find the current module&#039;s context with print(&#039;Module context: &#039;.$object-&amp;gt;context); (put this inside the module&#039;s php file where the hook resides and that you want to hook).&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Be careful: do not forget to DISABLE then ENABLE the module in the admin panel to accept the new context, because these constants are only added/refreshed to the database when re-enabling your module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will overload a hook (a function) with your own.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overloading the doActions function : replacing the parent&#039;s function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when you access the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook (eg: the context, always accessible by $parameters[&#039;context&#039;]).&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is conveyed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook is 0 or 1 if success, negative if error. In general, it will be 0. It can be 1, which means that, in some specific cases, your code hook completely replaces what Dolibarr would do without the hook. If return code is negative, you can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be enriched with the contents of this array, which can be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code can also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all available hooks in Dolibarr&#039;s nomenclatura ? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find the complete list of available modules&#039; context in Dolibarr&#039;s nomenclatura, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40766</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40766"/>
		<updated>2019-01-17T13:06:42Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique (may be repeated in various code modules), so to identify the location accurately, code modules have a &amp;quot;context&amp;quot; name that will be referred to by all hooks in that code module location.&lt;br /&gt;
So to use a hook, you need to know its context name (its location) and the hook name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context Name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in the php files.&lt;br /&gt;
This will find results such as &amp;quot;$hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;));&amp;quot; where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook Name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; in the block of code you are interest in modifying...possibly there may be no hook defined so you may add your own (and submit a corresponding pull-request in Github so it gets included in a future version).&lt;br /&gt;
This will find results such as &amp;quot;$reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action);&amp;quot; where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name.&lt;br /&gt;
&lt;br /&gt;
= Add a hook to insert code =&lt;br /&gt;
To implement a hook in your own module (so that your module can be &#039;&#039;hooked&#039;&#039; by others), you have two steps to follow.&lt;br /&gt;
&lt;br /&gt;
These steps must be followed for every php script of your module where you want to implement hooks. This is also how hooks are implemented in Dolibarr core modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activate the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context deidcated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send more custom data to the hook (the hooking function can then process it). Place here anything you want, it can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, mainly the current module&#039;s data (eg: invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook =&lt;br /&gt;
&lt;br /&gt;
To use a hook (add or replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]), and then you need to do 2 things:&lt;br /&gt;
&lt;br /&gt;
1- add your module to the list of contexts you want to hook on.&lt;br /&gt;
This means that when a context you hook will happen, your module hook code will be called.&lt;br /&gt;
To do that, just edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and edit the &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039; variable with something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course change YourModuleName with your own module&#039;s name.&lt;br /&gt;
&lt;br /&gt;
Note: you can find the current module&#039;s context with print(&#039;Module context: &#039;.$object-&amp;gt;context); (put this inside the module&#039;s php file where the hook resides and that you want to hook).&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Be careful: do not forget to DISABLE then ENABLE the module in the admin panel to accept the new context, because these constants are only added/refreshed to the database when re-enabling your module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will overload a hook (a function) with your own.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overloading the doActions function : replacing the parent&#039;s function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when you access the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook (eg: the context, always accessible by $parameters[&#039;context&#039;]).&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is conveyed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook is 0 or 1 if success, negative if error. In general, it will be 0. It can be 1, which means that, in some specific cases, your code hook completely replaces what Dolibarr would do without the hook. If return code is negative, you can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be enriched with the contents of this array, which can be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code can also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all available hooks in Dolibarr&#039;s nomenclatura ? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find the complete list of available modules&#039; context in Dolibarr&#039;s nomenclatura, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40765</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40765"/>
		<updated>2019-01-17T13:06:33Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique (may be repeated in various code modules), so to identify the location accurately, code modules have a &amp;quot;context&amp;quot; name that will be referred to by all hooks in that code module location.&lt;br /&gt;
So to use a hook, you need to know its context name (its location) and the hook name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context Name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in the php files.&lt;br /&gt;
This will find results such as &amp;quot;$hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;));&amp;quot; where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook Name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; in the block of code you are interest in modifying...possibly there may be no hook defined so you may add your own (and submit a corresponding pull-request in Githbub so it gets included in a future version).&lt;br /&gt;
This will find results such as &amp;quot;$reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action);&amp;quot; where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name.&lt;br /&gt;
&lt;br /&gt;
= Add a hook to insert code =&lt;br /&gt;
To implement a hook in your own module (so that your module can be &#039;&#039;hooked&#039;&#039; by others), you have two steps to follow.&lt;br /&gt;
&lt;br /&gt;
These steps must be followed for every php script of your module where you want to implement hooks. This is also how hooks are implemented in Dolibarr core modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activate the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context deidcated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send more custom data to the hook (the hooking function can then process it). Place here anything you want, it can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, mainly the current module&#039;s data (eg: invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook =&lt;br /&gt;
&lt;br /&gt;
To use a hook (add or replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]), and then you need to do 2 things:&lt;br /&gt;
&lt;br /&gt;
1- add your module to the list of contexts you want to hook on.&lt;br /&gt;
This means that when a context you hook will happen, your module hook code will be called.&lt;br /&gt;
To do that, just edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and edit the &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039; variable with something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course change YourModuleName with your own module&#039;s name.&lt;br /&gt;
&lt;br /&gt;
Note: you can find the current module&#039;s context with print(&#039;Module context: &#039;.$object-&amp;gt;context); (put this inside the module&#039;s php file where the hook resides and that you want to hook).&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Be careful: do not forget to DISABLE then ENABLE the module in the admin panel to accept the new context, because these constants are only added/refreshed to the database when re-enabling your module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will overload a hook (a function) with your own.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overloading the doActions function : replacing the parent&#039;s function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when you access the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook (eg: the context, always accessible by $parameters[&#039;context&#039;]).&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is conveyed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook is 0 or 1 if success, negative if error. In general, it will be 0. It can be 1, which means that, in some specific cases, your code hook completely replaces what Dolibarr would do without the hook. If return code is negative, you can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be enriched with the contents of this array, which can be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code can also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all available hooks in Dolibarr&#039;s nomenclatura ? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find the complete list of available modules&#039; context in Dolibarr&#039;s nomenclatura, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40764</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40764"/>
		<updated>2019-01-17T13:03:54Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique (may be repeated in various code modules), so to identify the location accurately, code modules have a &amp;quot;context&amp;quot; name that will be referred to by all hooks in that code module location.&lt;br /&gt;
So to use a hook, you need to know its context name (its location) and the hook name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context Name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in the php files.&lt;br /&gt;
This will find results such as &amp;quot;$hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;));&amp;quot; where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook Name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; in the block of code you are interest in modifying...possibly there may be no hook defined so you may add your own (and submit a corresponding pull-request in Githbub so it gets including in future version).&lt;br /&gt;
This will find results such as &amp;quot;$reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action);&amp;quot; where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name.&lt;br /&gt;
&lt;br /&gt;
= Add a hook to insert code =&lt;br /&gt;
To implement a hook in your own module (so that your module can be &#039;&#039;hooked&#039;&#039; by others), you have two steps to follow.&lt;br /&gt;
&lt;br /&gt;
These steps must be followed for every php script of your module where you want to implement hooks. This is also how hooks are implemented in Dolibarr core modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activate the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context deidcated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send more custom data to the hook (the hooking function can then process it). Place here anything you want, it can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, mainly the current module&#039;s data (eg: invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook =&lt;br /&gt;
&lt;br /&gt;
To use a hook (add or replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]), and then you need to do 2 things:&lt;br /&gt;
&lt;br /&gt;
1- add your module to the list of contexts you want to hook on.&lt;br /&gt;
This means that when a context you hook will happen, your module hook code will be called.&lt;br /&gt;
To do that, just edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and edit the &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039; variable with something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course change YourModuleName with your own module&#039;s name.&lt;br /&gt;
&lt;br /&gt;
Note: you can find the current module&#039;s context with print(&#039;Module context: &#039;.$object-&amp;gt;context); (put this inside the module&#039;s php file where the hook resides and that you want to hook).&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Be careful: do not forget to DISABLE then ENABLE the module in the admin panel to accept the new context, because these constants are only added/refreshed to the database when re-enabling your module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will overload a hook (a function) with your own.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overloading the doActions function : replacing the parent&#039;s function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when you access the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook (eg: the context, always accessible by $parameters[&#039;context&#039;]).&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is conveyed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook is 0 or 1 if success, negative if error. In general, it will be 0. It can be 1, which means that, in some specific cases, your code hook completely replaces what Dolibarr would do without the hook. If return code is negative, you can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be enriched with the contents of this array, which can be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code can also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all available hooks in Dolibarr&#039;s nomenclatura ? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find the complete list of available modules&#039; context in Dolibarr&#039;s nomenclatura, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40763</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40763"/>
		<updated>2019-01-16T22:27:35Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique, so it must be defined within a &amp;quot;context&amp;quot; name. The context name is which code block contains the hook.&lt;br /&gt;
So to use a hook, you need to know its context (its location) and its name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in php files.&lt;br /&gt;
This will find results such as &amp;quot;$hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;));&amp;quot; where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
This will find results such as &amp;quot;$reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action);&amp;quot; where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name.&lt;br /&gt;
&lt;br /&gt;
= Add a hook to insert code =&lt;br /&gt;
To implement a hook in your own module (so that your module can be &#039;&#039;hooked&#039;&#039; by others), you have two steps to follow.&lt;br /&gt;
&lt;br /&gt;
These steps must be followed for every php script of your module where you want to implement hooks. This is also how hooks are implemented in Dolibarr core modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activate the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context deidcated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send more custom data to the hook (the hooking function can then process it). Place here anything you want, it can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, mainly the current module&#039;s data (eg: invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook =&lt;br /&gt;
&lt;br /&gt;
To use a hook (add or replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]), and then you need to do 2 things:&lt;br /&gt;
&lt;br /&gt;
1- add your module to the list of contexts you want to hook on.&lt;br /&gt;
This means that when a context you hook will happen, your module hook code will be called.&lt;br /&gt;
To do that, just edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and edit the &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039; variable with something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course change YourModuleName with your own module&#039;s name.&lt;br /&gt;
&lt;br /&gt;
Note: you can find the current module&#039;s context with print(&#039;Module context: &#039;.$object-&amp;gt;context); (put this inside the module&#039;s php file where the hook resides and that you want to hook).&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Be careful: do not forget to DISABLE then ENABLE the module in the admin panel to accept the new context, because these constants are only added/refreshed to the database when re-enabling your module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will overload a hook (a function) with your own.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overloading the doActions function : replacing the parent&#039;s function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when you access the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook (eg: the context, always accessible by $parameters[&#039;context&#039;]).&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is conveyed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook is 0 or 1 if success, negative if error. In general, it will be 0. It can be 1, which means that, in some specific cases, your code hook completely replaces what Dolibarr would do without the hook. If return code is negative, you can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be enriched with the contents of this array, which can be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code can also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all available hooks in Dolibarr&#039;s nomenclatura ? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find the complete list of available modules&#039; context in Dolibarr&#039;s nomenclatura, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40762</id>
		<title>Hooks system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Hooks_system&amp;diff=40762"/>
		<updated>2019-01-16T22:26:55Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Every business always requires something &amp;quot;extra&amp;quot; or different to the Dolibarr core functionality.&lt;br /&gt;
While all improvements and extensions to the Dolibarr code should be contributed back via Github to be included in a future version, some modifications will be too specific to be of interest to all.&lt;br /&gt;
Hence the Hooks system was introduced in Dolibarr 3.2 onwards. This allows developers to add custom code/features to the Dolibarr core files without the need to modify the core files.&lt;br /&gt;
This greatly simplifies the upgrading process by keeping modifications separate from the core code.&lt;br /&gt;
&lt;br /&gt;
As opposed to [[triggers]] (actions linked to a business event) − hooks are entry points into the program and can modify any part of the program functions.&lt;br /&gt;
There are many hooks already built into the code and you may add more. They can be considered a point where the code execution is diverted &amp;quot;out&amp;quot; of the current page and runs your code, then returns back.&lt;br /&gt;
Your custom code may add something or modify an object or completely replace an existing code block, depending on the implementation of the hook in that specific instance.&lt;br /&gt;
&lt;br /&gt;
Every hook has a name, eg. &amp;quot;doActions&amp;quot; found in this code: $reshook=$hookmanager-&amp;gt;executeHooks(&#039;doActions&#039;,$parameters,$object,$action);&lt;br /&gt;
However the hook name is often not unique, so it must be defined within a &amp;quot;context&amp;quot; name. The context name is which code block contains the hook.&lt;br /&gt;
So to use a hook, you need to know its context (its location) and its name.&lt;br /&gt;
&lt;br /&gt;
* The Hook Context name (e.g.: &amp;quot;productcard&amp;quot; for products, &amp;quot;invoicecard&amp;quot; for invoices, etc..). can be found by searching for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; in php files.&lt;br /&gt;
This will find results such as $hookmanager-&amp;gt;initHooks(array(&#039;thirdpartycomm&#039;,&#039;globalcard&#039;)); where &amp;quot;thirdpartycomm&amp;quot; is the context.&lt;br /&gt;
* The Hook name can be found by searching for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
This will find results such as $reshook = $hookmanager-&amp;gt;executeHooks(&#039;addMoreBoxStatsCustomer&#039;, $parameters, $object, $action); where &amp;quot;addMoreBoxStatsCustomer&amp;quot; is the Hook name. &lt;br /&gt;
&lt;br /&gt;
= Add a hook to insert code =&lt;br /&gt;
To implement a hook in your own module (so that your module can be &#039;&#039;hooked&#039;&#039; by others), you have two steps to follow.&lt;br /&gt;
&lt;br /&gt;
These steps must be followed for every php script of your module where you want to implement hooks. This is also how hooks are implemented in Dolibarr core modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1- Initialize the HookManager object (put this in the beginning of your script, just after includes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize technical object to manage hooks of thirdparties. Note that conf-&amp;gt;hooks_modules contains array array&lt;br /&gt;
include_once(DOL_DOCUMENT_ROOT.&#039;/core/class/hookmanager.class.php&#039;);&lt;br /&gt;
$hookmanager=new HookManager($db);&lt;br /&gt;
$hookmanager-&amp;gt;initHooks(array(&#039;context&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$hookmanager-&amp;gt;initHooks() takes 1 parameter (an array of contexts) and activate the hooks management for this script:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;context&#039;&#039;&#039;&#039; is a context string. This is simply a indicator that hooking functions can use to detect in which context they are called.&lt;br /&gt;
&lt;br /&gt;
Note: you can set several contexts in the same init (for example if you want to have a common context into several pages and want also a specific context deidcated to your page).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- Place hooks where you want to allow external code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array();&lt;br /&gt;
$reshook=$hookmanager-&amp;gt;executeHooks(&#039;hookname&#039;,$parameters,$object,$action); // See description below&lt;br /&gt;
// Note that $action and $object may have been modified by hook&lt;br /&gt;
if (empty($reshook))&lt;br /&gt;
{&lt;br /&gt;
   ... // standard code that can be disabled/replaced by hook if return code &amp;gt; 0.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$hookmanager-&amp;gt;executeHooks()&#039;&#039;&#039; takes 4 parameters and add a hook (an entry point in your script for external functions):&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;&#039;hookname&#039;&#039;&#039;&#039; is the hook&#039;s name as a string (can be anything you want, or you can follow the Dolibarr&#039;s nomenclatura, look at the list of hooks below). eg: &#039;formObjectOptions&#039;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$parameters&#039;&#039;&#039; is a custom array to send more custom data to the hook (the hooking function can then process it). Place here anything you want, it can be a file, an array of strings, anything...&lt;br /&gt;
&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$parameters=array(&#039;file&#039;=&amp;gt;&#039;my/path/to/a/file&#039;, &#039;customnames&#039;=&amp;gt;array(&#039;henry&#039;,&#039;david&#039;,&#039;john&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$object&#039;&#039;&#039; is the object you want to pass onto the hooking function, mainly the current module&#039;s data (eg: invoice object if it is invoice module, etc..). This can be anything you want, but remember this will be the main component hooking functions will be using.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;&#039;$action&#039;&#039;&#039; is a string indicating the current action (can be set to null or to something sensible like &#039;create&#039; or &#039;edit&#039;).&lt;br /&gt;
&lt;br /&gt;
Note: You will want to redo this step if you want to add multiple hooks at different places in your script.&lt;br /&gt;
&lt;br /&gt;
Now your module should be hookable, and you can follow the procedure below in &#039;&#039;&#039;Implement a hook&#039;&#039;&#039; to implement a hooking function that will take advantage of your new hooks.&lt;br /&gt;
&lt;br /&gt;
= Implement the Hook =&lt;br /&gt;
&lt;br /&gt;
To use a hook (add or replace a part of code), you first need to already have defined a module descriptor (see [[Module_development#Create_your_module_descriptor]]), and then you need to do 2 things:&lt;br /&gt;
&lt;br /&gt;
1- add your module to the list of contexts you want to hook on.&lt;br /&gt;
This means that when a context you hook will happen, your module hook code will be called.&lt;br /&gt;
To do that, just edit your &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/core/modules/mod&#039;&#039;YourModuleName&#039;&#039;.class.php&#039;&#039;&#039; and edit the &#039;&#039;&#039;$this-&amp;gt;module_parts&#039;&#039;&#039; variable with something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;module_parts = array(&lt;br /&gt;
&#039;hooks&#039; =&amp;gt; array(&#039;hookcontext1&#039;,&#039;hookcontext2&#039;)  // Set here all hooks context you want to support&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course change YourModuleName with your own module&#039;s name.&lt;br /&gt;
&lt;br /&gt;
Note: you can find the current module&#039;s context with print(&#039;Module context: &#039;.$object-&amp;gt;context); (put this inside the module&#039;s php file where the hook resides and that you want to hook).&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Be careful: do not forget to DISABLE then ENABLE the module in the admin panel to accept the new context, because these constants are only added/refreshed to the database when re-enabling your module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2- You will overload a hook (a function) with your own.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;/htdocs/&#039;&#039;yourmodulename&#039;&#039;/class/actions_&#039;&#039;yourmodulename&#039;&#039;.class.php&#039;&#039;&#039; and then put something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ActionsYourModuleName&lt;br /&gt;
{ &lt;br /&gt;
	/**&lt;br /&gt;
	 * Overloading the doActions function : replacing the parent&#039;s function with the one below&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array()         $parameters     Hook metadatas (context, etc...)&lt;br /&gt;
	 * @param   CommonObject    &amp;amp;$object        The object to process (an invoice if you are in invoice module, a propale in propale&#039;s module, etc...)&lt;br /&gt;
	 * @param   string          &amp;amp;$action        Current action (if set). Generally create or edit or null&lt;br /&gt;
	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook&lt;br /&gt;
	 * @return  int                             &amp;lt; 0 on error, 0 on success, 1 to replace standard code&lt;br /&gt;
	 */&lt;br /&gt;
	function doActions($parameters, &amp;amp;$object, &amp;amp;$action, $hookmanager)&lt;br /&gt;
	{&lt;br /&gt;
		$error = 0; // Error counter&lt;br /&gt;
		$myvalue = &#039;test&#039;; // A result value&lt;br /&gt;
&lt;br /&gt;
		print_r($parameters);&lt;br /&gt;
		echo &amp;quot;action: &amp;quot; . $action;&lt;br /&gt;
		print_r($object);&lt;br /&gt;
&lt;br /&gt;
		if (in_array(&#039;somecontext&#039;, explode(&#039;:&#039;, $parameters[&#039;context&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
		  // do something only for the context &#039;somecontext&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (! $error)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;results = array(&#039;myreturn&#039; =&amp;gt; $myvalue);&lt;br /&gt;
			$this-&amp;gt;resprints = &#039;A text to show&#039;;&lt;br /&gt;
			return 0; // or return 1 to replace standard code&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;errors[] = &#039;Error message&#039;;&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your function should now be called when you access the module/context and you will see the parameters and object and action.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;$parameters&#039;&#039;&#039; is an array of meta-data about the datas contained by the hook (eg: the context, always accessible by $parameters[&#039;context&#039;]).&lt;br /&gt;
* &#039;&#039;&#039;$object&#039;&#039;&#039; is the object that you may work on. Eg: the product if you are in the productcard context.&lt;br /&gt;
* &#039;&#039;&#039;$action&#039;&#039;&#039; is the action if one is conveyed (generally &amp;quot;create&amp;quot;, &amp;quot;edit&amp;quot; or &amp;quot;view&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;$hookmanager&#039;&#039;&#039; is propagated only to allow your hook to call another hook.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns&#039;&#039;&#039;:&lt;br /&gt;
* The return code from a hook is 0 or 1 if success, negative if error. In general, it will be 0. It can be 1, which means that, in some specific cases, your code hook completely replaces what Dolibarr would do without the hook. If return code is negative, you can also set $this-&amp;gt;errors[]=&#039;Error message to report to user&#039;&lt;br /&gt;
* If the method sets the property $this-&amp;gt;results with an array, then the array $hookmanager-&amp;gt;resArray will automatically be enriched with the contents of this array, which can be reused later.&lt;br /&gt;
* If the method sets the property $this-&amp;gt;resprints with a string, then this string will be displayed by the hook manager (method executeHook), immediately after your method exit.&lt;br /&gt;
* Your code can also modify the value of $object and $action.&lt;br /&gt;
&lt;br /&gt;
= List of available Hooks in Dolibarr =&lt;br /&gt;
How to find a complete list of all available hooks in Dolibarr&#039;s nomenclatura ? &lt;br /&gt;
Just search for &amp;quot;&#039;&#039;&#039;executeHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should easily find all the hooked methods calls.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfHooks}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= List of available Contexts in Dolibarr =&lt;br /&gt;
To find the complete list of available modules&#039; context in Dolibarr&#039;s nomenclatura, the procedure is similar to finding hooks.&lt;br /&gt;
Search for &amp;quot;&#039;&#039;&#039;initHooks(&#039;&#039;&#039;&amp;quot; through the whole sourcecode (generally called &amp;quot;find in files&amp;quot;) and you should find all the possible contexts.&lt;br /&gt;
&lt;br /&gt;
This is however a small list of them (not complete):&lt;br /&gt;
{{ListOfContexts}}&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Note: please note that this list may change in the future as hooks and contexts are added into Dolibarr, so if you really need to find a specific hooks, please search directly in the sourcecode.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Triggers]]&lt;br /&gt;
* [[Interfaces Dolibarr toward foreign systems]]&lt;br /&gt;
* [[Interfaces from foreign systems toward Dolibarr]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=40757</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=40757"/>
		<updated>2019-01-16T10:45:48Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateDocDevEs}}&lt;br /&gt;
{{TemplateDocDevFr}}&lt;br /&gt;
&lt;br /&gt;
{{Flag en}} This page list all reserved modules numbers / ID. If you build or want to build your own modules (like this [[:Category:Complementary_modules|complementary module]]), you should take an ID range here. &lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Cette page recense tous les numéros / ID réservés de modules. Si vous avez réalisé ou voulez réaliser vos propres modules (comme les [[:Category:Modules complémentaires|modules complémentaires suivant]]), vous devriez prendre une plage d&#039;ID ici.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Esta página contiene un listado de todos los id reservados para los módulos. Si ha creado o quiere realizar sus propios módulos, (como estos [[:Category:Módulos_complementarios|módulos complementarios]]), deberá reservarse un rango de ID aquí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ID 0 - 99999 =&lt;br /&gt;
{{Flag en}} Reserved for Dolibarr&#039;s internal modules.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Réservé aux modules internes de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Reservado a los módulos internos de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
= ID 100000 - 499999 =&lt;br /&gt;
{{Flag en}} Reserved area for editors in need for an ID range. You can edit this page to add your own range (limited to 1000 values per editor)&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Zone réservé aux éditeurs qui ont besoin d&#039;une plage d&#039;ID spécifiques. Vous pouvez modifier cette page pour réserver votre plage (limité à 1000 valeurs par éditeur)&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Área reservada para los partners que necesiten un rango de ID. Puede modificar esta página para reservar su rango (limitado a 1000 valores por editor)&lt;br /&gt;
&lt;br /&gt;
* ID 100000 - 100999: OpenThink (http://www.openthink.be)&lt;br /&gt;
* ID 101000 - 101999: NLTechno (https://www.nltechno.com)&lt;br /&gt;
* ID 102000 - 102999: Tiaris (http://www.tiaris.fr)&lt;br /&gt;
* ID 103000 - 103999: Open-concept.pro (http://www.open-concept.pro)&lt;br /&gt;
* ID 104000 - 104999: ATM Consulting (http://www.atm-consulting.fr)&lt;br /&gt;
* ID 105000 - 105999: GPC.solutions&lt;br /&gt;
* ID 106000 - 106999: PHPASSO&lt;br /&gt;
* ID 107000 - 107999: TecLib (http://www.teclib.com) / Auguria (http://www.auguria.net)&lt;br /&gt;
* ID 108000 - 108999: ETHICWEB&lt;br /&gt;
* ID 109000 - 109999: Aplose (http://www.aplose.fr)&lt;br /&gt;
* ID 110000 - 110999: Librethic (https://librethic.io)&lt;br /&gt;
* ID 111000 - 111999: Asset IT (www.assetit.ch)&lt;br /&gt;
* ID 112000 - 112999: Aarboard AG (www.aarboard.ch)&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)&lt;br /&gt;
* ID 121000 - 121999: Oscss - Shop &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: backbone internet service (www.backbone.co.at)&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)&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)&lt;br /&gt;
* ID 131000 - 131999: Joan Louis (itaca.fr)&lt;br /&gt;
* ID 132000 - 132999: Jean-Marie Arsac (https://azimut.fr)&lt;br /&gt;
* ID 133000 - 133999: Oriel Systems Ltd, UK. (www.orielsystems.com)&lt;br /&gt;
* ID 135000 - 135999: Net-Logic (http://netlogic.fr)&lt;br /&gt;
* ID 140000 - 140999: Altairis&lt;br /&gt;
* ID 150000 - 150999: Jeffinfo &lt;br /&gt;
* ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&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 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
* ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
* ID 180000 - 180999: Triangle Ingénierie&lt;br /&gt;
* ID 190000 - 190999: Diciannove (http://19.coop)&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 300000 - 300999: AtooNet (http://www.atoo-net.com)&lt;br /&gt;
* ID 320000 - 320999: Novus Studios (www.novusstudios.it)&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 (http://www.sergibyte.com)&lt;br /&gt;
* ID 404000 - 404999: Aikhan&lt;br /&gt;
* ID 405000 - 405999: AIME (http://www.aime.mx)&lt;br /&gt;
* ID 409000 - 409999: LliureTIC (www.lliuretic.cat)&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 422200 - 422999: Artaban (http://artaban.fr)&lt;br /&gt;
* ID 423000 - 423050: cyberesprit&lt;br /&gt;
* ID 423051 - 423099: R.Bossard&lt;br /&gt;
* ID 423100 - 423199: Joliciel (www.joliciel.fr)&lt;br /&gt;
* ID 424000 - 424999: A3sys - Mon-Dolibarr (http://www.mon-dolibarr.fr)&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 - 427000: Bruno Caldas (https://github.com/BCaldas)&lt;br /&gt;
* ID 427001 - 427999: Kevin GUERRIER (alias xcl.saian)&lt;br /&gt;
* ID 428000 - 428099: af83&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 436000 - 436099: SOWEBIO (www.soweb.io)&lt;br /&gt;
* ID 436100 - 436199: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
* ID 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&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 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 (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 - 460050: torvista - Spain&lt;br /&gt;
&lt;br /&gt;
= ID &amp;gt; 500000 =&lt;br /&gt;
*861000 - 861999: Patrick Delcroix&lt;br /&gt;
&lt;br /&gt;
{{Flag en}} 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 (1000 ids maximum per partner).&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Si vous n&#039;avez pas de numéros réservés et en avez besoin, n&#039;utilisez pas de chiffres au hasard et utilisez une valeur supérieure à 500000, toutefois, il est préférable d&#039;obtenir un compte wiki, et  réserver vous-même votre plage en ajoutant votre entrée dans la zone 100000 - 499999 (pas plus de 1000 numéros par partenaire).&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Si no dispone de número reservado y necesita, no use cifras redondeadas y usa un valor superior a 500000. Si tiene una cuenta wiki, puede reservarse usted mismo sus id añadiendo su entrada en la zona 100000 - 499999 (no más de 1000 id por partner).&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Create_a_PDF_document_template&amp;diff=40692</id>
		<title>Create a PDF document template</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Create_a_PDF_document_template&amp;diff=40692"/>
		<updated>2019-01-13T18:24:38Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
This page describes how to create your own document-generation module (for proposals, invoices, etc...)&lt;br /&gt;
The tutorial uses Commercial Proposals as an example but the same process is used for any type of document.&lt;br /&gt;
&lt;br /&gt;
Building a PDF template requires some PHP knowledge.&lt;br /&gt;
An ODT template does not require PHP knowledge. To build an ODT template, see this page [[Create an ODT document template]]. &lt;br /&gt;
&lt;br /&gt;
= Prerequisite =&lt;br /&gt;
* Dolibarr: 3.0+&lt;br /&gt;
* Knowledge in PHP development&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Find a document template that is the closest to your requirements =&lt;br /&gt;
You may review the existing templates by going to the module setup area and by clicking on the &amp;quot;preview&amp;quot; logo.&lt;br /&gt;
Choose one that is the best match to your needs. In this example, we will use the template &amp;quot;azur&amp;quot; that corresponds to the file&lt;br /&gt;
pdf_propale_azur.modules.php&lt;br /&gt;
&lt;br /&gt;
All document models are in &#039;&#039;&#039;htdocs/core/modules&#039;&#039;&#039;, in subdirectories, for example&lt;br /&gt;
propale for commercial proposals&lt;br /&gt;
facture for invoices&lt;br /&gt;
commandes for orders, etc... &lt;br /&gt;
and finally &#039;&#039;&#039;doc&#039;&#039;&#039; or &#039;&#039;&#039;pdf&#039;&#039;&#039;.&lt;br /&gt;
For instance, a customized proposal template will be located in &#039;&#039;&#039;...core/modules/propale/doc/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Create your new template =&lt;br /&gt;
Do not modify a template. Copy the file and rename it. &lt;br /&gt;
For this example, we will call the new template &#039;mycompanyblue&#039;, based on the template &#039;azur&#039;:&lt;br /&gt;
* Copy and paste file pdf_propale_azur.modules.php&lt;br /&gt;
* Rename the copy as pdf_propale_mycompanyblue.modules.php&lt;br /&gt;
* Edit and make the following changes in the code: &lt;br /&gt;
# Rename &#039;Class pdf_propale_azur { &#039; to &#039;Class pdf_propale_mycompanyblue { &#039;&lt;br /&gt;
# Rename &#039;Function pdf_propale_azur ($db=0)&#039; to &#039;Function pdf_propale_mycompanyblue ($db=0)&#039; . This may not exist.&lt;br /&gt;
# Rename constant $this-&amp;gt;name to match your new template name.&lt;br /&gt;
For example for &#039;azur&#039; template, change line &#039;$this-&amp;gt;name = &amp;quot;azur&amp;quot;;&#039; to &#039;$this-&amp;gt;name = &amp;quot;mycompanyblue&amp;quot;;&#039;.&lt;br /&gt;
# Save file. Now the template will be available in the list of models in Dolibarr.&lt;br /&gt;
# Test this model (see previous section) before going further ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Customize content of your new template =&lt;br /&gt;
Customize the new template. In file pdf_propale_mycompanyblue.modules.php, search for function &lt;br /&gt;
&#039;Function _pagehead (&amp;amp;$pdf, $fac)&#039;. This defines the header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Library for PDF manipulation ==&lt;br /&gt;
The library used to create PDF documents in PHP is called FPDF and can be found in htdocs/includes/tcpdf/tcpdf.class.php. This class contains the methods used to generate different parts of documents.&lt;br /&gt;
&lt;br /&gt;
Templates instantiate the FPDF class and use its methods combined with the specific data of the invoice, order etc.&lt;br /&gt;
&lt;br /&gt;
We can generally find the following calls into templates that generate PDF documents:&lt;br /&gt;
* $pdf-&amp;gt;SetFont() - &#039;&#039;Define the font to use for the text&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;SetXY() - &#039;&#039;Define position (X,Y) for next text that will be output onto page&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;MultiCell() - &#039;&#039;Draw a box containing text. Used to output any text&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;GetY() - &#039;&#039;Return current Y position&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;SetDrawColor() - &#039;&#039;Set the color to use for new text to write - ie black (0,0,0) or white (255,255,255)&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;Rect() - &#039;&#039;Draw a rectangle whose top left corner coordinates are defined by two first parameters and bottom right corner is defined by two following parameters that are relative values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Frame of scripts ==&lt;br /&gt;
During the development of version 2.2, the scripts used for generating PDF documents had the following methods (taking as example the model &amp;quot;crabe&amp;quot;) inside the class with the model&#039;s name:&lt;br /&gt;
* pdf_crabe() - &#039;&#039;Creator of the object pdf&#039;&#039;&lt;br /&gt;
* write_pdf_file() - &#039;&#039;General method for generating the file. This method calls all the following ones after initializing some variables&#039;&#039;&lt;br /&gt;
* _pagehead() - &#039;&#039;Method for drawing the heading of the document, including in general the logo, the title of the document (and the date) as well as the frames of the issuer and the addressee of the document&#039;&#039;&lt;br /&gt;
* _tableau() - &#039;&#039;Method for drawing the details table (products, services,...)&#039;&#039;&lt;br /&gt;
* _tableau_info() - &#039;&#039;Method for drawing the table containing information list present in the bill&#039;&#039;&lt;br /&gt;
* _tableau_tot() - &#039;&#039;Method for drawing table of Totals&#039;&#039;&lt;br /&gt;
* _tableau_versement() - &#039;&#039;Method for drawing table of payment rules&#039;&#039;&lt;br /&gt;
* _pagefoot() - &#039;&#039;Method for drawing bottom of the page&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples of customization ==&lt;br /&gt;
=== Insert a logo ===&lt;br /&gt;
* Add following instructions&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pdf-&amp;gt;Image(&#039;\www\htdocs\dolibarr\document\societe\logo.jpg&#039;, 10, 5, 60.00);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
With this example: 10=abscissa, 5=ordinate, 60=with of logo&lt;br /&gt;
* If the logo is on or outside existing text, remove existing text by commenting the code that outputs the text or by changing its position.&lt;br /&gt;
&lt;br /&gt;
=== Insert text ===&lt;br /&gt;
Most common function to use&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pdf-&amp;gt;setX(float a); // set current x position&lt;br /&gt;
$pdf-&amp;gt;setY(float b); // set current y position&lt;br /&gt;
$pdf-&amp;gt;setXY(float a,float b); // fixe les positions x et y courantes&lt;br /&gt;
$pdf-&amp;gt;SetTextColor(0,0,200); // fixe la couleur du texte&lt;br /&gt;
$pdf-&amp;gt;SetFont(&#039;Arial&#039;,&#039;B&#039;,14); // fixe la police, le type ( &#039;B&#039; pour gras, &#039;I&#039; pour italique, &#039;&#039; pour normal,...)&lt;br /&gt;
$pdf-&amp;gt;MultiCell(60, 8, &#039;Mon texte&amp;quot;, 0, &#039;L&#039;); // imprime &#039;Mon texte&#039; avec saut de ligne&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note: Origin for setXY functions are the top left corner of page.&lt;br /&gt;
&lt;br /&gt;
=== Add a PDF Annotation (comment) ===&lt;br /&gt;
&#039;&#039;Left side of the page around the middle:&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pdf-&amp;gt;Annotation(102, 202, 10, 10, &amp;quot;this is the comment text&amp;quot;, array(&#039;Subtype&#039;=&amp;gt;&#039;Text&#039;, &#039;Name&#039; =&amp;gt; &#039;Comment&#039;, &#039;T&#039; =&amp;gt; &#039;this is comment author&#039;, &#039;Subj&#039; =&amp;gt; &#039;this is comment title&#039;, &#039;C&#039; =&amp;gt; array(255, 255, 0)));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Right side of the page around the middle:&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pdf-&amp;gt;Annotation(202, 102, 10, 10, &amp;quot;this is the comment text&amp;quot;, array(&#039;Subtype&#039;=&amp;gt;&#039;Text&#039;, &#039;Name&#039; =&amp;gt; &#039;Comment&#039;, &#039;T&#039; =&amp;gt; &#039;this is comment author&#039;, &#039;Subj&#039; =&amp;gt; &#039;this is comment title&#039;, &#039;C&#039; =&amp;gt; array(255, 255, 0)));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More information ==&lt;br /&gt;
* http://www.fpdf.org/?lang=en&lt;br /&gt;
* List of TCPDF&#039;s methods: tcpdf.org/doc/code/classTCPDF.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Activate your new model =&lt;br /&gt;
In page Home =&amp;gt; Setup =&amp;gt; Modules =&amp;gt;&lt;br /&gt;
* activate your module&lt;br /&gt;
* eventually, set it as the default model.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== Q: My PDF template doesn&#039;t understand foreign characters, it outputs them as ??? ==&lt;br /&gt;
&lt;br /&gt;
This is probably a font problem, the current font used for generating the PDF cannot handle the foreign characters you are trying to print. So just try to use another font.&lt;br /&gt;
&lt;br /&gt;
You will find the fonts used by Dolibarr to print PDF inside your Dolibarr folder.../includes/tcpdf/fonts/&lt;br /&gt;
&lt;br /&gt;
To change the font used for generating PDF, you need to edit the &#039;main.lang&#039; file of the language you are using (you&#039;ll find the file in your Dolibarr.../langs/en_US/main.lang for instance if you use English)&lt;br /&gt;
&lt;br /&gt;
* Edit the main.lang file&lt;br /&gt;
* Locate the constant FONTFORPDF at the beginning of the file and change the value to FONTFORPDF=dejavusans for instance if you want to use dejavusans. Please note that sometimes FONTFORPDF may be missing, in this case you should add it at the beginning of the file.&lt;br /&gt;
* Save the file and try again to generate your PDF.&lt;br /&gt;
&lt;br /&gt;
If you are unlucky, you can try with more fonts, just go to the TCPDF website sourceforge.net/projects/tcpdf/files/ and download the latest zip package. Then extract only the &#039;fonts&#039; folder from the zip. Then copy the files in your Dolibarr installation .../includes/tcpdf/fonts/ so you will get more fonts to play with.&lt;br /&gt;
&lt;br /&gt;
Also, please make a backup of your files modification.&lt;br /&gt;
&lt;br /&gt;
Alternative if this doesn&#039;t work: make sure the Translation class is correctly instantiated and loaded with the correct language inside your PDF templates (stored inside the $langs or $outputlangs variable).&lt;br /&gt;
&lt;br /&gt;
Thanks to Humphrey for the tip.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Create_a_PDF_document_template&amp;diff=40691</id>
		<title>Create a PDF document template</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Create_a_PDF_document_template&amp;diff=40691"/>
		<updated>2019-01-13T18:23:25Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
This page describes how to create your own document-generation module (for proposals, invoices, etc...)&lt;br /&gt;
The tutorial uses Commercial Proposals as an example but the same process is used for any type of document.&lt;br /&gt;
&lt;br /&gt;
Building a PDF template requires some PHP knowledge.&lt;br /&gt;
An ODT template does not require PHP knowledge: to build an ODT template, see this page [[Create an ODT document template]]. &lt;br /&gt;
&lt;br /&gt;
= Prerequisite =&lt;br /&gt;
* Dolibarr: 3.0+&lt;br /&gt;
* Knowledge in PHP development&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Find a document template that is the closest to your requirements =&lt;br /&gt;
You may review the existing templates by going to the module setup area and by clicking on the &amp;quot;preview&amp;quot; logo.&lt;br /&gt;
Choose one that is the best match to your needs. In this example, we will use the template &amp;quot;azur&amp;quot; that corresponds to the file&lt;br /&gt;
pdf_propale_azur.modules.php&lt;br /&gt;
&lt;br /&gt;
All document models are in &#039;&#039;&#039;htdocs/core/modules&#039;&#039;&#039;, in subdirectories, for example&lt;br /&gt;
propale for commercial proposals&lt;br /&gt;
facture for invoices&lt;br /&gt;
commandes for orders, etc... &lt;br /&gt;
and finally &#039;&#039;&#039;doc&#039;&#039;&#039; or &#039;&#039;&#039;pdf&#039;&#039;&#039;.&lt;br /&gt;
For instance, a customized proposal template will be located in &#039;&#039;&#039;...core/modules/propale/doc/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Create your new template =&lt;br /&gt;
Do not modify a template. Copy the file and rename it. &lt;br /&gt;
For this example, we will call the new template &#039;mycompanyblue&#039;, based on the template &#039;azur&#039;:&lt;br /&gt;
* Copy and paste file pdf_propale_azur.modules.php&lt;br /&gt;
* Rename the copy as pdf_propale_mycompanyblue.modules.php&lt;br /&gt;
* Edit and make the following changes in the code: &lt;br /&gt;
# Rename &#039;Class pdf_propale_azur { &#039; to &#039;Class pdf_propale_mycompanyblue { &#039;&lt;br /&gt;
# Rename &#039;Function pdf_propale_azur ($db=0)&#039; to &#039;Function pdf_propale_mycompanyblue ($db=0)&#039; . This may not exist.&lt;br /&gt;
# Rename constant $this-&amp;gt;name to match your new template name.&lt;br /&gt;
For example for &#039;azur&#039; template, change line &#039;$this-&amp;gt;name = &amp;quot;azur&amp;quot;;&#039; to &#039;$this-&amp;gt;name = &amp;quot;mycompanyblue&amp;quot;;&#039;.&lt;br /&gt;
# Save file. Now the template will be available in the list of models in Dolibarr.&lt;br /&gt;
# Test this model (see previous section) before going further ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Customize content of your new template =&lt;br /&gt;
Customize the new template. In file pdf_propale_mycompanyblue.modules.php, search for function &lt;br /&gt;
&#039;Function _pagehead (&amp;amp;$pdf, $fac)&#039;. This defines the header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Library for PDF manipulation ==&lt;br /&gt;
The library used to create PDF documents in PHP is called FPDF and can be found in htdocs/includes/tcpdf/tcpdf.class.php. This class contains the methods used to generate different parts of documents.&lt;br /&gt;
&lt;br /&gt;
Templates instantiate the FPDF class and use its methods combined with the specific data of the invoice, order etc.&lt;br /&gt;
&lt;br /&gt;
We can generally find the following calls into templates that generate PDF documents:&lt;br /&gt;
* $pdf-&amp;gt;SetFont() - &#039;&#039;Define the font to use for the text&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;SetXY() - &#039;&#039;Define position (X,Y) for next text that will be output onto page&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;MultiCell() - &#039;&#039;Draw a box containing text. Used to output any text&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;GetY() - &#039;&#039;Return current Y position&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;SetDrawColor() - &#039;&#039;Set the color to use for new text to write - ie black (0,0,0) or white (255,255,255)&#039;&#039;&lt;br /&gt;
* $pdf-&amp;gt;Rect() - &#039;&#039;Draw a rectangle whose top left corner coordinates are defined by two first parameters and bottom right corner is defined by two following parameters that are relative values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Frame of scripts ==&lt;br /&gt;
During the development of version 2.2, the scripts used for generating PDF documents had the following methods (taking as example the model &amp;quot;crabe&amp;quot;) inside the class with the model&#039;s name:&lt;br /&gt;
* pdf_crabe() - &#039;&#039;Creator of the object pdf&#039;&#039;&lt;br /&gt;
* write_pdf_file() - &#039;&#039;General method for generating the file. This method calls all the following ones after initializing some variables&#039;&#039;&lt;br /&gt;
* _pagehead() - &#039;&#039;Method for drawing the heading of the document, including in general the logo, the title of the document (and the date) as well as the frames of the issuer and the addressee of the document&#039;&#039;&lt;br /&gt;
* _tableau() - &#039;&#039;Method for drawing the details table (products, services,...)&#039;&#039;&lt;br /&gt;
* _tableau_info() - &#039;&#039;Method for drawing the table containing information list present in the bill&#039;&#039;&lt;br /&gt;
* _tableau_tot() - &#039;&#039;Method for drawing table of Totals&#039;&#039;&lt;br /&gt;
* _tableau_versement() - &#039;&#039;Method for drawing table of payment rules&#039;&#039;&lt;br /&gt;
* _pagefoot() - &#039;&#039;Method for drawing bottom of the page&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples of customization ==&lt;br /&gt;
=== Insert a logo ===&lt;br /&gt;
* Add following instructions&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pdf-&amp;gt;Image(&#039;\www\htdocs\dolibarr\document\societe\logo.jpg&#039;, 10, 5, 60.00);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
With this example: 10=abscissa, 5=ordinate, 60=with of logo&lt;br /&gt;
* If the logo is on or outside existing text, remove existing text by commenting the code that outputs the text or by changing its position.&lt;br /&gt;
&lt;br /&gt;
=== Insert text ===&lt;br /&gt;
Most common function to use&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pdf-&amp;gt;setX(float a); // set current x position&lt;br /&gt;
$pdf-&amp;gt;setY(float b); // set current y position&lt;br /&gt;
$pdf-&amp;gt;setXY(float a,float b); // fixe les positions x et y courantes&lt;br /&gt;
$pdf-&amp;gt;SetTextColor(0,0,200); // fixe la couleur du texte&lt;br /&gt;
$pdf-&amp;gt;SetFont(&#039;Arial&#039;,&#039;B&#039;,14); // fixe la police, le type ( &#039;B&#039; pour gras, &#039;I&#039; pour italique, &#039;&#039; pour normal,...)&lt;br /&gt;
$pdf-&amp;gt;MultiCell(60, 8, &#039;Mon texte&amp;quot;, 0, &#039;L&#039;); // imprime &#039;Mon texte&#039; avec saut de ligne&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note: Origin for setXY functions are the top left corner of page.&lt;br /&gt;
&lt;br /&gt;
=== Add a PDF Annotation (comment) ===&lt;br /&gt;
&#039;&#039;Left side of the page around the middle:&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pdf-&amp;gt;Annotation(102, 202, 10, 10, &amp;quot;this is the comment text&amp;quot;, array(&#039;Subtype&#039;=&amp;gt;&#039;Text&#039;, &#039;Name&#039; =&amp;gt; &#039;Comment&#039;, &#039;T&#039; =&amp;gt; &#039;this is comment author&#039;, &#039;Subj&#039; =&amp;gt; &#039;this is comment title&#039;, &#039;C&#039; =&amp;gt; array(255, 255, 0)));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Right side of the page around the middle:&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pdf-&amp;gt;Annotation(202, 102, 10, 10, &amp;quot;this is the comment text&amp;quot;, array(&#039;Subtype&#039;=&amp;gt;&#039;Text&#039;, &#039;Name&#039; =&amp;gt; &#039;Comment&#039;, &#039;T&#039; =&amp;gt; &#039;this is comment author&#039;, &#039;Subj&#039; =&amp;gt; &#039;this is comment title&#039;, &#039;C&#039; =&amp;gt; array(255, 255, 0)));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More information ==&lt;br /&gt;
* http://www.fpdf.org/?lang=en&lt;br /&gt;
* List of TCPDF&#039;s methods: tcpdf.org/doc/code/classTCPDF.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Activate your new model =&lt;br /&gt;
In page Home =&amp;gt; Setup =&amp;gt; Modules =&amp;gt;&lt;br /&gt;
* activate your module&lt;br /&gt;
* eventually, set it as the default model.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== Q: My PDF template doesn&#039;t understand foreign characters, it outputs them as ??? ==&lt;br /&gt;
&lt;br /&gt;
This is probably a font problem, the current font used for generating the PDF cannot handle the foreign characters you are trying to print. So just try to use another font.&lt;br /&gt;
&lt;br /&gt;
You will find the fonts used by Dolibarr to print PDF inside your Dolibarr folder.../includes/tcpdf/fonts/&lt;br /&gt;
&lt;br /&gt;
To change the font used for generating PDF, you need to edit the &#039;main.lang&#039; file of the language you are using (you&#039;ll find the file in your Dolibarr.../langs/en_US/main.lang for instance if you use English)&lt;br /&gt;
&lt;br /&gt;
* Edit the main.lang file&lt;br /&gt;
* Locate the constant FONTFORPDF at the beginning of the file and change the value to FONTFORPDF=dejavusans for instance if you want to use dejavusans. Please note that sometimes FONTFORPDF may be missing, in this case you should add it at the beginning of the file.&lt;br /&gt;
* Save the file and try again to generate your PDF.&lt;br /&gt;
&lt;br /&gt;
If you are unlucky, you can try with more fonts, just go to the TCPDF website sourceforge.net/projects/tcpdf/files/ and download the latest zip package. Then extract only the &#039;fonts&#039; folder from the zip. Then copy the files in your Dolibarr installation .../includes/tcpdf/fonts/ so you will get more fonts to play with.&lt;br /&gt;
&lt;br /&gt;
Also, please make a backup of your files modification.&lt;br /&gt;
&lt;br /&gt;
Alternative if this doesn&#039;t work: make sure the Translation class is correctly instantiated and loaded with the correct language inside your PDF templates (stored inside the $langs or $outputlangs variable).&lt;br /&gt;
&lt;br /&gt;
Thanks to Humphrey for the tip.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Categories_(developer)&amp;diff=40322</id>
		<title>Module Categories (developer)</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Categories_(developer)&amp;diff=40322"/>
		<updated>2018-11-15T17:37:08Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateModEN Developer}}&lt;br /&gt;
{{BasculeDevUserEn|&lt;br /&gt;
name=Category|&lt;br /&gt;
num=1780|&lt;br /&gt;
devdoc=This page|&lt;br /&gt;
userdoc=[[Module Categories]]|}}&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
The category module adds a way to classify customer third parties, supplier third parties and products in one or multiple categories.&lt;br /&gt;
&lt;br /&gt;
= Entity Category =&lt;br /&gt;
{{TemplateDocDevEntityEn|&lt;br /&gt;
class=htdocs/categories/class/categorie.class.php}}&lt;br /&gt;
&lt;br /&gt;
= Permissions =&lt;br /&gt;
* -&amp;gt;categorie-&amp;gt;lire&lt;br /&gt;
* -&amp;gt;categorie-&amp;gt;creer&lt;br /&gt;
* -&amp;gt;categorie-&amp;gt;supprimer&lt;br /&gt;
* -&amp;gt;categorie-&amp;gt;voir&lt;br /&gt;
&lt;br /&gt;
= Tables SQL =&lt;br /&gt;
* [[Table llx categorie|llx categorie]] Contains different categories for different &amp;quot;objects&amp;quot; of Dolibarr (suppliers, customers, products, ...)&lt;br /&gt;
* [[Table llx categorie association|llx categorie association]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39983</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39983"/>
		<updated>2018-10-08T14:01:06Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* MultiCurreny */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help about screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu path:&#039;&#039;&#039; Home -&amp;gt; Setup -&amp;gt; Other&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= List of Known Hidden Options =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; in &#039;&#039;&#039;Home -&amp;gt; Setup -&amp;gt; Other Setup&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
== Global Options ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_NOTES_TAB (core) =&amp;gt; Display total of notes in the card page&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_CONTACTS_TAB (core) =&amp;gt; Display total of contacts in the card page&lt;br /&gt;
&lt;br /&gt;
* MAIN_LOGOUT_GOTO_URL =&amp;gt; (core) url to which the user will be redirected after LOGOUT.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FILESYSTEM_ENCODING =&amp;gt; With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on linux or osx system, and iso-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable MAIN_FILESYSTEM_ENCODING to &amp;quot;utf-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TECHNICAL_ID =&amp;gt; Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAXTABS_IN_CARD =&amp;gt; Max number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ONLY_LOGIN_ALLOWED =&amp;gt; Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SECURITY_CSRF_WITH_TOKEN (&amp;gt;= 5.0) =&amp;gt; Activate a second anti CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful.&lt;br /&gt;
&lt;br /&gt;
* MAIN_APPLICATION_TITLE =&amp;gt; This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTOFILL_DATE =&amp;gt; If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports ! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_FULL_SCANLIST =&amp;gt; Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIRST_TO_UPPER =&amp;gt; Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_LOG_TO_HTML (MAIN_LOGTOHTML before 3.9) =&amp;gt; If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_HOURMIN_IN_DATE_RANGE =&amp;gt; On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REMOVE_INSTALL_WARNING =&amp;gt; Remove all security warnings that appear to administrator users if URL /install is public. You should solve the problem if warning occurs, instead of removing the warning! For this, put a file called install.lock into Dolibarr root directory. This will stop the warning but also make the page /install not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* MAIN_OPTIMIZE_SPEED =&amp;gt; Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPLACE_TRANS_xx_XX =&amp;gt; Where xx_XX is language code. If value is string1:newstring1;string2:newstring2 then replace string1 with newstring1 in all translation done for language xx_XX.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPEATCONTACTONEACHTAB =&amp;gt; If added and set to 1, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_JQUERY_JNOTIFY =&amp;gt; Disable usage of JNotify to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_JEDITABLE =&amp;gt; Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this features, because, it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. So this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_MULTISELECT =&amp;gt; Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* MAIN_HELPCENTER_LINKTOUSE  =&amp;gt; Define the url link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* MAIN_MODULES_FOR_EXTERNAL =&amp;gt; Limit available modules for external users. By default value is &#039;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TUNING_INFO =&amp;gt; Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOL_SCRIPTS_ROOT =&amp;gt; Define directory who contains &#039;scripts&#039; directory (e.g /var/www/dolibarr)&lt;br /&gt;
&lt;br /&gt;
* MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING =&amp;gt; A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE =&amp;gt; Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_AJAX_COMBOX =&amp;gt; If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting constant MAIN_DISABLE_AJAX_COMBOX to 1 into Home-Setup-Other (with Dolibarr v3.6.0+).&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_CACHE_MANIFEST =&amp;gt; Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* MAIN_FORCELANGDIR =&amp;gt; relative path of the directory holding your custom langs folder.&lt;br /&gt;
&lt;br /&gt;
* MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS =&amp;gt; allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* MAIN_HTML_TITLE =&amp;gt; can be used to control how the html page title is formatted. If value contains key &#039;noapp&#039;, application name will not be output. If value contains &#039;thirdpartynameonly&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;noapp;thirdpartynameonly&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_LANDING_PAGE =&amp;gt; (&amp;gt;= 3.9). Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param).&lt;br /&gt;
&lt;br /&gt;
* MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN =&amp;gt; (&amp;gt;= 4.0) When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible.&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_ROUND =&amp;gt; Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_ROUND =&amp;gt; Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_PUBLIC_NOTE_IN_ADDRESS &amp;gt;=4.0 =&amp;gt; show public note in address block&lt;br /&gt;
&lt;br /&gt;
* MAIN_DEFAULT_PAYMENT_TERM_ID =&amp;gt; With id of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND =&amp;gt; Change way of rounding total TTC lines, rounding first of after&lt;br /&gt;
&lt;br /&gt;
* MAIN_VIEW_LINE_NUMBER =&amp;gt; Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME =&amp;gt; Add name of thirdparty at begin of generated document&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_TIMING =&amp;gt; Add a timestamp at end of generated document. Value must be format of timestamp. For example: %Y%m%d%H%M&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLEDRAFTSTATUS =&amp;gt; Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_OLD_SEARCH_FORM =&amp;gt; Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SERVER_TZ =&amp;gt; If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples : Europe/Paris, auto.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_FORM_ON_HOME_AREAS =&amp;gt; Show the search form on home page areas for core modules (Removed after v5 due to global search combo) (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE =&amp;gt; If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES (dolibarr 8.0) =&amp;gt; Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC (dolibarr 7.0) =&amp;gt; Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community)&lt;br /&gt;
&lt;br /&gt;
== Look or Theme ==&lt;br /&gt;
* MAIN_OPTIMIZEFORTEXTBROWSER =&amp;gt; Optimize output rendering for usage of a text browser (usefull for blind people)&lt;br /&gt;
* THEME_ELDY_DISABLE_IMAGE =&amp;gt; Disabled images of top menu for eldy theme.&lt;br /&gt;
* MAIN_MENU_HIDE_UNAUTHORIZED =&amp;gt; Hide menu if logged in user is not autorized rather than just grey them&lt;br /&gt;
* THEME_TOPMENU_STICKY_POSITION =&amp;gt; Option to fix top menu with eldy theme (hidden conf)(v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Email and SMS ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAILFORM_DISABLE_ENTERKEY (&amp;gt;= 8.0.1) =&amp;gt;  Activate javascript code to disable the enter key in the MAIL form.&lt;br /&gt;
&lt;br /&gt;
* MAIL_PREFIX_FOR_EMAIL_ID (&amp;gt;= 8.0.1) =&amp;gt;  Prefix for the mails ID. Default value is $_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DEBUG =&amp;gt; Write content with header of last mail into file dolibarr_mail.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SMS_DEBUG =&amp;gt; Write content of SMS sent into file dolibarr_sms.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ALLOW_SENDMAIL_F =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option -f. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option -f. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_SENDMAIL_FORCE_BA =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option ask PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;php.ini&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_NO_FULL_EMAIL =&amp;gt; Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIX_FOR_BUGGED_MTA =&amp;gt; Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of orange.fr or hotmail.com&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DO_NOT_USE_SIGN =&amp;gt; Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_INVOICE =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_ORDER =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_PROPAL =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_USECCC =&amp;gt; 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_AUTOCOPY_PROPOSAL_TO, MAIN_MAIL_AUTOCOPY_ORDER_TO, MAIN_MAIL_AUTOCOPY_INVOICE_TO =&amp;gt; Email to use as a BCC recipients when sending email for proposal, order or invoice. You can make this value visible by setting MAIN_EMAIL_USECCC (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_ADD_TRACK_ID =&amp;gt; When value is 1 (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is 2: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL =&amp;gt; Restrict sending of 1 email message to x recipients for same email message (x for To: + CC: + BCC:). If not defined, value is 10. Required to fight against spamming that include 1000 recipients in 1 message. Note that MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL, MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL and MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL are also available.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML =&amp;gt; Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_USE_MULTI_PART =&amp;gt; Forge email content using an alternate text part (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS =&amp;gt; If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* MAIN_COPY_FILE_IN_EVENT_AUTO =&amp;gt; Add attachement document on event auto generated by sending email from dolibarr. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS =&amp;gt; Enter the public ip address of the server, so it will appears into the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ENABLED_USER_DEST_SELECT =&amp;gt; Show also internal users into list of recipients of email in email sending form (v8.0+)&lt;br /&gt;
&lt;br /&gt;
== Third Parties module ==&lt;br /&gt;
&lt;br /&gt;
* COMPANY_AQUARIUM_CLEAN_REGEX (&amp;gt;= 8.0.1) =&amp;gt; Add a REGEX rule on the third parties names.&lt;br /&gt;
* MAIN_FORCE_DEFAULT_STATE_ID (&amp;gt;= 8.0.1) =&amp;gt;  rowid (integer) of a state/province as defined in llx_c_departements. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list.&lt;br /&gt;
* SOCIETE_DISABLE_CUSTOMERS =&amp;gt; Remove all menu and features related to customers&lt;br /&gt;
* SOCIETE_DISABLE_PROSPECTS =&amp;gt; Remove all menu and features related to prospects&lt;br /&gt;
* SOCIETE_DISABLE_STATE =&amp;gt; Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
* THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* THIRDPARTY_NOTSUPPLIER_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* SOCIETE_SORT_ON_TYPEENT = The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
* THIRDPARTY_DEFAULT_CREATE_CONTACT (Dolibarr 5.0+) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* MAIN_THIRDPARTY_CREATION_INDIVIDUAL (Dolibarr &amp;lt;5.0) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* THIRDPARTY_DEFAULT_USEVAT =&amp;gt; When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX1 =&amp;gt; When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX2 =&amp;gt; When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PARENT_IN_LINKTO =&amp;gt; Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO =&amp;gt; Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
* SOCIETE_ASK_FOR_SHIPPING_METHOD =&amp;gt; Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
* THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
* MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL =&amp;gt; External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
== Proposals module ==&lt;br /&gt;
* PROPAL_CLONE_ON_CREATE_PAGE =&amp;gt; On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
* MAIN_PROPAL_CHOOSE_ODT_DOCUMENT =&amp;gt; On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
* PROPAL_DISABLE_SIGNATURE =&amp;gt; Do no show the box for signature.&lt;br /&gt;
* WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES =&amp;gt; Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
* PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== Order module ==&lt;br /&gt;
* COMMANDE_REQUIRE_SOURCE =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
* COMMANDE_VALID_AFTER_CLOSE_PROPAL =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
* COMMANDE_CHANGE_THIRDPARTY =&amp;gt; Can change customer on orders&lt;br /&gt;
* ORDER_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Invoice module ==&lt;br /&gt;
* MAIN_DEPOSIT_MULTI_TVA =&amp;gt; In deposits invoice, creates one line per VAT rate from the origin document (6.0)&lt;br /&gt;
* FACTURE_SHOW_SEND_REMINDER =&amp;gt; Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; (obsolete feature).&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_EDITED =&amp;gt; Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_REMOVED =&amp;gt; Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_NEVER_BE_REMOVED =&amp;gt; Never allow to delete invoices (except draft invoices).&lt;br /&gt;
* INVOICE_POSITIVE_CREDIT_NOTE =&amp;gt; All amounts on PDF credit notes are positive.&lt;br /&gt;
* FACTURE_CHANGE_THIRDPARTY =&amp;gt; Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
* FACTURE_USE_PROFORMAT =&amp;gt; Enable PROFORMAT invoices type.&lt;br /&gt;
* FACTURE_DEPOSITS_ARE_JUST_PAYMENTS =&amp;gt; Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
* FACTURE_SENDBYEMAIL_FOR_ALL_STATUS =&amp;gt; Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT =&amp;gt; Disable VAT on genrated documents. like for an association. (it&#039;s work with crabe template)&lt;br /&gt;
* INVOICE_CREDIT_NOTE_STANDALONE (dolibarr 3.9) =&amp;gt; Can make a credit note without invoice.&lt;br /&gt;
* INVOICE_USE_SITUATION = Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
* INVOICE_USE_SITUATION_CREDIT_NOTE (dolibarr 8.0) = Enable the &amp;quot;situation credit note&amp;quot; feature (need INVOICE_USE_SITUATION)&lt;br /&gt;
* INVOICE_DISABLE_DEPOSIT = Disable deposit invoices&lt;br /&gt;
* INVOICE_DISABLE_REPLACEMENT = Disable replacement invoices&lt;br /&gt;
* INVOICE_DISABLE_CREDIT_NOTE = Disable credit notes&lt;br /&gt;
* WORKFLOW_BILL_ON_SHIPMENT = Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
* INVOICE_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Expense Report ==&lt;br /&gt;
* EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS =&amp;gt; Can enter several expense reports on same or overlapping date periods. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Export module ==&lt;br /&gt;
* EXPORT_CSV_SEPARATOR_TO_USE =&amp;gt; String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;,&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=;&lt;br /&gt;
* EXPORT_CSV_FORCE_CHARSET =&amp;gt; Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= utf-8&lt;br /&gt;
* EXPORTTOOL_CATEGORIES =&amp;gt; Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
* USE_STRICT_CSV_RULES =&amp;gt; Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Agenda module ==&lt;br /&gt;
* AGENDA_MAX_EVENTS_DAY_VIEW =&amp;gt; Define the maximum number of visible entries for each day in agenda. Default value is 3. Value 0 means no limit.&lt;br /&gt;
* AGENDA_USE_EVENT_TYPE =&amp;gt; Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
* AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS =&amp;gt; To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
* MAIN_ADD_EVENT_ON_ELEMENT_CARD =&amp;gt; Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
&lt;br /&gt;
== Products module ==&lt;br /&gt;
* MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE =&amp;gt; Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
* PRODUCT_ADD_TYPE_IN_DOCUMENTS =&amp;gt; Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
* PRODUCT_DONOTSEARCH_ANYWHERE =&amp;gt; When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
* PRODUIT_DESC_IN_LIST =&amp;gt; Show long description of product/service into lists.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; Enable module Propal merge product PDF&lt;br /&gt;
* PRODUCT_USE_OLD_PATH_FOR_PHOTO =&amp;gt; Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
* PRODUCT_USE_UNITS =&amp;gt; Enable units from dictionary in product/service card.&lt;br /&gt;
* PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL =&amp;gt; When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
* MAIN_DIRECT_STATUS_UPDATE =&amp;gt; Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. v4.0+&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_CHARGES =&amp;gt; Adds an extra field for adhoc charges at the product buying price stage. The Cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product.&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_MAX_VISIBLE_PHOTO =&amp;gt; Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;5&#039; will show the first five product photos found on the product card.&lt;br /&gt;
* PRODUCT_MAX_LENGTH_COMBO =&amp;gt; limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
* MAIN_DISABLE_FREE_LINES (&amp;gt;= 8.0) =&amp;gt; Disallow using free lines to add line in documents&lt;br /&gt;
&lt;br /&gt;
== Services module ==&lt;br /&gt;
* SERVICE_ARE_ECOMMERCE_200238EC =&amp;gt; If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
&lt;br /&gt;
== Stocks ==&lt;br /&gt;
* MAIN_SERVICES_ARE_ECOMMERCE_200238EC (&amp;lt; 8) =&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* CASHDESK_FORCE_STOCK_ON_BILL (&amp;gt;= 8.0.1) =&amp;gt; Option to force decrease of stock whatever is user setup.&lt;br /&gt;
&lt;br /&gt;
* SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED =&amp;gt; Disable stock dispatch when total expected was already received.&lt;br /&gt;
&lt;br /&gt;
== Shipments ==&lt;br /&gt;
* STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS (&amp;gt;= 8.0.1) =&amp;gt; If set, you can add a shipment line, with no stock source defined.&lt;br /&gt;
&lt;br /&gt;
* SHIPMENT_GETS_ALL_ORDER_PRODUCTS =&amp;gt; Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
&lt;br /&gt;
== Point of Sale ==&lt;br /&gt;
* CASHDESK_SHOW_KEYPAD =&amp;gt; Show a mouse key pad into Point Of Sale.&lt;br /&gt;
* POS_ADDON = Set this value to an existing numbering module rule (for example &#039;mod_facture_terre&#039;, &#039;mod_facture_mars&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value POS_ADDON to &#039;mod_facture_terre&#039; will use the numbering module &#039;terre&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use POS_NUMBERING_TERRE_FORCE_PREFIX and POS_NUMBERING_MARS_FORCE_PREFIX variable to change the prefix used).&lt;br /&gt;
&lt;br /&gt;
== Contracts ==&lt;br /&gt;
* CONTRACT_SUPPORT_PRODUCTS =&amp;gt; Products are also suggested into module contract.&lt;br /&gt;
&lt;br /&gt;
== Projects module ==&lt;br /&gt;
* PROJECT_DISABLE_UNLINK_FROM_OVERVIEW (&amp;gt;= 8.0.1) =&amp;gt; Enable removing the button from a link in the project overview.&lt;br /&gt;
* PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS =&amp;gt; Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
* PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS =&amp;gt; Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
* PROJECT_SHOW_REF_INTO_LISTS =&amp;gt; Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
* PROJECT_HIDE_UNSELECTABLES =&amp;gt; Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
* PROJECT_HIDE_TASKS =&amp;gt; Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
* PROJECT_LIST_SHOW_STARTDATE =&amp;gt; Shows start date of projects in project lists.&lt;br /&gt;
* PROJECT_LINK_ON_OVERWIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;link to&amp;quot; form on the overview page&lt;br /&gt;
* PROJECT_CREATE_ON_OVERVIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;create ...&amp;quot; button on the overview page&lt;br /&gt;
* PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY =&amp;gt; Can link an object to a project of another thirdparty&lt;br /&gt;
* PROJECT_ALLOW_COMMENT_ON_TASK =&amp;gt; Add comment feature on project task&lt;br /&gt;
&lt;br /&gt;
== Foundation module ==&lt;br /&gt;
* MEMBER_URL_REDIRECT_SUBSCRIPTION =&amp;gt; Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
* MEMBER_EXT_URL_SUBSCRIPTION_INFO =&amp;gt; Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front off payment cell, into the page to make online subscription.&lt;br /&gt;
&lt;br /&gt;
== Interventions module ==&lt;br /&gt;
* FICHINTER_CLASSIFY_BILLED =&amp;gt; Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger FICHINTER_CLASSIFY_BILLED into list of possible automatic event into agenda.&lt;br /&gt;
* FICHINTER_DISABLE_DETAILS =&amp;gt; Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
&lt;br /&gt;
== Suppliers module ==&lt;br /&gt;
* FOURN_PRODUCT_AVAILABILITY =&amp;gt; On the Suppliers price page of the products, activate the supplier product availability. This is duplicate feature with delivery_delay introduced with 3.8.&lt;br /&gt;
* RELOAD_PAGE_ON_SUPPLIER_CHANGE =&amp;gt; On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
* SUPPLIER_ORDER_AUTOADD_USER_CONTACT =&amp;gt; Add user approving supplier order as a contact automatically.&lt;br /&gt;
* SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID =&amp;gt; Set the default payment method for suppliers (rowid in table llx_c_paiement).&lt;br /&gt;
* SUPPLIER_ORDER_USE_DISPATCH_STATUS =&amp;gt; Add a status on each dispatch order line when receiving products from suppliers (v4.0+)&lt;br /&gt;
* SUPPLIER_ORDER_NO_DIRECT_APPROVE =&amp;gt; No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
* SUPPLIER_ORDER_WITH_NOPRICEDEFINED =&amp;gt; Can enter a product even if no supplier price defined. (v6.0+)&lt;br /&gt;
* SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT =&amp;gt; Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
== Bank module ==&lt;br /&gt;
* BANK_CAN_RECONCILIATE_CASHACCOUNT (3.8) =&amp;gt; Can reconciliate cash accounts&lt;br /&gt;
* BANK_DISABLE_CHECK_DEPOSIT =&amp;gt; Disable check deposit feature&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_ORDER =&amp;gt; Ask bank account during creation of an order&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL =&amp;gt; Ask bank account during creation of a proposal&lt;br /&gt;
&lt;br /&gt;
== Emailing module ==&lt;br /&gt;
* MAILING_PREFIX_FOR_EMAIL_ID =&amp;gt; Set the value that will be used to compose the &amp;quot;Email Id&amp;quot; into email headers. If you set this value to &#039;SERVER_NAME&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
* MAILING_NO_USING_PHPMAIL =&amp;gt; If set, the module emailing can&#039;t be use with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS.&lt;br /&gt;
* MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS =&amp;gt; Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option MAILING_NO_USING_PHPMAIL is set to on.&lt;br /&gt;
* MAILING_LIMIT_WARNING_PHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_PHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* MAILING_LIMIT_WARNING_NOPHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* EMAILING_USE_ADVANCED_SELECTOR =&amp;gt; Enable the advanced selector for destinaries&lt;br /&gt;
&lt;br /&gt;
* MAILING_LIMIT_SENDBYWEB =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;dolibarr_mailing_limit_sendbyweb&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
* MAILING_LIMIT_SENDBYCLI =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;dolibarr_mailing_limit_sendbycli&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
&lt;br /&gt;
== PDF options ==&lt;br /&gt;
* MAIN_DISABLE_FORCE_SAVEAS =&amp;gt; If your browser ask always to save downloaded files on disk (like PDF), try to add this option. File might appears directly into your browser.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_COMPRESSION =&amp;gt; Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* MAIN_INVERT_SENDER_RECIPIENT =&amp;gt;  Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_AUTOUPDATE =&amp;gt; Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_BACKGROUND_ON_PDF =&amp;gt; Define this constant with short name of an image (example &amp;quot;myimage.jpg&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany/logos&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library beeing crazy sometime and content on image disappeared !&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_PDF_BACKGROUND =&amp;gt; Define this constant with short name of a PDF file (example &amp;quot;mypdf.pdf&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FORCE_FONT =&amp;gt; To ignore font defined into language file and force usage of a particular font. For example &amp;quot;DejaVuSans&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FREETEXT_HEIGHT =&amp;gt; Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_TITLE_BACKGROUND_COLOR =&amp;gt; Can define a background color onto title line. Example: &#039;220,220,200&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_COMPANY_NAME_OF_CONTACT =&amp;gt; Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF =&amp;gt; Activate PDF conversion from ODT document. If value is &#039;jodconverter&#039;, java and jodconverter command line tool must be available. If value is &#039;/pathto/jodconverter.jar&#039;, then java and the jodconvertar jar must exists. soffice must also be available. MAIN_DOL_SCRIPTS_ROOT Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example /var/www/mydolibarr).&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF_DEL_SOURCE =&amp;gt; For ODT generation. If set, then initial behaviour is conserved but odt file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_INVOICES_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for supplier proposals (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOCUMENTS_WITH_PICTURE_WIDTH =&amp;gt; Can change size of picture when hidden option MAIN_GENERATE_PROPOSALS_WITH_PICTURE is used. By default value is 20.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN =&amp;gt; Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* PDF_SHOW_PROJECT =&amp;gt; Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN =&amp;gt; Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for france, &amp;quot;sort number/account&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES =&amp;gt; Value 1 or 2 change the way product ref is show (1 = show supplier ref only and not internal ref, 2 = show supplier then internal). Without, internal ref then supplier is shown.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_ADDALSOTARGETDETAILS =&amp;gt; Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME =&amp;gt; Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== WYSIWYG Editor ==&lt;br /&gt;
&lt;br /&gt;
* FCKEDITOR_ENABLE_DETAILS_FULL =&amp;gt; Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranted with this. Also if the image is removed or renamed by the image hoster, your proposal, order or invoice will be broken.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BlockedLog ==&lt;br /&gt;
&lt;br /&gt;
* BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY =&amp;gt; Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
&lt;br /&gt;
== MultiCurrency ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION =&amp;gt; Enable CurrencyLayer API synchronization&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Table_llx_product_price&amp;diff=39982</id>
		<title>Table llx product price</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Table_llx_product_price&amp;diff=39982"/>
		<updated>2018-10-08T12:30:26Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Table SQL]]&lt;br /&gt;
[[Category:Produit]]&lt;br /&gt;
[[Category:Product]]&lt;br /&gt;
[[Category:Productos]]&lt;br /&gt;
&lt;br /&gt;
{{ListOfTables}}&lt;br /&gt;
&lt;br /&gt;
= Content/Contenu/Contenido =&lt;br /&gt;
{{flag en}} Contains the current and historical selling prices of products. &lt;br /&gt;
&lt;br /&gt;
{{flag fr}} Contient les prix rattachés à un produit &lt;br /&gt;
&lt;br /&gt;
{{flag sp}} Contiene los precios relacionados con un producto&lt;br /&gt;
&lt;br /&gt;
= Structure =&lt;br /&gt;
== Table ==&lt;br /&gt;
{|  align=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;dolbox&amp;quot;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Field&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Type&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Null&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Key&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Default&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Extra&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| rowid &lt;br /&gt;
| int(11) &lt;br /&gt;
| NO&lt;br /&gt;
| PRI&lt;br /&gt;
| &lt;br /&gt;
| auto_increment &lt;br /&gt;
| technical index&lt;br /&gt;
{{FieldTms}}&lt;br /&gt;
|-&lt;br /&gt;
| fk_product&lt;br /&gt;
| int(11)&lt;br /&gt;
| NO&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ID of product ([[Table llx_product|llx_product]]-&amp;gt;rowid)&lt;br /&gt;
|-&lt;br /&gt;
| date_price&lt;br /&gt;
| datetime&lt;br /&gt;
| NO&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| date of this price change&lt;br /&gt;
|-&lt;br /&gt;
| price_level&lt;br /&gt;
| tinyint(4) &lt;br /&gt;
| NO &lt;br /&gt;
| &lt;br /&gt;
| 1 &lt;br /&gt;
| &lt;br /&gt;
| price level&lt;br /&gt;
|-&lt;br /&gt;
| price &lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| price unitary&lt;br /&gt;
|-&lt;br /&gt;
| price_ttc &lt;br /&gt;
| double(34,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| price with VAT&lt;br /&gt;
|-&lt;br /&gt;
| price_min&lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| minimum price &lt;br /&gt;
|-&lt;br /&gt;
| price_min_ttc &lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| minimum price with VAT&lt;br /&gt;
|-&lt;br /&gt;
| price_base_type &lt;br /&gt;
| varchar(3) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| HT &lt;br /&gt;
| &lt;br /&gt;
| type of price (HT/ex.tax or TTC/incl.tax)&lt;br /&gt;
|-&lt;br /&gt;
| tva_tx &lt;br /&gt;
| double(6,3) &lt;br /&gt;
| NO&lt;br /&gt;
| &lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| VAT rate&lt;br /&gt;
|-&lt;br /&gt;
| fk_user_author &lt;br /&gt;
| int(11) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| ID of creator user ([[Table llx_user|llx_user]]-&amp;gt;rowid)&lt;br /&gt;
|-&lt;br /&gt;
| envente &lt;br /&gt;
| tinyint(4)&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| is the product available for sale?&lt;br /&gt;
|}&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Keys ==&lt;br /&gt;
{|  align=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;dolbox&amp;quot;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Key&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Type&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| PRIMARY&lt;br /&gt;
| PRIMARY&lt;br /&gt;
| rowid&lt;br /&gt;
|}&amp;amp;nbsp;&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Table_llx_product_price&amp;diff=39981</id>
		<title>Table llx product price</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Table_llx_product_price&amp;diff=39981"/>
		<updated>2018-10-08T12:28:07Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Table SQL]]&lt;br /&gt;
[[Category:Produit]]&lt;br /&gt;
[[Category:Product]]&lt;br /&gt;
[[Category:Productos]]&lt;br /&gt;
&lt;br /&gt;
{{ListOfTables}}&lt;br /&gt;
&lt;br /&gt;
= Content/Contenu/Contenido =&lt;br /&gt;
{{flag en}} Contains the current and historical selling prices of products. &lt;br /&gt;
&lt;br /&gt;
{{flag fr}} Contient les prix rattachés à un produit &lt;br /&gt;
&lt;br /&gt;
{{flag sp}} Contiene los precios relacionados con un producto&lt;br /&gt;
&lt;br /&gt;
= Structure =&lt;br /&gt;
== Table ==&lt;br /&gt;
{|  align=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;dolbox&amp;quot;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Field&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Type&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Null&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Key&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Default&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Extra&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| rowid &lt;br /&gt;
| int(11) &lt;br /&gt;
| NO&lt;br /&gt;
| PRI&lt;br /&gt;
| &lt;br /&gt;
| auto_increment &lt;br /&gt;
| technical index&lt;br /&gt;
{{FieldTms}}&lt;br /&gt;
|-&lt;br /&gt;
| fk_product&lt;br /&gt;
| int(11)&lt;br /&gt;
| NO&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ID of product ([[Table llx_product|llx_product]]-&amp;gt;rowid)&lt;br /&gt;
|-&lt;br /&gt;
| date_price&lt;br /&gt;
| datetime&lt;br /&gt;
| NO&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| date of this price change&lt;br /&gt;
|-&lt;br /&gt;
| price_level&lt;br /&gt;
| tinyint(4) &lt;br /&gt;
| NO &lt;br /&gt;
| &lt;br /&gt;
| 1 &lt;br /&gt;
| &lt;br /&gt;
| price level&lt;br /&gt;
|-&lt;br /&gt;
| price &lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| price unitary&lt;br /&gt;
|-&lt;br /&gt;
| price_ttc &lt;br /&gt;
| double(34,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| price with VAT&lt;br /&gt;
|-&lt;br /&gt;
| price_min&lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| minimum price &lt;br /&gt;
|-&lt;br /&gt;
| price_min_ttc &lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| minimum price with VAT&lt;br /&gt;
|-&lt;br /&gt;
| price_base_type &lt;br /&gt;
| varchar(3) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| HT &lt;br /&gt;
| &lt;br /&gt;
| type of price (HT/ex.tax or TTC/incl.tax)&lt;br /&gt;
|-&lt;br /&gt;
| tva_tx &lt;br /&gt;
| double(6,3) &lt;br /&gt;
| NO&lt;br /&gt;
| &lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| VAT rate&lt;br /&gt;
|-&lt;br /&gt;
| fk_user_author &lt;br /&gt;
| int(11) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| ID of creator user ([[Table llx_user|llx_user]]-&amp;gt;rowid)&lt;br /&gt;
|-&lt;br /&gt;
| envente &lt;br /&gt;
| tinyint(4)&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| is the product ready for shell?&lt;br /&gt;
|}&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Keys ==&lt;br /&gt;
{|  align=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;dolbox&amp;quot;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Key&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Type&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| PRIMARY&lt;br /&gt;
| PRIMARY&lt;br /&gt;
| rowid&lt;br /&gt;
|}&amp;amp;nbsp;&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Table_llx_product&amp;diff=39949</id>
		<title>Table llx product</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Table_llx_product&amp;diff=39949"/>
		<updated>2018-10-03T20:34:21Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Table SQL]]&lt;br /&gt;
[[Category:Produit]]&lt;br /&gt;
[[Category:Product]]&lt;br /&gt;
[[Category:Productos]]&lt;br /&gt;
&lt;br /&gt;
{{ListOfTables}}&lt;br /&gt;
&lt;br /&gt;
= Content/Contenu/Contenido =&lt;br /&gt;
{{flag en}} Contains the list of products and services.&lt;br /&gt;
&lt;br /&gt;
{{flag fr}} Contient les produits et services.&lt;br /&gt;
&lt;br /&gt;
{{flag sp}} Contiene los productos y servicios.&lt;br /&gt;
&lt;br /&gt;
= Structure =&lt;br /&gt;
== Table ==&lt;br /&gt;
{|  align=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;dolbox&amp;quot;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Field&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Type&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Null&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Key&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Default&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Extra&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
{{FieldRowid}}&lt;br /&gt;
|-&lt;br /&gt;
| ref &lt;br /&gt;
| varchar(32) &lt;br /&gt;
| NO &lt;br /&gt;
| UNI &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Reference&lt;br /&gt;
{{FieldEntity}}&lt;br /&gt;
{{FieldRefExt}}&lt;br /&gt;
|-&lt;br /&gt;
| datec &lt;br /&gt;
| datetime &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| Creation date&lt;br /&gt;
{{FieldTms}}&lt;br /&gt;
|-&lt;br /&gt;
| virtual &lt;br /&gt;
| tinyint&lt;br /&gt;
| NO &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Not used&lt;br /&gt;
|-&lt;br /&gt;
| fk_parent&lt;br /&gt;
| integer&lt;br /&gt;
| NO &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Not used&lt;br /&gt;
|-&lt;br /&gt;
| label &lt;br /&gt;
| varchar(255) &lt;br /&gt;
| NO &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Label of product/service&lt;br /&gt;
|-&lt;br /&gt;
| description &lt;br /&gt;
| text &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| Description&lt;br /&gt;
|-&lt;br /&gt;
| note &lt;br /&gt;
| text &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| Comment&lt;br /&gt;
|-&lt;br /&gt;
| customcode &lt;br /&gt;
| text &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| Code, required by customs of your country, to show on documents&lt;br /&gt;
|-&lt;br /&gt;
| fk_country&lt;br /&gt;
| int&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| Id of country of origin of product (required by customs of your country)&lt;br /&gt;
|-&lt;br /&gt;
| price &lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0.00000000&lt;br /&gt;
| &lt;br /&gt;
| Unit price without tax&lt;br /&gt;
|-&lt;br /&gt;
| price_ttc &lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0.00000000 &lt;br /&gt;
| &lt;br /&gt;
| Unit price inc VAT&lt;br /&gt;
|-&lt;br /&gt;
| price_min&lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0.00000000 &lt;br /&gt;
| &lt;br /&gt;
| Minimum price without tax&lt;br /&gt;
|-&lt;br /&gt;
| price_min_ttc &lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0.00000000 &lt;br /&gt;
| &lt;br /&gt;
| Minimum price inc tax&lt;br /&gt;
|-&lt;br /&gt;
| price_base_type &lt;br /&gt;
| varchar(3) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| HT &lt;br /&gt;
| &lt;br /&gt;
| Base of price (HT=Without vat, TTC=Including tax)&lt;br /&gt;
|-&lt;br /&gt;
| tva_tx &lt;br /&gt;
| double(6,3) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| Default vat rate of product&lt;br /&gt;
|-&lt;br /&gt;
| recuperableonly &lt;br /&gt;
| integer&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0&lt;br /&gt;
| &lt;br /&gt;
| Is it a French VAT NPR or not ?&lt;br /&gt;
|-&lt;br /&gt;
| localtax1_tx&lt;br /&gt;
| double(6,3) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Default vat 2 rate of product (for countries using 2 taxes for each lines). Note: with 3.9 version, this field is not used. When entering a line into a document Dolibarr search first entry into table llx_c_tva with couple (product vat rate, product npr) to get value for localtax type and rate and store this found value into lines of document.&lt;br /&gt;
|-&lt;br /&gt;
| localtax1_type&lt;br /&gt;
| varchar(10)&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Default vat 2 type (for countries using 2 taxes for each lines). Note: with 3.9 version, this field is not used. When entering a line into a document Dolibarr search first entry into table llx_c_tva with couple (product vat rate, product npr) to get value for localtax type and rate and store this found value into lines of document.&lt;br /&gt;
|-&lt;br /&gt;
| localtax2_tx&lt;br /&gt;
| double(6,3) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Default vat 3 rate of product (for countries using 3 taxes for each lines). Note: with 3.9 version, this field is not used. When entering a line into a document Dolibarr search first entry into table llx_c_tva with couple (product vat rate, product npr) to get value for localtax type and rate and store this found value into lines of document.&lt;br /&gt;
|-&lt;br /&gt;
| localtax2_type&lt;br /&gt;
| varchar(10)&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Default vat 3 type (for countries using 2 taxes for each lines). Note: with 3.9 version, this field is not used. When entering a line into a document Dolibarr search first entry into table llx_c_tva with couple (product vat rate, product npr) to get value for localtax type and rate and store this found value into lines of document.&lt;br /&gt;
|-&lt;br /&gt;
| fk_user_author &lt;br /&gt;
| int(11) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| ID of creator user ([[Table llx_user|llx_user]]-&amp;gt;rowid)&lt;br /&gt;
|-&lt;br /&gt;
| tosell&lt;br /&gt;
| tinyint(4)&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| Is product for sale to customers (finished goods)?&lt;br /&gt;
|-&lt;br /&gt;
| tobuy&lt;br /&gt;
| tinyint(4)&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| Is product bought from suppliers (finished goods/raw materials, not virtual product/kit)?&lt;br /&gt;
|-&lt;br /&gt;
| tobatch&lt;br /&gt;
| tinyint(4)&lt;br /&gt;
| NO &lt;br /&gt;
| &lt;br /&gt;
| 0&lt;br /&gt;
| &lt;br /&gt;
| Does product has batch number, eat-by and/or sell-by date ?&lt;br /&gt;
|-&lt;br /&gt;
| fk_product_type &lt;br /&gt;
| int(11) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| type of product: 0=regular product, 1=for service, 9=other (used by external modules)&lt;br /&gt;
|-&lt;br /&gt;
| duration&lt;br /&gt;
| varchar(6)&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| duration of service (Examples: 365d, 12m, 1y)&lt;br /&gt;
|-&lt;br /&gt;
| seuil_stock_alerte &lt;br /&gt;
| int(11) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Minimum value in stock to report an alert&lt;br /&gt;
|-&lt;br /&gt;
| desired_stock&lt;br /&gt;
| int(11) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Value we always want to keep in stock (may differ from value to report an alert)&lt;br /&gt;
|-&lt;br /&gt;
| barcode &lt;br /&gt;
| varchar(255) &lt;br /&gt;
| YES &lt;br /&gt;
| MUL&lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| Barcode number (when using barcode module)&lt;br /&gt;
|-&lt;br /&gt;
| fk_barcode_type &lt;br /&gt;
| int(11) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| ID of barcode type ([[Table llx_c_barcode_type|llx_c_barcode_type]]-&amp;gt;rowid)&lt;br /&gt;
|-&lt;br /&gt;
| accountancy_code_sell&lt;br /&gt;
| varchar(15) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Accountancy code (sell)&lt;br /&gt;
|-&lt;br /&gt;
| accountancy_code_buy&lt;br /&gt;
| varchar(15) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Accountancy code (buy)&lt;br /&gt;
|-&lt;br /&gt;
| partnumber&lt;br /&gt;
| varchar(32) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| Not Used. Field can be used by external modules&lt;br /&gt;
|-&lt;br /&gt;
| weight &lt;br /&gt;
| float &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| weight value, depending on weight units&lt;br /&gt;
|-&lt;br /&gt;
| weight_units &lt;br /&gt;
| tinyint(4) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
|&lt;br /&gt;
| weight units (0=kg,-3=g,-6=mg)&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| length value, depending on length units&lt;br /&gt;
|-&lt;br /&gt;
| length_units &lt;br /&gt;
| tinyint(4) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
|&lt;br /&gt;
| length units (0=m,-1=dm,-2=cm)&lt;br /&gt;
|-&lt;br /&gt;
| surface &lt;br /&gt;
| float &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| area value, depending on area units&lt;br /&gt;
|-&lt;br /&gt;
| surface_units &lt;br /&gt;
| tinyint(4) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
|&lt;br /&gt;
| area units (0=m2,-2=dm2,-4=cm2)&lt;br /&gt;
|-&lt;br /&gt;
| volume &lt;br /&gt;
| float &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
|&lt;br /&gt;
| volume value, depending on volume area units&lt;br /&gt;
|-&lt;br /&gt;
| volume_units &lt;br /&gt;
| tinyint(4) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
| &lt;br /&gt;
| volume units (0=m3,-3=cm3,-6=mm3)&lt;br /&gt;
|-&lt;br /&gt;
| stock&lt;br /&gt;
| int(11) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL &lt;br /&gt;
|&lt;br /&gt;
| Physical stock. This field is a denormalized value (so not reliable) of count into [[Table llx_product_stock]] (using this table is reliable).&lt;br /&gt;
|-&lt;br /&gt;
| pmp &lt;br /&gt;
| double(24,8) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| 0.00000000&lt;br /&gt;
| &lt;br /&gt;
| Weighted Average Price of product&lt;br /&gt;
|-&lt;br /&gt;
| canvas &lt;br /&gt;
| varchar(15) &lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| finished&lt;br /&gt;
| tinyint(4)&lt;br /&gt;
| YES &lt;br /&gt;
| &lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| Is the product a finished product?&lt;br /&gt;
|-&lt;br /&gt;
| hidden&lt;br /&gt;
| tinyint(4)&lt;br /&gt;
| YES&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
| &lt;br /&gt;
| Not used. Deprecated field.&lt;br /&gt;
{{FieldImportKey}}&lt;br /&gt;
|}&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Keys ==&lt;br /&gt;
{|  aalign=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;dolbox&amp;quot;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Key&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Type&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| PRIMARY&lt;br /&gt;
| PRIMARY&lt;br /&gt;
| rowid&lt;br /&gt;
|- &lt;br /&gt;
| uk_product_ref&lt;br /&gt;
| UNIQUE&lt;br /&gt;
| ref,entity&lt;br /&gt;
|- &lt;br /&gt;
| idx_product_barcode&lt;br /&gt;
| MULTIPLE&lt;br /&gt;
| barcode&lt;br /&gt;
|- &lt;br /&gt;
| idx_product_import_key&lt;br /&gt;
| MULTIPLE&lt;br /&gt;
| import_key&lt;br /&gt;
|}&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
{{flag_en}} An AJAX search bar for products can be used in place of the drop-down list, by activating, in module products, the option &amp;quot;Use a search bar ...&amp;quot; and leaving AJAX/Javascript enabled in the user interface settings.&lt;br /&gt;
It&#039;s the method select_produits() of html.form.class.php which will return the list, whether in AJAX or HTML form list.&lt;br /&gt;
&lt;br /&gt;
{{flag_fr}} Une barre de recherche des produits en AJAX peut être utilisée à la place de la liste déroulante, en activant, dans le module produits, l&#039;option &amp;quot;Utiliser une barre de recherche ...&amp;quot; et en laissant AJAX/Javascript activé dans les paramètres d&#039;interface utilisateur.&lt;br /&gt;
C&#039;est la méthode select_produits() de html.form.class.php qui se charge de renvoyer la liste, qu&#039;elle soit en AJAX ou en liste de formulaire HTML.&lt;br /&gt;
&lt;br /&gt;
{{flag_sp}} Se puede utilizar una barra de búsqueda de productos en AJAX en vez de la lista despleglable, activando en el módulo de productos la opción &amp;quot;Usar una barra de busqueda...&amp;quot; y activando AJAX/Javascript en los parámetros de interface del usuario.&lt;br /&gt;
Es el método select_produits() de html.form.class.php quien se encarga de rellenar la lista, ya sea en AJAX o en lista de formulario HTML.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39935</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39935"/>
		<updated>2018-10-03T09:03:22Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Suppliers module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help about screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu path:&#039;&#039;&#039; Home -&amp;gt; Setup -&amp;gt; Other&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= List of Known Hidden Options =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; in &#039;&#039;&#039;Home -&amp;gt; Setup -&amp;gt; Other Setup&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
== Global Options ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_NOTES_TAB (core) =&amp;gt; Display total of notes in the card page&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_CONTACTS_TAB (core) =&amp;gt; Display total of contacts in the card page&lt;br /&gt;
&lt;br /&gt;
* MAIN_LOGOUT_GOTO_URL =&amp;gt; (core) url to which the user will be redirected after LOGOUT.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FILESYSTEM_ENCODING =&amp;gt; With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on linux or osx system, and iso-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable MAIN_FILESYSTEM_ENCODING to &amp;quot;utf-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TECHNICAL_ID =&amp;gt; Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAXTABS_IN_CARD =&amp;gt; Max number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ONLY_LOGIN_ALLOWED =&amp;gt; Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SECURITY_CSRF_WITH_TOKEN (&amp;gt;= 5.0) =&amp;gt; Activate a second anti CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful.&lt;br /&gt;
&lt;br /&gt;
* MAIN_APPLICATION_TITLE =&amp;gt; This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTOFILL_DATE =&amp;gt; If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports ! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_FULL_SCANLIST =&amp;gt; Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIRST_TO_UPPER =&amp;gt; Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_LOG_TO_HTML (MAIN_LOGTOHTML before 3.9) =&amp;gt; If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_HOURMIN_IN_DATE_RANGE =&amp;gt; On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REMOVE_INSTALL_WARNING =&amp;gt; Remove all security warnings that appear to administrator users if URL /install is public. You should solve the problem if warning occurs, instead of removing the warning! For this, put a file called install.lock into Dolibarr root directory. This will stop the warning but also make the page /install not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* MAIN_OPTIMIZE_SPEED =&amp;gt; Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPLACE_TRANS_xx_XX =&amp;gt; Where xx_XX is language code. If value is string1:newstring1;string2:newstring2 then replace string1 with newstring1 in all translation done for language xx_XX.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPEATCONTACTONEACHTAB =&amp;gt; If added and set to 1, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_JQUERY_JNOTIFY =&amp;gt; Disable usage of JNotify to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_JEDITABLE =&amp;gt; Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this features, because, it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. So this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_MULTISELECT =&amp;gt; Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* MAIN_HELPCENTER_LINKTOUSE  =&amp;gt; Define the url link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* MAIN_MODULES_FOR_EXTERNAL =&amp;gt; Limit available modules for external users. By default value is &#039;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TUNING_INFO =&amp;gt; Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOL_SCRIPTS_ROOT =&amp;gt; Define directory who contains &#039;scripts&#039; directory (e.g /var/www/dolibarr)&lt;br /&gt;
&lt;br /&gt;
* MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING =&amp;gt; A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE =&amp;gt; Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_AJAX_COMBOX =&amp;gt; If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting constant MAIN_DISABLE_AJAX_COMBOX to 1 into Home-Setup-Other (with Dolibarr v3.6.0+).&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_CACHE_MANIFEST =&amp;gt; Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* MAIN_FORCELANGDIR =&amp;gt; relative path of the directory holding your custom langs folder.&lt;br /&gt;
&lt;br /&gt;
* MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS =&amp;gt; allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* MAIN_HTML_TITLE =&amp;gt; can be used to control how the html page title is formatted. If value contains key &#039;noapp&#039;, application name will not be output. If value contains &#039;thirdpartynameonly&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;noapp;thirdpartynameonly&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_LANDING_PAGE =&amp;gt; (&amp;gt;= 3.9). Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param).&lt;br /&gt;
&lt;br /&gt;
* MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN =&amp;gt; (&amp;gt;= 4.0) When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible.&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_ROUND =&amp;gt; Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_ROUND =&amp;gt; Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_PUBLIC_NOTE_IN_ADDRESS &amp;gt;=4.0 =&amp;gt; show public note in address block&lt;br /&gt;
&lt;br /&gt;
* MAIN_DEFAULT_PAYMENT_TERM_ID =&amp;gt; With id of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND =&amp;gt; Change way of rounding total TTC lines, rounding first of after&lt;br /&gt;
&lt;br /&gt;
* MAIN_VIEW_LINE_NUMBER =&amp;gt; Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME =&amp;gt; Add name of thirdparty at begin of generated document&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_TIMING =&amp;gt; Add a timestamp at end of generated document. Value must be format of timestamp. For example: %Y%m%d%H%M&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLEDRAFTSTATUS =&amp;gt; Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_OLD_SEARCH_FORM =&amp;gt; Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SERVER_TZ =&amp;gt; If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples : Europe/Paris, auto.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_FORM_ON_HOME_AREAS =&amp;gt; Show the search form on home page areas for core modules (Removed after v5 due to global search combo) (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE =&amp;gt; If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES (dolibarr 8.0) =&amp;gt; Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC (dolibarr 7.0) =&amp;gt; Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community)&lt;br /&gt;
&lt;br /&gt;
== Look or Theme ==&lt;br /&gt;
* MAIN_OPTIMIZEFORTEXTBROWSER =&amp;gt; Optimize output rendering for usage of a text browser (usefull for blind people)&lt;br /&gt;
* THEME_ELDY_DISABLE_IMAGE =&amp;gt; Disabled images of top menu for eldy theme.&lt;br /&gt;
* MAIN_MENU_HIDE_UNAUTHORIZED =&amp;gt; Hide menu if logged in user is not autorized rather than just grey them&lt;br /&gt;
* THEME_TOPMENU_STICKY_POSITION =&amp;gt; Option to fix top menu with eldy theme (hidden conf)(v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Email and SMS ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAILFORM_DISABLE_ENTERKEY (&amp;gt;= 8.0.1) =&amp;gt;  Activate javascript code to disable the enter key in the MAIL form.&lt;br /&gt;
&lt;br /&gt;
* MAIL_PREFIX_FOR_EMAIL_ID (&amp;gt;= 8.0.1) =&amp;gt;  Prefix for the mails ID. Default value is $_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DEBUG =&amp;gt; Write content with header of last mail into file dolibarr_mail.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SMS_DEBUG =&amp;gt; Write content of SMS sent into file dolibarr_sms.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ALLOW_SENDMAIL_F =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option -f. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option -f. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_SENDMAIL_FORCE_BA =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option ask PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;php.ini&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_NO_FULL_EMAIL =&amp;gt; Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIX_FOR_BUGGED_MTA =&amp;gt; Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of orange.fr or hotmail.com&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DO_NOT_USE_SIGN =&amp;gt; Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_INVOICE =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_ORDER =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_PROPAL =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_USECCC =&amp;gt; 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_AUTOCOPY_PROPOSAL_TO, MAIN_MAIL_AUTOCOPY_ORDER_TO, MAIN_MAIL_AUTOCOPY_INVOICE_TO =&amp;gt; Email to use as a BCC recipients when sending email for proposal, order or invoice. You can make this value visible by setting MAIN_EMAIL_USECCC (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_ADD_TRACK_ID =&amp;gt; When value is 1 (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is 2: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL =&amp;gt; Restrict sending of 1 email message to x recipients for same email message (x for To: + CC: + BCC:). If not defined, value is 10. Required to fight against spamming that include 1000 recipients in 1 message. Note that MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL, MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL and MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL are also available.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML =&amp;gt; Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_USE_MULTI_PART =&amp;gt; Forge email content using an alternate text part (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS =&amp;gt; If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* MAIN_COPY_FILE_IN_EVENT_AUTO =&amp;gt; Add attachement document on event auto generated by sending email from dolibarr. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS =&amp;gt; Enter the public ip address of the server, so it will appears into the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ENABLED_USER_DEST_SELECT =&amp;gt; Show also internal users into list of recipients of email in email sending form (v8.0+)&lt;br /&gt;
&lt;br /&gt;
== Third Parties module ==&lt;br /&gt;
&lt;br /&gt;
* COMPANY_AQUARIUM_CLEAN_REGEX (&amp;gt;= 8.0.1) =&amp;gt; Add a REGEX rule on the third parties names.&lt;br /&gt;
* MAIN_FORCE_DEFAULT_STATE_ID (&amp;gt;= 8.0.1) =&amp;gt;  rowid (integer) of a state/province as defined in llx_c_departements. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list.&lt;br /&gt;
* SOCIETE_DISABLE_CUSTOMERS =&amp;gt; Remove all menu and features related to customers&lt;br /&gt;
* SOCIETE_DISABLE_PROSPECTS =&amp;gt; Remove all menu and features related to prospects&lt;br /&gt;
* SOCIETE_DISABLE_STATE =&amp;gt; Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
* THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* THIRDPARTY_NOTSUPPLIER_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* SOCIETE_SORT_ON_TYPEENT = The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
* THIRDPARTY_DEFAULT_CREATE_CONTACT (Dolibarr 5.0+) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* MAIN_THIRDPARTY_CREATION_INDIVIDUAL (Dolibarr &amp;lt;5.0) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* THIRDPARTY_DEFAULT_USEVAT =&amp;gt; When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX1 =&amp;gt; When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX2 =&amp;gt; When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PARENT_IN_LINKTO =&amp;gt; Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO =&amp;gt; Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
* SOCIETE_ASK_FOR_SHIPPING_METHOD =&amp;gt; Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
* THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
* MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL =&amp;gt; External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
== Proposals module ==&lt;br /&gt;
* PROPAL_CLONE_ON_CREATE_PAGE =&amp;gt; On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
* MAIN_PROPAL_CHOOSE_ODT_DOCUMENT =&amp;gt; On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
* PROPAL_DISABLE_SIGNATURE =&amp;gt; Do no show the box for signature.&lt;br /&gt;
* WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES =&amp;gt; Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
* PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== Order module ==&lt;br /&gt;
* COMMANDE_REQUIRE_SOURCE =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
* COMMANDE_VALID_AFTER_CLOSE_PROPAL =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
* COMMANDE_CHANGE_THIRDPARTY =&amp;gt; Can change customer on orders&lt;br /&gt;
* ORDER_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Invoice module ==&lt;br /&gt;
* MAIN_DEPOSIT_MULTI_TVA =&amp;gt; In deposits invoice, creates one line per VAT rate from the origin document (6.0)&lt;br /&gt;
* FACTURE_SHOW_SEND_REMINDER =&amp;gt; Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; (obsolete feature).&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_EDITED =&amp;gt; Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_REMOVED =&amp;gt; Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_NEVER_BE_REMOVED =&amp;gt; Never allow to delete invoices (except draft invoices).&lt;br /&gt;
* INVOICE_POSITIVE_CREDIT_NOTE =&amp;gt; All amounts on PDF credit notes are positive.&lt;br /&gt;
* FACTURE_CHANGE_THIRDPARTY =&amp;gt; Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
* FACTURE_USE_PROFORMAT =&amp;gt; Enable PROFORMAT invoices type.&lt;br /&gt;
* FACTURE_DEPOSITS_ARE_JUST_PAYMENTS =&amp;gt; Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
* FACTURE_SENDBYEMAIL_FOR_ALL_STATUS =&amp;gt; Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT =&amp;gt; Disable VAT on genrated documents. like for an association. (it&#039;s work with crabe template)&lt;br /&gt;
* INVOICE_CREDIT_NOTE_STANDALONE (dolibarr 3.9) =&amp;gt; Can make a credit note without invoice.&lt;br /&gt;
* INVOICE_USE_SITUATION = Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
* INVOICE_USE_SITUATION_CREDIT_NOTE (dolibarr 8.0) = Enable the &amp;quot;situation credit note&amp;quot; feature (need INVOICE_USE_SITUATION)&lt;br /&gt;
* INVOICE_DISABLE_DEPOSIT = Disable deposit invoices&lt;br /&gt;
* INVOICE_DISABLE_REPLACEMENT = Disable replacement invoices&lt;br /&gt;
* INVOICE_DISABLE_CREDIT_NOTE = Disable credit notes&lt;br /&gt;
* WORKFLOW_BILL_ON_SHIPMENT = Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
* INVOICE_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Expense Report ==&lt;br /&gt;
* EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS =&amp;gt; Can enter several expense reports on same or overlapping date periods. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Export module ==&lt;br /&gt;
* EXPORT_CSV_SEPARATOR_TO_USE =&amp;gt; String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;,&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=;&lt;br /&gt;
* EXPORT_CSV_FORCE_CHARSET =&amp;gt; Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= utf-8&lt;br /&gt;
* EXPORTTOOL_CATEGORIES =&amp;gt; Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
* USE_STRICT_CSV_RULES =&amp;gt; Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Agenda module ==&lt;br /&gt;
* AGENDA_MAX_EVENTS_DAY_VIEW =&amp;gt; Define the maximum number of visible entries for each day in agenda. Default value is 3. Value 0 means no limit.&lt;br /&gt;
* AGENDA_USE_EVENT_TYPE =&amp;gt; Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
* AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS =&amp;gt; To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
* MAIN_ADD_EVENT_ON_ELEMENT_CARD =&amp;gt; Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
&lt;br /&gt;
== Products module ==&lt;br /&gt;
* MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE =&amp;gt; Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
* PRODUCT_ADD_TYPE_IN_DOCUMENTS =&amp;gt; Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
* PRODUCT_DONOTSEARCH_ANYWHERE =&amp;gt; When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
* PRODUIT_DESC_IN_LIST =&amp;gt; Show long description of product/service into lists.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; Enable module Propal merge product PDF&lt;br /&gt;
* PRODUCT_USE_OLD_PATH_FOR_PHOTO =&amp;gt; Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
* PRODUCT_USE_UNITS =&amp;gt; Enable units from dictionary in product/service card.&lt;br /&gt;
* PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL =&amp;gt; When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
* MAIN_DIRECT_STATUS_UPDATE =&amp;gt; Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. v4.0+&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_CHARGES =&amp;gt; Adds an extra field for adhoc charges at the product buying price stage. The Cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product.&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_MAX_VISIBLE_PHOTO =&amp;gt; Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;5&#039; will show the first five product photos found on the product card.&lt;br /&gt;
* PRODUCT_MAX_LENGTH_COMBO =&amp;gt; limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
* MAIN_DISABLE_FREE_LINES (&amp;gt;= 8.0) =&amp;gt; Disallow using free lines to add line in documents&lt;br /&gt;
&lt;br /&gt;
== Services module ==&lt;br /&gt;
* SERVICE_ARE_ECOMMERCE_200238EC =&amp;gt; If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
&lt;br /&gt;
== Stocks ==&lt;br /&gt;
* MAIN_SERVICES_ARE_ECOMMERCE_200238EC (&amp;lt; 8) =&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* CASHDESK_FORCE_STOCK_ON_BILL (&amp;gt;= 8.0.1) =&amp;gt; Option to force decrease of stock whatever is user setup.&lt;br /&gt;
&lt;br /&gt;
* SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED =&amp;gt; Disable stock dispatch when total expected was already received.&lt;br /&gt;
&lt;br /&gt;
== Shipments ==&lt;br /&gt;
* STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS (&amp;gt;= 8.0.1) =&amp;gt; If set, you can add a shipment line, with no stock source defined.&lt;br /&gt;
&lt;br /&gt;
* SHIPMENT_GETS_ALL_ORDER_PRODUCTS =&amp;gt; Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
&lt;br /&gt;
== Point of Sale ==&lt;br /&gt;
* CASHDESK_SHOW_KEYPAD =&amp;gt; Show a mouse key pad into Point Of Sale.&lt;br /&gt;
* POS_ADDON = Set this value to an existing numbering module rule (for example &#039;mod_facture_terre&#039;, &#039;mod_facture_mars&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value POS_ADDON to &#039;mod_facture_terre&#039; will use the numbering module &#039;terre&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use POS_NUMBERING_TERRE_FORCE_PREFIX and POS_NUMBERING_MARS_FORCE_PREFIX variable to change the prefix used).&lt;br /&gt;
&lt;br /&gt;
== Contracts ==&lt;br /&gt;
* CONTRACT_SUPPORT_PRODUCTS =&amp;gt; Products are also suggested into module contract.&lt;br /&gt;
&lt;br /&gt;
== Projects module ==&lt;br /&gt;
* PROJECT_DISABLE_UNLINK_FROM_OVERVIEW (&amp;gt;= 8.0.1) =&amp;gt; Enable removing the button from a link in the project overview.&lt;br /&gt;
* PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS =&amp;gt; Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
* PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS =&amp;gt; Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
* PROJECT_SHOW_REF_INTO_LISTS =&amp;gt; Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
* PROJECT_HIDE_UNSELECTABLES =&amp;gt; Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
* PROJECT_HIDE_TASKS =&amp;gt; Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
* PROJECT_LIST_SHOW_STARTDATE =&amp;gt; Shows start date of projects in project lists.&lt;br /&gt;
* PROJECT_LINK_ON_OVERWIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;link to&amp;quot; form on the overview page&lt;br /&gt;
* PROJECT_CREATE_ON_OVERVIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;create ...&amp;quot; button on the overview page&lt;br /&gt;
* PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY =&amp;gt; Can link an object to a project of another thirdparty&lt;br /&gt;
* PROJECT_ALLOW_COMMENT_ON_TASK =&amp;gt; Add comment feature on project task&lt;br /&gt;
&lt;br /&gt;
== Foundation module ==&lt;br /&gt;
* MEMBER_URL_REDIRECT_SUBSCRIPTION =&amp;gt; Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
* MEMBER_EXT_URL_SUBSCRIPTION_INFO =&amp;gt; Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front off payment cell, into the page to make online subscription.&lt;br /&gt;
&lt;br /&gt;
== Interventions module ==&lt;br /&gt;
* FICHINTER_CLASSIFY_BILLED =&amp;gt; Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger FICHINTER_CLASSIFY_BILLED into list of possible automatic event into agenda.&lt;br /&gt;
* FICHINTER_DISABLE_DETAILS =&amp;gt; Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
&lt;br /&gt;
== Suppliers module ==&lt;br /&gt;
* FOURN_PRODUCT_AVAILABILITY =&amp;gt; On the Suppliers price page of the products, activate the supplier product availability. This is duplicate feature with delivery_delay introduced with 3.8.&lt;br /&gt;
* RELOAD_PAGE_ON_SUPPLIER_CHANGE =&amp;gt; On creation of a supplier order/invoice, reload form with supplier-specific details when supplier is selected from drop-down list.&lt;br /&gt;
* SUPPLIER_ORDER_AUTOADD_USER_CONTACT =&amp;gt; Add user approving supplier order as a contact automatically.&lt;br /&gt;
* SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID =&amp;gt; Set the default payment method for suppliers (rowid in table llx_c_paiement).&lt;br /&gt;
* SUPPLIER_ORDER_USE_DISPATCH_STATUS =&amp;gt; Add a status on each dispatch order line when receiving products from suppliers (v4.0+)&lt;br /&gt;
* SUPPLIER_ORDER_NO_DIRECT_APPROVE =&amp;gt; No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
* SUPPLIER_ORDER_WITH_NOPRICEDEFINED =&amp;gt; Can enter a product even if no supplier price defined. (v6.0+)&lt;br /&gt;
* SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT =&amp;gt; Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
== Bank module ==&lt;br /&gt;
* BANK_CAN_RECONCILIATE_CASHACCOUNT (3.8) =&amp;gt; Can reconciliate cash accounts&lt;br /&gt;
* BANK_DISABLE_CHECK_DEPOSIT =&amp;gt; Disable check deposit feature&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_ORDER =&amp;gt; Ask bank account during creation of an order&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL =&amp;gt; Ask bank account during creation of a proposal&lt;br /&gt;
&lt;br /&gt;
== Emailing module ==&lt;br /&gt;
* MAILING_PREFIX_FOR_EMAIL_ID =&amp;gt; Set the value that will be used to compose the &amp;quot;Email Id&amp;quot; into email headers. If you set this value to &#039;SERVER_NAME&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
* MAILING_NO_USING_PHPMAIL =&amp;gt; If set, the module emailing can&#039;t be use with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS.&lt;br /&gt;
* MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS =&amp;gt; Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option MAILING_NO_USING_PHPMAIL is set to on.&lt;br /&gt;
* MAILING_LIMIT_WARNING_PHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_PHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* MAILING_LIMIT_WARNING_NOPHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* EMAILING_USE_ADVANCED_SELECTOR =&amp;gt; Enable the advanced selector for destinaries&lt;br /&gt;
&lt;br /&gt;
* MAILING_LIMIT_SENDBYWEB =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;dolibarr_mailing_limit_sendbyweb&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
* MAILING_LIMIT_SENDBYCLI =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;dolibarr_mailing_limit_sendbycli&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
&lt;br /&gt;
== PDF options ==&lt;br /&gt;
* MAIN_DISABLE_FORCE_SAVEAS =&amp;gt; If your browser ask always to save downloaded files on disk (like PDF), try to add this option. File might appears directly into your browser.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_COMPRESSION =&amp;gt; Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* MAIN_INVERT_SENDER_RECIPIENT =&amp;gt;  Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_AUTOUPDATE =&amp;gt; Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_BACKGROUND_ON_PDF =&amp;gt; Define this constant with short name of an image (example &amp;quot;myimage.jpg&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany/logos&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library beeing crazy sometime and content on image disappeared !&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_PDF_BACKGROUND =&amp;gt; Define this constant with short name of a PDF file (example &amp;quot;mypdf.pdf&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FORCE_FONT =&amp;gt; To ignore font defined into language file and force usage of a particular font. For example &amp;quot;DejaVuSans&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FREETEXT_HEIGHT =&amp;gt; Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_TITLE_BACKGROUND_COLOR =&amp;gt; Can define a background color onto title line. Example: &#039;220,220,200&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_COMPANY_NAME_OF_CONTACT =&amp;gt; Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF =&amp;gt; Activate PDF conversion from ODT document. If value is &#039;jodconverter&#039;, java and jodconverter command line tool must be available. If value is &#039;/pathto/jodconverter.jar&#039;, then java and the jodconvertar jar must exists. soffice must also be available. MAIN_DOL_SCRIPTS_ROOT Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example /var/www/mydolibarr).&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF_DEL_SOURCE =&amp;gt; For ODT generation. If set, then initial behaviour is conserved but odt file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_INVOICES_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for supplier proposals (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOCUMENTS_WITH_PICTURE_WIDTH =&amp;gt; Can change size of picture when hidden option MAIN_GENERATE_PROPOSALS_WITH_PICTURE is used. By default value is 20.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN =&amp;gt; Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* PDF_SHOW_PROJECT =&amp;gt; Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN =&amp;gt; Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for france, &amp;quot;sort number/account&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES =&amp;gt; Value 1 or 2 change the way product ref is show (1 = show supplier ref only and not internal ref, 2 = show supplier then internal). Without, internal ref then supplier is shown.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_ADDALSOTARGETDETAILS =&amp;gt; Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME =&amp;gt; Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== WYSIWYG Editor ==&lt;br /&gt;
&lt;br /&gt;
* FCKEDITOR_ENABLE_DETAILS_FULL =&amp;gt; Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranted with this. Also if the image is removed or renamed by the image hoster, your proposal, order or invoice will be broken.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BlockedLog ==&lt;br /&gt;
&lt;br /&gt;
* BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY =&amp;gt; Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
&lt;br /&gt;
== MultiCurreny ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION =&amp;gt; Enable CurrencyLayer API synchronization&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39933</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39933"/>
		<updated>2018-10-03T08:47:39Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Suppliers module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help about screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu path:&#039;&#039;&#039; Home -&amp;gt; Setup -&amp;gt; Other&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= List of Known Hidden Options =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; in &#039;&#039;&#039;Home -&amp;gt; Setup -&amp;gt; Other Setup&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
== Global Options ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_NOTES_TAB (core) =&amp;gt; Display total of notes in the card page&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_CONTACTS_TAB (core) =&amp;gt; Display total of contacts in the card page&lt;br /&gt;
&lt;br /&gt;
* MAIN_LOGOUT_GOTO_URL =&amp;gt; (core) url to which the user will be redirected after LOGOUT.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FILESYSTEM_ENCODING =&amp;gt; With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on linux or osx system, and iso-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable MAIN_FILESYSTEM_ENCODING to &amp;quot;utf-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TECHNICAL_ID =&amp;gt; Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAXTABS_IN_CARD =&amp;gt; Max number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ONLY_LOGIN_ALLOWED =&amp;gt; Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SECURITY_CSRF_WITH_TOKEN (&amp;gt;= 5.0) =&amp;gt; Activate a second anti CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful.&lt;br /&gt;
&lt;br /&gt;
* MAIN_APPLICATION_TITLE =&amp;gt; This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTOFILL_DATE =&amp;gt; If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports ! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_FULL_SCANLIST =&amp;gt; Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIRST_TO_UPPER =&amp;gt; Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_LOG_TO_HTML (MAIN_LOGTOHTML before 3.9) =&amp;gt; If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_HOURMIN_IN_DATE_RANGE =&amp;gt; On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REMOVE_INSTALL_WARNING =&amp;gt; Remove all security warnings that appear to administrator users if URL /install is public. You should solve the problem if warning occurs, instead of removing the warning! For this, put a file called install.lock into Dolibarr root directory. This will stop the warning but also make the page /install not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* MAIN_OPTIMIZE_SPEED =&amp;gt; Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPLACE_TRANS_xx_XX =&amp;gt; Where xx_XX is language code. If value is string1:newstring1;string2:newstring2 then replace string1 with newstring1 in all translation done for language xx_XX.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPEATCONTACTONEACHTAB =&amp;gt; If added and set to 1, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_JQUERY_JNOTIFY =&amp;gt; Disable usage of JNotify to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_JEDITABLE =&amp;gt; Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this features, because, it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. So this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_MULTISELECT =&amp;gt; Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* MAIN_HELPCENTER_LINKTOUSE  =&amp;gt; Define the url link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* MAIN_MODULES_FOR_EXTERNAL =&amp;gt; Limit available modules for external users. By default value is &#039;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TUNING_INFO =&amp;gt; Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOL_SCRIPTS_ROOT =&amp;gt; Define directory who contains &#039;scripts&#039; directory (e.g /var/www/dolibarr)&lt;br /&gt;
&lt;br /&gt;
* MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING =&amp;gt; A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE =&amp;gt; Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_AJAX_COMBOX =&amp;gt; If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting constant MAIN_DISABLE_AJAX_COMBOX to 1 into Home-Setup-Other (with Dolibarr v3.6.0+).&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_CACHE_MANIFEST =&amp;gt; Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* MAIN_FORCELANGDIR =&amp;gt; relative path of the directory holding your custom langs folder.&lt;br /&gt;
&lt;br /&gt;
* MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS =&amp;gt; allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* MAIN_HTML_TITLE =&amp;gt; can be used to control how the html page title is formatted. If value contains key &#039;noapp&#039;, application name will not be output. If value contains &#039;thirdpartynameonly&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;noapp;thirdpartynameonly&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_LANDING_PAGE =&amp;gt; (&amp;gt;= 3.9). Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param).&lt;br /&gt;
&lt;br /&gt;
* MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN =&amp;gt; (&amp;gt;= 4.0) When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible.&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_ROUND =&amp;gt; Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_ROUND =&amp;gt; Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_PUBLIC_NOTE_IN_ADDRESS &amp;gt;=4.0 =&amp;gt; show public note in address block&lt;br /&gt;
&lt;br /&gt;
* MAIN_DEFAULT_PAYMENT_TERM_ID =&amp;gt; With id of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND =&amp;gt; Change way of rounding total TTC lines, rounding first of after&lt;br /&gt;
&lt;br /&gt;
* MAIN_VIEW_LINE_NUMBER =&amp;gt; Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME =&amp;gt; Add name of thirdparty at begin of generated document&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_TIMING =&amp;gt; Add a timestamp at end of generated document. Value must be format of timestamp. For example: %Y%m%d%H%M&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLEDRAFTSTATUS =&amp;gt; Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_OLD_SEARCH_FORM =&amp;gt; Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SERVER_TZ =&amp;gt; If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples : Europe/Paris, auto.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_FORM_ON_HOME_AREAS =&amp;gt; Show the search form on home page areas for core modules (Removed after v5 due to global search combo) (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE =&amp;gt; If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES (dolibarr 8.0) =&amp;gt; Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC (dolibarr 7.0) =&amp;gt; Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community)&lt;br /&gt;
&lt;br /&gt;
== Look or Theme ==&lt;br /&gt;
* MAIN_OPTIMIZEFORTEXTBROWSER =&amp;gt; Optimize output rendering for usage of a text browser (usefull for blind people)&lt;br /&gt;
* THEME_ELDY_DISABLE_IMAGE =&amp;gt; Disabled images of top menu for eldy theme.&lt;br /&gt;
* MAIN_MENU_HIDE_UNAUTHORIZED =&amp;gt; Hide menu if logged in user is not autorized rather than just grey them&lt;br /&gt;
* THEME_TOPMENU_STICKY_POSITION =&amp;gt; Option to fix top menu with eldy theme (hidden conf)(v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Email and SMS ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAILFORM_DISABLE_ENTERKEY (&amp;gt;= 8.0.1) =&amp;gt;  Activate javascript code to disable the enter key in the MAIL form.&lt;br /&gt;
&lt;br /&gt;
* MAIL_PREFIX_FOR_EMAIL_ID (&amp;gt;= 8.0.1) =&amp;gt;  Prefix for the mails ID. Default value is $_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DEBUG =&amp;gt; Write content with header of last mail into file dolibarr_mail.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SMS_DEBUG =&amp;gt; Write content of SMS sent into file dolibarr_sms.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ALLOW_SENDMAIL_F =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option -f. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option -f. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_SENDMAIL_FORCE_BA =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option ask PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;php.ini&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_NO_FULL_EMAIL =&amp;gt; Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIX_FOR_BUGGED_MTA =&amp;gt; Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of orange.fr or hotmail.com&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DO_NOT_USE_SIGN =&amp;gt; Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_INVOICE =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_ORDER =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_PROPAL =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_USECCC =&amp;gt; 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_AUTOCOPY_PROPOSAL_TO, MAIN_MAIL_AUTOCOPY_ORDER_TO, MAIN_MAIL_AUTOCOPY_INVOICE_TO =&amp;gt; Email to use as a BCC recipients when sending email for proposal, order or invoice. You can make this value visible by setting MAIN_EMAIL_USECCC (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_ADD_TRACK_ID =&amp;gt; When value is 1 (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is 2: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL =&amp;gt; Restrict sending of 1 email message to x recipients for same email message (x for To: + CC: + BCC:). If not defined, value is 10. Required to fight against spamming that include 1000 recipients in 1 message. Note that MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL, MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL and MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL are also available.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML =&amp;gt; Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_USE_MULTI_PART =&amp;gt; Forge email content using an alternate text part (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS =&amp;gt; If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* MAIN_COPY_FILE_IN_EVENT_AUTO =&amp;gt; Add attachement document on event auto generated by sending email from dolibarr. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS =&amp;gt; Enter the public ip address of the server, so it will appears into the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ENABLED_USER_DEST_SELECT =&amp;gt; Show also internal users into list of recipients of email in email sending form (v8.0+)&lt;br /&gt;
&lt;br /&gt;
== Third Parties module ==&lt;br /&gt;
&lt;br /&gt;
* COMPANY_AQUARIUM_CLEAN_REGEX (&amp;gt;= 8.0.1) =&amp;gt; Add a REGEX rule on the third parties names.&lt;br /&gt;
* MAIN_FORCE_DEFAULT_STATE_ID (&amp;gt;= 8.0.1) =&amp;gt;  rowid (integer) of a state/province as defined in llx_c_departements. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list.&lt;br /&gt;
* SOCIETE_DISABLE_CUSTOMERS =&amp;gt; Remove all menu and features related to customers&lt;br /&gt;
* SOCIETE_DISABLE_PROSPECTS =&amp;gt; Remove all menu and features related to prospects&lt;br /&gt;
* SOCIETE_DISABLE_STATE =&amp;gt; Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
* THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* THIRDPARTY_NOTSUPPLIER_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* SOCIETE_SORT_ON_TYPEENT = The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
* THIRDPARTY_DEFAULT_CREATE_CONTACT (Dolibarr 5.0+) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* MAIN_THIRDPARTY_CREATION_INDIVIDUAL (Dolibarr &amp;lt;5.0) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* THIRDPARTY_DEFAULT_USEVAT =&amp;gt; When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX1 =&amp;gt; When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX2 =&amp;gt; When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PARENT_IN_LINKTO =&amp;gt; Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO =&amp;gt; Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
* SOCIETE_ASK_FOR_SHIPPING_METHOD =&amp;gt; Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
* THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
* MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL =&amp;gt; External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
== Proposals module ==&lt;br /&gt;
* PROPAL_CLONE_ON_CREATE_PAGE =&amp;gt; On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
* MAIN_PROPAL_CHOOSE_ODT_DOCUMENT =&amp;gt; On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
* PROPAL_DISABLE_SIGNATURE =&amp;gt; Do no show the box for signature.&lt;br /&gt;
* WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES =&amp;gt; Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
* PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== Order module ==&lt;br /&gt;
* COMMANDE_REQUIRE_SOURCE =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
* COMMANDE_VALID_AFTER_CLOSE_PROPAL =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
* COMMANDE_CHANGE_THIRDPARTY =&amp;gt; Can change customer on orders&lt;br /&gt;
* ORDER_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Invoice module ==&lt;br /&gt;
* MAIN_DEPOSIT_MULTI_TVA =&amp;gt; In deposits invoice, creates one line per VAT rate from the origin document (6.0)&lt;br /&gt;
* FACTURE_SHOW_SEND_REMINDER =&amp;gt; Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; (obsolete feature).&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_EDITED =&amp;gt; Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_REMOVED =&amp;gt; Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_NEVER_BE_REMOVED =&amp;gt; Never allow to delete invoices (except draft invoices).&lt;br /&gt;
* INVOICE_POSITIVE_CREDIT_NOTE =&amp;gt; All amounts on PDF credit notes are positive.&lt;br /&gt;
* FACTURE_CHANGE_THIRDPARTY =&amp;gt; Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
* FACTURE_USE_PROFORMAT =&amp;gt; Enable PROFORMAT invoices type.&lt;br /&gt;
* FACTURE_DEPOSITS_ARE_JUST_PAYMENTS =&amp;gt; Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
* FACTURE_SENDBYEMAIL_FOR_ALL_STATUS =&amp;gt; Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT =&amp;gt; Disable VAT on genrated documents. like for an association. (it&#039;s work with crabe template)&lt;br /&gt;
* INVOICE_CREDIT_NOTE_STANDALONE (dolibarr 3.9) =&amp;gt; Can make a credit note without invoice.&lt;br /&gt;
* INVOICE_USE_SITUATION = Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
* INVOICE_USE_SITUATION_CREDIT_NOTE (dolibarr 8.0) = Enable the &amp;quot;situation credit note&amp;quot; feature (need INVOICE_USE_SITUATION)&lt;br /&gt;
* INVOICE_DISABLE_DEPOSIT = Disable deposit invoices&lt;br /&gt;
* INVOICE_DISABLE_REPLACEMENT = Disable replacement invoices&lt;br /&gt;
* INVOICE_DISABLE_CREDIT_NOTE = Disable credit notes&lt;br /&gt;
* WORKFLOW_BILL_ON_SHIPMENT = Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
* INVOICE_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Expense Report ==&lt;br /&gt;
* EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS =&amp;gt; Can enter several expense reports on same or overlapping date periods. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Export module ==&lt;br /&gt;
* EXPORT_CSV_SEPARATOR_TO_USE =&amp;gt; String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;,&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=;&lt;br /&gt;
* EXPORT_CSV_FORCE_CHARSET =&amp;gt; Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= utf-8&lt;br /&gt;
* EXPORTTOOL_CATEGORIES =&amp;gt; Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
* USE_STRICT_CSV_RULES =&amp;gt; Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Agenda module ==&lt;br /&gt;
* AGENDA_MAX_EVENTS_DAY_VIEW =&amp;gt; Define the maximum number of visible entries for each day in agenda. Default value is 3. Value 0 means no limit.&lt;br /&gt;
* AGENDA_USE_EVENT_TYPE =&amp;gt; Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
* AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS =&amp;gt; To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
* MAIN_ADD_EVENT_ON_ELEMENT_CARD =&amp;gt; Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
&lt;br /&gt;
== Products module ==&lt;br /&gt;
* MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE =&amp;gt; Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
* PRODUCT_ADD_TYPE_IN_DOCUMENTS =&amp;gt; Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
* PRODUCT_DONOTSEARCH_ANYWHERE =&amp;gt; When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
* PRODUIT_DESC_IN_LIST =&amp;gt; Show long description of product/service into lists.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; Enable module Propal merge product PDF&lt;br /&gt;
* PRODUCT_USE_OLD_PATH_FOR_PHOTO =&amp;gt; Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
* PRODUCT_USE_UNITS =&amp;gt; Enable units from dictionary in product/service card.&lt;br /&gt;
* PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL =&amp;gt; When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
* MAIN_DIRECT_STATUS_UPDATE =&amp;gt; Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. v4.0+&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_CHARGES =&amp;gt; Adds an extra field for adhoc charges at the product buying price stage. The Cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product.&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_MAX_VISIBLE_PHOTO =&amp;gt; Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;5&#039; will show the first five product photos found on the product card.&lt;br /&gt;
* PRODUCT_MAX_LENGTH_COMBO =&amp;gt; limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
* MAIN_DISABLE_FREE_LINES (&amp;gt;= 8.0) =&amp;gt; Disallow using free lines to add line in documents&lt;br /&gt;
&lt;br /&gt;
== Services module ==&lt;br /&gt;
* SERVICE_ARE_ECOMMERCE_200238EC =&amp;gt; If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
&lt;br /&gt;
== Stocks ==&lt;br /&gt;
* MAIN_SERVICES_ARE_ECOMMERCE_200238EC (&amp;lt; 8) =&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* CASHDESK_FORCE_STOCK_ON_BILL (&amp;gt;= 8.0.1) =&amp;gt; Option to force decrease of stock whatever is user setup.&lt;br /&gt;
&lt;br /&gt;
* SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED =&amp;gt; Disable stock dispatch when total expected was already received.&lt;br /&gt;
&lt;br /&gt;
== Shipments ==&lt;br /&gt;
* STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS (&amp;gt;= 8.0.1) =&amp;gt; If set, you can add a shipment line, with no stock source defined.&lt;br /&gt;
&lt;br /&gt;
* SHIPMENT_GETS_ALL_ORDER_PRODUCTS =&amp;gt; Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
&lt;br /&gt;
== Point of Sale ==&lt;br /&gt;
* CASHDESK_SHOW_KEYPAD =&amp;gt; Show a mouse key pad into Point Of Sale.&lt;br /&gt;
* POS_ADDON = Set this value to an existing numbering module rule (for example &#039;mod_facture_terre&#039;, &#039;mod_facture_mars&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value POS_ADDON to &#039;mod_facture_terre&#039; will use the numbering module &#039;terre&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use POS_NUMBERING_TERRE_FORCE_PREFIX and POS_NUMBERING_MARS_FORCE_PREFIX variable to change the prefix used).&lt;br /&gt;
&lt;br /&gt;
== Contracts ==&lt;br /&gt;
* CONTRACT_SUPPORT_PRODUCTS =&amp;gt; Products are also suggested into module contract.&lt;br /&gt;
&lt;br /&gt;
== Projects module ==&lt;br /&gt;
* PROJECT_DISABLE_UNLINK_FROM_OVERVIEW (&amp;gt;= 8.0.1) =&amp;gt; Enable removing the button from a link in the project overview.&lt;br /&gt;
* PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS =&amp;gt; Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
* PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS =&amp;gt; Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
* PROJECT_SHOW_REF_INTO_LISTS =&amp;gt; Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
* PROJECT_HIDE_UNSELECTABLES =&amp;gt; Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
* PROJECT_HIDE_TASKS =&amp;gt; Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
* PROJECT_LIST_SHOW_STARTDATE =&amp;gt; Shows start date of projects in project lists.&lt;br /&gt;
* PROJECT_LINK_ON_OVERWIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;link to&amp;quot; form on the overview page&lt;br /&gt;
* PROJECT_CREATE_ON_OVERVIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;create ...&amp;quot; button on the overview page&lt;br /&gt;
* PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY =&amp;gt; Can link an object to a project of another thirdparty&lt;br /&gt;
* PROJECT_ALLOW_COMMENT_ON_TASK =&amp;gt; Add comment feature on project task&lt;br /&gt;
&lt;br /&gt;
== Foundation module ==&lt;br /&gt;
* MEMBER_URL_REDIRECT_SUBSCRIPTION =&amp;gt; Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
* MEMBER_EXT_URL_SUBSCRIPTION_INFO =&amp;gt; Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front off payment cell, into the page to make online subscription.&lt;br /&gt;
&lt;br /&gt;
== Interventions module ==&lt;br /&gt;
* FICHINTER_CLASSIFY_BILLED =&amp;gt; Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger FICHINTER_CLASSIFY_BILLED into list of possible automatic event into agenda.&lt;br /&gt;
* FICHINTER_DISABLE_DETAILS =&amp;gt; Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
&lt;br /&gt;
== Suppliers module ==&lt;br /&gt;
* FOURN_PRODUCT_AVAILABILITY =&amp;gt; On the Suppliers price page of the products, activate the supplier product availability. This is duplicate feature with delivery_delay introduced with 3.8.&lt;br /&gt;
* SUPPLIER_ORDER_AUTOADD_USER_CONTACT =&amp;gt; Add user approving supplier order as a contact automatically.&lt;br /&gt;
* SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID =&amp;gt; Set the default payment method for suppliers (rowid in table llx_c_paiement).&lt;br /&gt;
* SUPPLIER_ORDER_USE_DISPATCH_STATUS =&amp;gt; Add a status on each dispatch order line when receiving products from suppliers (v4.0+)&lt;br /&gt;
* SUPPLIER_ORDER_NO_DIRECT_APPROVE =&amp;gt; No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
* SUPPLIER_ORDER_WITH_NOPRICEDEFINED =&amp;gt; Can enter a product even if no supplier price defined. (v6.0+)&lt;br /&gt;
* SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT =&amp;gt; Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
== Bank module ==&lt;br /&gt;
* BANK_CAN_RECONCILIATE_CASHACCOUNT (3.8) =&amp;gt; Can reconciliate cash accounts&lt;br /&gt;
* BANK_DISABLE_CHECK_DEPOSIT =&amp;gt; Disable check deposit feature&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_ORDER =&amp;gt; Ask bank account during creation of an order&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL =&amp;gt; Ask bank account during creation of a proposal&lt;br /&gt;
&lt;br /&gt;
== Emailing module ==&lt;br /&gt;
* MAILING_PREFIX_FOR_EMAIL_ID =&amp;gt; Set the value that will be used to compose the &amp;quot;Email Id&amp;quot; into email headers. If you set this value to &#039;SERVER_NAME&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
* MAILING_NO_USING_PHPMAIL =&amp;gt; If set, the module emailing can&#039;t be use with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS.&lt;br /&gt;
* MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS =&amp;gt; Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option MAILING_NO_USING_PHPMAIL is set to on.&lt;br /&gt;
* MAILING_LIMIT_WARNING_PHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_PHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* MAILING_LIMIT_WARNING_NOPHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* EMAILING_USE_ADVANCED_SELECTOR =&amp;gt; Enable the advanced selector for destinaries&lt;br /&gt;
&lt;br /&gt;
* MAILING_LIMIT_SENDBYWEB =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;dolibarr_mailing_limit_sendbyweb&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
* MAILING_LIMIT_SENDBYCLI =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;dolibarr_mailing_limit_sendbycli&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
&lt;br /&gt;
== PDF options ==&lt;br /&gt;
* MAIN_DISABLE_FORCE_SAVEAS =&amp;gt; If your browser ask always to save downloaded files on disk (like PDF), try to add this option. File might appears directly into your browser.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_COMPRESSION =&amp;gt; Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* MAIN_INVERT_SENDER_RECIPIENT =&amp;gt;  Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_AUTOUPDATE =&amp;gt; Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_BACKGROUND_ON_PDF =&amp;gt; Define this constant with short name of an image (example &amp;quot;myimage.jpg&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany/logos&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library beeing crazy sometime and content on image disappeared !&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_PDF_BACKGROUND =&amp;gt; Define this constant with short name of a PDF file (example &amp;quot;mypdf.pdf&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FORCE_FONT =&amp;gt; To ignore font defined into language file and force usage of a particular font. For example &amp;quot;DejaVuSans&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FREETEXT_HEIGHT =&amp;gt; Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_TITLE_BACKGROUND_COLOR =&amp;gt; Can define a background color onto title line. Example: &#039;220,220,200&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_COMPANY_NAME_OF_CONTACT =&amp;gt; Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF =&amp;gt; Activate PDF conversion from ODT document. If value is &#039;jodconverter&#039;, java and jodconverter command line tool must be available. If value is &#039;/pathto/jodconverter.jar&#039;, then java and the jodconvertar jar must exists. soffice must also be available. MAIN_DOL_SCRIPTS_ROOT Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example /var/www/mydolibarr).&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF_DEL_SOURCE =&amp;gt; For ODT generation. If set, then initial behaviour is conserved but odt file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_INVOICES_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for supplier proposals (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOCUMENTS_WITH_PICTURE_WIDTH =&amp;gt; Can change size of picture when hidden option MAIN_GENERATE_PROPOSALS_WITH_PICTURE is used. By default value is 20.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN =&amp;gt; Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* PDF_SHOW_PROJECT =&amp;gt; Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN =&amp;gt; Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for france, &amp;quot;sort number/account&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES =&amp;gt; Value 1 or 2 change the way product ref is show (1 = show supplier ref only and not internal ref, 2 = show supplier then internal). Without, internal ref then supplier is shown.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_ADDALSOTARGETDETAILS =&amp;gt; Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME =&amp;gt; Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== WYSIWYG Editor ==&lt;br /&gt;
&lt;br /&gt;
* FCKEDITOR_ENABLE_DETAILS_FULL =&amp;gt; Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranted with this. Also if the image is removed or renamed by the image hoster, your proposal, order or invoice will be broken.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BlockedLog ==&lt;br /&gt;
&lt;br /&gt;
* BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY =&amp;gt; Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
&lt;br /&gt;
== MultiCurreny ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION =&amp;gt; Enable CurrencyLayer API synchronization&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39866</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39866"/>
		<updated>2018-09-26T07:44:38Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help about screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu path:&#039;&#039;&#039; Home -&amp;gt; Setup -&amp;gt; Other&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= List of Known Hidden Options =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; in &#039;&#039;&#039;Home -&amp;gt; Setup -&amp;gt; Other Setup&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
== Global Options ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_NOTES_TAB (core) =&amp;gt; Display total of notes in the card page&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_CONTACTS_TAB (core) =&amp;gt; Display total of contacts in the card page&lt;br /&gt;
&lt;br /&gt;
* MAIN_LOGOUT_GOTO_URL =&amp;gt; (core) url to which the user will be redirected after LOGOUT.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FILESYSTEM_ENCODING =&amp;gt; With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on linux or osx system, and iso-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable MAIN_FILESYSTEM_ENCODING to &amp;quot;utf-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TECHNICAL_ID =&amp;gt; Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAXTABS_IN_CARD =&amp;gt; Max number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ONLY_LOGIN_ALLOWED =&amp;gt; Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SECURITY_CSRF_WITH_TOKEN (&amp;gt;= 5.0) =&amp;gt; Activate a second anti CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful.&lt;br /&gt;
&lt;br /&gt;
* MAIN_APPLICATION_TITLE =&amp;gt; This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTOFILL_DATE =&amp;gt; If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports ! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_FULL_SCANLIST =&amp;gt; Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIRST_TO_UPPER =&amp;gt; Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_LOG_TO_HTML (MAIN_LOGTOHTML before 3.9) =&amp;gt; If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_HOURMIN_IN_DATE_RANGE =&amp;gt; On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REMOVE_INSTALL_WARNING =&amp;gt; Remove all security warnings that appear to administrator users if URL /install is public. You should solve the problem if warning occurs, instead of removing the warning! For this, put a file called install.lock into Dolibarr root directory. This will stop the warning but also make the page /install not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* MAIN_OPTIMIZE_SPEED =&amp;gt; Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPLACE_TRANS_xx_XX =&amp;gt; Where xx_XX is language code. If value is string1:newstring1;string2:newstring2 then replace string1 with newstring1 in all translation done for language xx_XX.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPEATCONTACTONEACHTAB =&amp;gt; If added and set to 1, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_JQUERY_JNOTIFY =&amp;gt; Disable usage of JNotify to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_JEDITABLE =&amp;gt; Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this features, because, it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. So this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_MULTISELECT =&amp;gt; Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* MAIN_HELPCENTER_LINKTOUSE  =&amp;gt; Define the url link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* MAIN_MODULES_FOR_EXTERNAL =&amp;gt; Limit available modules for external users. By default value is &#039;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TUNING_INFO =&amp;gt; Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOL_SCRIPTS_ROOT =&amp;gt; Define directory who contains &#039;scripts&#039; directory (e.g /var/www/dolibarr)&lt;br /&gt;
&lt;br /&gt;
* MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING =&amp;gt; A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE =&amp;gt; Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_AJAX_COMBOX =&amp;gt; If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting constant MAIN_DISABLE_AJAX_COMBOX to 1 into Home-Setup-Other (with Dolibarr v3.6.0+).&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_CACHE_MANIFEST =&amp;gt; Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* MAIN_FORCELANGDIR =&amp;gt; relative path of the directory holding your custom langs folder.&lt;br /&gt;
&lt;br /&gt;
* MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS =&amp;gt; allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* MAIN_HTML_TITLE =&amp;gt; can be used to control how the html page title is formatted. If value contains key &#039;noapp&#039;, application name will not be output. If value contains &#039;thirdpartynameonly&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;noapp;thirdpartynameonly&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_LANDING_PAGE =&amp;gt; (&amp;gt;= 3.9). Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param).&lt;br /&gt;
&lt;br /&gt;
* MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN =&amp;gt; (&amp;gt;= 4.0) When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible.&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_ROUND =&amp;gt; Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_ROUND =&amp;gt; Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_PUBLIC_NOTE_IN_ADDRESS &amp;gt;=4.0 =&amp;gt; show public note in address block&lt;br /&gt;
&lt;br /&gt;
* MAIN_DEFAULT_PAYMENT_TERM_ID =&amp;gt; With id of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND =&amp;gt; Change way of rounding total TTC lines, rounding first of after&lt;br /&gt;
&lt;br /&gt;
* MAIN_VIEW_LINE_NUMBER =&amp;gt; Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME =&amp;gt; Add name of thirdparty at begin of generated document&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_TIMING =&amp;gt; Add a timestamp at end of generated document. Value must be format of timestamp. For example: %Y%m%d%H%M&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLEDRAFTSTATUS =&amp;gt; Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_OLD_SEARCH_FORM =&amp;gt; Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SERVER_TZ =&amp;gt; If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples : Europe/Paris, auto.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_FORM_ON_HOME_AREAS =&amp;gt; Show the search form on home page areas for core modules (Removed after v5 due to global search combo) (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE =&amp;gt; If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES (dolibarr 8.0) =&amp;gt; Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC (dolibarr 7.0) =&amp;gt; Allow using product VAT if customer is individual and out of E.E.C. (European Economic Community)&lt;br /&gt;
&lt;br /&gt;
== Look or Theme ==&lt;br /&gt;
* MAIN_OPTIMIZEFORTEXTBROWSER =&amp;gt; Optimize output rendering for usage of a text browser (usefull for blind people)&lt;br /&gt;
* THEME_ELDY_DISABLE_IMAGE =&amp;gt; Disabled images of top menu for eldy theme.&lt;br /&gt;
* MAIN_MENU_HIDE_UNAUTHORIZED =&amp;gt; Hide menu if logged in user is not autorized rather than just grey them&lt;br /&gt;
* THEME_TOPMENU_STICKY_POSITION =&amp;gt; Option to fix top menu with eldy theme (hidden conf)(v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Email and SMS ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAILFORM_DISABLE_ENTERKEY (&amp;gt;= 8.0.1) =&amp;gt;  Activate javascript code to disable the enter key in the MAIL form.&lt;br /&gt;
&lt;br /&gt;
* MAIL_PREFIX_FOR_EMAIL_ID (&amp;gt;= 8.0.1) =&amp;gt;  Prefix for the mails ID. Default value is $_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DEBUG =&amp;gt; Write content with header of last mail into file dolibarr_mail.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SMS_DEBUG =&amp;gt; Write content of SMS sent into file dolibarr_sms.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ALLOW_SENDMAIL_F =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option -f. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option -f. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_SENDMAIL_FORCE_BA =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option ask PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;php.ini&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_NO_FULL_EMAIL =&amp;gt; Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIX_FOR_BUGGED_MTA =&amp;gt; Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of orange.fr or hotmail.com&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DO_NOT_USE_SIGN =&amp;gt; Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_INVOICE =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_ORDER =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_PROPAL =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_USECCC =&amp;gt; 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_AUTOCOPY_PROPOSAL_TO, MAIN_MAIL_AUTOCOPY_ORDER_TO, MAIN_MAIL_AUTOCOPY_INVOICE_TO =&amp;gt; Email to use as a BCC recipients when sending email for proposal, order or invoice. You can make this value visible by setting MAIN_EMAIL_USECCC (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_ADD_TRACK_ID =&amp;gt; When value is 1 (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is 2: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL =&amp;gt; Restrict sending of 1 email message to x recipients for same email message (x for To: + CC: + BCC:). If not defined, value is 10. Required to fight against spamming that include 1000 recipients in 1 message. Note that MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL, MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL and MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL are also available.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML =&amp;gt; Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_USE_MULTI_PART =&amp;gt; Forge email content using an alternate text part (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS =&amp;gt; If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* MAIN_COPY_FILE_IN_EVENT_AUTO =&amp;gt; Add attachement document on event auto generated by sending email from dolibarr. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS =&amp;gt; Enter the public ip address of the server, so it will appears into the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ENABLED_USER_DEST_SELECT =&amp;gt; Show also internal users into list of recipients of email in email sending form (v8.0+)&lt;br /&gt;
&lt;br /&gt;
== Third Parties module ==&lt;br /&gt;
&lt;br /&gt;
* COMPANY_AQUARIUM_CLEAN_REGEX (&amp;gt;= 8.0.1) =&amp;gt; Add a REGEX rule on the third parties names.&lt;br /&gt;
* MAIN_FORCE_DEFAULT_STATE_ID (&amp;gt;= 8.0.1) =&amp;gt;  rowid (integer) of a state/province as defined in llx_c_departements. On the creation of a third party/contact, the state/province corresponding to this rowid is preselected in the dropdown list.&lt;br /&gt;
* SOCIETE_DISABLE_CUSTOMERS =&amp;gt; Remove all menu and features related to customers&lt;br /&gt;
* SOCIETE_DISABLE_PROSPECTS =&amp;gt; Remove all menu and features related to prospects&lt;br /&gt;
* SOCIETE_DISABLE_STATE =&amp;gt; Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
* THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* THIRDPARTY_NOTSUPPLIER_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* SOCIETE_SORT_ON_TYPEENT = The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
* THIRDPARTY_DEFAULT_CREATE_CONTACT (Dolibarr 5.0+) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* MAIN_THIRDPARTY_CREATION_INDIVIDUAL (Dolibarr &amp;lt;5.0) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* THIRDPARTY_DEFAULT_USEVAT =&amp;gt; When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX1 =&amp;gt; When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX2 =&amp;gt; When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PARENT_IN_LINKTO =&amp;gt; Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO =&amp;gt; Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
* SOCIETE_ASK_FOR_SHIPPING_METHOD =&amp;gt; Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
* THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
* MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL =&amp;gt; External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
== Proposals module ==&lt;br /&gt;
* PROPAL_CLONE_ON_CREATE_PAGE =&amp;gt; On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
* MAIN_PROPAL_CHOOSE_ODT_DOCUMENT =&amp;gt; On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
* PROPAL_DISABLE_SIGNATURE =&amp;gt; Do no show the box for signature.&lt;br /&gt;
* WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES =&amp;gt; Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
* PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== Order module ==&lt;br /&gt;
* COMMANDE_REQUIRE_SOURCE =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
* COMMANDE_VALID_AFTER_CLOSE_PROPAL =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
* COMMANDE_CHANGE_THIRDPARTY =&amp;gt; Can change customer on orders&lt;br /&gt;
* ORDER_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Invoice module ==&lt;br /&gt;
* MAIN_DEPOSIT_MULTI_TVA =&amp;gt; In deposits invoice, creates one line per VAT rate from the origin document (6.0)&lt;br /&gt;
* FACTURE_SHOW_SEND_REMINDER =&amp;gt; Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; (obsolete feature).&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_EDITED =&amp;gt; Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_REMOVED =&amp;gt; Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_NEVER_BE_REMOVED =&amp;gt; Never allow to delete invoices (except draft invoices).&lt;br /&gt;
* INVOICE_POSITIVE_CREDIT_NOTE =&amp;gt; All amounts on PDF credit notes are positive.&lt;br /&gt;
* FACTURE_CHANGE_THIRDPARTY =&amp;gt; Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
* FACTURE_USE_PROFORMAT =&amp;gt; Enable PROFORMAT invoices type.&lt;br /&gt;
* FACTURE_DEPOSITS_ARE_JUST_PAYMENTS =&amp;gt; Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
* FACTURE_SENDBYEMAIL_FOR_ALL_STATUS =&amp;gt; Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT =&amp;gt; Disable VAT on genrated documents. like for an association. (it&#039;s work with crabe template)&lt;br /&gt;
* INVOICE_CREDIT_NOTE_STANDALONE (dolibarr 3.9) =&amp;gt; Can make a credit note without invoice.&lt;br /&gt;
* INVOICE_USE_SITUATION = Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
* INVOICE_USE_SITUATION_CREDIT_NOTE (dolibarr 8.0) = Enable the &amp;quot;situation credit note&amp;quot; feature (need INVOICE_USE_SITUATION)&lt;br /&gt;
* INVOICE_DISABLE_DEPOSIT = Disable deposit invoices&lt;br /&gt;
* INVOICE_DISABLE_REPLACEMENT = Disable replacement invoices&lt;br /&gt;
* INVOICE_DISABLE_CREDIT_NOTE = Disable credit notes&lt;br /&gt;
* WORKFLOW_BILL_ON_SHIPMENT = Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
* INVOICE_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Expense Report ==&lt;br /&gt;
* EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS =&amp;gt; Can enter several expense reports on same or overlapping date periods. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Export module ==&lt;br /&gt;
* EXPORT_CSV_SEPARATOR_TO_USE =&amp;gt; String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;,&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=;&lt;br /&gt;
* EXPORT_CSV_FORCE_CHARSET =&amp;gt; Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= utf-8&lt;br /&gt;
* EXPORTTOOL_CATEGORIES =&amp;gt; Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
* USE_STRICT_CSV_RULES =&amp;gt; Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Agenda module ==&lt;br /&gt;
* AGENDA_MAX_EVENTS_DAY_VIEW =&amp;gt; Define the maximum number of visible entries for each day in agenda. Default value is 3. Value 0 means no limit.&lt;br /&gt;
* AGENDA_USE_EVENT_TYPE =&amp;gt; Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
* AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS =&amp;gt; To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
* MAIN_ADD_EVENT_ON_ELEMENT_CARD =&amp;gt; Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
&lt;br /&gt;
== Products module ==&lt;br /&gt;
* MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE =&amp;gt; Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
* PRODUCT_ADD_TYPE_IN_DOCUMENTS =&amp;gt; Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
* PRODUCT_DONOTSEARCH_ANYWHERE =&amp;gt; When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
* PRODUIT_DESC_IN_LIST =&amp;gt; Show long description of product/service into lists.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; Enable module Propal merge product PDF&lt;br /&gt;
* PRODUCT_USE_OLD_PATH_FOR_PHOTO =&amp;gt; Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
* PRODUCT_USE_UNITS =&amp;gt; Enable units from dictionary in product/service card.&lt;br /&gt;
* PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL =&amp;gt; When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
* MAIN_DIRECT_STATUS_UPDATE =&amp;gt; Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. v4.0+&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_CHARGES =&amp;gt; Adds an extra field for adhoc charges at the product buying price stage. The Cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product.&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_MAX_VISIBLE_PHOTO =&amp;gt; Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;5&#039; will show the first five product photos found on the product card.&lt;br /&gt;
* PRODUCT_MAX_LENGTH_COMBO =&amp;gt; limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
* MAIN_DISABLE_FREE_LINES (&amp;gt;= 8.0) =&amp;gt; Disallow using free lines to add line in documents&lt;br /&gt;
&lt;br /&gt;
== Services module ==&lt;br /&gt;
* SERVICE_ARE_ECOMMERCE_200238EC =&amp;gt; If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
&lt;br /&gt;
== Stocks ==&lt;br /&gt;
* MAIN_SERVICES_ARE_ECOMMERCE_200238EC (&amp;lt; 8) =&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* CASHDESK_FORCE_STOCK_ON_BILL (&amp;gt;= 8.0.1) =&amp;gt; Option to force decrease of stock whatever is user setup.&lt;br /&gt;
&lt;br /&gt;
* SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED =&amp;gt; Disable stock dispatch when total expected was already received.&lt;br /&gt;
&lt;br /&gt;
== Shipments ==&lt;br /&gt;
* STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS (&amp;gt;= 8.0.1) =&amp;gt; If set, you can add a shipment line, with no stock source defined.&lt;br /&gt;
&lt;br /&gt;
* SHIPMENT_GETS_ALL_ORDER_PRODUCTS =&amp;gt; Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
&lt;br /&gt;
== Point of Sale ==&lt;br /&gt;
* CASHDESK_SHOW_KEYPAD =&amp;gt; Show a mouse key pad into Point Of Sale.&lt;br /&gt;
* POS_ADDON = Set this value to an existing numbering module rule (for example &#039;mod_facture_terre&#039;, &#039;mod_facture_mars&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value POS_ADDON to &#039;mod_facture_terre&#039; will use the numbering module &#039;terre&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use POS_NUMBERING_TERRE_FORCE_PREFIX and POS_NUMBERING_MARS_FORCE_PREFIX variable to change the prefix used).&lt;br /&gt;
&lt;br /&gt;
== Contracts ==&lt;br /&gt;
* CONTRACT_SUPPORT_PRODUCTS =&amp;gt; Products are also suggested into module contract.&lt;br /&gt;
&lt;br /&gt;
== Projects module ==&lt;br /&gt;
* PROJECT_DISABLE_UNLINK_FROM_OVERVIEW (&amp;gt;= 8.0.1) =&amp;gt; Enable removing the button from a link in the project overview.&lt;br /&gt;
* PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS =&amp;gt; Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
* PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS =&amp;gt; Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
* PROJECT_SHOW_REF_INTO_LISTS =&amp;gt; Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
* PROJECT_HIDE_UNSELECTABLES =&amp;gt; Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
* PROJECT_HIDE_TASKS =&amp;gt; Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
* PROJECT_LIST_SHOW_STARTDATE =&amp;gt; Shows start date of projects in project lists.&lt;br /&gt;
* PROJECT_LINK_ON_OVERWIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;link to&amp;quot; form on the overview page&lt;br /&gt;
* PROJECT_CREATE_ON_OVERVIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;create ...&amp;quot; button on the overview page&lt;br /&gt;
* PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY =&amp;gt; Can link an object to a project of another thirdparty&lt;br /&gt;
* PROJECT_ALLOW_COMMENT_ON_TASK =&amp;gt; Add comment feature on project task&lt;br /&gt;
&lt;br /&gt;
== Foundation module ==&lt;br /&gt;
* MEMBER_URL_REDIRECT_SUBSCRIPTION =&amp;gt; Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
* MEMBER_EXT_URL_SUBSCRIPTION_INFO =&amp;gt; Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front off payment cell, into the page to make online subscription.&lt;br /&gt;
&lt;br /&gt;
== Interventions module ==&lt;br /&gt;
* FICHINTER_CLASSIFY_BILLED =&amp;gt; Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger FICHINTER_CLASSIFY_BILLED into list of possible automatic event into agenda.&lt;br /&gt;
* FICHINTER_DISABLE_DETAILS =&amp;gt; Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
&lt;br /&gt;
== Suppliers module ==&lt;br /&gt;
* FOURN_PRODUCT_AVAILABILITY =&amp;gt; On the Suppliers price page of the products, activate the supplier product availability. This is duplicate feature with delivery_delay introduced with 3.8.&lt;br /&gt;
* SUPPLIER_ORDER_AUTOADD_USER_CONTACT =&amp;gt; Add user approving supplier order as a contact automatically.&lt;br /&gt;
* SUPPLIER_ORDER_USE_DISPATCH_STATUS =&amp;gt; Add a status on each dispatch order line when receiving products from suppliers (v4.0+)&lt;br /&gt;
* SUPPLIER_ORDER_NO_DIRECT_APPROVE =&amp;gt; No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
* SUPPLIER_ORDER_WITH_NOPRICEDEFINED =&amp;gt; Can enter a product even if no supplier price defined. (v6.0+)&lt;br /&gt;
* SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT =&amp;gt; Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
== Bank module ==&lt;br /&gt;
* BANK_CAN_RECONCILIATE_CASHACCOUNT (3.8) =&amp;gt; Can reconciliate cash accounts&lt;br /&gt;
* BANK_DISABLE_CHECK_DEPOSIT =&amp;gt; Disable check deposit feature&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_ORDER =&amp;gt; Ask bank account during creation of an order&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL =&amp;gt; Ask bank account during creation of a proposal&lt;br /&gt;
&lt;br /&gt;
== Emailing module ==&lt;br /&gt;
* MAILING_PREFIX_FOR_EMAIL_ID =&amp;gt; Set the value that will be used to compose the &amp;quot;Email Id&amp;quot; into email headers. If you set this value to &#039;SERVER_NAME&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
* MAILING_NO_USING_PHPMAIL =&amp;gt; If set, the module emailing can&#039;t be use with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS.&lt;br /&gt;
* MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS =&amp;gt; Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option MAILING_NO_USING_PHPMAIL is set to on.&lt;br /&gt;
* MAILING_LIMIT_WARNING_PHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_PHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* MAILING_LIMIT_WARNING_NOPHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* EMAILING_USE_ADVANCED_SELECTOR =&amp;gt; Enable the advanced selector for destinaries&lt;br /&gt;
&lt;br /&gt;
* MAILING_LIMIT_SENDBYWEB =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;dolibarr_mailing_limit_sendbyweb&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
* MAILING_LIMIT_SENDBYCLI =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;dolibarr_mailing_limit_sendbycli&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
&lt;br /&gt;
== PDF options ==&lt;br /&gt;
* MAIN_DISABLE_FORCE_SAVEAS =&amp;gt; If your browser ask always to save downloaded files on disk (like PDF), try to add this option. File might appears directly into your browser.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_COMPRESSION =&amp;gt; Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* MAIN_INVERT_SENDER_RECIPIENT =&amp;gt;  Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_AUTOUPDATE =&amp;gt; Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_BACKGROUND_ON_PDF =&amp;gt; Define this constant with short name of an image (example &amp;quot;myimage.jpg&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany/logos&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library beeing crazy sometime and content on image disappeared !&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_PDF_BACKGROUND =&amp;gt; Define this constant with short name of a PDF file (example &amp;quot;mypdf.pdf&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FORCE_FONT =&amp;gt; To ignore font defined into language file and force usage of a particular font. For example &amp;quot;DejaVuSans&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FREETEXT_HEIGHT =&amp;gt; Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_TITLE_BACKGROUND_COLOR =&amp;gt; Can define a background color onto title line. Example: &#039;220,220,200&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_COMPANY_NAME_OF_CONTACT =&amp;gt; Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF =&amp;gt; Activate PDF conversion from ODT document. If value is &#039;jodconverter&#039;, java and jodconverter command line tool must be available. If value is &#039;/pathto/jodconverter.jar&#039;, then java and the jodconvertar jar must exists. soffice must also be available. MAIN_DOL_SCRIPTS_ROOT Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example /var/www/mydolibarr).&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF_DEL_SOURCE =&amp;gt; For ODT generation. If set, then initial behaviour is conserved but odt file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_INVOICES_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for supplier proposals (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOCUMENTS_WITH_PICTURE_WIDTH =&amp;gt; Can change size of picture when hidden option MAIN_GENERATE_PROPOSALS_WITH_PICTURE is used. By default value is 20.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN =&amp;gt; Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* PDF_SHOW_PROJECT =&amp;gt; Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN =&amp;gt; Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for france, &amp;quot;sort number/account&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES =&amp;gt; Value 1 or 2 change the way product ref is show (1 = show supplier ref only and not internal ref, 2 = show supplier then internal). Without, internal ref then supplier is shown.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_ADDALSOTARGETDETAILS =&amp;gt; Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME =&amp;gt; Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== WYSIWYG Editor ==&lt;br /&gt;
&lt;br /&gt;
* FCKEDITOR_ENABLE_DETAILS_FULL =&amp;gt; Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranted with this. Also if the image is removed or renamed by the image hoster, your proposal, order or invoice will be broken.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BlockedLog ==&lt;br /&gt;
&lt;br /&gt;
* BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY =&amp;gt; Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
&lt;br /&gt;
== MultiCurreny ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION =&amp;gt; Enable CurrencyLayer API synchronization&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=39807</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=39807"/>
		<updated>2018-09-21T09:27:32Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateDocDevEs}}&lt;br /&gt;
{{TemplateDocDevFr}}&lt;br /&gt;
&lt;br /&gt;
{{Flag en}} This page list all reserved modules numbers / ID. If you build or want to build your own modules (like this [[:Category:Complementary_modules|complementary module]]), you should take an ID range here. &lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Cette page recense tous les numéros / ID réservés de modules. Si vous avez réalisé ou voulez réaliser vos propres modules (comme les [[:Category:Modules complémentaires|modules complémentaires suivant]]), vous devriez prendre une plage d&#039;ID ici.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Esta página contiene un listado de todos los id reservados para los módulos. Si ha creado o quiere realizar sus propios módulos, (como estos [[:Category:Módulos_complementarios|módulos complementarios]]), deberá reservarse un rango de ID aquí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ID 0 - 99999 =&lt;br /&gt;
{{Flag en}} Reserved for Dolibarr&#039;s internal modules.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Réservé aux modules internes de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Reservado a los módulos internos de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
= ID 100000 - 499999 =&lt;br /&gt;
{{Flag en}} Reserved area for editors in need for an ID range. You can edit this page to add your own range (limited to 1000 values per editor)&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Zone réservé aux éditeurs qui ont besoin d&#039;une plage d&#039;ID spécifiques. Vous pouvez modifier cette page pour réserver votre plage (limité à 1000 valeurs par éditeur)&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Área reservada para los partners que necesiten un rango de ID. Puede modificar esta página para reservar su rango (limitado a 1000 valores por editor)&lt;br /&gt;
&lt;br /&gt;
* ID 100000 - 100999: OpenThink (http://www.openthink.be)&lt;br /&gt;
* ID 101000 - 101999: NLTechno (https://www.nltechno.com)&lt;br /&gt;
* ID 102000 - 102999: Tiaris (http://www.tiaris.fr)&lt;br /&gt;
* ID 103000 - 103999: Open-concept.pro (http://www.open-concept.pro)&lt;br /&gt;
* ID 104000 - 104999: ATM Consulting (http://www.atm-consulting.fr)&lt;br /&gt;
* ID 105000 - 105999: GPC.solutions&lt;br /&gt;
* ID 106000 - 106999: PHPASSO&lt;br /&gt;
* ID 107000 - 107999: TecLib (http://www.teclib.com) / Auguria (http://www.auguria.net)&lt;br /&gt;
* ID 108000 - 108999: ETHICWEB&lt;br /&gt;
* ID 109000 - 109999: Aplose (http://www.aplose.fr)&lt;br /&gt;
* ID 110000 - 110999: Librethic (https://librethic.io)&lt;br /&gt;
* ID 111000 - 111999: Asset IT (www.assetit.ch)&lt;br /&gt;
* ID 112000 - 112999: Aarboard AG (www.aarboard.ch)&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)&lt;br /&gt;
* ID 121000 - 121999: Oscss - Shop &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: backbone internet service (www.backbone.co.at)&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)&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)&lt;br /&gt;
* ID 131000 - 131999: Joan Louis (itaca.fr)&lt;br /&gt;
* ID 132000 - 132999: Jean-Marie Arsac (https://azimut.fr)&lt;br /&gt;
* ID 135000 - 135999: Net-Logic (http://netlogic.fr)&lt;br /&gt;
* ID 140000 - 140999: Altairis&lt;br /&gt;
* ID 150000 - 150999: Jeffinfo &lt;br /&gt;
* ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&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 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
* ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
* ID 180000 - 180999: Triangle Ingénierie&lt;br /&gt;
* ID 190000 - 190999: Diciannove (http://19.coop)&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 300000 - 300999: AtooNet (http://www.atoo-net.com)&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 (http://www.sergibyte.com)&lt;br /&gt;
* ID 404000 - 404999: Aikhan&lt;br /&gt;
* ID 405000 - 405999: AIME (http://www.aime.mx)&lt;br /&gt;
* ID 409000 - 409999: LliureTIC (www.lliuretic.cat)&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 422200 - 422999: Artaban (http://artaban.fr)&lt;br /&gt;
* ID 423000 - 423050: cyberesprit&lt;br /&gt;
* ID 423051 - 423099: R.Bossard&lt;br /&gt;
* ID 424000 - 424999: A3sys - Mon-Dolibarr (http://www.mon-dolibarr.fr)&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 - 427000: Bruno Caldas (https://github.com/BCaldas)&lt;br /&gt;
* ID 427001 - 427999: Kevin GUERRIER (alias xcl.saian)&lt;br /&gt;
* ID 428000 - 428099: af83&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 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&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 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 (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;
&lt;br /&gt;
= ID &amp;gt; 500000 =&lt;br /&gt;
{{Flag en}} 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 (1000 ids maximum per partner).&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Si vous n&#039;avez pas de numéros réservés et en avez besoin, n&#039;utilisez pas de chiffres au hasard et utilisez une valeur supérieure à 500000, toutefois, il est préférable d&#039;obtenir un compte wiki, et  réserver vous-même votre plage en ajoutant votre entrée dans la zone 100000 - 499999 (pas plus de 1000 numéros par partenaire).&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Si no dispone de número reservado y necesita, no use cifras redondeadas y usa un valor superior a 500000. Si tiene una cuenta wiki, puede reservarse usted mismo sus id añadiendo su entrada en la zona 100000 - 499999 (no más de 1000 id por partner).&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=39806</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=39806"/>
		<updated>2018-09-21T09:26:00Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateDocDevEs}}&lt;br /&gt;
{{TemplateDocDevFr}}&lt;br /&gt;
&lt;br /&gt;
{{Flag en}} This page list all reserved modules numbers / ID. If you build or want to build your own modules (like this [[:Category:Complementary_modules|complementary module]]), you should take an ID range here. &lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Cette page recense tous les numéros / ID réservés de modules. Si vous avez réalisé ou voulez réaliser vos propres modules (comme les [[:Category:Modules complémentaires|modules complémentaires suivant]]), vous devriez prendre une plage d&#039;ID ici.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Esta página contiene un listado de todos los id reservados para los módulos. Si ha creado o quiere realizar sus propios módulos, (como estos [[:Category:Módulos_complementarios|módulos complementarios]]), deberá reservarse un rango de ID aquí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ID 0 - 99999 =&lt;br /&gt;
{{Flag en}} Reserved for Dolibarr&#039;s internal modules.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Réservé aux modules internes de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Reservado a los módulos internos de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
= ID 100000 - 499999 =&lt;br /&gt;
{{Flag en}} Reserved area for editors in need for an ID range. You can edit this page to add your own range (limited to 1000 values per editor)&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Zone réservé aux éditeurs qui ont besoin d&#039;une plage d&#039;ID spécifiques. Vous pouvez modifier cette page pour réserver votre plage (limité à 1000 valeurs par éditeur)&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Área reservada para los partners que necesiten un rango de ID. Puede modificar esta página para reservar su rango (limitado a 1000 valores por editor)&lt;br /&gt;
&lt;br /&gt;
* ID 100000 - 100999: OpenThink (http://www.openthink.be)&lt;br /&gt;
* ID 101000 - 101999: NLTechno (https://www.nltechno.com)&lt;br /&gt;
* ID 102000 - 102999: Tiaris (http://www.tiaris.fr)&lt;br /&gt;
* ID 103000 - 103999: Open-concept.pro (http://www.open-concept.pro)&lt;br /&gt;
* ID 104000 - 104999: ATM Consulting (http://www.atm-consulting.fr)&lt;br /&gt;
* ID 105000 - 105999: GPC.solutions&lt;br /&gt;
* ID 106000 - 106999: PHPASSO&lt;br /&gt;
* ID 107000 - 107999: TecLib (http://www.teclib.com) / Auguria (http://www.auguria.net)&lt;br /&gt;
* ID 108000 - 108999: ETHICWEB&lt;br /&gt;
* ID 109000 - 109999: Aplose (http://www.aplose.fr)&lt;br /&gt;
* ID 110000 - 110999: Librethic (https://librethic.io)&lt;br /&gt;
* ID 111000 - 111999: Asset IT (www.assetit.ch)&lt;br /&gt;
* ID 112000 - 112999: Aarboard AG (www.aarboard.ch)&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)&lt;br /&gt;
* ID 121000 - 121999: Oscss - Shop &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: backbone internet service (www.backbone.co.at)&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)&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)&lt;br /&gt;
* ID 131000 - 131999: Joan Louis (itaca.fr)&lt;br /&gt;
* ID 132000 - 132999: Jean-Marie Arsac (https://azimut.fr)&lt;br /&gt;
* ID 135000 - 135999: Net-Logic (http://netlogic.fr)&lt;br /&gt;
* ID 140000 - 140999: Altairis&lt;br /&gt;
* ID 150000 - 150999: Jeffinfo &lt;br /&gt;
* ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&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 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
* ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
* ID 180000 - 180999: Triangle Ingénierie&lt;br /&gt;
* ID 190000 - 190999: Diciannove (http://19.coop)&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 300000 - 300999: AtooNet (http://www.atoo-net.com)&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 (http://www.sergibyte.com)&lt;br /&gt;
* ID 404000 - 404999: Aikhan&lt;br /&gt;
* ID 405000 - 405999: AIME (http://www.aime.mx)&lt;br /&gt;
* ID 409000 - 409999: LliureTIC (www.lliuretic.cat)&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 422200 - 422999: Artaban (http://artaban.fr)&lt;br /&gt;
* ID 423000 - 423050: cyberesprit&lt;br /&gt;
* ID 423051 - 423099: R.Bossard&lt;br /&gt;
* ID 424000 - 424999: A3sys - Mon-Dolibarr (http://www.mon-dolibarr.fr)&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 - 427000: Bruno Caldas (https://github.com/BCaldas)&lt;br /&gt;
* ID 427001 - 427999: Kevin GUERRIER (alias xcl.saian)&lt;br /&gt;
* ID 428000 - 428099: af83&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 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&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 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 (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 - 457099: Steve Sherratt&lt;br /&gt;
&lt;br /&gt;
= ID &amp;gt; 500000 =&lt;br /&gt;
{{Flag en}} 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 (1000 ids maximum per partner).&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}} Si vous n&#039;avez pas de numéros réservés et en avez besoin, n&#039;utilisez pas de chiffres au hasard et utilisez une valeur supérieure à 500000, toutefois, il est préférable d&#039;obtenir un compte wiki, et  réserver vous-même votre plage en ajoutant votre entrée dans la zone 100000 - 499999 (pas plus de 1000 numéros par partenaire).&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}} Si no dispone de número reservado y necesita, no use cifras redondeadas y usa un valor superior a 500000. Si tiene una cuenta wiki, puede reservarse usted mismo sus id añadiendo su entrada en la zona 100000 - 499999 (no más de 1000 id por partner).&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Invoice_Configuration&amp;diff=39713</id>
		<title>Invoice Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Invoice_Configuration&amp;diff=39713"/>
		<updated>2018-09-17T09:08:01Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Numbering module for invoices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Invoices]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
This page describe setup options for [[Module Customers Invoices]] (Menu &#039;&#039;&#039;Home - Setup - Modules - Invoices&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Numbering module for invoices=&lt;br /&gt;
&lt;br /&gt;
Every company uses different numbering formats for their invoices. Dolibarr includes several sub-modules that implement different numbering rules/formats. Only one sub-module can be used. &lt;br /&gt;
&lt;br /&gt;
There is also a module that allows you to specify the format from a template mask. Hover the cursor over the help icon to see the comprehensive syntax available to define the template.&lt;br /&gt;
&lt;br /&gt;
Note: If there is no numbering sub-module that matches your format, you can still hire a developer to build one!&lt;br /&gt;
&lt;br /&gt;
=Invoice documents models=&lt;br /&gt;
Also, you can use several predefined invoices document models. To build an invoice using a particular model, go on invoice tab and, in the array &amp;quot;Documents&amp;quot; at the bottom of the page, choose the model and click on &amp;quot;Build&amp;quot; to generate the document for invoice from this model.&lt;br /&gt;
&lt;br /&gt;
You can use different types of document generation (PDF or ODT). You must enable the models you want to use (you can then use them from the invoice tab in the &amp;quot;Documents&amp;quot; area by selecting the template and clicking &amp;quot;Generate&amp;quot;, to regenerate the invoice with a particular document template). &lt;br /&gt;
The model provided by default is &amp;quot;crabe&amp;quot;, which is a PDF template fulfilling the legal obligations of most countries of the world.&lt;br /&gt;
&lt;br /&gt;
=Payment mode suggested by default on document=&lt;br /&gt;
You can set in this area, the modes of payment with the contact information you want to see on generated documents.&lt;br /&gt;
&lt;br /&gt;
=Add extra mention on documents=&lt;br /&gt;
If you want to add an additional legal notice in the footer on the invoice, enter the reference in section &amp;quot;Free text&amp;quot; and save. Each new invoice will be show this mention in its footer.&lt;br /&gt;
&lt;br /&gt;
Note: If you change this information, remember to click on &amp;quot;Rebuild&amp;quot; form invoice tab to rebuild the document to take into account the change.&lt;br /&gt;
&lt;br /&gt;
= Other options =&lt;br /&gt;
==Invoice date==&lt;br /&gt;
If this option is activated, the invoice date will be automatically set to the validation date when invoice is validated. Without this option, you are free to put the date you want.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
Note: Rules to calculate VAT is not an option of module invoice. You will find more information on this page: [[VAT calculation and rounding rules]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39712</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39712"/>
		<updated>2018-09-17T08:07:06Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Global Options */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help about screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu path:&#039;&#039;&#039; Home -&amp;gt; Setup -&amp;gt; Other&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= List of Known Hidden Options =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; in &#039;&#039;&#039;Home -&amp;gt; Setup -&amp;gt; Other Setup&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
== Global Options ==&lt;br /&gt;
* MAIN_FILESYSTEM_ENCODING =&amp;gt; With some PHP versions, PHP is not able to detect the page code for filesystem of the server OS. To solve this, Dolibarr assumes your OS filesystem is UTF-8 if on linux or osx system, and iso-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable MAIN_FILESYSTEM_ENCODING to &amp;quot;utf-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TECHNICAL_ID =&amp;gt; Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAXTABS_IN_CARD =&amp;gt; Max number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ONLY_LOGIN_ALLOWED =&amp;gt; Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SECURITY_CSRF_WITH_TOKEN (&amp;gt;= 5.0) =&amp;gt; Activate a second anti CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful.&lt;br /&gt;
&lt;br /&gt;
* MAIN_APPLICATION_TITLE =&amp;gt; This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fail by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTOFILL_DATE =&amp;gt; If this constant is defined (to something other than 0), the date of invoice, proposal, order or payment are auto-filled with the current date. It is highly recommended to NOT ENABLE this feature. This can create a lot of input errors with data not validated by users. This leads to incorrect values saved in the database causing confusion when you have to do your accountancy reports ! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_FULL_SCANLIST =&amp;gt; Disables the complete scan of tables to allow the pagination to show total number of pages. May be useful to activate on systems with a very high quantity of data (tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIRST_TO_UPPER =&amp;gt; Dolibarr add uppercase to Third Parties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_LOG_TO_HTML (MAIN_LOGTOHTML before 3.9) =&amp;gt; If this constant is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_HOURMIN_IN_DATE_RANGE =&amp;gt; On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REMOVE_INSTALL_WARNING =&amp;gt; Remove all security warnings that appear to administrator users if URL /install is public. You should solve the problem if warning occurs, instead of removing the warning! For this, put a file called install.lock into Dolibarr root directory. This will stop the warning but also make the page /install not possible to use, to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* MAIN_OPTIMIZE_SPEED =&amp;gt; Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPLACE_TRANS_xx_XX =&amp;gt; Where xx_XX is language code. If value is string1:newstring1;string2:newstring2 then replace string1 with newstring1 in all translation done for language xx_XX.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPEATCONTACTONEACHTAB =&amp;gt; If added and set to 1, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_JQUERY_JNOTIFY =&amp;gt; Disable usage of JNotify to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_JEDITABLE =&amp;gt; Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this features, because, it bypasses some business actions (updates on other data that should be done consistently) and ignores business controls on data you saved. So this feature breaks consistency of data and possibly the stability of the software.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_MULTISELECT =&amp;gt; Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* MAIN_HELPCENTER_LINKTOUSE  =&amp;gt; Define the url link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* MAIN_MODULES_FOR_EXTERNAL =&amp;gt; Limit available modules for external users. By default value is &#039;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TUNING_INFO =&amp;gt; Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOL_SCRIPTS_ROOT =&amp;gt; Define directory who contains &#039;scripts&#039; directory (e.g /var/www/dolibarr)&lt;br /&gt;
&lt;br /&gt;
* MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING =&amp;gt; A warning saying setup of modules is not complete is shown if the number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE =&amp;gt; Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_AJAX_COMBOX =&amp;gt; If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting constant MAIN_DISABLE_AJAX_COMBOX to 1 into Home-Setup-Other (with Dolibarr v3.6.0+).&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_CACHE_MANIFEST =&amp;gt; Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* MAIN_FORCELANGDIR =&amp;gt; relative path of the directory holding your custom langs folder.&lt;br /&gt;
&lt;br /&gt;
* MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS =&amp;gt; allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* MAIN_HTML_TITLE =&amp;gt; can be used to control how the html page title is formatted. If value contains key &#039;noapp&#039;, application name will not be output. If value contains &#039;thirdpartynameonly&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;noapp;thirdpartynameonly&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_LANDING_PAGE =&amp;gt; (&amp;gt;= 3.9). Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param).&lt;br /&gt;
&lt;br /&gt;
* MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN =&amp;gt; (&amp;gt;= 4.0) When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible.&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_ROUND =&amp;gt; Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_ROUND =&amp;gt; Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_PUBLIC_NOTE_IN_ADDRESS &amp;gt;=4.0 =&amp;gt; show public note in address block&lt;br /&gt;
&lt;br /&gt;
* MAIN_DEFAULT_PAYMENT_TERM_ID =&amp;gt; With id of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND =&amp;gt; Change way of rounding total TTC lines, rounding first of after&lt;br /&gt;
&lt;br /&gt;
* MAIN_VIEW_LINE_NUMBER =&amp;gt; Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME =&amp;gt; Add name of thirdparty at begin of generated document&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_TIMING =&amp;gt; Add a timestamp at end of generated document. Value must be format of timestamp. For example: %Y%m%d%H%M&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLEDRAFTSTATUS =&amp;gt; Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_OLD_SEARCH_FORM =&amp;gt; Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SERVER_TZ =&amp;gt; If you can&#039;t set the timezone of your PHP installation, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples : Europe/Paris, auto.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_FORM_ON_HOME_AREAS =&amp;gt; Show the search form on home page areas for core modules (Removed after v5 due to global search combo) (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE =&amp;gt; If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES (dolibarr 8.0) =&amp;gt; Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents&lt;br /&gt;
&lt;br /&gt;
== Look or Theme ==&lt;br /&gt;
* MAIN_OPTIMIZEFORTEXTBROWSER =&amp;gt; Optimize output rendering for usage of a text browser (usefull for blind people)&lt;br /&gt;
* THEME_ELDY_DISABLE_IMAGE =&amp;gt; Disabled images of top menu for eldy theme.&lt;br /&gt;
* MAIN_MENU_HIDE_UNAUTHORIZED =&amp;gt; Hide menu if logged in user is not autorized rather than just grey them&lt;br /&gt;
* THEME_TOPMENU_STICKY_POSITION =&amp;gt; Option to fix top menu with eldy theme (hidden conf)(v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Email and SMS ==&lt;br /&gt;
* MAIN_MAIL_DEBUG =&amp;gt; Write content with header of last mail into file dolibarr_mail.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SMS_DEBUG =&amp;gt; Write content of SMS sent into file dolibarr_sms.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ALLOW_SENDMAIL_F =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option -f. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option -f. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_SENDMAIL_FORCE_BA =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option ask PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;php.ini&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_NO_FULL_EMAIL =&amp;gt; Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIX_FOR_BUGGED_MTA =&amp;gt; Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of orange.fr or hotmail.com&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DO_NOT_USE_SIGN =&amp;gt; Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_INVOICE =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_ORDER =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_PROPAL =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_USECCC =&amp;gt; 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_AUTOCOPY_PROPOSAL_TO, MAIN_MAIL_AUTOCOPY_ORDER_TO, MAIN_MAIL_AUTOCOPY_INVOICE_TO =&amp;gt; Email to use as a BCC recipients when sending email for proposal, order or invoice. You can make this value visible by setting MAIN_EMAIL_USECCC (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_ADD_TRACK_ID =&amp;gt; When value is 1 (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is 2: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL =&amp;gt; Restrict sending of 1 email message to x recipients for same email message (x for To: + CC: + BCC:). If not defined, value is 10. Required to fight against spamming that include 1000 recipients in 1 message. Note that MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL, MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL and MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL are also available.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML =&amp;gt; Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_USE_MULTI_PART =&amp;gt; Forge email content using an alternate text part (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS =&amp;gt; If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* MAIN_COPY_FILE_IN_EVENT_AUTO =&amp;gt; Add attachement document on event auto generated by sending email from dolibarr. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS =&amp;gt; Enter the public ip address of the server, so it will appears into the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ENABLED_USER_DEST_SELECT =&amp;gt; Show also internal users into list of recipients of email in email sending form (v8.0+)&lt;br /&gt;
&lt;br /&gt;
== Third Parties module ==&lt;br /&gt;
* SOCIETE_DISABLE_CUSTOMERS =&amp;gt; Remove all menu and features related to customers&lt;br /&gt;
* SOCIETE_DISABLE_PROSPECTS =&amp;gt; Remove all menu and features related to prospects&lt;br /&gt;
* SOCIETE_DISABLE_STATE =&amp;gt; Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
* THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* THIRDPARTY_NOTSUPPLIER_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* SOCIETE_SORT_ON_TYPEENT = The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
* THIRDPARTY_DEFAULT_CREATE_CONTACT (Dolibarr 5.0+) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* MAIN_THIRDPARTY_CREATION_INDIVIDUAL (Dolibarr &amp;lt;5.0) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* THIRDPARTY_DEFAULT_USEVAT =&amp;gt; When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX1 =&amp;gt; When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX2 =&amp;gt; When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PARENT_IN_LINKTO =&amp;gt; Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO =&amp;gt; Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
* SOCIETE_ASK_FOR_SHIPPING_METHOD =&amp;gt; Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
* THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
* MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL =&amp;gt; External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
== Proposals module ==&lt;br /&gt;
* PROPAL_CLONE_ON_CREATE_PAGE =&amp;gt; On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
* MAIN_PROPAL_CHOOSE_ODT_DOCUMENT =&amp;gt; On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
* PROPAL_DISABLE_SIGNATURE =&amp;gt; Do no show the box for signature.&lt;br /&gt;
* WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES =&amp;gt; Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
* PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== Order module ==&lt;br /&gt;
* COMMANDE_REQUIRE_SOURCE =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
* COMMANDE_VALID_AFTER_CLOSE_PROPAL =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
* COMMANDE_CHANGE_THIRDPARTY =&amp;gt; Can change customer on orders&lt;br /&gt;
* ORDER_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Invoice module ==&lt;br /&gt;
* MAIN_DEPOSIT_MULTI_TVA =&amp;gt; In deposits invoice, creates one line per VAT rate from the origin document (6.0)&lt;br /&gt;
* FACTURE_SHOW_SEND_REMINDER =&amp;gt; Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; (obsolete feature).&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_EDITED =&amp;gt; Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_REMOVED =&amp;gt; Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_NEVER_BE_REMOVED =&amp;gt; Never allow to delete invoices (except draft invoices).&lt;br /&gt;
* INVOICE_POSITIVE_CREDIT_NOTE =&amp;gt; All amounts on PDF credit notes are positive.&lt;br /&gt;
* FACTURE_CHANGE_THIRDPARTY =&amp;gt; Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
* FACTURE_USE_PROFORMAT =&amp;gt; Enable PROFORMAT invoices type.&lt;br /&gt;
* FACTURE_DEPOSITS_ARE_JUST_PAYMENTS =&amp;gt; Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
* FACTURE_SENDBYEMAIL_FOR_ALL_STATUS =&amp;gt; Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT =&amp;gt; Disable VAT on genrated documents. like for an association. (it&#039;s work with crabe template)&lt;br /&gt;
* INVOICE_CREDIT_NOTE_STANDALONE (dolibarr 3.9) =&amp;gt; Can make a credit note without invoice.&lt;br /&gt;
* INVOICE_USE_SITUATION = Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
* INVOICE_USE_SITUATION_CREDIT_NOTE (dolibarr 8.0) = Enable the &amp;quot;situation credit note&amp;quot; feature (need INVOICE_USE_SITUATION)&lt;br /&gt;
* INVOICE_DISABLE_DEPOSIT = Disable deposit invoices&lt;br /&gt;
* INVOICE_DISABLE_REPLACEMENT = Disable replacement invoices&lt;br /&gt;
* INVOICE_DISABLE_CREDIT_NOTE = Disable credit notes&lt;br /&gt;
* WORKFLOW_BILL_ON_SHIPMENT = Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
* INVOICE_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Expense Report ==&lt;br /&gt;
* EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS =&amp;gt; Can enter several expense reports on same or overlapping date periods. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Export module ==&lt;br /&gt;
* EXPORT_CSV_SEPARATOR_TO_USE =&amp;gt; String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;,&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=;&lt;br /&gt;
* EXPORT_CSV_FORCE_CHARSET =&amp;gt; Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= utf-8&lt;br /&gt;
* EXPORTTOOL_CATEGORIES =&amp;gt; Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
* USE_STRICT_CSV_RULES =&amp;gt; Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Agenda module ==&lt;br /&gt;
* AGENDA_MAX_EVENTS_DAY_VIEW =&amp;gt; Define the maximum number of visible entries for each day in agenda. Default value is 3. Value 0 means no limit.&lt;br /&gt;
* AGENDA_USE_EVENT_TYPE =&amp;gt; Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
* AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS =&amp;gt; To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
* MAIN_ADD_EVENT_ON_ELEMENT_CARD =&amp;gt; Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
&lt;br /&gt;
== Products module ==&lt;br /&gt;
* MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE =&amp;gt; Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
* PRODUCT_ADD_TYPE_IN_DOCUMENTS =&amp;gt; Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
* PRODUCT_DONOTSEARCH_ANYWHERE =&amp;gt; When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
* PRODUIT_DESC_IN_LIST =&amp;gt; Show long description of product/service into lists.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; Enable module Propal merge product PDF&lt;br /&gt;
* PRODUCT_USE_OLD_PATH_FOR_PHOTO =&amp;gt; Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
* PRODUCT_USE_UNITS =&amp;gt; Enable units from dictionary in product/service card.&lt;br /&gt;
* PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL =&amp;gt; When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
* MAIN_DIRECT_STATUS_UPDATE =&amp;gt; Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. v4.0+&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_CHARGES =&amp;gt; Adds an extra field for adhoc charges at the product buying price stage. The Cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product.&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_MAX_VISIBLE_PHOTO =&amp;gt; Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;5&#039; will show the first five product photos found on the product card.&lt;br /&gt;
* PRODUCT_MAX_LENGTH_COMBO =&amp;gt; limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
* MAIN_DISABLE_FREE_LINES (&amp;gt;= 8.0) =&amp;gt; Disallow using free lines to add line in documents&lt;br /&gt;
&lt;br /&gt;
== Services module ==&lt;br /&gt;
* SERVICE_ARE_ECOMMERCE_200238EC =&amp;gt; If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
&lt;br /&gt;
== Stocks ==&lt;br /&gt;
* SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED =&amp;gt; Disable stock dispatch when total expected was already received.&lt;br /&gt;
&lt;br /&gt;
== Shipments ==&lt;br /&gt;
* SHIPMENT_GETS_ALL_ORDER_PRODUCTS =&amp;gt; Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
&lt;br /&gt;
== Point of Sale ==&lt;br /&gt;
* CASHDESK_SHOW_KEYPAD =&amp;gt; Show a mouse key pad into Point Of Sale.&lt;br /&gt;
* POS_ADDON = Set this value to an existing numbering module rule (for example &#039;mod_facture_terre&#039;, &#039;mod_facture_mars&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value POS_ADDON to &#039;mod_facture_terre&#039; will use the numbering module &#039;terre&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use POS_NUMBERING_TERRE_FORCE_PREFIX and POS_NUMBERING_MARS_FORCE_PREFIX variable to change the prefix used).&lt;br /&gt;
&lt;br /&gt;
== Contracts ==&lt;br /&gt;
* CONTRACT_SUPPORT_PRODUCTS =&amp;gt; Products are also suggested into module contract.&lt;br /&gt;
&lt;br /&gt;
== Projects module ==&lt;br /&gt;
* PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS =&amp;gt; Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
* PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS =&amp;gt; Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
* PROJECT_SHOW_REF_INTO_LISTS =&amp;gt; Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
* PROJECT_HIDE_UNSELECTABLES =&amp;gt; Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
* PROJECT_HIDE_TASKS =&amp;gt; Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
* PROJECT_LIST_SHOW_STARTDATE =&amp;gt; Shows start date of projects in project lists.&lt;br /&gt;
* PROJECT_LINK_ON_OVERWIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;link to&amp;quot; form on the overview page&lt;br /&gt;
* PROJECT_CREATE_ON_OVERVIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;create ...&amp;quot; button on the overview page&lt;br /&gt;
* PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY =&amp;gt; Can link an object to a project of another thirdparty&lt;br /&gt;
* PROJECT_ALLOW_COMMENT_ON_TASK =&amp;gt; Add comment feature on project task&lt;br /&gt;
&lt;br /&gt;
== Foundation module ==&lt;br /&gt;
* MEMBER_URL_REDIRECT_SUBSCRIPTION =&amp;gt; Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
* MEMBER_EXT_URL_SUBSCRIPTION_INFO =&amp;gt; Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front off payment cell, into the page to make online subscription.&lt;br /&gt;
&lt;br /&gt;
== Interventions module ==&lt;br /&gt;
* FICHINTER_CLASSIFY_BILLED =&amp;gt; Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger FICHINTER_CLASSIFY_BILLED into list of possible automatic event into agenda.&lt;br /&gt;
* FICHINTER_DISABLE_DETAILS =&amp;gt; Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
&lt;br /&gt;
== Suppliers module ==&lt;br /&gt;
* FOURN_PRODUCT_AVAILABILITY =&amp;gt; On the Suppliers price page of the products, activate the supplier product availability. This is duplicate feature with delivery_delay introduced with 3.8.&lt;br /&gt;
* SUPPLIER_ORDER_AUTOADD_USER_CONTACT =&amp;gt; Add user approving supplier order as a contact automatically.&lt;br /&gt;
* SUPPLIER_ORDER_USE_DISPATCH_STATUS =&amp;gt; Add a status on each dispatch order line when receiving products from suppliers (v4.0+)&lt;br /&gt;
* SUPPLIER_ORDER_NO_DIRECT_APPROVE =&amp;gt; No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
* SUPPLIER_ORDER_WITH_NOPRICEDEFINED =&amp;gt; Can enter a product even if no supplier price defined. (v6.0+)&lt;br /&gt;
* SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT =&amp;gt; Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
== Bank module ==&lt;br /&gt;
* BANK_CAN_RECONCILIATE_CASHACCOUNT (3.8) =&amp;gt; Can reconciliate cash accounts&lt;br /&gt;
* BANK_DISABLE_CHECK_DEPOSIT =&amp;gt; Disable check deposit feature&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_ORDER =&amp;gt; Ask bank account during creation of an order&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL =&amp;gt; Ask bank account during creation of a proposal&lt;br /&gt;
&lt;br /&gt;
== Emailing module ==&lt;br /&gt;
* MAILING_PREFIX_FOR_EMAIL_ID =&amp;gt; Set the value that will be used to compose the &amp;quot;Email Id&amp;quot; into email headers. If you set this value to &#039;SERVER_NAME&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
* MAILING_NO_USING_PHPMAIL =&amp;gt; If set, the module emailing can&#039;t be use with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS.&lt;br /&gt;
* MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS =&amp;gt; Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option MAILING_NO_USING_PHPMAIL is set to on.&lt;br /&gt;
* MAILING_LIMIT_WARNING_PHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_PHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* MAILING_LIMIT_WARNING_NOPHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* EMAILING_USE_ADVANCED_SELECTOR =&amp;gt; Enable the advanced selector for destinaries&lt;br /&gt;
&lt;br /&gt;
* MAILING_LIMIT_SENDBYWEB =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;dolibarr_mailing_limit_sendbyweb&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
* MAILING_LIMIT_SENDBYCLI =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;dolibarr_mailing_limit_sendbycli&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
&lt;br /&gt;
== PDF options ==&lt;br /&gt;
* MAIN_DISABLE_FORCE_SAVEAS =&amp;gt; If your browser ask always to save downloaded files on disk (like PDF), try to add this option. File might appears directly into your browser.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_COMPRESSION =&amp;gt; Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* MAIN_INVERT_SENDER_RECIPIENT =&amp;gt;  Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_AUTOUPDATE =&amp;gt; Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_BACKGROUND_ON_PDF =&amp;gt; Define this constant with short name of an image (example &amp;quot;myimage.jpg&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany/logos&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library beeing crazy sometime and content on image disappeared !&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_PDF_BACKGROUND =&amp;gt; Define this constant with short name of a PDF file (example &amp;quot;mypdf.pdf&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FORCE_FONT =&amp;gt; To ignore font defined into language file and force usage of a particular font. For example &amp;quot;DejaVuSans&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FREETEXT_HEIGHT =&amp;gt; Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_TITLE_BACKGROUND_COLOR =&amp;gt; Can define a background color onto title line. Example: &#039;220,220,200&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_COMPANY_NAME_OF_CONTACT =&amp;gt; Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF =&amp;gt; Activate PDF conversion from ODT document. If value is &#039;jodconverter&#039;, java and jodconverter command line tool must be available. If value is &#039;/pathto/jodconverter.jar&#039;, then java and the jodconvertar jar must exists. soffice must also be available. MAIN_DOL_SCRIPTS_ROOT Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example /var/www/mydolibarr).&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF_DEL_SOURCE =&amp;gt; For ODT generation. If set, then initial behaviour is conserved but odt file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_INVOICES_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for supplier proposals (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOCUMENTS_WITH_PICTURE_WIDTH =&amp;gt; Can change size of picture when hidden option MAIN_GENERATE_PROPOSALS_WITH_PICTURE is used. By default value is 20.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN =&amp;gt; Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* PDF_SHOW_PROJECT =&amp;gt; Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN =&amp;gt; Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for france, &amp;quot;sort number/account&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES =&amp;gt; Value 1 or 2 change the way product ref is show (1 = show supplier ref only and not internal ref, 2 = show supplier then internal). Without, internal ref then supplier is shown.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_ADDALSOTARGETDETAILS =&amp;gt; Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME =&amp;gt; Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== WYSIWYG Editor ==&lt;br /&gt;
&lt;br /&gt;
* FCKEDITOR_ENABLE_DETAILS_FULL =&amp;gt; Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranted with this. Also if the image is removed or renamed by the image hoster, your proposal, order or invoice will be broken.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BlockedLog ==&lt;br /&gt;
&lt;br /&gt;
* BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY =&amp;gt; Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
&lt;br /&gt;
== MultiCurreny ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION =&amp;gt; Enable CurrencyLayer API synchronization&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Translation_system&amp;diff=39706</id>
		<title>Translation system</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Translation_system&amp;diff=39706"/>
		<updated>2018-09-13T20:11:35Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Development rules for internationalization (i18n) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Development rules for internationalization (i18n) =&lt;br /&gt;
In Dolibarr code, translations are made by using a method available in object $langs with the key to translate as a parameter of this method. The $langs object contains definition of use language. This object is always defined in all pages.&lt;br /&gt;
&lt;br /&gt;
There are two methods:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 $langs-&amp;gt;trans(&#039;TRAD_STRING&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This method returns the translation of key TRAD_STRING, and encodes the result into HTML entities to allow to display correctly (even with special characters) on an HTML page.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 $langs-&amp;gt;transnoentitiesnoconv(&#039;TRAD_STRING&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This method returns the translation of key TRAD_STRING, but the result is the translated string with no particular encoding (string is stored in UTF-8 in memory).&lt;br /&gt;
&lt;br /&gt;
These two methods can accept arguments that will be used to replace strings %s in the translated string.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: If, as arguments, you use a string that is itself a translated string, you must use method $langs-&amp;gt;transnoentitiesnoconv, otherwise the string will be encoded twice.&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 print $langs-&amp;gt;trans(&amp;quot;STRING_TO_TRANSLATE&amp;quot;,$langs-&amp;gt;transnoentitiesnoconv(&amp;quot;STRING_PARAM1&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translate Dolibarr into another language =&lt;br /&gt;
See page [[Translator documentation]]&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Table_llx_c_payment_term&amp;diff=39705</id>
		<title>Table llx c payment term</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Table_llx_c_payment_term&amp;diff=39705"/>
		<updated>2018-09-13T15:37:22Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Table SQL]]&lt;br /&gt;
[[Category:Invoices]]&lt;br /&gt;
[[Category:Facture]]&lt;br /&gt;
[[Category:Facturas]]&lt;br /&gt;
{{ListOfTables}}&lt;br /&gt;
&lt;br /&gt;
= Content/Contenu/Contenido =&lt;br /&gt;
&lt;br /&gt;
{{flag en}} Contains the most current payment conditions for invoices: 30 days end of month, 60 days end of month, upon receipt, proforma, etc.&lt;br /&gt;
&lt;br /&gt;
{{flag fr}} Contient les conditions de règlement de factures les plus courantes: 30 jours fin de mois, 60 jours fin de mois, à réception, proforma, etc.&lt;br /&gt;
&lt;br /&gt;
{{flag sp}} Contiene las condiciones de pago para las facturas más comunes: 30 días a fin de mes, 60 días a fin de mes, a la recepción, proforma, etc.&lt;br /&gt;
&lt;br /&gt;
= Structure =&lt;br /&gt;
== Table ==&lt;br /&gt;
{|  align=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;dolbox&amp;quot;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Field&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Type&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Null&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Key&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Default&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Extra&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| rowid &lt;br /&gt;
| int(11) &lt;br /&gt;
| NO&lt;br /&gt;
| PRI&lt;br /&gt;
| &lt;br /&gt;
| auto_increment &lt;br /&gt;
| technical index&lt;br /&gt;
|-&lt;br /&gt;
| code&lt;br /&gt;
| varchar(16)&lt;br /&gt;
| YES &lt;br /&gt;
|&lt;br /&gt;
| NULL &lt;br /&gt;
|&lt;br /&gt;
| internal code used to refer to the translations&lt;br /&gt;
|-&lt;br /&gt;
| sortorder&lt;br /&gt;
| smallint(6)&lt;br /&gt;
| YES &lt;br /&gt;
|&lt;br /&gt;
| NULL&lt;br /&gt;
|&lt;br /&gt;
| order to view into a listbox&lt;br /&gt;
|-&lt;br /&gt;
| active &lt;br /&gt;
| tinyint(4) &lt;br /&gt;
| YES &lt;br /&gt;
|&lt;br /&gt;
| 1 &lt;br /&gt;
|&lt;br /&gt;
| is the payment condition active (1=yes, 0=no)?&lt;br /&gt;
|-&lt;br /&gt;
| libelle&lt;br /&gt;
| varchar(255)&lt;br /&gt;
| YES&lt;br /&gt;
|&lt;br /&gt;
| NULL&lt;br /&gt;
|&lt;br /&gt;
| label (name) shown on screen (this label will be used only if no translation is found in the language file)&lt;br /&gt;
|-&lt;br /&gt;
| libelle_facture &lt;br /&gt;
| text&lt;br /&gt;
| YES &lt;br /&gt;
|&lt;br /&gt;
| NULL&lt;br /&gt;
|&lt;br /&gt;
| label (name) shown on PDF documents (this label will be used only if no translation is found in the language file)&lt;br /&gt;
|-&lt;br /&gt;
| fdm &lt;br /&gt;
| tinyint(4)&lt;br /&gt;
| YES&lt;br /&gt;
|&lt;br /&gt;
| NULL&lt;br /&gt;
|&lt;br /&gt;
| end of month (eg &amp;quot;30 days end of month&amp;quot;). 0=no, 1=yes&lt;br /&gt;
|-&lt;br /&gt;
| nbjour &lt;br /&gt;
| smallint(6) &lt;br /&gt;
| YES &lt;br /&gt;
|&lt;br /&gt;
| NULL&lt;br /&gt;
|&lt;br /&gt;
| number of days after invoice for due date&lt;br /&gt;
|-&lt;br /&gt;
| decalage &lt;br /&gt;
| smallint(6)&lt;br /&gt;
| YES&lt;br /&gt;
|&lt;br /&gt;
| NULL &lt;br /&gt;
|&lt;br /&gt;
| if end of month is used, you can also add an offset for days from the start of month for the due date&lt;br /&gt;
|}&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Keys ==&lt;br /&gt;
{|  align=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;dolbox&amp;quot;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Key&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Type&amp;lt;/b&amp;gt;&lt;br /&gt;
 |style=&amp;quot;background-color: #e9e9ef&amp;quot;| &amp;lt;b&amp;gt;Fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| PRIMARY&lt;br /&gt;
| PRIMARY&lt;br /&gt;
| rowid&lt;br /&gt;
|}&amp;amp;nbsp;&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39704</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39704"/>
		<updated>2018-09-13T05:55:02Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Second or Third Tax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
Some countries may apply two or three taxes on each invoice line. This can be setup in the Dictionary (Home - Setup - Dictionaries - Sales taxes).&lt;br /&gt;
&lt;br /&gt;
Possible local tax types are:&amp;lt;br&amp;gt;&lt;br /&gt;
1: local tax is applied to products and services without vat (localtax is calculated on the amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
2: local tax is applied to products and services including vat (localtax is calculated on amount + main tax rate)&amp;lt;br&amp;gt;&lt;br /&gt;
3: local tax is applied to products only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
4: local tax is applied to products only including vat (localtax is calculated on amount + main vat)&amp;lt;br&amp;gt;&lt;br /&gt;
5: local tax is applied to services only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
6: local tax is applied to services only including vat (localtax is calculated on amount + tax)&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to sales of product and not to supply of services. But a service may be invoiced in the same invoice with a product sale if this is related to the product sale and it increases its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) as a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39703</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39703"/>
		<updated>2018-09-13T05:54:46Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
Some countries may apply two or three taxes on each invoice line. This can be setup in the Dictionary (Home - Setup - Dictionaries - Sales taxes).&lt;br /&gt;
&lt;br /&gt;
Possible local tax types are:&amp;lt;br&amp;gt;&lt;br /&gt;
1: local tax is applied to products and services without vat (localtax is calculated on the amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
2: local tax is applied to products and services including vat (localtax is calculated on amount + main tax rate)&amp;lt;br&amp;gt;&lt;br /&gt;
3: local tax is applied to products only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
4: local tax is applied to products only including vat (localtax is calculated on amount + main vat)&amp;lt;br&amp;gt;&lt;br /&gt;
5 : local tax is applied to services only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
6 : local tax is applied to services only including vat (localtax is calculated on amount + tax)&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to sales of product and not to supply of services. But a service may be invoiced in the same invoice with a product sale if this is related to the product sale and it increases its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) as a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39702</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39702"/>
		<updated>2018-09-13T05:53:28Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* Second or Third Tax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
Some countries may apply two or three taxes on each invoice line. This can be setup in the Dictionary for Sales taxes.&lt;br /&gt;
&lt;br /&gt;
Possible local tax types are:&amp;lt;br&amp;gt;&lt;br /&gt;
1: local tax is applied to products and services without vat (localtax is calculated on the amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
2: local tax is applied to products and services including vat (localtax is calculated on amount + main tax rate)&amp;lt;br&amp;gt;&lt;br /&gt;
3: local tax is applied to products only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
4: local tax is applied to products only including vat (localtax is calculated on amount + main vat)&amp;lt;br&amp;gt;&lt;br /&gt;
5 : local tax is applied to services only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
6 : local tax is applied to services only including vat (localtax is calculated on amount + tax)&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to sales of product and not to supply of services. But a service may be invoiced in the same invoice with a product sale if this is related to the product sale and it increases its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) as a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39701</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39701"/>
		<updated>2018-09-13T05:47:16Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
Some countries may apply two or three taxes on each invoice line. This can be setup in the Dictionary for Sales taxes.&lt;br /&gt;
&lt;br /&gt;
Possible local tax types are:&amp;lt;br&amp;gt;&lt;br /&gt;
1: local tax is applied to products and services without&amp;lt; vat (localtax is calculated on the amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
2: local tax is applied to products and services including vat (localtax is calculated on amount + main tax rate)&amp;lt;br&amp;gt;&lt;br /&gt;
3: local tax is applied to products only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
4: local tax is applied to products only including vat (localtax is calculated on amount + main vat)&amp;lt;br&amp;gt;&lt;br /&gt;
5 : local tax is applied to services only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
6 : local tax is applied to services only including vat (localtax is calculated on amount + tax)&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to sales of product and not to supply of services. But a service may be invoiced in the same invoice with a product sale if this is related to the product sale and it increases its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) as a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39700</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39700"/>
		<updated>2018-09-13T05:46:44Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
Some countries may apply two or three taxes on each invoice line. This can be setup in the Dictionary for Sales taxes.&lt;br /&gt;
&lt;br /&gt;
Possible local tax types are:&lt;br /&gt;
1: local tax is applied to products and services without&amp;lt; vat (localtax is calculated on the amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
2: local tax is applied to products and services including vat (localtax is calculated on amount + main tax rate)&amp;lt;br&amp;gt;&lt;br /&gt;
3: local tax is applied to products only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
4: local tax is applied to products only including vat (localtax is calculated on amount + main vat)&amp;lt;br&amp;gt;&lt;br /&gt;
5 : local tax is applied to services only without vat (localtax is calculated on amount without tax)&amp;lt;br&amp;gt;&lt;br /&gt;
6 : local tax is applied to services only including vat (localtax is calculated on amount + tax)&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to sales of product and not to supply of services. But a service may be invoiced in the same invoice with a product sale if this is related to the product sale and it increases its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) as a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39699</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39699"/>
		<updated>2018-09-13T05:43:30Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
Some countries may apply two or three taxes on each invoice line. This can be setup in the Dictionary for Sales taxes.&lt;br /&gt;
&lt;br /&gt;
Possible local tax types are:&lt;br /&gt;
1: local tax is applied to products and services without&amp;lt; vat (localtax is calculated on the amount without tax)&lt;br /&gt;
2: local tax is applied to products and services including vat (localtax is calculated on amount + main tax rate)&lt;br /&gt;
3: local tax is applied to products only without vat (localtax is calculated on amount without tax)&lt;br /&gt;
4: local tax is applied to products only including vat (localtax is calculated on amount + main vat)&lt;br /&gt;
5 : local tax is applied to services only without vat (localtax is calculated on amount without tax)&lt;br /&gt;
6 : local tax is applied to services only including vat (localtax is calculated on amount + tax)&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to sales of product and not to supply of services. But a service may be invoiced in the same invoice with a product sale if this is related to the product sale and it increases its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) as a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39698</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39698"/>
		<updated>2018-09-13T05:42:04Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
Some countries may apply two or three taxes on each invoice line. This can be setup in the Dictionary for Sales taxes.&lt;br /&gt;
Possible local tax types are:&lt;br /&gt;
1: local tax is applied to products and services without&amp;lt; vat (localtax is calculated on the amount without tax)&lt;br /&gt;
2: local tax is applied to products and services including vat (localtax is calculated on amount + main tax rate)&lt;br /&gt;
3: local tax is applied to products only without vat (localtax is calculated on amount without tax)&lt;br /&gt;
4: local tax is applied to products only including vat (localtax is calculated on amount + main vat)&lt;br /&gt;
5 : local tax is applied to services only without vat (localtax is calculated on amount without tax)&lt;br /&gt;
6 : local tax is applied to services only including vat (localtax is calculated on amount + tax)&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to sales of product and not to supply of services. But a service may be invoiced in the same invoice with a product sale if this is related to the product sale and it increases its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) as a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39697</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39697"/>
		<updated>2018-09-13T05:26:58Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* For Spain */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to sales of product and not to supply of services. But a service may be invoiced in the same invoice with a product sale if this is related to the product sale and it increases its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) as a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39696</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39696"/>
		<updated>2018-09-13T05:24:35Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* For Spain */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for &#039;&#039;&#039;products&#039;&#039;&#039;, and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for &#039;&#039;&#039;services&#039;&#039;&#039;, and &#039;&#039;&#039;subtracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to product sales and not to service sales. But a service may be invoiced in the same invoice with a product sale if this is related to the product sales and it increasing its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) with a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39695</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39695"/>
		<updated>2018-09-13T05:23:35Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: /* For Spain */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific tax rules for Spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In Spain, there are two additional vat rates possible for each line:&lt;br /&gt;
* The vat rate RE. Recargo de Equivalencia - a vat rate calculated on the total without tax for [[products]], and &#039;&#039;&#039;added&#039;&#039;&#039; to the invoice total to obtain a total with tax.&lt;br /&gt;
* The vat rate IRPF. Impuesto sobre la Renta de las Personas Físicas - a vate rate calculated on total without tax for [[services]], and &#039;&#039;&#039;substracted&#039;&#039;&#039; from the invoice total to obtain a total with tax.&lt;br /&gt;
&lt;br /&gt;
Both additional taxes cannot be on the same invoice: RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit notes/invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rates are applied automatically (if company has been setup to use them) on each lines (when added or edited). Values of rates are defined in the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to product sales and not to service sales. But a service may be invoiced in the same invoice with a product sale if this is related to the product sales and it increasing its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) with a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39694</id>
		<title>VAT setup, calculation and rounding rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=VAT_setup,_calculation_and_rounding_rules&amp;diff=39694"/>
		<updated>2018-09-13T05:15:50Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how VAT calculations are done (or can be done depending on the options chosen) in Dolibarr ERP CRM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Standard VAT and rounding rules =&lt;br /&gt;
For an example we will use an invoice with two products, based in a country where the totals must be rounded to two decimal places.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D&amp;lt;br&amp;gt;Vat rate||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(D*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax amount rounded&amp;lt;br&amp;gt;to 2 dec. places&amp;lt;br&amp;gt;=round(F)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Exact price&amp;lt;br&amp;gt;inc tax&amp;lt;br&amp;gt;=(E+F)||nowrap=&amp;quot;nowrap&amp;quot;|I&amp;lt;br&amp;gt;Price inc tax rounded&amp;lt;br&amp;gt;to 2 decimals&amp;lt;br&amp;gt;=(E+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|-&lt;br /&gt;
||2||nowrap=&amp;quot;nowrap&amp;quot;|Product beta||1||1.24||10%||1.24||0.124||0.12||1.24+0.124=1.364||1.36&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have two ways to calculate the total of the invoice: summing each rounded line or summing the lines and rounding the total.&lt;br /&gt;
&lt;br /&gt;
1) If we choose to sum the rounded lines (to 2 decimal places) lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039;&lt;br /&gt;
* Total tax 10%: 0.12(G1) + 0.12(G2) = &#039;&#039;&#039;0.24&#039;&#039;&#039; (we sum the rounded values of tax on each line)&lt;br /&gt;
* Total inc tax (we sum total without tax + total tax): 2.48(Ex) + 0.24(Gx) = &#039;&#039;&#039;2.72&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note that if we sum the rounded price inc. tax on each line, we get: 1.36(I1) + 1.36(I2) = &#039;&#039;&#039;2.72&#039;&#039;&#039; (the same result, so we know there is no error)&lt;br /&gt;
&lt;br /&gt;
2) If we choose to round the amount (to 2 decimals) after summing the unrounded lines, we get:&lt;br /&gt;
* Total without tax: 1.24(E1) + 1.24(E2) = &#039;&#039;&#039;2.48&#039;&#039;&#039; (same as method 1)&lt;br /&gt;
* Total tax 10%: (1.24(E1) + 1.24(E2)) * 10% = 0.124 + 0.124 = 0.248 rounded to nearest two decimals gives &#039;&#039;&#039;0.25&#039;&#039;&#039; (we sum the amount without tax for each lines, calculate vat rate on this and subsequently we round the value to 2 decimals)&lt;br /&gt;
* Total inc tax (we sum each line without tax and add the total tax): 2.48 + 0.25 = &#039;&#039;&#039;2.73&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first  point to note is that the result of Method 1 differs from the result of method 2 by 0.01.  If you have n times the same line, the difference can be higher but is always lower than/equal to (n-1)*0.01.&lt;br /&gt;
Also if you decide to round up or down instead of &amp;quot;to the nearest&amp;quot;, you will have same problem (for example with rounding down, try with a quantity of 2 on line 2 and you will have same differences between method 1 and 2). Difference will just appears with different data but will still occur, so the problem is not on how we make the rounding but when.&lt;br /&gt;
&lt;br /&gt;
The second point is that if we use method 2, we must not show the column I on the invoice, otherwise the total you show on your invoice (2.73) will not be the same as the total you get summing the totals of each line (1.36+1.36=2.72). Showing column H might be better but the total will still differ because the total (2.73) is rounded and the result of summing column H lines (1.364+1.364=2.728) will still differ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So what to do ?&#039;&#039;&#039;&lt;br /&gt;
* In some countries, calculations must always be done using method 1 for generating invoices. As this is the default calculation rule for Dolibarr, there is nothing to change from the default configuration..&lt;br /&gt;
* In other countries (rarely), calculations must always be done using method 2 for generating invoices. To avoid having the total shown at the top of the invoice that differs from the totals of detailed lines, just do not show column I on invoice. This is the case with Dolibarr default invoice templates, so that&#039;s not a problem. To enable this rule of calculation, you must use Dolibarr version 3.5+ and add/override the constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (in Home - Setup - Other).&lt;br /&gt;
* In most countries, both methods are possible. In this case just use method 1 that will be more accurate for accounting (since if you use method 2, the total of vat collected on your invoice will not be the sum of F, nor the sum of G and this may create confusion subsequently). If you prefer to use method 2, use Dolibarr version 3.5+ and set constant MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND to 1 (Home - Setup - Other).&lt;br /&gt;
&lt;br /&gt;
= Second or Third Tax =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Brazil ==&lt;br /&gt;
&lt;br /&gt;
See page [[BrasilTaxes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Canada ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lexical&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* GST = Goods and Services Tax (TPS = Taxe sur les Produit et Services for Quebec)&lt;br /&gt;
* PST = Provincial sales taxes (TVQ = Taxe de Vente Québecoise for Quebec = QST = Quebec Sale Tax)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The GST is applied automatically on each lines (when added or edited).&lt;br /&gt;
Value of rate for second tax PST is automatically extracted by system from the dictionary table of VAT rates, for the GST vat rate line used and your country ([[Table llx_c_tva]]). &lt;br /&gt;
* [[File:Warning.png]] Note that the second tax will be added only if you setup your company into &#039;&#039;&#039;Home - Setup - Company - Use 2nd tax to yes&#039;&#039;&#039; (this option is visible for country whose a second tax is defined into dictionary tables of vats).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of user setup: Go into Home - Setup - Dictionary - VAT and sale tax, into column &amp;quot;Rate&amp;quot; enter a GST vat rate with value 5, into column &amp;quot;Tax 2&amp;quot; (PST) enter a VAT rate 9.5 with &#039;&#039;&#039;type &amp;quot;2&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
(Type &amp;quot;2&amp;quot; means the tax 2 is calculated for product and services on the price including the GST). Change values or rates according to your province rates.&lt;br /&gt;
&lt;br /&gt;
Note: Another solution is to set the &amp;quot;Tax 2&amp;quot; (PST) with vat rate 9.975 and set type of tax 2 to &#039;&#039;&#039;type &amp;quot;1&amp;quot;&#039;&#039;&#039; (Type &amp;quot;1&amp;quot; means tax  2 is added for product and services, and calculated on net price, so does not include GST vat for calculation. It is same than using 9.5 and making calculation on price including GST).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate GST||D2&amp;lt;br&amp;gt;Vat rate PST||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax GST&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax PST (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc GST + PST=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||5%||9.975%||100||5||9.98||114.98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For India ==&lt;br /&gt;
There is SGST, CGST and IGST.&lt;br /&gt;
Setup is available by default with 6.0&lt;br /&gt;
&lt;br /&gt;
== For Italy ==&lt;br /&gt;
You may need to add a negative withholding tax calculated on net amount.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Value of rates are found into the dictionary table from the standard vat rate (Table llx_c_tva). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: When vat rate is 22, add a tax 2 (witholding) of type &amp;quot;1&amp;quot; (Type &amp;quot;1&amp;quot; means tax 2 is added for product and services and calculated on net price), rate is -20% (negative means amount will be substracted)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example or calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;Vat rate withholding tax||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Tax VAT&amp;lt;br&amp;gt;=(B*C*D1)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax 2 (B*C*D2)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc VAT + Tax 2=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||22%||-20%||100||22||-20||102&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Spain ==&lt;br /&gt;
Specific management for spain are supported from Dolibarr 3.0.&lt;br /&gt;
&lt;br /&gt;
In spain, there is 2 more vat rate for each line:&lt;br /&gt;
* The vat rate RE (a vat rate calculated on total without tax for products, and added to total to obtain total with tax)&lt;br /&gt;
* The vat rate IRPF (a vate rate calculated on total without tax for services, and substracted from total to obtain total with tax)&lt;br /&gt;
&lt;br /&gt;
Both complementary taxes can&#039;t be found in an invoice. RE is applied only for products and IRPF only for services. Because IRPF tax is always negative, in credit invoices the total IRPF will be positive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The two vat rate are applied automatically (if company has been setup to use them) on each lines (when added or edited). Value of rates are found into the dictionary table from the standard vat rate ([[Table llx_c_tva]]). Total with tax and total amount of vat is modified according to calculation.&lt;br /&gt;
&lt;br /&gt;
Setup example: For standard vat rate 10, Localtax 1 (RE) is set with type &amp;quot;3&amp;quot; (tax is applied on net price, for products only), rate 1.4%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;RE||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||10||10%||1.4%||100||10||1.4||111.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of calculation in credit notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||&amp;amp;nbsp;||A&amp;lt;br&amp;gt;Description||B&amp;lt;br&amp;gt;Quantity||C&amp;lt;br&amp;gt;Unit price||D1&amp;lt;br&amp;gt;Vat rate||D2&amp;lt;br&amp;gt;IRPF||E&amp;lt;br&amp;gt;Total without tax&amp;lt;br&amp;gt;=(B*C)||F&amp;lt;br&amp;gt;Exact tax amount&amp;lt;br&amp;gt;=(B*C*D1)=(D1*E)||nowrap=&amp;quot;nowrap&amp;quot;|G&amp;lt;br&amp;gt;Tax RE (B*C*D2)=(D2*E)||nowrap=&amp;quot;nowrap&amp;quot;|H&amp;lt;br&amp;gt;Price inc standard vat + RE=(E+F+G)&lt;br /&gt;
|-&lt;br /&gt;
||1||nowrap=&amp;quot;nowrap&amp;quot;|Product alpha||10||-10||21%||-21%||-100||0||21||100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
R.E. (Localtax1) is applied to product sales and not to service sales. But a service may be invoiced in the same invoice with a product sale if this is related to the product sales and it increasing its cost (ex: shipping costs).&lt;br /&gt;
&lt;br /&gt;
Currently to treat this case you must enter these services (ex: shipping costs) with a free line, and indicating the type as product, not as service.&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39691</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=39691"/>
		<updated>2018-09-11T15:19:23Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Help about screen:&#039;&#039;&#039; Other setup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Menu path:&#039;&#039;&#039; Home -&amp;gt; Setup -&amp;gt; Other&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
This page is built to add/edit new parameters without a dedicated page to edit them. In most cases, it is parameters for your own development, external modules, or hidden features which can allow some tweaking to your own Dolibarr instance.&lt;br /&gt;
&lt;br /&gt;
For standard usage of Dolibarr, this screen must be kept empty and not be used.&lt;br /&gt;
&lt;br /&gt;
= List of Known Hidden Options =&lt;br /&gt;
Some options are not visible in the interface (often because they are deprecated or are beta features). In most cases you do not need these functions and their use may make the application unstable.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to &#039;&#039;&#039;1&#039;&#039;&#039; in &#039;&#039;&#039;Home -&amp;gt; Setup -&amp;gt; Other Setup&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
== Global Options ==&lt;br /&gt;
* MAIN_FILESYSTEM_ENCODING =&amp;gt; With some PHP version, PHP is not able to detect what is page code for filesystem of the server OS. To solve this, Dolibarr suppose your OS filesystem is UTF-8 if on linux or osx system, and iso-8859-1 if on Windows. If not, for example on a Windows server with a NTFS UTF-8 pagecode, you can set the variable MAIN_FILESYSTEM_ENCODING to &amp;quot;utf-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TECHNICAL_ID =&amp;gt; Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAXTABS_IN_CARD =&amp;gt; Max number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ONLY_LOGIN_ALLOWED =&amp;gt; Only the specified login is allowed to log in Dolibarr (maintenance mode)&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PUBLIC_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;public&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTO_TIMESTAMP_IN_PRIVATE_NOTES =&amp;gt; Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SECURITY_CSRF_WITH_TOKEN (&amp;gt;= 5.0) =&amp;gt; Activate a second anti CSRF protection on POST (a POST from another web site can&#039;t be done). Note there is already a default protection using test on referrer. This second protection uses TOKEN on forms and is less powerful.&lt;br /&gt;
&lt;br /&gt;
* MAIN_APPLICATION_TITLE =&amp;gt; This will change the title of software (that appears on the login page by default). Warning, changing this may make Dolibarr version detection fails by smartphone applications like [[Application Android - DoliDroid]]&lt;br /&gt;
&lt;br /&gt;
* MAIN_AUTOFILL_DATE =&amp;gt; If this constant is defined (to something else than 0), the date of invoice, proposal, order or payment are filled with current date. It is highly recommended to NOT ENABLE this feature. This create a lot of input errors with no data not validated by users. This lead in bad values saved in database giving headaches when you have to do your accountancy reports ! However some users want it, so we provide it.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_FULL_SCANLIST =&amp;gt; Constant to define to disable complete scan of tables to know the total amount of element to allow the pagination to show total number of pages. To activate on systems with a very important number of data (Tables with more than 500 000 records).&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIRST_TO_UPPER =&amp;gt; Dolibarr add uppercase to thirdparties, contacts or members names if not done. Warning, with some languages (whose words with uppercase are not same words, or pagecode does not always have an uppercase, like cyrillic languages), this feature may alter your data.&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_LOG_TO_HTML (MAIN_LOGTOHTML before 3.9) =&amp;gt; If this constants is defined, it is possible to have logs inside pages by adding the parameter &amp;amp;logtohtml=1 into URL.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_HOURMIN_IN_DATE_RANGE =&amp;gt; On all entities lines (invoice, order, contract...), it is possible to add hour and minutes with date on fields &amp;quot;date start&amp;quot; and &amp;quot;date end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REMOVE_INSTALL_WARNING =&amp;gt; Remove all security warning that appears to administrator users if URL /install is public. You should solve the problem if warning occurs instead of removing this warning. For this, put a file called install.lock into Dolibarr root directory. This will remove warning but also make the page /install not possible to use to protect your installation.&lt;br /&gt;
&lt;br /&gt;
* MAIN_OPTIMIZE_SPEED =&amp;gt; Use some speed enhancements. See page [[Increase_Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPLACE_TRANS_xx_XX =&amp;gt; Where xx_XX is language code. If value is string1:newstring1;string2:newstring2 then replace string1 with newstring1 in all translation done for language xx_XX.&lt;br /&gt;
&lt;br /&gt;
* MAIN_REPEATCONTACTONEACHTAB =&amp;gt; If added and set to 1, this add contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_JQUERY_JNOTIFY =&amp;gt; Disable usage of JNotify to show confirm or error messages&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_JEDITABLE =&amp;gt; Allow to update from screen, directly into database, some properties of elements (invoices, proposals, ...) using Ajax. This make response time faster, but avoid using this features, because, it overpass some business actions (updates on other data that should be done consistently) and ignore business controls on data you saved. So this feature breaks consistency of data and stability of software.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_JQUERY_MULTISELECT =&amp;gt; Allow to use Ajax when a choice that require multiselect is used (for the moment only external modules uses select box with multiselect values). Set the value to the jQuery plugin name to use (multiselect, multiple-select, select2…). Setting it to any other value will result in unwanted side-effects and/or bugs.&lt;br /&gt;
&lt;br /&gt;
* MAIN_HELPCENTER_LINKTOUSE  =&amp;gt; Define the url link to use as the target page for link &amp;quot;I need help&amp;quot; onto logon page&lt;br /&gt;
&lt;br /&gt;
* MAIN_MODULES_FOR_EXTERNAL =&amp;gt; Limit available modules for external users. By default value is &#039;facture,commande,contact,propal,projet,contrat,societe,ficheinter,expedition,agenda&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_SHOW_TUNING_INFO =&amp;gt; Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOL_SCRIPTS_ROOT =&amp;gt; Define directory who contains &#039;scripts&#039; directory (e.g /var/www/dolibarr)&lt;br /&gt;
&lt;br /&gt;
* MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING =&amp;gt; A warning saying setup of modules is not complete is shown if number of enabled modules is lower or equal than this value (1 if not defined)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE =&amp;gt; Add signature of the first sale representative into documents (at end of public notes).&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_AJAX_COMBOX =&amp;gt; If you have a large number of third parties or products, you can disable the autocomplete feature on the third parties list by setting constant MAIN_DISABLE_AJAX_COMBOX to 1 into Home-Setup-Other (with Dolibarr v3.6.0+).&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_CACHE_MANIFEST =&amp;gt; Add an HTML5 cache manifest to the page - Attention, this functionality is obsolete and removed from web standards&lt;br /&gt;
&lt;br /&gt;
* MAIN_FORCELANGDIR =&amp;gt; relative path of the directory holding your custom langs folder.&lt;br /&gt;
&lt;br /&gt;
* MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS =&amp;gt; allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
* MAIN_HTML_TITLE =&amp;gt; can be used to control how html title is formatted. If value contains key &#039;noapp&#039;, application name will not be output. If value contains &#039;thirdpartynameonly&#039;, on tab for thirdparties, only name of thirdparties are output. Value can be list of tags: &#039;noapp;thirdpartynameonly&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_LANDING_PAGE =&amp;gt; (&amp;gt;= 3.9). Can choose the first page to show after login (the landing page). This option works as a global option (llx_const) and per user option (llx_user_param).&lt;br /&gt;
&lt;br /&gt;
* MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN =&amp;gt; (&amp;gt;= 4.0) When creating an order, contract, invoice from another object, specific contacts of objects are set as specific contact of the new object when possible.&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_ROUND =&amp;gt; Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_WEIGHT_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_ROUND =&amp;gt; Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
* MAIN_VOLUME_DEFAULT_UNIT =&amp;gt; Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_PUBLIC_NOTE_IN_ADDRESS &amp;gt;=4.0 =&amp;gt; show public note in address block&lt;br /&gt;
&lt;br /&gt;
* MAIN_DEFAULT_PAYMENT_TERM_ID =&amp;gt; With id of a payment term, will use this as default payment term each time you create a new proposal, order, invoice (customer and supplier)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND =&amp;gt; Change way of rounding total TTC lines, rounding first of after&lt;br /&gt;
&lt;br /&gt;
* MAIN_VIEW_LINE_NUMBER =&amp;gt; Shows a line number against each line in the order/invoice for products/services.  On screen only, not on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME =&amp;gt; Add name of thirdparty at begin of generated document&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOC_USE_TIMING =&amp;gt; Add a timestamp at end of generated document. Value must be format of timestamp. For example: %Y%m%d%H%M&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLEDRAFTSTATUS =&amp;gt; Disable the status Draft for some object (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_OLD_SEARCH_FORM =&amp;gt; Display the old search form in left menu&lt;br /&gt;
&lt;br /&gt;
* MAIN_SERVER_TZ =&amp;gt; If you can&#039;t set timezone of your PHP, set this constant. Better is to set it to UTC. In future, this constant will be forced to &#039;UTC&#039; so PHP server timezone will not have effect anymore. Examples : Europe/Paris, auto.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_FORM_ON_HOME_AREAS =&amp;gt; Show the search form on home page areas for core modules (Removed after v5 due to global search combo) (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE =&amp;gt; If only one result is found, then setting this value to &#039;&#039;&#039;1&#039;&#039;&#039; will take you direct to the item (default method).  Setting the value to &#039;&#039;&#039;0&#039;&#039;&#039; will show the result in the list as a single result (v5.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES (dolibarr 8.0) =&amp;gt; Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents&lt;br /&gt;
&lt;br /&gt;
== Look or Theme ==&lt;br /&gt;
* MAIN_OPTIMIZEFORTEXTBROWSER =&amp;gt; Optimize output rendering for usage of a text browser (usefull for blind people)&lt;br /&gt;
* THEME_ELDY_DISABLE_IMAGE =&amp;gt; Disabled images of top menu for eldy theme.&lt;br /&gt;
* MAIN_MENU_HIDE_UNAUTHORIZED =&amp;gt; Hide menu if logged in user is not autorized rather than just grey them&lt;br /&gt;
* THEME_TOPMENU_STICKY_POSITION =&amp;gt; Option to fix top menu with eldy theme (hidden conf)(v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Email and SMS ==&lt;br /&gt;
* MAIN_MAIL_DEBUG =&amp;gt; Write content with header of last mail into file dolibarr_mail.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_SMS_DEBUG =&amp;gt; Write content of SMS sent into file dolibarr_sms.log into directory dolibarr_main_data_root.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ALLOW_SENDMAIL_F =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some cases, the sender email must be provided on command line of sendmail with option -f. This option is here to ask Dolibarr to call the function &#039;&#039;&#039;mail&#039;&#039;&#039; of PHP by adding value for the option -f. Note that in most cases, even with sendmail, sender email is correctly managed as it is added in the email technical header. This option is here only for rare setup of sendmail that ask the &#039;&#039;&#039;-f&#039;&#039;&#039; option to be mandatory or for sendmail setup that does not use by default the Return-path of header email to define the sender (with this option, the return-path will be provided also on command line and not lost by sendmail).&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_SENDMAIL_FORCE_BA =&amp;gt; On Linux or BSD system, PHP email function use the command sendmail local to server. In some case, we want to recipient to be provided to sendmail into the email content instead of its command line parameter. For this we must add the &#039;&#039;&#039;-ba&#039;&#039;&#039; parameter to sendmail. This option ask PHP to provide this parameter when sending a mail. Note that another solution is to edit the &#039;&#039;&#039;mail.force_extra_parameters=-ba&#039;&#039;&#039; into &#039;&#039;&#039;php.ini&#039;&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_NO_FULL_EMAIL =&amp;gt; Recipient email and sender are cleaned to be on form &amp;quot;&amp;lt;email&amp;gt;&amp;quot; instead of &amp;quot;Name &amp;lt;email&amp;gt;&amp;quot;. This might solve problem of compatibility with very old mailers.&lt;br /&gt;
&lt;br /&gt;
* MAIN_FIX_FOR_BUGGED_MTA =&amp;gt; Some MTA agent are bugged and add some CR chars each time they saw a LF. Because Dolibarr emails are forged to be already cleaned, if MTA agent do that, you will send an email with two CR chars. This may result in having recipient not able to read your email. To fix this, add this constant to 1. Dolibarr will then create an email that is not RFC compliant but because the MTA agent is bugged, the email will be modified and become correct during sending, solving the problem of bad email received. Add this constant if your recipient experience problems when opening email for example users using webmail of orange.fr or hotmail.com&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_DO_NOT_USE_SIGN =&amp;gt; Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_INVOICE =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Invoice&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_ORDER =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Order&#039;&#039; module. &lt;br /&gt;
&lt;br /&gt;
* MAIL_FORCE_DELIVERY_RECEIPT_PROPAL =&amp;gt; Set default as &amp;quot;Yes&amp;quot; on requesting delivery receipt when sending email through the &#039;&#039;Customer Proposal&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_USECCC =&amp;gt; 1 = Show field BCC into email forms, If email = Show BCC prefilled with email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_AUTOCOPY_PROPOSAL_TO, MAIN_MAIL_AUTOCOPY_ORDER_TO, MAIN_MAIL_AUTOCOPY_INVOICE_TO =&amp;gt; Email to use as a BCC recipients when sending email for proposal, order or invoice. You can make this value visible by setting MAIN_EMAIL_USECCC (to 1 or to another email, see previous point)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EMAIL_ADD_TRACK_ID =&amp;gt; When value is 1 (this is also default value if option is not set): The record &amp;quot;Message-id&amp;quot; added into smtp header includes a tracking id to define where the email was sent from. When value is 2: you send an email from third party card, the sender email is completed with the email source tracking string  &amp;quot;+thiXXX&amp;quot; on email (your email will be sent with the &amp;quot;From&amp;quot; that is myname+thi123@mycompany.com). So when user receiving email will make &amp;quot;Answer&amp;quot;, email will be sent to myname@mycompany.com but with the tracking id included (into header or into target email), allowing you to know to which third party or object, the email exchange is related to.&lt;br /&gt;
&lt;br /&gt;
* MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL =&amp;gt; Restrict sending of 1 email message to x recipients for same email message (x for To: + CC: + BCC:). If not defined, value is 10. Required to fight against spamming that include 1000 recipients in 1 message. Note that MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL, MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL and MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL are also available.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML =&amp;gt; Force to send all email (event with text only content) as HTML formatted email.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_USE_MULTI_PART =&amp;gt; Forge email content using an alternate text part (for 5.0.2+). By default with 6.0+&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS =&amp;gt; If images were stored into the medias directory from CKEditor, then images into emails are replaced with &amp;quot;inline content&amp;quot;. This may increase seriously risk of being detected as SPAM.&lt;br /&gt;
&lt;br /&gt;
* MAIN_COPY_FILE_IN_EVENT_AUTO =&amp;gt; Add attachement document on event auto generated by sending email from dolibarr. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS =&amp;gt; Enter the public ip address of the server, so it will appears into the help on the email setup page.&lt;br /&gt;
&lt;br /&gt;
* MAIN_MAIL_ENABLED_USER_DEST_SELECT =&amp;gt; Show also internal users into list of recipients of email in email sending form (v8.0+)&lt;br /&gt;
&lt;br /&gt;
== Third Parties module ==&lt;br /&gt;
* SOCIETE_DISABLE_CUSTOMERS =&amp;gt; Remove all menu and features related to customers&lt;br /&gt;
* SOCIETE_DISABLE_PROSPECTS =&amp;gt; Remove all menu and features related to prospects&lt;br /&gt;
* SOCIETE_DISABLE_STATE =&amp;gt; Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
* THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Customer/Prospect&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* THIRDPARTY_NOTSUPPLIER_BY_DEFAULT =&amp;gt; Do not set status &amp;quot;Supplier&amp;quot; to &amp;quot;on&amp;quot; when creating a new third party from menu &amp;quot;New third party&amp;quot;.&lt;br /&gt;
* SOCIETE_SORT_ON_TYPEENT = The combo list of &amp;quot;type of third party&amp;quot; is sorted on a field &amp;quot;position&amp;quot; that appears into dictionary instead of alphabetical order.&lt;br /&gt;
* THIRDPARTY_DEFAULT_CREATE_CONTACT (Dolibarr 5.0+) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* MAIN_THIRDPARTY_CREATION_INDIVIDUAL (Dolibarr &amp;lt;5.0) =&amp;gt; Default Third party create are individual&lt;br /&gt;
* THIRDPARTY_DEFAULT_USEVAT =&amp;gt; When creating a new third party, the field &amp;quot;Use vat&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX1 =&amp;gt; When creating a new third party, the field &amp;quot;Use second tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_DEFAULT_USELOCALTAX2 =&amp;gt; When creating a new third party, the field &amp;quot;Use third tax&amp;quot; is set to on or off depending on value of this parameter.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PARENT_IN_LINKTO =&amp;gt; Search also for elements on parent third party when using the &amp;quot;link to&amp;quot; object feature.&lt;br /&gt;
* THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO =&amp;gt; Search also for elements on third party that own the project of the current element when using the &amp;quot;link to&amp;quot; object feature (if project is owned by a different thirdparty than current one).&lt;br /&gt;
* SOCIETE_ASK_FOR_SHIPPING_METHOD =&amp;gt; Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
* THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a logo is uploaded, a share key is automatically set so the file can be downloaded using the share key.&lt;br /&gt;
* MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL =&amp;gt; External users are always restricted on the thirdparty of their contact record. With this option, permission &amp;quot;see all thirdparty&amp;quot; may works also for external user. Not implemented yet...&lt;br /&gt;
&lt;br /&gt;
== Proposals module ==&lt;br /&gt;
* PROPAL_CLONE_ON_CREATE_PAGE =&amp;gt; On the create proposal page, ask if we want to create the proposal by cloning an already existing one. You should use instead the &amp;quot;Clone&amp;quot; button available on existing proposals.&lt;br /&gt;
* MAIN_PROPAL_CHOOSE_ODT_DOCUMENT =&amp;gt; On setup page, you&#039;ll be able to select which ODT document to use when close or cancel proposals.&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Add a picture of the product (the first one found if there are several) into the generated PDF of proposals. Note that using this will reduce the available width for the product description.&lt;br /&gt;
* PROPAL_DISABLE_SIGNATURE =&amp;gt; Do no show the box for signature.&lt;br /&gt;
* WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES =&amp;gt; Button &amp;quot;Classified Billed&amp;quot; is visible on proposal even if there is no invoice linked to proposal.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; When generating the proposal PDF, all PDFs linked to products linked to proposal are also included into final PDF&lt;br /&gt;
* PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== Order module ==&lt;br /&gt;
* COMMANDE_REQUIRE_SOURCE =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
* COMMANDE_VALID_AFTER_CLOSE_PROPAL =&amp;gt; When an order is created on a proposal close, the order is directly defined with status &amp;quot;Validated&amp;quot;.&lt;br /&gt;
* COMMANDE_CHANGE_THIRDPARTY =&amp;gt; Can change customer on orders&lt;br /&gt;
* ORDER_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Invoice module ==&lt;br /&gt;
* MAIN_DEPOSIT_MULTI_TVA =&amp;gt; In deposits invoice, creates one line per VAT rate from the origin document (6.0)&lt;br /&gt;
* FACTURE_SHOW_SEND_REMINDER =&amp;gt; Show link &amp;quot;Send reminder by mail&amp;quot;, same feature than &amp;quot;Send by mail&amp;quot; (obsolete feature).&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_EDITED =&amp;gt; Allow to edit invoices even if payment was started. Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_ALWAYS_BE_REMOVED =&amp;gt; Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;&#039;&#039;&#039;BlockedLog&#039;&#039;&#039;&amp;quot; is active (required by some countries for legal reason), this will not change content of archived logs tracked by this module. By definition there is no way to change or remove archived records. It will just update data in your application and a new record to track your change into the non reversible archive log.&lt;br /&gt;
* INVOICE_CAN_NEVER_BE_REMOVED =&amp;gt; Never allow to delete invoices (except draft invoices).&lt;br /&gt;
* INVOICE_POSITIVE_CREDIT_NOTE =&amp;gt; All amounts on PDF credit notes are positive.&lt;br /&gt;
* FACTURE_CHANGE_THIRDPARTY =&amp;gt; Allow to change the third party in the draft invoices. If a discount was set from the original thirdparty, then discount remain, making data not coherent.&lt;br /&gt;
* FACTURE_USE_PROFORMAT =&amp;gt; Enable PROFORMAT invoices type.&lt;br /&gt;
* FACTURE_DEPOSITS_ARE_JUST_PAYMENTS =&amp;gt; Treats deposit invoices as a special case. Deposit invoices don&#039;t get counted on turnover. They are then applied as a payment, like a discount, on the final invoice. By default, when you include the deposit into draft of final invoice, the amount of final invoice is reduced. With this option, final amount is not reduced but a payment is registered. &lt;br /&gt;
* FACTURE_SENDBYEMAIL_FOR_ALL_STATUS =&amp;gt; Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT =&amp;gt; Disable VAT on genrated documents. like for an association. (it&#039;s work with crabe template)&lt;br /&gt;
* INVOICE_CREDIT_NOTE_STANDALONE (dolibarr 3.9) =&amp;gt; Can make a credit note without invoice.&lt;br /&gt;
* INVOICE_USE_SITUATION = Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
* INVOICE_USE_SITUATION_CREDIT_NOTE (dolibarr 8.0) = Enable the &amp;quot;situation credit note&amp;quot; feature (need INVOICE_USE_SITUATION)&lt;br /&gt;
* INVOICE_DISABLE_DEPOSIT = Disable deposit invoices&lt;br /&gt;
* INVOICE_DISABLE_REPLACEMENT = Disable replacement invoices&lt;br /&gt;
* INVOICE_DISABLE_CREDIT_NOTE = Disable credit notes&lt;br /&gt;
* WORKFLOW_BILL_ON_SHIPMENT = Change label of button with suitable label when you need to create invoice on shipments&lt;br /&gt;
* INVOICE_ALLOW_EXTERNAL_DOWNLOAD =&amp;gt; When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Expense Report ==&lt;br /&gt;
* EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS =&amp;gt; Can enter several expense reports on same or overlapping date periods. (v7.0+)&lt;br /&gt;
&lt;br /&gt;
== Export module ==&lt;br /&gt;
* EXPORT_CSV_SEPARATOR_TO_USE =&amp;gt; String value to use as default separator to delimit fields of exported files (by default Dolibarr uses &amp;quot;,&amp;quot;). Example: EXPORT_CSV_SEPARATOR_TO_USE=;&lt;br /&gt;
* EXPORT_CSV_FORCE_CHARSET =&amp;gt; Choose the charset used in the output file built by the CSV exporter. By default it is ISO-8859-1. Example: EXPORT_CSV_FORCE_CHARSET= utf-8&lt;br /&gt;
* EXPORTTOOL_CATEGORIES =&amp;gt; Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
* USE_STRICT_CSV_RULES =&amp;gt; Use strict/real CSV format for export. Do not clean/replace CR+LF with &#039;\n&#039; but quote them using the escaping CSV char (&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Agenda module ==&lt;br /&gt;
* AGENDA_MAX_EVENTS_DAY_VIEW =&amp;gt; Define the maximum number of visible entries for each day in agenda. Default value is 3. Value 0 means no limit.&lt;br /&gt;
* AGENDA_USE_EVENT_TYPE =&amp;gt; Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
* AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS =&amp;gt; To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
* MAIN_ADD_EVENT_ON_ELEMENT_CARD =&amp;gt; Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
&lt;br /&gt;
== Products module ==&lt;br /&gt;
* MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE =&amp;gt; Avoid Custom code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
* PRODUCT_ADD_TYPE_IN_DOCUMENTS =&amp;gt; Add text &amp;quot;Product&amp;quot; or &amp;quot;Service&amp;quot; at beginning of details lines on built PDF documents.&lt;br /&gt;
* PRODUCT_DONOTSEARCH_ANYWHERE =&amp;gt; When Ajax search is enabled, search is done on criteria anywhere in label of product. By adding this option, search is done only on start of label. This is really faster when you have a huge number of products.&lt;br /&gt;
* PRODUIT_DESC_IN_LIST =&amp;gt; Show long description of product/service into lists.&lt;br /&gt;
* PRODUIT_PDF_MERGE_PROPAL =&amp;gt; Enable module Propal merge product PDF&lt;br /&gt;
* PRODUCT_USE_OLD_PATH_FOR_PHOTO =&amp;gt; Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
* PRODUCT_USE_UNITS =&amp;gt; Enable units from dictionary in product/service card.&lt;br /&gt;
* PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL =&amp;gt; When option to use price per level/segment is on, this allows to also set a dedicated vat for each price level.&lt;br /&gt;
* MAIN_DIRECT_STATUS_UPDATE =&amp;gt; Allows you to change the status of the product (&#039;&#039;for sale/not for sale for purchase/not for purchase&#039;&#039;) directly on the product page via a &#039;&#039;on/off&#039;&#039; switch button. This can be convenient for those who need to quickly disable certain statuses of products without having to go through the editing product page individually. Also can be very useful if used as a filter on the product and product search list. This option doesn&#039;t generate a MODIFY trigger, so be careful with external modules. v4.0+&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_CHARGES =&amp;gt; Adds an extra field for adhoc charges at the product buying price stage. The Cost price is then calculated with supplier price + charges if defined. Useful for extra costs for a product or certain delivery charges to the product.&lt;br /&gt;
&lt;br /&gt;
* PRODUCT_MAX_VISIBLE_PHOTO =&amp;gt; Show a maximum number of product photos (as thumbnails) on the product main card. Example, setting this constant to &#039;5&#039; will show the first five product photos found on the product card.&lt;br /&gt;
* PRODUCT_MAX_LENGTH_COMBO =&amp;gt; limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
* MAIN_DISABLE_FREE_LINES (&amp;gt;= 8.0) =&amp;gt; Disallow using free lines to add line in documents&lt;br /&gt;
&lt;br /&gt;
== Services module ==&lt;br /&gt;
* SERVICE_ARE_ECOMMERCE_200238EC =&amp;gt; If this option is enabled, services are processed like eServices according to directive of EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm). Default VAT rate are based on buying country instead of selling country for BtoC sells.&lt;br /&gt;
&lt;br /&gt;
== Stocks ==&lt;br /&gt;
* SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED =&amp;gt; Disable stock dispatch when total expected was already received.&lt;br /&gt;
&lt;br /&gt;
== Shipments ==&lt;br /&gt;
* SHIPMENT_GETS_ALL_ORDER_PRODUCTS =&amp;gt; Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
&lt;br /&gt;
== Point of Sale ==&lt;br /&gt;
* CASHDESK_SHOW_KEYPAD =&amp;gt; Show a mouse key pad into Point Of Sale.&lt;br /&gt;
* POS_ADDON = Set this value to an existing numbering module rule (for example &#039;mod_facture_terre&#039;, &#039;mod_facture_mars&#039;, ...) to force the numbering module to us to define the invoice ref when invoice is created by the POS. For example setting value POS_ADDON to &#039;mod_facture_terre&#039; will use the numbering module &#039;terre&#039; for invoice generated from POS, whatever is the numbering rule defined into invoice module setup (you can also use POS_NUMBERING_TERRE_FORCE_PREFIX and POS_NUMBERING_MARS_FORCE_PREFIX variable to change the prefix used).&lt;br /&gt;
&lt;br /&gt;
== Contracts ==&lt;br /&gt;
* CONTRACT_SUPPORT_PRODUCTS =&amp;gt; Products are also suggested into module contract.&lt;br /&gt;
&lt;br /&gt;
== Projects module ==&lt;br /&gt;
* PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS =&amp;gt; Enable linking a project to any supplier even when using the third party link feature. Note: Set to 1 by default from 3.7.&lt;br /&gt;
* PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS =&amp;gt; Can add time spent on tasks, even if i am not assigned to task (however, task must be a project i am a contact).&lt;br /&gt;
* PROJECT_SHOW_REF_INTO_LISTS =&amp;gt; Add column with project ref into list (with 3.7 list of supplier invoices only, will be expanded to other lists)&lt;br /&gt;
* PROJECT_HIDE_UNSELECTABLES =&amp;gt; Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
* PROJECT_HIDE_TASKS =&amp;gt; Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
* PROJECT_LIST_SHOW_STARTDATE =&amp;gt; Shows start date of projects in project lists.&lt;br /&gt;
* PROJECT_LINK_ON_OVERWIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;link to&amp;quot; form on the overview page&lt;br /&gt;
* PROJECT_CREATE_ON_OVERVIEW_DISABLED (4.0) =&amp;gt; Hide the &amp;quot;create ...&amp;quot; button on the overview page&lt;br /&gt;
* PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY =&amp;gt; Can link an object to a project of another thirdparty&lt;br /&gt;
* PROJECT_ALLOW_COMMENT_ON_TASK =&amp;gt; Add comment feature on project task&lt;br /&gt;
&lt;br /&gt;
== Foundation module ==&lt;br /&gt;
* MEMBER_URL_REDIRECT_SUBSCRIPTION =&amp;gt; Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
* MEMBER_EXT_URL_SUBSCRIPTION_INFO =&amp;gt; Link of external page pointed by the &amp;quot;Show here&amp;quot; link added in front off payment cell, into the page to make online subscription.&lt;br /&gt;
&lt;br /&gt;
== Interventions module ==&lt;br /&gt;
* FICHINTER_CLASSIFY_BILLED =&amp;gt; Allow to classify an intervention card as &amp;quot;Billed&amp;quot;. This add also trigger FICHINTER_CLASSIFY_BILLED into list of possible automatic event into agenda.&lt;br /&gt;
* FICHINTER_DISABLE_DETAILS =&amp;gt; Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
&lt;br /&gt;
== Suppliers module ==&lt;br /&gt;
* FOURN_PRODUCT_AVAILABILITY =&amp;gt; On the Suppliers price page of the products, activate the supplier product availability. This is duplicate feature with delivery_delay introduced with 3.8.&lt;br /&gt;
* SUPPLIER_ORDER_AUTOADD_USER_CONTACT =&amp;gt; Add user approving supplier order as a contact automatically.&lt;br /&gt;
* SUPPLIER_ORDER_USE_DISPATCH_STATUS =&amp;gt; Add a status on each dispatch order line when receiving products from suppliers (v4.0+)&lt;br /&gt;
* SUPPLIER_ORDER_NO_DIRECT_APPROVE =&amp;gt; No button &amp;quot;Validate and Approve&amp;quot;. Always do step &amp;quot;Validate&amp;quot; and &amp;quot;Approve&amp;quot; in 2 steps.&lt;br /&gt;
* SUPPLIER_ORDER_WITH_NOPRICEDEFINED =&amp;gt; Can enter a product even if no supplier price defined. (v6.0+)&lt;br /&gt;
* SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT =&amp;gt; Can modify the buying price used for PMP calculation when making a stock reception on a supplier order. (v6.0+)&lt;br /&gt;
&lt;br /&gt;
== Bank module ==&lt;br /&gt;
* BANK_CAN_RECONCILIATE_CASHACCOUNT (3.8) =&amp;gt; Can reconciliate cash accounts&lt;br /&gt;
* BANK_DISABLE_CHECK_DEPOSIT =&amp;gt; Disable check deposit feature&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_ORDER =&amp;gt; Ask bank account during creation of an order&lt;br /&gt;
* BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL =&amp;gt; Ask bank account during creation of a proposal&lt;br /&gt;
&lt;br /&gt;
== Emailing module ==&lt;br /&gt;
* MAILING_PREFIX_FOR_EMAIL_ID =&amp;gt; Set the value that will be used to compose the &amp;quot;Email Id&amp;quot; into email headers. If you set this value to &#039;SERVER_NAME&#039;, the virtual host of web server will be used. By default, this is not defined, so a hash key, unique to each instance, is used.&lt;br /&gt;
* MAILING_NO_USING_PHPMAIL =&amp;gt; If set, the module emailing can&#039;t be use with mail setup of &amp;quot;phpmail&amp;quot;. Using a thirdparty SMTP server is required. You can complete warning message by adding an email to contact for setup help with constant MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS.&lt;br /&gt;
* MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS =&amp;gt; Contains an email to show in a message visible to user when he try to use emailing module without SMTP server and if option MAILING_NO_USING_PHPMAIL is set to on.&lt;br /&gt;
* MAILING_LIMIT_WARNING_PHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_PHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* MAILING_LIMIT_WARNING_NOPHPMAIL =&amp;gt; Show a warning message (var contains the message to show or translation key) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. For example, you can set this parameter to &#039;MAILING_LIMIT_WARNING_NOPHPMAIL&#039; and enter translation key for each language for this key.&lt;br /&gt;
* EMAILING_USE_ADVANCED_SELECTOR =&amp;gt; Enable the advanced selector for destinaries&lt;br /&gt;
&lt;br /&gt;
* MAILING_LIMIT_SENDBYWEB =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from GUI. The value &amp;quot;dolibarr_mailing_limit_sendbyweb&amp;quot; if defined into config file is used in priority for this limit. A negative value means, sending by web is forbidden.&lt;br /&gt;
* MAILING_LIMIT_SENDBYCLI =&amp;gt; Restrict number of emails you can send in same sending session with emailing module from CLI script. The value &amp;quot;dolibarr_mailing_limit_sendbycli&amp;quot; if defined into config file is used in priority for this limit.&lt;br /&gt;
&lt;br /&gt;
== PDF options ==&lt;br /&gt;
* MAIN_DISABLE_FORCE_SAVEAS =&amp;gt; If your browser ask always to save downloaded files on disk (like PDF), try to add this option. File might appears directly into your browser.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_COMPRESSION =&amp;gt; Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
* MAIN_INVERT_SENDER_RECIPIENT =&amp;gt;  Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_DISABLE_PDF_AUTOUPDATE =&amp;gt; Disable automatic generation of PDF each time we add/update/delete a product line (we can still build document by clicking on &amp;quot;Generate&amp;quot;). This option may increase interface speed on servers with low CPU.&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_BACKGROUND_ON_PDF =&amp;gt; Define this constant with short name of an image (example &amp;quot;myimage.jpg&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany/logos&amp;quot;. This will add this background image into your generated PDF files. Warning: This option make TCPDF library beeing crazy sometime and content on image disappeared !&lt;br /&gt;
&lt;br /&gt;
* MAIN_ADD_PDF_BACKGROUND =&amp;gt; Define this constant with short name of a PDF file (example &amp;quot;mypdf.pdf&amp;quot;) that must be saved into directory &amp;quot;documents/mycompany&amp;quot;. This will add PDF as a background of some of your generated PDF files (proposals,invoices,orders). If you need to concat PDF, see instead [[Module Concat PDF]].&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FORCE_FONT =&amp;gt; To ignore font defined into language file and force usage of a particular font. For example &amp;quot;DejaVuSans&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_FREETEXT_HEIGHT =&amp;gt; Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_TITLE_BACKGROUND_COLOR =&amp;gt; Can define a background color onto title line. Example: &#039;220,220,200&#039;&lt;br /&gt;
&lt;br /&gt;
* MAIN_USE_COMPANY_NAME_OF_CONTACT =&amp;gt; Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF =&amp;gt; Activate PDF conversion from ODT document. If value is &#039;jodconverter&#039;, java and jodconverter command line tool must be available. If value is &#039;/pathto/jodconverter.jar&#039;, then java and the jodconvertar jar must exists. soffice must also be available. MAIN_DOL_SCRIPTS_ROOT Must also be defined to path where the &amp;quot;scripts&amp;quot; directory is stored (for example /var/www/mydolibarr).&lt;br /&gt;
&lt;br /&gt;
* MAIN_ODT_AS_PDF_DEL_SOURCE =&amp;gt; For ODT generation. If set, then initial behaviour is conserved but odt file is removed when option to convert it as PDF (see previous) is on. Disabled by default&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_PROPOSALS_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer proposals.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_INVOICES_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for customer invoices.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE =&amp;gt; Include the first image of the product into the line of the generated PDF for supplier proposals (v5.0.3+)&lt;br /&gt;
&lt;br /&gt;
* MAIN_DOCUMENTS_WITH_PICTURE_WIDTH =&amp;gt; Can change size of picture when hidden option MAIN_GENERATE_PROPOSALS_WITH_PICTURE is used. By default value is 20.&lt;br /&gt;
&lt;br /&gt;
* MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN =&amp;gt; Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
* PDF_SHOW_PROJECT =&amp;gt; Show project onto PDF (supported on supplier order only for the moment)&lt;br /&gt;
&lt;br /&gt;
* PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN =&amp;gt; Hide bank number (&amp;quot;code banque/guichet/compte&amp;quot; for france, &amp;quot;sort number/account&amp;quot; for GB, ...) and keep only BIC/IBAN on PDF.&lt;br /&gt;
&lt;br /&gt;
* PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES =&amp;gt; Value 1 or 2 change the way product ref is show (1 = show supplier ref only and not internal ref, 2 = show supplier then internal). Without, internal ref then supplier is shown.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_ADDALSOTARGETDETAILS =&amp;gt; Add particular details like the telephone number on generated PDFs. Can be useful in cases where a printed order/invoice etc is given to a delivery driver/courier etc.&lt;br /&gt;
&lt;br /&gt;
* PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME =&amp;gt; Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
* MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING =&amp;gt; add optional esign field in pdf propal&lt;br /&gt;
&lt;br /&gt;
== WYSIWYG Editor ==&lt;br /&gt;
&lt;br /&gt;
* FCKEDITOR_ENABLE_DETAILS_FULL =&amp;gt; Can cut and paste external images (hosted on external server) into description of proposal, orders or invoices. WARNING: PDF generation is not guaranted with this. Also if the image is removed or renamed by the image hoster, your proposal, order or invoice will be broken.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BlockedLog ==&lt;br /&gt;
&lt;br /&gt;
* BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY =&amp;gt; Make disable of module &amp;quot;blockedlog&amp;quot; not possible for countries code defined into value. Example: &#039;FR,...&#039;&lt;br /&gt;
&lt;br /&gt;
== MultiCurreny ==&lt;br /&gt;
&lt;br /&gt;
* MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION =&amp;gt; Enable CurrencyLayer API synchronization&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Stocks_En&amp;diff=39690</id>
		<title>Module Stocks En</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Stocks_En&amp;diff=39690"/>
		<updated>2018-09-11T10:04:38Z</updated>

		<summary type="html">&lt;p&gt;Ssherratt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Stock]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
{{TemplateModEN}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Stock|&lt;br /&gt;
num=52|&lt;br /&gt;
devdoc=[[Module Stock (developer)]]|&lt;br /&gt;
userdoc=This page|}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
The Stock management module can save status for stocks of products into warehouses and edit/correct quantities of products.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
{{NoInstallModuleEn}}&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
{{ActivationModuleEn}}&lt;br /&gt;
&lt;br /&gt;
The setup page allows you to choose from four options, when the stock is automatically incremented or decreased (depending on events in the order or invoice business process).&lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
*&#039;&#039;&#039;Physical stock&#039;&#039;&#039; is the quantity of products in the warehouses. &lt;br /&gt;
*&#039;&#039;&#039;Virtual stock&#039;&#039;&#039; is the physical stock MINUS the number of products ordered by customers (orders with status validated) PLUS the quantity ordered from suppliers (orders with status &amp;quot;sent to the supplier&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Create a warehouse =&lt;br /&gt;
The creation of a warehouse is the mandatory first step for stock management. You can create a warehouse on the &#039;&#039;Products/Services&#039;&#039; tab, clicking &#039;&#039;Stocks&#039;&#039; on the left menu and then &#039;&#039;New warehouse stock&#039;&#039;. The only required information is a reference code and a warehouse name, the other fields are optional. You must then set whether the warehouse is active or not (opened / closed).  A closed warehouse cannot be used by other Dolibarr functions.  This is a good way to prepare a warehouse with stock before you activate it, or to temporarily block stock movements during an inventory.&lt;br /&gt;
&lt;br /&gt;
= Allocate product stocks =&lt;br /&gt;
&lt;br /&gt;
* This has to be done from the &#039;&#039;stock&#039;&#039; tab on the page of the product, which can be found on the &#039;&#039;products&#039;&#039; section of the left menu.&lt;br /&gt;
* You can also do this from the &#039;&#039;stock&#039;&#039; tab on the page of the warehouse.&lt;br /&gt;
For multiple updates of stock, the import process should be used.&lt;br /&gt;
&lt;br /&gt;
= Automatic stock updates =&lt;br /&gt;
&lt;br /&gt;
Depending on the module configuration, the stock is updated either at the time of an order, at the time of shipment, at the time of invoice, etc..  A movement of stock is then registered according to the chosen increase/decrease stock option.&lt;br /&gt;
&lt;br /&gt;
= Manual stock updates =&lt;br /&gt;
&lt;br /&gt;
If you wish to make adjustments to the existing stock amounts (because of internal production, theft, loss, aging, ...), you can do it directly via the stock tab on the page of the product.&lt;br /&gt;
Use the label field to specify the reason for the change, or to add miscellaneous information.&lt;br /&gt;
&lt;br /&gt;
= Warehouse status =&lt;br /&gt;
&lt;br /&gt;
It is possible to obtain a detailed list of products and movements in a specific warehouse by clicking on the name from the list of warehouses.&lt;br /&gt;
&lt;br /&gt;
== Removal strategy ==&lt;br /&gt;
When using stock decrease on shipments, a removal strategy is a removal rule to decide which lot/batch/serial, or from which warehouse you take a product when you are doing a shipment.&lt;br /&gt;
* FIFO: First in, first out&lt;br /&gt;
* LIFO: Last in, last out&lt;br /&gt;
* FEFO: First expiry, first out&lt;br /&gt;
&lt;br /&gt;
Currently, Dolibarr does not suggest any product lot or warehouse by priority when you ship a product.&lt;br /&gt;
You choose from the interface which product/lot quantity, from which warehouse you use. So the removal strategy is a manual selection by the user. You can choose according to FIFO, LIFO, or FEFO, at each shipment.&lt;br /&gt;
&lt;br /&gt;
In a future, a removal strategy may be implemented so the application will use a default choice to suggest the lot/serial/warehouse/qty to match a default removal strategy rule.&lt;br /&gt;
&lt;br /&gt;
== Stock valuation ==&lt;br /&gt;
With Dolibarr, you can get a valuation of stock in two ways:&lt;br /&gt;
* Standard valuation: Current price of product * qty in stock&lt;br /&gt;
* Average Weight Price (AWP): AWP of product * qty in stock&lt;br /&gt;
&lt;br /&gt;
= Examples of use cases =&lt;br /&gt;
{{ToComplete}}&lt;br /&gt;
{{ExamplesCaseEn&lt;br /&gt;
|name=UCMS01: &lt;br /&gt;
|situation=&lt;br /&gt;
|actions=&lt;br /&gt;
}}&amp;amp;nbsp;&lt;/div&gt;</summary>
		<author><name>Ssherratt</name></author>
	</entry>
</feed>