<?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=Dolichicken</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=Dolichicken"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php/Special:Contributions/Dolichicken"/>
	<updated>2026-10-26T10:15:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Language_and_development_rules&amp;diff=54584</id>
		<title>Language and development rules</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Language_and_development_rules&amp;diff=54584"/>
		<updated>2022-09-05T14:03:15Z</updated>

		<summary type="html">&lt;p&gt;Dolichicken: In English, the meaning of &amp;quot;eventually&amp;quot; is more like &amp;quot;at the end&amp;quot;. This is different to German (and probably French), where the meaning of &amp;quot;eventuell&amp;quot; is more like &amp;quot;maybe&amp;quot;.&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;
[[de:Sprachen_und_Programmierregeln]]&lt;br /&gt;
[[fr:Langages_et_normes]]&lt;br /&gt;
[[es:Lenguaje_y_Normas_de_Desarrollo]]&lt;br /&gt;
[[zh:语言和开发规则]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TemplateDocDevEn}}&lt;br /&gt;
&lt;br /&gt;
These are some rules on language, syntax and norm we use in the Dolibarr project:&lt;br /&gt;
&lt;br /&gt;
=Versions=&lt;br /&gt;
&lt;br /&gt;
*Dolibarr must work on:&lt;br /&gt;
&lt;br /&gt;
#All OS (Windows, Linux, MACOS...)&lt;br /&gt;
#PHP {{PHPMinVersion}} (Must work with no need of complementary PHP module, except module to PHP module to access database).&lt;br /&gt;
#MySQL {{MySqlMinVersion}}&lt;br /&gt;
&lt;br /&gt;
=Copyright Norms=&lt;br /&gt;
&lt;br /&gt;
*All PHP files must start with a header that looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/* Copyright (C) YYYY John Doe  &amp;lt;email@email.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Licence information&lt;br /&gt;
 */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
When you edit an existing file of project, you must add a Copyright line under others.&lt;br /&gt;
&lt;br /&gt;
=PHP Norms=&lt;br /&gt;
==PHP==&lt;br /&gt;
&lt;br /&gt;
*Dolibarr is written with PHP and supports all versions of PHP higher than {{PHPMinVersion}}. All files must end with extension .php&lt;br /&gt;
&lt;br /&gt;
*Usage of PHP superglobals variables must use the dedicated operators $_COOKIES, $_SERVER, $_ENV but use the Dolibarr function GETPOST() to get the contents of $_GET or $_POST..&lt;br /&gt;
&lt;br /&gt;
*Other operators ($HTTP_SERVER_GET, ...) are now deprecated in PHP, so they must not be used. Code must work if option &#039;&#039;&#039;register_long_arrays&#039;&#039;&#039; is set to off. Moreover, the code must work when PHP option &#039;&#039;&#039;register_globals&#039;&#039;&#039; is off (recommended by PHP). It must also work  if the option &#039;&#039;&#039;register_globals&#039;&#039;&#039; is on (by default on a lot of installations).&lt;br /&gt;
&lt;br /&gt;
*Do not use &#039;&#039;&#039;&amp;lt;s&amp;gt;PHP_SELF&amp;lt;/s&amp;gt;&#039;&#039;&#039;. Use instead &#039;&#039;&#039;$_SERVER[&amp;quot;PHP_SELF&amp;quot;]&#039;&#039;&#039;. Also, Dolibarr framework sanitizes content of $_SERVER[&amp;quot;PHP_SELF&amp;quot;] variable (into main.inc.php file, before any business code).&lt;br /&gt;
&lt;br /&gt;
*When several variables must be initialized with the same value, you must use individual declarations (separated by ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$var1 = 1;&lt;br /&gt;
$var2 = 1;&lt;br /&gt;
$var3 = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
instead of&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$var1 = $var2 = $var3 = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
which is slower.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Strings====&lt;br /&gt;
&lt;br /&gt;
*Strings must be have variables outside of the quote.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
print &amp;quot;My text show my &amp;quot;.$variable.&amp;quot; !\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Comments====&lt;br /&gt;
&lt;br /&gt;
*Comments must use the C syntax, ie a double slash for a comment on one line and a slash-star to open a bloc for several lines&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
/* Bloc of comment&lt;br /&gt;
 *&lt;br /&gt;
 * End of bloc&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
$monobjet = new MonObjet($db);&lt;br /&gt;
$result=$monobjet-&amp;gt;fetch($idobject);&lt;br /&gt;
&lt;br /&gt;
for ($i = 1 , $i &amp;lt; 2 ; $i++) {&lt;br /&gt;
    // comment on one line&lt;br /&gt;
    print $i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function myFunction($param1, $param2)&lt;br /&gt;
{&lt;br /&gt;
    // code&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Functions must return a value equal or higher than 0 if successful and strictly lower than 0 if error.&lt;br /&gt;
&lt;br /&gt;
*No dead code (code never used) into Dolibarr core code (code used by external modules only must be included within the external modules).&lt;br /&gt;
&lt;br /&gt;
*Use &amp;quot;include_once&amp;quot; for anything with functions or class definitions in it (like *.class.php and *.lib.php files), use &amp;quot;include&amp;quot; for template-style php with files containing common part of HTML and PHP code (like *.inc.php and *.tpl.php files).&lt;br /&gt;
&lt;br /&gt;
*Coding style to use is the &#039;&#039;&#039;PSR-12&#039;&#039;&#039; (https://www.php-fig.org/psr/psr-12/). Only rules tagged &amp;quot;MUST&amp;quot; are currently required. So note however the exceptions:&lt;br /&gt;
**Length of line: PSR-12 mention we can&#039;t go up to 120 characters on same line, this is a soft limit. It is better to have long lines instead of long page with code content that is just data declaration and does not contain any logic. However, we introduced a hard limit of &#039;&#039;&#039;1000&#039;&#039;&#039; characters (having line larger than this may return errors on Continuous Integration tests).&lt;br /&gt;
**Tabs are allowed: The other exception is that we don&#039;t replace systematically the tabs with spaces. Using tabs is more convenient for most editors/developers. Also using spaces breaks some auto-format features (like Eclipse autoformat feature on some Eclipse version). For the moment, the best setup is &amp;quot;Keep spaces/tabs as it is&amp;quot;, however, you can activate the option &amp;quot;Remove spaces at end of lines&amp;quot;.&lt;br /&gt;
**We allow elements of an array on same line and we do not always add a new line at end of each element.&lt;br /&gt;
**Note 1: The following rule are very important to follow:&lt;br /&gt;
***Files must be saved with Unix format (LF) and not Windows (CR/LF). Unix format is compatible on all OS such as Unix like, Windows, Mac, but the Windows text file format may not work on some PHP under Unix.&lt;br /&gt;
***Smart tags PHP are not used. PHP code section must start with &#039;&#039;&#039;&amp;lt;?php&#039;&#039;&#039;&lt;br /&gt;
**Note 2: You can use the file &#039;&#039;&#039;dev/setup/codesniffer/ruleset.xml&#039;&#039;&#039; as rule file to control coding style with PHPCodeSniffer.&lt;br /&gt;
**Note 3: You can use the file &#039;&#039;&#039;dev/setup/eclipse/PSR-12 [built-in].xml&#039;&#039;&#039; as rule file to setup Eclipse syntax formater.&lt;br /&gt;
**Note 4: You may note that current code is not yet compliant with the PSR-12. The reason is that we must &amp;quot;now&amp;quot; follow the &amp;quot;MUST&amp;quot; rules of PSR-12, but it wasn&#039;t in the past. So feel free to change coding style to match new rules (keep in mind the 2 exceptions) if you find such cases.&lt;br /&gt;
&lt;br /&gt;
==Classes and properties structures==&lt;br /&gt;
&lt;br /&gt;
Some properties of classes are found in different classes. To avoid having different names, we will use the following PHP properties names:&lt;br /&gt;
&lt;br /&gt;
{{TemplatePHPFields}}&lt;br /&gt;
&lt;br /&gt;
=SQL and Database rules=&lt;br /&gt;
&lt;br /&gt;
==DDL file format==&lt;br /&gt;
Files containing definition of the database structure (DDL files) must be &#039;&#039;&#039;2 per table&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*The first file defines the table and its fields. The file name contains the table name, e.g. like this: &amp;lt;tt&amp;gt;llx_&#039;&#039;mytable&#039;&#039;.sql&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A comment will be added for each field to explain its usage.&lt;br /&gt;
&lt;br /&gt;
*The second file defines all foreign keys, performance indexes or other constraints and the file name will be like: &amp;lt;tt&amp;gt;llx_&#039;&#039;mytable&#039;&#039;.key.sql&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These files must be stored in the directory &#039;&#039;&#039;install/mysql/tables&#039;&#039;&#039; for all standard files or &#039;&#039;&#039;mymodule/tables&#039;&#039;&#039; for tables provided by an external module.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;&#039;&#039;file for creating the table llx_mytable will be llx_mytable.sql&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- Copyright (C) 2013 Author &amp;lt;email@author.com&amp;gt;&lt;br /&gt;
-- &lt;br /&gt;
-- This program is free software; you can redistribute it and/or modify&lt;br /&gt;
-- it under the terms of the GNU General Public License as published by&lt;br /&gt;
-- the Free Software Foundation; either version 3 of the License, or&lt;br /&gt;
-- (at your option) any later version.&lt;br /&gt;
--&lt;br /&gt;
-- This program is distributed in the hope that it will be useful,&lt;br /&gt;
-- but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
-- GNU General Public License for more details.&lt;br /&gt;
--&lt;br /&gt;
-- You should have received a copy of the GNU General Public License&lt;br /&gt;
-- along with this program. If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
create table llx_mytable&lt;br /&gt;
(&lt;br /&gt;
  rowid       integer NOT NULL AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;
  ref	      varchar(30)       NOT NULL,		-- object reference number&lt;br /&gt;
  entity      integer DEFAULT 1 NOT NULL,	        -- multi company id&lt;br /&gt;
  ref_ext     varchar(255),-- reference into an external system (not used by dolibarr)&lt;br /&gt;
  field_one   integer,&lt;br /&gt;
  field_two   integer NOT NULL,&lt;br /&gt;
  fk_field    integer,&lt;br /&gt;
  field_date  datetime,&lt;br /&gt;
  datec       timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,,   -- creation datetime&lt;br /&gt;
  tms         timestamp,    -- update time stamp&lt;br /&gt;
  fk_user_author integer NOT NULL,                     -- Author, foreign key of llx_user&lt;br /&gt;
  fk_user_mod    integer NOT NULL,                      -- Last updater, foreign key of llx_user&lt;br /&gt;
  import_key	varchar(14)                -- Use by import process&lt;br /&gt;
)type=innodb;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &#039;&#039;&#039;file for creating keys/indexes for the table llx_mytable will be llx_mytable.key.sql&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- Copyright (C) 2013 Author &amp;lt;email@author.com&amp;gt;&lt;br /&gt;
-- &lt;br /&gt;
-- This program is free software; you can redistribute it and/or modify&lt;br /&gt;
-- it under the terms of the GNU General Public License as published by&lt;br /&gt;
-- the Free Software Foundation; either version 3 of the License, or&lt;br /&gt;
-- (at your option) any later version.&lt;br /&gt;
--&lt;br /&gt;
-- This program is distributed in the hope that it will be useful,&lt;br /&gt;
-- but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
-- GNU General Public License for more details.&lt;br /&gt;
--&lt;br /&gt;
-- You should have received a copy of the GNU General Public License&lt;br /&gt;
-- along with this program. If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE llx_mytable ADD UNIQUE uk_mytable_field (field_one, field_two);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE llx_mytable ADD CONSTRAINT fk_mytable_fk_field FOREIGN KEY (fk_field) REFERENCES llx_matablepere (rowid);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Table and fields structures==&lt;br /&gt;
&lt;br /&gt;
*Structure of tables.&lt;br /&gt;
&lt;br /&gt;
When you create a new table, it is recommended to use the same conventions as other Dolibarr tables. This means the following fields:&lt;br /&gt;
 - rowid INTEGER AUTO_INCREMENT PRIMARY KEY    that is technical id of record&lt;br /&gt;
 - entity INTEGER default 1                    that is id for the multicompany feature&lt;br /&gt;
 - date_creation   datetime                    that is the creation date&lt;br /&gt;
 - tms             timestamp                   that will contain date of last modification (the database manages this field automatically, no need to manage it by the code, just create the field)&lt;br /&gt;
 - date_valid      datetime                    that is the validation date (if applicable)&lt;br /&gt;
 - import_key      varchar(32)                 that will contain the import code YYYYMMDDHHMMSS if you make mass import&lt;br /&gt;
 - status          smallint                    to store a status&lt;br /&gt;
Optional&lt;br /&gt;
 - fk_user_creat or fk_user_author integer that is the id of user making creation&lt;br /&gt;
 - fk_user_modif integer that is the id of user making change&lt;br /&gt;
 - fk_user_valid integer that is the id of user validating record (if applicable)&lt;br /&gt;
 - fk_soc integer that is the ID of the Third party (if applicable)&lt;br /&gt;
&lt;br /&gt;
Note field:&lt;br /&gt;
 - note_private text for private comment of the object&lt;br /&gt;
 - note_public text for public comment of the object&lt;br /&gt;
or &lt;br /&gt;
 - note text if there is no need to have private and public&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Type of fields:&lt;br /&gt;
&lt;br /&gt;
To be compatible with any accuracy required by any country on amounts, to be compatible with any database syntax and with the Dolibarr upgrade framework, we will use the following types for database fields:&lt;br /&gt;
&lt;br /&gt;
 - integer for a primary key, an integer or any of foreign key (bigint may also be accepted for very large tables)&lt;br /&gt;
 - smallint for a small number (like for a status) or a boolean&lt;br /&gt;
 - double(24,8) for any amount&lt;br /&gt;
 - double(6,3) for any vat rate&lt;br /&gt;
 - real for a quantity&lt;br /&gt;
 - varchar for a string (also if length is 1, the type char is more and more deprecated)&lt;br /&gt;
 - timestamp for a field date+time that is automatically updated&lt;br /&gt;
 - datetime for a field date+time&lt;br /&gt;
 - date for a field date&lt;br /&gt;
 - text or medium text for large fields (no index allowed on such fields)&lt;br /&gt;
&lt;br /&gt;
All business rules must be in the same place, in PHP code, not in the client or the database, that&#039;s why type enum is also not allowed.&lt;br /&gt;
Other types are not allowed for compatibility reasons. &lt;br /&gt;
&lt;br /&gt;
*All tables have a prefix to avoid name conflicts with other projects. In the current version this prefix is fixed and can&#039;t be modified. Its value is &amp;lt;tt&amp;gt;llx_&amp;lt;/tt&amp;gt;. In a future version this value should be modified during installation process.&lt;br /&gt;
&lt;br /&gt;
==Primary keys==&lt;br /&gt;
The primary key of a table must be called &amp;lt;tt&amp;gt;rowid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Some old tables do not use this rule and use a primary key called &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; (e.g. [[Table llx_c_actioncomm]]). The reason is historical and this should not happen anymore.&lt;br /&gt;
&lt;br /&gt;
==Foreign keys==&lt;br /&gt;
Name of a foreign key must start with the prefix &amp;lt;tt&amp;gt;fk_&amp;lt;/tt&amp;gt; followed by the table name (i.e. name of the referencing table) (this is required to avoid duplicate names in project that are not allowed even if in different tables by some DBMS like Postgresql) then the field name (i.e. name of the referencing field) (this is to allow to have several foreign keys in same table).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&#039;&#039;fk_facture_fourn_fk_soc&#039;&#039;  is a foreign key in the table llx_facture_fourn for the field fk_soc in this table (that references the rowid field in another table)&lt;br /&gt;
&lt;br /&gt;
Note: If you develop your own external module, it must have no foreign keys that point to Dolibarr standard tables. This will break standard dolibarr upgrades, repair, backup and restore tools and may also break standard features.&lt;br /&gt;
&lt;br /&gt;
==Alternative keys==&lt;br /&gt;
Sometimes, we need other unique keys than primary key. When we need this, we can create an alternate unique key. Such a key should have a name that starts with &amp;lt;tt&amp;gt;uk_&amp;lt;/tt&amp;gt;, then the table name (this is required to avoid duplicate names of unique keys that may create problems for some DBMS like Postgresql) and then another string to define the key (this is to allow having several unique keys on the same table).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&#039;&#039;uk_societe_code_client&#039;&#039; is a unique key on table llx_societe on field code_client.&lt;br /&gt;
&lt;br /&gt;
==Index performance==&lt;br /&gt;
Some fields are often used as search or order criteria, or for joins. In such case, we need to set a performance index on field to increase performances. Such indexes are named with a prefix &amp;lt;tt&amp;gt;idx_&amp;lt;/tt&amp;gt; then the table name and then the field name.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&#039;&#039;idx_societe_user_creat&#039;&#039; is a performance index on table llx_societe for field user_creat&lt;br /&gt;
&lt;br /&gt;
==SQL Coding rules==&lt;br /&gt;
&lt;br /&gt;
*Alias usage/Fields naming&lt;br /&gt;
&lt;br /&gt;
When doing select, we can use alias to simplify writing/reading of requests:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select chp1, chpxxx2 as chp2 from table2 as t1, table2 as t2 where t1.chpx = t2.chpy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
However, we must not used alias for update request as they are not compatible with Mysql 3.1.&lt;br /&gt;
&lt;br /&gt;
*Using SELECT * is forbidden ! When using SELECT you must define complete list of fields to get. This avoids confusion. And above all, this make reengeering of code easier and make impact analysis of change on a field possible. Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT field_a, field_b, field_c FROM table_1 WHERE field_d = &#039;$id&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Into SQL requests, you must quote fields except the fields that contain amounts which must be stored as double or real type. Quotes on numbers may result in saving as a different value. For example 412.62 in an insert will be saved as value 412.61999512 into database (due to implicit conversion string to numeric) if the target field has type double(24,8). Only PHP see value 412.61999512. Other tools will see 412.62 giving a sense that there is no problem. But it&#039;s PHP that has the good vision. There is really a wrong value into database. By removing quotes on numbers, no problem occurs.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
Good:     INSERT INTO table_1 (field_txt, field_num) VALUES (&#039;txt&#039;, 412.62)&lt;br /&gt;
Bad:      INSERT INTO table_1 (field_txt, field_num) VALUES (&#039;txt&#039;, &#039;412.62&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note, problem of float numbers is same problem on all langauges and not only when inserting data into database. It occurs also with any language when you work on &amp;quot;real&amp;quot; numbers, so numbers must be, as soon as they are affected, cleaned with function price2num with second parameter defined to :&lt;br /&gt;
&#039;MU&#039; (for unit prices), &#039;MT&#039; (for total prices) or &#039;MS&#039; (otherwise) depending on usage of number. (see function documentation)&lt;br /&gt;
&lt;br /&gt;
*Functions NOW, SYSDATE or DATEDIFF are forbidden inside SQL requests. If you must use the current date into a field, value must come from the PHP and not from the database engine. This is for better portability of code and correct management of TimeZone.&lt;br /&gt;
&lt;br /&gt;
For example, don&#039;t do:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$sql=&amp;quot;SELECT rowid FROM table where datefield = NOW()&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
but do:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$sql=&amp;quot;SELECT rowid FROM table where datefield = &#039;&amp;quot;.$this-&amp;gt;db-&amp;gt;idate(dol_now()).&amp;quot;&#039;&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, don&#039;t do:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$sql=&amp;quot;SELECT rowid FROM table where DATEDIFF(table.datefield, NOW()) &amp;gt; 7&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
but do:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$sql=&amp;quot;SELECT rowid FROM table where datefield &amp;lt; &#039;&amp;quot;.$this-&amp;gt;db-&amp;gt;idate(dol_now() - (7 * 24 * 3600)).&amp;quot;&#039;&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An other advantage of this rule, is that request benefits of index because we are making a compare of a field with a fixed value. When using datediff, you make an operation on field before comparison, this means database can&#039;t use the index on field, resulting on very bad performance compared to solution without the datediff.&lt;br /&gt;
&lt;br /&gt;
*Use $db-&amp;gt;ifsql for SQL IF&lt;br /&gt;
&lt;br /&gt;
Do not include the IF into your forged SQL request. But use instead $db-&amp;gt;ifsql() method to you will make a SQL IF that is compatible with all SQL databases.&lt;br /&gt;
&lt;br /&gt;
*No DELETE CASCADE and ON UPDATE CASCADE&lt;br /&gt;
&lt;br /&gt;
Such SQL instructions are forbidden because they bypass the business rules of the application. For example, if there is a delete cascade between table A and B, when the application will execute the code to remove a record in A, the children into table B will also be removed. If there was a Dolibarr PHP trigger (for example bring by an external module) on the deletion of record of B (for example to validate the deletion or to execute a complementary action), the DELETE CASCADE will be executed without having the Dolibarr PHP trigger executed, missing the validation or actions of the PHP trigger of the module. So all business rules must be implemented on the same side (the server PHP side), this is the reason why business rules implemented on Database are not allowed (same situation than the next point on Database triggers)&lt;br /&gt;
&lt;br /&gt;
==Using Database triggers==&lt;br /&gt;
Using Database triggers is not allowed into the code of Dolibarr, so you should have no troubles with Database triggers. &lt;br /&gt;
Database triggers are not portable. Compatibility may be broken when upgrading your version of your database, database triggers are often not included into backup tools, database triggers need permissions that you may not have (and should not have) on a common secured database, database triggers means also that you include some &amp;quot;business rules&amp;quot; of your application into the database where most other rules are managed by the code itself (this can create conflict or code that can&#039;t be debugged with a step by step debugger), database triggers execute code using the timezone of the database instead of the reference timezone of application that may be different (generating offset into database) ...&lt;br /&gt;
There is tons of reason why we do not recommend to use database triggers in your own development. &lt;br /&gt;
Using Database triggers can save you time when you make development but is a very bad practice, so is forbidden as it is not compatible with the high level of quality of code expected by Dolibarr team. External modules that uses Database triggers may also be refused on the market place since it won&#039;t work for more than 50% of users.&lt;br /&gt;
&lt;br /&gt;
==MySQL-MariaDB specificity==&lt;br /&gt;
&lt;br /&gt;
*Tables must be declared with format InnoDB.&lt;br /&gt;
&lt;br /&gt;
This format supports foreign keys and their restrictions, and transactions integrity is also supported. This guarantees that Dolibarr events keep all data with correct values between tables even when transaction modify different tables.&lt;br /&gt;
&lt;br /&gt;
*Dolibarr MUST work even if MySQL option &#039;&#039;&#039;strict&#039;&#039;&#039; is active.&lt;br /&gt;
&lt;br /&gt;
To activate it (required when developing on Dolibarr), add the following line into the config file of your MySQL server (my.cnf or my.ini)&lt;br /&gt;
{{MySqlStrictMode}}&lt;br /&gt;
&lt;br /&gt;
==PostgreSQL specificities==&lt;br /&gt;
Only MySQL files must be maintained.&lt;br /&gt;
Those files are converted &amp;quot;on the fly&amp;quot; by the database Dolibarr driver.&lt;br /&gt;
&lt;br /&gt;
There is an exception for the SQL &amp;quot;UPDATE FROM&amp;quot;: &lt;br /&gt;
&lt;br /&gt;
MySQL Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE table_target as target, table_source as source SET fieldtarget=source.fieldsource&lt;br /&gt;
WHERE source.rowid=target.rowid;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PgSQL Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE table_target as target SET fieldtarget=source.fieldsource&lt;br /&gt;
FROM table_source as source WHERE source.rowid=target.rowid;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is no native SQL requests &amp;quot;UPDATE FROM&amp;quot; in all Dolibarr core. But if you use one in your own code of your module, you should do :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($this-&amp;gt;db-&amp;gt;type==&#039;pgsql&#039;) {&lt;br /&gt;
$sql=&amp;quot;UPDATE table_target as target SET fieldtarget=source.fieldsource&lt;br /&gt;
FROM table_source as source WHERE source.rowid=target.rowid&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
$sql= &amp;quot;UPDATE table_target as target, table_source as source SET fieldtarget=source.fieldsource&lt;br /&gt;
WHERE source.rowid=target.rowid&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=HTML norms=&lt;br /&gt;
==Syntax rules==&lt;br /&gt;
&lt;br /&gt;
*HTML used must be HTML compliant and not XHTML. All attributes of HTML tags must be in lower case and quoted with &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*Links href must be absolute and use the function dol_buildpath() to get absolute path from a relative path and img tag must be build using function img_picto().&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
print &#039;&amp;lt;a href=&amp;quot;&#039;.dol_buildpath(&#039;/mydir/mypage.php&#039;).&#039;&amp;quot;&amp;gt;&#039;.img_picto(&#039;Texte alt&#039;,&#039;namepictopng&#039;,&#039;&#039;).&#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*HTML tables must have columns with no forced width, except for columns that contains data we know the length. For example, a column with a picto only can be forced to with=&amp;quot;20px&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Otherwise, we must avoid forcing the column width. Reason is that, in most cases, the browser make a better works to define column width automatically than forced values, and it works whatever is the resolution.&lt;br /&gt;
&lt;br /&gt;
*Javascript/ajax code and call to javascript files into php pages must be avoided. However, if you need to include javascript code, you must add a condition on &amp;quot;$conf-&amp;gt;use_javascript_ajax&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($conf-&amp;gt;use_javascript_ajax) {&lt;br /&gt;
...  // php code generating javascript here&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Popup windows must not be used, except for tooltips (and must have a condition as explained before).&lt;br /&gt;
&lt;br /&gt;
*External scripts must be written in Perl if they can&#039;t be written in PHP. Usage of another language is not forbidden but must be argued before in the development mailing-list.&lt;br /&gt;
&lt;br /&gt;
==External template framework ?==&lt;br /&gt;
There is ton of frameworks to provide a template language of an HTML page (smarty, twig, ...). The best and faster on we know is just called &amp;quot;PHP&amp;quot;, and because Dolibarr already depends on PHP, there is no need to introduce a dependency on a third language to make templates.&lt;br /&gt;
&lt;br /&gt;
All template frameworks are just pre-processor, BEFORE PHP. It can&#039;t be faster than PHP alone. When we say &amp;quot;speed is increased because template framework use a cache&amp;quot;, you must read in fact &amp;quot;the overtime spent by the framework is reduced by cache, not the speed of processing PHP file&amp;quot;. We should say &amp;quot;any template framework has an overload over PHP, the cache of the template framework just reduces the slowing effect of using this framework&amp;quot;, but not &amp;quot;the speed is increased, it is always decreased compared to pure PHP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Above all, having a template system is completely possible by doing a &amp;quot;&#039;&#039;&#039;.tpl.php&#039;&#039;&#039;&amp;quot; file that dos not contains any logic code, but only HTML and print of variables. We get same result (but faster and easier to develop because it does not need to do all the setXXX before calling each template). All variables (known by code that include the template) are automatically known into a PHP template page. No risk to forget a set, and a lot of line of codes reduced, a lot of time and development errors are also saved.&lt;br /&gt;
&lt;br /&gt;
Also, keeping a guarantee of 100% of isolation between code and HTML output is interesting in only 1 situation: When teams building design is completely different than team building logic code, AND if you build not too sophisticated pages, AND with no need of too many Ajax features (this need to know how code works).&lt;br /&gt;
And this situation is surely not the Dolibarr future (team will often be same, Ajax will be more and more present, event if I hope not too much, and screens are more and more dependent of dynamic or contextual events, difficult to have this with one simple template without transforming the template into a page with high level of code). Also design if more an more managed now in CSS side instead of PHP side.&lt;br /&gt;
&lt;br /&gt;
In the past, Dolibarr has experimented a template system like smarty. If on the paper the idea was good, we quickly realized that finding a bug become a headache, coding become a treasure hunt, maintenance and development were done so slower (compared to previous situation where output templates are into the &amp;quot;View&amp;quot; section of each PHP file) that we forgot this idea. Pragmatism has made the rule. &lt;br /&gt;
&lt;br /&gt;
There is a ton of other reasons to not use an external template system and all arguments to use them are also the best argument to use HTML/PHP as our template system. We just ask to keep separation between &#039;&#039;&#039;Controllers&#039;&#039;&#039; (the first section of PHP pages juste after the /* Action */ line), and the &#039;&#039;&#039;Views&#039;&#039;&#039;, the second section after the /* View */ comment).&lt;br /&gt;
&lt;br /&gt;
=Dolibarr norms and code skeleton=&lt;br /&gt;
&lt;br /&gt;
==Skeleton code==&lt;br /&gt;
To standardize the code, and to speed up the development of new components in Dolibarr, you&#039;ll find skeletons of files fully prepared in the directory &#039;&#039;&#039;htdocs/modulebuilder/templates/&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
*1 file that serves as an example of the module description: &#039;&#039;&#039;myModule.class.php&#039;&#039;&#039;&lt;br /&gt;
*1 file that serves as an example of code for creating a new class: &#039;&#039;&#039;skeleton_class.class.php&#039;&#039;&#039;&lt;br /&gt;
*1 file that serves as an example of code for creating a new page: &#039;&#039;&#039;skeleton_page.php&#039;&#039;&#039;&lt;br /&gt;
*1 file that serves as an example of code for creating a script for executing command lines: &#039;&#039;&#039;skeleton_script.php&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Use it as an example.&lt;br /&gt;
Note that the skeletons are also used by the PHP Code generator ([[Module ModuleBuilder]]), which is described in the development chapter of Dolibarr modules, to speed up your development.&lt;br /&gt;
&lt;br /&gt;
==Dates and Timezones==&lt;br /&gt;
Dolibarr is an application that is multi-user and multi-location. It&#039;s therefore necessary to store dates in the right format. To avoid problems with conversions, the following rules should be applied:&lt;br /&gt;
&lt;br /&gt;
*A date into memory must always be stored with Timestamp GMT format.&lt;br /&gt;
*A date stored into database, is the GMT Timestamp of date submitted into the request usng the &amp;lt;b&amp;gt;PHP server&amp;lt;/b&amp;gt; timezone. This does not apply to date update automatically by database (fields &#039;&#039;&#039;tms&#039;&#039;&#039; into database).&lt;br /&gt;
&lt;br /&gt;
For exemple le 1st january 1970, 3 hour at Paris (TZ=+1) = 2 hour at Greenwitch (TZ=0) will be stored into memory with value 7200 and will be submitted into a SQL request to database with the string &#039;19700101030000&#039; (PHP convert into its TZ hour and database will unconvert it using its timezone too that is same than PHP).&lt;br /&gt;
&lt;br /&gt;
All select methods should translate date fields, that are with format TZ of database (&#039;19700101030000&#039;), into a timestamp field by calling the method db-&amp;gt;jdate. This is to store into memory a GTM Timestamp date. All insert methods must convert, during generation of SQL request, the memory date into the string by using db-&amp;gt;idate (you may find examples into skeleton).&lt;br /&gt;
&lt;br /&gt;
*Dates that are updated automatically (field &#039;&#039;&#039;tms&#039;&#039;&#039; into database) contains a GMT Timestamp GMT of date when change is done. The select will also use the db-&amp;gt;jdate (that use PHP server TZ) to convert read data into a GMT Timestamp into memory. So if timezone of database differs from timezone of PHP server (one of them is not correctly set), you may experience differences between creation date and update date.&lt;br /&gt;
&lt;br /&gt;
*Manipulation date with PHP must be done using the Dolibarr date functions: &#039;&#039;&#039;dol_now(), dol_mktime(), dol_stringtotime(), dol_getdate(), dol_time_plus_duree()&#039;&#039;&#039;. You may also find other functions available into file &#039;&#039;&#039;date.lib.php&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==UTF8/ISO encoding==&lt;br /&gt;
Dolibarr stores data in the following way:&lt;br /&gt;
&lt;br /&gt;
*In database, data is stored in UTF8 or ISO. It depends on the database&#039;s pagecode therefore these options are set at creation time. In any case, Dolibarr&#039;s database driver (in lib/database) deals with it to convert from/to UTF8 at insertion and readout.&lt;br /&gt;
*Memory data is stored in UTF8 (PHP object instances).&lt;br /&gt;
*Web pages are returned and rendered into UTF8&lt;br /&gt;
&lt;br /&gt;
==Float numbers, amount and calculation==&lt;br /&gt;
With PHP, like other languages (Java for exemple), non integer data (float, real, double) are not reliable for calculation.&lt;br /&gt;
Try to make for example &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
print 239.2 - 229.3 - 9.9;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
You wont get zero but a very small decimal number. If you get zero her, you should be able to find other examples that don&#039;t work.&lt;br /&gt;
Problem of float is general, so a variable that is a result of a calculation using decimal numbers must ALWAYS be cleaned using the function &#039;&#039;&#039;price2num()&#039;&#039;&#039; with the econd parameter to: &#039;MU&#039;, &#039;MT&#039; or &#039;MS&#039; depending on need (see description of function).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
print price2num(239.2 - 229.3 - 9.9, &#039;MT&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If data manipulated is not an amount, then using MU, MT, MS has no sense, and you must use the function &#039;&#039;&#039;round()&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Creation of tables==&lt;br /&gt;
Do not create tables, on the fly, during execution by a standard user, we mean, during current usage of software.&lt;br /&gt;
If you create a module that uses its own table, not available in the default Dolibarr code, then take a look at tutorial [[Module development]]. It explains how to provide new tables with your module, so that, the tables will be created during module activation and not during module usage.&lt;br /&gt;
&lt;br /&gt;
==Comparing version==&lt;br /&gt;
If your code need to make different things depending on Dolibarr version, you can use the following tip to detect and compare versions&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$version=preg_split(&#039;/[\.-]/&#039;,DOL_VERSION);&lt;br /&gt;
if (versioncompare($version,array(5,0,-4)) &amp;gt;= 0) { //mycode for 5.0 only; }	// For dolibarr 5.0.* (the -4 means we include also alpha, beta, rc and rcX)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But this solution need to include the function versioncompare. An alternative solution to test version is to do:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ((float) DOL_VERSION &amp;gt;= 5.0) { //mycode for 5.0 only; }	// For dolibarr 5.0.*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Logs==&lt;br /&gt;
Add logs to your code using function&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
dol_syslog($yourmessage, LOG_INFO|LOG_DEBUG|LOG_WARNING|LOG_ERR);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Working directory==&lt;br /&gt;
If you need to create a working directory, into your code, refer to it with &lt;br /&gt;
&#039;&#039;&#039;DOL_DATA_ROOT.&#039;/mymodule&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The directory can be created into your code by the following function:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$mymoduledir=DOL_DATA_ROOT.&#039;/mymodule&#039;;&lt;br /&gt;
dol_mkdir($mymoduledir);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need a directory to store temporary data, this directory must be &#039;&#039;&#039;DOL_DATA_ROOT.&#039;/mymodule/temp&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Design patterns and Object programming=&lt;br /&gt;
&lt;br /&gt;
==Creation design patterns (GoF)==&lt;br /&gt;
Design patterns defined by the Gang Of Four (see wikipédia on [[w:Design patterns|Design patterns]]).&lt;br /&gt;
No usage of such patterns is required. We found some objects next to Singletons or Factory but not completely compliant with syntax, this is to be compatible with PHP 4 that is not a pure object language.&lt;br /&gt;
&lt;br /&gt;
==Structure design patterns (GoF)==&lt;br /&gt;
Design patterns defined by the Gang Of Four (see wikipédia on [[w:Design patterns|Design patterns]]). &lt;br /&gt;
No usage of such patterns is required.&lt;br /&gt;
&lt;br /&gt;
==Behavior design patterns (GoF)==&lt;br /&gt;
Design patterns defined by the Gang Of Four (see wikipédia on [[w:Design patterns|Design patterns]]). &lt;br /&gt;
No usage of such patterns is required.&lt;br /&gt;
&lt;br /&gt;
==Design patterns of enterprise (Martin Fowler)==&lt;br /&gt;
&lt;br /&gt;
===Patterns of code organization===&lt;br /&gt;
[[w:Martin Fowler|Martin Fowler]] has identified 3 ways to organize code:&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Transaction Script&#039;&#039;&#039; (The source code is linear for each user action).&lt;br /&gt;
&lt;br /&gt;
This is the old school used by all procedural languages.&lt;br /&gt;
Inconvenient: Redundancy of code. Need to know the physical model of data to develop.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Domain Model&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This notion is available with object languages. It is business process (to identify before) that are used for objects classes.&lt;br /&gt;
Inconvenient: Model very complex to maintain.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Table Module&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a mix between 2 previous where we have only one unique class for each table of database.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; As shown in code skeletons (see previous chapter), Dolibarr uses concept of &#039;&#039;&#039;Table Module&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Communication between business logic - data (ORM)===&lt;br /&gt;
&lt;br /&gt;
There are 3 ways to make links:&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Table And Row Data Gateway&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the most simple. You have one class per table and each class is a link to the table with CRUD methods (Ceate, Read, Update, Delete). A class instance is a record in the table. The class contains only code to reach lines and fields of table.&lt;br /&gt;
&lt;br /&gt;
Example: This mode is used by some ORM Frameworks, like &#039;&#039;&#039;iBatis&#039;&#039;&#039; (http://ibatis.apache.org/).&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Active Record&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same as previous, but we are allowed to add some business functions into the class, if such functions are dedicated to the table or recording into this table.&lt;br /&gt;
&lt;br /&gt;
Example: This mode is used for Dolibarr development and most PHP software that includes their own framework and best practices.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Data Mapper&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Classes represent entities of the problem and not the data. So you have to double, triple ... these classes with Mapper classes to access the data.&lt;br /&gt;
More &amp;quot;purist&amp;quot; on paper (closer of business), this method also has the disadvantage of being more complex in practice.&lt;br /&gt;
&lt;br /&gt;
Example: This is the choice if you use the ORM Framework &#039;&#039;&#039;Propel&#039;&#039;&#039; (http://propel.phpdb.org/trac/). We find this model in heavier applications, based on this ORM among others.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; For Dolibarr development, it is recommended to use the connection mode &#039;&#039;&#039;Active Record&#039;&#039;&#039;, which offers the advantages of a model close to the business without having the complexity, without obfuscating technical architecture. It is by this way that the development, understanding of code and technical maintenance and / or business behaviour seems the more productive (this is however an ongoing debate between the purists and the pragmatists, debate in which nobody can really be right, because it depends on the objectives).&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
==Design pattern for Graphic interfaces (MVC)==&lt;br /&gt;
There are several design patterns for user interfaces (MVC, MVP, MVVM).&lt;br /&gt;
Many confuse this design pattern with that of using a template framework. It&#039;s unrelated. A template framework (see previous point) is only linked to the &amp;quot;V&amp;quot; part of these models.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Dolibarr uses the &#039;&#039;&#039;MVC&#039;&#039;&#039; Design Pattern. Part M is materialized by a DAO class containing the CRUD (Create-Read-Update-Delete) methods for accessing the table.&lt;br /&gt;
Many frameworks have chosen to put the C code part (Controller) and the V code part (View) in different files, or even separate directories. The maintenance seems easier on paper, in practice, you have to juggle constantly between a ton of files when your project become larger. In Dolibarr, the separation is made by a simple comment section. The part of code C (Controller) is therefore the code that follow the tag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Actions&lt;br /&gt;
 * /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is followed by the part of code V (Vue), well separated from the C by the tag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * View&lt;br /&gt;
 * /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This mode of separation has had a neutral effect on new developments but has made it possible to reduce the time required for maintenance and fixing bugs so significantly that it is not envisaged to switch to another type of separation (yes the findings made in real life are not always those expected by school theory). The important thing remains that there is always a separation between C and V, no matter how this separation is materialized, as long as it is (Reminder: Do not confuse the notion of separation of C and V with the notion of separation of the code to feed the data of a View and of the code to format the View, this a principle of separation relating to the Design Pattern of Vue, see next point).&lt;br /&gt;
&lt;br /&gt;
==Design pattern for Views - Presentation==&lt;br /&gt;
There are frameworks that specialize in Vue Design Pattern, the part of formatting the screen seen by the user.&lt;br /&gt;
Old versions of Dolibarr used Smarty. This framework is an overlay to an already very powerful screen formatting framework called ... PHP. The benefits being much lower than the disadvantages, it has been abandoned in favor of PHP templates (.tpl.php file) which remain the simplest, the most universal, the most scalable and the most efficient, of the presentation frameworks. &lt;br /&gt;
&lt;br /&gt;
Its only flaw is that it cannot guarantee 100% the deviations of a developer who would integrate into the View, a logic unrelated to the presentation (therefore other than code intended for generation, formatting, HTML output , test or loop logic). This point is however controlled by the validation mechanism of the project managers&#039; code.&lt;br /&gt;
&lt;br /&gt;
Here again, it is the experience and the observation of a better productivity performance that has motivated the abandonment of the external Presentation frameworks in favor of the PHP framework.&lt;/div&gt;</summary>
		<author><name>Dolichicken</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=48880</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=48880"/>
		<updated>2020-11-02T15:08:19Z</updated>

		<summary type="html">&lt;p&gt;Dolichicken: /* ID 100000 - 499999 */&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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
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. Please pick range into existing holes first.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
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. Merci de prendre dans les trous existant en priorité !&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
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}}&lt;br /&gt;
Reserved for Dolibarr&#039;s internal modules.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
Réservé aux modules internes de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
Reservado a los módulos internos de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
=ID 100000 - 499999=&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
Reserved area for editors in need for an ID range. You can edit this page to add your own range (take a range of 50 numbers only the first time, 1000 max per company)&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
Zone réservée 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ée à 50 valeurs la première fois, 1000 maximum par société)&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
Área reservada para los partners que necesiten un rango de ID. Puede modificar esta página para reservar su rango (limitado a 50 valores por editor)&lt;br /&gt;
&lt;br /&gt;
[[File:Warning.png]] If you reserve more than 50, we may automatically change your reservation range without information and you may experience conflicts with other modules in a future, so please follow the rules !&lt;br /&gt;
&lt;br /&gt;
*ID 100000 - 100999: OpenThink (http://www.openthink.be)&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: Oas services ([http://www.oas-services.fr https://www.oas-services.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 (http://altairis.fr)&lt;br /&gt;
*ID 141000 - 141050: Projet2Team (https://www.projet2team.fr)&lt;br /&gt;
*ID 141051 - 141099: Elistair (http://elistair.com)&lt;br /&gt;
*ID 141100 - 141149: Blue Networks Technologies (https://www.blnt.fr)&lt;br /&gt;
*ID 141150 - 141199: Florian DUFOURG - France&lt;br /&gt;
*ID 142000 - 142049: ITANéA (https://www.itanea.fr)&lt;br /&gt;
*ID 142050 - 142099: ERP Consulting NZ ([https://www.erpconsulting.co.nz www.erpconsulting.co.nz])&lt;br /&gt;
*ID 150000 - 150999: Jeffinfo&lt;br /&gt;
*ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&lt;br /&gt;
*ID 161000 - 161999: Abbes Bahfir (http://dolipar.org)&lt;br /&gt;
*ID 162000 - 162999: Jacques Rébiscoul&lt;br /&gt;
*ID 163000 - 163999: Open-DSI (https://www.open-dsi.fr)&lt;br /&gt;
*ID 164000 - 164999: Pixelada S. Coop. And. (https://pixelada.org)&lt;br /&gt;
*ID 165000 - 165049: DovConnect&lt;br /&gt;
*ID 165050 - 165099: Mind Operated Systems (https://www.mosystems.biz)&lt;br /&gt;
*ID 165100 - 165150: SD-Formation (https://sdformation.fr)&lt;br /&gt;
*ID 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
*ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
*ID 172000 - 172299: Ray Soft-Systems (https://www.ray-soft-systems.com)&lt;br /&gt;
*ID 172300 - 172349: Günter Lukas Consulting (https://gl.co.at)&lt;br /&gt;
*ID 172350 - 172399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 172400 - 172449: Professional Structures Limited (https://pstructures.com)&lt;br /&gt;
*ID 172450 - 172699: IT-BS (https://www.it-bs.fr)&lt;br /&gt;
*ID 172700 - 172749: Indelog (https://www.indelog.fr)&lt;br /&gt;
*ID 172750 - 172799: NS-INFO90 (https://www.ns-info90.fr)&lt;br /&gt;
*ID 180000 - 180999: Triangle Ingénierie&lt;br /&gt;
*ID 181000 - 181999: TI Sin Problemas (https://www.tisinproblemas.com)&lt;br /&gt;
*ID 182000 - 182049: Chipserv Pawel Wlizlo (https://www.testware.it)&lt;br /&gt;
*ID 183000 - 183999: BB2A Anthony Berton (https://www.bb2a.fr)&lt;br /&gt;
*ID 190000 - 190999: Diciannove (http://19.coop)&lt;br /&gt;
*ID 191000 - 191999: Elonet (https://elonet.fr)&lt;br /&gt;
*ID 199000 - 199999: RFMS&lt;br /&gt;
*ID 200000 - 200999: Noxiome&lt;br /&gt;
*ID 201000 - 201999: Sasa Ostrouska (saxa)&lt;br /&gt;
*ID 202000 - 202999: Z-Application&lt;br /&gt;
*ID 203000 - 203099: Elidee - elidee.com&lt;br /&gt;
*ID 203100 - 203999: Garcia MICHEL (soamichel.fr)&lt;br /&gt;
*ID 204000 - 204999: Ari Elbaz elarifr - accedinfo.com&lt;br /&gt;
*ID 205000 - 205999: Kreiz IT&lt;br /&gt;
*ID 206000 - 206999: GBINFO (www.gbinfo.fr)&lt;br /&gt;
*ID 207000 - 207099: MacroProg (https://www.macroprog.com)&lt;br /&gt;
*ID 207100 - 207149: Reactiva Software&lt;br /&gt;
*ID 207150 - 207199: Ndejje University Water Research and Development Centre ([https://github.com/NDUWRDC/LIMS/])&lt;br /&gt;
*ID 207200 - 207299: Massaoud Bouzenad ([https://www.dzprod.net dzprod.net])&lt;br /&gt;
*ID 207300 - 207349: Ksar&lt;br /&gt;
*ID 207350 - 207399: Easylinux (www.easylinux.fr)&lt;br /&gt;
*ID 222000 - 222999:  dolibit  (https://www.dolibit.de)&lt;br /&gt;
*ID 230000 - 230049: Unareil (https://www.unareil.eu)&lt;br /&gt;
*ID 230050 - 230099: Lyra Network (https://www.lyra.com/)&lt;br /&gt;
*ID 230100 - 230149: Gheorghe Iftimi - CTW - RO&lt;br /&gt;
*ID 230150 - 230199: MEMA Machinery &amp;amp; Tools (https://www.mema.be)&lt;br /&gt;
*ID 230200 - 230249: Teleassist&lt;br /&gt;
*ID 230250 - 230299: Nh Developer&lt;br /&gt;
*ID 230300 - 230499: Chickenforce/code-chicken, IT Services Hahn (https://github.com/code-chicken [http://itservices-hahn.de/ https://itservices-hahn.de])&lt;br /&gt;
*ID 230500 : &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 274250 - 274299: Nerv Project (www.nerv-project.eu)&lt;br /&gt;
*ID 274300 - 274349: Knowhere Consulting S.L. (https://www.knowhere-consulting.eu)&lt;br /&gt;
*ID 274350: &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 320000 - 320999: Novus Studios (www.novusstudios.it)&lt;br /&gt;
*ID 321000 - 321999: AtooNet (http://www.atoo-net.com)&lt;br /&gt;
*ID 332000 - 332099: Gecka (https://gecka.nc)&lt;br /&gt;
*ID 332100 &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 330000 - 330049: XTEC Industries (www.xtec-ind.com)&lt;br /&gt;
*ID 330050 - 330099: 10100 S.R.L. - (www.10100.to)&lt;br /&gt;
*ID 330100 - 330149: AES Dana SRL (https://aes-dana.be)&lt;br /&gt;
*ID 330150 - 330199: Freshcore (https://www.freshcore.fr)&lt;br /&gt;
*ID 330200 - 399999: (take ranges of 50 only please, 1000 max per company)&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 - 424049: A3sys - Mon-Dolibarr (http://www.mon-dolibarr.fr) by Philazerty&lt;br /&gt;
*ID 424050 - 424099: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 424100 - 424149: Ohoo Solutions (http://www.ohoosolutions.com)&lt;br /&gt;
*ID 424150 - 424199: DAGARCAM Informática (https://www.dagarcam.com/)&lt;br /&gt;
*ID 424200 &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&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 436200 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&lt;br /&gt;
*ID 437400 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 438400 - 439399: Tetras Libre - France - Développement logiciels libres (www.tetras-libre.fr)&lt;br /&gt;
*ID 439400 - 440399: Dolibarr-pro - France - Développement Dolibarr (www.dolibarr-pro.com)&lt;br /&gt;
*ID 440400 - 441399: Quidlab Co., Ltd - Thailand - ( www.quidlab.com )&lt;br /&gt;
*ID 441400 - 442399: Ide@log - France - (https://www.idealog-info.net) - Laurent Leblanc&lt;br /&gt;
*ID 442400 - 443399: Valerio Bianchi (www.valeriobianchi.com)&lt;br /&gt;
*ID 443400 - 444399: delassalle - France - (www.delassalle.fr) - Joseph Delassalle&lt;br /&gt;
*ID 444400 - 445399: Webartis - Maroc - (www.webartis.net) - François Dry&lt;br /&gt;
*ID 445400 - 445499: SCOP Au-delà des nuages - France&lt;br /&gt;
*ID 446000 - 446999: iouston (http://www.iouston.com) - France - Julien Marchand&lt;br /&gt;
*ID 447000 - 447999: rSanjoSEO - Rafael San José Tovar (www.rsanjoseo.com) - Spain&lt;br /&gt;
*ID 448000 - 448999: Code 42 (www.code42.fr)&lt;br /&gt;
*ID 449000 - 449999: TakePOS (www.takepos.com)&lt;br /&gt;
*ID 450000 - 450999: Pierre ARDOIN&lt;br /&gt;
*ID 451000 - 451999: Éditeur depordi.fr&lt;br /&gt;
*ID 452000 - 452999: Dylan NAKONG&lt;br /&gt;
*ID 453000 - 453999: Menahd Ouchenir - France - menahd-ouchenir.com&lt;br /&gt;
*ID 454000 - 454999: Withheld - Canada&lt;br /&gt;
*ID 455000 - 455999: Gaëtan MAISON - Info Libre @ Dom - France (https://www.infolibreadom.com)&lt;br /&gt;
*ID 456000 - 456999: Laurent LEBLEU - B.L.C. - Blue Line Company - Lille - France (www.bluelinecompany.fr/dolibarr)&lt;br /&gt;
*ID 457000 - 457999: Sébastien BOUCHER&lt;br /&gt;
*ID 458000 - 458999: Lester HERNÁNDEZ - Argentina - (freelancerlrhd@gmail.com)&lt;br /&gt;
*ID 459000 - 459999: Infopen - France&lt;br /&gt;
*ID 460000 - 460050: torvista - Spain&lt;br /&gt;
*ID 461000 - 461999: MEGALOGI - Maroc (www.erpcloud.ma)&lt;br /&gt;
*ID 462000 - 462999: Making Digital (www.making-digital.fr) - France&lt;br /&gt;
*ID 463000 - 463999: linx s.r.l.s.&lt;br /&gt;
*ID 464000 - 464999: NimbleCubed Inc. (www.nimblecubed.com)&lt;br /&gt;
*ID 465000 - 465999: Artefacts - CourantAlternatif&lt;br /&gt;
*ID 466000 - 466999: CDM Consultores - (www.cdm.guru)&lt;br /&gt;
*ID 467000 - 467999: M71 Service GmbH - (www.m71-service.de)&lt;br /&gt;
*ID 468000 - 468049: Clément Segonzac - France (clement.segonzac@gmail.com)&lt;br /&gt;
*ID 468050 - 468099: Flavien Belli - France (https://github.com/Marshlyin || belliflaviencontactpro@gmail.com)&lt;br /&gt;
*ID 468100 - 468119: Chl (https://code.bugness.org/Dolibarr)&lt;br /&gt;
*ID 468120 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 468175 - 468199: Gaëlle Rauffet - France (kiwiscan.net)&lt;br /&gt;
*ID 468200 - 468250: Paulo Oliveira - Brasil (paulorcdo@gmail.com)&lt;br /&gt;
*ID 468251 - 468270:  CD-Systems - France (https://www.cd-systems.fr)&lt;br /&gt;
*ID 468300 - 468349: Uvensys - Germany (https://uvensys.de)&lt;br /&gt;
*ID 468350 - 468399 : Laudeco - Belgium (http://github.com/laudeco)&lt;br /&gt;
*ID 468400 - 468449 : Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 468450 - 468499 : Mehdi Belkhayat - Maroc (https://opensi.ma)&lt;br /&gt;
*ID 468500 - 468599 : InvIT GmbH - Germany (https://invit.sh)&lt;br /&gt;
*ID 468600 - 468649 : Ricardo Sequeira - Portugal (https://ricardo-sequeira.com)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=ID &amp;gt; 500000=&lt;br /&gt;
&lt;br /&gt;
This range can&#039;t be reserved. It is a common range. If you don&#039;t plan to distribute your module, you can use an ID in this range with no need to reserve it.&lt;br /&gt;
&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
If you don&#039;t already have reserved ids and need some, please don&#039;t use hazardous number and use a number higher than 500000, but it is better to ask a wiki account, and reserve your own range by editing the  100000 - 499999 range (50 ids at once, 1000 ids maximum per partner).&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
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 (par lot de 50 d&#039;abord, pas plus de 1000 numéros par partenaire).&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
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>Dolichicken</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=48874</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=48874"/>
		<updated>2020-11-02T11:26:56Z</updated>

		<summary type="html">&lt;p&gt;Dolichicken: /* ID 100000 - 499999 */&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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
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. Please pick range into existing holes first.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
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. Merci de prendre dans les trous existant en priorité !&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
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}}&lt;br /&gt;
Reserved for Dolibarr&#039;s internal modules.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
Réservé aux modules internes de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
Reservado a los módulos internos de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
=ID 100000 - 499999=&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
Reserved area for editors in need for an ID range. You can edit this page to add your own range (take a range of 50 numbers only the first time, 1000 max per company)&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
Zone réservée 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ée à 50 valeurs la première fois, 1000 maximum par société)&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
Área reservada para los partners que necesiten un rango de ID. Puede modificar esta página para reservar su rango (limitado a 50 valores por editor)&lt;br /&gt;
&lt;br /&gt;
[[File:Warning.png]] If you reserve more than 50, we may automatically change your reservation range without information and you may experience conflicts with other modules in a future, so please follow the rules !&lt;br /&gt;
&lt;br /&gt;
*ID 100000 - 100999: OpenThink (http://www.openthink.be)&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: Oas services ([http://www.oas-services.fr https://www.oas-services.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 (http://altairis.fr)&lt;br /&gt;
*ID 141000 - 141050: Projet2Team (https://www.projet2team.fr)&lt;br /&gt;
*ID 141051 - 141099: Elistair (http://elistair.com)&lt;br /&gt;
*ID 141100 - 141149: Blue Networks Technologies (https://www.blnt.fr)&lt;br /&gt;
*ID 141150 - 141199: Florian DUFOURG - France&lt;br /&gt;
*ID 142000 - 142049: ITANéA (https://www.itanea.fr)&lt;br /&gt;
*ID 142050 - 142099: ERP Consulting NZ ([https://www.erpconsulting.co.nz www.erpconsulting.co.nz])&lt;br /&gt;
*ID 150000 - 150999: Jeffinfo&lt;br /&gt;
*ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&lt;br /&gt;
*ID 161000 - 161999: Abbes Bahfir (http://dolipar.org)&lt;br /&gt;
*ID 162000 - 162999: Jacques Rébiscoul&lt;br /&gt;
*ID 163000 - 163999: Open-DSI (https://www.open-dsi.fr)&lt;br /&gt;
*ID 164000 - 164999: Pixelada S. Coop. And. (https://pixelada.org)&lt;br /&gt;
*ID 165000 - 165049: DovConnect&lt;br /&gt;
*ID 165050 - 165099: Mind Operated Systems (https://www.mosystems.biz)&lt;br /&gt;
*ID 165100 - 165150: SD-Formation (https://sdformation.fr)&lt;br /&gt;
*ID 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
*ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
*ID 172000 - 172299: Ray Soft-Systems (https://www.ray-soft-systems.com)&lt;br /&gt;
*ID 172300 - 172349: Günter Lukas Consulting (https://gl.co.at)&lt;br /&gt;
*ID 172350 - 172399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 172400 - 172449: Professional Structures Limited (https://pstructures.com)&lt;br /&gt;
*ID 172450 - 172699: IT-BS (https://www.it-bs.fr)&lt;br /&gt;
*ID 172700 - 172749: Indelog (https://www.indelog.fr)&lt;br /&gt;
*ID 172750 - 172799: NS-INFO90 (https://www.ns-info90.fr)&lt;br /&gt;
*ID 180000 - 180999: Triangle Ingénierie&lt;br /&gt;
*ID 181000 - 181999: TI Sin Problemas (https://www.tisinproblemas.com)&lt;br /&gt;
*ID 182000 - 182049: Chipserv Pawel Wlizlo (https://www.testware.it)&lt;br /&gt;
*ID 183000 - 183999: BB2A Anthony Berton (https://www.bb2a.fr)&lt;br /&gt;
*ID 190000 - 190999: Diciannove (http://19.coop)&lt;br /&gt;
*ID 191000 - 191999: Elonet (https://elonet.fr)&lt;br /&gt;
*ID 199000 - 199999: RFMS&lt;br /&gt;
*ID 200000 - 200999: Noxiome&lt;br /&gt;
*ID 201000 - 201999: Sasa Ostrouska (saxa)&lt;br /&gt;
*ID 202000 - 202999: Z-Application&lt;br /&gt;
*ID 203000 - 203099: Elidee - elidee.com&lt;br /&gt;
*ID 203100 - 203999: Garcia MICHEL (soamichel.fr)&lt;br /&gt;
*ID 204000 - 204999: Ari Elbaz elarifr - accedinfo.com&lt;br /&gt;
*ID 205000 - 205999: Kreiz IT&lt;br /&gt;
*ID 206000 - 206999: GBINFO (www.gbinfo.fr)&lt;br /&gt;
*ID 207000 - 207099: MacroProg (https://www.macroprog.com)&lt;br /&gt;
*ID 207100 - 207149: Reactiva Software&lt;br /&gt;
*ID 207150 - 207199: Ndejje University Water Research and Development Centre ([https://github.com/NDUWRDC/LIMS/])&lt;br /&gt;
*ID 207200 - 207299: Massaoud Bouzenad ([https://www.dzprod.net dzprod.net])&lt;br /&gt;
*ID 207300 - 207349: Ksar&lt;br /&gt;
*ID 207350 - 207399: Easylinux (www.easylinux.fr)&lt;br /&gt;
*ID 222000 - 222999:  dolibit  (https://www.dolibit.de)&lt;br /&gt;
*ID 230000 - 230049: Unareil (https://www.unareil.eu)&lt;br /&gt;
*ID 230050 - 230099: Lyra Network (https://www.lyra.com/)&lt;br /&gt;
*ID 230100 - 230149: Gheorghe Iftimi - CTW - RO&lt;br /&gt;
*ID 230150 - 230199: MEMA Machinery &amp;amp; Tools (https://www.mema.be)&lt;br /&gt;
*ID 230200 - 230249: Teleassist&lt;br /&gt;
*ID 230250 - 230299: Nh Developer&lt;br /&gt;
*ID 230300 - 230499: Chickenforce/code-chicken, IT Services Hahn (https://github.com/code-chicken [https://isrh.de https://itservices-hahn.de])&lt;br /&gt;
*ID 230500 : &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 274250 - 274299: Nerv Project (www.nerv-project.eu)&lt;br /&gt;
*ID 274300 - 274349: Knowhere Consulting S.L. (https://www.knowhere-consulting.eu)&lt;br /&gt;
*ID 274350: &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 320000 - 320999: Novus Studios (www.novusstudios.it)&lt;br /&gt;
*ID 321000 - 321999: AtooNet (http://www.atoo-net.com)&lt;br /&gt;
*ID 332000 - 332099: Gecka (https://gecka.nc)&lt;br /&gt;
*ID 332100 &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 330000 - 330049: XTEC Industries (www.xtec-ind.com)&lt;br /&gt;
*ID 330050 - 330099: 10100 S.R.L. - (www.10100.to)&lt;br /&gt;
*ID 330100 - 330149: AES Dana SRL (https://aes-dana.be)&lt;br /&gt;
*ID 330150 - 330199: Freshcore (https://www.freshcore.fr)&lt;br /&gt;
*ID 330200 - 399999: (take ranges of 50 only please, 1000 max per company)&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 - 424049: A3sys - Mon-Dolibarr (http://www.mon-dolibarr.fr) by Philazerty&lt;br /&gt;
*ID 424050 - 424099: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 424100 - 424149: Ohoo Solutions (http://www.ohoosolutions.com)&lt;br /&gt;
*ID 424150 - 424199: DAGARCAM Informática (https://www.dagarcam.com/)&lt;br /&gt;
*ID 424200 &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&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 436200 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&lt;br /&gt;
*ID 437400 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 438400 - 439399: Tetras Libre - France - Développement logiciels libres (www.tetras-libre.fr)&lt;br /&gt;
*ID 439400 - 440399: Dolibarr-pro - France - Développement Dolibarr (www.dolibarr-pro.com)&lt;br /&gt;
*ID 440400 - 441399: Quidlab Co., Ltd - Thailand - ( www.quidlab.com )&lt;br /&gt;
*ID 441400 - 442399: Ide@log - France - (https://www.idealog-info.net) - Laurent Leblanc&lt;br /&gt;
*ID 442400 - 443399: Valerio Bianchi (www.valeriobianchi.com)&lt;br /&gt;
*ID 443400 - 444399: delassalle - France - (www.delassalle.fr) - Joseph Delassalle&lt;br /&gt;
*ID 444400 - 445399: Webartis - Maroc - (www.webartis.net) - François Dry&lt;br /&gt;
*ID 445400 - 445499: SCOP Au-delà des nuages - France&lt;br /&gt;
*ID 446000 - 446999: iouston (http://www.iouston.com) - France - Julien Marchand&lt;br /&gt;
*ID 447000 - 447999: rSanjoSEO - Rafael San José Tovar (www.rsanjoseo.com) - Spain&lt;br /&gt;
*ID 448000 - 448999: Code 42 (www.code42.fr)&lt;br /&gt;
*ID 449000 - 449999: TakePOS (www.takepos.com)&lt;br /&gt;
*ID 450000 - 450999: Pierre ARDOIN&lt;br /&gt;
*ID 451000 - 451999: Éditeur depordi.fr&lt;br /&gt;
*ID 452000 - 452999: Dylan NAKONG&lt;br /&gt;
*ID 453000 - 453999: Menahd Ouchenir - France - menahd-ouchenir.com&lt;br /&gt;
*ID 454000 - 454999: Withheld - Canada&lt;br /&gt;
*ID 455000 - 455999: Gaëtan MAISON - Info Libre @ Dom - France (https://www.infolibreadom.com)&lt;br /&gt;
*ID 456000 - 456999: Laurent LEBLEU - B.L.C. - Blue Line Company - Lille - France (www.bluelinecompany.fr/dolibarr)&lt;br /&gt;
*ID 457000 - 457999: Sébastien BOUCHER&lt;br /&gt;
*ID 458000 - 458999: Lester HERNÁNDEZ - Argentina - (freelancerlrhd@gmail.com)&lt;br /&gt;
*ID 459000 - 459999: Infopen - France&lt;br /&gt;
*ID 460000 - 460050: torvista - Spain&lt;br /&gt;
*ID 461000 - 461999: MEGALOGI - Maroc (www.erpcloud.ma)&lt;br /&gt;
*ID 462000 - 462999: Making Digital (www.making-digital.fr) - France&lt;br /&gt;
*ID 463000 - 463999: linx s.r.l.s.&lt;br /&gt;
*ID 464000 - 464999: NimbleCubed Inc. (www.nimblecubed.com)&lt;br /&gt;
*ID 465000 - 465999: Artefacts - CourantAlternatif&lt;br /&gt;
*ID 466000 - 466999: CDM Consultores - (www.cdm.guru)&lt;br /&gt;
*ID 467000 - 467999: M71 Service GmbH - (www.m71-service.de)&lt;br /&gt;
*ID 468000 - 468049: Clément Segonzac - France (clement.segonzac@gmail.com)&lt;br /&gt;
*ID 468050 - 468099: Flavien Belli - France (https://github.com/Marshlyin || belliflaviencontactpro@gmail.com)&lt;br /&gt;
*ID 468100 - 468119: Chl (https://code.bugness.org/Dolibarr)&lt;br /&gt;
*ID 468120 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 468175 - 468199: Gaëlle Rauffet - France (kiwiscan.net)&lt;br /&gt;
*ID 468200 - 468250: Paulo Oliveira - Brasil (paulorcdo@gmail.com)&lt;br /&gt;
*ID 468251 - 468270:  CD-Systems - France (https://www.cd-systems.fr)&lt;br /&gt;
*ID 468300 - 468349: Uvensys - Germany (https://uvensys.de)&lt;br /&gt;
*ID 468350 - 468399 : Laudeco - Belgium (http://github.com/laudeco)&lt;br /&gt;
*ID 468400 - 468449 : Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 468450 - 468499 : Mehdi Belkhayat - Maroc (https://opensi.ma)&lt;br /&gt;
*ID 468500 - 468599 : InvIT GmbH - Germany (https://invit.sh)&lt;br /&gt;
*ID 468600 - 468649 : Ricardo Sequeira - Portugal (https://ricardo-sequeira.com)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=ID &amp;gt; 500000=&lt;br /&gt;
&lt;br /&gt;
This range can&#039;t be reserved. It is a common range. If you don&#039;t plan to distribute your module, you can use an ID in this range with no need to reserve it.&lt;br /&gt;
&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
If you don&#039;t already have reserved ids and need some, please don&#039;t use hazardous number and use a number higher than 500000, but it is better to ask a wiki account, and reserve your own range by editing the  100000 - 499999 range (50 ids at once, 1000 ids maximum per partner).&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
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 (par lot de 50 d&#039;abord, pas plus de 1000 numéros par partenaire).&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
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>Dolichicken</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=48855</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=48855"/>
		<updated>2020-10-30T16:44:09Z</updated>

		<summary type="html">&lt;p&gt;Dolichicken: /* ID 100000 - 499999 */&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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
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. Please pick range into existing holes first.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
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. Merci de prendre dans les trous existant en priorité !&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
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}}&lt;br /&gt;
Reserved for Dolibarr&#039;s internal modules.&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
Réservé aux modules internes de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
Reservado a los módulos internos de Dolibarr.&lt;br /&gt;
&lt;br /&gt;
=ID 100000 - 499999=&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
Reserved area for editors in need for an ID range. You can edit this page to add your own range (take a range of 50 numbers only the first time, 1000 max per company)&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
Zone réservée 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ée à 50 valeurs la première fois, 1000 maximum par société)&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
Área reservada para los partners que necesiten un rango de ID. Puede modificar esta página para reservar su rango (limitado a 50 valores por editor)&lt;br /&gt;
&lt;br /&gt;
[[File:Warning.png]] If you reserve more than 50, we may automatically change your reservation range without information and you may experience conflicts with other modules in a future, so please follow the rules !&lt;br /&gt;
&lt;br /&gt;
*ID 100000 - 100999: OpenThink (http://www.openthink.be)&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: Oas services ([http://www.oas-services.fr https://www.oas-services.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 (http://altairis.fr)&lt;br /&gt;
*ID 141000 - 141050: Projet2Team (https://www.projet2team.fr)&lt;br /&gt;
*ID 141051 - 141099: Elistair (http://elistair.com)&lt;br /&gt;
*ID 141100 - 141149: Blue Networks Technologies (https://www.blnt.fr)&lt;br /&gt;
*ID 141150 - 141199: Florian DUFOURG - France&lt;br /&gt;
*ID 142000 - 142049: ITANéA (https://www.itanea.fr)&lt;br /&gt;
*ID 142050 - 142099: ERP Consulting NZ ([https://www.erpconsulting.co.nz www.erpconsulting.co.nz])&lt;br /&gt;
*ID 150000 - 150999: Jeffinfo&lt;br /&gt;
*ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&lt;br /&gt;
*ID 161000 - 161999: Abbes Bahfir (http://dolipar.org)&lt;br /&gt;
*ID 162000 - 162999: Jacques Rébiscoul&lt;br /&gt;
*ID 163000 - 163999: Open-DSI (https://www.open-dsi.fr)&lt;br /&gt;
*ID 164000 - 164999: Pixelada S. Coop. And. (https://pixelada.org)&lt;br /&gt;
*ID 165000 - 165049: DovConnect&lt;br /&gt;
*ID 165050 - 165099: Mind Operated Systems (https://www.mosystems.biz)&lt;br /&gt;
*ID 165100 - 165150: SD-Formation (https://sdformation.fr)&lt;br /&gt;
*ID 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
*ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
*ID 172000 - 172299: Ray Soft-Systems (https://www.ray-soft-systems.com)&lt;br /&gt;
*ID 172300 - 172349: Günter Lukas Consulting (https://gl.co.at)&lt;br /&gt;
*ID 172350 - 172399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 172400 - 172449: Professional Structures Limited (https://pstructures.com)&lt;br /&gt;
*ID 172450 - 172699: IT-BS (https://www.it-bs.fr)&lt;br /&gt;
*ID 172700 - 172749: Indelog (https://www.indelog.fr)&lt;br /&gt;
*ID 172750 - 172799: NS-INFO90 (https://www.ns-info90.fr)&lt;br /&gt;
*ID 180000 - 180999: Triangle Ingénierie&lt;br /&gt;
*ID 181000 - 181999: TI Sin Problemas (https://www.tisinproblemas.com)&lt;br /&gt;
*ID 182000 - 182049: Chipserv Pawel Wlizlo (https://www.testware.it)&lt;br /&gt;
*ID 183000 - 183999: BB2A Anthony Berton (https://www.bb2a.fr)&lt;br /&gt;
*ID 190000 - 190999: Diciannove (http://19.coop)&lt;br /&gt;
*ID 191000 - 191999: Elonet (https://elonet.fr)&lt;br /&gt;
*ID 199000 - 199999: RFMS&lt;br /&gt;
*ID 200000 - 200999: Noxiome&lt;br /&gt;
*ID 201000 - 201999: Sasa Ostrouska (saxa)&lt;br /&gt;
*ID 202000 - 202999: Z-Application&lt;br /&gt;
*ID 203000 - 203099: Elidee - elidee.com&lt;br /&gt;
*ID 203100 - 203999: Garcia MICHEL (soamichel.fr)&lt;br /&gt;
*ID 204000 - 204999: Ari Elbaz elarifr - accedinfo.com&lt;br /&gt;
*ID 205000 - 205999: Kreiz IT&lt;br /&gt;
*ID 206000 - 206999: GBINFO (www.gbinfo.fr)&lt;br /&gt;
*ID 207000 - 207099: MacroProg (https://www.macroprog.com)&lt;br /&gt;
*ID 207100 - 207149: Reactiva Software&lt;br /&gt;
*ID 207150 - 207199: Ndejje University Water Research and Development Centre ([https://github.com/NDUWRDC/LIMS/])&lt;br /&gt;
*ID 207200 - 207299: Massaoud Bouzenad ([https://www.dzprod.net dzprod.net])&lt;br /&gt;
*ID 207300 - 207349: Ksar&lt;br /&gt;
*ID 207350 - 207399: Easylinux (www.easylinux.fr)&lt;br /&gt;
*ID 222000 - 222999:  dolibit  (https://www.dolibit.de)&lt;br /&gt;
*ID 230000 - 230049: Unareil (https://www.unareil.eu)&lt;br /&gt;
*ID 230050 - 230099: Lyra Network (https://www.lyra.com/)&lt;br /&gt;
*ID 230100 - 230149: Gheorghe Iftimi - CTW - RO&lt;br /&gt;
*ID 230150 - 230199: MEMA Machinery &amp;amp; Tools (https://www.mema.be)&lt;br /&gt;
*ID 230200 - 230249: Teleassist&lt;br /&gt;
*ID 230250 - 230299: Nh Developer&lt;br /&gt;
*ID 230300 - 230349: Chickenforce aka code-chicken (https://github.com/code-chicken)&lt;br /&gt;
*ID 230350 : &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 274250 - 274299: Nerv Project (www.nerv-project.eu)&lt;br /&gt;
*ID 274300 - 274349: Knowhere Consulting S.L. (https://www.knowhere-consulting.eu)&lt;br /&gt;
*ID 274350: &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 320000 - 320999: Novus Studios (www.novusstudios.it)&lt;br /&gt;
*ID 321000 - 321999: AtooNet (http://www.atoo-net.com)&lt;br /&gt;
*ID 332000 - 332099: Gecka (https://gecka.nc)&lt;br /&gt;
*ID 332100 &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 330000 - 330049: XTEC Industries (www.xtec-ind.com)&lt;br /&gt;
*ID 330050 - 330099: 10100 S.R.L. - (www.10100.to)&lt;br /&gt;
*ID 330100 - 330149: AES Dana SRL (https://aes-dana.be)&lt;br /&gt;
*ID 330150 - 330199: Freshcore (https://www.freshcore.fr)&lt;br /&gt;
*ID 330200 - 399999: (take ranges of 50 only please, 1000 max per company)&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 - 424049: A3sys - Mon-Dolibarr (http://www.mon-dolibarr.fr) by Philazerty&lt;br /&gt;
*ID 424050 - 424099: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 424100 - 424149: Ohoo Solutions (http://www.ohoosolutions.com)&lt;br /&gt;
*ID 424150 - 424199: DAGARCAM Informática (https://www.dagarcam.com/)&lt;br /&gt;
*ID 424200 &#039;&#039;&#039;Free (take ranges of 50 only please, 1000 max per company)&#039;&#039;&#039;&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 436200 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&lt;br /&gt;
*ID 437400 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 438400 - 439399: Tetras Libre - France - Développement logiciels libres (www.tetras-libre.fr)&lt;br /&gt;
*ID 439400 - 440399: Dolibarr-pro - France - Développement Dolibarr (www.dolibarr-pro.com)&lt;br /&gt;
*ID 440400 - 441399: Quidlab Co., Ltd - Thailand - ( www.quidlab.com )&lt;br /&gt;
*ID 441400 - 442399: Ide@log - France - (https://www.idealog-info.net) - Laurent Leblanc&lt;br /&gt;
*ID 442400 - 443399: Valerio Bianchi (www.valeriobianchi.com)&lt;br /&gt;
*ID 443400 - 444399: delassalle - France - (www.delassalle.fr) - Joseph Delassalle&lt;br /&gt;
*ID 444400 - 445399: Webartis - Maroc - (www.webartis.net) - François Dry&lt;br /&gt;
*ID 445400 - 445499: SCOP Au-delà des nuages - France&lt;br /&gt;
*ID 446000 - 446999: iouston (http://www.iouston.com) - France - Julien Marchand&lt;br /&gt;
*ID 447000 - 447999: rSanjoSEO - Rafael San José Tovar (www.rsanjoseo.com) - Spain&lt;br /&gt;
*ID 448000 - 448999: Code 42 (www.code42.fr)&lt;br /&gt;
*ID 449000 - 449999: TakePOS (www.takepos.com)&lt;br /&gt;
*ID 450000 - 450999: Pierre ARDOIN&lt;br /&gt;
*ID 451000 - 451999: Éditeur depordi.fr&lt;br /&gt;
*ID 452000 - 452999: Dylan NAKONG&lt;br /&gt;
*ID 453000 - 453999: Menahd Ouchenir - France - menahd-ouchenir.com&lt;br /&gt;
*ID 454000 - 454999: Withheld - Canada&lt;br /&gt;
*ID 455000 - 455999: Gaëtan MAISON - Info Libre @ Dom - France (https://www.infolibreadom.com)&lt;br /&gt;
*ID 456000 - 456999: Laurent LEBLEU - B.L.C. - Blue Line Company - Lille - France (www.bluelinecompany.fr/dolibarr)&lt;br /&gt;
*ID 457000 - 457999: Sébastien BOUCHER&lt;br /&gt;
*ID 458000 - 458999: Lester HERNÁNDEZ - Argentina - (freelancerlrhd@gmail.com)&lt;br /&gt;
*ID 459000 - 459999: Infopen - France&lt;br /&gt;
*ID 460000 - 460050: torvista - Spain&lt;br /&gt;
*ID 461000 - 461999: MEGALOGI - Maroc (www.erpcloud.ma)&lt;br /&gt;
*ID 462000 - 462999: Making Digital (www.making-digital.fr) - France&lt;br /&gt;
*ID 463000 - 463999: linx s.r.l.s.&lt;br /&gt;
*ID 464000 - 464999: NimbleCubed Inc. (www.nimblecubed.com)&lt;br /&gt;
*ID 465000 - 465999: Artefacts - CourantAlternatif&lt;br /&gt;
*ID 466000 - 466999: CDM Consultores - (www.cdm.guru)&lt;br /&gt;
*ID 467000 - 467999: M71 Service GmbH - (www.m71-service.de)&lt;br /&gt;
*ID 468000 - 468049: Clément Segonzac - France (clement.segonzac@gmail.com)&lt;br /&gt;
*ID 468050 - 468099: Flavien Belli - France (https://github.com/Marshlyin || belliflaviencontactpro@gmail.com)&lt;br /&gt;
*ID 468100 - 468119: Chl (https://code.bugness.org/Dolibarr)&lt;br /&gt;
*ID 468120 &#039;&#039;&#039;Free (take ranges of 50 only please at once, 1000 max per company)&#039;&#039;&#039;&lt;br /&gt;
*ID 468175 - 468199: Gaëlle Rauffet - France (kiwiscan.net)&lt;br /&gt;
*ID 468200 - 468250: Paulo Oliveira - Brasil (paulorcdo@gmail.com)&lt;br /&gt;
*ID 468251 - 468270:  CD-Systems - France (https://www.cd-systems.fr)&lt;br /&gt;
*ID 468300 - 468349: Uvensys - Germany (https://uvensys.de)&lt;br /&gt;
*ID 468350 - 468399 : Laudeco - Belgium (http://github.com/laudeco)&lt;br /&gt;
*ID 468400 - 468449 : Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 468450 - 468499 : Mehdi Belkhayat - Maroc (https://opensi.ma)&lt;br /&gt;
*ID 468500 - 468599 : InvIT GmbH - Germany (https://invit.sh)&lt;br /&gt;
*ID 468600 - 468649 : Ricardo Sequeira - Portugal (https://ricardo-sequeira.com)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=ID &amp;gt; 500000=&lt;br /&gt;
&lt;br /&gt;
This range can&#039;t be reserved. It is a common range. If you don&#039;t plan to distribute your module, you can use an ID in this range with no need to reserve it.&lt;br /&gt;
&lt;br /&gt;
{{Flag en}}&lt;br /&gt;
If you don&#039;t already have reserved ids and need some, please don&#039;t use hazardous number and use a number higher than 500000, but it is better to ask a wiki account, and reserve your own range by editing the  100000 - 499999 range (50 ids at once, 1000 ids maximum per partner).&lt;br /&gt;
&lt;br /&gt;
{{Flag fr}}&lt;br /&gt;
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 (par lot de 50 d&#039;abord, pas plus de 1000 numéros par partenaire).&lt;br /&gt;
&lt;br /&gt;
{{Flag sp}}&lt;br /&gt;
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>Dolichicken</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=45591</id>
		<title>Setup Other</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Setup_Other&amp;diff=45591"/>
		<updated>2020-01-15T08:06:27Z</updated>

		<summary type="html">&lt;p&gt;Dolichicken: The correct spelling is customs, not &amp;quot;Custom&amp;quot;&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:Paramétrage_Divers]]&lt;br /&gt;
[[es:Configuración_Varios]]&lt;br /&gt;
[[de:Erweiterte_Einstellungen]]&lt;br /&gt;
[[zh:其他设置]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&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;
=Introduction=&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;
 {{warning|32px}} This page contains the list of some advanced hidden parameters. In most cases, it is parameters for internal usage, development, external modules, features in development not stable or that may lead to security risk. For standard usage of Dolibarr, such parameters &#039;&#039;&#039;SHOULD NOT&#039;&#039;&#039; be used. All hidden options are NOT supported. They may be removed in a future, modified at any version and break stability of your application.&lt;br /&gt;
&lt;br /&gt;
To enable/override a parameter you have to define the constant name and set it to 1 (unless otherwise stated) in &amp;lt;code&amp;gt;Home ► Setup ► Other Setup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is a &amp;quot;todo list&amp;quot; showing wich options are not yet documented (for V11 on 01/12/2019) : [[Setup Other todolist]]&lt;br /&gt;
&lt;br /&gt;
=List of Known Hidden Options=&lt;br /&gt;
&lt;br /&gt;
After Global Options, the 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;
HIDDEN_CONFIG ► &#039;&#039;Description of config&#039;&#039; ► &#039;&#039;(specific version information) or values&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Global Options==&lt;br /&gt;
&lt;br /&gt;
*ADD_UNSPLASH_LOGIN_BACKGROUND ► The background image will be refreshed on every login page refresh. Background image is pulled from the popular open source image website Unsplash. If an already saved static background image exists, then this code will override it (but not delete the saved image). ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_APPLICATION_TITLE ► 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 ► 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_AUTO_TIMESTAMP_IN_PUBLIC_NOTES ► 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 ► Add a timestamp and user automatically when editing the &#039;&#039;private&#039;&#039; note.&lt;br /&gt;
*MAIN_COUNTRIES_IN_EEC ► Country list in European Area (For VAT purpose) (v10.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_DEFAULT_PAYMENT_TERM_ID ► 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_DEFAULT_LANGUAGE_FILTER ► Useful if you do not want to show en_US language option in combo boxes (other languages can easily be removed in langs directory but not en_US) ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_LANGUAGES_ALLOWED ► is a list of languages without spaces, example : fr_FR,en_US,de_DE,it_IT if defined, only those languages will appear in combos. ► (v11.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_DISABLE_NOTES_TAB ►Show or hide notes tab in the card page&lt;br /&gt;
&lt;br /&gt;
*MAIN_DISABLE_CONTACTS_TAB ► Show or hide contacts tab in the card page&lt;br /&gt;
&lt;br /&gt;
*MAIN_DISABLE_FULL_SCANLIST ► 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 2 000 000 records).&lt;br /&gt;
&lt;br /&gt;
*MAIN_DISABLE_JQUERY_JNOTIFY ► 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;
*MAIN_DISABLE_AJAX_COMBOX ► 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 1 ► (v3.6.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_DISABLE_MULTIPLE_FILEUPLOAD ► Disable users to upload multiple files at once.&lt;br /&gt;
*MAIN_DISABLE_TRUNC ► Disable all truncings in select list. (v7.0 and more)&lt;br /&gt;
&lt;br /&gt;
*MAIN_DISABLEDRAFTSTATUS ► Disable the status Draft for some objects (project, donation, ...)&lt;br /&gt;
&lt;br /&gt;
*MAIN_DOC_USE_OBJECT_THIRDPARTY_NAME ► Add name of thirdparty at begin of generated document.&lt;br /&gt;
&lt;br /&gt;
*MAIN_DOC_USE_TIMING ► 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; (only for ODT files)&lt;br /&gt;
&lt;br /&gt;
*MAIN_DOC_UPLOAD_NOT_RENAME_BY_DEFAULT ► Disable the auto renaming on upload file ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_DOL_SCRIPTS_ROOT ► 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;
*MAIN_ENABLE_LOG_TO_HTML ► 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_ENABLE_IMPORT_LINKED_OBJECT_LINES ► Allow to import lines into current document from &amp;quot;linked&amp;quot; compatible documents ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_FIRST_TO_UPPER ► 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_ALL_TO_UPPER ► Dolibarr puts uppercase for 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. ► (v11.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_FILESYSTEM_ENCODING ► 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;
*MAIN_FORCELANGDIR ► 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;
*MAIN_HTML_TITLE ► 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;
*MAIN_HELPCENTER_LINKTOUSE  ► 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_LANDING_PAGE ► 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;
*MAIN_LOGOUT_GOTO_URL ► URL to which the user will be redirected after LOGOUT&lt;br /&gt;
&lt;br /&gt;
*MAIN_MAXTABS_IN_CARD ► Maximum number of tabs visible. Others are grouped into a combo list.&lt;br /&gt;
&lt;br /&gt;
*MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING ► 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_MODULES_FOR_EXTERNAL ► 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;
*MAIN_NO_CONCAT_DESCRIPTION ► Allow to use only input custom description in lines (propale, order, invoice) ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_ONLY_LOGIN_ALLOWED ► Only the specified login is allowed to log in Dolibarr (maintenance mode).&lt;br /&gt;
&lt;br /&gt;
*MAIN_OPTIMIZE_SPEED ► Use some speed enhancements. See page [[FAQ Increase Performance]] for more information.&lt;br /&gt;
&lt;br /&gt;
*MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN ► 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;
*MAIN_PUBLIC_NOTE_IN_ADDRESS ► Show public note in address block ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_REMOVE_INSTALL_WARNING ► 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;
*MAIN_REPEATCONTACTONEACHTAB ► If added and set to 1, this adds contacts on all tabs, not only main tab.&lt;br /&gt;
&lt;br /&gt;
*MAIN_REPLACE_TRANS_xx_XX ► 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;
*MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND ► Change way of rounding total TTC lines, rounding first of after.&lt;br /&gt;
&lt;br /&gt;
*MAIN_SECURITY_CSRF_WITH_TOKEN ► 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 more powerful. ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_SERVER_TZ ► 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;
*MAIN_SEARCH_FORM_ON_HOME_AREAS ► 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 ► If only one result is found, then setting this value to 1 will take you direct to the item (default method).  Setting the value to 0 will show the result in the list as a single result ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_SERVICES_ARE_ECOMMERCE_200238EC ► (&amp;lt; 8)&lt;br /&gt;
&lt;br /&gt;
*MAIN_SHOW_TUNING_INFO ► Add tuning information into javascript console. Better when xdebug is enabled.&lt;br /&gt;
&lt;br /&gt;
*MAIN_SHOW_TECHNICAL_ID ► Show also technical IDs on elements cards or some lists (not supported everywhere).&lt;br /&gt;
&lt;br /&gt;
*MAIN_SHOWDATABASENAMEINHELPPAGESLINK ► Show database name in upper help menu ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_USE_HOURMIN_IN_DATE_RANGE ► 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_USE_JQUERY_JEDITABLE ► 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;
*MAIN_USE_JQUERY_MULTISELECT ► 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_USE_OLD_SEARCH_FORM ► Display the old search form in left menu.&lt;br /&gt;
&lt;br /&gt;
*MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC ► 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;
*MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS ► Allow to define a default VAT rate&lt;br /&gt;
&lt;br /&gt;
*MAIN_VIEW_LINE_NUMBER ► 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_VOLUME_DEFAULT_ROUND ► Accuracy of volume (number of decimals)&lt;br /&gt;
&lt;br /&gt;
*MAIN_VOLUME_DEFAULT_UNIT ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
&lt;br /&gt;
*MAIN_WEIGHT_DEFAULT_ROUND ► Accuracy of weight (number of decimals)&lt;br /&gt;
&lt;br /&gt;
*MAIN_WEIGHT_DEFAULT_UNIT ► Default unit for weight (0=kg, -3=g, ...)&lt;br /&gt;
*USER_HIDE_INACTIVE_IN_COMBOBOX ► Disable display inactive users in combobox.&lt;br /&gt;
*MAIN_DISABLE_PDF_THUMBS ► Disable thumbs PDF in case of imagick bug&lt;br /&gt;
*MAIN_KEEP_REF_CUSTOMER_ON_CLONING ► Keep the Customer Reference on cloned object (Propal/Invoice)&lt;br /&gt;
*MAIN_DONT_KEEP_NOTE_ON_CLONING ► Remove the object notes during cloning ► (v11.0)&lt;br /&gt;
*MAIN_DOC_SORT_FIELD ► Set the default sorting field on document page (name by default) ► (v11.0)&lt;br /&gt;
*MAIN_DOC_SORT_ORDER ► Set the default sorting order (ASC or DESC) on document page (ASC by default) ► (v11.0)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Accountancy Module==&lt;br /&gt;
&lt;br /&gt;
*ACCOUNTANCY_COMBO_FOR_AUX ► Add graphic option for ACCOUNTANCY_COMBO_FOR_AUX ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Agenda Module==&lt;br /&gt;
&lt;br /&gt;
*AGENDA_MAX_EVENTS_DAY_VIEW ► Define the maximum number of visible entries for each day in agenda. Default value is 3. Value 0 means no limit.&lt;br /&gt;
&lt;br /&gt;
*AGENDA_USE_EVENT_TYPE ► Add a mandatory field &amp;quot;Type&amp;quot; when creating an event (deprecated).&lt;br /&gt;
&lt;br /&gt;
*AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS ► To automatically set end date of event to start date + delta on event creation page.&lt;br /&gt;
*AGENDA_DISABLE_LOCATION ► Disable location field in action card  ► (&amp;gt;=v5.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_ADD_EVENT_ON_ELEMENT_CARD ► Allow to create an event from a document (proposal, order, invoice)&lt;br /&gt;
*AGENDA_ALL_CALENDARS ► Change the default view to calendar for all the Agenda&#039;s&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bank Module==&lt;br /&gt;
&lt;br /&gt;
*BANK_CAN_RECONCILIATE_CASHACCOUNT ► Can reconciliate cash accounts ► (v3.8)&lt;br /&gt;
&lt;br /&gt;
*BANK_DISABLE_CHECK_DEPOSIT ► Disable check deposit feature&lt;br /&gt;
&lt;br /&gt;
*BANK_ASK_PAYMENT_BANK_DURING_ORDER ► Ask bank account during creation of an order&lt;br /&gt;
&lt;br /&gt;
*BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL ► Ask bank account during creation of a proposal&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==BlockedLog==&lt;br /&gt;
&lt;br /&gt;
*BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY ► 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;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contracts==&lt;br /&gt;
&lt;br /&gt;
*CONTRACT_SUPPORT_PRODUCTS ► Products are also suggested into module contract.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Direct Debit Orders==&lt;br /&gt;
&lt;br /&gt;
*WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS ► If this option is set, all invoices status (even already paid) may appear on the list of invoices qualified for a direct debit payment. This is the list of invoices with a payment request done, and not linked to a direct debit payment. By default, only &amp;quot;unpayed&amp;quot; invoices are used to avoid to pay twice the same invoice.&lt;br /&gt;
&lt;br /&gt;
==Email and SMS==&lt;br /&gt;
&lt;br /&gt;
*MAIN_MAILFORM_DISABLE_ENTERKEY ► Activate javascript code to disable the enter key in the MAIL form. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
*MAIL_PREFIX_FOR_EMAIL_ID ► 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;
*MAIN_MAIL_DEBUG ► 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;
*MAIN_SMS_DEBUG ► 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;
*MAIN_MAIL_ALLOW_SENDMAIL_F ► 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 mail 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 -f 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 ► 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 -ba parameter to sendmail. This option asks PHP to provide this parameter when sending a mail. Note that another solution is to edit the mail.force_extra_parameters=-ba into &amp;lt;code&amp;gt;php.ini&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
*MAIN_MAIL_NO_FULL_EMAIL ► 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 ► 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;
*MAIN_MAIL_DO_NOT_USE_SIGN ► Do not add user signature at end of suggested pre-defined email&lt;br /&gt;
&lt;br /&gt;
*MAIL_FORCE_DELIVERY_RECEIPT_INVOICE ► 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 ► 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 ► 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 ► 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 ► Email to use as a BCC recipient 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 ► 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 ► 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 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 ► 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 ► 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 ► 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 ► 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 ► 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;
*MAIN_MAIL_ENABLED_USER_DEST_SELECT ► Show also internal users into list of recipients of email in email sending form ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Emailing Module==&lt;br /&gt;
&lt;br /&gt;
*MAILING_PREFIX_FOR_EMAIL_ID ► 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;
*MAILING_NO_USING_PHPMAIL ► 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 MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS.&lt;br /&gt;
&lt;br /&gt;
*MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS ► Contains the email of contact to show into the message visible to a 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;
&lt;br /&gt;
*MAILING_LIMIT_WARNING_PHPMAIL ► Show a warning message (var contains the &#039;&#039;&#039;message to show&#039;&#039;&#039;, or &#039;&#039;&#039;translation key&#039;&#039;&#039;) on emailing send form if setup is on &amp;quot;phpmail&amp;quot;. Note: The application always try to translation the message considering the message is a translation key, before showing the translation or message if translation was not found.&lt;br /&gt;
&lt;br /&gt;
*MAILING_LIMIT_WARNING_NOPHPMAIL ► Show a warning message (var contains the &#039;&#039;&#039;message to show&#039;&#039;&#039;, or &#039;&#039;&#039;translation key&#039;&#039;&#039;) on emailing send form if setup is something else than &amp;quot;phpmail&amp;quot;. Note: The application always try to translation the message considering the message is a translation key, before showing the translation or message if translation was not found.&lt;br /&gt;
*EMAILING_USE_ADVANCED_SELECTOR ► Enable the advanced selector for recipients.&lt;br /&gt;
&lt;br /&gt;
*MAILING_LIMIT_SENDBYWEB ► 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;
*MAILING_LIMIT_SENDBYCLI ► 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;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Expense Report==&lt;br /&gt;
&lt;br /&gt;
*EXPENSEREPORT_ALLOW_OVERLAPPING_PERIODS ► Can enter several expense reports on same or overlapping date periods. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
*EXPENSEREPORT_USE_OLD_NUMBERING_RULE ► 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 1 ► (&amp;gt;=v7.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_USE_EXPENSE_IK ► 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;
*MAIN_USE_EXPENSE_RULE ► 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;
&lt;br /&gt;
*OVERRIDE_VAT_FOR_EXPENSE_REPORT ► Setting constant OVERRIDE_VAT_FOR_EXPENSE_REPORT to 1 will allow expense reports to show VAT even if the global VAT setting is off ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Export Module==&lt;br /&gt;
&lt;br /&gt;
*EXPORT_CSV_SEPARATOR_TO_USE ► 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;
*EXPORT_CSV_FORCE_CHARSET ► 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;
*EXPORTTOOL_CATEGORIES ► Can export categories (several lines) into one column with the &amp;quot;product export profile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*USE_STRICT_CSV_RULES ► 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;
*EXPORTS_SHARE_MODELS  ► Share export models between user&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Foundation Module==&lt;br /&gt;
&lt;br /&gt;
*MEMBER_URL_REDIRECT_SUBSCRIPTION ► Link called and shown when a member account is autocreated in member module by a guest user.&lt;br /&gt;
&lt;br /&gt;
*MEMBER_EXT_URL_SUBSCRIPTION_INFO ► 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;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Interventions Module==&lt;br /&gt;
&lt;br /&gt;
*FICHINTER_CLASSIFY_BILLED► 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;
*FICHINTER_DISABLE_DETAILS► Disable entry of details line on intervention. Can validate with no line.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Invoice Module==&lt;br /&gt;
&lt;br /&gt;
*MAIN_DEPOSIT_MULTI_TVA ► In deposits invoice, creates one line per VAT rate from the origin document ► (6.0)&lt;br /&gt;
&lt;br /&gt;
*FACTURE_SHOW_SEND_REMINDER ► 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;
*INVOICE_CAN_ALWAYS_BE_EDITED ► Allow to edit invoices even if payment was started. Note: If the module &amp;quot;BlockedLog&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;
*INVOICE_CAN_ALWAYS_BE_REMOVED ► Allow to always delete invoices (even if invoice is not last one). Note: If the module &amp;quot;BlockedLog&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;
*INVOICE_CAN_NEVER_BE_REMOVED ► Never allow to delete invoices (except draft invoices).&lt;br /&gt;
&lt;br /&gt;
*INVOICE_POSITIVE_CREDIT_NOTE ► All amounts on PDF credit notes are positive.&lt;br /&gt;
&lt;br /&gt;
*FACTURE_CHANGE_THIRDPARTY ► 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;
*FACTURE_USE_PROFORMAT ► Enable PROFORMAT invoices type.&lt;br /&gt;
&lt;br /&gt;
*FACTURE_DEPOSITS_ARE_JUST_PAYMENTS ► 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. WARNING: In a lot of european countries, using this option is not allowed.&lt;br /&gt;
&lt;br /&gt;
*FACTURE_SENDBYEMAIL_FOR_ALL_STATUS ► Can send invoice by email to customer even if invoice has status &amp;quot;draft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*INVOICE_CREDIT_NOTE_STANDALONE ► Start implementation to allow a credit note even without invoice (dangerous) ► (v3.9)&lt;br /&gt;
&lt;br /&gt;
*INVOICE_USE_SITUATION ► Enable the &amp;quot;situation invoice&amp;quot; feature&lt;br /&gt;
&lt;br /&gt;
*INVOICE_USE_SITUATION_CREDIT_NOTE ► 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;
*INVOICE_DISABLE_DEPOSIT ► Disable deposit invoices&lt;br /&gt;
&lt;br /&gt;
*INVOICE_DISABLE_REPLACEMENT ► Disable replacement invoices&lt;br /&gt;
&lt;br /&gt;
*INVOICE_DISABLE_CREDIT_NOTE ► Disable credit notes&lt;br /&gt;
&lt;br /&gt;
*MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT ► See PDF option&lt;br /&gt;
&lt;br /&gt;
*MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN ► See PDF options&lt;br /&gt;
&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;
&lt;br /&gt;
*INVOICE_ALLOW_EXTERNAL_DOWNLOAD ► When a PDF is generated, a share key is automatically set so the file can be downloaded using the share key. Use the tag __DIRECTDOWNLOAD_URL_INVOICE__ in email template to insert it. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
*INVOICE_POINTOFTAX_DATE ► Add Point of Tax Date on invoices for country-specific legality reasons ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
*FACTURE_ENABLE_NEGATIVE_LINES ► Allows to add negative lines to an invoice ► (v8.0.2+)&lt;br /&gt;
&lt;br /&gt;
*INVOICE_USE_DEFAULT_DOCUMENT ► 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;
&lt;br /&gt;
*FACTURE_REUSE_NOTES_ON_CREATE_FROM ► Reuse the Public Note and Private note of the previous object (Proposal,...) when creating the bill.&lt;br /&gt;
*MAIN_SHOW_FACNUMBER_IN_DISCOUNT_LIST ► Display the reference of credit notes in discount list when creating the bill.&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Look or Theme==&lt;br /&gt;
&lt;br /&gt;
*MAIN_FAVICON_URL ► favicon url&lt;br /&gt;
*MAIN_OPTIMIZEFORTEXTBROWSER ► Optimize output rendering for usage of a text browser (useful for blind people)&lt;br /&gt;
&lt;br /&gt;
*THEME_ELDY_DISABLE_IMAGE ► Disabled images of top menu for eldy theme. ► (v3.8+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_MENU_HIDE_UNAUTHORIZED ► Hide menu if logged in user is not authorized rather than just grey them&lt;br /&gt;
&lt;br /&gt;
*THEME_TOPMENU_STICKY_POSITION ► Option to fix top menu with eldy theme ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_EASTER_EGG_COMMITSTRIP ► Show a comic image from the CommitStrip website. Images are refreshed daily. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_STATUS_USES_CSS ► (v10.0+) Change status design using new style&lt;br /&gt;
&lt;br /&gt;
*MAIN_USE_NEW_TITLE_BUTTON ► (v10.0+) Use new list buttons design&lt;br /&gt;
*MAIN_APPLICATION_DISABLED_STATEBOARD ► Hide the stateboard of the main page&lt;br /&gt;
*MAIN_APPLICATION_DISABLED_WORKBOARD ► Hide the workboard of the main page&lt;br /&gt;
*MAIN_INCLUDE_GLOBAL_STATS_IN_OPENED_DASHBOARD ► (v11.0+) This conf will auto remove global stats box item if there are already in the new dashboard of opened elements and keep displayed stats on the opened item box (not only on mouse over)&lt;br /&gt;
*MAIN_USE_TOP_MENU_BOOKMARK_DROPDOWN ► (v11.0+) actually only for eldy theme, this conf move bookmark to top menu and use new design too&lt;br /&gt;
*MAIN_USE_TOP_MENU_SEARCH_DROPDOWN ► (v11.0+) actually only for eldy theme, this conf move search input  to top menu and use new design too&lt;br /&gt;
&lt;br /&gt;
*THEME_AGRESSIVENESS_RATIO ► (v11.0+) this conf can be used to increase/decrease agressiveness of colors. Value 0 is medium, value is between -100 (light grey colors) to +100 (very flashy colors)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==MultiCurrency==&lt;br /&gt;
&lt;br /&gt;
*MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION ► Enable CurrencyLayer API synchronization&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Order Module==&lt;br /&gt;
&lt;br /&gt;
*COMMANDE_REQUIRE_SOURCE =&amp;gt; Make the input field &amp;quot;Source of order&amp;quot; mandatory.&lt;br /&gt;
&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;
&lt;br /&gt;
*COMMANDE_CHANGE_THIRDPARTY =&amp;gt; Can change customer on orders&lt;br /&gt;
&lt;br /&gt;
*WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER =&amp;gt; When an order is created, the warehouse can be defined&lt;br /&gt;
&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;
*THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_ORDER =&amp;gt; Copy extrafields from thirdparty to order. ► (v11.0+)&lt;br /&gt;
*MAIN_USE_PROPAL_REFCLIENT_FOR_ORDER =&amp;gt; Copy customer reference from proposal to order. ► (v7.0+)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==PDF Options==&lt;br /&gt;
&lt;br /&gt;
*ADD_HTML_FORMATING_INTO_DESC_DOC ► Add more visibility to important informations like reference and serial number in desc. ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_ADD_PDF_BACKGROUND ► 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;
*MAIN_DISABLE_FORCE_SAVEAS ► 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;
*MAIN_DISABLE_PDF_AUTOUPDATE ► 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_DISABLE_PDF_COMPRESSION ► Disable PDF compression.&lt;br /&gt;
&lt;br /&gt;
*MAIN_DOCUMENTS_LOGO_HEIGHT ► Can force height of the logo on PDF.&lt;br /&gt;
&lt;br /&gt;
*MAIN_DOCUMENTS_WITH_PICTURE_WIDTH ► 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;
*MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS ► Adding the company address at the bottom of the page. Disabled by default&lt;br /&gt;
&lt;br /&gt;
*MAIN_GENERATE_PROPOSALS_WITH_PICTURE ► 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 ► 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 ► 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_GENERATE_DOCUMENTS_WITHOUT_VAT ► Disable VAT on generated documents. like for an association. (Works with crabe template)&lt;br /&gt;
&lt;br /&gt;
*MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN ► Hide column with VAT information but only column not total.&lt;br /&gt;
&lt;br /&gt;
*MAIN_INVERT_SENDER_RECIPIENT ► Invert sender and recipient in some PDF.&lt;br /&gt;
&lt;br /&gt;
*MAIN_ODT_AS_PDF ► 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;
*MAIN_ODT_AS_PDF_DEL_SOURCE ► 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_PDF_FORCE_FONT ► 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;
*MAIN_PDF_FORCE_FONT_SIZE ► To force size of font (by default 10). For example &amp;quot;&amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;&amp;quot; ► (v11.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_PDF_FREETEXT_HEIGHT ► Change height of space reserved to output the free text.&lt;br /&gt;
&lt;br /&gt;
*MAIN_PDF_TITLE_BACKGROUND_COLOR ► 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;
*MAIN_PDF_USE_LARGE_LOGO ► Use the original logo with its higher resolution into the PDF instead of the small thumb. This may lead to very very large PDF !&lt;br /&gt;
&lt;br /&gt;
*MAIN_USE_BACKGROUND_ON_PDF ► 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;
*MAIN_USE_COMPANY_NAME_OF_CONTACT ► Use contact name and information rather than company&lt;br /&gt;
&lt;br /&gt;
*MAIN_PDF_ADDALSOTARGETDETAILS ► 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;
*MAIN_TVAINTRA_IN_SOURCE_ADDRESS ► Show VAT N° in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING ► Add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
*MAIN_PROFID1_IN_SOURCE_ADDRESS ► 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;
*MAIN_PROFID2_IN_SOURCE_ADDRESS ► 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;
*MAIN_PROFID3_IN_SOURCE_ADDRESS ► 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;
*MAIN_PROFID4_IN_SOURCE_ADDRESS ► 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;
*MAIN_PROFID5_IN_SOURCE_ADDRESS ► 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;
*MAIN_PROFID6_IN_SOURCE_ADDRESS ► Show Professional ID 6 in source address of PDF to comply with legalities in certain countries ► (v8.0.1+)&lt;br /&gt;
&lt;br /&gt;
*PDF_SHOW_PROJECT ► 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 ► 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;
*PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES ► Modify the use/position of Supplier Ref/Internal Ref with the item Label (name) on PDF documents.&lt;br /&gt;
&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;
*PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME ► Include alternative/alias name into name on PDF.&lt;br /&gt;
&lt;br /&gt;
*PDF_USE_1A ► PDF files produced by dolibarr respect PDF/A standard ► (v?)&lt;br /&gt;
&lt;br /&gt;
*PDF_SECURITY_ENCRYPTION ► Encrypt PDF produced by dolibarr ► (v?) . See additional parameters :PDF_SECURITY_ENCRYPTION_RIGHTS (block &#039;modify&#039; or &#039;copy&#039;) - PDF_SECURITY_ENCRYPTION_USERPASS - PDF_SECURITY_ENCRYPTION_OWNERPASS (random if not specified) - PDF_SECURITY_ENCRYPTION_STRENGTH (0 = RC4 40 bit; 1 = RC4 128 bit; 2 = AES 128 bit; 3 = AES 256 bit) - PDF_SECURITY_ENCRYPTION_PUBKEYS Array of recipients containing public-key certificates (&#039;c&#039;) and permissions (&#039;p&#039;) - For example: array(array(&#039;c&#039; =&amp;gt; &#039;file://../examples/data/cert/tcpdf.crt&#039;, &#039;p&#039; =&amp;gt; array(&#039;print&#039;)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Point of Sale (POS)==&lt;br /&gt;
&lt;br /&gt;
*CASHDESK_SHOW_KEYPAD ► Show a mouse key pad into the &#039;Simple Point of Sale&#039; module.&lt;br /&gt;
&lt;br /&gt;
*POS_ADDON ► 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 use for invoice ref definition 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 POS_NUMBERING_TERRE_FORCE_PREFIX and POS_NUMBERING_MARS_FORCE_PREFIX variable to change the prefix used).&lt;br /&gt;
&lt;br /&gt;
*TAKEPOS_ENABLE_SUMUP ► Enable the compatibility of TakePOS with the card reader terminal [https://SumUp.fr SumUp]&lt;br /&gt;
 &lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Products Module==&lt;br /&gt;
&lt;br /&gt;
*CATEGORY_GRAPHSTATS_ON_PRODUCTS ► Show graph of products with categories and totals in Products Area screen&lt;br /&gt;
&lt;br /&gt;
*MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE ► Avoid customs code and country of origin to be set as product description when added to Propal/Order/Invoice&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_ADD_TYPE_IN_DOCUMENTS ► 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;
*PRODUCT_DONOTSEARCH_ANYWHERE ► 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;
*MAIN_DIRECT_STATUS_UPDATE ► 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;
*MAIN_SEARCH_PRODUCT_BY_FOURN_REF ► (&amp;gt;= 8.0) Allow to search a product by supplier ref in document&#039;s add line form.&lt;br /&gt;
&lt;br /&gt;
*MAIN_DISABLE_FREE_LINES ► Disallow using free lines to add line in documents ► (&amp;gt;= 8.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_SHOW_PRODUCT_ACTIVITY_TRIM ► 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;
*PRODUIT_DESC_IN_LIST ► Show long description of product/service into lists.&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_DISABLE_PROPAGATE_CUSTOMER_PRICES_ON_CHILD_COMPANIES ► Disable propagation of prices per customer from a customer to its child company.&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_DISABLE_SIZE ► Disable size in product card.&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_DISABLE_LENGTH ► Disable length in product card ► v4.0+&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_DISABLE_SURFACE ► Disable surface in product card. ► v4.0+&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_DISABLE_VOLUME ► Disable volume in product card.&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_DISABLE_CUSTOM_INFO ► Disable custom info (custom code and country origin) in product/service card.&lt;br /&gt;
&lt;br /&gt;
*PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL ► 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;
*PRODUCT_MAX_LENGTH_COMBO ► Limit the length of the label displayed when adding lines in proposals/invoices/orders&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_MAX_VISIBLE_PHOTO ► 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;
*PRODUIT_PDF_MERGE_PROPAL ► Enable module Propal merge product PDF&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_USE_OLD_PATH_FOR_PHOTO ► Ask dolibarr to check also old path (before 3.7) where photos were stored.&lt;br /&gt;
&lt;br /&gt;
*PRODUCT_USE_UNITS ► Enable units from dictionary in product/service card.&lt;br /&gt;
&lt;br /&gt;
*RESOURCE_ON_PRODUCTS_RESOURCE_ON_SERVICES ►Allow to affect ressources on products/services (v10.0+)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Projects Module==&lt;br /&gt;
&lt;br /&gt;
*PROJECT_DISABLE_UNLINK_FROM_OVERVIEW ► Enable removing the button from a link in the project overview. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
*PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS ► 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;
*PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS ► 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;
*PROJECT_SHOW_REF_INTO_LISTS ► 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;
*PROJECT_HIDE_UNSELECTABLES ► Hide into select list, all project that we can&#039;t select (closed or draft)&lt;br /&gt;
&lt;br /&gt;
*PROJECT_HIDE_TASKS ► Hide tasks. For user using project only as an analytics key and not using tasks.&lt;br /&gt;
&lt;br /&gt;
*PROJECT_LIST_SHOW_STARTDATE ► Shows start date of projects in project lists.&lt;br /&gt;
&lt;br /&gt;
*PROJECT_LINK_ON_OVERWIEW_DISABLED ► Hide the &amp;quot;link to&amp;quot; form on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
*PROJECT_CREATE_ON_OVERVIEW_DISABLED ► Hide the &amp;quot;create ...&amp;quot; button on the overview page ► (4.0)&lt;br /&gt;
&lt;br /&gt;
*PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY ► Can link an object to a project of another thirdparty&lt;br /&gt;
&lt;br /&gt;
*PROJECT_ALLOW_COMMENT_ON_TASK ► Add comment feature on project task&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Proposals Module==&lt;br /&gt;
&lt;br /&gt;
*PROPAL_CLONE_ON_CREATE_PAGE ► 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;
*MAIN_PROPAL_CHOOSE_ODT_DOCUMENT ► 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;
*MAIN_GENERATE_PROPOSALS_WITH_PICTURE ► 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;
*PROPAL_DISABLE_SIGNATURE ► Do no show the box for signature.&lt;br /&gt;
&lt;br /&gt;
*WORKFLOW_PROPAL_CAN_CLASSIFY_BILLED_WITHOUT_INVOICES ► 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;
*PRODUIT_PDF_MERGE_PROPAL ► 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;
*PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD ► 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;
*MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING ► add optional esign field in pdf propal ► (v8.0+)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Services Module==&lt;br /&gt;
&lt;br /&gt;
*SERVICE_ARE_ECOMMERCE_200238EC ► 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;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Shipments==&lt;br /&gt;
&lt;br /&gt;
*STOCK_WAREHOUSE_NOT_REQUIRED_FOR_SHIPMENTS ► If set, you can add a shipment line, with no stock source defined. ► (&amp;gt;= 8.0.1)&lt;br /&gt;
&lt;br /&gt;
*SHIPMENT_GETS_ALL_ORDER_PRODUCTS ► Add all order lines in shipment, including the one with 0 in quantity&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Stocks==&lt;br /&gt;
&lt;br /&gt;
*CASHDESK_FORCE_STOCK_ON_BILL ► Option to force decrease of stock whatever is user setup&lt;br /&gt;
&lt;br /&gt;
*SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED ► Disable stock dispatch when total expected was already received&lt;br /&gt;
*STOCK_SUPPORTS_SERVICES ► Stock support services&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Suppliers Module==&lt;br /&gt;
&lt;br /&gt;
*FOURN_PRODUCT_AVAILABILITY ► 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;
*RELOAD_PAGE_ON_SUPPLIER_CHANGE ► 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;
*SUPPLIER_ORDER_AUTOADD_USER_CONTACT ► Add user approving supplier order as a contact automatically.&lt;br /&gt;
&lt;br /&gt;
*SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID ► 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;
*SUPPLIER_ORDER_USE_DISPATCH_STATUS ► Add a status on each dispatch order line when receiving products from suppliers ► (v4.0+)&lt;br /&gt;
&lt;br /&gt;
*SUPPLIER_ORDER_NO_DIRECT_APPROVE ► 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;
*SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY ► 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;
*SUPPLIER_ORDER_EDIT_BUYINGPRICE_DURING_RECEIPT ► 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;
*SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY ► Restrict selection of products in supplier proposal to only those with a buying price defined for that supplier. ► (v6.0+)&lt;br /&gt;
&lt;br /&gt;
*DISPLAY_DISCOUNTED_SUPPLIER_PRICE ► Allow to display discounted supplier price when searching product in supplier documents ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
*MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER ►  Allow to change the supplier on a draft supplier order ► (v10.0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==Third Parties Module==&lt;br /&gt;
&lt;br /&gt;
*COMPANY_AQUARIUM_CLEAN_REGEX ► 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;
*MAIN_FORCE_DEFAULT_STATE_ID ►  &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;
*SOCIETE_DISABLE_CUSTOMERS ► Remove all menu and features related to customers&lt;br /&gt;
&lt;br /&gt;
*SOCIETE_DISABLE_PROSPECTS ► Remove all menu and features related to prospects&lt;br /&gt;
&lt;br /&gt;
*SOCIETE_DISABLE_STATE ► Do not use field &amp;quot;state/province&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*THIRDPARTY_NOTCUSTOMERPROSPECT_BY_DEFAULT ► 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;
*THIRDPARTY_NOTSUPPLIER_BY_DEFAULT ► 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;
*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;
&lt;br /&gt;
*THIRDPARTY_DEFAULT_CREATE_CONTACT ► With this setting as 1 the option is set for third parties to be created WITH the child contact ► (v5.0+)&lt;br /&gt;
&lt;br /&gt;
*THIRDPARTY_DEFAULT_USEVAT ► 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;
*THIRDPARTY_DEFAULT_USELOCALTAX1 ► 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;
*THIRDPARTY_DEFAULT_USELOCALTAX2 ► 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;
*THIRDPARTY_INCLUDE_PARENT_IN_LINKTO ► 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;
*THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO ► 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;
*SOCIETE_ASK_FOR_SHIPPING_METHOD ► Shipping method can be predefined on customer card and will be used as default on order creation&lt;br /&gt;
&lt;br /&gt;
*THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD ► 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;
*MAIN_DISABLE_RESTRICTION_ON_THIRDPARTY_FOR_EXTERNAL ► 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;
*THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER ► Possible to add Categories to third parties that are not customer, prospect or supplier.&lt;br /&gt;
*THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION ► Enabled contact creation on third-party create card&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==VAT Report==&lt;br /&gt;
&lt;br /&gt;
*MAIN_INCLUDE_ZERO_VAT_IN_REPORTS ► Include lines with VAT to 0% (for &amp;quot;auto-liquidation&amp;quot; in EEC) ► (v8.0.3+)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WYSIWYG Editor==&lt;br /&gt;
&lt;br /&gt;
*FCKEDITOR_ENABLE_DETAILS_FULL ► 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;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==STRIPE Module==&lt;br /&gt;
&lt;br /&gt;
*STRIPE_FORCE_VERSION ► Force the STRIPE version ► (v11+)&lt;br /&gt;
&lt;br /&gt;
[[#Top|(back to top)]]&lt;br /&gt;
&lt;br /&gt;
==For SaaS / Cloud hosting integrators==&lt;br /&gt;
&lt;br /&gt;
The following options are useless for a common usage of Dolibarr. But they are usefull if you plan to host / provide Dolibarr instances as Software As A Service (SAAS) to your customers.&lt;br /&gt;
&lt;br /&gt;
*To avoid bad use of the emailing module, it is recommanded to set the option MAILING_NO_USING_PHPMAIL to 1 (This option is described previously). Also you can complete the message visible by customers when they try to setup the SMTP credentials of their Dolibarr by using the constant MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS (This option is described previously). For example, you can point to a FAQ on your website.&lt;br /&gt;
&lt;br /&gt;
*MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS: Set here the ip of list of ip where your Dolibarr instances are hosted. So when your customer go into the setup area of email, a message will explain him how to setup its SPF record for its email domain. This is to avoid to have its emails, sent from its Dolibarr instance, fails due to strict antispam rule of some emailing servers.&lt;br /&gt;
&lt;br /&gt;
*MAIN_ALWAYS_CREATE_LOCK_AFTER_LAST_UPGRADE: If set, when you launch upgrades of your customer instances, you are sure that the upgrade process recreate automatically the file install.lock so the administration tools like install.php and repair.php can&#039;t be used on your customer instance (until the lock file is deleted).&lt;br /&gt;
&lt;br /&gt;
*MAIN_FILECHECK_LOCAL_SUFFIX and MAIN_FILECHECK_LOCAL_EXT: If you offer a customized or patched version of Dolibarr, when the user will use the tool to check the integrity of files, the default xml file name used for signature checking will be the official file provided by the Dolibarr team, so it does not includes your own changes. To have the suggested signature file being your own file, you can set the constant MAIN_FILECHECK_LOCAL_SUFFIX to a suffix. For example, set this to &amp;quot;&#039;&#039;&#039;-mysaassolution&#039;&#039;&#039;&amp;quot;. So, when the user will use the file integrity tool, the default file to check for signature will be &amp;quot;&#039;&#039;&#039;/install/filelist-10.0.2-mysaassolution.xml&#039;&#039;&#039;&amp;quot; instead of &amp;quot;&#039;&#039;&#039;/install/filelist-10.0.2.xml&#039;&#039;&#039;&amp;quot;. All you have to do is generate the signature file &#039;&#039;&#039;mysaassolution&#039;&#039;&#039; using the tool &#039;&#039;&#039;build/generate_filelist_xml.php&#039;&#039;&#039; and put this file into the install directory of your customer instance. Doing this, your customer, and yourself, will be able to check if a file was modified without being disturbed by false alerts due to your customized files or patches (they will be included in the signature used for check). Also, if you want to zip the customized signature file into &amp;quot;&#039;&#039;&#039;/install/filelist-10.0.2-mysaassolution.xml.zip&#039;&#039;&#039;&amp;quot;, you can set the constant MAIN_FILECHECK_LOCAL_EXT to &#039;.zip&#039;.&lt;br /&gt;
&lt;br /&gt;
*WEBSITE_REPLACE_INFO_ABOUT_USAGE_WITH_WEBSERVER: Put here a text a a translation key of a text to show when the user will use the feature &amp;quot;Deploy&amp;quot; when he want to deploy a website done with Dolibarr CMS. So you can, for example, show him a message that this feature is not part of is subscription and putting a website online may need a complementary subscription.&lt;br /&gt;
&lt;br /&gt;
*CRON_DISABLE_KEY_CHANGE: When you provide an instance to a customer, you probably also add an entry in the cron of this user so Dolibarr batch and scheduler can work correctly. For security purpose, it may have a security key that is inside the command line into the cron entry and this entry must match the value defined into Dolibarr setup (setup of module &#039;Scheduled Jobs&#039;). Because, a customer of a Saas platform will probably have no access to edit the cron file, it is also import that he has no way to edit the key into the Dolibarr setup, so the key in the cron command line will always match the key in Dolibarr setup, and the Dolibarr batches will executed without security errors. To be sure, the customer does not change the value, you can set this constant to 1 into the table [[Table_llx_const]].&lt;br /&gt;
&lt;br /&gt;
*SYSLOG_DISABLE_LOGHANDLER_SYSLOG: Set this to 1 to disable usage of syslog (having all customer instances logging in the same system file is not a good idea).&lt;/div&gt;</summary>
		<author><name>Dolichicken</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=First_setup&amp;diff=44489</id>
		<title>First setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=First_setup&amp;diff=44489"/>
		<updated>2019-10-09T10:54:16Z</updated>

		<summary type="html">&lt;p&gt;Dolichicken: Typo&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:Premiers_paramétrages]]&lt;br /&gt;
[[de:Grundeinstellungen]]&lt;br /&gt;
[[es:Primeras_configuraciones]]&lt;br /&gt;
[[zh:设置]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Admin]]&lt;br /&gt;
[[Category:Admin_en]]&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
&lt;br /&gt;
After completing the initial installation, you must configure parameters in Dolibarr to match your needs.&lt;br /&gt;
&lt;br /&gt;
=Company/Foundation=&lt;br /&gt;
The first mandatory step is to define your company/foundation information. For this, from home page, choose menu  &amp;quot;&#039;&#039;&#039;Home-&amp;gt;Setup-&amp;gt;Company/Foundation&#039;&#039;&#039;&amp;quot; and add the information for your company/foundation.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Name:&#039;&#039;&#039; Name of your company/foundation&lt;br /&gt;
*&#039;&#039;&#039;Logo:&#039;&#039;&#039; Add here a logo of your company (.png, .jpg or .gif). There is no recommended size but the recommended format is png with NO transparent layer (Dolibarr uses FPDF that does not support this format).&lt;br /&gt;
*&#039;&#039;&#039;Country:&#039;&#039;&#039; Define your country: other options depend on this selection.&lt;br /&gt;
*&#039;&#039;&#039;VAT Management:&#039;&#039;&#039; Define how you manage VAT (or not).&lt;br /&gt;
&lt;br /&gt;
=Modules=&lt;br /&gt;
The activation of modules is the second mandatory step. Which modules you will activate depends on what you want to do with Dolibarr. In most cases, you may want to use all modules. You have to activate each module one by one. For example, to manage a company, you might activate at least modules Third party, Invoices, and Products, but probably many more.&lt;br /&gt;
&lt;br /&gt;
To activate a module, go to page &amp;quot;&#039;&#039;&#039;Home-&amp;gt;Setup-&amp;gt;Modules&#039;&#039;&#039;&amp;quot; and click the button &#039;on/off&#039; in the &amp;quot;Status&amp;quot; column to enable it.&lt;br /&gt;
&lt;br /&gt;
The list of standard modules is defined on page [[:Category:List of Modules|List of Modules]].&lt;br /&gt;
&lt;br /&gt;
If you are unsure of the function of a module, you may activate it and see what new menu item appears in Dolibarr (the horizontal bar), also after activating a module, check that you grant to yourself permissions on new features that were enabled. You can activate or deactivate a module when you want.&lt;br /&gt;
&lt;br /&gt;
Once a module has been activated, it may need further configuration (click on the setup icon that appears on the right of module line if a module needs its own setup). See [[:Category:List of Modules|documentation of module]] for more information.&lt;br /&gt;
&lt;br /&gt;
=Menus=&lt;br /&gt;
Choose here which menu manager you want to use for internal and external users. The menu manager changes the labels, orders and organization of the left and top menus.&lt;br /&gt;
See page [[Menus system]] for more information.&lt;br /&gt;
&lt;br /&gt;
=Display=&lt;br /&gt;
On this page, you can set the default language of application and the look and feel of screens. In a first use, you can keep everything with default values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; Activating multilanguage option will allow you to be able to set the preferred language of customers, to print their Invoice/Proposal/Order in their own language. Product translations will also be available.&lt;br /&gt;
&lt;br /&gt;
=Other (Boxes, Alerts, Security, Limits and accuracy, Emails, SMS, Dictionary setup...)=&lt;br /&gt;
Other entries in Setup menu are advanced options. You can ignore them if you want.&lt;br /&gt;
&lt;br /&gt;
*[[Setup Boxes]]&lt;br /&gt;
*[[Setup Alerts]]&lt;br /&gt;
*[[Setup Security]]&lt;br /&gt;
*[[Setup Limits and accuracy]]&lt;br /&gt;
*[[Setup PDF]]&lt;br /&gt;
*[[Setup EMails]]&lt;br /&gt;
*[[Setup SMS]]&lt;br /&gt;
*[[Setup Dictionnary|Setup Dictionary]]&lt;br /&gt;
*[[Setup Other]]&lt;br /&gt;
&lt;br /&gt;
=Users=&lt;br /&gt;
The last step is to create users and assign permissions. Almost all the modules even activated earlier, are not accessible if you do not give permissions. To do this, you can go to the menu &#039;&#039;&#039;Home -&amp;gt; Users &amp;amp; Groups&#039;&#039;&#039; to define users and their rights. Attention, you should consider to check and reset the user rights when you enable a new module. The list of rights available depends on the activated modules (see above). It is recommended to configure permissions after activating the modules you want to use. For certain actions, if you do not have the rights to do an action, Dolibarr will not show you the action. You might miss some useful or important features. &#039;&#039;&#039;To give rights to a user or yourself, if you are an administrator, go to Home -&amp;gt; Users &amp;amp; Groups, select the desired user, then click on its &#039;Permission&#039; tab.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can avoid these configuration steps for each newly created user, by configuring the default rights (understand rights allocated automatically each time a new user created) by configuring the default permissions on the menu [[Setup Security]].&lt;/div&gt;</summary>
		<author><name>Dolichicken</name></author>
	</entry>
</feed>